1 #include <det/Detector.h>
3 #include <sdet/SDetector.h>
4 #include <sdet/StationTriggerUtil.h>
7 #include <sevt/PMTSimData.h>
8 #include <sevt/SEvent.h>
9 #include <sevt/Station.h>
10 #include <sevt/StationSimData.h>
11 #include <sevt/StationTriggerData.h>
14 #include <utl/TimeStamp.h>
15 #include <utl/TimeInterval.h>
16 #include <utl/TimeDistribution.h>
32 const int pldBits,
const int start,
const int stop)
34 const auto& dStation = Detector::GetInstance().GetSDetector().GetStation(station);
36 const auto triggerTime = eventTime +
TimeInterval(stop * dStation.GetFADCBinSize());
41 if (!pmt.HasSimData())
44 auto& pmtSim = pmt.GetSimData();
50 if (!pmtSim.HasFADCTrace(triggerTime, component))
51 pmtSim.MakeFADCTrace(triggerTime, component);
53 ERROR(
"PMT already had trace at this time, not replacing!");
63 for (
unsigned int i = 0, n = dStation.GetFADCTraceLength(); i < n; ++i) {
76 for (
int i = start; i < stop; ++i) {
77 const int bin = i - start;
78 hg[bin] = hgSim.At(i);
79 lg[bin] = lgSim.At(i);
80 hgD[bin] = hgSimD.At(i);
81 lgD[bin] = lgSimD.At(i);
84 if (!pmt.HasFADCTrace(component))
85 pmt.MakeFADCTrace(component);
102 if (sSim.HasTriggerData(triggerTime)) {
103 ERROR(
"Trigger data already in sim data, not changing!");
107 sSim.MakeTriggerAndGPSData(triggerTime);
108 auto& trig = sSim.GetTriggerData(triggerTime);
109 trig.SetAlgorithm(algorithm);
110 trig.SetPLDTrigger(pldBits);
111 trig.SetOffsetMicroSecond(0);
112 trig.SetErrorCode(0);
118 int& startBin,
int& stopBin,
119 std::vector<const TimeDistributionI*>& traces)
123 Accumulator::Safe<Accumulator::Min<int>> minBin;
124 Accumulator::Safe<Accumulator::Max<int>> maxBin;
126 unsigned int nTraces = 0;
127 for (
const auto& pmt : station.PMTsRange()) {
128 if (pmt.HasSimData() && pmt.GetSimData().HasFADCTrace()) {
129 const auto& fadc = pmt.GetSimData().GetFADCTrace();
130 minBin(fadc.GetStart());
131 maxBin(fadc.GetStop());
132 traces.push_back(&fadc);
140 startBin = minBin.GetMin();
141 stopBin = maxBin.GetMax();
145 for (
int i = nTraces; i < 3; ++i)
146 traces.push_back(&empty);
void PrepareTraces(const sevt::Station &station, int &startBin, int &stopBin, std::vector< const TimeDistributionI * > &traces)
Histogram class for time distributions with suppressed empty bins.
A TimeStamp holds GPS second and nanosecond for some event.
class to hold data at Station level
A TimeInterval is used to represent time elapsed between two events.
sevt::StationSimData & GetSimData()
Get simulated data at station level.
void Buffer(sevt::Station &station, const TimeStamp &eventTime, const StationTriggerData::Algorithm algorithm, const int pldBits, const int start, const int stop)
#define ERROR(message)
Macro for logging error messages.