PMTSimData.h
Go to the documentation of this file.
1 #ifndef _sevt_PMTSimData_h_
2 #define _sevt_PMTSimData_h_
3 
4 #include <utl/ShadowPtr.h>
5 #include <utl/TimeStamp.h>
6 #include <utl/MultiTrace.h>
7 #include <sevt/StationConstants.h>
8 #include <utl/MultiTimeDistribution.h>
9 #include <utl/IteratorRange.h>
10 #include <sdet/PMTConstants.h>
11 #include <utl/ClassHelpers.h>
12 
13 #include <boost/range/adaptor/map.hpp>
14 
15 #include <vector>
16 
17 
18 #warning DV remove EventIO friendship
19 namespace io {
20  class PMTSimData_ROOT;
21 }
22 
23 namespace sevt {
24 
25  class PMT;
26 
27 
40  class PMTSimData {
41 
42  private:
43  typedef std::map<utl::TimeStamp, utl::MultiTraceI> TimeTraceMap;
44 
45  public:
46  double GetTriggerVEMPeak(const bool isUUB) const { return isUUB ? fCompatibilityTriggerVEMPeak : fTriggerVEMPeak; }
47  void SetTriggerVEMPeak(const double peak) { fTriggerVEMPeak = peak; }
49 
51 
52 
55  { return fPETimeDistribution.GetTimeDistribution(source); }
56 
59  { return fPETimeDistribution.GetTimeDistribution(source); }
60 
63 
66  { return fPETimeDistribution.HasLabel(source); }
67 
70 
73 
84 
86 
87 
89 
94  utl::TimeDistributionD& GetBaseSignal(const StationConstants::SignalComponent source = StationConstants::eTotal)
95  { return fBaseSignal.GetTimeDistribution(source); }
96 
99  { return fBaseSignal.GetTimeDistribution(source); }
100 
103 
106  { return fBaseSignal.HasLabel(source); }
107 
109  void ClearBaseSignals();
110 
113 
116 
127 
129 
130 
132 
136  utl::TimeDistributionD& GetFilterSignal(const StationConstants::SignalComponent source = StationConstants::eTotal)
137  { return fFilterSignal.GetTimeDistribution(source); }
138 
141  { return fFilterSignal.GetTimeDistribution(source); }
142 
145 
148  { return fFilterSignal.HasLabel(source); }
149 
152 
155 
166 
168 
169 
171 
173  utl::TimeDistributionI& GetFADCTrace(const sdet::PMTConstants::PMTGain gain = sdet::PMTConstants::eHighGain,
174  const StationConstants::SignalComponent source = StationConstants::eTotal)
175  { return fFADCTrace[gain].GetTimeDistribution(source); }
176 
180  { return fFADCTrace[gain].GetTimeDistribution(source); }
181 
184 
188 
190 
192 
195 
198  { return fFADCTrace[gain].Begin(); }
201  { return fFADCTrace[gain].Begin(); }
204  { return fFADCTrace[gain].End(); }
207  { return fFADCTrace[gain].End(); }
210 
212 
214  utl::TimeDistributionD& GetFADCTraceD(const sdet::PMTConstants::PMTGain gain = sdet::PMTConstants::eHighGain,
215  const StationConstants::SignalComponent source = StationConstants::eTotal)
216  { return fFADCTraceD[gain].GetTimeDistribution(source); }
217 
221  { return fFADCTraceD[gain].GetTimeDistribution(source); }
222 
224 
226 
229 
232  { return fFADCTraceD[gain].Begin(); }
235  { return fFADCTraceD[gain].Begin(); }
238  { return fFADCTraceD[gain].End(); }
241  { return fFADCTraceD[gain].End(); }
244 
246 
247  typedef decltype(std::begin(boost::adaptors::keys(TimeTraceMap()))) TriggerTimeIterator;
248 
249  TriggerTimeIterator TriggerTimesBegin() const { return std::begin(boost::adaptors::keys(fFADCTraces[sdet::PMTConstants::eHighGain])); }
250  TriggerTimeIterator TriggerTimesEnd() const { return std::end(boost::adaptors::keys(fFADCTraces[sdet::PMTConstants::eHighGain])); }
252 
253  utl::TraceI& GetFADCTrace(const utl::TimeStamp& stamp,
254  const sdet::PMTConstants::PMTGain gain = sdet::PMTConstants::eHighGain,
255  const StationConstants::SignalComponent source = StationConstants::eTotal)
256  { return GetMultiTrace(stamp, gain).GetTrace(source); }
257 
261  { return GetMultiTrace(stamp, gain).GetTrace(source); }
262 
264  void MakeFADCTrace(const utl::TimeStamp& stamp,
266 
268  bool HasFADCTrace(const utl::TimeStamp& stamp,
270 
274 
276  { return GetMultiTrace(stamp, gain).Begin(); }
278  { return GetMultiTrace(stamp, gain).End(); }
280  { return GetMultiTrace(stamp, gain).Begin(); }
282  { return GetMultiTrace(stamp, gain).End(); }
285 
287 
288 
289  utl::TraceD& GetFADCTraceD(const utl::TimeStamp& stamp,
290  const sdet::PMTConstants::PMTGain gain = sdet::PMTConstants::eHighGain,
291  const StationConstants::SignalComponent source = StationConstants::eTotal)
292  { return GetMultiTraceD(stamp, gain).GetTrace(source); }
296  { return GetMultiTraceD(stamp, gain).GetTrace(source); }
297 
301 
303  { return GetMultiTraceD(stamp, gain).Begin(); }
305  { return GetMultiTraceD(stamp, gain).End(); }
307  { return GetMultiTraceD(stamp, gain).Begin(); }
309  { return GetMultiTraceD(stamp, gain).End(); }
312 
313  private:
314  PMTSimData() = default;
315  ~PMTSimData() = default;
316 
317  void SetFADCTraceLength(const unsigned int traceLength) { fFADCTraceLength = traceLength; }
318  void SetFADCBinSize(const double binSize) { fFADCBinSize = binSize; }
319 
322  { return OFFLINE_CAST_CONST_METHOD(GetMultiTrace(stamp, gain)); }
324 
326  { return OFFLINE_CAST_CONST_METHOD(GetMultiTraceD(stamp, gain)); }
328 
329  double fTriggerVEMPeak = 0;
331 
335 
336  unsigned int fFADCTraceLength = 0;
337  double fFADCBinSize = 0;
338 
341 
342  typedef std::map<utl::TimeStamp, utl::MultiTraceI> TimeTraceIMap;
343  typedef std::map<utl::TimeStamp, utl::MultiTraceD> TimeTraceDMap;
346 
347  friend class sevt::PMT;
348  friend class utl::ShadowPtr<sevt::PMTSimData>;
349  friend class io::PMTSimData_ROOT;
350 
351  };
352 
353 }
354 
355 
356 #endif
#define OFFLINE_MAKE_BOTH_ITERATOR_RANGES_ARG(_Iterator_, _ConstIterator_, _NamePrefix_, _Arg_)
Definition: IteratorRange.h:69
const utl::TimeDistributionD & GetFADCTraceD(const sdet::PMTConstants::PMTGain gain=sdet::PMTConstants::eHighGain, const StationConstants::SignalComponent source=StationConstants::eTotal) const
Get const FADC trace by gain and source.
Definition: PMTSimData.h:219
pointer with built-in initialization, deletion, deep copying
Definition: ShadowPtr.h:163
BaseSignalsIterator BaseSignalsBegin()
Begin iterator over PMT base signal sources.
Definition: PMTSimData.h:118
ConstFilterSignalsIterator FilterSignalsEnd() const
Const end iterator over available front-end filter sources.
Definition: PMTSimData.h:163
const utl::TimeDistributionD & GetBaseSignal(const StationConstants::SignalComponent source=StationConstants::eTotal) const
Get simulated signal at the PMT base (before filter)
Definition: PMTSimData.h:98
FADCTraceDIterator FADCTracesDEnd(const sdet::PMTConstants::PMTGain gain=sdet::PMTConstants::eHighGain)
End iterator over available FADC traces (you specify the gain)
Definition: PMTSimData.h:237
boost::transform_iterator< LabeledObjectFunctor, typename MultiObjectContainer::iterator, LabeledObjectType > Iterator
Definition: MultiObject.h:78
utl::MultiTraceI::Iterator FADCTriggeredTraceIterator
Iterator over available high gain channel FADC sources.
Definition: PMTSimData.h:272
utl::MultiTimeDistributionI::Iterator PETimeDistributionsIterator
Iterator over available PE time distribution sources. See utl::MultiTimeDistribution.
Definition: PMTSimData.h:69
TimeTraceDMap fFADCTracesD[sdet::PMTConstants::eNumberOfGains]
Definition: PMTSimData.h:345
utl::MultiTraceD::Iterator FADCTriggeredTraceDIterator
Iterator over available high gain channel FADC sources.
Definition: PMTSimData.h:299
TimeDistribution< double > TimeDistributionD
class to hold data at PMT level
Definition: SEvent/PMT.h:28
ConstFADCTriggeredTraceIterator FADCTriggeredTracesEnd(const utl::TimeStamp &stamp, const sdet::PMTConstants::PMTGain gain) const
Definition: PMTSimData.h:281
void ClearBaseSignals()
Remove signal at PMT base.
Definition: PMTSimData.cc:26
#define OFFLINE_MAKE_BOTH_ITERATOR_RANGES(_Iterator_, _ConstIterator_, _NamePrefix_)
Definition: IteratorRange.h:43
total (shower and background)
double GetTriggerVEMPeak(const bool isUUB) const
Definition: PMTSimData.h:46
ConstFADCTriggeredTraceDIterator FADCTriggeredTracesDEnd(const utl::TimeStamp &stamp, const sdet::PMTConstants::PMTGain gain) const
Definition: PMTSimData.h:308
PETimeDistributionsIterator PETimeDistributionsBegin()
Begin iterator over PE time distribution sources.
Definition: PMTSimData.h:75
bool HasBaseSignal(const StationConstants::SignalComponent source=StationConstants::eTotal) const
Check if signal at PMT base already exists (optionally for a given source)
Definition: PMTSimData.h:105
#define OFFLINE_MAKE_BOTH_ITERATOR_RANGES_ARG2(_Iterator_, _ConstIterator_, _NamePrefix_, _Arg1_, _Arg2_)
Definition: IteratorRange.h:95
FilterSignalsIterator FilterSignalsEnd()
End iterator over available front-end filter sources.
Definition: PMTSimData.h:161
Trace< int > TraceI
Definition: Trace-fwd.h:24
std::map< utl::TimeStamp, utl::MultiTraceI > TimeTraceIMap
Definition: PMTSimData.h:342
unsigned int fFADCTraceLength
Definition: PMTSimData.h:336
ConstPETimeDistributionsIterator PETimeDistributionsBegin() const
Begin iterator over PE time distribution sources.
Definition: PMTSimData.h:77
Histogram class for time distributions with suppressed empty bins.
double fCompatibilityTriggerVEMPeak
Definition: PMTSimData.h:330
FADCTriggeredTraceIterator FADCTriggeredTracesBegin(const utl::TimeStamp &stamp, const sdet::PMTConstants::PMTGain gain)
Definition: PMTSimData.h:275
ConstBaseSignalsIterator BaseSignalsEnd() const
Const end iterator over PMT base signal sources.
Definition: PMTSimData.h:124
~PMTSimData()=default
utl::MultiTimeDistributionI fPETimeDistribution
Definition: PMTSimData.h:332
utl::MultiTraceI & GetMultiTrace(const utl::TimeStamp &stamp, const sdet::PMTConstants::PMTGain gain)
Utility function to retrieve the multi trace and throw an exception when it fails.
Definition: PMTSimData.h:321
void SetCompatibilityTriggerVEMPeak(const double peak)
Definition: PMTSimData.h:48
int gain
Definition: dump1090.h:241
double fFADCBinSize
Definition: PMTSimData.h:337
Iterator Begin()
Definition: MultiObject.h:83
ConstFADCTriggeredTraceIterator FADCTriggeredTracesBegin(const utl::TimeStamp &stamp, const sdet::PMTConstants::PMTGain gain) const
Definition: PMTSimData.h:279
utl::MultiTimeDistributionI::ConstIterator ConstPETimeDistributionsIterator
Const iterator over available PE time distribution sources.
Definition: PMTSimData.h:72
utl::MultiTraceD::ConstIterator ConstFADCTriggeredTraceDIterator
Definition: PMTSimData.h:300
boost::transform_iterator< LabeledObjectFunctor, typename MultiObjectContainer::const_iterator, LabeledObjectType > ConstIterator
Definition: MultiObject.h:81
ConstFADCTraceIterator FADCTracesEnd(const sdet::PMTConstants::PMTGain gain=sdet::PMTConstants::eHighGain) const
Const end iterator over available FADC traces (you specify the gain)
Definition: PMTSimData.h:206
bool HasPETimeDistribution(const StationConstants::SignalComponent source=StationConstants::eTotal) const
Check if a PE release time distribution exists (optionally for a given source)
Definition: PMTSimData.h:65
TimeDistribution< T > & GetTimeDistribution(const int label=0)
Returns the trace for /par source.
Trace< double > TraceD
Definition: Trace-fwd.h:26
bool HasFADCTrace(StationConstants::SignalComponent source=StationConstants::eTotal) const
Check if FADC trace (prior to local trigger simulation) exists.
Definition: PMTSimData.h:186
A TimeStamp holds GPS second and nanosecond for some event.
Definition: TimeStamp.h:110
ConstFilterSignalsIterator FilterSignalsBegin() const
Const begin iterator over available front-end filter sources.
Definition: PMTSimData.h:159
BaseSignalsIterator BaseSignalsEnd()
End iterator over PMT base signal sources.
Definition: PMTSimData.h:122
utl::MultiTraceD & GetMultiTraceD(const utl::TimeStamp &stamp, const sdet::PMTConstants::PMTGain gain)
Definition: PMTSimData.h:325
bool HasFilterSignal(const StationConstants::SignalComponent source=StationConstants::eTotal) const
Check if the signal at front-end filter already exists (optionally for a given source) ...
Definition: PMTSimData.h:147
double fTriggerVEMPeak
Definition: PMTSimData.h:329
void MakeBaseSignal(const StationConstants::SignalComponent source=StationConstants::eTotal)
Create a TimeDistributionD representing signal at PMT base (optionally for a give source) ...
Definition: PMTSimData.cc:19
void SetFADCBinSize(const double binSize)
Definition: PMTSimData.h:318
#define OFFLINE_CAST_CONST_METHOD(_Method_)
Definition: ClassHelpers.h:51
FADCTraceIterator FADCTracesBegin(const sdet::PMTConstants::PMTGain gain=sdet::PMTConstants::eHighGain)
Begin iterator over available FADC traces (you specify the gain)
Definition: PMTSimData.h:197
PETimeDistributionsIterator PETimeDistributionsEnd()
End iterator over PE time distribution sources.
Definition: PMTSimData.h:79
#define OFFLINE_MAKE_CONST_ITERATOR_RANGE(_ConstIterator_, _NamePrefix_)
Definition: IteratorRange.h:28
utl::MultiTimeDistributionD::Iterator FilterSignalsIterator
Iterator over available front-end filter sources.
Definition: PMTSimData.h:151
FADCTraceIterator FADCTracesEnd(const sdet::PMTConstants::PMTGain gain=sdet::PMTConstants::eHighGain)
End iterator over available FADC traces (you specify the gain)
Definition: PMTSimData.h:203
utl::TimeDistributionD & GetFilterSignal(const StationConstants::SignalComponent source=StationConstants::eTotal)
get simulated signal after the filter, optionally for a given source.
Definition: PMTSimData.h:136
utl::MultiTimeDistributionD::Iterator FADCTraceDIterator
Iterator over available high gain channel FADC sources.
Definition: PMTSimData.h:225
utl::MultiTimeDistributionD fFADCTraceD[sdet::PMTConstants::eNumberOfGains]
Definition: PMTSimData.h:340
utl::MultiTraceI::ConstIterator ConstFADCTriggeredTraceIterator
Definition: PMTSimData.h:273
std::map< utl::TimeStamp, utl::MultiTraceI > TimeTraceMap
Definition: PMTSimData.h:43
ConstBaseSignalsIterator BaseSignalsBegin() const
Const begin iterator over PMT base signal sources.
Definition: PMTSimData.h:120
FADCTriggeredTraceIterator FADCTriggeredTracesEnd(const utl::TimeStamp &stamp, const sdet::PMTConstants::PMTGain gain)
Definition: PMTSimData.h:277
utl::MultiTimeDistributionD fFilterSignal
Definition: PMTSimData.h:334
decltype(std::begin(boost::adaptors::keys(TimeTraceMap()))) typedef TriggerTimeIterator
Definition: PMTSimData.h:247
utl::MultiTimeDistributionD::Iterator BaseSignalsIterator
Iterator over available PMT base signal sources.
Definition: PMTSimData.h:112
utl::MultiTimeDistributionI::Iterator FADCTraceIterator
Iterator over available high gain channel FADC sources.
Definition: PMTSimData.h:191
Persistent SD PMTSimData using ROOT.
utl::MultiTimeDistributionI::ConstIterator ConstFADCTraceIterator
Const iterator over available high gain channel FADC sources.
Definition: PMTSimData.h:194
void SetTriggerVEMPeak(const double peak)
Definition: PMTSimData.h:47
Class to hold simulated data at PMT level.
Definition: PMTSimData.h:40
Trace< T > & GetTrace(const int label=0)
Returns the trace for /par source.
Definition: MultiTrace.h:70
total (shower and background)
ConstFADCTriggeredTraceDIterator FADCTriggeredTracesDBegin(const utl::TimeStamp &stamp, const sdet::PMTConstants::PMTGain gain) const
Definition: PMTSimData.h:306
utl::MultiTimeDistributionD fBaseSignal
Definition: PMTSimData.h:333
const utl::TimeDistributionD & GetFilterSignal(const StationConstants::SignalComponent source=StationConstants::eTotal) const
get const simulated signal after the filter
Definition: PMTSimData.h:140
FADCTriggeredTraceDIterator FADCTriggeredTracesDEnd(const utl::TimeStamp &stamp, const sdet::PMTConstants::PMTGain gain)
Definition: PMTSimData.h:304
FADCTriggeredTraceDIterator FADCTriggeredTracesDBegin(const utl::TimeStamp &stamp, const sdet::PMTConstants::PMTGain gain)
Definition: PMTSimData.h:302
PMTSimData()=default
TimeDistribution< int > TimeDistributionI
TriggerTimeIterator TriggerTimesEnd() const
Definition: PMTSimData.h:250
utl::MultiTimeDistributionI fFADCTrace[sdet::PMTConstants::eNumberOfGains]
Definition: PMTSimData.h:339
Iterator End()
Definition: MultiObject.h:85
void SetFADCTraceLength(const unsigned int traceLength)
Definition: PMTSimData.h:317
const utl::TimeDistributionI & GetFADCTrace(const sdet::PMTConstants::PMTGain gain=sdet::PMTConstants::eHighGain, const StationConstants::SignalComponent source=StationConstants::eTotal) const
Get const FADC trace by gain and source.
Definition: PMTSimData.h:178
utl::TimeDistributionD & GetFADCTraceD(const sdet::PMTConstants::PMTGain gain=sdet::PMTConstants::eHighGain, const StationConstants::SignalComponent source=StationConstants::eTotal)
Get FADC trace by gain and source (these are double-valued traces so we sidestep the truncation of di...
Definition: PMTSimData.h:214
ConstPETimeDistributionsIterator PETimeDistributionsEnd() const
End iterator over PE time distribution sources.
Definition: PMTSimData.h:81
void MakeFilterSignal(const StationConstants::SignalComponent source=StationConstants::eTotal)
Create a TimeDistributionD representing signal after front-end filter (optionally for a given source)...
Definition: PMTSimData.cc:33
utl::TimeDistributionI & GetPETimeDistribution(const StationConstants::SignalComponent source=StationConstants::eTotal)
Simulated photoelectron time distribution.
Definition: PMTSimData.h:54
utl::TimeDistributionD & GetBaseSignal(const StationConstants::SignalComponent source=StationConstants::eTotal)
Get simulated signal at the PMT base, optionally for a given source.
Definition: PMTSimData.h:94
ConstFADCTraceDIterator FADCTracesDEnd(const sdet::PMTConstants::PMTGain gain=sdet::PMTConstants::eHighGain) const
Const end iterator over available FADC traces (you specify the gain)
Definition: PMTSimData.h:240
utl::TimeDistributionI & GetFADCTrace(const sdet::PMTConstants::PMTGain gain=sdet::PMTConstants::eHighGain, const StationConstants::SignalComponent source=StationConstants::eTotal)
Get FADC trace by gain and source.
Definition: PMTSimData.h:173
const utl::TraceD & GetFADCTraceD(const utl::TimeStamp &stamp, const sdet::PMTConstants::PMTGain gain=sdet::PMTConstants::eHighGain, const StationConstants::SignalComponent source=StationConstants::eTotal) const
Definition: PMTSimData.h:293
TimeTraceIMap fFADCTraces[sdet::PMTConstants::eNumberOfGains]
Definition: PMTSimData.h:344
ConstFADCTraceDIterator FADCTracesDBegin(const sdet::PMTConstants::PMTGain gain=sdet::PMTConstants::eHighGain) const
Const begin iterator over available FADC traces (you specify the gain)
Definition: PMTSimData.h:234
utl::MultiTimeDistributionD::ConstIterator ConstFADCTraceDIterator
Const iterator over available high gain channel FADC sources.
Definition: PMTSimData.h:228
FADCTraceDIterator FADCTracesDBegin(const sdet::PMTConstants::PMTGain gain=sdet::PMTConstants::eHighGain)
Begin iterator over available FADC traces (you specify the gain)
Definition: PMTSimData.h:231
utl::MultiTimeDistributionD::ConstIterator ConstBaseSignalsIterator
Const iterator over available PMT base signal sources.
Definition: PMTSimData.h:115
TriggerTimeIterator TriggerTimesBegin() const
Definition: PMTSimData.h:249
const utl::TimeDistributionI & GetPETimeDistribution(const StationConstants::SignalComponent source=StationConstants::eTotal) const
Simulated photoelectron time distribution.
Definition: PMTSimData.h:58
bool HasLabel(const int label) const
Definition: MultiObject.h:91
const utl::TraceI & GetFADCTrace(const utl::TimeStamp &stamp, const sdet::PMTConstants::PMTGain gain=sdet::PMTConstants::eHighGain, const StationConstants::SignalComponent source=StationConstants::eTotal) const
Definition: PMTSimData.h:258
utl::MultiTimeDistributionD::ConstIterator ConstFilterSignalsIterator
Const iterator over available front-end filter sources.
Definition: PMTSimData.h:154
std::map< utl::TimeStamp, utl::MultiTraceD > TimeTraceDMap
Definition: PMTSimData.h:343
void MakeFADCTrace(StationConstants::SignalComponent source=StationConstants::eTotal)
Make FADC trace prior to local trigger simulation.
Definition: PMTSimData.cc:40
ConstFADCTraceIterator FADCTracesBegin(const sdet::PMTConstants::PMTGain gain=sdet::PMTConstants::eHighGain) const
Const begin iterator over available FADC traces (you specify the gain)
Definition: PMTSimData.h:200
FilterSignalsIterator FilterSignalsBegin()
Begin iterator over available front-end filter sources.
Definition: PMTSimData.h:157
void MakePETimeDistribution(const StationConstants::SignalComponent source=StationConstants::eTotal)
Create a PE release time distribution (optionally for given source)
Definition: PMTSimData.cc:12

, generated on Tue Sep 26 2023.