3 #include <fwk/CentralConfig.h>
5 #include <utl/Reader.h>
6 #include <utl/ErrorLogger.h>
7 #include <utl/TimeStamp.h>
8 #include <utl/TimeInterval.h>
9 #include <utl/TraceAlgorithm.h>
10 #include <utl/Trace.h>
13 #include <evt/Event.h>
14 #include <evt/Header.h>
15 #include <sevt/Header.h>
16 #include <sevt/EventTrigger.h>
17 #include <revt/REvent.h>
18 #include <revt/EventTrigger.h>
19 #include <revt/Header.h>
20 #include <revt/StationRecData.h>
21 #include <revt/StationHeader.h>
22 #include <revt/StationGPSData.h>
23 #include <revt/Channel.h>
24 #include <revt/Station.h>
26 #include <rdet/RDetector.h>
27 #include <rdet/Station.h>
45 INFO(
"RdStationRiseTimeCalculator::Init()");
48 Branch topBranch = CentralConfig::GetInstance()->
GetTopBranch(
"RdStationRiseTimeCalculator");
52 ERROR(
"this window should be narrower: short window around the main pulse");
65 WARNING(
"No radio event found!");
69 REvent& rEvent =
event.GetREvent();
78 WARNING(
"Station has no RecData! Please call RdEventInitializer first!");
86 const double SNR[3] = {
93 double tempSNRmax = 0;
94 for (
int k = 0; k < 3; ++k) {
95 if (SNR[k] > tempSNRmax) {
106 unsigned int maxPosition = 0;
107 if (chwithmaxSNR == 0)
109 else if (chwithmaxSNR == 1)
111 else if (chwithmaxSNR == 2)
114 const double samplingFrequency = 1. / stationtrace.
GetBinning();
117 unsigned int startRiseTimeWindow = 0;
118 unsigned int stopRiseTimeWindow = 0;
120 startRiseTimeWindow = (maxPosition - (fRiseTimeWindow/2.)) * samplingFrequency;
121 stopRiseTimeWindow = (maxPosition + (fRiseTimeWindow/2.)) * samplingFrequency;
124 if (maxPosition < fRiseTimeWindow/2.) {
125 WARNING(
"RiseTimeWindowStart outside of trace, RiseTimeWindow adjusted to start of trace");
126 startRiseTimeWindow = 0;
127 stopRiseTimeWindow = fRiseTimeWindow * samplingFrequency;
132 double cumulativeSum = 0;
133 const unsigned int cumulativeVectorSize =
static_cast<unsigned int>(fRiseTimeWindow * samplingFrequency);
134 vector<double> cumulative(cumulativeVectorSize);
135 MakeCumulative(stationtrace, startRiseTimeWindow, stopRiseTimeWindow, cumulative, cumulativeSum, chwithmaxSNR);
138 vector<double> normalizedCumulative(cumulativeVectorSize);
139 for (
unsigned int k = startRiseTimeWindow; k < stopRiseTimeWindow + 1; ++k)
140 normalizedCumulative.at(k - startRiseTimeWindow) = cumulative.at(k - startRiseTimeWindow) / cumulativeSum;
143 unsigned int minCumulative = 0;
144 unsigned int maxCumulative = 0;
145 GetRiseTime(startRiseTimeWindow, stopRiseTimeWindow, normalizedCumulative, minCumulative, maxCumulative);
146 const double riseTime = (maxCumulative - minCumulative) / samplingFrequency;
158 const unsigned int startRiseTimeWindow,
const unsigned int stopRiseTimeWindow,
159 vector<double>& cumulative,
double& cumulativeSum,
const unsigned int chwithmaxSNR)
162 cumulativeSum =
Sqr(stationtrace.
At(startRiseTimeWindow)[chwithmaxSNR]);
163 cumulative.at(0) = cumulativeSum;
164 for (
unsigned int k = startRiseTimeWindow + 1; k < stopRiseTimeWindow + 1; ++k) {
165 const double tmpSum =
Sqr(stationtrace.
At(k)[chwithmaxSNR]);
166 cumulativeSum += tmpSum;
167 cumulative.at(k - startRiseTimeWindow) = cumulative.at(k - startRiseTimeWindow - 1) + tmpSum;
173 RdStationRiseTimeCalculator::GetRiseTime(
const unsigned int startCumulative,
const unsigned int stopCumulative,
174 vector<double>& normalizedCumulative,
unsigned int& minCumulative,
unsigned int& maxCumulative)
177 bool foundmin =
false;
178 bool foundmax =
false;
179 const double lowerCumulativeLimit = 0.2;
180 const double upperCumulativeLimit = 0.6;
182 for (
unsigned int k = startCumulative; k < stopCumulative+1; ++k) {
184 if (normalizedCumulative.at(k - startCumulative) < lowerCumulativeLimit)
192 if (normalizedCumulative.at(k - startCumulative) < upperCumulativeLimit)
199 if (foundmin && foundmax)
Branch GetTopBranch() const
T & At(const SizeType i)
trace entry with checked address
constexpr T Sqr(const T &x)
boost::filter_iterator< CandidateStationFilter, AllStationIterator > CandidateStationIterator
Iterator over all CandidateStations (i.e., HasSignal, HasNoSignal)
StationRecData & GetRecData()
Get station level reconstructed data.
CandidateStationIterator CandidateStationsEnd()
Interface class to access to the Radio part of an event.
double GetBinning() const
size of one slot
#define INFO(message)
Macro for logging informational messages.
void Init()
Initialise the registry.
Branch GetChild(const std::string &childName) const
Get child of this Branch by child name.
StationTimeSeries & GetStationTimeSeries()
retrieve Station Time Series (write access, only use this if you intend to change the data) ...
Class representing a document branch.
class to hold data at the radio Station level.
constexpr double nanosecond
CandidateStationIterator CandidateStationsBegin()
#define WARNING(message)
Macro for logging warning messages.
void GetData(bool &b) const
Overloads of the GetData member template function.
double GetParameter(const Parameter i) const
ResultFlag
Flag returned by module methods to the RunController.
Template class for a FADC data or calibrated data container. Use the typedefs (TraceD, TraceI, etc.) defined in Trace-fwd.h.
void SetParameter(Parameter i, double value, bool lock=true)
bool HasRecData() const
Check whether station reconstructed data exists.
#define ERROR(message)
Macro for logging error messages.