11 #include <det/Detector.h>
13 #include <sdet/SDetector.h>
14 #include <sdet/Station.h>
16 #include <sevt/SEvent.h>
17 #include <sevt/Station.h>
18 #include <sevt/StationSimData.h>
20 #include <sevt/PMTSimData.h>
22 #include <fwk/CentralConfig.h>
23 #include <fwk/RandomEngineRegistry.h>
25 #include <utl/RandomEngine.h>
26 #include <utl/ErrorLogger.h>
27 #include <utl/Reader.h>
29 #include <CLHEP/Random/RandGauss.h>
35 using namespace SdBaselineSimulatorASCII;
37 using CLHEP::RandGauss;
40 SdBaselineSimulator::SdBaselineSimulator() :
53 CentralConfig::GetInstance()->
GetTopBranch(
"SdBaselineSimulatorASCII");
62 fRandomEngine = &RandomEngineRegistry::GetInstance().Get(RandomEngineRegistry::eDetector);
71 SEvent& sEvent =
event.GetSEvent();
77 if (!sIt->HasSimData())
80 const sdet::Station& dStation = det::Detector::GetInstance().GetSDetector().GetStation(*sIt);
82 string simModuleName = sIt->GetSimData().GetSimulatorSignature();
92 if (pmtIt->HasSimData()) {
115 AddPedestal(hgTrace, hgTrace_d, hgUnSatTrace_d, saturationValue, pedHG, noiseHG);
116 AddPedestal(lgTrace, lgTrace_d, lgUnSatTrace_d, saturationValue, pedLG, noiseLG);
119 AddPedestal(hgTrace, hgTrace_d, dummy, saturationValue, pedHG, noiseHG);
120 AddPedestal(lgTrace, lgTrace_d, dummy, saturationValue, pedLG, noiseLG);
143 const unsigned int saturationValue,
144 const double ped,
const double noise)
151 for (
int i = firstBin; i <= lastBin; ++i) {
152 const double diff = RandGauss::shoot(randomEngine, ped, noise);
153 const int idiff = int(round(diff));
155 unsaturatedTrace.
SetTime(i,
max(doubleTrace.
At(i) + idiff, 0.));
156 doubleTrace.
SetTime(i, min(unsaturatedTrace.
At(i), double(saturationValue)));
158 const int value =
max(trace.
At(i) + idiff, 0);
159 const int realValue = min(value,
int(saturationValue));
T At(const double time) const
Branch GetTopBranch() const
fwk::VModule::ResultFlag Init()
Initialize: invoked at beginning of run (NOT beginning of event)
double GetBaseline(const sdet::PMTConstants::PMTGain gain) const
Get baseline level for the PMT (for simulations)
int GetStart() const
First slot with data.
StationIterator StationsEnd()
End of all stations.
Detector description interface for Station-related data.
Report success to RunController.
Detector description interface for PMT-related data.
RandomEngineType & GetEngine()
Interface class to access to the SD part of an event.
fwk::VModule::ResultFlag Finish()
Finish: invoked at end of the run (NOT end of the event)
Histogram class for time distributions with suppressed empty bins.
const PMT & GetPMT(const int id) const
Get specified PMT by id.
Branch GetChild(const std::string &childName) const
Get child of this Branch by child name.
void SetTime(const double time, const T weight=T(1))
int AddPedestal(utl::TimeDistributionI &trace, utl::TimeDistributionD &doubleTrace, utl::TimeDistributionD &unsaturatedTrace, const unsigned int saturationValue, const double ped, const double noise)
bool HasFADCTrace(StationConstants::SignalComponent source=StationConstants::eTotal) const
Check if FADC trace (prior to local trigger simulation) exists.
Class representing a document branch.
double GetBinning() const
Size of one slot.
total FADC trace, with no saturation applied by FADC/baseline simulator
unsigned int GetSaturationValue() const
int GetStop() const
Last slot with data (1 less than First slot if no data)
void GetData(bool &b) const
Overloads of the GetData member template function.
fwk::VModule::ResultFlag Run(evt::Event &event)
Run: invoked once per event.
ResultFlag
Flag returned by module methods to the RunController.
StationIterator StationsBegin()
Beginning of all stations.
Class to hold simulated data at PMT level.
utl::RandomEngine * fRandomEngine
total (shower and background)
boost::indirect_iterator< InternalStationIterator, Station & > StationIterator
Iterator over all stations.
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...
CLHEP::HepRandomEngine RandomEngineType
utl::TimeDistributionI & GetFADCTrace(const sdet::PMTConstants::PMTGain gain=sdet::PMTConstants::eHighGain, const StationConstants::SignalComponent source=StationConstants::eTotal)
Get FADC trace by gain and source.
void MakeFADCTrace(StationConstants::SignalComponent source=StationConstants::eTotal)
Make FADC trace prior to local trigger simulation.
double GetBaselineRMS(const sdet::PMTConstants::PMTGain gain) const
Get baseline noise for the PMT (for simulations)