ATLAS Offline Software
TileGeoG4CalibSD.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 //************************************************************
6 //
7 // Class TileGeoG4CalibSD.
8 // Calibration Sensitive Detector for TileCal simulation
9 //
10 // Author: Gia Khoriauli <gia@mail.cern.ch>
11 // May, 2005
12 //
13 // Major updates: December, 2005;
14 // July, 2013 (Sergey);
15 //
16 //************************************************************
17 
18 #ifndef TILEGEOG4CALIB_TILEGEOG4CALIBSD_H
19 #define TILEGEOG4CALIB_TILEGEOG4CALIBSD_H
20 
21 #include "G4VSensitiveDetector.hh"
22 
23 // Output collections
24 #include "StoreGate/WriteHandle.h"
27 
28 // Member variables
30 
31 // Service handles
34 #include "GaudiKernel/ServiceHandle.h"
35 
36 // the lower line should be uncommented to produce special text or root file
37 // with coordinates of all calibration hits
38 // later the ROOT macro (test/testHits.C) can be used to produce plots
39 //#define HITSINFO //added by Sergey
40 
41 #ifdef HITSINFO
42 #include "GaudiKernel/ToolHandle.h"
45 #define doHitsTXT false
46 #define doHitsNTup true
47 #define IDcalc 0 //1-6, 0-all
48 #endif
49 
52 class G4Step;
53 class G4HCofThisEvent;
54 class Identifier;
55 
56 class StoreGateSvc;
57 class CaloCell_ID;
58 class CaloDM_ID;
59 
60 #ifdef HITSINFO
61 class TileCalibHitNtuple;
63 #endif
64 
65 class ITileCalculator;
66 class TileGeoG4LookupBuilder;
68 
69 class TileGeoG4Section;
70 class TileGeoG4Cell;
72 class TileGeoG4PlateCell;
74 
75 struct TileHitData;
76 
77 class G4TouchableHistory;
78 class G4VPhysicalVolume;
79 
81 
82 #include <string>
83 #include <vector>
84 typedef std::vector<double> E_4;
85 
86 class TileGeoG4CalibSD: public G4VSensitiveDetector {
87 public:
88  TileGeoG4CalibSD(const G4String& name, const std::vector<std::string>& m_outputCollectionNames,
89  ITileCalculator* tileCalculator, const ServiceHandle<StoreGateSvc> &detStore);
91 
92  void InvokeUserRunAction();
93  void InvokeUserEventAction();
96 
97  //SD MAIN METHODS FOR A STEP PROCESSING
98  void Initialize(G4HCofThisEvent*) override final;
99  G4bool ProcessHits(G4Step*, G4TouchableHistory*) override final;
101 
102  //METHOD FOR CLASSIFYING STEP ENERGY AND THE METHODS,
103  //WHICH CALCULATE IDENTIFIER FOR CELL OR DEAD MATERIAL
104  //CALIBRATION HITS ON THE CURRENT STEP
111  void DefaultHitIDCalculatorTB(int sample=0, int region=0, int eta=0, int phi=0);
112 
113  //GET RESULT FOR THE STEP HIT ID AND CLASSIFYED ENERGIES
116 
117  //DEBUG CELL AND DM CELL ID FIELDS
120 
121  //added by Sergey
122  void CellNumCorrectToHit(int, int);
123 #ifdef HITSINFO
124  void HitsInfoPrint (bool, int);
125 #endif
126 
127  //RESET ALL CLASS MEMBER ID FIELDS, NEW & DEFAULT HIT FLAGS,
128  //SECTION & SIDE FLAGS, DEPOSITED ENERGIES IN SCINTILLATOR/PMTs
129  // ! THESE METHODS ARE NEEDED AT THE BEGGINING OF EACH STEP !
130  void ResetCellIDFields();
131  void ResetDMCellIDFields();
132  void ResetSectSideFlags();
133 
134 protected:
135  Identifier DM_ID_Maker(int det, int type, int sample, int region, int tower, int module);
136 
137  //THIS METHOD IS USED BY IDENTIFIER CALCULATOR METHODS FOR FINDING TILE SECTION
138  //WHERE THE CURRENT STEP IS AND FOR DETERMINING SOME RELATED IDENTIFIER FIELD
139  //VALUES. ALSO, DETRMINES SOME FLAGS USED IN A FURTHER PROCESSING OF THE STEP
141  void SetEscapedEnergy(double escapedEnergy);
142  double GetVisibleEnergy();
143  double GetInvisibleEnergy();
144 
147 
148 private:
151 
152  //CALIBRATION HIT CONTAINERS
157 
158  // Handles for later use
161 
164 
165  //FLAGS FROM JOBOPTIONS
166  bool m_tileTB;
168 
169 #ifdef HITSINFO
170  ToolHandle<TileCalibHitNtuple> m_ntuple;
171  ToolHandle<TileCalibHitCntNtup> m_ntupleCnt;
172 #endif
173 
174  //ORDINARY AND CALIBRATION LOOKUP BUILDERS
176  TileGeoG4LookupBuilder* m_lookup;
178 
179  //CALIBRATION ENERGY CLASSIFYER
182 
183  //ENERGY AND POSITION AT CURRENT STEP
184  G4Step* m_aStep;
185 
186  //FOR SIMPLE ENERGY DEBUGGING
187  double m_E_tot;
188  double m_E_em;
189  double m_E_nonem;
191  double m_E_escaped;
192 
193  //STEP TOUCHABLE HISTORY AND VOLUME
194  const G4TouchableHistory* m_stepTouchable;
195  G4VPhysicalVolume* m_stepPhysVol;
196  G4String m_nameVol;
197 
198  //CALIBRATION SECTION & CELLS
200  TileGeoG4Cell* m_cell;
203 
204  //CLASSIFIED ENERGY VECTOR
206 
207  //IDENTIFIER FOR CALIBRATION HIT
209 
210  //CELL ACTIVE || CELL INACTIVE || DM
212 
213  //REAL CELL ID VALUES
216  int m_side;
217  int m_module;
218  int m_tower;
219  int m_sample;
220 
221  //DM CELL ID VALUES
228 
229  //GLOBAL HIT POSITION -- added by Sergey
230  double m_xGlobal;
231  double m_yGlobal;
232  double m_zGlobal;
233  double m_phiGlobal;
235 #ifdef HITSINFO
236  int m_nEvent;
237  int m_det_side;
238 #endif
239 
240  //FLAG FOR DEFAULT HIT
242 
245 
248 
251 
255 
259 
262 
263  class LessHit {
264  public:
265  bool operator()(CaloCalibrationHit* const & p, CaloCalibrationHit* const & q) const {
266  return p->Less(q);
267  }
268  };
269 
270  typedef std::set<CaloCalibrationHit*, LessHit> m_calibrationHits_t;
275 
276 };
277 //CLASS TileGeoG4CalibSD
278 
280 //inline methods//
286 
288  return m_id;
289 }
290 
292  return m_result;
293 }
294 
296  m_detector = m_side = m_module = m_tower = m_sample = -999;
297 }
300 }
302  m_isExtended = m_isNegative = false;
303 }
304 
306  //check any kind of classified energies. if they all are zero
307  //then nothing to do and go to the next Step
311 }
312 
313 inline void TileGeoG4CalibSD::SetEscapedEnergy(double escapedEnergy) {
318 }
319 
321 {
325 }
326 
328 {
330 }
331 
332 #endif // TILEGEOG4CALIB_TILEGEOG4CALIBSD_H
333 
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
TileCalibHitNtuple
This class creates ntuple with calibration hits info.
Definition: TileCalibHitNtuple.h:39
TileGeoG4CalibSD::Initialize
void Initialize(G4HCofThisEvent *) override final
CaloCalibrationHitContainer
Definition: CaloCalibrationHitContainer.h:25
TileGeoG4CalibSD::DM_ID_Maker
Identifier DM_ID_Maker(int det, int type, int sample, int region, int tower, int module)
TileGeoG4CalibSD::DefaultHitIDCalculator
void DefaultHitIDCalculator()
TileGeoG4CalibSD::m_stepTouchable
const G4TouchableHistory * m_stepTouchable
Definition: TileGeoG4CalibSD.h:194
TileGeoG4CalibSD::LessHit
Definition: TileGeoG4CalibSD.h:263
TileGeoG4CalibSD::LessHit::operator()
bool operator()(CaloCalibrationHit *const &p, CaloCalibrationHit *const &q) const
Definition: TileGeoG4CalibSD.h:265
AtlasG4EventUserInfo
This class is attached to G4Event objects as UserInformation. It holds a pointer to the HepMC::GenEve...
Definition: AtlasG4EventUserInfo.h:21
CaloCalibrationHit.h
CaloG4::SimulationEnergies::kEm
@ kEm
Definition: SimulationEnergies.h:66
TileGeoG4CalibSD::InvokeUserTrackingAction
void InvokeUserTrackingAction()
Definition: TileGeoG4CalibSD.h:284
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
TileGeoG4CalibSD::m_caloDM_ID
const CaloDM_ID * m_caloDM_ID
Definition: TileGeoG4CalibSD.h:160
TileGeoG4CalibSD::m_isNegative
bool m_isNegative
set to true if hit is in negative side
Definition: TileGeoG4CalibSD.h:247
TileCalibHitCntNtup.h
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
TileGeoG4CalibSD::DefaultHitIDCalculatorTB
void DefaultHitIDCalculatorTB(int sample=0, int region=0, int eta=0, int phi=0)
TileGeoG4CalibSD::m_dm_nphi
int m_dm_nphi
Definition: TileGeoG4CalibSD.h:227
TileGeoG4CalibSD::m_E_escaped
double m_E_escaped
Definition: TileGeoG4CalibSD.h:191
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:79
TileGeoG4CalibSD::m_dm_neta
int m_dm_neta
Definition: TileGeoG4CalibSD.h:226
TileGeoG4CalibSD::DebugEnergies
void DebugEnergies()
TileGeoG4CalibSD::CellNumCorrectToHit
void CellNumCorrectToHit(int, int)
CaloG4::SimulationEnergies
Definition: SimulationEnergies.h:47
ITileCalculator
Definition: ITileCalculator.h:67
TileGeoG4CalibSD::EnergiesSimpleCounter
void EnergiesSimpleCounter()
TileGeoG4CalibSD::m_rdbSvc
ServiceHandle< IRDBAccessSvc > m_rdbSvc
Definition: TileGeoG4CalibSD.h:162
TileGeoG4CalibSD::m_geoModSvc
ServiceHandle< IGeoModelSvc > m_geoModSvc
Definition: TileGeoG4CalibSD.h:163
TileGeoG4CalibSD::m_deadCalibrationHits
m_calibrationHits_t m_deadCalibrationHits
Definition: TileGeoG4CalibSD.h:274
TileGeoG4CalibSD::m_doCalibHitParticleID
bool m_doCalibHitParticleID
Definition: TileGeoG4CalibSD.h:167
TileHitData
Variables to identify Hit objects.
Definition: ITileCalculator.h:45
TileGeoG4CalibSD::m_addToCell
bool m_addToCell
set to true if DM hit in front plate is added to a real cell (currently equal to _plateToCell)
Definition: TileGeoG4CalibSD.h:254
TileGeoG4CalibSD::GirderCellIDCalculator
void GirderCellIDCalculator()
TileGeoG4CalibSD::m_lookupDM
TileGeoG4DMLookupBuilder * m_lookupDM
Definition: TileGeoG4CalibSD.h:177
TileGeoG4CalibSD::PlateCellIDCalculator
void PlateCellIDCalculator()
TileGeoG4CalibSD::m_tileTB
bool m_tileTB
Definition: TileGeoG4CalibSD.h:166
TileGeoG4CalibSD::GetVisibleEnergy
double GetVisibleEnergy()
Definition: TileGeoG4CalibSD.h:320
TileGeoG4CalibSD::m_tileDeadMaterialCalibHits
SG::WriteHandle< CaloCalibrationHitContainer > m_tileDeadMaterialCalibHits
Definition: TileGeoG4CalibSD.h:155
TileGeoG4CalibSD::InvokeUserRunAction
void InvokeUserRunAction()
Definition: TileGeoG4CalibSD.h:282
TileGeoG4CalibSD::m_calibrationHits_t
std::set< CaloCalibrationHit *, LessHit > m_calibrationHits_t
Definition: TileGeoG4CalibSD.h:270
TileGeoG4CalibSD::m_caloCell_ID
const CaloCell_ID * m_caloCell_ID
Definition: TileGeoG4CalibSD.h:159
python.PyAthena.module
module
Definition: PyAthena.py:134
TileGeoG4GirderCell
Definition: TileGeoG4DMLookup.h:50
TileGeoG4CalibSD::m_gCell
TileGeoG4GirderCell * m_gCell
Definition: TileGeoG4CalibSD.h:202
WriteHandle.h
Handle class for recording to StoreGate.
TileGeoG4CalibSD::CellIDCalculator
void CellIDCalculator()
TileGeoG4CalibSD::m_E_nonem
double m_E_nonem
Definition: TileGeoG4CalibSD.h:189
TileGeoG4CalibSD::m_dm_sample
int m_dm_sample
Definition: TileGeoG4CalibSD.h:224
StoreGateSvc
The Athena Transient Store API.
Definition: StoreGateSvc.h:128
TileGeoG4CalibSD::m_subCalo
int m_subCalo
Definition: TileGeoG4CalibSD.h:214
CaloG4::SimulationEnergies::kNonEm
@ kNonEm
Definition: SimulationEnergies.h:67
IRDBAccessSvc.h
Definition of the abstract IRDBAccessSvc interface.
CaloG4::SimulationEnergies::kInvisible0
@ kInvisible0
Definition: SimulationEnergies.h:68
TileGeoG4CalibSD::m_addToGirder
bool m_addToGirder
set to true if DM hit in absorber at outer radius is added to girder (currently inverse of _plateToCe...
Definition: TileGeoG4CalibSD.h:258
TileGeoG4CalibSD::GetEnergiesOnStep
CaloG4::SimulationEnergies::ClassifyResult_t GetEnergiesOnStep()
Definition: TileGeoG4CalibSD.h:291
FullCPAlgorithmsTest_eljob.sample
sample
Definition: FullCPAlgorithmsTest_eljob.py:100
TileGeoG4CalibSD::DebugDMCellIDFields
void DebugDMCellIDFields(int)
TileGeoG4CalibSD::m_yGlobal
double m_yGlobal
Definition: TileGeoG4CalibSD.h:231
TileGeoG4CalibSD::m_xGlobal
double m_xGlobal
Definition: TileGeoG4CalibSD.h:230
TileGeoG4CalibSD::m_phiGlobal
double m_phiGlobal
Definition: TileGeoG4CalibSD.h:233
TileGeoG4CalibSD::m_E_tot
double m_E_tot
Definition: TileGeoG4CalibSD.h:187
TileGeoG4CalibSD::m_cellNum
int m_cellNum
Definition: TileGeoG4CalibSD.h:234
TileGeoG4CalibSD::m_cell
TileGeoG4Cell * m_cell
Definition: TileGeoG4CalibSD.h:200
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
TileGeoG4CalibSD::m_atlasG4EvtUserInfo
AtlasG4EventUserInfo * m_atlasG4EvtUserInfo
variable used for producing calibration hits signed with primary particle ID
Definition: TileGeoG4CalibSD.h:261
CaloG4::SimulationEnergies::kEscaped
@ kEscaped
Definition: SimulationEnergies.h:74
TileGeoG4CalibSD::FindTileCalibSection
bool FindTileCalibSection()
WritePulseShapeToCool.det
det
Definition: WritePulseShapeToCool.py:204
TileEscapedEnergyProcessing
Definition: TileEscapedEnergyProcessing.h:43
TileGeoG4CalibSD::m_dm_subDet
int m_dm_subDet
Definition: TileGeoG4CalibSD.h:222
TileGeoG4CalibSD::m_tile_eep
TileEscapedEnergyProcessing * m_tile_eep
Definition: TileGeoG4CalibSD.h:181
TileGeoG4DMLookupBuilder
Definition: TileGeoG4DMLookupBuilder.h:33
TileGeoG4CalibSD::m_cSection
TileGeoG4CalibSection * m_cSection
Definition: TileGeoG4CalibSD.h:199
TileGeoG4CalibSD::m_sample
int m_sample
Definition: TileGeoG4CalibSD.h:219
CaloCell_ID
Helper class for offline cell identifiers.
Definition: CaloCell_ID.h:34
TileGeoG4CalibSD::ResetSectSideFlags
void ResetSectSideFlags()
Definition: TileGeoG4CalibSD.h:301
TileGeoG4CalibSD::m_tileHits
SG::WriteHandle< TileHitVector > m_tileHits
Definition: TileGeoG4CalibSD.h:156
TileGeoG4CalibSD::m_E_invisible
double m_E_invisible
Definition: TileGeoG4CalibSD.h:190
E_4
std::vector< double > E_4
Definition: TileGeoG4CalibSD.h:80
python.PyKernel.detStore
detStore
Definition: PyKernel.py:41
TileGeoG4CalibSD::m_nameVol
G4String m_nameVol
Definition: TileGeoG4CalibSD.h:196
CaloCalibrationHit
Class to store calorimeter calibration hit.
Definition: CaloCalibrationHit.h:21
TileHitVector.h
TileGeoG4CalibSection
Definition: TileGeoG4DMLookup.h:71
TileGeoG4CalibSD::m_calibHitType
int m_calibHitType
Definition: TileGeoG4CalibSD.h:211
TileGeoG4CalibSD::m_calibrationHits_ptr_t
m_calibrationHits_t::iterator m_calibrationHits_ptr_t
Definition: TileGeoG4CalibSD.h:271
TileGeoG4CalibSD::ProcessHits
G4bool ProcessHits(G4Step *, G4TouchableHistory *) override final
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
TileGeoG4CalibSD::m_plateToCell
bool m_plateToCell
set to true if DM hit in end/front plate is added to a real cell (taken from DB or from JO)
Definition: TileGeoG4CalibSD.h:250
TileGeoG4CalibSD::~TileGeoG4CalibSD
~TileGeoG4CalibSD()
TileGeoG4CalibSD::GetInvisibleEnergy
double GetInvisibleEnergy()
Definition: TileGeoG4CalibSD.h:327
TileGeoG4CalibSD::m_pCell
TileGeoG4PlateCell * m_pCell
Definition: TileGeoG4CalibSD.h:201
CaloG4::SimulationEnergies::ClassifyResult_t
This defines the results returned by the energy classification; these detailed results are mostly use...
Definition: SimulationEnergies.h:81
TileGeoG4CalibSD::m_inactiveCalibrationHits
m_calibrationHits_t m_inactiveCalibrationHits
Definition: TileGeoG4CalibSD.h:273
CaloG4::SimulationEnergies::ClassifyResult_t::energy
std::map< eEnergyCategory, G4double > energy
Definition: SimulationEnergies.h:82
TileGeoG4CalibSD::m_defaultHit
bool m_defaultHit
Definition: TileGeoG4CalibSD.h:241
TileGeoG4CalibSD::m_tileInactiveCellCalibHits
SG::WriteHandle< CaloCalibrationHitContainer > m_tileInactiveCellCalibHits
Definition: TileGeoG4CalibSD.h:154
TileGeoG4CalibSD::TileGeoG4CalibSD
TileGeoG4CalibSD(const G4String &name, const std::vector< std::string > &m_outputCollectionNames, ITileCalculator *tileCalculator, const ServiceHandle< StoreGateSvc > &detStore)
TileGeoG4CalibSD::m_id
Identifier m_id
Definition: TileGeoG4CalibSD.h:208
TileGeoG4CalibSD::m_dm_region
int m_dm_region
Definition: TileGeoG4CalibSD.h:225
TileGeoG4CalibSD::m_side
int m_side
Definition: TileGeoG4CalibSD.h:216
TileGeoG4CalibSD::m_calc
ITileCalculator * m_calc
Definition: TileGeoG4CalibSD.h:175
TileGeoG4CalibSD::m_tower
int m_tower
Definition: TileGeoG4CalibSD.h:218
TileGeoG4CalibSD::m_aStep
G4Step * m_aStep
Definition: TileGeoG4CalibSD.h:184
TileCalibHitNtuple.h
SG::WriteHandle< CaloCalibrationHitContainer >
TileGeoG4CalibSD::SetEscapedEnergy
void SetEscapedEnergy(double escapedEnergy)
Definition: TileGeoG4CalibSD.h:313
TileGeoG4CalibSD::m_tileActiveCellCalibHits
SG::WriteHandle< CaloCalibrationHitContainer > m_tileActiveCellCalibHits
Definition: TileGeoG4CalibSD.h:153
TileGeoG4CalibSD::m_simEn
CaloG4::SimulationEnergies * m_simEn
Definition: TileGeoG4CalibSD.h:180
TileGeoG4CalibSD::EndOfAthenaEvent
void EndOfAthenaEvent()
TileGeoG4CalibSD::m_E_em
double m_E_em
Definition: TileGeoG4CalibSD.h:188
TileGeoG4CalibSD::m_module
int m_module
Definition: TileGeoG4CalibSD.h:217
TileGeoG4CalibSD::ScintIDCalculator
void ScintIDCalculator(TileHitData &hitData)
CaloDM_ID
Helper class for Calo Dead Material offline identifiers.
Definition: CaloDM_ID.h:102
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
TileGeoG4CalibSD
Definition: TileGeoG4CalibSD.h:86
TileGeoG4CalibSD::operator=
TileGeoG4CalibSD & operator=(const TileGeoG4CalibSD &)
TileGeoG4CalibSD::InvokeUserSteppingAction
void InvokeUserSteppingAction()
Definition: TileGeoG4CalibSD.h:285
extractSporadic.q
list q
Definition: extractSporadic.py:98
TileGeoG4CalibSD::GetCellIDOnStep
Identifier GetCellIDOnStep()
Definition: TileGeoG4CalibSD.h:287
TileGeoG4CalibSD::m_isExtended
bool m_isExtended
set to true if hit is in extended barrel
Definition: TileGeoG4CalibSD.h:244
TileGeoG4CalibSD::TileGeoG4CalibSD
TileGeoG4CalibSD(const TileGeoG4CalibSD &)
TileGeoG4CalibSD::ResetCellIDFields
void ResetCellIDFields()
Definition: TileGeoG4CalibSD.h:295
TileGeoG4PlateCell
Definition: TileGeoG4DMLookup.h:32
TileGeoG4CalibSD::m_detector
int m_detector
Definition: TileGeoG4CalibSD.h:215
TileGeoG4CalibSD::m_result
CaloG4::SimulationEnergies::ClassifyResult_t m_result
Definition: TileGeoG4CalibSD.h:205
TileGeoG4CalibSD::m_zGlobal
double m_zGlobal
Definition: TileGeoG4CalibSD.h:232
SimulationEnergies.h
TileGeoG4CalibSD::m_activeCalibrationHits
m_calibrationHits_t m_activeCalibrationHits
Definition: TileGeoG4CalibSD.h:272
TileGeoG4CalibSD::InvokeUserEventAction
void InvokeUserEventAction()
Definition: TileGeoG4CalibSD.h:283
IGeoModelSvc.h
TileGeoG4CalibSD::DebugCellIDFields
void DebugCellIDFields()
TileGeoG4CalibSD::ResetDMCellIDFields
void ResetDMCellIDFields()
Definition: TileGeoG4CalibSD.h:298
TileGeoG4CalibSD::m_dm_type
int m_dm_type
Definition: TileGeoG4CalibSD.h:223
TileGeoG4CalibSD::m_lookup
TileGeoG4LookupBuilder * m_lookup
Definition: TileGeoG4CalibSD.h:176
TileGeoG4CalibSD::AreClassifiedEnergiesAllZero
bool AreClassifiedEnergiesAllZero()
Definition: TileGeoG4CalibSD.h:305
TileCalibHitCntNtup
This class creates ntuple with calibration hits container info.
Definition: TileCalibHitCntNtup.h:47
TileGeoG4CalibSD::m_stepPhysVol
G4VPhysicalVolume * m_stepPhysVol
Definition: TileGeoG4CalibSD.h:195
ServiceHandle< StoreGateSvc >