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
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 EventContext& ctx{Gaudi::Hive::currentContext()};
77 const ZDC_SimFiberHit_Collection* fiberiter{nullptr};
78 ATH_CHECK(SG::get(fiberiter, m_readKey, ctx));
79 for (fiberhi=(*fiberiter).begin(); fiberhi != (*fiberiter).end(); ++fiberhi) {
80 ZDC_SimFiberHit ghit(*fiberhi);
81 Identifier id = ghit.getID();
82 photons_fiber = ghit.getNPhotons();
83 side_fiber = (m_ZdcID->side(id)==-1) ? 0 : 1;
84 mod_fiber = m_ZdcID->module(id);
85 channel_fiber = m_ZdcID->channel(id);
86
87 m_h_zdc_photons[side_fiber][mod_fiber]->Fill(photons_fiber);
88
89 m_zdc_fiber_side->push_back(side_fiber);
90 m_zdc_fiber_mod->push_back(mod_fiber);
91 m_zdc_fiber_channel->push_back(channel_fiber);
92 m_zdc_fiber_photons->push_back(photons_fiber);
93 }
94
95
96 m_zdc_calib_side->clear();
97 m_zdc_calib_mod->clear();
98 m_zdc_calib_channel->clear();
99 m_zdc_calib_Total->clear();
100 m_zdc_calib_EM->clear();
101 m_zdc_calib_NonEM->clear();
102
103 int side_calib = -1;
104 int mod_calib = -1;
105 int channel_calib = -1;
106 float calib_eTot = -999.;
107 float calib_eEM = -999.;
108 float calib_eNonEM = -999.;
109
110 const CaloCalibrationHitContainer* calibiter{nullptr};
111 ATH_CHECK(SG::get(calibiter, m_readCalibKey, ctx));
112 for (auto hit : *calibiter) {
113 Identifier id = hit->cellID();
114 side_calib = (m_ZdcID->side(id)==-1) ? 0 : 1;
115 mod_calib = m_ZdcID->module(id);
116 channel_calib = m_ZdcID->channel(id);
117 calib_eTot = hit->energyTotal();
118 calib_eEM = hit->energyEM();
119 calib_eNonEM = hit->energyNonEM();
120
121 m_h_zdc_calibTot[side_calib][mod_calib]->Fill(calib_eTot);
122 m_h_zdc_calibEM[side_calib][mod_calib]->Fill(calib_eEM);
123 m_h_zdc_calibNonEM[side_calib][mod_calib]->Fill(calib_eNonEM);
124
125 m_zdc_calib_side->push_back(side_calib);
126 m_zdc_calib_mod->push_back(mod_calib);
127 m_zdc_calib_channel->push_back(channel_calib);
128 m_zdc_calib_Total->push_back(calib_eTot);
129 m_zdc_calib_EM->push_back(calib_eEM);
130 m_zdc_calib_NonEM->push_back(calib_eNonEM);
131 }
132
133 if (m_tree) m_tree->Fill();
134
135 return StatusCode::SUCCESS;
136}
#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
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
virtual StatusCode execute() override
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
const T * get(const ReadCondHandleKey< T > &key, const EventContext &ctx)
Convenience function to retrieve an object given a ReadCondHandleKey.