Belle II Software  release-05-02-19
ECLSplitterN1Module.h
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2016 - Belle II Collaboration *
4  * *
5  * Main reconstruction splitter code for the nPhoton hypothesis. *
6  * Based on a connected region (CR) we look for local maxima and *
7  * create one shower for each local maximum (LM). In case of multiple *
8  * LM in one CR the energy is shared between the showers based on *
9  * their exponentially weighted distance in an iterative procedure. If *
10  * a CR has no LM the highest energetic digit in the CR is taken as LM. *
11  * The position is reconstructed using logarithmic weights for not too *
12  * small shower and linear weights otherwise ('lilo'). *
13  * *
14  * Author: The Belle II Collaboration *
15  * Contributors: Torben Ferber (ferber@physics.ubc.ca) (TF) *
16  * *
17  * This software is provided "as is" without any warranty. *
18  **************************************************************************/
19 
20 #pragma once
21 
22 //STL
23 #include <vector>
24 
25 // FRAMEWORK
26 #include <framework/core/Module.h>
27 #include <framework/gearbox/Unit.h>
28 #include <framework/datastore/StoreArray.h>
29 #include <framework/datastore/StoreObjPtr.h>
30 
31 class TGraph2D;
32 class TFile;
33 class TH1F;
34 
35 namespace Belle2 {
40  class ECLCalDigit;
41  class ECLConnectedRegion;
42  class ECLShower;
43  class ECLLocalMaximum;
44  class EventLevelClusteringInfo;
45 
46  namespace ECL {
47  class ECLNeighbours;
48  class ECLGeometryPar;
49  }
50 
55  class ECLSplitterN1Module : public Module {
56 
57  public:
60 
63 
65  virtual void initialize() override;
66 
68  virtual void beginRun() override;
69 
71  virtual void event() override;
72 
74  virtual void endRun() override;
75 
77  virtual void terminate() override;
78 
79  private:
80  // Module parameters:
81 
82  // Splitter
83  double m_threshold;
84  double m_expConstant;
89  const double c_molierRadius = 3.581 *
97  std::string m_fileNOptimalFWDName;
99  std::string m_fileNOptimalBWDName;
100  TFile* m_fileBackgroundNorm{nullptr};
101  TFile* m_fileNOptimalFWD{nullptr};
102  TFile* m_fileNOptimalBarrel{nullptr};
103  TFile* m_fileNOptimalBWD{nullptr};
104  TH1F* m_th1fBackgroundNorm{nullptr};
105  TGraph2D* m_tg2dNOptimalFWD[13][9] {};
106  TGraph2D* m_tg2dNOptimalBWD[10][9] {};
107  TGraph2D* m_tg2dNOptimalBarrel{nullptr};
109  // Position
110  std::string m_positionMethod;
114  std::vector<double> m_liloParameters;
116  // Background
119  const unsigned short c_nSectorCellIdBWD[10] = {9, 9, 6, 6, 6, 6, 6, 4, 4, 4};
120  const unsigned short c_nSectorCellIdFWD[13] = {3, 3, 4, 4, 4, 6, 6, 6, 6, 6, 6, 9, 9};
122  // Crystals per Ring
123  const unsigned short c_crystalsPerRing[69] = {48, 48, 64, 64, 64, 96, 96, 96, 96, 96, 96, 144, 144, //FWD (13)
124  144, 144, 144, 144, 144, 144, 144, // BARREL 20
125  144, 144, 144, 144, 144, 144, 144, 144, 144, 144, //30
126  144, 144, 144, 144, 144, 144, 144, 144, 144, 144, //40
127  144, 144, 144, 144, 144, 144, 144, 144, 144, 144, //50
128  144, 144, 144, 144, 144, 144, 144, 144, 144,//59
129  144, 144, 96, 96, 96, 96, 96, 64, 64, 64
130  };
133  std::vector< int > m_StoreArrPosition;
134 
136  std::vector< int > m_StoreArrPositionLM;
137 
139  std::vector< int > m_cellIdInCR;
140 
147 
150 
153 
156 
159 
161  virtual const char* eclCalDigitArrayName() const
162  { return "ECLCalDigits" ; }
163 
165  virtual const char* eclConnectedRegionArrayName() const
166  { return "ECLConnectedRegions" ; }
167 
169  virtual const char* eclLocalMaximumArrayName() const
170  { return "ECLLocalMaximums" ; }
171 
173  virtual const char* eclShowerArrayName() const
174  { return "ECLShowers" ; }
175 
177  virtual const char* eventLevelClusteringInfoName() const
178  { return "EventLevelClusteringInfo" ; }
179 
182 
185 
187  int getNeighbourMap(const double energy, const double background);
188 
190  unsigned int getOptimalNumberOfDigits(const int cellid, const double energy, const double background);
191 
193  double getEnergySum(std::vector < std::pair<double, double> >& weighteddigits, const unsigned int n);
194 
196  double estimateEnergy(const int centerid);
197 
198  }; // end of ECLSplitterN1Module
199 
200 
203  public:
205  virtual const char* eclCalDigitArrayName() const override
206  { return "ECLCalDigitsPureCsI" ; }
207 
209  virtual const char* eclConnectedRegionArrayName() const override
210  { return "ECLConnectedRegionsPureCsI" ; }
211 
213  virtual const char* eclLocalMaximumArrayName() const override
214  { return "ECLLocalMaximumsPureCsI" ; }
215 
217  virtual const char* eclShowerArrayName() const override
218  { return "ECLShowersPureCsI" ; }
219 
221  virtual const char* eventLevelClusteringInfoName() const override
222  { return "EventLevelClusteringInfoPureCsI" ; }
223 
224  }; // end of ECLSplitterN1PureCsIModule
225 
227 } // end of Belle2 namespace
Belle2::ECLSplitterN1Module::m_fileBackgroundNorm
TFile * m_fileBackgroundNorm
Background normalization file.
Definition: ECLSplitterN1Module.h:100
Belle2::ECLSplitterN1Module::m_cellIdInCR
std::vector< int > m_cellIdInCR
list with all cellid of this connected region
Definition: ECLSplitterN1Module.h:139
Belle2::Unit::cm
static const double cm
Standard units with the value = 1.
Definition: Unit.h:57
Belle2::ECLSplitterN1Module::eclConnectedRegionArrayName
virtual const char * eclConnectedRegionArrayName() const
Default name ECLConnectedRegions.
Definition: ECLSplitterN1Module.h:165
Belle2::ECLSplitterN1Module::event
virtual void event() override
Event.
Definition: ECLSplitterN1Module.cc:189
Belle2::ECLSplitterN1Module
Class to perform the shower correction.
Definition: ECLSplitterN1Module.h:55
Belle2::ECLSplitterN1Module::m_maxIterations
int m_maxIterations
Maximum number of iterations.
Definition: ECLSplitterN1Module.h:85
Belle2::ECLSplitterN1Module::estimateEnergy
double estimateEnergy(const int centerid)
Estimate energy using 3x3 around central crystal.
Definition: ECLSplitterN1Module.cc:869
Belle2::ECLSplitterN1Module::m_fullBkgdCount
int m_fullBkgdCount
Number of expected background digits at full background, FIXME: move to database.
Definition: ECLSplitterN1Module.h:117
Belle2::ECLSplitterN1Module::ECLSplitterN1Module
ECLSplitterN1Module()
Constructor.
Definition: ECLSplitterN1Module.cc:64
Belle2::ECLSplitterN1Module::getEnergySum
double getEnergySum(std::vector< std::pair< double, double > > &weighteddigits, const unsigned int n)
Get energy sum for weighted entries.
Definition: ECLSplitterN1Module.cc:849
Belle2::ECLSplitterN1Module::m_shiftTolerance
double m_shiftTolerance
Tolerance level for centroid shifts.
Definition: ECLSplitterN1Module.h:86
Belle2::ECLSplitterN1Module::beginRun
virtual void beginRun() override
Begin run.
Definition: ECLSplitterN1Module.cc:184
Belle2::ECLSplitterN1Module::m_positionMethod
std::string m_positionMethod
Position calculation: lilo or linear.
Definition: ECLSplitterN1Module.h:110
Belle2::ECLSplitterN1Module::m_tg2dNOptimalFWD
TGraph2D * m_tg2dNOptimalFWD[13][9]
Array of 2D graphs used for interpolation between background and energy.
Definition: ECLSplitterN1Module.h:105
Belle2::ECLSplitterN1Module::m_NeighbourMap21
ECL::ECLNeighbours * m_NeighbourMap21
5x5 neighbours excluding corners = 21
Definition: ECLSplitterN1Module.h:143
Belle2::ECLSplitterN1Module::m_cutDigitEnergyForEnergy
double m_cutDigitEnergyForEnergy
Minimum digit energy to be included in the shower energy calculation.
Definition: ECLSplitterN1Module.h:92
Belle2::ECLSplitterN1Module::m_liloParameterA
double m_liloParameterA
lin-log parameter A
Definition: ECLSplitterN1Module.h:111
Belle2::ECLSplitterN1Module::m_fileNOptimalFWD
TFile * m_fileNOptimalFWD
FWD number of optimal neighbours.
Definition: ECLSplitterN1Module.h:101
Belle2::ECLSplitterN1Module::eclCalDigitArrayName
virtual const char * eclCalDigitArrayName() const
Default name ECLCalDigits.
Definition: ECLSplitterN1Module.h:161
Belle2::ECLSplitterN1Module::m_fileNOptimalBWDName
std::string m_fileNOptimalBWDName
BWD number of optimal neighbours filename.
Definition: ECLSplitterN1Module.h:99
Belle2::ECLSplitterN1Module::~ECLSplitterN1Module
~ECLSplitterN1Module()
Destructor.
Definition: ECLSplitterN1Module.cc:113
Belle2::ECLSplitterN1Module::eventLevelClusteringInfoName
virtual const char * eventLevelClusteringInfoName() const
Name to be used for default option: EventLevelClusteringInfo.
Definition: ECLSplitterN1Module.h:177
Belle2::ECLSplitterN1PureCsIModule::eclConnectedRegionArrayName
virtual const char * eclConnectedRegionArrayName() const override
PureCsI name ECLConnectedRegionsPureCsI.
Definition: ECLSplitterN1Module.h:209
Belle2::ECLSplitterN1Module::m_fileNOptimalBWD
TFile * m_fileNOptimalBWD
BWD number of optimal neighbours.
Definition: ECLSplitterN1Module.h:103
Belle2::ECLSplitterN1Module::c_nSectorCellIdFWD
const unsigned short c_nSectorCellIdFWD[13]
crystals per sector for theta rings
Definition: ECLSplitterN1Module.h:120
Belle2::ECLSplitterN1Module::m_eclLocalMaximums
StoreArray< ECLLocalMaximum > m_eclLocalMaximums
Store array: ECLLocalMaximum.
Definition: ECLSplitterN1Module.h:155
Belle2::ECLSplitterN1Module::m_useOptimalNumberOfDigitsForEnergy
int m_useOptimalNumberOfDigitsForEnergy
Optimize the number of neighbours for energy calculations.
Definition: ECLSplitterN1Module.h:94
Belle2::ECLSplitterN1Module::m_cutDigitTimeResidualForEnergy
double m_cutDigitTimeResidualForEnergy
Maximum time residual to be included in the shower energy calculation.
Definition: ECLSplitterN1Module.h:93
Belle2::ECLSplitterN1Module::m_eclCalDigits
StoreArray< ECLCalDigit > m_eclCalDigits
Store array: ECLCalDigit.
Definition: ECLSplitterN1Module.h:146
Belle2::ECLSplitterN1Module::m_fileNOptimalBarrelName
std::string m_fileNOptimalBarrelName
Barrel number of optimal neighbours filename.
Definition: ECLSplitterN1Module.h:98
Belle2::ECLSplitterN1Module::m_liloParameterC
double m_liloParameterC
lin-log parameter C
Definition: ECLSplitterN1Module.h:113
Belle2::ECLSplitterN1Module::c_molierRadius
const double c_molierRadius
Constant RM (Molier Radius) from exp(-a*dist/RM), http://pdg.lbl.gov/2009/AtomicNuclearProperties/HTM...
Definition: ECLSplitterN1Module.h:89
Belle2::ECLSplitterN1Module::c_crystalsPerRing
const unsigned short c_crystalsPerRing[69]
Number of crystals per theta ring.
Definition: ECLSplitterN1Module.h:123
Belle2::Module
Base class for Modules.
Definition: Module.h:74
Belle2::ECLSplitterN1Module::m_StoreArrPosition
std::vector< int > m_StoreArrPosition
vector (8736+1 entries) with cell id to store array positions
Definition: ECLSplitterN1Module.h:133
Belle2::ECL::ECLNeighbours
Class to get the neighbours for a given cell id.
Definition: ECLNeighbours.h:38
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::StoreObjPtr
Type-safe access to single objects in the data store.
Definition: ParticleList.h:33
Belle2::ECLSplitterN1Module::m_tg2dNOptimalBWD
TGraph2D * m_tg2dNOptimalBWD[10][9]
Array of 2D graphs used for interpolation between background and energy.
Definition: ECLSplitterN1Module.h:106
Belle2::ECLSplitterN1PureCsIModule::eclLocalMaximumArrayName
virtual const char * eclLocalMaximumArrayName() const override
PureCsI name ECLLocalMaximumsPureCsI.
Definition: ECLSplitterN1Module.h:213
Belle2::ECLSplitterN1Module::m_StoreArrPositionLM
std::vector< int > m_StoreArrPositionLM
vector (8736+1 entries) with cell id to store array positions for LM
Definition: ECLSplitterN1Module.h:136
Belle2::ECLSplitterN1Module::m_fileBackgroundNormName
std::string m_fileBackgroundNormName
Background normalization filename.
Definition: ECLSplitterN1Module.h:96
Belle2::ECLSplitterN1Module::m_th1fBackgroundNorm
TH1F * m_th1fBackgroundNorm
Background normalization histogram.
Definition: ECLSplitterN1Module.h:104
Belle2::ECLSplitterN1Module::m_fileNOptimalFWDName
std::string m_fileNOptimalFWDName
FWD number of optimal neighbours filename.
Definition: ECLSplitterN1Module.h:97
Belle2::ECLSplitterN1Module::endRun
virtual void endRun() override
End run.
Definition: ECLSplitterN1Module.cc:229
Belle2::ECLSplitterN1Module::eclShowerArrayName
virtual const char * eclShowerArrayName() const
Default name ECLShowers.
Definition: ECLSplitterN1Module.h:173
Belle2::ECLSplitterN1Module::m_eclShowers
StoreArray< ECLShower > m_eclShowers
Store array: ECLShower.
Definition: ECLSplitterN1Module.h:152
Belle2::ECLSplitterN1Module::getOptimalNumberOfDigits
unsigned int getOptimalNumberOfDigits(const int cellid, const double energy, const double background)
Get optimal number of digits (out of 21) based on first energy estimation and background level per ev...
Definition: ECLSplitterN1Module.cc:810
Belle2::ECLSplitterN1Module::m_NeighbourMap9
ECL::ECLNeighbours * m_NeighbourMap9
Neighbour maps.
Definition: ECLSplitterN1Module.h:142
Belle2::ECLSplitterN1Module::m_liloParameterB
double m_liloParameterB
lin-log parameter B
Definition: ECLSplitterN1Module.h:112
Belle2::ECLSplitterN1Module::m_liloParameters
std::vector< double > m_liloParameters
lin-log parameters A, B, and C
Definition: ECLSplitterN1Module.h:114
Belle2::ECLSplitterN1Module::m_minimumSharedEnergy
double m_minimumSharedEnergy
Minimum shared energy.
Definition: ECLSplitterN1Module.h:87
Belle2::ECLSplitterN1PureCsIModule
The very same module but for PureCsI.
Definition: ECLSplitterN1Module.h:202
Belle2::ECLSplitterN1Module::m_eventLevelClusteringInfo
StoreObjPtr< EventLevelClusteringInfo > m_eventLevelClusteringInfo
Store object pointer: EventLevelClusteringInfo.
Definition: ECLSplitterN1Module.h:158
Belle2::ECLSplitterN1Module::c_nSectorCellIdBWD
const unsigned short c_nSectorCellIdBWD[10]
crystals per sector for theta rings
Definition: ECLSplitterN1Module.h:119
Belle2::ECLSplitterN1Module::getNeighbourMap
int getNeighbourMap(const double energy, const double background)
Get number of neighbours based on first energy estimation and background level per event.
Definition: ECLSplitterN1Module.cc:801
Belle2::ECLSplitterN1Module::m_expConstant
double m_expConstant
Constant a from exp(-a*dist/RM), 1.5 to 2.5.
Definition: ECLSplitterN1Module.h:84
Belle2::ECLSplitterN1Module::m_threshold
double m_threshold
Local maximum threshold after splitting.
Definition: ECLSplitterN1Module.h:83
Belle2::ECLSplitterN1PureCsIModule::eclCalDigitArrayName
virtual const char * eclCalDigitArrayName() const override
PureCsI name ECLCalDigitsPureCsI.
Definition: ECLSplitterN1Module.h:205
Belle2::ECL::ECLGeometryPar
The Class for ECL Geometry Parameters.
Definition: ECLGeometryPar.h:45
Belle2::ECLSplitterN1Module::splitConnectedRegion
void splitConnectedRegion(ECLConnectedRegion &aCR)
Split connected region into showers.
Definition: ECLSplitterN1Module.cc:247
Belle2::ECLSplitterN1PureCsIModule::eclShowerArrayName
virtual const char * eclShowerArrayName() const override
PureCsI name ECLShowersPureCsI.
Definition: ECLSplitterN1Module.h:217
Belle2::ECLSplitterN1Module::eclLocalMaximumArrayName
virtual const char * eclLocalMaximumArrayName() const
Default name ECLLocalMaximums.
Definition: ECLSplitterN1Module.h:169
Belle2::StoreArray
Accessor to arrays stored in the data store.
Definition: ECLMatchingPerformanceExpertModule.h:33
Belle2::ECLConnectedRegion
Class to store connected regions (CRs)
Definition: ECLConnectedRegion.h:31
Belle2::ECLSplitterN1Module::m_eclConnectedRegions
StoreArray< ECLConnectedRegion > m_eclConnectedRegions
Store array: ECLConnectedRegion.
Definition: ECLSplitterN1Module.h:149
Belle2::ECLSplitterN1Module::m_maxSplits
int m_maxSplits
Maximum number of splits.
Definition: ECLSplitterN1Module.h:88
Belle2::ECLSplitterN1Module::m_fileNOptimalBarrel
TFile * m_fileNOptimalBarrel
Barrel number of optimal neighbours.
Definition: ECLSplitterN1Module.h:102
Belle2::ECLSplitterN1Module::initialize
virtual void initialize() override
Initialize.
Definition: ECLSplitterN1Module.cc:118
Belle2::ECLSplitterN1Module::terminate
virtual void terminate() override
Terminate.
Definition: ECLSplitterN1Module.cc:235
Belle2::ECLSplitterN1Module::m_tg2dNOptimalBarrel
TGraph2D * m_tg2dNOptimalBarrel
Array of 2D graphs used for interpolation between background and energy.
Definition: ECLSplitterN1Module.h:107
Belle2::ECLSplitterN1Module::m_geom
ECL::ECLGeometryPar * m_geom
Geometry.
Definition: ECLSplitterN1Module.h:181
Belle2::ECLSplitterN1PureCsIModule::eventLevelClusteringInfoName
virtual const char * eventLevelClusteringInfoName() const override
Name to be used for PureCsI option: EventLevelClusteringInfoPureCsI.
Definition: ECLSplitterN1Module.h:221