Belle II Software  release-08-00-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/DBArray.h>
21 #include <framework/database/DBObjPtr.h>
22 #include <framework/datastore/StoreArray.h>
23 #include <framework/datastore/StoreObjPtr.h>
24 
25 /* C++ headers. */
26 #include <vector>
27 
28 class TTree;
29 
30 namespace Belle2 {
36  class ECLWaveformData;
37  class ECLNoiseData;
38  class ECLWFAlgoParams;
39  class ECLHit;
40  class ECLSimHit;
41  class ECLDigit;
42  class ECLDsp;
43  class ECLDspWithExtraMCInfo;
44  class ECLTrig;
45  class ECLWaveforms;
46 
74  class ECLDigitizerModule : public Module {
75  public:
76 
80 
84 
85 
87  virtual void initialize() override;
88 
90  virtual void beginRun() override;
91 
96  virtual void event() override;
97 
99  virtual void endRun() override;
100 
102  virtual void terminate() override;
103 
104  private:
113  using uint_pair_t = std::pair<unsigned int, unsigned int>;
116  struct crystallinks_t {
118  short unsigned int idn;
120  short unsigned int inoise;
122  short unsigned int ifunc;
124  short unsigned int iss;
125  };
126 
128  std::vector<crystallinks_t> m_tbl;
129 
131  std::vector<algoparams_t> m_idn;
132  std::vector<fitparams_t> m_fitparams;
133  std::vector<ECLNoiseData> m_noise;
134  std::vector<signalsample_t> m_ss;
135  std::vector<signalsample_t> m_ss_HadronShapeSimulations;
138  std::vector<adccounts_t> m_adc;
141  struct calibration_t {
142  float ascale;
143  float tshift;
144  };
146  std::vector<calibration_t> m_calib;
147 
149  std::vector<double> m_Awave;
150 
155  unsigned char m_ttime[ECL::ECL_CRATES] = {};
156 
158  void shapeFitterWrapper(const int j, const int* FitA, const int m_ttrig,
159  int& m_lar, int& m_ltr, int& m_lq, int& m_chi) const ;
160 
162  bool m_loadOnce = true;
163 
166 
168  void readDSPDB();
170  void shapeSignals();
172  void makeWaveforms();
174  void repack(const ECLWFAlgoParams&, algoparams_t&);
178  void makeElectronicNoiseAndPedestal(int j, int* FitA);
179 
182 
185 
188 
191 
194 
197 
200 
203 
206 
209 
211  DBObjPtr<ECLCrystalCalib> m_FPGAWaveform{"ECL_FPGA_StoreWaveform"};
212 
215 
216  /* Input arrays. */
217 
220 
223 
226 
229 
234 
237 
240 
243 
250  bool m_inter;
253  unsigned int m_compAlgo;
257  bool m_trigTime;
258  std::string m_eclWaveformsName;
271  double m_unitscale;
272  };
274 }//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.