Changeset 459 for trunk/src/SDPol.h


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.h

    r446 r459  
    3535#include <casa/aips.h>
    3636#include <casa/Arrays/Array.h>
     37#include <casa/Arrays/ArrayMath.h>
     38#include <casa/Arrays/ArrayLogical.h>
    3739#include <measures/Measures/Stokes.h>
    3840#include <tables/Tables/BaseMappedArrayEngine.h>
     
    4042
    4143namespace asap {
    42 
    43 class SDPolUtil
    44 {
    45  public:
    46 // Convert Q and U to polarized intensity
    47   static casa::Array<casa::Float> polarizedIntensity (const casa::Array<casa::Float>& Q,
    48                                                       const casa::Array<casa::Float>& U);
    49 // Convert Q and U to polarized position angle (degrees)
    50   static casa::Array<casa::Float> positionAngle (const casa::Array<casa::Float>& Q,
    51                                                  const casa::Array<casa::Float>& U);
    52 // Rotate phase of Complex correlation C3+iC4 by phase (degrees)
    53   static void rotateXYPhase (casa::Array<casa::Float>& C3,
    54                              casa::Array<casa::Float>& C4,
    55                              casa::Float phase);
    56 
    57 // Get Stokes slices from the Array.  Start and End should
    58 // already be setup to access the Array at the current cursor location
    59 // (beam, IF, chanells; see SDMemTable).  This function will modify the asap::PolAxis
    60 // location to access the desired Stokes slice ("I", "Q", "U", "V")
    61   static casa::Array<casa::Float> getStokesSlice (casa::Array<casa::Float>& input, const casa::IPosition& start,
    62                                                   const casa::IPosition& end, const casa::String& stokes);
    63 
    64 // Compute Circular polarization RR or LL from I and V
    65   static casa::Array<casa::Float> circularPolarizationFromStokes (casa::Array<casa::Float>& I,
    66                                                                   casa::Array<casa::Float>& V, 
    67                                                                   casa::Bool doRR);
    68 
    69 // Compute Mask for STokes parameters from raw correlation masks
    70 // Gets output shape right (e.g. XX,YY -> I)
    71   static casa::Array<casa::Bool> stokesMask (casa::Array<casa::Bool> rawFlags,
    72                                              casa::Bool doLinear);
    73 
    74 // Find the Stokes type for the given polarization axis (0,1,2,3)
    75 // You can ask for STokes or raw correltions (linear or circular)
    76    static casa::Stokes::StokesTypes convertStokes(casa::Int val, casa::Bool toStokes,
    77                                                   casa::Bool linear);
    78 };
    79 
    80 
    8144
    8245class SDStokesEngine : public casa::BaseMappedArrayEngine<casa::Float, casa::Float>
     
    8447  //# Make members of parent class known.
    8548public:
    86   using casa::BaseMappedArrayEngine<casa::Float,casa::Float>::sourceName;
     49  using casa::BaseMappedArrayEngine<casa::Float,casa::Float>::virtualName;
    8750protected:
    88   using casa::BaseMappedArrayEngine<casa::Float,casa::Float>::targetName;
     51  using casa::BaseMappedArrayEngine<casa::Float,casa::Float>::storedName;
    8952  using casa::BaseMappedArrayEngine<casa::Float,casa::Float>::table;
    9053  using casa::BaseMappedArrayEngine<casa::Float,casa::Float>::roColumn;
     
    9558    // correlations
    9659    SDStokesEngine (const casa::String& virtualColumnName,
    97                const casa::String& sourceColumnName);
     60                    const casa::String& sourceColumnName);
    9861
    9962    // Construct from a record specification as created by getmanagerSpec().
     
    180143};
    181144
     145
     146
     147class SDPolUtil
     148{
     149 public:
     150// Convert Q and U to linearly polarized intensity
     151  static casa::Array<casa::Float> polarizedIntensity (const casa::Array<casa::Float>& Q,
     152                                                      const casa::Array<casa::Float>& U);
     153// Convert Q and U to linearly polarized position angle (degrees)
     154  static casa::Array<casa::Float> positionAngle (const casa::Array<casa::Float>& Q,
     155                                                 const casa::Array<casa::Float>& U);
     156
     157// Rotate phase of Complex correlation C3+iC4 by phase (degrees)
     158  static void rotateXYPhase (casa::Array<casa::Float>& C3,
     159                             casa::Array<casa::Float>& C4,
     160                             casa::Float phase);
     161
     162// Get Stokes slices from the Array.  Start and End should
     163// already be setup to access the Array at the current cursor location
     164// (beam, IF, Pol; see SDMemTable).   The desired Stokes
     165// is specfied in the string from "I", "Q", "U", "V"
     166  static casa::Array<casa::Float> getStokesSlice (casa::Array<casa::Float>& input, const casa::IPosition& start,
     167                                                  const casa::IPosition& end, const casa::String& stokes);
     168
     169// Compute Circular polarization RR or LL from I and V
     170  static casa::Array<casa::Float> circularPolarizationFromStokes (casa::Array<casa::Float>& I,
     171                                                                  casa::Array<casa::Float>& V, 
     172                                                                  casa::Bool doRR);
     173
     174
     175// Compute value for STokes parameters by combining the raw correlation values
     176// The output shape may change from the input shape according to
     177// XX or YY          -> I
     178// XX,YY             -> I
     179// XX,YY,R(XY),I(XY) -> I,Q,U,V
     180// Bool for mask
     181// Float for TSys
     182  template <class T>
     183  static casa::Array<T> stokesData (casa::Array<T>& rawData, casa::Bool doLinear);
     184 
     185
     186// Find the Stokes type for the given polarization axis (0,1,2,3)
     187// You can ask for STokes or raw correltions (linear or circular)
     188   static casa::Stokes::StokesTypes convertStokes(casa::Int val, casa::Bool toStokes,
     189                                                  casa::Bool linear);
     190
     191private:
     192  static casa::Array<casa::Float> andArrays (const casa::Array<casa::Float>& in1,
     193                                             const casa::Array<casa::Float>& in2)
     194                                             {return (in1+in2)/casa::Float(2.0);}
     195
     196  static casa::Array<casa::Bool> andArrays (const casa::Array<casa::Bool>& in1,
     197                                            const casa::Array<casa::Bool>& in2)
     198                                            {return in1&&in2;}
     199};
     200
     201
     202
     203
     204
    182205} // namespace
    183206
Note: See TracChangeset for help on using the changeset viewer.