TimeDependentAverage.h
1 #ifndef _UCORRELATOR_TIME_DEPENDENT_AVERAGE_H
2 #define _UCORRELATOR_TIME_DEPENDENT_AVERAGE_H
3 
4 /* Implementation of RF TimeDependentAverages */
5 
6 class TH2F;
7 class TH1D;
8 class TH1I;
9 class TH1;
10 class TH2D;
11 #include "AnitaConventions.h"
12 #include "AnitaGeomTool.h"
13 #include "TString.h"
14 #include "TMutex.h"
15 
16 namespace UCorrelator
17 {
18 
30  {
31 
32 
33  public:
45  TimeDependentAverage(int run, int nsecs = 10,
46  const char * persistdir = 0,
47  double max_bottom_top_ratio =4.0, int min_norm = 5, double max_power = 1e6);
48 
49 
50  static const TimeDependentAverage * defaultThermal();
51  virtual ~TimeDependentAverage();
52 
56  void computePeakiness(const TimeDependentAverage * thermal = 0 , double fractionForNormalization = 0.5) const;
57 
63  void saveToDir(const char * dir);
64 
65  /* Get the spectrogrma at a time. This currently does not interpoolate... just picks the closet bin */
66  TH1 *getSpectrumAverage(AnitaPol::AnitaPol_t pol, int ant, double t, bool db = false, bool minbias = false) const;
67 
68  /* Get the spectrum at a given percentile. e.g. at pct = 0.5, gives the median spectrum */
69  TH1 *getSpectrumPercentile(AnitaPol::AnitaPol_t pol, int ant, double pct = 0.1, bool db = false, bool minbias = false) const;
70 
71  double getStartTime() const;
72  double getEndTime() const;
73 
74  const TH2F * getSpectrogram(AnitaPol::AnitaPol_t pol, int ant, bool minbias = false) const;
75  const TH1D * getRMS(AnitaPol::AnitaPol_t pol, int ant) const;
76  double getRMS(AnitaPol::AnitaPol_t pol, int ant, double t) const;
77  const TH1I * getNBlasts() const { return nblasts; }
78  double getBlastFraction(double t) const;
79  const TH1I * getNorms(bool minbias = false) const { return minbias ? norms_minbias : norms; }
80  const TH2D * getPeakiness(AnitaPol::AnitaPol_t pol, int ant, bool minbias = false) const;
81  int getRun() const { return run; }
82  int getNsecs() const { return nsecs; }
83 
84  private:
85  //these are read on demand since they're biggish
86  mutable TH2F * avgs[NUM_SEAVEYS][2];
87  mutable TH2F * avgs_minbias[NUM_SEAVEYS][2];
88  mutable TH1D * rms[NUM_SEAVEYS][2];
89  mutable bool avgs_loaded;
90  mutable bool rms_loaded;
91  mutable bool peakiness_loaded; ;
92  TH1I * nblasts;
93  TH1I * norms;
94  TH1I * norms_minbias;
95 
96  mutable TMutex m;
97  mutable TH2D * peakiness[NUM_SEAVEYS][2];
98  mutable TH2D * peakiness_minbias[NUM_SEAVEYS][2];
99  TString fname;
100  int computeAverage(double max_r, int min_norm, double max_power);
101  int nsecs;
102  int run;
103  const char * dir;
104 
105  };
106 
107 
108  /* This will try to to find an appropriate spectrum average
109  * for a given time. Useful for MC or other cases where we span runs */
110 
112  {
113 
114  public:
115  TimeDependentAverageLoader(const char * dir = 0, int nsecs = 10);
116 
117  /* Tries to find a TimeDependentAverage with the right run */
118  const TimeDependentAverage * avg(double t) const;
119 
120 
127  static double getRMS(double t, int ipol, int ant, int nsecs = 10);
128  static double getPayloadBlastFraction(double t, int nsecs =10);
129 
130  void setNSecs(int n) { nsecs = n; }
131  int getNsecs() const { return nsecs; }
132  private:
133  mutable TimeDependentAverage * tavg;
134  const char * dir;
135  int nsecs;
136  };
137 
138 
139 }
140 
141 #endif
TimeDependentAverage(int run, int nsecs=10, const char *persistdir=0, double max_bottom_top_ratio=4.0, int min_norm=5, double max_power=1e6)
void computePeakiness(const TimeDependentAverage *thermal=0, double fractionForNormalization=0.5) const
enum AnitaPol::EAnitaPol AnitaPol_t
Polarisation enumeration.
static double getRMS(double t, int ipol, int ant, int nsecs=10)