Deprecated/UpgradeASCIITests/SdBaselineSimulatorASCII/SdBaselineSimulator.cc
Go to the documentation of this file.
1 // SdBaselineSimulator - take fadc trace and add pedestal
2 // 25 Feb 2004 T. Ohnuki UCLA
3 // revised Jun 2004 T. Paul
4 
5 #include <sstream>
6 
7 #include "SdBaselineSimulator.h"
8 
9 #include <evt/Event.h>
10 
11 #include <det/Detector.h>
12 
13 #include <sdet/SDetector.h>
14 #include <sdet/Station.h>
15 
16 #include <sevt/SEvent.h>
17 #include <sevt/Station.h>
18 #include <sevt/StationSimData.h>
19 #include <sevt/PMT.h>
20 #include <sevt/PMTSimData.h>
21 
22 #include <fwk/CentralConfig.h>
23 #include <fwk/RandomEngineRegistry.h>
24 
25 #include <utl/RandomEngine.h>
26 #include <utl/ErrorLogger.h>
27 #include <utl/Reader.h>
28 
29 #include <CLHEP/Random/RandGauss.h>
30 
31 using namespace utl;
32 using namespace fwk;
33 using namespace sevt;
34 using namespace std;
35 using namespace SdBaselineSimulatorASCII;
36 
37 using CLHEP::RandGauss;
38 
39 
40 SdBaselineSimulator::SdBaselineSimulator() :
41  fPrefixBins(0),
42  fPostfixBins(0),
43  fRandomEngine(0),
44  fStoreNonSaturated(0)
45 {
46 }
47 
48 
51 {
52  Branch topBranch =
53  CentralConfig::GetInstance()->GetTopBranch("SdBaselineSimulatorASCII");
54 
55  topBranch.GetChild("NumberPrefixBins").GetData(fPrefixBins);
56  topBranch.GetChild("NumberPostfixBins").GetData(fPostfixBins);
57 
58  topBranch.GetChild("StoreNonSaturated").GetData(satString);
59 
60  fStoreNonSaturated = (satString == "yes");
61 
62  fRandomEngine = &RandomEngineRegistry::GetInstance().Get(RandomEngineRegistry::eDetector);
63 
64  return eSuccess;
65 }
66 
67 
70 {
71  SEvent& sEvent = event.GetSEvent();
72 
73  for (SEvent::StationIterator sIt = sEvent.StationsBegin();
74  sIt != sEvent.StationsEnd(); ++sIt) {
75 
76  // skip station if no particles
77  if (!sIt->HasSimData())
78  continue;
79 
80  const sdet::Station& dStation = det::Detector::GetInstance().GetSDetector().GetStation(*sIt);
81 
82  string simModuleName = sIt->GetSimData().GetSimulatorSignature();
83 
84 
85  for (Station::PMTIterator pmtIt = sIt->PMTsBegin(sdet::PMTConstants::eAnyType);
86  pmtIt != sIt->PMTsEnd(sdet::PMTConstants::eAnyType); ++pmtIt) {
87 
88  const sdet::PMT& dPMT = dStation.GetPMT(*pmtIt);
89  const unsigned int saturationValue = dStation.GetSaturationValue();
90 
91  // Only add baseline to the total trace
92  if (pmtIt->HasSimData()) {
93 
94  PMTSimData& pmtSim = pmtIt->GetSimData();
95 
96  if (pmtSim.HasFADCTrace()) {
97 
100 
101  double pedHG = dPMT.GetBaseline(sdet::PMTConstants::eHighGain);
102  double noiseHG = dPMT.GetBaselineRMS(sdet::PMTConstants::eHighGain);
103  double pedLG = dPMT.GetBaseline(sdet::PMTConstants::eLowGain);
104  double noiseLG = dPMT.GetBaselineRMS(sdet::PMTConstants::eLowGain);
105 
106  TimeDistributionI& hgTrace = pmtSim.GetFADCTrace(PMTConstants::eHighGain, component);
107  TimeDistributionI& lgTrace = pmtSim.GetFADCTrace(PMTConstants::eLowGain, component);
108  TimeDistributionD& hgTrace_d = pmtSim.GetFADCTraceD(PMTConstants::eHighGain, component);
109  TimeDistributionD& lgTrace_d = pmtSim.GetFADCTraceD(PMTConstants::eLowGain, component);
110 
111  if (fStoreNonSaturated) {
112  pmtSim.MakeFADCTrace(componentNoSat);
113  TimeDistributionD& hgUnSatTrace_d = pmtSim.GetFADCTraceD(PMTConstants::eHighGain, componentNoSat);
114  TimeDistributionD& lgUnSatTrace_d = pmtSim.GetFADCTraceD(PMTConstants::eLowGain, componentNoSat);
115  AddPedestal(hgTrace, hgTrace_d, hgUnSatTrace_d, saturationValue, pedHG, noiseHG);
116  AddPedestal(lgTrace, lgTrace_d, lgUnSatTrace_d, saturationValue, pedLG, noiseLG);
117  } else {
118  TimeDistributionD dummy(hgTrace.GetBinning());
119  AddPedestal(hgTrace, hgTrace_d, dummy, saturationValue, pedHG, noiseHG); // don't bother writing unsaturated to event
120  AddPedestal(lgTrace, lgTrace_d, dummy, saturationValue, pedLG, noiseLG);
121  }
122  }// Has FADC trace
123  }// Has Sim data
124  }// PMT loop
125 
126  }
127 
128  return eSuccess;
129 }
130 
131 
134 {
135  return eSuccess;
136 }
137 
138 
139 int
141  TimeDistributionD& doubleTrace,
142  TimeDistributionD& unsaturatedTrace,
143  const unsigned int saturationValue,
144  const double ped, const double noise)
145 {
146  const int firstBin = trace.GetStart() - fPrefixBins;
147  const int lastBin = trace.GetStop() + fPostfixBins;
148  RandomEngine::RandomEngineType* const randomEngine =
150 
151  for (int i = firstBin; i <= lastBin; ++i) {
152  const double diff = RandGauss::shoot(randomEngine, ped, noise);
153  const int idiff = int(round(diff));
154 
155  unsaturatedTrace.SetTime(i, max(doubleTrace.At(i) + idiff, 0.));
156  doubleTrace.SetTime(i, min(unsaturatedTrace.At(i), double(saturationValue)));
157 
158  const int value = max(trace.At(i) + idiff, 0);
159  const int realValue = min(value, int(saturationValue));
160  trace.SetTime(i, realValue);
161  }
162 
163  return 0;
164 }
T At(const double time) const
Branch GetTopBranch() const
Definition: Branch.cc:63
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.
Definition: SEvent.h:59
Detector description interface for Station-related data.
Report success to RunController.
Definition: VModule.h:62
Detector description interface for PMT-related data.
Definition: SDetector/PMT.h:26
RandomEngineType & GetEngine()
Definition: RandomEngine.h:32
Interface class to access to the SD part of an event.
Definition: SEvent.h:39
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.
Definition: Branch.cc:211
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.
Definition: PMTSimData.h:186
#define max(a, b)
Class representing a document branch.
Definition: Branch.h:107
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.
Definition: Branch.cc:644
fwk::VModule::ResultFlag Run(evt::Event &event)
Run: invoked once per event.
ResultFlag
Flag returned by module methods to the RunController.
Definition: VModule.h:60
StationIterator StationsBegin()
Beginning of all stations.
Definition: SEvent.h:57
Class to hold simulated data at PMT level.
Definition: PMTSimData.h:40
total (shower and background)
boost::indirect_iterator< InternalStationIterator, Station & > StationIterator
Iterator over all stations.
Definition: SEvent.h:52
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
CLHEP::HepRandomEngine RandomEngineType
Definition: RandomEngine.h:30
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
void MakeFADCTrace(StationConstants::SignalComponent source=StationConstants::eTotal)
Make FADC trace prior to local trigger simulation.
Definition: PMTSimData.cc:40
double GetBaselineRMS(const sdet::PMTConstants::PMTGain gain) const
Get baseline noise for the PMT (for simulations)

, generated on Tue Sep 26 2023.