MdOptoElectronicSimulator.h
Go to the documentation of this file.
1 #ifndef _MdOptoElectronicSimulatorAG_MdOptoElectronicSimulator_h_
2 #define _MdOptoElectronicSimulatorAG_MdOptoElectronicSimulator_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 MdOptoElectronicSimulatorAG {
71 
91  public boost::noncopyable,
92  public fwk::VModule {
93  public:
94 
97  eSimplified
98  };
100  static const char* const kSimulationTypeTags[];
101 
103  static const char* const kIntegratorSimulationTypeTags[];
104 
107  VModule::ResultFlag Init();
108  VModule::ResultFlag Run(evt::Event& e);
109  VModule::ResultFlag Finish();
110 
113 
114  private:
115  typedef std::list<mdet::Pixel::SPE> PulseContainer;
116  typedef std::list<mdet::SiPM::PE> SiPMPulseContainer;
117 
131  SignalInformation() : fScintSimData(0) {
132  }
142  };
144  typedef std::map<int, SignalInformation > SignalsMap;
155  virtual void ProcessPulses(
156  const mdet::Channel& c,
157  const SignalInformation& signalInfo,
158  utl::TraceB& trace,
159  double& span,
160  const utl::TimeInterval& traceStart/*,
161  const utl::TimeStamp& eventTime*/);
162 
163  /*Overload for SiPM simulation. Calls ChannelSiPM and enables analogic trace.*/
164  virtual void ProcessPulses(
165  const mdet::ChannelSiPM& c,
166  const SignalInformation& signalInfo,
167  utl::TraceB& trace,
168  utl::TraceD& analogSignal,
169  double& span,
170  const utl::TimeInterval& traceStart,
171  double& minTimePreFE,
172  double& maxTimePreFE
173  );
174 
175  virtual double GetPulseTimeSpan(
176  const SignalInformation& si,
177  //const utl::TimeStamp& eventTime,
178  double& minTimePreFE,
179  double& maxTimePreFE
180  );
181 
182  virtual void ApplyCITIROCTransfer(
183  const mdet::ChannelSiPM& channel,
184  const SignalInformation& si,
185  const double pulseTimeSpan,
186  double minTimePreFE,
187 
188  TimeTrace& totalPulsePostFrontEndTrace,
189  TimeTrace& totalPulsePostDiscriminatorTrace,
190  utl::TraceD& traceAnalogical);
191 
192  virtual void SampleTrace(
193  double minTimePostFE,
194  double maxTimePostFE,
195  double binning,
196  const mdet::FrontEndSiPM& frontEnd,
197  const utl::TimeInterval& traceStart,
198  TimeTrace& totalPulsePostDiscriminatorTrace,
199  utl::TraceB& trace);
200 
201  virtual void InjectDigitalNoise(
202  const mdet::Module& module,
203  mevt::Module& evtModule);
204 
205  virtual void PlotChannel(
206  const double traceStartTime,
207  const double minTimePreFE,
208  const double binning,
209  const mdet::ChannelSiPM& channel,
210  utl::TraceD& traceAnalogical,
211  TimeTrace& totalPulsePostFrontEndTrace,
212  TimeTrace& totalPulsePostDiscriminatorTrace,
213  utl::TraceB& trace);
214 
215 
216  virtual void ProcessPulsesIntegrator(
217  const mdet::Module& module,
218  std::vector<utl::TraceD> analogicalTraces,
219  utl::TraceUSI& traceIntegratorA,
220  utl::TraceUSI& traceIntegratorB,
221  const utl::TimeInterval& traceStart,
222  double& minTimePreFE,
223  double& maxTimePreFE);
224 
225  virtual void ApplyBackEndTransferWStepSaturation(
226  const mdet::BackEndSiPM& backEnd,
227  const double maxTimePreFE,
228  const double minTimePreFE,
229  TimeTrace& traceAfterADCLowGain,
230  TimeTrace& traceAfterADCHighGain,
231  TVectorD& totalAnalogicalInput,
232  const std::vector<utl::TraceD> traceAnalogical);
233 
234  virtual void ApplyBackEndTransfer(
235  const mdet::BackEndSiPM& backEnd,
236  const double maxTimePreFE,
237  const double minTimePreFE,
238  TimeTrace& traceAfterADCLowGain,
239  TimeTrace& traceAfterADCHighGain,
240  TVectorD& totalAnalogicalInput,
241  const std::vector<utl::TraceD> traceAnalogical);
242 
243 
244  virtual void ApplyTransferBlock(
246  const mdet::BackEndSiPM& backEnd,
248 
249  virtual void ApplyTransferBlocks(
252  const mdet::BackEndSiPM& backEnd);
253 
254  virtual void SampleTraceADC(
255  const double minTimePostFE,
256  const double maxTimePostFE,
257  const mdet::FrontEndSiPM& frontEnd,
258  const utl::TimeInterval& traceStart,
259  TimeTrace& traceAfterADCLowGain,
260  TimeTrace& traceAfterADCHighGain,
261  utl::TraceUSI& traceIntegratorA,
262  utl::TraceUSI& traceIntegratorB);
263 
264  virtual void PlotIntegrator(
265  const double traceStartTime,
266  const double minTimePreFE,
267  const double binning,
268  const mdet::FrontEndSiPM& frontEnd,
269  TVectorD& traceAnalogical,
270  TimeTrace& traceIntegratorAAmplifier,
271  TimeTrace& traceIntegratorBAmplifier,
272  utl::TraceUSI& traceIntegratorA,
273  utl::TraceUSI& traceIntegratorB,
274  const double delay
275  );
276 
277  VModule::ResultFlag OptoElectronics(evt::Event& e);
284  virtual VModule::ResultFlag SimulateElectronics(
285  mevt::Module& evtModule,
286  const mdet::Module& module,
287  const SignalsMap& sm,
288  const utl::TimeStamp& eventTime);
292  int GetTriggerTimeFromSD(evt::Event& , const mdet::Counter&, mevt::MEvent::CounterIterator, double& );
296  void Init(std::unique_ptr<utl::TabularStream>& pt, unsigned int nCol) const;
300  void Dump(const TF1& fun, const std::string& suffix);
304  unsigned int fRunNumber;
308  unsigned int fNDiscretization;
316  std::vector<std::string> fPlotFileExtensions;
320  unsigned int fNumPlotPoints;
329  unsigned int fNRepetitions;
333  unsigned int fNBinsHistograms;
342  unsigned int fMinSPE;
348  unsigned int fMaxSPE;
354  unsigned int fStepSPE;
358  bool fForcedSDTrigger; // Uses MD data irrespectively of WCD trigger
362  bool fIgnoreCrossTalk; // The idea of this flag could be extended to other cases.
370  std::string fPulseFilename;
374  std::ofstream fPulseFile;
378  unsigned int fNPulseSamples;
402 
414  typedef int ParticleType;
439  std::set<ParticleType> fAllowedParticleTypes;
440  /*
441  * Ploting configuration.
442  */
443  // Configure if the plot is to be output.
452 
453  // Configure if the default (plot or not) is toggled.
462  //
463  TStyle *fStyle;
464  //
465  REGISTER_MODULE("MdOptoElectronicSimulator", MdOptoElectronicSimulator);
466  };
467 }
468 
469 #endif // _MdOptoElectronicSimulatorAG_MdOptoElectronicSimulator_h_
bool fGenerateSPEPulseOutput
To include individual pulses samples in the output file.
unsigned int fNPulseSamples
Number of samples to use in the output files for pulses.
utl::MessageLoggerConfig fLog
Output messages handler.
int ParticleType
Simple own typedef for the real datatype of the particles&#39; type. In the class utl::Particle there&#39;s a...
const mevt::ScintillatorSimData * fScintSimData
Simulation information for the scint.
Helper class for configuration of units: value and name.
Definition: UnitsConfig.h:22
bool fIncludeBaseLineFluctuationIntegrator
To simulate baseline fluctuation in the integrator output.
double fPulseSampleWindow
Define the length of the window within which the pulse is sampled.
Electronic front-end for the modules.
Definition: FrontEnd.h:33
Eletronic channel.
void Init()
Initialise the registry.
Electronic front-end for the modules.
Definition: FrontEndSiPM.h:35
IntegratorSimulationType fIntegratorSimType
Type of integrator simulation. Step by step simulates the complete transfer functions and applies sat...
A TimeStamp holds GPS second and nanosecond for some event.
Definition: TimeStamp.h:110
std::map< int, SignalInformation > SignalsMap
Map associating the information with IDs (meant to be from pixel&#39;s).
Eletronic ChannelSiPM.
Definition: ChannelSiPM.h:33
This modules receives a list of optical photons as inputs and generates analogic waveforms that feed ...
Actual muon-sensitive objects.
Wraps a message to logger (received as parameter or created here), its access and configuration...
Module level event data.
Definition: MEvent/Module.h:41
unsigned int fMaxSPE
Maximum number of spe (inclusive).
std::vector< std::string > fPlotFileExtensions
File extensions for plots (dot included).
static int delay
Definition: XbAlgo.cc:20
unsigned int fMinSPE
Minimum number of spe (inclusive).
Array of Scintillator.
unsigned int fNRepetitions
Repetitions for in-module loop.
bool fGeneratePreFETotalPulseOutput
To include the total pulse prior front-end in the output file.
Module interface.
Definition: VModule.h:53
#define REGISTER_MODULE(_moduleName_, _ModuleType_)
Definition: VModule.h:145
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
InternalCounterCollection::ComponentIterator CounterIterator
Definition: MEvent.h:31
void Dump(const FEvent &fevent)
Eletronic BackEndSiPM.
Definition: BackEndSiPM.h:37
unsigned int fNBinsHistograms
Number of bins for histograms.
std::set< ParticleType > fAllowedParticleTypes
Particle types that are considered to generate signal, if empty then every kind of particle is allowe...
unsigned int fNDiscretization
Discretization over the continuous functions.
unsigned int fNumPlotPoints
Number of points to be used in plotting (theoretically) continuous functions.
bool fGeneratePostFETotalPulseOutput
To include the total pulse after front-end in the output file.

, generated on Tue Sep 26 2023.