Changeset 716 for trunk/src/SDMath.h
- Timestamp:
- 11/17/05 14:37:33 (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/SDMath.h
r653 r716 39 39 40 40 #include "SDDefs.h" 41 #include "SDLog.h" 41 42 42 43 class casa::Table; … … 48 49 template<class T> class casa::ROArrayColumn; 49 50 50 51 52 51 namespace asap { 53 52 54 53 class SDMemTable; 55 54 class SDDataDesc; 56 57 class SDMath { 58 59 public: 60 61 // Default constructor 62 SDMath(); 63 64 // Copy Constructor (copy semantics) 65 SDMath (const SDMath& other); 66 67 // Assignment (copy semantics) 68 SDMath &operator=(const SDMath& other); 69 70 // Destructor 71 ~SDMath(); 72 73 // Binary Table operators. op=ADD, SUB, MUL, DIV, QUOTIENT 74 casa::CountedPtr<SDMemTable> binaryOperate (const casa::CountedPtr<SDMemTable>& left, 75 const casa::CountedPtr<SDMemTable>& right, 76 const casa::String& op, casa::Bool preserve, 77 casa::Bool tSys) const; 78 79 // Average in time 80 casa::CountedPtr<SDMemTable> 81 average(const std::vector<casa::CountedPtr<SDMemTable> >& in, 82 const casa::Vector<casa::Bool>& mask, 83 casa::Bool scanAverage, 84 const casa::String& weightStr, 85 casa::Bool align=casa::False) const; 86 87 // Statistics. If row<0, all rows are done otherwise, just the 88 // specified row. 89 std::vector<float> statistic(const casa::CountedPtr<SDMemTable>& in, 90 const casa::Vector<casa::Bool>& mask, 91 const casa::String& which, casa::Int row) const; 92 55 56 class SDMath : private SDLog { 57 58 public: 59 60 // Default constructor 61 SDMath(); 62 63 // Copy Constructor (copy semantics) 64 SDMath(const SDMath& other); 65 66 // Assignment (copy semantics) 67 SDMath &operator=(const SDMath& other); 68 69 // Destructor 70 ~SDMath(); 71 72 // Binary Table operators. op=ADD, SUB, MUL, DIV, QUOTIENT 73 casa::CountedPtr<SDMemTable> binaryOperate(const casa::CountedPtr<SDMemTable>& left, 74 const casa::CountedPtr<SDMemTable>& right, 75 const casa::String& op, casa::Bool preserve, 76 casa::Bool tSys); 77 78 // Average in time 79 casa::CountedPtr<SDMemTable> average(const std::vector<casa::CountedPtr<SDMemTable> >& in, 80 const casa::Vector<casa::Bool>& mask, 81 casa::Bool scanAverage, 82 const casa::String& weightStr, 83 casa::Bool align=casa::False); 84 85 // Statistics. If row<0, all rows are done otherwise, just the 86 // specified row. 87 std::vector<float> statistic(const casa::CountedPtr<SDMemTable>& in, 88 const casa::Vector<casa::Bool>& mask, 89 const casa::String& which, casa::Int row) const; 90 93 91 // Bin up spectra 94 SDMemTable* bin(const SDMemTable& in, casa::Int width) const;95 96 // Resample spectra92 SDMemTable* bin(const SDMemTable& in, casa::Int width); 93 94 // Resample spectra 97 95 SDMemTable* resample(const SDMemTable& in, const casa::String& method, 98 casa::Float factor) const;96 casa::Float factor); 99 97 100 98 // Smooth 101 SDMemTable* smooth(const SDMemTable& in, const casa::String& kernel,102 casa::Float width, casa::Bool doAll) const;99 SDMemTable* smooth(const SDMemTable& in, const casa::String& kernel, 100 casa::Float width, casa::Bool doAll); 103 101 104 102 // Flux conversion between Jansky and Kelvin 105 SDMemTable* convertFlux (const SDMemTable& in, casa::Float D, casa::Float etaAp, 106 casa::Float JyPerK, casa::Bool doAll) const; 103 SDMemTable* convertFlux(const SDMemTable& in, casa::Float D, 104 casa::Float etaAp, 105 casa::Float JyPerK, casa::Bool doAll); 107 106 108 107 // Gain-elevation correction 109 SDMemTable* gainElevation (const SDMemTable& in, const casa::Vector<casa::Float>& coeffs, 110 const casa::String& fileName, 111 const casa::String& method, casa::Bool doAll) const; 108 SDMemTable* gainElevation(const SDMemTable& in, 109 const casa::Vector<casa::Float>& coeffs, 110 const casa::String& fileName, 111 const casa::String& method, 112 casa::Bool doAll); 112 113 113 114 // Frequency Alignment 114 SDMemTable* frequencyAlignment 115 const casa::String& method, casa::Bool perFreqID) const;115 SDMemTable* frequencyAlignment(const SDMemTable& in, const casa::String& refTime, 116 const casa::String& method, casa::Bool perFreqID); 116 117 117 118 // Opacity correction 118 SDMemTable* opacity (const SDMemTable& in, casa::Float tau, casa::Bool doAll) const;119 SDMemTable* opacity(const SDMemTable& in, casa::Float tau, casa::Bool doAll); 119 120 120 121 // Simple unary mathematical operations. what=0 (mul) or 1 (add) 121 122 SDMemTable* unaryOperate(const SDMemTable& in, casa::Float offset, 122 casa::Bool doAll, casa::uInt what, casa::Bool tSys) const; 123 124 // Average polarizations. 125 SDMemTable* averagePol(const SDMemTable& in, const casa::Vector<casa::Bool>& mask, 126 const casa::String& wtStr) const; 123 casa::Bool doAll, casa::uInt what, casa::Bool tSys); 124 125 // Average polarizations. 126 SDMemTable* averagePol(const SDMemTable& in, 127 const casa::Vector<casa::Bool>& mask, 128 const casa::String& wtStr); 129 130 SDMemTable* frequencySwitch(const SDMemTable& in); 131 127 132 128 133 // Rotate XY phase. Value in degrees. 129 void rotateXYPhase 134 void rotateXYPhase(SDMemTable& in, casa::Float value, casa::Bool doAll); 130 135 131 136 // Rotate Q & U by operating on the raw correlations.Value in degrees. 132 void rotateLinPolPhase 133 134 137 void rotateLinPolPhase(SDMemTable& in, casa::Float value, casa::Bool doAll); 138 139 135 140 private: 136 141 … … 155 160 casa::uInt iTab, casa::uInt iRow, 156 161 casa::uInt axis, casa::uInt nAxesSub, 157 casa::Bool useMask, WeightType wtType) const;162 casa::Bool useMask, WeightType wtType); 158 163 159 164 // Work out conversion factor for converting Jy<->K per IF per row and apply 160 void convertBrightnessUnits(SDMemTable* pTabOut, const SDMemTable& in,161 casa::Bool toKelvin, casa::Float sFac, casa::Bool doAll) const;165 void convertBrightnessUnits(SDMemTable* pTabOut, const SDMemTable& in, 166 casa::Bool toKelvin, casa::Float sFac, casa::Bool doAll); 162 167 163 168 // Convert weight string to enum value 164 169 165 void convertWeightString 166 casa::Bool listType) const;170 void convertWeightString(WeightType& wt, const casa::String& weightStr, 171 casa::Bool listType);; 167 172 168 173 // Convert interpolation type string 169 // void convertInterpString(casa::Int& type, const casa::String& interp) const;174 // void convertInterpString(casa::Int& type, const casa::String& interp); 170 175 void convertInterpString(casa::InterpolateArray1D<casa::Double,casa::Float>::InterpolationMethod& method, 171 const casa::String& interp) const;176 const casa::String& interp); 172 177 173 178 // Scale data with values from an ascii Table … … 176 181 const casa::String& col0, const casa::String& col1, 177 182 const casa::String& methodStr, casa::Bool doAll, 178 const casa::Vector<casa::Float>& xOut, casa::Bool doTSys) const;183 const casa::Vector<casa::Float>& xOut, casa::Bool doTSys); 179 184 180 185 // Scale data with values from a Table … … 182 187 const casa::String& col0, const casa::String& col1, 183 188 const casa::String& methodStr, casa::Bool doAll, 184 const casa::Vector<casa::Float>& xOut, casa::Bool doTSys) const;189 const casa::Vector<casa::Float>& xOut, casa::Bool doTSys); 185 190 186 191 // Scale data and optionally TSys by values in a Vector 187 void scaleByVector 192 void scaleByVector(SDMemTable* pTabOut, const SDMemTable& in, 188 193 casa::Bool doAll, const casa::Vector<casa::Float>& factor, 189 casa::Bool doTSys) const;194 casa::Bool doTSys); 190 195 191 196 // Convert time String to Epoch 192 casa::MEpoch epochFromString (const casa::String& str, casa::MEpoch::Types timeRef) const;197 casa::MEpoch epochFromString(const casa::String& str, casa::MEpoch::Types timeRef); 193 198 194 199 // Function to fill Scan Container when averaging in time 195 200 196 void fillSDC 201 void fillSDC(SDContainer& sc, const casa::Array<casa::Bool>& mask, 197 202 const casa::Array<casa::Float>& data, 198 203 const casa::Array<casa::Float>& tSys, 199 204 casa::Int scanID, casa::Double timeStamp, 200 205 casa::Double interval, const casa::String& sourceName, 201 const casa::Vector<casa::uInt>& freqID) const;206 const casa::Vector<casa::uInt>& freqID); 202 207 203 208 // Format EPoch 204 casa::String formatEpoch(const casa::MEpoch& epoch) const;209 casa::String formatEpoch(const casa::MEpoch& epoch) const; 205 210 206 211 // Align in Frequency 207 SDMemTable* frequencyAlign 212 SDMemTable* frequencyAlign(const SDMemTable& in, 208 213 casa::MFrequency::Types system, 209 214 const casa::String& timeRef, 210 215 const casa::String& method, 211 casa::Bool perIF) const;216 casa::Bool perIF); 212 217 213 218 // Generate frequency aligners 214 void generateFrequencyAligners 219 void generateFrequencyAligners(casa::PtrBlock<casa::FrequencyAligner<casa::Float>* >& a, 215 220 const SDDataDesc& dDesc, 216 221 const SDMemTable& in, casa::uInt nChan, … … 218 223 const casa::MPosition& refPos, 219 224 const casa::MEpoch& refEpoch, 220 casa::Bool perFreqID) const;221 222 // Generate data description table (combines source and freqID)223 void generateDataDescTable 225 casa::Bool perFreqID); 226 227 // Generate data description table(combines source and freqID); 228 void generateDataDescTable(casa::Matrix<casa::uInt>& ddIdx, 224 229 SDDataDesc& dDesc, 225 230 casa::uInt nIF, … … 228 233 const casa::ROScalarColumn<casa::String>& srcCol, 229 234 const casa::ROArrayColumn<casa::uInt>& fqIDCol, 230 casa::Bool perFreqID) const;235 casa::Bool perFreqID); 231 236 232 237 // Get row range from SDMemTable state 233 casa::Vector<casa::uInt> getRowRange(const SDMemTable& in) const;238 casa::Vector<casa::uInt> getRowRange(const SDMemTable& in) const; 234 239 235 240 // Is row in the row range ? 236 casa::Bool rowInRange(casa::uInt i, const casa::Vector<casa::uInt>& range) const;241 casa::Bool rowInRange(casa::uInt i, const casa::Vector<casa::uInt>& range) const; 237 242 238 243 // Set slice to cursor or all axes 239 void setCursorSlice 240 244 void setCursorSlice(casa::IPosition& start, casa::IPosition& end, 245 casa::Bool doAll, const SDMemTable& in) const; 241 246 242 247 // Function to normalize data when averaging in time 243 248 244 void normalize 249 void normalize(casa::MaskedArray<casa::Float>& data, 245 250 const casa::Array<casa::Float>& sumSq, 246 251 const casa::Array<casa::Float>& tSysSumSq, 247 252 const casa::Array<casa::Float>& nPts, 248 253 casa::Double intSum, 249 WeightType wtType, casa::Int axis, casa::Int nAxes) const;254 WeightType wtType, casa::Int axis, casa::Int nAxes); 250 255 251 256 // Put the data and mask into the SDContainer 252 void putDataInSDC 253 const casa::Array<casa::Bool>& mask) const;257 void putDataInSDC(SDContainer& sc, const casa::Array<casa::Float>& data, 258 const casa::Array<casa::Bool>& mask); 254 259 255 260 // Read ascii file into a Table 256 261 257 casa::Table readAsciiFile (const casa::String& fileName) const; 258 }; 259 260 261 262 casa::Table readAsciiFile(const casa::String& fileName) const; 263 264 }; // class 262 265 263 266 } // namespace
Note: See TracChangeset
for help on using the changeset viewer.