4 #include <fwk/CentralConfig.h>
6 #include <det/Detector.h>
7 #include <sdet/SDetector.h>
8 #include <sdet/Station.h>
10 #include <evt/Event.h>
12 #include <sevt/EventTrigger.h>
13 #include <sevt/Header.h>
14 #include <sevt/SEvent.h>
15 #include <sevt/Station.h>
17 #include <sevt/PMTCalibData.h>
18 #include <sevt/PMTRecData.h>
19 #include <sevt/StationRecData.h>
20 #include <sevt/StationTriggerData.h>
21 #include <sevt/StationCalibData.h>
23 #include <utl/Trace.h>
24 #include <utl/TraceAlgorithm.h>
25 #include <utl/Reader.h>
26 #include <utl/ErrorLogger.h>
28 #include <utl/String.h>
38 #include <AugerEvent.h>
47 using namespace DoublePeakDetectorNS;
58 for (
int i = 0; i < nTraceBins -
kPeakWind; i++)
60 double binValue = trace[i];
61 if (binValue <
kBinThr)
continue;
63 double winSum = binValue;
64 double winPeak = binValue;
66 int blockStart = i - 1;
69 bool blockFound =
false;
71 for (
int j = i + 1; j < i +
kPeakWind; j++) {
73 if (binValue <
kBinThr)
continue;
77 if (winPeak < binValue) winPeak = binValue;
85 if (nBinsOverThr == kPeakWind) {
86 coreBlockEnd = i + kPeakWind - 1;
90 if (!blockFound)
continue;
92 blockEnd = coreBlockEnd;
97 for (
int j = coreBlockEnd + 1; j < coreBlockEnd + nTraceBins; j++)
117 sigBlock.
score = winSum * nBinsOverThr;
118 signalBlocks.push_back(sigBlock);
123 return signalBlocks.size();
126 bool DoublePeakDetector::ComputeIsMultiple(
const vector<signalBlock_t> &signalBlocks)
129 unsigned int nBlocks = signalBlocks.size();
130 if (nBlocks < 2)
return false;
132 double maxScore = -1;
133 for (
unsigned int i = 0; i < nBlocks; i++) {
134 double score = signalBlocks[i].score;
135 if (maxScore < score) {
141 std::ostringstream error;
142 error <<
"\nError in trace!\n\n";
148 unsigned int nSimilar = 0;
149 for (
unsigned int i = 0; i < nBlocks; i++) {
150 double score = signalBlocks[i].score;
174 const auto& sDet = det::Detector::GetInstance().GetSDetector();
178 for (
auto& sStation : sEvent.StationsRange()) {
179 if (sStation.IsCandidate() && sDet.GetStation(sStation.GetId()).IsInGrid()) {
181 const TraceD &trace = sStation.GetVEMTrace();
183 os <<
"Event:" << sEvent.
GetHeader().
GetId() <<
" Station: " << sStation.GetId();
185 vector<signalBlock_t> signalBlocks;
189 const int traceLength = end - start;
190 const int nTraceBins = traceLength * binning;
192 FindPeaks(trace, signalBlocks, nTraceBins);
193 bool isMultiple = ComputeIsMultiple(signalBlocks);
197 std::ostringstream info;
198 info <<
"Deleting: " << os.str() <<
"\n";
213 for (
auto& pmt : sStation.PMTsRange()) {
214 if (pmt.HasCalibData() && pmt.GetCalibData().IsTubeOk()) {
218 if (pmtCounter < 2) {
219 std::ostringstream info;
220 info <<
"Deleting: " << os.str() <<
"\n"
221 <<
"Too few PMTs"<<
"\n";
228 else if (pmtCounter == 2 || pmtCounter == 3){}
Class to access station level reconstructed data.
const double kMinScoreDiff
Interface class to access to the SD part of an event.
double GetBinning() const
size of one slot
#define INFO(message)
Macro for logging informational messages.
void Init()
Initialise the registry.
Class representing a document branch.
unsigned int GetSignalStartSlot() const
Start time of the signal in time slots from beginning of trace.
unsigned int GetSignalEndSlot() const
End time of the signal in time slots from beginning of trace.
ResultFlag
Flag returned by module methods to the RunController.
static CentralConfig * GetInstance()
Use this the first time you get an instance of central configuration.
Station Trigger Data description
sevt::Header & GetHeader()
void SetAlgorithm(const Algorithm algo)
std::vector< std::vector< double > > FindPeaks(const std::vector< double > &input, const double totalThreshold)
#define ERROR(message)
Macro for logging error messages.
void SetErrorCode(const int errorCode)
To exclude stations if there are multiple peaks close in time in the trace as explained and used in G...
utl::Branch GetTopBranch(const std::string &id)
Get top branch for moduleConfigLink with given id (XML files)