RadioTraceUtilities.cc
Go to the documentation of this file.
1 #include "RadioTraceUtilities.h"
2 
3 #include <utl/TraceAlgorithm.h>
4 #include <utl/Math.h>
5 
6 
7 namespace utl {
8 
9 
10  void
12  double& noiseRMS, double& noiseMean,
13  double noiseWindowStart, double noiseWindowStop)
14  {
15  const unsigned int start = noiseWindowStart / channeltrace.GetBinning();
16  const unsigned int stop = noiseWindowStop / channeltrace.GetBinning();
17  noiseRMS = TraceAlgorithm::RootMeanSquare(channeltrace, start, stop);
18  noiseMean = TraceAlgorithm::Mean(channeltrace, start, stop);
19  }
20 
21 
22  void
24  double& peakAmplitude, double& peakTime, double& peakTimeError,
25  const double signalSearchWindowStart, const double signalSearchWindowStop,
26  unsigned int& sample)
27  {
28  peakAmplitude = 0;
29  const unsigned int start = signalSearchWindowStart / stationtrace.GetBinning();
30  const unsigned int stop = signalSearchWindowStop / stationtrace.GetBinning();
31 
32  for (unsigned int i = start; i < stop; ++i) {
33  if (stationtrace[i].GetMag() > peakAmplitude) {
34  peakAmplitude = stationtrace[i].GetMag();
35  peakTime = i * stationtrace.GetBinning();
36  sample = i;
37  }
38  }
39  /* Here only the uncertainty due to the finite binnig is considered,
40  * the uncertainty due to noise and from the GPS system is added later. */
41  peakTimeError = stationtrace.GetBinning() / std::sqrt(12);
42  }
43 
44 
45  void
47  double& peakAmplitude, double& peakTime, double& peakTimeError,
48  const double signalSearchWindowStart, const double signalSearchWindowStop,
49  unsigned int& sample)
50  {
51  peakAmplitude = 0;
52  const unsigned int start = signalSearchWindowStart / channeltrace.GetBinning();
53  const unsigned int stop = signalSearchWindowStop / channeltrace.GetBinning();
54 
55  // if trace is an envelope, the abs is not necessary but also does not harm
56  for (unsigned int i = start; i < stop; ++i) {
57  if (std::abs(channeltrace[i]) > peakAmplitude) {
58  peakAmplitude = std::abs(channeltrace[i]);
59  peakTime = i * channeltrace.GetBinning();
60  sample = i;
61  }
62  }
63  /* Here only the uncertainty due to the finite binnig is considered,
64  * the uncertainty due to noise and from the GPS system is added later. */
65  peakTimeError = channeltrace.GetBinning() / std::sqrt(12);
66  }
67 
68 
69  void
71  unsigned int sample, const double peakAmplitude,
72  double& signalTimeFWHM, double& integratedSignal,
73  double& signalWindowStart, double& signalWindowStop)
74  {
75  signalTimeFWHM = 0;
76  integratedSignal = 0;
77  unsigned int tmp = sample;
78 
79  while (sample < channeltrace.GetSize() && channeltrace[sample] > 0.5 * peakAmplitude) {
80  ++signalTimeFWHM;
81  integratedSignal += channeltrace[sample];
82  ++sample;
83  }
84  signalWindowStop = sample * channeltrace.GetBinning();
85  sample = tmp;
86 
87  while (sample > 0 && channeltrace[sample] > 0.5 * peakAmplitude) {
88  ++signalTimeFWHM;
89  integratedSignal += channeltrace[sample];
90  --sample;
91  }
92  signalWindowStart = sample * channeltrace.GetBinning();
93  signalTimeFWHM = signalTimeFWHM * channeltrace.GetBinning();
94  }
95 
96 
97  void
99  const unsigned int sample, const double integrationTime,
100  double& integratedSignal, double& signalWindowStart,
101  double& signalWindowStop, const bool usePower)
102  {
103  integratedSignal = 0;
104  signalWindowStart = sample * channeltrace.GetBinning() - integrationTime / 2;
105  signalWindowStop = sample * channeltrace.GetBinning() + integrationTime / 2;
106  const unsigned int start = std::max(0.0, sample - integrationTime / 2 / channeltrace.GetBinning());
107  const unsigned int stop =
108  std::min(channeltrace.GetSize() * 1., sample + integrationTime / 2 / channeltrace.GetBinning());
109 
110  for (unsigned int i = start; i <= stop; ++i) {
111  if (usePower) {
112  integratedSignal += Sqr(channeltrace[i]);
113  } else {
114  integratedSignal += std::abs(channeltrace[i]);
115  }
116  }
117  integratedSignal *= channeltrace.GetBinning();
118  }
119 
120 
121  void
123  double integrationTime, double& integratedSignal,
124  double& signalWindowStart, double& signalWindowStop,
125  double signalSearchWindowStart,
126  double signalSearchWindowStop,
127  int& startSample, int& stopSample)
128  {
129  const double binning = channeltrace.GetBinning();
130  integratedSignal = 0;
131  int count = 0;
132 
133  for (int windowStartPos = signalSearchWindowStart / binning;
134  windowStartPos <= (signalSearchWindowStop - integrationTime) / binning; ++windowStartPos) {
135  double newIntegratedSignal = 0;
136  count = 0;
137  for (int integratePos = 0; integratePos < integrationTime / binning; ++integratePos) {
138  newIntegratedSignal += Sqr(channeltrace[windowStartPos + integratePos]);
139  ++count;
140  }
141  newIntegratedSignal /= count;
142  if (newIntegratedSignal > integratedSignal) {
143  integratedSignal = newIntegratedSignal;
144  signalWindowStart = windowStartPos * binning;
145  startSample = windowStartPos;
146  stopSample = windowStartPos + integrationTime / binning;
147  }
148  }
149 
150  signalWindowStop = signalWindowStart + integrationTime;
151  }
152 
153 }
constexpr T Sqr(const T &x)
static void PulseFixedWindowIntegrator(const utl::Trace< double > &channeltrace, unsigned int sample, double integrationTime, double &integratedSignal, double &signalWindowStart, double &signalWindowStop, const bool usePower)
static double Mean(const Trace< T > &trace, const unsigned int bin1, const unsigned int bin2)
Evaluate the mean of trace between bin1 and bin2.
static void Noisefinder(const utl::Trace< double > &channeltrace, double &noiseRMS, double &noiseMean, double NoiseWindowStart, double NoiseWindowStop)
double GetBinning() const
size of one slot
Definition: Trace.h:138
static void PulseSlidingWindowIntegrator(const utl::Trace< double > &channeltrace, double integrationTime, double &integratedSignal, double &signalWindowStart, double &signalWindowStop, double signalSearchWindowStart, double signalSearchWindowStop, int &startSample, int &stopSample)
#define max(a, b)
double abs(const SVector< n, T > &v)
static void Pulsefinder(const utl::Trace< double > &channeltrace, double &peakAmplitude, double &peakTime, double &peakTimeError, double signalSearchWindowStart, double signalSearchWindowStop, unsigned int &sample)
SizeType GetSize() const
Definition: Trace.h:156
static double RootMeanSquare(const Trace< T > &trace, const unsigned int bin1, const unsigned int bin2)
Evaluate the RootMeanSquare of trace between bin1 and bin2.
static void PulseFWHMIntegrator(const utl::Trace< double > &channeltrace, unsigned int sample, const double peakAmplitude, double &signalFWHM, double &integratedSignal, double &signalWindowStart, double &signalWindowStop)

, generated on Tue Sep 26 2023.