Changeset 459 for trunk/src/SDPol.h
- Timestamp:
- 02/17/05 01:43:54 (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/SDPol.h
r446 r459 35 35 #include <casa/aips.h> 36 36 #include <casa/Arrays/Array.h> 37 #include <casa/Arrays/ArrayMath.h> 38 #include <casa/Arrays/ArrayLogical.h> 37 39 #include <measures/Measures/Stokes.h> 38 40 #include <tables/Tables/BaseMappedArrayEngine.h> … … 40 42 41 43 namespace asap { 42 43 class SDPolUtil44 {45 public:46 // Convert Q and U to polarized intensity47 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 should58 // already be setup to access the Array at the current cursor location59 // (beam, IF, chanells; see SDMemTable). This function will modify the asap::PolAxis60 // 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 V65 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 masks70 // 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 81 44 82 45 class SDStokesEngine : public casa::BaseMappedArrayEngine<casa::Float, casa::Float> … … 84 47 //# Make members of parent class known. 85 48 public: 86 using casa::BaseMappedArrayEngine<casa::Float,casa::Float>:: sourceName;49 using casa::BaseMappedArrayEngine<casa::Float,casa::Float>::virtualName; 87 50 protected: 88 using casa::BaseMappedArrayEngine<casa::Float,casa::Float>:: targetName;51 using casa::BaseMappedArrayEngine<casa::Float,casa::Float>::storedName; 89 52 using casa::BaseMappedArrayEngine<casa::Float,casa::Float>::table; 90 53 using casa::BaseMappedArrayEngine<casa::Float,casa::Float>::roColumn; … … 95 58 // correlations 96 59 SDStokesEngine (const casa::String& virtualColumnName, 97 const casa::String& sourceColumnName);60 const casa::String& sourceColumnName); 98 61 99 62 // Construct from a record specification as created by getmanagerSpec(). … … 180 143 }; 181 144 145 146 147 class 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 191 private: 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 182 205 } // namespace 183 206
Note: See TracChangeset
for help on using the changeset viewer.