Changeset 459 for trunk/src/SDPol.cc


Ignore:
Timestamp:
02/17/05 01:43:54 (19 years ago)
Author:
kil064
Message:

make templatyed function SDPolUtil::stokesData to handle stokesMask
and stokesTsys calculation. Delete the non-templated versions.

In SDStokesEngone track interface changes in Table system (some bug fixes for me)

Mo

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/SDPol.cc

    r446 r459  
    5757                           const String& inputColumnName)
    5858: BaseMappedArrayEngine<Float,Float> (outputColumnName, inputColumnName)
    59 {}
     59{
     60   setWritable(False);
     61}
    6062
    6163
     
    6365: BaseMappedArrayEngine<Float,Float> ()
    6466{
     67    setWritable(False);
    6568    if (spec.isDefined("OUTPUTNAME")  &&  spec.isDefined("INPUTNAME")) {
    6669        setNames (spec.asString("OUTPUTNAME"), spec.asString("INPUTNAME"));
     
    9598String SDStokesEngine::dataManagerName() const
    9699{
    97     return sourceName();
     100    return virtualName();
    98101}
    99102
     
    101104{
    102105    Record spec;
    103     spec.define ("OUTPUTNAME", sourceName());    // Ger uses opposite meaning for source/target
    104     spec.define ("INPUTNAME", targetName());
     106    spec.define ("OUTPUTNAME", virtualName());
     107    spec.define ("INPUTNAME", storedName());
    105108    return spec;
    106109}
     
    148151    throw(AipsError("This Virtual Column is not writable"));
    149152}
    150 
    151 
    152 
    153153
    154154   
     
    320320      return Float(0.5)*(I-V);
    321321   }
    322 }
    323 
    324 Array<Bool> SDPolUtil::stokesMask (Array<Bool> rawFlags,
    325                                    Bool doLinear)
    326 //
    327 // Generate mask for each Stokes parameter from the
    328 // raw flags.  This is a lot of computational work and may
    329 // not be worth the effort.
    330 //
    331 {
    332    IPosition shapeIn = rawFlags.shape();
    333    uInt nPol = shapeIn(asap::PolAxis);
    334    const uInt nDim = shapeIn.nelements();
    335    Array<Bool> stokesFlags;
    336 //
    337    IPosition start(nDim,0);
    338    IPosition end(shapeIn-1);
    339    IPosition shapeOut = shapeIn;
    340 //
    341    if (doLinear) {
    342       if (nPol==1) {
    343          stokesFlags.resize(shapeOut);
    344          stokesFlags = rawFlags;
    345       } else if (nPol==2 || nPol==4) {
    346 
    347 // Set shape of output array
    348 
    349          if (nPol==2) {
    350             shapeOut(asap::PolAxis) = 1;
    351          } else {
    352             shapeOut(asap::PolAxis) = 4;
    353          }
    354          stokesFlags.resize(shapeOut);
    355 
    356 // Get reference slices and assign/compute
    357 
    358          start(asap::PolAxis) = 0;
    359          end(asap::PolAxis) = 0;
    360          Array<Bool> M1In = rawFlags(start,end);
    361 //
    362          start(asap::PolAxis) = 1;
    363          end(asap::PolAxis) = 1;
    364          Array<Bool> M2In = rawFlags(start,end);
    365 //
    366          start(asap::PolAxis) = 0;
    367          end(asap::PolAxis) = 0;
    368          Array<Bool> M1Out = stokesFlags(start,end);
    369          M1Out = M1In && M2In;                             // I
    370 //
    371          if (nPol==4) {   
    372             start(asap::PolAxis) = 2;
    373             end(asap::PolAxis) = 2;
    374             Array<Bool> M3In = rawFlags(start,end);
    375 //
    376             start(asap::PolAxis) = 3;
    377             end(asap::PolAxis) = 3;
    378             Array<Bool> M4In = rawFlags(start,end);
    379 //
    380             start(asap::PolAxis) = 1;
    381             end(asap::PolAxis) = 1;
    382             Array<Bool> M2Out = stokesFlags(start,end);
    383             M2Out = M1Out;                                  // Q
    384 //
    385             start(asap::PolAxis) = 2;
    386             end(asap::PolAxis) = 2;
    387             Array<Bool> M3Out = stokesFlags(start,end);
    388             M3Out = M3In;                                   // U
    389 //
    390             start(asap::PolAxis) = 3;
    391             end(asap::PolAxis) = 3;
    392             Array<Bool> M4Out = stokesFlags(start,end);
    393             M4Out = M4In;                                   // V
    394          }
    395       } else {
    396          throw(AipsError("Can only handle 1,2 or 4 polarizations"));
    397       }
    398    } else {
    399       throw (AipsError("Only implemented for Linear polarizations"));
    400    }
    401 //
    402    return stokesFlags;
    403322}
    404323
Note: See TracChangeset for help on using the changeset viewer.