00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #include <ms/MeasurementSets/MeasurementSet.h>
00031 #include <ms/MeasurementSets/MSColumns.h>
00032 #include <ms/MeasurementSets/MSMainColumns.h>
00033 #include <ms/MeasurementSets/MSMainEnums.h>
00034
00035 #include <casa/aips.h>
00036 #include <casa/Arrays/Array.h>
00037 #include <casa/Arrays/Vector.h>
00038
00039 #include <msvis/MSVis/SubMS.h>
00040
00041 #ifndef MSVIS_PARTITION_H
00042 namespace casa {
00043
00044 #define MSVIS_PARTITION_H
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073 template<class T> class ROArrayColumn;
00074
00075
00076 class Partition
00077 {
00078 public:
00079 Partition(String& theMS, Table::TableOption option = Table::Old);
00080
00081
00082 Partition(MeasurementSet& ms);
00083
00084 virtual ~Partition();
00085
00086
00087 void setMS(MeasurementSet& ms);
00088
00089
00090
00091 Bool selectSpw(const String& spwstr);
00092
00093
00094
00095
00096
00097
00098 Bool setmsselect(const String& spw="", const String& field="",
00099 const String& baseline="", const String& scan="",
00100 const String& uvrange="", const String& taql="",
00101 const String& subarray="", const String& intent="",
00102 const String& obs="");
00103
00104
00105 Bool selectSource(const Vector<Int>& fieldid);
00106
00107
00108 void selectAntenna(Vector<Int>& antennaids, Vector<String>& antennaSel)
00109 {
00110 antennaSel_p = SubMS::pickAntennas(antennaId_p, antennaSelStr_p,
00111 antennaids, antennaSel);
00112 }
00113
00114
00115 void selectArray(const String& subarray);
00116
00117
00118 void selectTime(Double timeBin=-1.0, String timerng="");
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134 Bool makePartition(String& outname, String& whichDataCol,
00135 const Vector<Int>& tileShape=Vector<Int>(1, 0),
00136 const String& combine="");
00137
00138
00139
00140
00141
00142 virtual MeasurementSet* makeScratchPartition(const Vector<MS::PredefinedColumns>& whichDataCols,
00143 const Bool forceInMemory=False);
00144
00145 virtual MeasurementSet* makeScratchPartition(const String& whichDataCol,
00146 const Bool forceInMemory=False);
00147
00148
00149
00150
00151 static MeasurementSet* setupMS(const String& msname, const MeasurementSet& inms,
00152 const Int nchan, const Int npol, const String& telescop,
00153 const Vector<MS::PredefinedColumns>& colNamesTok,
00154 const Int obstype=0);
00155
00156
00157 static MeasurementSet* setupMS(const String& msname, const MeasurementSet& inms,
00158 const Int nchan, const Int npol,
00159 const Vector<MS::PredefinedColumns>& colNamesTok,
00160 const Vector<Int>& tileShape=Vector<Int>(1,0));
00161
00162 void verifyColumns(const MeasurementSet& ms, const Vector<MS::PredefinedColumns>& colNames);
00163 private:
00164
00165 Bool makeSelection();
00166
00167
00168 Bool fillAllTables(const Vector<MS::PredefinedColumns>& colNames);
00169 Bool fillMainTable(const Vector<MS::PredefinedColumns>& colNames);
00170
00171
00172 Bool fillAccessoryMainCols();
00173
00174
00175 Bool getDataColumn(ROArrayColumn<Complex>& data,
00176 const MS::PredefinedColumns colName);
00177 Bool getDataColumn(ROArrayColumn<Float>& data,
00178 const MS::PredefinedColumns colName);
00179 Bool putDataColumn(MSColumns& msc, ROArrayColumn<Complex>& data,
00180 const MS::PredefinedColumns datacol,
00181 const Bool writeToDataCol=False);
00182 Bool putDataColumn(MSColumns& msc, ROArrayColumn<Float>& data,
00183 const MS::PredefinedColumns datacol,
00184 const Bool writeToDataCol=False);
00185
00186
00187 Bool copyDataFlagsWtSp(const Vector<MS::PredefinedColumns>& colNames,
00188 const Bool writeToDataCol);
00189
00190
00191 Double n_bytes() {return mssel_p.nrow() * maxnchan_p * maxncorr_p *
00192 sizeof(Complex);}
00193
00194
00195 Bool doTimeAver(const Vector<MS::PredefinedColumns>& dataColNames);
00196
00197
00198
00199 static void getDataColMap(MSMainColumns* msc, ArrayColumn<Complex>* mapper,
00200 uInt ntok,
00201 const Vector<MS::PredefinedColumns>& colEnums);
00202
00203
00204
00205
00206
00207 MeasurementSet ms_p, mssel_p;
00208 MSMainColumns * msc_p;
00209 ROMSColumns * mscIn_p;
00210 Bool antennaSel_p;
00211 Double timeBin_p;
00212 String scanString_p,
00213 intentString_p,
00214 obsString_p,
00215 uvrangeString_p, taqlString_p;
00216 String timeRange_p, arrayExpr_p, corrString_p;
00217 String combine_p;
00218
00219
00220 Int maxnchan_p,
00221 maxncorr_p;
00222
00223
00224
00225 MeasurementSet msOut_p;
00226 Vector<Int> spw_p;
00227 Vector<Int> fieldid_p;
00228 Vector<String> antennaSelStr_p;
00229 Vector<Int> antennaId_p;
00230 Vector<Int> arrayId_p;
00231 Matrix<Double> selTimeRanges_p;
00232 };
00233
00234 }
00235
00236 #endif
00237