Belle II Software  release-08-01-10
ECLDigitizerModule.h
1 /**************************************************************************
2  * basf2 (Belle II Analysis Software Framework) *
3  * Author: The Belle II Collaboration *
4  * *
5  * See git log for contributors and copyright holders. *
6  * This file is licensed under LGPL-3.0, see LICENSE.md. *
7  **************************************************************************/
8 
9 #pragma once
10 
11 /* ECL headers. */
12 #include <ecl/dbobjects/ECLCrystalCalib.h>
13 #include <ecl/dbobjects/ECLDigitWaveformParametersForMC.h>
14 #include <ecl/digitization/EclConfiguration.h>
15 #include <ecl/mapper/ECLChannelMapper.h>
16 
17 /* Basf2 headers. */
18 #include <framework/core/Module.h>
19 #include <framework/dataobjects/EventMetaData.h>
20 #include <framework/database/DBObjPtr.h>
21 #include <framework/datastore/StoreArray.h>
22 #include <framework/datastore/StoreObjPtr.h>
23 
24 /* C++ headers. */
25 #include <vector>
26 
27 class TTree;
28 
29 namespace Belle2 {
35  class ECLWaveformData;
36  class ECLNoiseData;
37  class ECLWFAlgoParams;
38  class ECLHit;
39  class ECLSimHit;
40  class ECLDigit;
41  class ECLDsp;
42  class ECLDspWithExtraMCInfo;
43  class ECLTrig;
44  class ECLWaveforms;
45 
73  class ECLDigitizerModule : public Module {
74  public:
75 
79 
83 
84 
86  virtual void initialize() override;
87 
89  virtual void beginRun() override;
90 
95  virtual void event() override;
96 
98  virtual void endRun() override;
99 
101  virtual void terminate() override;
102 
103  private:
112  using uint_pair_t = std::pair<unsigned int, unsigned int>;
115  struct crystallinks_t {
117  short unsigned int idn;
119  short unsigned int inoise;
121  short unsigned int ifunc;
123  short unsigned int iss;
124  };
125 
127  std::vector<crystallinks_t> m_tbl;
128 
130  std::vector<algoparams_t> m_idn;
131  std::vector<fitparams_t> m_fitparams;
132  std::vector<ECLNoiseData> m_noise;
133  std::vector<signalsample_t> m_ss;
134  std::vector<signalsample_t> m_ss_HadronShapeSimulations;
137  std::vector<adccounts_t> m_adc;
140  struct calibration_t {
141  float ascale;
142  float tshift;
143  };
145  std::vector<calibration_t> m_calib;
146 
148  std::vector<double> m_Awave;
149 
154  unsigned char m_ttime[ECL::ECL_CRATES] = {};
155 
157  void shapeFitterWrapper(const int j, const int* FitA, const int m_ttrig,
158  int& m_lar, int& m_ltr, int& m_lq, int& m_chi) const ;
159 
161  bool m_loadOnce = true;
162 
165 
167  void readDSPDB();
169  void shapeSignals();
171  void makeWaveforms();
173  void repack(const ECLWFAlgoParams&, algoparams_t&);
177  void makeElectronicNoiseAndPedestal(int j, int* FitA);
178 
181 
184 
187 
190 
193 
196 
199 
202 
205 
208 
210  DBObjPtr<ECLCrystalCalib> m_FPGAWaveform{"ECL_FPGA_StoreWaveform"};
211 
214 
215  /* Input arrays. */
216 
219 
222 
225 
228 
233 
236 
239 
242 
249  bool m_inter;
252  unsigned int m_compAlgo;
256  bool m_trigTime;
257  std::string m_eclWaveformsName;
270  double m_unitscale;
271  };
273 }//Belle2
Class for accessing objects in the database.
Definition: DBObjPtr.h:21
The ECLDigitizer module.
int m_ADCThreshold
ADC threshold for wavefom fits.
std::vector< calibration_t > m_calib
Storage for calibration constants.
double m_unitscale
Normalization coefficient for ECL signal shape.
StoreArray< ECLDsp > m_eclDsps
Generated waveforms.
void callbackHadronSignalShapes()
callback hadron signal shapes from database
void shapeSignals()
Emulate response of energy deposition in a crystal and attached photodiode and make waveforms.
ECL::ECLChannelMapper m_eclMapper
Channel Mapper.
DBObjPtr< TTree > m_algoParameters
Shape fitting algorithm parameters.
StoreObjPtr< ECLWaveforms > m_eclWaveforms
Compressed waveforms.
std::vector< algoparams_t > m_idn
Fit algorihtm parameters shared by group of crystals.
StoreArray< ECLHit > m_eclDiodeHits
Diode hits array.
std::pair< unsigned int, unsigned int > uint_pair_t
a pair of unsigned ints
bool m_dspDataTest
DSP data usage flag.
std::vector< fitparams_t > m_fitparams
Pairs of (waveform parameters, fit parameters)
virtual void initialize() override
Initialize variables
virtual void event() override
Actual digitization of all hits in the ECL.
double m_WaveformThresholdOverride
If gt 0, value will override ECL_FPGA_StoreWaveform and apply value (in GeV) as threshold for all cry...
DBObjPtr< ECLCrystalCalib > m_CrateTimeOffset
Crate time offset.
DBObjPtr< TTree > m_waveformParameters
CellID-specific signal shapes.
double m_DspWithExtraMCInfoThreshold
Energy threshold above which to store DSPs with extra information.
StoreArray< ECLTrig > m_eclTrigs
Trigger information.
virtual void endRun() override
Nothing so far.
DBObjPtr< ECLCrystalCalib > m_MCTimeOffset
MC time offset.
virtual void terminate() override
Free memory.
StoreArray< ECLSimHit > m_eclSimHits
SimHits array.
bool m_background
Module parameters.
StoreArray< ECLDigit > m_eclDigits
Output Arrays.
void getfitparams(const ECLWaveformData &, const ECLWFAlgoParams &, fitparams_t &)
load waveform fit parameters for the shapeFitter function
void shapeFitterWrapper(const int j, const int *FitA, const int m_ttrig, int &m_lar, int &m_ltr, int &m_lq, int &m_chi) const
function wrapper for waveform fit
std::vector< double > m_Awave
Storage for waveform saving thresholds.
DBObjPtr< ECLCrystalCalib > m_CrystalElectronicsTime
Crystal electronics time.
std::vector< signalsample_t > m_ss_HadronShapeSimulations
tabulated shape line for hadron shape simulations
fitparams_t::int_array_192x16_t int_array_192x16_t
weighting coefficients for time and amplitude calculation
DBObjPtr< ECLCrystalCalib > m_CrystalElectronics
Crystal electronics.
fitparams_t::int_array_24x16_t int_array_24x16_t
weighting coefficients amplitude calculation.
virtual void beginRun() override
Nothing so far.
unsigned int m_compAlgo
compression algorithm for background waveforms
bool m_HadronPulseShape
hadron pulse shape flag
DBObjPtr< ECLCrystalCalib > m_CrystalEnergy
Crystal energy.
bool m_trigTime
Use trigger time from beam background overlay.
std::vector< crystallinks_t > m_tbl
Lookup table for ECL channels.
std::vector< adccounts_t > m_adc
Storage for adc hits from entire calorimeter (8736 crystals)
StoreArray< ECLDspWithExtraMCInfo > m_eclDspsWithExtraMCInfo
Generated waveforms with extra MC information.
StoreArray< ECLHit > m_eclHits
Hits array.
bool m_useWaveformParameters
If true, use m_waveformParameters, m_algoParameters, m_noiseParameters.
DBObjPtr< ECLCrystalCalib > m_FPGAWaveform
FPGA waveform.
bool m_calibration
calibration flag
bool m_storeDspWithExtraMCInfo
DSP with extra info flag.
unsigned char m_ttime[ECL::ECL_CRATES]
storage for trigger time in each ECL.
DBObjPtr< TTree > m_noiseParameters
Electronics noise covariance matrix.
bool m_loadOnce
Always load waveform parameters at least once.
std::vector< ECLNoiseData > m_noise
parameters for correlated noise simulation
DBObjPtr< ECLDigitWaveformParametersForMC > m_waveformParametersMC
Hadron signal shapes.
void repack(const ECLWFAlgoParams &, algoparams_t &)
repack waveform fit parameters from ROOT format to plain array of unsigned short for the shapeFitter ...
void makeWaveforms()
Produce and compress waveforms for beam background overlay.
bool m_waveformMaker
produce only waveform digits
StoreObjPtr< EventMetaData > m_EventMetaData
Event metadata.
void readDSPDB()
read Shaper-DSP data from root file
void makeElectronicNoiseAndPedestal(int j, int *FitA)
fill the waveform array FitA by electronic noise and bias it for channel J [0-8735]
std::string m_eclWaveformsName
name of background waveforms storage
DBObjPtr< ECLCrystalCalib > m_CrystalTimeOffset
Crystal time offset.
bool m_inter
internuclear counter effect
std::vector< signalsample_t > m_ss
tabulated shape line
Container for constant parameters used in waveform fits.
ECLWaveformData - container for inverse covariant matrix and shape parameters for time and amplitude ...
This class provides access to ECL channel map that is either a) Loaded from the database (see ecl/dbo...
Base class for Modules.
Definition: Module.h:72
Accessor to arrays stored in the data store.
Definition: StoreArray.h:113
Type-safe access to single objects in the data store.
Definition: StoreObjPtr.h:96
Abstract base class for different kinds of events.
calibration constants per channel
a struct for the parameters of the algorithm
a struct for the fit parameters
int int_array_192x16_t[2 *m_ndt][16]
Array for DSP coefs in normal fit.
int int_array_24x16_t[m_ndt/4][16]
Array for DSP coefs in fast fit.