HOPS
HOPS class reference
MHO_DiFXBaselineProcessor.hh
Go to the documentation of this file.
1 #ifndef MHO_DiFXBaselineProcessor_HH__
2 #define MHO_DiFXBaselineProcessor_HH__
3 
4 #include <map>
5 #include <set>
6 #include <string>
7 #include <vector>
8 
11 #include "MHO_JSONHeaderWrapper.hh"
12 #include "MHO_ObjectTags.hh"
13 #include "MHO_StationCodeMap.hh"
14 
15 namespace hops
16 {
17 
30 {
31  public:
34 
40  void SetDiFXInputData(const mho_json* input) { fInput = input; }
41 
47  void SetScanIndex(std::size_t idx){fIndex = idx;}
48 
54  int GetBaselineID() const { return fBaselineID; };
55 
61  void SetRootCode(std::string rcode) { fRootCode = rcode; }
62 
68  void SetCorrelationDate(std::string corrdate) { fCorrDate = corrdate; }
69 
73  void SetRescaleFalse() { fRescale = false; }
74 
78  void SetRescaleTrue() { fRescale = true; }
79 
83  void SetAttachDiFXInputTrue() {fAttachDiFXInput = true; }
84 
88  void SetAttachDiFXInputFalse() {fAttachDiFXInput = false; }
89 
90  void SetExportAsMark4True(){fExportAsMark4 = true;}
91  void SetExportAsMark4False(){fExportAsMark4 = false;}
92 
98  void AddRecord(MHO_DiFXVisibilityRecord* record);
99 
105  void SetStationCodes(MHO_StationCodeMap* code_map);
106 
112  void SetDiFXCodes2VexCodes(const std::map< std::string, std::string >& d2v_map) { fDiFX2VexStationCodes = d2v_map; };
113 
119  void SetDiFXCodes2VexNames(const std::map< std::string, std::string >& d2v_map) { fDiFX2VexStationNames = d2v_map; };
120 
130  void WriteVisibilityObjects(std::string output_dir);
131 
137  bool IsAutoCorr() const
138  {
139  if(fRefStation == fRemStation)
140  {
141  return true;
142  }
143  return false;
144  };
145 
151  std::string GetRefStationMk4Id() const { return fRefStationMk4Id; }
152 
158  std::string GetRemStationMk4Id() const { return fRemStationMk4Id; }
159 
160  std::string GetBaselineShortName() const { return fBaselineShortName; }
161 
163 
164  void Clear();
165 
166  void SetFrequencyBands(std::vector< std::tuple< std::string, double, double > > fbands) { fFreqBands = fbands; }
167 
168  void SetFreqGroups(std::vector< std::string > fgroups) { fOnlyFreqGroups = fgroups; }
169 
170  void SetOnlyBandwidth(double bw)
171  {
172  fOnlyBandwidth = bw;
173  fSelectByBandwidth = true;
174  }
175 
176  private:
177  void Organize();
178  void DeleteDiFXVisRecords();
179 
180  std::string ConstructCorFileName(const std::string& output_dir, const std::string& root_code,
181  const std::string& baseline, const std::string& baseline_shortname);
182 
183  std::string DetermineFreqGroup(const double& freq);
184 
185  std::string fRootCode;
186  std::string fCorrDate;
187  int fBaselineID;
188  std::size_t fIndex;
189  std::string fRefStation;
190  std::string fRemStation;
191  std::string fRefStationName;
192  std::string fRemStationName;
193  std::string fRefStationMk4Id;
194  std::string fRemStationMk4Id;
195  std::string fBaselineName;
196  std::string fBaselineShortName;
197  std::string fBaselineDelim;
198  int fRefStationBits;
199  int fRemStationBits;
200  double fAPLength;
201 
202  //the station 2-char to 1-char code map (user specified)
203  MHO_StationCodeMap* fStationCodeMap;
204 
205  //the station 2-char to 2-char code map (to deal with DiFX capitalization issue)
206  std::map< std::string, std::string > fDiFX2VexStationCodes;
207  //the difx station 2-char to vex station name map
208  std::map< std::string, std::string > fDiFX2VexStationNames;
209 
210  const mho_json* fInput;
211  std::vector< MHO_DiFXVisibilityRecord* > fRecords;
212  //for a single baseline, maps pol-pair, then freqindex to visiblity records
213  //needed to recorganized the visibilities into tables
214  std::map< std::string, std::map< int, std::vector< MHO_DiFXVisibilityRecord* > > > fVisibilities;
215 
216  std::set< std::string > fPolPairSet;
217  std::set< int > fFreqIndexSet;
218  std::set< int > fAPSet;
219  std::set< int > fSpecPointSet;
220  std::set< double > fBandwidthSet;
221  std::size_t fNPolPairs;
222  std::size_t fNChannels;
223  std::size_t fNAPs;
224  std::size_t fNSpectralPoints;
225  double fStartMJD; //scan start time in MJD
226  std::string fStartTime;
227  std::string fStopTime;
228  std::string fSourceName;
229  bool fCanChannelize;
230  bool fHaveBaselineData;
231 
232  bool fRescale;
233  std::map< int, double > fNBitsToFactor;
234  double fScaleFactor;
235 
236  bool fAttachDiFXInput;
237  bool fExportAsMark4;
238 
239  //list of channel frequencies for this baseline, sorted in ascending order (freq)
240  std::vector< std::pair< int, mho_json > > fBaselineFreqs;
241  std::set< std::string > fFreqBandLabelSet;
242 
243  //the baseline data in hops data containers
244  weight_store_type* fW;
246  MHO_ObjectTags fTags;
247 
248  //selection information
249  std::vector< std::tuple< std::string, double, double > > fFreqBands; //frequency band/group labels and ranges
250  std::vector< std::string > fOnlyFreqGroups; //limit output to matching frequency groups
251  bool fSelectByBandwidth;
252  double fOnlyBandwidth; //limit output to only channels of this bandwidth
253 
254  //comparison predicate for time-sorting visibility record data
255  struct VisRecordTimeLess
256  {
257  bool operator()(const MHO_DiFXVisibilityRecord* a, const MHO_DiFXVisibilityRecord* b) const
258  {
259  if(a->mjd == b->mjd)
260  {
261  return a->seconds < b->seconds;
262  }
263  else
264  {
265  return a->mjd < b->mjd;
266  }
267  }
268  };
269 
270  VisRecordTimeLess fTimePredicate;
271 
272  //comparison predicate for sorting index-frequency record pairs (use center-frequency)
273  struct FreqIndexPairLess
274  {
275  bool operator()(const std::pair< int, mho_json >& a, const std::pair< int, mho_json >& b) const
276  {
277  double a_freq = a.second["freq"];
278  double b_freq = b.second["freq"];
279 
280  double a_bw = a.second["bw"];
281  double b_bw = b.second["bw"];
282 
283  std::string a_sb = a.second["sideband"];
284  std::string b_sb = b.second["sideband"];
285  double a_sign = 0;
286  double b_sign = 0;
287  if(a_sb == "U")
288  {
289  a_sign = 1.0;
290  }
291  if(a_sb == "L")
292  {
293  a_sign = -1.0;
294  }
295  if(b_sb == "U")
296  {
297  b_sign = 1.0;
298  }
299  if(b_sb == "L")
300  {
301  b_sign = -1.0;
302  }
303 
304  //figure out the channel center frequencies and compare using that
305  double a_center = a_freq + a_sign * (a_bw / 2.0);
306  double b_center = b_freq + b_sign * (b_bw / 2.0);
307 
308  return a_center < b_center;
309  }
310  };
311 
312  FreqIndexPairLess fFreqPredicate;
313 
314  std::string ConstructMK4ChannelID(std::string fgroup, int index, std::string sideband, char pol);
315 };
316 
317 } // namespace hops
318 
319 #endif
nlohmann::json mho_json
Definition: MHO_JSONHeaderWrapper.hh:5
Class MHO_DiFXBaselineProcessor.
Definition: MHO_DiFXBaselineProcessor.hh:30
virtual ~MHO_DiFXBaselineProcessor()
Definition: MHO_DiFXBaselineProcessor.cc:54
void SetExportAsMark4False()
Definition: MHO_DiFXBaselineProcessor.hh:91
visibility_store_type * GetVisibilities()
Definition: MHO_DiFXBaselineProcessor.hh:162
void SetDiFXCodes2VexCodes(const std::map< std::string, std::string > &d2v_map)
Setter for difx station codes to vex codes (2 char -> 2 char), but difx uses all caps.
Definition: MHO_DiFXBaselineProcessor.hh:112
void SetFrequencyBands(std::vector< std::tuple< std::string, double, double > > fbands)
Definition: MHO_DiFXBaselineProcessor.hh:166
void SetOnlyBandwidth(double bw)
Definition: MHO_DiFXBaselineProcessor.hh:170
std::string GetRefStationMk4Id() const
Getter for reference station mk4id.
Definition: MHO_DiFXBaselineProcessor.hh:151
std::string GetBaselineShortName() const
Definition: MHO_DiFXBaselineProcessor.hh:160
void Clear()
Definition: MHO_DiFXBaselineProcessor.cc:655
void SetDiFXInputData(const mho_json *input)
Setter for difx .input data (needed for processing visibilities)
Definition: MHO_DiFXBaselineProcessor.hh:40
bool IsAutoCorr() const
Checks if reference station is equal to remote station.
Definition: MHO_DiFXBaselineProcessor.hh:137
void SetScanIndex(std::size_t idx)
Setter for scan index.
Definition: MHO_DiFXBaselineProcessor.hh:47
void SetStationCodes(MHO_StationCodeMap *code_map)
Setter for station codes (2 characater -> 1 character)
Definition: MHO_DiFXBaselineProcessor.cc:337
void WriteVisibilityObjects(std::string output_dir)
Writes visibility objects in HOPS4 format to an output directory.
Definition: MHO_DiFXBaselineProcessor.cc:599
void SetRescaleFalse()
Setter for rescale false - Do NOT apply mk4 style visibility normalization.
Definition: MHO_DiFXBaselineProcessor.hh:73
int GetBaselineID() const
Getter for (difx) baseline id.
Definition: MHO_DiFXBaselineProcessor.hh:54
void SetExportAsMark4True()
Definition: MHO_DiFXBaselineProcessor.hh:90
void SetRescaleTrue()
Setter for rescale true - apply mk4 style visibility normalization.
Definition: MHO_DiFXBaselineProcessor.hh:78
MHO_DiFXBaselineProcessor()
Definition: MHO_DiFXBaselineProcessor.cc:25
void ConstructVisibilityFileObjects()
Constructs visibility file objects by organizing data and setting tags for visibilities and weights.
Definition: MHO_DiFXBaselineProcessor.cc:342
void SetFreqGroups(std::vector< std::string > fgroups)
Definition: MHO_DiFXBaselineProcessor.hh:168
void SetCorrelationDate(std::string corrdate)
Setter for correlation date.
Definition: MHO_DiFXBaselineProcessor.hh:68
void SetDiFXCodes2VexNames(const std::map< std::string, std::string > &d2v_map)
Setter for difx codes to vex names (difx 2 char code to canonical station names (8 char))
Definition: MHO_DiFXBaselineProcessor.hh:119
void SetAttachDiFXInputFalse()
Setter for attach difx input false (do not attach difx .input info to visibilities)
Definition: MHO_DiFXBaselineProcessor.hh:88
void AddRecord(MHO_DiFXVisibilityRecord *record)
Adds a visibility record (chunk of difx data) to the processor if it matches baseline and selection c...
Definition: MHO_DiFXBaselineProcessor.cc:59
void SetAttachDiFXInputTrue()
Setter for attach difx .input true (attaches json object containing difx .input info to visibilities)
Definition: MHO_DiFXBaselineProcessor.hh:83
void SetRootCode(std::string rcode)
Setter for (hops) root code.
Definition: MHO_DiFXBaselineProcessor.hh:61
std::string GetRemStationMk4Id() const
Getter for remote station mk4id.
Definition: MHO_DiFXBaselineProcessor.hh:158
Class MHO_DiFXVisibilityRecord.
Definition: MHO_DiFXVisibilityRecord.hh:24
int mjd
Definition: MHO_DiFXVisibilityRecord.hh:93
double seconds
Definition: MHO_DiFXVisibilityRecord.hh:94
Class MHO_ObjectTags.
Definition: MHO_ObjectTags.hh:28
Class MHO_StationCodeMap Handles the mapping of two character and one character station representatio...
Definition: MHO_StationCodeMap.hh:27
Class MHO_TableContainer.
Definition: MHO_TableContainer.hh:36
Definition: difx2mark4.h:111
int baseline
Definition: fourfit3.c:62
Definition: MHO_ChannelLabeler.hh:17