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 #ifndef PLOTMSFLAGGING_H_
00028 #define PLOTMSFLAGGING_H_
00029
00030 #include <plotms/PlotMS/PlotMSConstants.h>
00031 #include <plotms/PlotMS/PlotMSSelection.h>
00032
00033 namespace casa {
00034
00035
00036 class PlotMSFlagging {
00037 public:
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051 PMS_ENUM1(Field, fields, fieldStrings, field,
00052 EXTEND, CORR, CORR_ALL,
00053 CORR_POLN_DEP, CHANNEL, SPW, ANTENNA,
00054 ANTENNA_ANTENNA, ANTENNA_BASELINES, TIME,
00055 SCANS, FIELD, SEL_SELECTED, SEL_ALTERNATE)
00056 PMS_ENUM2(Field, fields, fieldStrings, field,
00057 "extend", "correlation", "correlation:all",
00058 "correlation:poln-dep", "channel", "spw", "antenna",
00059 "antenna:antenna-based", "antenna:all-baselines", "time",
00060 "scans", "field", "selection:selected", "selection:alternate")
00061
00062
00063
00064
00065 static bool fieldHasValue(Field f);
00066
00067
00068
00069 static bool fieldHasSelectionValue(Field f);
00070
00071
00072
00073
00074 static bool fieldDefault(Field f);
00075
00076
00077
00078
00079
00080
00081 static const vector<Field>& fieldMutuallyExclusiveGroup(Field f);
00082
00083
00084
00085 static bool fieldIsInMutuallyExclusiveGroup(Field f) {
00086 return fieldMutuallyExclusiveGroup(f).size() > 0; }
00087
00088
00089
00090
00091
00092 PlotMSFlagging();
00093
00094
00095 ~PlotMSFlagging();
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105 void fromRecord(const RecordInterface& record);
00106 Record toRecord(bool useStrings = false) const;
00107
00108
00109
00110
00111 bool getFlag(Field f) const;
00112 void getFlag(Field f, bool& flag) const { flag = getFlag(f); }
00113 void setFlag(Field f, bool on);
00114
00115
00116
00117
00118 double getValue(Field f) const;
00119 void getValue(Field f, double& value) const { value = getValue(f); }
00120 void setValue(Field f, double value);
00121
00122
00123
00124
00125
00126
00127
00128 String getValueStr(Field f) const;
00129 void getValue(Field f, String& value) const { value = getValueStr(f); }
00130 void setValue(Field f, const String& value);
00131
00132
00133
00134
00135 PlotMSSelection getSelectionValue(Field f) const;
00136 void getSelectionValue(Field f, PlotMSSelection& value) const {
00137 value = getSelectionValue(f); }
00138 void setSelectionValue(Field f, const PlotMSSelection& value);
00139
00140
00141
00142
00143
00144 bool extend() const { return getFlag(EXTEND); }
00145 bool corr() const { return (extend() && getFlag(CORR)); }
00146 bool corrAll() const { return (corr() && getFlag(CORR_ALL)); }
00147 bool corrPolnDep() const { return (corr() && getFlag(CORR_POLN_DEP)); }
00148 String corrStr() const { return getValueStr(CORR); }
00149 bool channel() const { return (extend() && getFlag(CHANNEL)); }
00150 bool spw() const { return (extend() && getFlag(SPW)); }
00151 bool antenna() const { return (extend() && getFlag(ANTENNA)); }
00152 bool antennaAntennaBased() const { return (antenna() && getFlag(ANTENNA_ANTENNA)); }
00153 double antennaAntennaBasedValue() const{ return getValue(ANTENNA_ANTENNA);}
00154 bool antennaBaselinesBased() const { return (antenna() && getFlag(ANTENNA_BASELINES)); }
00155 String antennaStr() const { return getValueStr(ANTENNA); }
00156 bool time() const { return (extend() && getFlag(TIME)); }
00157 bool scans() const { return (time() && getFlag(SCANS)); }
00158 bool field() const { return (time() && getFlag(FIELD)); }
00159 bool selectionSelected() const { return (extend() && getFlag(SEL_SELECTED)); }
00160 bool selectionAlternate() const { return (extend() && getFlag(SEL_ALTERNATE)); }
00161 PlotMSSelection selectionAlternateSelection() const {
00162 return getSelectionValue(SEL_ALTERNATE); }
00163
00164
00165
00166
00167 void setExtend(bool flag) { setFlag(EXTEND, flag); }
00168 void setCorr(bool flag) { setFlag(CORR, flag); }
00169 void setCorrAll(bool flag) { setFlag(CORR_ALL, flag); }
00170 void setCorrPolnDep(bool flag) { setFlag(CORR_POLN_DEP, flag); }
00171 void setCorr(const String& value) { setValue(CORR, value); }
00172 void setChannel(bool flag) { setFlag(CHANNEL, flag); }
00173 void setSpw(bool flag) { setFlag(SPW, flag); }
00174 void setAntenna(bool flag) { setFlag(ANTENNA, flag); }
00175 void setAntennaAntennaBased(bool flag) { setFlag(ANTENNA_ANTENNA, flag); }
00176 void setAntennaAntennaBasedValue(double value) {
00177 setValue(ANTENNA_ANTENNA, value); }
00178 void setAntennaBaselinesBased(bool flag){setFlag(ANTENNA_BASELINES, flag);}
00179 void setAntenna(const String& value) { setValue(ANTENNA, value); }
00180 void setTime(bool flag) { setFlag(TIME, flag); }
00181 void setScans(bool flag) { setFlag(SCANS, flag); }
00182 void setField(bool flag) { setFlag(FIELD, flag); }
00183 void setSelectionSelected(bool flag) { setFlag(SEL_SELECTED, flag); }
00184 void setSelectionAlternate(bool flag) { setFlag(SEL_ALTERNATE, flag); }
00185 void setSelectionAlternateSelection(const PlotMSSelection& value) {
00186 setSelectionValue(SEL_ALTERNATE, value); }
00187
00188
00189
00190
00191
00192 bool operator==(const PlotMSFlagging& other) const;
00193 bool operator!=(const PlotMSFlagging& other) const {
00194 return !(operator==(other)); }
00195
00196
00197 private:
00198
00199
00200 map<Field, bool> itsFlags_;
00201
00202
00203 map<Field, double> itsValues_;
00204
00205
00206 map<Field, PlotMSSelection> itsSelectionValues_;
00207
00208
00209
00210 void setDefaults();
00211
00212
00213
00214
00215
00216 static const String RKEY_VALUE;
00217 static const String RKEY_SELVALUE;
00218
00219 };
00220
00221 }
00222
00223 #endif