- Timestamp:
- 12/19/12 19:19:53 (12 years ago)
- Location:
- trunk/src
- Files:
-
- 8 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/CMakeLists.txt
r2702 r2703 71 71 ${SRCDIR}/PlotHelper.cpp 72 72 ${SRCDIR}/STApplyTable.cpp 73 ${SRCDIR}/STCalTsys.cpp 74 ${SRCDIR}/STCalSky.cpp ) 73 ${SRCDIR}/STCalTsysTable.cpp 74 ${SRCDIR}/STCalSkyTable.cpp 75 ${SRCDIR}/STCalibration.cpp 76 ${SRCDIR}/STCalSkyPSAlma.cpp 77 ${SRCDIR}/STCalTsys.cpp ) 75 78 76 79 set( ASAP_PYSRCS -
trunk/src/STApplyTable.cpp
r2696 r2703 5 5 // 6 6 // 7 // Author: Takeshi Nakazato 7 // Author: Takeshi Nakazato <takeshi.nakazato@nao.ac.jp> (C) 2012 8 8 // 9 9 // Copyright: See COPYING file that comes with this distribution … … 104 104 } 105 105 106 void STApplyTable::save(const String &name) 107 { 108 table_.deepCopy(name, Table::New); 106 109 } 110 111 } -
trunk/src/STApplyTable.h
r2696 r2703 6 6 // Base class for application tables. 7 7 // 8 // Author: Takeshi Nakazato 8 // Author: Takeshi Nakazato <takeshi.nakazato@nao.ac.jp> (C) 2012 9 9 // 10 10 // Copyright: See COPYING file that comes with this distribution 11 11 // 12 12 // 13 #ifndef ASAP APPLYTABLE_H14 #define ASAP APPLYTABLE_H13 #ifndef ASAP_APPLY_TABLE_H 14 #define ASAP_APPLY_TABLE_H 15 15 16 16 #include <casa/Arrays/Vector.h> … … 67 67 void unsetSelection(); 68 68 69 void save(const casa::String &name); 70 69 71 protected: 70 72 void setbasedata(casa::uInt irow, casa::uInt scanno, casa::uInt cycleno, -
trunk/src/STCalTsys.cpp
r2696 r2703 5 5 // 6 6 // 7 // Author: Takeshi Nakazato 7 // Author: Takeshi Nakazato <takeshi.nakazato@nao.ac.jp> (C) 2012 8 8 // 9 9 // Copyright: See COPYING file that comes with this distribution 10 10 // 11 11 // 12 #include <casa/Exceptions/Error.h>13 #include <tables/Tables/TableDesc.h>14 #include <tables/Tables/SetupNewTab.h>15 #include <tables/Tables/ArrColDesc.h>16 #include <tables/Tables/ScaColDesc.h>17 #include <tables/Tables/TableRecord.h>18 #include <measures/TableMeasures/TableMeasDesc.h>19 #include <measures/TableMeasures/TableMeasRefDesc.h>20 #include <measures/TableMeasures/TableMeasValueDesc.h>21 12 22 #include "Scantable.h" 13 #include <vector> 14 #include "STSelector.h" 23 15 #include "STCalTsys.h" 16 #include "RowAccumulator.h" 17 #include "STIdxIter.h" 18 #include "STDefs.h" 19 #include <atnf/PKSIO/SrcType.h> 24 20 21 #include <casa/Arrays/ArrayMath.h> 25 22 23 using namespace std; 26 24 using namespace casa; 27 25 28 26 namespace asap { 29 30 const String STCalTsys::name_ = "APPLY_TSYS"; 31 32 STCalTsys::STCalTsys(const Scantable& parent) 33 : STApplyTable(parent, name_) 27 STCalTsys::STCalTsys(CountedPtr<Scantable> &s, vector<int> &iflist) 28 : STCalibration(s), 29 iflist_(iflist) 34 30 { 35 setup();31 applytable_ = new STCalTsysTable(*s); 36 32 } 37 33 38 STCalTsys::~STCalTsys()34 void STCalTsys::calibrate() 39 35 { 36 STSelector selOrg = scantable_->getSelection(); 37 STSelector sel; 38 sel.setIFs(iflist_); 39 scantable_->setSelection(sel); 40 41 fillCalTable(); 42 43 scantable_->setSelection(selOrg); 40 44 } 41 45 42 void STCalTsys:: setup()46 void STCalTsys::fillCalTable() 43 47 { 44 table_.addColumn(ArrayColumnDesc<Float>("TSYS")); 45 table_.addColumn(ScalarColumnDesc<Float>("ELEVATION")); 48 RowAccumulator acc(W_TINT); 49 50 vector<string> cols(3); 51 cols[0] = "IFNO"; 52 cols[1] = "POLNO"; 53 cols[2] = "BEAMNO"; 54 STIdxIterAcc iter(scantable_, cols); 46 55 47 table_.rwKeywordSet().define("ApplyType", "TSYS"); 56 ROScalarColumn<Double> *tcol = new ROScalarColumn<Double>(scantable_->table(), "TIME"); 57 Vector<Double> timeSec = tcol->getColumn() * 86400.0; 58 tcol->attach(scantable_->table(), "INTERVAL"); 59 Vector<Double> intervalSec = tcol->getColumn(); 60 delete tcol; 61 ROScalarColumn<Float> *ecol = new ROScalarColumn<Float>(scantable_->table(), "ELEVATION"); 62 Vector<Float> elevation = ecol->getColumn(); 63 delete ecol; 48 64 49 attachOptionalColumns(); 65 ROArrayColumn<Float> specCol(scantable_->table(), "TSYS"); 66 ROArrayColumn<uChar> flagCol(scantable_->table(), "FLAGTRA"); 67 68 // dummy Tsys: the following process doesn't need Tsys but RowAccumulator 69 // requires to set it with spectral data 70 Vector<Float> tsys(1, 1.0); 71 72 Double timeCen = 0.0; 73 Float elCen = 0.0; 74 uInt count = 0; 75 76 while(!iter.pastEnd()) { 77 Vector<uInt> rows = iter.getRows(SHARE); 78 Vector<uInt> current = iter.current(); 79 uInt len = rows.nelements(); 80 if (len == 0) { 81 iter.next(); 82 continue; 83 } 84 85 uInt nchan = scantable_->nchan(scantable_->getIF(rows[0])); 86 Vector<uChar> flag(nchan); 87 Vector<Bool> bflag(nchan); 88 Vector<Float> spec(nchan); 89 90 Vector<Double> timeSep(len); 91 for (uInt i = 0; i < len-1; i++) { 92 timeSep[i] = timeSec[rows[i+1]] - timeSec[rows[i]] ; 93 } 94 Double tMedian = median(timeSep(IPosition(1,0), IPosition(1,len-2))); 95 timeSep[len-1] = tMedian * 10000.0 ; // any large value 96 97 uInt irow ; 98 uInt jrow ; 99 for (uInt i = 0; i < len; i++) { 100 irow = rows[i]; 101 jrow = (i < len-1) ? rows[i+1] : rows[i]; 102 // accumulate data 103 flagCol.get(irow, flag); 104 convertArray(bflag, flag); 105 specCol.get(irow, spec); 106 if ( !allEQ(bflag,True) ) 107 acc.add( spec, !bflag, tsys, intervalSec[irow], timeSec[irow] ) ; 108 timeCen += timeSec[irow]; 109 elCen += elevation[irow]; 110 count++; 111 112 // check time gap 113 double gap = 2.0 * timeSep[i] / (intervalSec[jrow] + intervalSec[irow]); 114 if ( gap > 5.0 ) { 115 if ( acc.state() ) { 116 acc.replaceNaN() ; 117 // const Vector<Bool> &msk = acc.getMask(); 118 // convertArray(flag, !msk); 119 // for (uInt k = 0; k < nchan; ++k) { 120 // uChar userFlag = 1 << 7; 121 // if (msk[k]==True) userFlag = 0 << 7; 122 // flag(k) = userFlag; 123 // } 124 timeCen /= (Double)count * 86400.0; // sec->day 125 elCen /= (Float)count; 126 STCalTsysTable *p = dynamic_cast<STCalTsysTable *>(&(*applytable_)); 127 p->appenddata(0, 0, current[2], current[0], current[1], 128 timeCen, elCen, acc.getSpectrum()); 129 } 130 acc.reset() ; 131 timeCen = 0.0; 132 elCen = 0.0; 133 count = 0; 134 } 135 } 136 137 iter.next() ; 138 } 50 139 } 51 140 52 void STCalTsys::attachOptionalColumns()53 {54 tsysCol_.attach(table_, "TSYS");55 elCol_.attach(table_,"ELEVATION");56 57 141 } 58 59 void STCalTsys::setdata(uInt irow, uInt scanno, uInt cycleno,60 uInt beamno, uInt ifno, uInt polno,61 Double time, Float elevation, Vector<Float> tsys)62 {63 if (irow >= (uInt)nrow()) {64 throw AipsError("row index out of range");65 }66 67 if (!sel_.empty()) {68 os_.origin(LogOrigin("STCalTsys","setdata",WHERE));69 os_ << LogIO::WARN << "Data selection is effective. Specified row index may be wrong." << LogIO::POST;70 }71 72 setbasedata(irow, scanno, cycleno, beamno, ifno, polno, time);73 elCol_.put(irow, elevation);74 tsysCol_.put(irow, tsys);75 }76 77 void STCalTsys::appenddata(uInt scanno, uInt cycleno,78 uInt beamno, uInt ifno, uInt polno,79 Double time, Float elevation, Vector<Float> tsys)80 {81 uInt irow = nrow();82 table_.addRow(1, True);83 setdata(irow, scanno, cycleno, beamno, ifno, polno, time, elevation, tsys);84 }85 } -
trunk/src/STCalTsys.h
r2696 r2703 4 4 // Description: 5 5 // 6 // ApplyTable for Tsys calibration.7 6 // 8 // Author: Takeshi Nakazato 7 // Author: Takeshi Nakazato <takeshi.nakazato@nao.ac.jp>, (C) 2012 9 8 // 10 9 // Copyright: See COPYING file that comes with this distribution 11 10 // 12 11 // 13 #ifndef ASAP CALTSYS_H14 #define ASAP CALTSYS_H12 #ifndef ASAP_CALTSYS_H 13 #define ASAP_CALTSYS_H 15 14 16 #include < tables/Tables/ArrayColumn.h>17 #include < tables/Tables/ScalarColumn.h>15 #include <memory> 16 #include <vector> 18 17 18 #include <casa/aips.h> 19 #include <casa/Arrays/Vector.h> 20 #include <casa/BasicSL/String.h> 21 #include <casa/Utilities/CountedPtr.h> 22 23 #include <scimath/Mathematics/InterpolateArray1D.h> 24 25 #include "RowAccumulator.h" 19 26 #include "Scantable.h" 27 #include "STDefs.h" 20 28 #include "STApplyTable.h" 29 #include "STCalibration.h" 30 #include "STCalTsysTable.h" 31 21 32 22 33 namespace asap { 23 34 24 35 /** 25 ApplyTable for Tsys calibration 36 * Calibration operations on Scantable objects 37 * @author TakeshiNakazato 38 */ 39 class STCalTsys : public STCalibration { 40 public: 41 STCalTsys(casa::CountedPtr<Scantable> &s, vector<int> &iflist); 26 42 27 @author Takeshi Nakazato 28 @date $Date:$ 29 @version $Revision:$ 30 */ 31 class STCalTsys : public STApplyTable { 32 public: 33 STCalTsys() {;} 34 STCalTsys(const Scantable& parent); 43 virtual void calibrate(); 35 44 36 virtual ~STCalTsys(); 45 ~STCalTsys() {;} 46 private: 47 void fillCalTable(); 37 48 38 void setup(); 39 const casa::String& name() const {return name_;}; 40 41 void attachOptionalColumns(); 42 43 void setdata(casa::uInt irow, casa::uInt scanno, casa::uInt cycleno, 44 casa::uInt beamno, casa::uInt ifno, 45 casa::uInt polno, casa::Double time, casa::Float elevation, 46 casa::Vector<casa::Float> tsys); 47 void appenddata(casa::uInt scanno, casa::uInt cycleno, 48 casa::uInt beamno, casa::uInt ifno, casa::uInt polno, 49 casa::Double time, casa::Float elevation, 50 casa::Vector<casa::Float> tsys); 51 52 casa::Vector<casa::Float> getElevation() {return elCol_.getColumn();} 53 casa::Matrix<casa::Float> getTsys() {return tsysCol_.getColumn();} 54 55 private: 56 static const casa::String name_ ; 57 casa::ArrayColumn<casa::Float> tsysCol_; 58 casa::ScalarColumn<casa::Float> elCol_; 49 vector<int> iflist_; 59 50 }; 60 51 61 52 } 62 63 53 #endif
Note:
See TracChangeset
for help on using the changeset viewer.