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
25 
26 // Member variables
28 
29 // Service handles
32 #include "GaudiKernel/ServiceHandle.h"
33 
34 // the lower line should be uncommented to produce special text or root file
35 // with coordinates of all calibration hits
36 // later the ROOT macro (test/testHits.C) can be used to produce plots
37 //#define HITSINFO //added by Sergey
38 
39 #ifdef HITSINFO
40 #include "GaudiKernel/ToolHandle.h"
43 #define doHitsTXT false
44 #define doHitsNTup true
45 #define IDcalc 0 //1-6, 0-all
46 #endif
47 
50 class G4Step;
51 class G4HCofThisEvent;
52 class Identifier;
53 
54 class StoreGateSvc;
55 class CaloCell_ID;
56 class CaloDM_ID;
57 
58 #ifdef HITSINFO
59 class TileCalibHitNtuple;
61 #endif
62 
63 class ITileCalculator;
64 class TileGeoG4LookupBuilder;
67 
68 class TileGeoG4Section;
69 class TileGeoG4Cell;
71 class TileGeoG4PlateCell;
73 
74 struct TileHitData;
75 
76 class G4TouchableHistory;
77 class G4VPhysicalVolume;
78 
80 
81 #include <string>
82 #include <vector>
83 typedef std::vector<double> E_4;
84 
85 class TileGeoG4CalibSD: public G4VSensitiveDetector {
86 public:
87  TileGeoG4CalibSD(const G4String& name, const std::vector<std::string>& m_outputCollectionNames,
88  ITileCalculator* tileCalculator, const ServiceHandle<StoreGateSvc> &detStore);
90 
91  void InvokeUserRunAction();
92  void InvokeUserEventAction();
95 
96  //SD MAIN METHODS FOR A STEP PROCESSING
97  void Initialize(G4HCofThisEvent*) override final;
98  G4bool ProcessHits(G4Step*, G4TouchableHistory*) override final;
99  void EndOfEvent(G4HCofThisEvent*) override final;
100 
101  //METHOD FOR CLASSIFYING STEP ENERGY AND THE METHODS,
102  //WHICH CALCULATE IDENTIFIER FOR CELL OR DEAD MATERIAL
103  //CALIBRATION HITS ON THE CURRENT STEP
110  void DefaultHitIDCalculatorTB(int sample=0, int region=0, int eta=0, int phi=0);
111 
112  //GET RESULT FOR THE STEP HIT ID AND CLASSIFYED ENERGIES
115 
116  //DEBUG CELL AND DM CELL ID FIELDS
119 
120  //added by Sergey
121  void CellNumCorrectToHit(int, int);
122 #ifdef HITSINFO
123  void HitsInfoPrint (bool, int);
124 #endif
125 
126  //RESET ALL CLASS MEMBER ID FIELDS, NEW & DEFAULT HIT FLAGS,
127  //SECTION & SIDE FLAGS, DEPOSITED ENERGIES IN SCINTILLATOR/PMTs
128  // ! THESE METHODS ARE NEEDED AT THE BEGGINING OF EACH STEP !
129  void ResetCellIDFields();
130  void ResetDMCellIDFields();
131  void ResetSectSideFlags();
132 
133 protected:
134  Identifier DM_ID_Maker(int det, int type, int sample, int region, int tower, int module);
135 
136  //THIS METHOD IS USED BY IDENTIFIER CALCULATOR METHODS FOR FINDING TILE SECTION
137  //WHERE THE CURRENT STEP IS AND FOR DETERMINING SOME RELATED IDENTIFIER FIELD
138  //VALUES. ALSO, DETRMINES SOME FLAGS USED IN A FURTHER PROCESSING OF THE STEP
140  void SetEscapedEnergy(double escapedEnergy);
141  double GetVisibleEnergy();
142  double GetInvisibleEnergy();
143 
144  // Retrieve the hit collection for the current Athena event
146 
149 
150 private:
153 
154  std::string m_tileHits;
158 
159  // Handles for later use
162 
166 
167  //FLAGS FROM JOBOPTIONS
168  bool m_tileTB;
170 
171 #ifdef HITSINFO
172  ToolHandle<TileCalibHitNtuple> m_ntuple;
173  ToolHandle<TileCalibHitCntNtup> m_ntupleCnt;
174 #endif
175 
176  //ORDINARY AND CALIBRATION LOOKUP BUILDERS
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:23
CaloCalibrationHit.h
CaloG4::SimulationEnergies::kEm
@ kEm
Definition: SimulationEnergies.h:66
TileGeoG4CalibSD::InvokeUserTrackingAction
void InvokeUserTrackingAction()
Definition: TileGeoG4CalibSD.h:284
TileGeoG4CalibSD::m_caloDM_ID
const CaloDM_ID * m_caloDM_ID
Definition: TileGeoG4CalibSD.h:161
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:67
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
TRTCalib_Extractor.det
det
Definition: TRTCalib_Extractor.py:36
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:83
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:163
TileGeoG4CalibSD::m_geoModSvc
ServiceHandle< IGeoModelSvc > m_geoModSvc
Definition: TileGeoG4CalibSD.h:164
TileGeoG4CalibSD::m_deadCalibrationHits
m_calibrationHits_t m_deadCalibrationHits
Definition: TileGeoG4CalibSD.h:274
TileGeoG4CalibSD::m_doCalibHitParticleID
bool m_doCalibHitParticleID
Definition: TileGeoG4CalibSD.h:169
TileHitData
Variables to identify Hit objects.
Definition: ITileCalculator.h:45
TileGeoG4CalibSD::m_tileActiveCellCalibHits
std::string m_tileActiveCellCalibHits
Definition: TileGeoG4CalibSD.h:155
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
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_tileDeadMaterialCalibHits
std::string m_tileDeadMaterialCalibHits
Definition: TileGeoG4CalibSD.h:157
TileGeoG4CalibSD::PlateCellIDCalculator
void PlateCellIDCalculator()
TileGeoG4CalibSD::m_tileTB
bool m_tileTB
Definition: TileGeoG4CalibSD.h:168
TileGeoG4CalibSD::m_detStoreSvc
ServiceHandle< StoreGateSvc > m_detStoreSvc
Definition: TileGeoG4CalibSD.h:165
TileGeoG4CalibSD::GetVisibleEnergy
double GetVisibleEnergy()
Definition: TileGeoG4CalibSD.h:320
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:160
python.PyAthena.module
module
Definition: PyAthena.py:131
TileGeoG4GirderCell
Definition: TileGeoG4DMLookup.h:50
TileGeoG4CalibSD::m_gCell
TileGeoG4GirderCell * m_gCell
Definition: TileGeoG4CalibSD.h:202
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:120
TileGeoG4CalibSD::m_subCalo
int m_subCalo
Definition: TileGeoG4CalibSD.h:214
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:209
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
TileGeoG4CalibSD::EndOfEvent
void EndOfEvent(G4HCofThisEvent *) override final
FullCPAlgorithmsTest_eljob.sample
sample
Definition: FullCPAlgorithmsTest_eljob.py:116
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
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()
TileHitVectorDMBuilder
See TileGeoG4SD/TileHitVectorBuilder documentation.
Definition: TileHitVectorDMBuilder.h:20
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:32
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::GetHitCollection
TileHitVectorDMBuilder * GetHitCollection()
TileGeoG4CalibSD::ResetSectSideFlags
void ResetSectSideFlags()
Definition: TileGeoG4CalibSD.h:301
TileGeoG4CalibSD::m_E_invisible
double m_E_invisible
Definition: TileGeoG4CalibSD.h:190
E_4
std::vector< double > E_4
Definition: TileGeoG4CalibSD.h:79
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:23
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:240
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::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:177
TileGeoG4CalibSD::m_tower
int m_tower
Definition: TileGeoG4CalibSD.h:218
TileGeoG4CalibSD::m_aStep
G4Step * m_aStep
Definition: TileGeoG4CalibSD.h:184
TileCalibHitNtuple.h
TileGeoG4CalibSD::SetEscapedEnergy
void SetEscapedEnergy(double escapedEnergy)
Definition: TileGeoG4CalibSD.h:313
TileGeoG4CalibSD::m_simEn
CaloG4::SimulationEnergies * m_simEn
Definition: TileGeoG4CalibSD.h:180
TileGeoG4CalibSD::m_E_em
double m_E_em
Definition: TileGeoG4CalibSD.h:188
TileGeoG4CalibSD::m_tileHits
std::string m_tileHits
Definition: TileGeoG4CalibSD.h:154
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
TileGeoG4CalibSD
Definition: TileGeoG4CalibSD.h:85
TileGeoG4CalibSD::operator=
TileGeoG4CalibSD & operator=(const TileGeoG4CalibSD &)
TileGeoG4CalibSD::InvokeUserSteppingAction
void InvokeUserSteppingAction()
Definition: TileGeoG4CalibSD.h:285
extractSporadic.q
list q
Definition: extractSporadic.py:97
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::m_tileInactiveCellCalibHits
std::string m_tileInactiveCellCalibHits
Definition: TileGeoG4CalibSD.h:156
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::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 >
Identifier
Definition: IdentifierFieldParser.cxx:14