Belle II Software development
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/* ECL headers. */
12#include <ecl/dataobjects/ECLElementNumbers.h>
13#include <ecl/utility/ECLTimingUtilities.h>
14
15/* Basf2 headers. */
16#include <framework/core/Module.h>
17#include <framework/database/DBObjPtr.h>
18#include <framework/datastore/StoreArray.h>
19#include <framework/datastore/StoreObjPtr.h>
20
21/* C++ headers. */
22#include <vector>
23
24class TH1F;
25class TFile;
26
27namespace Belle2 {
32
34
35 class ECLCrystalCalib;
36 class ECLDigit;
37 class ECLDsp;
38 class ECLCalDigit;
39 class ECLPureCsIInfo;
40
43
44 public:
45
49
53
55 virtual void initialize() override;
56
58 virtual void beginRun() override;
59
62 virtual void event() override;
63
65 virtual const char* eclDigitArrayName() const
66 { return "ECLDigits" ; }
67
69 virtual const char* eclDspArrayName() const
70 { return "ECLDsps" ; }
71
73 virtual const char* eclCalDigitArrayName() const
74 { return "ECLCalDigits" ; }
75
77 virtual const char* eventLevelClusteringInfoName() const
78 { return "EventLevelClusteringInfo" ; }
79
81 virtual const char* eclPureCsIInfoArrayName() const
82 { return "ECLPureCsIInfo" ; }
83
84 protected:
85
86 private:
87
90
92
93 std::vector < float > v_calibrationCrystalElectronics;
94 std::vector < float > v_calibrationCrystalElectronicsUnc;
96
97 std::vector < float > v_calibrationCrystalEnergy;
98 std::vector < float > v_calibrationCrystalEnergyUnc;
100
102 std::vector < float >
105
106 std::vector < float > v_calibrationCrystalTimeOffset;
107 std::vector < float > v_calibrationCrystalTimeOffsetUnc;
109
110 std::vector < float > v_calibrationCrateTimeOffset;
111 std::vector < float > v_calibrationCrateTimeOffsetUnc;
114
115 std::vector < float > v_calibrationCrystalFlightTime;
116 std::vector < float > v_calibrationCrystalFlightTimeUnc;
118
119 StoreObjPtr <EventLevelClusteringInfo> m_eventLevelClusteringInfo;
120
125
127
128 double m_pureCsIEnergyCalib = 0.00005;
129 double m_pureCsITimeCalib = 10.;
130 double m_pureCsITimeOffset = 0.31;
131
132 void initializeCalibration();
133 static void callbackCalibration(DBObjPtr<ECLCrystalCalib>& cal, std::vector<float>& constants,
134 std::vector<float>& constantsUnc);
135
136 double getT99(const int cellid, const double energy, const bool fitfailed, const int bgcount) const;
138
139 const double c_timeResolutionForFitFailed = 1.0e9;
140 const double c_timeForFitFailed = 0.0;
141
142 // new time calibration from Kim and Chris
144 TFile* m_fileBackground{nullptr};
145 TH1F* m_th1fBackground{nullptr};
146
147 const double c_pol2Var1 = 1684.0;
148 const double c_pol2Var2 = 3080.0;
149 const double c_pol2Var3 = -613.9;
150 double m_pol2Max;
151 const int c_nominalBG = 183;
152 double m_averageBG;
153 const double c_minT99 = 3.5;
154
155 bool m_simulatePure = 0;
156
157
158 std::unique_ptr< Belle2::ECL::ECLTimingUtilities > ECLTimeUtil =
159 std::make_unique<Belle2::ECL::ECLTimingUtilities>();
160
161 bool m_isMC = false;
162
163 };
164
167 public:
169 virtual const char* eclDigitArrayName() const override
170 { return "ECLDigitsPureCsI" ; }
171
173 virtual const char* eclCalDigitArrayName() const override
174 { return "ECLCalDigitsPureCsI" ; }
175
177 virtual const char* eclDspArrayName() const override
178 { return "ECLDspsPureCsI" ; }
179
181 virtual const char* eventLevelClusteringInfoName() const override
182 { return "EventLevelClusteringInfoPureCsI" ; }
183
184 };
185
187} // end Belle2 namespace
Class for accessing objects in the database.
Definition DBObjPtr.h:21
Class to store calibrated ECLDigits: ECLCalDigits.
Definition ECLCalDigit.h:23
General DB object to store one calibration number per ECL crystal.
double m_pureCsITimeCalib
conversion factor from eclPureCsIDigitizer to ns.
const double c_pol2Var2
2-order fit for p1.
virtual const char * eventLevelClusteringInfoName() const
Name of the EventLevelClusteringInfo.
StoreArray< ECLDsp > m_eclDsps
storearray ECLDsp
virtual const char * eclPureCsIInfoArrayName() const
Name of the ECL pure CsI Information.
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
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)
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
bool m_isMC
Flag to keep track if we run on MC or not.
double getT99(const int cellid, const double energy, const bool fitfailed, const int bgcount) const
t99%.
const double c_pol2Var1
2-order fit for p1 Var1 + Var2*bg + Var3*bg^2.
StoreArray< ECLDigit > m_eclDigits
storearray ECLDigit
virtual const char * eclDspArrayName() const
Name of the ECLDsp.
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
static 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.
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.
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
double m_pureCsIEnergyCalib
conversion factor from ADC counts to GeV.
const int c_nCrystals
Number of ECL crystals.
std::vector< float > v_calibrationCrystalTimeOffset
single crystal time calibration offset as vector
virtual const char * eclDigitArrayName() const
Name of the ECLDigit.
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
virtual const char * eclCalDigitArrayName() const
Name of the ECLCalDigit.
double m_backgroundEnergyCut
Energy cut for background level counting.
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 * eventLevelClusteringInfoName() const override
PureCsI Name of the EventLevelClusteringInfoPureCsI.
virtual const char * eclDigitArrayName() const override
PureCsI Name of the ECLDigitsPureCsI.
virtual const char * eclDspArrayName() const override
Name of the ECLDspPureCsI.
Class to store ECL digitized hits (output of ECLDigi) relation to ECLHit filled in ecl/modules/eclDig...
Definition ECLDigit.h:25
Class to store ECL ShaperDSP waveform ADC data.
Definition ECLDsp.h:25
Class to store ECL crystal type relation to ECLDigit for the simulation pure CsI upgrade option fille...
ECL/KLM clustering event level information:
Module()
Constructor.
Definition Module.cc:30
Accessor to arrays stored in the data store.
Definition StoreArray.h:113
const int c_NCrystals
Number of crystals.
Abstract base class for different kinds of events.