HOPS
HOPS class reference
MHO_MBDelaySearch.hh
Go to the documentation of this file.
1 #ifndef MHO_MBDelaySearch_HH__
2 #define MHO_MBDelaySearch_HH__
3 
4 #include <cmath>
5 #include <complex>
6 
7 #include "MHO_AxisPack.hh"
9 #include "MHO_CyclicRotator.hh"
10 #include "MHO_DelayRate.hh"
11 #include "MHO_ExtremaSearch.hh"
13 #include "MHO_TableContainer.hh"
15 
16 #ifdef HOPS_USE_FFTW3
18 #else
20 #endif
21 
22 namespace hops
23 {
24 
36 
40 class MHO_MBDelaySearch: public MHO_InspectingOperator< visibility_type >
41 {
42  public:
44  virtual ~MHO_MBDelaySearch();
45 
51  void SetWeights(weight_type* wt_data) { fWeights = wt_data; }
52 
58  void SetReferenceFrequency(double ref_freq) { fRefFreq = ref_freq; }
59 
60  //configure the search windows (using floating point limits)
61  //default is the full range
68  void SetSBDWindow(double low, double high);
75  void SetMBDWindow(double low, double high);
82  void SetDRWindow(double low, double high);
83 
84  //retrieve the window limits (that were actually used)
91  void GetSBDWindow(double& low, double& high) const;
98  void GetMBDWindow(double& low, double& high) const;
105  void GetDRWindow(double& low, double& high) const;
106 
112  int GetMBDMaxBin() const { return fMBDMaxBin; }
113 
119  int GetSBDMaxBin() const { return fSBDMaxBin; }
120 
126  int GetDRMaxBin() const { return fDRMaxBin; }
127 
133  double GetCoarseMBD() const { return fCoarseMBD; }
134 
140  double GetCoarseSBD() const { return fCoarseSBD; }
141 
147  double GetCoarseDR() const { return fCoarseDR; }
148 
154  void SetCoherenceTime(double t_cohere)
155  {
156  fTCohere = t_cohere;
157  fTCohereEnabled = (t_cohere > 0.0);
158  }
159 
165  double GetSBDBinSeparation() const { return fSBDBinSep; }
166 
172  int GetNMBDBins() const { return fNGridPoints; };
173 
179  int GetNSBDBins() const { return fNSBD; };
180 
186  int GetNDRBins() const { return fNDR; };
187 
189 
190  double GetNPointsSearched() const;
191 
192  double GetSearchMaximumAmplitude() const { return fMax; }
193 
194  double GetFrequencySpacing() const { return fGridSpace; }
195 
196  double GetAverageFrequency() const { return fAverageFreq; }
197 
199 
201 
202  protected:
204 
205  virtual bool InitializeImpl(const XArgType* in) override;
206  virtual bool ExecuteImpl(const XArgType* in) override;
207 
219  bool finalize_search();
220 
230  void apply_dr_boxcar_smooth(mbd_dr_type& buffer, std::vector< double >& scratch);
231 
232  // std::vector< double > DetermineFrequencyPoints(const XArgType* in);
233 
234  protected:
235  void SetWindow(double* win, double low, double high);
236  void GetWindow(const MHO_Axis< double >& axis, bool win_set, const double* win, double bin_width, double& low,
237  double& high) const;
238 
239  //workspace
241  std::vector< double > fChannelFreqs;
242 
247 
250 
251  //dims and parameters
252  double fGridStart;
253  double fGridSpace;
254  double fAverageFreq;
255  std::size_t fNGridPoints;
256  std::size_t fNSBD;
257  std::size_t fNDR;
258  std::size_t fNDRSP;
259  std::map< std::size_t, std::size_t > fMBDBinMap;
260  double fRefFreq;
262  int fSBDStop;
263 
264  //incoherent averaging parameters
266  double fTCohere; //coherence time (s)
267  double fAccPeriod; //accumulation period (s), derived from time axis spacing
268 
269  //scratch space for apply_dr_boxcar_smooth (base + CUDA); OpenMP uses fPerThreadSmoothScratch instead
270  std::vector< double > fSmoothedAmpBuffer; //one DR amplitude row, size fNDRSP
271 
272  //the bin width in each dimension
273  double fSBDBinSep;
274  double fDRBinSep;
275  double fMBDBinSep;
276 
277  //the window limits
278  double fSBDWin[2];
279  double fMBDWin[2];
280  double fDRWin[2];
281 
282  //indicates if window limits have been set
285  bool fDRWinSet;
286 
287  //location and value of the maximum
288  double fMax;
292 
293  double fCoarseMBD;
294  double fCoarseSBD;
295  double fCoarseDR;
296 
297  //the number of points searched
299 
303 
305  MHO_DelayRate fDelayRateCalc; //delay rate calculator
306 
307  //associated info for channel index re-mapping (needed for combining double sideband channel pairs)
308  std::map< std::size_t, std::size_t > fChannelIndexToFreqPointIndex;
309  //precomputed flat lookup: fMBDBinForChannel[ch] = fMBDBinMap[fChannelIndexToFreqPointIndex[ch]]
310  //avoids two std::map traversals per (sbd, dr, ch) iteration in the hot loop
311  std::vector< std::size_t > fMBDBinForChannel;
312 
313 #ifdef HOPS_USE_FFTW3
316 #else
319 #endif
320 
321  FFT_ENGINE_TYPE fFFTEngine; //1D engine - used only for MBD axis label setup
322  FFT_2D_ENGINE_TYPE fBatchedFFTEngine; //2D engine - batched FFT over all DR bins at once
323 
324  //2D [DR x MBD] host buffer for batched FFT (see MHO_MBDelaySearchCUDA for the GPU analogue)
326 
328 
330 };
331 
332 } // namespace hops
333 
334 #endif
int axis(char *y_axis, char *x_axis)
Definition: axis.c:22
Class MHO_AxisPack.
Definition: MHO_AxisPack.hh:22
Class MHO_CyclicRotator.
Definition: MHO_CyclicRotator.hh:29
Class MHO_DelayRate.
Definition: MHO_DelayRate.hh:35
int GetDelayRateSearchSpaceSize() const
Getter for delay rate search space size.
Definition: MHO_DelayRate.hh:52
Class MHO_ExtremaSearch.
Definition: MHO_ExtremaSearch.hh:29
Class MHO_InspectingOperator.
Definition: MHO_InspectingOperator.hh:21
Class MHO_MBDelaySearch.
Definition: MHO_MBDelaySearch.hh:41
MHO_MBDelaySearch()
Definition: MHO_MBDelaySearch.cc:6
void GetWindow(const MHO_Axis< double > &axis, bool win_set, const double *win, double bin_width, double &low, double &high) const
Definition: MHO_MBDelaySearch.cc:299
weight_type fWeightsWorkspace
Definition: MHO_MBDelaySearch.hh:245
void SetMBDWindow(double low, double high)
Setter for mbd window.
Definition: MHO_MBDelaySearch.cc:325
mbd_type fMBDWorkspace
Definition: MHO_MBDelaySearch.hh:248
int fSBDStop
Definition: MHO_MBDelaySearch.hh:262
int fDRMaxBin
Definition: MHO_MBDelaySearch.hh:291
MHO_DelayRate fDelayRateCalc
Definition: MHO_MBDelaySearch.hh:305
MHO_Axis< double > fSBDAxis
Definition: MHO_MBDelaySearch.hh:300
std::vector< double > fSmoothedAmpBuffer
Definition: MHO_MBDelaySearch.hh:270
double fDRBinSep
Definition: MHO_MBDelaySearch.hh:274
double fCoarseDR
Definition: MHO_MBDelaySearch.hh:295
visibility_type sbd_dr_data
Definition: MHO_MBDelaySearch.hh:244
mbd_dr_type fSearchBuffer
Definition: MHO_MBDelaySearch.hh:325
void GetMBDWindow(double &low, double &high) const
Getter for mbd window.
Definition: MHO_MBDelaySearch.cc:345
double fGridSpace
Definition: MHO_MBDelaySearch.hh:253
double GetAverageFrequency() const
Definition: MHO_MBDelaySearch.hh:196
double GetCoarseDR() const
Getter for coarse dr.
Definition: MHO_MBDelaySearch.hh:147
double fTCohere
Definition: MHO_MBDelaySearch.hh:266
double fSBDWin[2]
Definition: MHO_MBDelaySearch.hh:278
double fCoarseSBD
Definition: MHO_MBDelaySearch.hh:294
double GetSBDBinSeparation() const
Getter for sbd bin separation.
Definition: MHO_MBDelaySearch.hh:165
time_axis_type * GetMBDAxis()
Definition: MHO_MBDelaySearch.hh:198
virtual ~MHO_MBDelaySearch()
Definition: MHO_MBDelaySearch.cc:41
bool fSBDWinSet
Definition: MHO_MBDelaySearch.hh:283
void SetWindow(double *win, double low, double high)
Definition: MHO_MBDelaySearch.cc:285
double GetFrequencySpacing() const
Definition: MHO_MBDelaySearch.hh:194
double fNPointsSearched
Definition: MHO_MBDelaySearch.hh:298
double fCoarseMBD
Definition: MHO_MBDelaySearch.hh:293
virtual bool ExecuteImpl(const XArgType *in) override
Inspects a single const array.
Definition: MHO_MBDelaySearch.cc:150
double GetCoarseSBD() const
Getter for coarse sbd.
Definition: MHO_MBDelaySearch.hh:140
std::size_t fNGridPoints
Definition: MHO_MBDelaySearch.hh:255
double fAverageFreq
Definition: MHO_MBDelaySearch.hh:254
double fAccPeriod
Definition: MHO_MBDelaySearch.hh:267
bool fDRWinSet
Definition: MHO_MBDelaySearch.hh:285
double fSBDBinSep
Definition: MHO_MBDelaySearch.hh:273
std::size_t fNDR
Definition: MHO_MBDelaySearch.hh:257
visibility_type fSBDDrWorkspace
Definition: MHO_MBDelaySearch.hh:243
void SetReferenceFrequency(double ref_freq)
Setter for reference frequency.
Definition: MHO_MBDelaySearch.hh:58
FFT_2D_ENGINE_TYPE fBatchedFFTEngine
Definition: MHO_MBDelaySearch.hh:322
std::vector< double > fChannelFreqs
Definition: MHO_MBDelaySearch.hh:241
std::size_t fNSBD
Definition: MHO_MBDelaySearch.hh:256
int GetDRMaxBin() const
Getter for drmax bin.
Definition: MHO_MBDelaySearch.hh:126
double fMBDWin[2]
Definition: MHO_MBDelaySearch.hh:279
weight_type * fWeights
Definition: MHO_MBDelaySearch.hh:246
std::size_t fNDRSP
Definition: MHO_MBDelaySearch.hh:258
mbd_amp_type fMBDAmpWorkspace
Definition: MHO_MBDelaySearch.hh:249
double fMBDBinSep
Definition: MHO_MBDelaySearch.hh:275
double fMax
Definition: MHO_MBDelaySearch.hh:288
bool fTCohereEnabled
Definition: MHO_MBDelaySearch.hh:265
int GetMBDMaxBin() const
Getter for mbdmax bin.
Definition: MHO_MBDelaySearch.hh:112
std::map< std::size_t, std::size_t > fMBDBinMap
Definition: MHO_MBDelaySearch.hh:259
std::vector< std::size_t > fMBDBinForChannel
Definition: MHO_MBDelaySearch.hh:311
int fSBDMaxBin
Definition: MHO_MBDelaySearch.hh:290
double fRefFreq
Definition: MHO_MBDelaySearch.hh:260
bool fMBDWinSet
Definition: MHO_MBDelaySearch.hh:284
int GetNDRSPBins() const
Definition: MHO_MBDelaySearch.hh:188
MHO_UniformGridPointsCalculator fGridCalc
Definition: MHO_MBDelaySearch.hh:304
bool fInitialized
Definition: MHO_MBDelaySearch.hh:240
int fSBDStart
Definition: MHO_MBDelaySearch.hh:261
int GetNMBDBins() const
Getter for N mbd bins.
Definition: MHO_MBDelaySearch.hh:172
double GetCoarseMBD() const
Getter for coarse mbd.
Definition: MHO_MBDelaySearch.hh:133
double fGridStart
Definition: MHO_MBDelaySearch.hh:252
bool finalize_search()
Finalize the coarse search: validate bin locations, compute coarse delay values from axis lookups,...
Definition: MHO_MBDelaySearch.cc:387
void GetDRWindow(double &low, double &high) const
Getter for dr window.
Definition: MHO_MBDelaySearch.cc:350
MHO_Axis< double > fMBDAxis
Definition: MHO_MBDelaySearch.hh:301
int GetNDRBins() const
Getter for ndrbins.
Definition: MHO_MBDelaySearch.hh:186
int GetNSBDBins() const
Getter for n sbd bins.
Definition: MHO_MBDelaySearch.hh:179
void SetSBDWindow(double low, double high)
Setter for sbd window.
Definition: MHO_MBDelaySearch.cc:318
void SetWeights(weight_type *wt_data)
Setter for weights.
Definition: MHO_MBDelaySearch.hh:51
virtual bool InitializeImpl(const XArgType *in) override
initializes inspection for a single const array of type XArgType.
Definition: MHO_MBDelaySearch.cc:43
double GetSearchMaximumAmplitude() const
Definition: MHO_MBDelaySearch.hh:192
double GetNPointsSearched() const
Definition: MHO_MBDelaySearch.cc:278
void apply_dr_boxcar_smooth(mbd_dr_type &buffer, std::vector< double > &scratch)
Applies incoherent box-car smoothing over the delay-rate dimension of the given search buffer,...
Definition: MHO_MBDelaySearch.cc:355
void GetSBDWindow(double &low, double &high) const
Getter for sbd window.
Definition: MHO_MBDelaySearch.cc:340
double fDRWin[2]
Definition: MHO_MBDelaySearch.hh:280
delay_rate_axis_type * GetDRAxis()
Definition: MHO_MBDelaySearch.hh:200
void SetDRWindow(double low, double high)
Setter for dr window.
Definition: MHO_MBDelaySearch.cc:332
MHO_CyclicRotator< mbd_type > fCyclicRotator
Definition: MHO_MBDelaySearch.hh:327
int GetSBDMaxBin() const
Getter for sbdmax bin.
Definition: MHO_MBDelaySearch.hh:119
void SetCoherenceTime(double t_cohere)
Setter for coherence time (enables incoherent averaging over delay rate)
Definition: MHO_MBDelaySearch.hh:154
MHO_ExtremaSearch< mbd_amp_type > fMaxSearch
Definition: MHO_MBDelaySearch.hh:329
FFT_ENGINE_TYPE fFFTEngine
Definition: MHO_MBDelaySearch.hh:321
int fMBDMaxBin
Definition: MHO_MBDelaySearch.hh:289
std::map< std::size_t, std::size_t > fChannelIndexToFreqPointIndex
Definition: MHO_MBDelaySearch.hh:308
MHO_Axis< double > fDRAxis
Definition: MHO_MBDelaySearch.hh:302
Class MHO_MultidimensionalFastFourierTransformFFTW.
Definition: MHO_MultidimensionalFastFourierTransformFFTW.hh:37
Class MHO_UniformGridPointsCalculator.
Definition: MHO_UniformGridPointsCalculator.hh:26
char buffer[MAX_BUFFER][MAX_CHARS]
Definition: fourmer.c:46
Definition: MHO_AdhocFlagging.hh:18
MHO_TableContainer< visibility_element_type, baseline_axis_pack > visibility_type
Definition: MHO_BaselineContainers.hh:52