ATLAS Offline Software
Loading...
Searching...
No Matches
ZDCHitAnalysis.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
5#include "ZDCHitAnalysis.h"
6
7
11
13 ATH_MSG_DEBUG( "Initializing ZDCHitAnalysis" );
14
15 ATH_CHECK(detStore()->retrieve(m_ZdcID));
16 ATH_CHECK(m_readKey.initialize());
17 ATH_CHECK(m_readCalibKey.initialize());
18
19 for(int side : {0,1}){
20 for(int module = 0; module < 5; module++){
21 std::string name = Form("%s%d", (side==1) ? "a" : "c", module);
22 m_h_zdc_photons[side][module] = new TH1I( ("m_edep_module_" + name).c_str(), ("edep_module_" + name).c_str(), 100, 0, 20000);
23 ATH_CHECK(histSvc()->regHist(m_path + m_h_zdc_photons[side][module]->GetName(), m_h_zdc_photons[side][module]));
24 }
25 }
26
27 for(int side : {0,1}){
28 for(int module = 0; module < 5; module++){
29 std::string name = Form("%s%d", (side==1) ? "a" : "c", module);
30 m_h_zdc_calibTot[side][module] = new TH1D( ("m_calibTot_module_" + name).c_str(), ("calibTot_module_" + name).c_str(), 100, 1e-2, 1e7);
31 m_h_zdc_calibEM[side][module] = new TH1D( ("m_calibEM_module_" + name).c_str(), ("calibEM_module_" + name).c_str(), 100, 1e-2, 1e7);
32 m_h_zdc_calibNonEM[side][module] = new TH1D( ("m_calibNonEM_module_" + name).c_str(), ("calibNonEM_module_" + name).c_str(), 100, 1e-2, 1e7);
33
34 ATH_CHECK(histSvc()->regHist(m_path + m_h_zdc_calibTot[side][module]->GetName(), m_h_zdc_calibTot[side][module]));
35 ATH_CHECK(histSvc()->regHist(m_path + m_h_zdc_calibEM[side][module]->GetName(), m_h_zdc_calibEM[side][module]));
36 ATH_CHECK(histSvc()->regHist(m_path + m_h_zdc_calibNonEM[side][module]->GetName(), m_h_zdc_calibNonEM[side][module]));
37 }
38 }
39
41 m_tree = new TTree("ZDC","ZDC");
42 std::string fullNtupleName = "/" + m_ntupleFileName + "/";
43 ATH_CHECK(histSvc()->regTree(fullNtupleName,m_tree));
44
45 m_tree->Branch("fiber_side", &m_zdc_fiber_side);
46 m_tree->Branch("fiber_mod", &m_zdc_fiber_mod);
47 m_tree->Branch("fiber_channel", &m_zdc_fiber_channel);
48 m_tree->Branch("fiber_nphotons", &m_zdc_fiber_photons);
49
50 m_tree->Branch("calib_side", &m_zdc_calib_side);
51 m_tree->Branch("calib_mod", &m_zdc_calib_mod);
52 m_tree->Branch("calib_channel", &m_zdc_calib_channel);
53 m_tree->Branch("calib_total", &m_zdc_calib_Total);
54 m_tree->Branch("calib_em", &m_zdc_calib_EM);
55 m_tree->Branch("calib_nonem", &m_zdc_calib_NonEM);
56
57
58 return StatusCode::SUCCESS;
59}
60
61
62StatusCode ZDCHitAnalysis::execute(const EventContext& ctx) {
63 ATH_MSG_DEBUG( "In ZDCHitAnalysis::execute()" );
64
65 m_zdc_fiber_side->clear();
66 m_zdc_fiber_mod->clear();
67 m_zdc_fiber_channel->clear();
68 m_zdc_fiber_photons->clear();
69
70 double photons_fiber = -1;
71 int side_fiber = -1;
72 int mod_fiber = -1;
73 int channel_fiber = -1;
74
76 const ZDC_SimFiberHit_Collection* fiberiter{nullptr};
77 ATH_CHECK(SG::get(fiberiter, m_readKey, ctx));
78 for (fiberhi=(*fiberiter).begin(); fiberhi != (*fiberiter).end(); ++fiberhi) {
79 ZDC_SimFiberHit ghit(*fiberhi);
80 Identifier id = ghit.getID();
81 photons_fiber = ghit.getNPhotons();
82 side_fiber = (m_ZdcID->side(id)==-1) ? 0 : 1;
83 mod_fiber = m_ZdcID->module(id);
84 channel_fiber = m_ZdcID->channel(id);
85
86 m_h_zdc_photons[side_fiber][mod_fiber]->Fill(photons_fiber);
87
88 m_zdc_fiber_side->push_back(side_fiber);
89 m_zdc_fiber_mod->push_back(mod_fiber);
90 m_zdc_fiber_channel->push_back(channel_fiber);
91 m_zdc_fiber_photons->push_back(photons_fiber);
92 }
93
94
95 m_zdc_calib_side->clear();
96 m_zdc_calib_mod->clear();
97 m_zdc_calib_channel->clear();
98 m_zdc_calib_Total->clear();
99 m_zdc_calib_EM->clear();
100 m_zdc_calib_NonEM->clear();
101
102 int side_calib = -1;
103 int mod_calib = -1;
104 int channel_calib = -1;
105 float calib_eTot = -999.;
106 float calib_eEM = -999.;
107 float calib_eNonEM = -999.;
108
109 const CaloCalibrationHitContainer* calibiter{nullptr};
110 ATH_CHECK(SG::get(calibiter, m_readCalibKey, ctx));
111 for (auto hit : *calibiter) {
112 Identifier id = hit->cellID();
113 side_calib = (m_ZdcID->side(id)==-1) ? 0 : 1;
114 mod_calib = m_ZdcID->module(id);
115 channel_calib = m_ZdcID->channel(id);
116 calib_eTot = hit->energyTotal();
117 calib_eEM = hit->energyEM();
118 calib_eNonEM = hit->energyNonEM();
119
120 m_h_zdc_calibTot[side_calib][mod_calib]->Fill(calib_eTot);
121 m_h_zdc_calibEM[side_calib][mod_calib]->Fill(calib_eEM);
122 m_h_zdc_calibNonEM[side_calib][mod_calib]->Fill(calib_eNonEM);
123
124 m_zdc_calib_side->push_back(side_calib);
125 m_zdc_calib_mod->push_back(mod_calib);
126 m_zdc_calib_channel->push_back(channel_calib);
127 m_zdc_calib_Total->push_back(calib_eTot);
128 m_zdc_calib_EM->push_back(calib_eEM);
129 m_zdc_calib_NonEM->push_back(calib_eNonEM);
130 }
131
132 if (m_tree) m_tree->Fill();
133
134 return StatusCode::SUCCESS;
135}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_DEBUG(x)
Handle class for reading from StoreGate.
ZDC_SimFiberHit_Collection::const_iterator ZDC_SimFiberHit_ConstIterator
const ServiceHandle< StoreGateSvc > & detStore() const
const ServiceHandle< ITHistSvc > & histSvc() const
The standard THistSvc (for writing histograms and TTrees and more to a root file) Returns (kind of) a...
Gaudi::Property< std::string > m_path
std::vector< int > * m_zdc_fiber_channel
SG::ReadHandleKey< ZDC_SimFiberHit_Collection > m_readKey
std::vector< int > * m_zdc_fiber_photons
TH1_Array m_h_zdc_photons
std::vector< float > * m_zdc_calib_Total
virtual StatusCode execute(const EventContext &ctx) override
Execute method.
SG::ReadHandleKey< CaloCalibrationHitContainer > m_readCalibKey
std::vector< int > * m_zdc_calib_channel
TH1_Array m_h_zdc_calibEM
TH1_Array m_h_zdc_calibTot
std::vector< int > * m_zdc_calib_mod
std::vector< int > * m_zdc_fiber_mod
std::vector< int > * m_zdc_calib_side
std::vector< float > * m_zdc_calib_EM
virtual StatusCode initialize() override
std::vector< int > * m_zdc_fiber_side
TH1_Array m_h_zdc_calibNonEM
std::vector< float > * m_zdc_calib_NonEM
int getNPhotons() const
Identifier getID() const
ID3PD * m_tree
Pointer to the ID3PD object used.
const T * get(const ReadCondHandleKey< T > &key, const EventContext &ctx)
Convenience function to retrieve an object given a ReadCondHandleKey.