MdCounterSimulator.h
Go to the documentation of this file.
1 #ifndef _MdCounterSimulatorAG_MdCounterSimulator_h_
2 #define _MdCounterSimulatorAG_MdCounterSimulator_h_
3 
10 #include <utl/config.h> // before all
11 
12 #include <fwk/VModule.h>
13 // Need the full definition of Pixel::SPE as template arg of the list.
14 #include <mdet/Pixel.h>
15 #include <mdet/SiPM.h>
16 #include <mdet/BackEndSiPM.h>
17 #include <mdet/MDetector.h>
18 
19 #include <evt/Event.h>
20 #include <mevt/MEvent.h>
21 //
22 #include <utl/AugerUnits.h>
23 #include <utl/Trace-fwd.h>
24 //#include <utl/Trace.h>
25 #include <utl/MessageLoggerConfig.h>
26 #include <utl/UnitsConfig.h>
27 #include <utl/FFTDataContainer.h>
28 //
29 #include <map>
30 #include <list>
31 #include <algorithm>
32 #include <iostream>
33 #include <vector>
34 #include <cmath>
35 #include <fstream>
36 #include <set>
37 #include <TVector.h>
38 //
39 #include <boost/utility.hpp>
40 //
41 
42 //fwds
43 
44 class TStyle;
45 class TF1;
46 
47 namespace mdet {
48  class Module;
49  class Scintillator;
50  class FrontEnd;
51  class Channel;
52  class FrontEndSiPM;
53  class BackEndSiPM;
54  class ChannelSiPM;
55 }
56 
57 namespace mevt {
58  class ScintillatorSimData;
59  class Module;
60 }
61 
62 namespace utl {
63  class TimeStamp;
64  class TimeInterval;
65  class TabularStream;
66 }
67 
68 using namespace mdet;
69 
70 namespace MdCounterSimulatorAG {
71 
72 
97  public boost::noncopyable,
98  public fwk::VModule {
99  public:
103  eFromMEventSimulatedScint
104  };
105 
108  eSimplified
109  };
111  static const char* const kSimulationTypeTags[];
112 
114  static const char* const kIntegratorSimulationTypeTags[];
115 
118  VModule::ResultFlag Init();
119  VModule::ResultFlag Run(evt::Event& e);
120  VModule::ResultFlag Finish();
121 
124  private:
125  typedef std::list<mdet::Pixel::SPE> PulseContainer;
126  typedef std::list<mdet::SiPM::PE> SiPMPulseContainer;
127 
141  SignalInformation() : fScintSimData(0) {
142  }
152  };
154  typedef std::map<int, SignalInformation > SignalsMap;
165  virtual void ProcessPulses(
166  const mdet::Channel& c,
167  const SignalInformation& signalInfo,
168  utl::TraceB& trace,
169  double& span,
170  const utl::TimeInterval& traceStart,
171  const utl::TimeStamp& eventTime);
172 
173  /*Overload for SiPM simulation. Calls ChannelSiPM and enables analogic trace.*/
174  virtual void ProcessPulses(
175  const mdet::ChannelSiPM& c,
176  const SignalInformation& signalInfo,
177  utl::TraceB& trace,
178  utl::TraceD& analogSignal,
179  double& span,
180  const utl::TimeInterval& traceStart,
181  double& minTimePreFE,
182  double& maxTimePreFE,
183  double& analogicTraceStartTime,
184  double& analogicTraceEndTime);
185 
186  virtual double GetPulseTimeSpan(
187  const SignalInformation& si,
188  const utl::TimeStamp& eventTime,
189  double& minTimePreFE,
190  double& maxTimePreFE,
191  double& analogicTraceStartTime,
192  double& analogicTraceEndTime);
193 
194  virtual void ApplyCITIROCTransfer(
195  const mdet::ChannelSiPM& channel,
196  const SignalInformation& si,
197  const double pulseTimeSpan,
198  double minTimePreFE,
199  double analogicTraceStartTime,
200  double analogicTraceEndTime,
201  TimeTrace& totalPulsePostFrontEndTrace,
202  TimeTrace& totalPulsePostDiscriminatorTrace,
203  utl::TraceD& traceAnalogical);
204 
205  virtual void SampleTrace(
206  double minTimePostFE,
207  double maxTimePostFE,
208  double binning,
209  const mdet::FrontEndSiPM& frontEnd,
210  const utl::TimeInterval& traceStart,
211  TimeTrace& totalPulsePostDiscriminatorTrace,
212  utl::TraceB& trace);
213 
214  virtual void InjectDigitalNoise(
215  const mdet::Module& module,
216  mevt::Module& evtModule);
217 
218  virtual void PlotChannel(
219  const double traceStartTime,
220  const double minTimePreFE,
221  const double binning,
222  const mdet::ChannelSiPM& channel,
223  utl::TraceD& traceAnalogical,
224  TimeTrace& totalPulsePostFrontEndTrace,
225  TimeTrace& totalPulsePostDiscriminatorTrace,
226  utl::TraceB& trace);
227 
228 
229  virtual void ProcessPulsesIntegrator(
230  const mdet::Module& module,
231  std::vector<utl::TraceD> analogicalTraces,
232  utl::TraceUSI& traceIntegratorA,
233  utl::TraceUSI& traceIntegratorB,
234  const utl::TimeInterval& traceStart,
235  double& minTimePreFE,
236  double& maxTimePreFE);
237 
238  virtual void ApplyBackEndTransferWStepSaturation(
239  const mdet::BackEndSiPM& backEnd,
240  const double maxTimePreFE,
241  const double minTimePreFE,
242  TimeTrace& traceAfterADCLowGain,
243  TimeTrace& traceAfterADCHighGain,
244  TVectorD& totalAnalogicalInput,
245  const std::vector<utl::TraceD> traceAnalogical);
246 
247  virtual void ApplyBackEndTransfer(
248  const mdet::BackEndSiPM& backEnd,
249  const double maxTimePreFE,
250  const double minTimePreFE,
251  TimeTrace& traceAfterADCLowGain,
252  TimeTrace& traceAfterADCHighGain,
253  TVectorD& totalAnalogicalInput,
254  const std::vector<utl::TraceD> traceAnalogical);
255 
256 
257  virtual void ApplyTransferBlock(
259  const mdet::BackEndSiPM& backEnd,
261 
262  virtual void ApplyTransferBlocks(
265  const mdet::BackEndSiPM& backEnd);
266 
267  virtual void SampleTraceADC(
268  const double minTimePostFE,
269  const double maxTimePostFE,
270  const mdet::FrontEndSiPM& frontEnd,
271  const utl::TimeInterval& traceStart,
272  TimeTrace& traceAfterADCLowGain,
273  TimeTrace& traceAfterADCHighGain,
274  utl::TraceUSI& traceIntegratorA,
275  utl::TraceUSI& traceIntegratorB);
276 
277  virtual void PlotIntegrator(
278  const double traceStartTime,
279  const double minTimePreFE,
280  const double binning,
281  const mdet::FrontEndSiPM& frontEnd,
282  TVectorD& traceAnalogical,
283  TimeTrace& traceIntegratorAAmplifier,
284  TimeTrace& traceIntegratorBAmplifier,
285  utl::TraceUSI& traceIntegratorA,
286  utl::TraceUSI& traceIntegratorB);
287 
289  VModule::ResultFlag RunFromMEvent(evt::Event& e);
290  VModule::ResultFlag RunFromMEventScintillatorSimulated(evt::Event& e);
301  virtual VModule::ResultFlag SimulatePulses(
302  const mdet::Scintillator& scint,
303  const mevt::ScintillatorSimData& ssd,
304  mevt::ScintillatorSimData& ssd_nonconst,
305  SignalsMap& sm);
312  virtual VModule::ResultFlag SimulateElectronics(
313  mevt::Module& evtModule,
314  const mdet::Module& module,
315  const SignalsMap& sm,
316  const utl::TimeStamp& eventTime);
320  int GetTriggerTimeFromSD(evt::Event& , const mdet::Counter&, mevt::MEvent::CounterIterator, double& );
324  void Init(std::unique_ptr<utl::TabularStream>& pt, unsigned int nCol) const;
328  void Dump(const TF1& fun, const std::string& suffix);
332  unsigned int fRunNumber;
336  unsigned int fNDiscretization;
344  std::vector<std::string> fPlotFileExtensions;
348  unsigned int fNumPlotPoints;
361  unsigned int fNRepetitions;
365  unsigned int fNBinsHistograms;
374  unsigned int fMinSPE;
380  unsigned int fMaxSPE;
386  unsigned int fStepSPE;
390  bool fForcedSDTrigger; // Uses MD data irrespectively of WCD trigger
394  bool fIgnoreCrossTalk; // The idea of this flag could be extended to other cases.
402  std::string fPulseFilename;
406  std::ofstream fPulseFile;
410  unsigned int fNPulseSamples;
434 
446  typedef int ParticleType;
471  std::set<ParticleType> fAllowedParticleTypes;
472  /*
473  * Ploting configuration.
474  */
475  // Configure if the plot is to be output.
484 
485  // Configure if the default (plot or not) is toggled.
494  //
495  TStyle *fStyle;
496  //
497  REGISTER_MODULE("MdCounterSimulatorAG", MdCounterSimulator);
498  };
499 }
500 
501 #endif // _MdCounterSimulatorAG_MdCounterSimulator_h_
unsigned int fStepSPE
Step size for spe iteration.
unsigned int fNBinsHistograms
Number of bins for histograms.
utl::MessageLoggerConfig fLog
Output messages handler.
SimulationType
Kind of possible simulation to be performed.
Helper class for configuration of units: value and name.
Definition: UnitsConfig.h:22
std::list< mdet::SiPM::PE > SiPMPulseContainer
int ParticleType
Simple own typedef for the real datatype of the particles&#39; type. In the class utl::Particle there&#39;s a...
unsigned int fNDiscretization
Discretization over the continuous functions.
double fPulseSampleWindow
Define the length of the window within which the pulse is sampled.
unsigned int fNumPlotPoints
Number of points to be used in plotting (theoretically) continuous functions.
bool fIncludeBaseLineFluctuationIntegrator
To simulate baseline fluctuation in the integrator output.
unsigned int fRunNumber
Tracks the number of runs.
bool fGeneratePreFETotalPulseOutput
To include the total pulse prior front-end in the output file.
Electronic front-end for the modules.
Definition: FrontEnd.h:33
Eletronic channel.
void Init()
Initialise the registry.
Describe your module. In one sentence.
std::map< int, SignalInformation > SignalsMap
Map associating the information with IDs (meant to be from pixel&#39;s).
unsigned int fMinSPE
Minimum number of spe (inclusive).
Electronic front-end for the modules.
Definition: FrontEndSiPM.h:35
A TimeStamp holds GPS second and nanosecond for some event.
Definition: TimeStamp.h:110
Eletronic ChannelSiPM.
Definition: ChannelSiPM.h:33
std::string fPulseFilename
Pulse output file filename.
Actual muon-sensitive objects.
std::vector< std::string > fPlotFileExtensions
File extensions for plots (dot included).
bool fInjectNoiseBinary
To inject noise in binary traces.
std::list< mdet::Pixel::SPE > PulseContainer
Wraps a message to logger (received as parameter or created here), its access and configuration...
Module level event data.
Definition: MEvent/Module.h:41
utl::UnitsConfig fUnits
Units configuration.
unsigned int fNRepetitions
Repetitions for in-module loop.
bool fForcedSDTrigger
Ignore WCD trigger condition.
Array of Scintillator.
IntegratorSimulationType fIntegratorSimType
Type of integrator simulation. Step by step simulates the complete transfer functions and applies sat...
Module interface.
Definition: VModule.h:53
#define REGISTER_MODULE(_moduleName_, _ModuleType_)
Definition: VModule.h:145
const mevt::ScintillatorSimData * fScintSimData
Simulation information for the scint.
bool fIgnoreCrossTalk
Ignore cross-talk effects.
Root detector of the muon detector hierarchy.
Template class for a data container that offers and takes both time series and corresponding frequenc...
Scintillator level simulation data.
A TimeInterval is used to represent time elapsed between two events.
Definition: TimeInterval.h:43
std::set< ParticleType > fAllowedParticleTypes
Particle types that are considered to generate signal, if empty then every kind of particle is allowe...
InternalCounterCollection::ComponentIterator CounterIterator
Definition: MEvent.h:31
PulseContainer fPulses
Collection of SPE/PE pulses.
void Dump(const FEvent &fevent)
Eletronic BackEndSiPM.
Definition: BackEndSiPM.h:37
std::ofstream fPulseFile
Associated stream.
SimulationType fSimType
Type of simulation.
unsigned int fMaxSPE
Maximum number of spe (inclusive).
bool fGeneratePostFETotalPulseOutput
To include the total pulse after front-end in the output file.
unsigned int fNPulseSamples
Number of samples to use in the output files for pulses.
bool fGenerateSPEPulseOutput
To include individual pulses samples in the output file.
Simple struct to store signal information in containers.

, generated on Tue Sep 26 2023.