Util.cc
1 #include "UCUtil.h"
2 #include "UsefulAdu5Pat.h"
3 #include "RawAnitaHeader.h"
4 #include "AnalysisConfig.h"
5 
6 /* nothing to see here, please move along */
7 
8 
9 static const UCorrelator::AnalysisConfig defaultConfig;
10 
11 static const double C_in_m_ns = 0.299792;
12 
13 
14 double UCorrelator::getWAISDt(const UsefulAdu5Pat * pat, const RawAnitaHeader * hdr, AnitaPol::AnitaPol_t pol, const AnalysisConfig * cfg, double * distance)
15 {
16 
17  if (!cfg) cfg = &defaultConfig;
18 
19  double time_to_wais = ((UsefulAdu5Pat*) pat)->getWaisDivideTriggerTimeNs();
20  if (distance) *distance = time_to_wais * C_in_m_ns;
21  unsigned trig_time = hdr->triggerTimeNs;
22  return trig_time + (pol == AnitaPol::kHorizontal ? cfg->wais_hpol : cfg->wais_vpol).GPS_offset- time_to_wais;
23 }
24 
25 
26 bool UCorrelator::isWAISVPol(const UsefulAdu5Pat * pat, const RawAnitaHeader * hdr, const AnalysisConfig * cfg )
27 {
28 
29  if (!cfg) cfg = &defaultConfig;
30 
31  double distance;
32  double dt = getWAISDt(pat,hdr, AnitaPol::kVertical, cfg,&distance);
33  if (distance > cfg->wais_vpol.max_distance) return false;
34  if (fabs(dt) > cfg->wais_vpol.max_dt) return false;
35 
36  return true;
37 }
38 
39 bool UCorrelator::isWAISHPol(const UsefulAdu5Pat * pat, const RawAnitaHeader * hdr, const AnalysisConfig * cfg )
40 {
41  if (!cfg) cfg = &defaultConfig;
42 
43  double distance;
44  double dt = getWAISDt(pat,hdr, AnitaPol::kHorizontal, cfg,&distance);
45 
46 // printf("dt: %f; distance: %f\n", dt, distance);
47  if (distance > cfg->wais_hpol.max_distance) return false;
48  if (fabs(dt) > cfg->wais_hpol.max_dt) return false;
49 
50  return true;
51 }
52 
53 bool UCorrelator::isSIPLEVPol(const UsefulAdu5Pat * pat, const RawAnitaHeader * hdr, const AnalysisConfig * cfg )
54 {
55  if (!cfg) cfg = &defaultConfig;
56 
57  double distance;
58  double dt = getSIPLEDt(pat,hdr, AnitaPol::kVertical, cfg,&distance);
59 
60 // printf("dt: %f; distance: %f\n", dt, distance);
61  if (distance > cfg->siple_vpol.max_distance) return false;
62  if (fabs(dt) > cfg->siple_vpol.max_dt) return false;
63 
64  return true;
65 }
66 
67 bool UCorrelator::isSIPLEHPol(const UsefulAdu5Pat * pat, const RawAnitaHeader * hdr, const AnalysisConfig * cfg )
68 {
69  if (!cfg) cfg = &defaultConfig;
70 
71  double distance;
72  double dt = getSIPLEDt(pat,hdr, AnitaPol::kHorizontal, cfg,&distance);
73 
74 // printf("dt: %f; distance: %f\n", dt, distance);
75  if (distance > cfg->siple_hpol.max_distance) return false;
76  if (fabs(dt) > cfg->siple_hpol.max_dt) return false;
77 
78  return true;
79 }
80 
81 double UCorrelator::getSIPLEDt(const UsefulAdu5Pat * pat, const RawAnitaHeader * hdr, AnitaPol::AnitaPol_t pol, const AnalysisConfig * cfg, double * distance)
82 {
83 
84  if (!cfg) cfg = &defaultConfig;
85 
86  double time_to_wais = ((UsefulAdu5Pat*) pat)->getSipleTriggerTimeNs();
87  if (distance) *distance = time_to_wais * C_in_m_ns;
88  unsigned trig_time = hdr->triggerTimeNs;
89  return trig_time + (pol == AnitaPol::kHorizontal ? cfg->siple_hpol : cfg->siple_vpol).GPS_offset- time_to_wais;
90 }
91 
92 bool UCorrelator::isLDB(const RawAnitaHeader * hdr, const AnalysisConfig * cfg )
93 {
94  if (!cfg) cfg = &defaultConfig;
95 
96  if (hdr->run > cfg->ldb_max_run) return false;
97  if (! cfg->ldb_hist()) return false;
98 
99  int binx = cfg->ldb_hist()->GetXaxis()->FindFixBin(hdr->triggerTime);
100  int biny = cfg->ldb_hist()->GetYaxis()->FindFixBin(hdr->triggerTimeNs);
101  return cfg->ldb_hist()->GetBinContent(binx,biny);
102 }
103 
104 
105 
106 
107 
bool isLDB(const RawAnitaHeader *hdr, const AnalysisConfig *cfg=0)
Definition: Util.cc:92
UInt_t triggerTimeNs
Trigger time in ns from TURF.
bool isWAISVPol(const UsefulAdu5Pat *pat, const RawAnitaHeader *hdr, const AnalysisConfig *cfg=0)
Definition: Util.cc:26
bool isWAISHPol(const UsefulAdu5Pat *pat, const RawAnitaHeader *hdr, const AnalysisConfig *cfg=0)
Definition: Util.cc:39
double getSIPLEDt(const UsefulAdu5Pat *pat, const RawAnitaHeader *hdr, AnitaPol::AnitaPol_t pol=AnitaPol::kHorizontal, const AnalysisConfig *cfg=0, double *distance=0)
Definition: Util.cc:81
bool isSIPLEHPol(const UsefulAdu5Pat *pat, const RawAnitaHeader *hdr, const AnalysisConfig *cfg=0)
Definition: Util.cc:67
RawAnitaHeader – The Raw ANITA Event Header.
Int_t run
Run number, assigned on ground.
As UsefulAnitaEvent is to RawAnitaEvent, UsefulAdu5Pat is to Adu5Pat. Well not quite as useful but yo...
Definition: UsefulAdu5Pat.h:39
bool isSIPLEVPol(const UsefulAdu5Pat *pat, const RawAnitaHeader *hdr, const AnalysisConfig *cfg=0)
Definition: Util.cc:53
Vertical Polarisation.
Horizontal Polarisation.
enum AnitaPol::EAnitaPol AnitaPol_t
Polarisation enumeration.
UInt_t triggerTime
Trigger time from TURF converted to unixTime.
double getWAISDt(const UsefulAdu5Pat *pat, const RawAnitaHeader *hdr, AnitaPol::AnitaPol_t pol=AnitaPol::kHorizontal, const AnalysisConfig *cfg=0, double *distance=0)
Definition: Util.cc:14