HOPS
HOPS class reference
MHO_ManualPolDelayCorrection.hh
Go to the documentation of this file.
1 #ifndef MHO_ManualPolDelayCorrection_HH__
2 #define MHO_ManualPolDelayCorrection_HH__
3 
4 #include <cctype>
5 #include <cmath>
6 #include <complex>
7 #include <map>
8 #include <vector>
9 
10 #include "MHO_Constants.hh"
11 #include "MHO_Message.hh"
12 
14 #include "MHO_TableContainer.hh"
15 #include "MHO_UnaryOperator.hh"
16 
17 namespace hops
18 {
19 
31 class MHO_ManualPolDelayCorrection: public MHO_UnaryOperator< visibility_type >
32 {
33  public:
36 
42  void SetReferenceFrequency(double ref_freq) { fRefFreq = ref_freq; }
43 
52  void SetStationIdentifier(const std::string& id) { fStationIdentities = {id}; }
53 
54  void SetStationIdentifiers(const std::vector< std::string >& ids) { fStationIdentities = ids; }
55 
56  std::string GetStationIdentifier() const
57  {
58  return fStationIdentities.empty() ? std::string("") : fStationIdentities[0];
59  }
60 
66  void SetPolarization(const std::string& pol)
67  {
68  fPol = pol;
69  make_upper(fPol);
70  };
71 
77  void SetPCDelayOffset(double pc_delay_offset) { fDelayOffset = pc_delay_offset; }
78 
79  protected:
87  virtual bool ExecuteInPlace(visibility_type* in) override;
88 
89  private:
97  bool IsApplicable(std::size_t st_idx, const visibility_type* in);
105  bool PolMatch(std::size_t station_idx, std::string& polprod);
106 
107  //constants
108  std::complex< double > fImagUnit;
109  double fNanoSecToSecond;
110  double fMHzToHz;
111  double fPi;
112 
113  //selection
114  std::vector< std::string > fStationIdentities;
115  std::string fPol;
116 
117  //ref freq and pc delay
118  double fRefFreq;
119  double fDelayOffset;
120 
121  //keys for tag retrieval
122  std::string fStationKey;
123  std::string fRemStationKey;
124  std::string fRefStationKey;
125  std::string fRemStationMk4IDKey;
126  std::string fRefStationMk4IDKey;
127 
128  std::string fSidebandLabelKey;
129  std::string fLowerSideband;
130  std::string fUpperSideband;
131 
132  //minor helper function to make sure all strings are compared as upper-case only
133  void make_upper(std::string& s)
134  {
135  for(char& c : s)
136  {
137  c = toupper(c);
138  };
139  }
140 };
141 
142 } // namespace hops
143 
144 #endif
Class MHO_ManualPolDelayCorrection.
Definition: MHO_ManualPolDelayCorrection.hh:32
virtual ~MHO_ManualPolDelayCorrection()
Definition: MHO_ManualPolDelayCorrection.cc:27
std::string GetStationIdentifier() const
Definition: MHO_ManualPolDelayCorrection.hh:56
void SetStationIdentifier(const std::string &id)
Setter for station identifier.
Definition: MHO_ManualPolDelayCorrection.hh:52
virtual bool ExecuteInPlace(visibility_type *in) override
Applies manual delay offset and calculates phase correction factors for each channel.
Definition: MHO_ManualPolDelayCorrection.cc:29
void SetPolarization(const std::string &pol)
Setter for polarization.
Definition: MHO_ManualPolDelayCorrection.hh:66
void SetPCDelayOffset(double pc_delay_offset)
Setter for pcdelay offset.
Definition: MHO_ManualPolDelayCorrection.hh:77
void SetReferenceFrequency(double ref_freq)
Setter for reference frequency.
Definition: MHO_ManualPolDelayCorrection.hh:42
void SetStationIdentifiers(const std::vector< std::string > &ids)
Definition: MHO_ManualPolDelayCorrection.hh:54
MHO_ManualPolDelayCorrection()
Definition: MHO_ManualPolDelayCorrection.cc:6
Class MHO_UnaryOperator.
Definition: MHO_UnaryOperator.hh:24
Definition: MHO_AdhocFlagging.hh:18