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_SkyFreqGrid.hh"
14 #include "MHO_StationCodeMap.hh"
15 
16 namespace hops
17 {
18 
31 {
32  public:
35 
41  void SetDiFXInputData(const mho_json* input) { fInput = input; }
42 
48  void SetScanIndex(std::size_t idx) { fIndex = idx; }
49 
55  int GetBaselineID() const { return fBaselineID; };
56 
62  void SetRootCode(std::string rcode) { fRootCode = rcode; }
63 
69  void SetCorrelationDate(std::string corrdate) { fCorrDate = corrdate; }
70 
74  void SetRescaleFalse() { fRescale = false; }
75 
79  void SetRescaleTrue() { fRescale = true; }
80 
84  void SetAttachDiFXInputTrue() { fAttachDiFXInput = true; }
85 
89  void SetAttachDiFXInputFalse() { fAttachDiFXInput = false; }
90 
91  void SetExportAsMark4True() { fExportAsMark4 = true; }
92 
93  void SetExportAsMark4False() { fExportAsMark4 = false; }
94 
100  void AddRecord(MHO_DiFXVisibilityRecord* record);
101 
107  void SetStationCodes(MHO_StationCodeMap* code_map);
108 
114  void SetDiFXCodes2VexCodes(const std::map< std::string, std::string >& d2v_map) { fDiFX2VexStationCodes = d2v_map; };
115 
121  void SetDiFXCodes2VexNames(const std::map< std::string, std::string >& d2v_map) { fDiFX2VexStationNames = d2v_map; };
122 
132  void WriteVisibilityObjects(std::string output_dir);
133 
139  bool IsAutoCorr() const
140  {
141  if(fRefStation == fRemStation)
142  {
143  return true;
144  }
145  return false;
146  };
147 
153  std::string GetRefStationMk4Id() const { return fRefStationMk4Id; }
154 
160  std::string GetRemStationMk4Id() const { return fRemStationMk4Id; }
161 
162  std::string GetBaselineShortName() const { return fBaselineShortName; }
163 
165 
166  void Clear();
167 
168  void SetFrequencyBands(std::vector< std::tuple< std::string, double, double > > fbands) { fFreqBands = fbands; }
169 
170  void SetFreqGroups(std::vector< std::string > fgroups) { fOnlyFreqGroups = fgroups; }
171 
172  void SetOnlyBandwidth(double bw)
173  {
174  fOnlyBandwidth = bw;
175  fSelectByBandwidth = true;
176  }
177 
178  void SetZoomFreqIndices(const std::set< int >& zoom_indices) { fZoomFreqIndices = zoom_indices; }
179 
192  void SetGlobalSkyFreqGrid(const std::vector< double >& grid_MHz, double tol = MHO_SkyFreqGrid::DEFAULT_TOL_MHZ)
193  {
194  fGlobalGrid = MHO_SkyFreqGrid(grid_MHz, tol);
195  fHasGlobalGrid = true;
196  }
197 
202  const std::vector< std::pair< int, mho_json > >& GetBaselineFreqs() const { return fBaselineFreqs; }
203 
210  void Organize();
211 
212  private:
213  void DeleteDiFXVisRecords();
214 
215  std::string ConstructCorFileName(const std::string& output_dir, const std::string& root_code,
216  const std::string& baseline, const std::string& baseline_shortname);
217 
218  std::string DetermineFreqGroup(double freq);
219 
220  std::string fRootCode;
221  std::string fCorrDate;
222  int fBaselineID;
223  std::size_t fIndex;
224  std::string fRefStation;
225  std::string fRemStation;
226  std::string fRefStationName;
227  std::string fRemStationName;
228  std::string fRefStationMk4Id;
229  std::string fRemStationMk4Id;
230  std::string fBaselineName;
231  std::string fBaselineShortName;
232  std::string fBaselineDelim;
233  int fRefStationBits;
234  int fRemStationBits;
235  double fAPLength;
236 
237  //the station 2-char to 1-char code map (user specified)
238  MHO_StationCodeMap* fStationCodeMap;
239 
240  //the station 2-char to 2-char code map (to deal with DiFX capitalization issue)
241  std::map< std::string, std::string > fDiFX2VexStationCodes;
242  //the difx station 2-char to vex station name map
243  std::map< std::string, std::string > fDiFX2VexStationNames;
244 
245  const mho_json* fInput;
246  std::vector< MHO_DiFXVisibilityRecord* > fRecords;
247  //for a single baseline, maps pol-pair, then freqindex to visiblity records
248  //needed to recorganized the visibilities into tables
249  std::map< std::string, std::map< int, std::vector< MHO_DiFXVisibilityRecord* > > > fVisibilities;
250 
251  std::set< int > fZoomFreqIndices; //when non-empty, discard native-band records keeping root/vis consistent
252 
253  std::set< std::string > fPolPairSet;
254  std::set< int > fFreqIndexSet;
255  std::set< int > fAPSet;
256  std::set< int > fSpecPointSet;
257  std::set< double > fBandwidthSet;
258  std::size_t fNPolPairs;
259  std::size_t fNChannels;
260  std::size_t fNAPs;
261  std::size_t fNSpectralPoints;
262  double fStartMJD; //scan start time in MJD
263  std::string fStartTime;
264  std::string fStopTime;
265  std::string fSourceName;
266  bool fCanChannelize;
267  bool fHaveBaselineData;
268 
269  bool fRescale;
270  std::map< int, double > fNBitsToFactor;
271  double fScaleFactor;
272 
273  bool fAttachDiFXInput;
274  bool fExportAsMark4;
275 
276  //list of channel frequencies for this baseline, sorted in ascending order (freq)
277  std::vector< std::pair< int, mho_json > > fBaselineFreqs;
278  std::set< std::string > fFreqBandLabelSet;
279 
280  //scan-wide ordered sky-freq grid used to number mark4 chan_ids consistently across
281  //all baselines and stations. set by MHO_DiFXScanProcessor once visibility records
282  //have been read and each baseline organized (so the union of sky_freqs is known).
283  MHO_SkyFreqGrid fGlobalGrid;
284  bool fHasGlobalGrid;
285 
286  //the baseline data in hops data containers
287  weight_store_type* fW;
289  MHO_ObjectTags fTags;
290 
291  //selection information
292  std::vector< std::tuple< std::string, double, double > > fFreqBands; //frequency band/group labels and ranges
293  std::vector< std::string > fOnlyFreqGroups; //limit output to matching frequency groups
294  bool fSelectByBandwidth;
295  double fOnlyBandwidth; //limit output to only channels of this bandwidth
296 
297  //comparison predicate for time-sorting visibility record data
298  struct VisRecordTimeLess
299  {
300  bool operator()(const MHO_DiFXVisibilityRecord* a, const MHO_DiFXVisibilityRecord* b) const
301  {
302  if(a->mjd == b->mjd)
303  {
304  return a->seconds < b->seconds;
305  }
306  else
307  {
308  return a->mjd < b->mjd;
309  }
310  }
311  };
312 
313  VisRecordTimeLess fTimePredicate;
314 
315  //comparison predicate for sorting index-frequency record pairs (use center-frequency)
316  struct FreqIndexPairLess
317  {
318  bool operator()(const std::pair< int, mho_json >& a, const std::pair< int, mho_json >& b) const
319  {
320  double a_freq = a.second["freq"];
321  double b_freq = b.second["freq"];
322 
323  double a_bw = a.second["bw"];
324  double b_bw = b.second["bw"];
325 
326  std::string a_sb = a.second["sideband"];
327  std::string b_sb = b.second["sideband"];
328  double a_sign = 0;
329  double b_sign = 0;
330  if(a_sb == "U")
331  {
332  a_sign = 1.0;
333  }
334  if(a_sb == "L")
335  {
336  a_sign = -1.0;
337  }
338  if(b_sb == "U")
339  {
340  b_sign = 1.0;
341  }
342  if(b_sb == "L")
343  {
344  b_sign = -1.0;
345  }
346 
347  //figure out the channel center frequencies and compare using that
348  double a_center = a_freq + a_sign * (a_bw / 2.0);
349  double b_center = b_freq + b_sign * (b_bw / 2.0);
350 
351  return a_center < b_center;
352  }
353  };
354 
355  FreqIndexPairLess fFreqPredicate;
356 };
357 
358 } // namespace hops
359 
360 #endif
nlohmann::json mho_json
Definition: MHO_JSONHeaderWrapper.hh:5
Class MHO_DiFXBaselineProcessor.
Definition: MHO_DiFXBaselineProcessor.hh:31
virtual ~MHO_DiFXBaselineProcessor()
Definition: MHO_DiFXBaselineProcessor.cc:56
void SetExportAsMark4False()
Definition: MHO_DiFXBaselineProcessor.hh:93
visibility_store_type * GetVisibilities()
Definition: MHO_DiFXBaselineProcessor.hh:164
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:114
void SetFrequencyBands(std::vector< std::tuple< std::string, double, double > > fbands)
Definition: MHO_DiFXBaselineProcessor.hh:168
void SetOnlyBandwidth(double bw)
Definition: MHO_DiFXBaselineProcessor.hh:172
std::string GetRefStationMk4Id() const
Getter for reference station mk4id.
Definition: MHO_DiFXBaselineProcessor.hh:153
void SetZoomFreqIndices(const std::set< int > &zoom_indices)
Definition: MHO_DiFXBaselineProcessor.hh:178
std::string GetBaselineShortName() const
Definition: MHO_DiFXBaselineProcessor.hh:162
void SetGlobalSkyFreqGrid(const std::vector< double > &grid_MHz, double tol=MHO_SkyFreqGrid::DEFAULT_TOL_MHZ)
Provides a precomputed global sky-frequency grid (MHz, sorted ascending, deduplicated over freq) used...
Definition: MHO_DiFXBaselineProcessor.hh:192
void Clear()
Definition: MHO_DiFXBaselineProcessor.cc:651
void SetDiFXInputData(const mho_json *input)
Setter for difx .input data (needed for processing visibilities)
Definition: MHO_DiFXBaselineProcessor.hh:41
bool IsAutoCorr() const
Checks if reference station is equal to remote station.
Definition: MHO_DiFXBaselineProcessor.hh:139
void SetScanIndex(std::size_t idx)
Setter for scan index.
Definition: MHO_DiFXBaselineProcessor.hh:48
void SetStationCodes(MHO_StationCodeMap *code_map)
Setter for station codes (2 characater -> 1 character)
Definition: MHO_DiFXBaselineProcessor.cc:358
void WriteVisibilityObjects(std::string output_dir)
Writes visibility objects in HOPS4 format to an output directory.
Definition: MHO_DiFXBaselineProcessor.cc:595
void SetRescaleFalse()
Setter for rescale false - Do NOT apply mk4 style visibility normalization.
Definition: MHO_DiFXBaselineProcessor.hh:74
int GetBaselineID() const
Getter for (difx) baseline id.
Definition: MHO_DiFXBaselineProcessor.hh:55
void SetExportAsMark4True()
Definition: MHO_DiFXBaselineProcessor.hh:91
void SetRescaleTrue()
Setter for rescale true - apply mk4 style visibility normalization.
Definition: MHO_DiFXBaselineProcessor.hh:79
MHO_DiFXBaselineProcessor()
Definition: MHO_DiFXBaselineProcessor.cc:26
void ConstructVisibilityFileObjects()
Constructs visibility file objects by organizing data and setting tags for visibilities and weights.
Definition: MHO_DiFXBaselineProcessor.cc:363
const std::vector< std::pair< int, mho_json > > & GetBaselineFreqs() const
Read-only access to the ordered (ascending sky_freq) list of channels this baseline will export....
Definition: MHO_DiFXBaselineProcessor.hh:202
void SetFreqGroups(std::vector< std::string > fgroups)
Definition: MHO_DiFXBaselineProcessor.hh:170
void SetCorrelationDate(std::string corrdate)
Setter for correlation date.
Definition: MHO_DiFXBaselineProcessor.hh:69
void Organize()
Build the per-baseline derived state (fFreqIndexSet -> fBaselineFreqs, AP counts, scan times,...
Definition: MHO_DiFXBaselineProcessor.cc:152
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:121
void SetAttachDiFXInputFalse()
Setter for attach difx input false (do not attach difx .input info to visibilities)
Definition: MHO_DiFXBaselineProcessor.hh:89
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:61
void SetAttachDiFXInputTrue()
Setter for attach difx .input true (attaches json object containing difx .input info to visibilities)
Definition: MHO_DiFXBaselineProcessor.hh:84
void SetRootCode(std::string rcode)
Setter for (hops) root code.
Definition: MHO_DiFXBaselineProcessor.hh:62
std::string GetRemStationMk4Id() const
Getter for remote station mk4id.
Definition: MHO_DiFXBaselineProcessor.hh:160
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
Creates a sorted, tolerance-deduplicated list of sky frequencies (MHz) with indexed lookup....
Definition: MHO_SkyFreqGrid.hh:23
static constexpr double DEFAULT_TOL_MHZ
Definition: MHO_SkyFreqGrid.hh:25
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_AdhocFlagging.hh:18