Belle II Software  release-06-00-14
ECLDigitCalibratorModule.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 // STL
12 #include <vector>
13 
14 // FRAMEWORK
15 #include <framework/core/Module.h>
16 #include <framework/datastore/StoreObjPtr.h>
17 #include <framework/datastore/StoreArray.h>
18 #include <framework/database/DBObjPtr.h>
19 
20 #include <ecl/utility/ECLTimingUtilities.h>
21 
22 class TH1F;
23 class TFile;
24 
25 namespace Belle2 {
31  class EventLevelClusteringInfo;
32 
33  class ECLCrystalCalib;
34  class ECLDigit;
35  class ECLDsp;
36  class ECLCalDigit;
37  class ECLPureCsIInfo;
38 
41 
42  public:
43 
47 
51 
53  virtual void initialize() override;
54 
56  virtual void beginRun() override;
57 
60  virtual void event() override;
61 
63  virtual void endRun() override;
64 
66  virtual void terminate() override;
67 
69  virtual const char* eclDigitArrayName() const
70  { return "ECLDigits" ; }
71 
73  virtual const char* eclDspArrayName() const
74  { return "ECLDsps" ; }
75 
77  virtual const char* eclCalDigitArrayName() const
78  { return "ECLCalDigits" ; }
79 
81  virtual const char* eventLevelClusteringInfoName() const
82  { return "EventLevelClusteringInfo" ; }
83 
85  virtual const char* eclPureCsIInfoArrayName() const
86  { return "ECLPureCsIInfo" ; }
87 
88  protected:
89 
90  private:
91 
95  const int c_nCrystals = 8736;
97  std::vector < float > v_calibrationCrystalElectronics;
98  std::vector < float > v_calibrationCrystalElectronicsUnc;
101  std::vector < float > v_calibrationCrystalEnergy;
102  std::vector < float > v_calibrationCrystalEnergyUnc;
105  std::vector < float > v_calibrationCrystalElectronicsTime;
106  std::vector < float >
110  std::vector < float > v_calibrationCrystalTimeOffset;
111  std::vector < float > v_calibrationCrystalTimeOffsetUnc;
114  std::vector < float > v_calibrationCrateTimeOffset;
115  std::vector < float > v_calibrationCrateTimeOffsetUnc;
119  std::vector < float > v_calibrationCrystalFlightTime;
120  std::vector < float > v_calibrationCrystalFlightTimeUnc;
132  double m_pureCsIEnergyCalib = 0.00005;
133  double m_pureCsITimeCalib = 10.;
134  double m_pureCsITimeOffset = 0.31;
136  void initializeCalibration();
137  void callbackCalibration(DBObjPtr<ECLCrystalCalib>& cal, std::vector<float>& constants,
138  std::vector<float>& constantsUnc);
140  double getT99(const int cellid, const double energy, const bool fitfailed, const int bgcount) const;
141  int determineBackgroundECL();
143  const double c_timeResolutionForFitFailed = 1.0e9;
144  const double c_timeForFitFailed = 0.0;
146  // new time calibration from Kim and Chris
147  std::string m_fileBackgroundName;
148  TFile* m_fileBackground{nullptr};
149  TH1F* m_th1fBackground{nullptr};
151  const double c_pol2Var1 = 1684.0;
152  const double c_pol2Var2 = 3080.0;
153  const double c_pol2Var3 = -613.9;
154  double m_pol2Max;
155  const int c_nominalBG = 183;
156  double m_averageBG;
157  const double c_minT99 = 3.5;
159  bool m_simulatePure = 0;
162  std::unique_ptr< Belle2::ECL::ECLTimingUtilities > ECLTimeUtil =
163  std::make_unique<Belle2::ECL::ECLTimingUtilities>();
165  // For the energy dependence correction to the time
166  // t-t0 = p1 + pow( (p3/(amplitude+p2)), p4 ) + p5*exp(-amplitude/p6) ("Energy dependence equation")
167  // Only change the time walk function paramters if they change away from the below dummy values
175  };
176 
179  public:
181  virtual const char* eclDigitArrayName() const override
182  { return "ECLDigitsPureCsI" ; }
183 
185  virtual const char* eclCalDigitArrayName() const override
186  { return "ECLCalDigitsPureCsI" ; }
187 
189  virtual const char* eclDspArrayName() const override
190  { return "ECLDspsPureCsI" ; }
191 
193  virtual const char* eventLevelClusteringInfoName() const override
194  { return "EventLevelClusteringInfoPureCsI" ; }
195 
196  };
197 
199 } // end Belle2 namespace
Class for accessing objects in the database.
Definition: DBObjPtr.h:21
Class to find calibrate digits and convert waveform fit information to physics quantities.
double m_pureCsITimeCalib
conversion factor from eclPureCsIDigitizer to ns.
double m_energyDependenceTimeOffsetFitParam_p5
p5 in "energy dependence equation"
const double c_pol2Var2
2-order fit for p1.
StoreArray< ECLDsp > m_eclDsps
storearray ECLDsp
virtual const char * eclDigitArrayName() const
Name of the ECLDigit.
DBObjPtr< ECLCrystalCalib > m_calibrationCrateTimeOffset
single crate time calibration offset (per crystal)
double m_pureCsITimeOffset
ad-hoc offset correction for pureCsI timing/
TH1F * m_th1fBackground
Background histogram.
DBObjPtr< ECLCrystalCalib > m_calibrationCrystalElectronics
single crystal electronics calibration
double m_energyDependenceTimeOffsetFitParam_p2
p2 in "energy dependence equation"
const double c_minT99
The minimum t99.
virtual void initialize() override
Initialize variables.
std::vector< float > v_calibrationCrystalElectronicsUnc
single crystal electronics calibration as vector uncertainty
std::string m_fileBackgroundName
Background filename.
std::vector< float > v_calibrationCrateTimeOffsetUnc
single crate time calibration offset as vector uncertainty (per crystal)
double m_energyDependenceTimeOffsetFitParam_p3
p3 in "energy dependence equation"
double m_energyDependenceTimeOffsetFitParam_p6
p6 in "energy dependence equation"
std::vector< float > v_calibrationCrystalElectronicsTimeUnc
single crystal time calibration offset electronics as vector uncertainty
virtual void event() override
event per event.
DBObjPtr< ECLCrystalCalib > m_calibrationCrystalEnergy
single crystal energy calibration
StoreArray< ECLPureCsIInfo > m_eclPureCsIInfo
storearray ECLPureCsIInfo - Special information for pure CsI simulation
virtual void endRun() override
end run.
double getT99(const int cellid, const double energy, const bool fitfailed, const int bgcount) const
t99%.
virtual void terminate() override
terminate.
const double c_pol2Var1
2-order fit for p1 Var1 + Var2*bg + Var3*bg^2.
StoreArray< ECLDigit > m_eclDigits
storearray ECLDigit
const double c_timeResolutionForFitFailed
Time resolution for failed fits".
std::vector< float > v_calibrationCrystalElectronicsTime
single crystal time calibration offset electronics as vector
std::vector< float > v_calibrationCrystalFlightTime
single crystal time calibration TOF as vector
void callbackCalibration(DBObjPtr< ECLCrystalCalib > &cal, std::vector< float > &constants, std::vector< float > &constantsUnc)
reads calibration constants
std::unique_ptr< Belle2::ECL::ECLTimingUtilities > ECLTimeUtil
ECL timing tools.
double m_energyDependenceTimeOffsetFitParam_p4
p4 in "energy dependence equation"
void initializeCalibration()
reads calibration constants, performs checks, put them into a vector
std::vector< float > v_calibrationCrystalEnergy
single crystal energy calibration as vector
std::vector< float > v_calibrationCrystalEnergyUnc
single crystal energy calibration as vector uncertainty
virtual void beginRun() override
begin run.
virtual const char * eclPureCsIInfoArrayName() const
Name of the ECL pure CsI Information.
const double c_pol2Var3
2-order fit for p1.
std::vector< float > v_calibrationCrateTimeOffset
single crate time calibration offset as vector (per crystal)
const double c_timeForFitFailed
Time for failed fits".
int determineBackgroundECL()
count out of time digits to determine baclground levels
double m_timeInverseSlope
Time calibration inverse slope "a".
DBObjPtr< ECLCrystalCalib > m_calibrationCrystalTimeOffset
single crystal time calibration offset
double m_backgroundTimingCut
Timing window for background level counting.
std::vector< float > v_calibrationCrystalElectronics
single crystal electronics calibration as vector
DBObjPtr< ECLCrystalCalib > m_calibrationCrystalElectronicsTime
single crystal time calibration offset electronics
virtual const char * eventLevelClusteringInfoName() const
Name of the EventLevelClusteringInfo.
double m_pureCsIEnergyCalib
conversion factor from ADC counts to GeV.
double m_energyDependenceTimeOffsetFitParam_p1
p1 in "energy dependence equation"
const int c_nCrystals
Number of ECL crystals.
std::vector< float > v_calibrationCrystalTimeOffset
single crystal time calibration offset as vector
virtual const char * eclDspArrayName() const
Name of the ECLDsp.
DBObjPtr< ECLCrystalCalib > m_calibrationCrystalFlightTime
single crystal time calibration TOF
double m_averageBG
Average dose per crystal calculated from m_th1dBackground.
double m_pol2Max
Maximum of p1 2-order fit to limit values.
std::vector< float > v_calibrationCrystalFlightTimeUnc
single crystal time calibration TOF as vector uncertainty
double m_backgroundEnergyCut
Energy cut for background level counting.
virtual const char * eclCalDigitArrayName() const
Name of the ECLCalDigit.
StoreObjPtr< EventLevelClusteringInfo > m_eventLevelClusteringInfo
event level clustering info
StoreArray< ECLCalDigit > m_eclCalDigits
storearray ECLCalDigit
const int c_nominalBG
Number of out of time digits at BGx1.0.
std::vector< float > v_calibrationCrystalTimeOffsetUnc
single crystal time calibration offset as vector uncertainty
bool m_simulatePure
Flag to set pure CsI simulation option.
Class derived from ECLDigitCalibratorModule, only difference are the names.
virtual const char * eclCalDigitArrayName() const override
PureCsI Name of the ECLCalDigitsPureCsI.
virtual const char * eclDspArrayName() const override
Name of the ECLDspPureCsI.
virtual const char * eventLevelClusteringInfoName() const override
PureCsI Name of the EventLevelClusteringInfoPureCsI.
virtual const char * eclDigitArrayName() const override
PureCsI Name of the ECLDigitsPureCsI.
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:95
Abstract base class for different kinds of events.