PMTSimData.cc
Go to the documentation of this file.
1 #include <sevt/PMTSimData.h>
2 #include <sdet/Station.h>
3 #include <utl/ErrorLogger.h>
4 #include <utl/AugerUnits.h>
5 
6 using namespace utl;
7 using namespace std;
8 using namespace sevt;
9 
10 
11 void
12 PMTSimData::MakePETimeDistribution(const StationConstants::SignalComponent source)
13 {
14  fPETimeDistribution.AddTimeDistribution(1*ns, source);
15 }
16 
17 
18 void
19 PMTSimData::MakeBaseSignal(const StationConstants::SignalComponent source)
20 {
21  fBaseSignal.AddTimeDistribution(1*ns, source);
22 }
23 
24 
25 void
26 PMTSimData::ClearBaseSignals()
27 {
28  fBaseSignal.Clear();
29 }
30 
31 
32 void
33 PMTSimData::MakeFilterSignal(const StationConstants::SignalComponent source)
34 {
35  fFilterSignal.AddTimeDistribution(1*ns, source);
36 }
37 
38 
39 void
40 PMTSimData::MakeFADCTrace(const StationConstants::SignalComponent source)
41 {
42  fFADCTrace[sdet::PMTConstants::eHighGain].AddTimeDistribution(fFADCBinSize, source);
43  fFADCTrace[sdet::PMTConstants::eLowGain].AddTimeDistribution(fFADCBinSize, source);
44  fFADCTraceD[sdet::PMTConstants::eHighGain].AddTimeDistribution(fFADCBinSize, source);
45  fFADCTraceD[sdet::PMTConstants::eLowGain].AddTimeDistribution(fFADCBinSize, source);
46 }
47 
48 
49 bool
50 PMTSimData::HasFADCTrace(const utl::TimeStamp& time,
52  const
53 {
54  const auto& hg = fFADCTraces[sdet::PMTConstants::eHighGain];
55  const auto it = hg.find(time);
56  return it != hg.end() && it->second.HasLabel(source);
57 }
58 
59 
60 void
61 PMTSimData::MakeFADCTrace(const utl::TimeStamp& time,
63 {
64  const auto& m = fFADCTraces[sdet::PMTConstants::eHighGain];
65  const auto it = m.find(time);
66  if (it == m.end()) {
68  fFADCTraces[gain].emplace(time, MultiTraceI()).first->second.AddTrace(fFADCTraceLength, fFADCBinSize, source);
69  fFADCTracesD[gain].emplace(time, MultiTraceD()).first->second.AddTrace(fFADCTraceLength, fFADCBinSize, source);
70  }
71  } else {
72  const auto& t = it->second;
73  if (!t.HasLabel(source)) {
75  fFADCTraces[gain].find(time)->second.AddTrace(fFADCTraceLength, fFADCBinSize, source);
76  fFADCTracesD[gain].find(time)->second.AddTrace(fFADCTraceLength, fFADCBinSize, source);
77  }
78  }
79  }
80 }
81 
82 
83 const MultiTraceI&
84 PMTSimData::GetMultiTrace(const TimeStamp& stamp, const sdet::PMTConstants::PMTGain gain)
85  const
86 {
87  const auto& tm = fFADCTraces[gain];
88  const auto tr = tm.find(stamp);
89  if (tr == tm.end()) {
90  ostringstream err;
91  err << "Tried to get unavailable FADC trace at time " << stamp << ". ";
92  if (tm.empty())
93  err << "No times are available.";
94  else {
95  err << "Available times are:";
96  for (const auto& p : tm)
97  err << ' ' << p.first;
98  }
99  ERROR(err);
100  throw NonExistentComponentException(err.str());
101  }
102  return tr->second;
103 }
104 
105 
106 const MultiTraceD&
107 PMTSimData::GetMultiTraceD(const TimeStamp& stamp, const sdet::PMTConstants::PMTGain gain)
108  const
109 {
110  const auto& tm = fFADCTracesD[gain];
111  const auto tr = tm.find(stamp);
112  if (tr == tm.end()) {
113  ostringstream err;
114  err << "Tried to get unavailable FADC-d trace at time " << stamp << ". ";
115  if (tm.empty())
116  err << "No times are available.";
117  else {
118  err << "Available times are:";
119  for (const auto& p : tm)
120  err << ' ' << p.first;
121  }
122  ERROR(err);
123  throw NonExistentComponentException(err.str());
124  }
125  return tr->second;
126 }
Base class for exceptions trying to access non-existing components.
int gain
Definition: dump1090.h:241
A TimeStamp holds GPS second and nanosecond for some event.
Definition: TimeStamp.h:110
utl::MultiTrace< int > MultiTraceI
Definition: MultiTrace.h:91
utl::MultiTrace< double > MultiTraceD
Definition: MultiTrace.h:92
constexpr double ns
Definition: AugerUnits.h:162
#define ERROR(message)
Macro for logging error messages.
Definition: ErrorLogger.h:165
constexpr double m
Definition: AugerUnits.h:121

, generated on Tue Sep 26 2023.