5 #include <det/Detector.h>
7 #include <sdet/SDetector.h>
8 #include <sdet/PMTConstants.h>
10 #include <sevt/SEvent.h>
11 #include <sevt/Station.h>
12 #include <sevt/StationSimData.h>
14 #include <sevt/PMTSimData.h>
16 #include <fwk/CentralConfig.h>
17 #include <fwk/RandomEngineRegistry.h>
19 #include <utl/RandomEngine.h>
20 #include <utl/ErrorLogger.h>
21 #include <utl/Reader.h>
24 #include <CLHEP/Random/Randomize.h>
34 namespace SdBaselineSimulatorOG {
39 fRandomEngine = &RandomEngineRegistry::GetInstance().Get(RandomEngineRegistry::eDetector);
47 const auto rnd = &fRandomEngine->GetEngine();
49 auto& sEvent =
event.GetSEvent();
51 for (
auto& station : sEvent.StationsRange()) {
54 if (!station.HasSimData())
57 const auto& dStation = det::Detector::GetInstance().GetSDetector().GetStation(station);
58 const auto traceLength = dStation.GetFADCTraceLength();
61 Accumulator::Safe<Accumulator::Min<int>> minTime;
62 Accumulator::Safe<Accumulator::Max<int>> maxTime;
64 if (!pmt.HasSimData())
66 const auto& pmtSim = pmt.GetSimData();
67 if (!pmtSim.HasFADCTrace())
70 minTime(trace.GetStart());
71 maxTime(trace.GetStop());
74 const auto saturationValue = dStation.GetSaturationValue();
77 const int startTime = minTime.GetMin() - traceLength/3;
78 const int stopTime = maxTime.GetMax() + traceLength;
82 if (!pmt.HasSimData())
84 auto& pmtSim = pmt.GetSimData();
86 if (!pmtSim.HasFADCTrace())
92 if (!pmt.HasCalibData())
94 auto& pmtCalib = pmt.GetCalibData();
96 const auto& dPMT = dStation.GetPMT(pmt);
99 const double nominalBaseline = dPMT.GetBaseline(
gain);
101 const double baseline = CLHEP::RandFlat::shoot(rnd, nominalBaseline-0.5, nominalBaseline+0.5);
102 const double noise = dPMT.GetBaselineRMS(
gain);
103 pmtCalib.SetBaseline(baseline, noise,
gain);
108 for (
int i = startTime; i <= stopTime; ++i) {
109 const double noisyBaseline = CLHEP::RandGauss::shoot(rnd, baseline, noise);
110 const double signal = traceD.At(i) + noisyBaseline;
111 const double saturatedSignal = min(
max(signal, 0.),
double(saturationValue));
112 traceD.SetTime(i, saturatedSignal);
113 const int signalI = round(signal);
114 const int positiveSignalI =
max(signalI, 0);
115 noSat.SetTime(i, positiveSignalI);
116 const int saturatedSignalI = min(positiveSignalI,
int(saturationValue));
117 trace.SetTime(i, saturatedSignalI);
void Init()
Initialise the registry.
total FADC trace, with no saturation applied by FADC/baseline simulator
ResultFlag
Flag returned by module methods to the RunController.
total (shower and background)