ATLAS Offline Software
Loading...
Searching...
No Matches
ZdcNtuple.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
8
10#include "xAODRootAccess/Init.h"
13
15
16#include <TTree.h>
17#include <TH1.h>
18#include <TSystem.h>
19#include <TFile.h>
20
21
22// this is needed to distribute the algorithm to the workers
23//ClassImp(ZdcNtuple)
24
25ZdcNtuple :: ZdcNtuple (const std::string& name, ISvcLocator *pSvcLocator)
26 : EL::AnaAlgorithm(name, pSvcLocator),
27 m_grl ("GoodRunsListSelectionTool/grl", this),
28 //m_zdcAnalysisTool("ZDC::ZdcAnalysisTool/ZdcAnalysisTool", this),
29 m_selTool( "InDet::InDetTrackSelectionTool/TrackSelectionTool", this )
30{
31 // Here you put any code for the base initialization of variables,
32 // e.g. initialize all pointers to 0. Note that you should only put
33 // the most basic initialization here, since this method will be
34 // called on both the submission and the worker node. Most of your
35 // initialization code will go into histInitialize() and
36 // initialize().
37 m_setupTrigHist = false;
39
40 declareProperty("isMC", m_isMC = false, "MC mode");
41 declareProperty("enableOutputTree", enableOutputTree = false, "Enable output tree");
42 declareProperty("enableOutputSamples", enableOutputSamples = false, "Output ZDC and RPD raw data");
43 declareProperty("enableTrigger", enableTrigger = true, "comment");
44 declareProperty("enableTracks", enableTracks = false, "comment");
45 declareProperty("trackLimit", trackLimit = 500, "comment");
46 declareProperty("enableID", enableID = false, "turn on to enable ID tracks & vertices for physics streams");
47 declareProperty("enableCalo", enableCalo = false, "turn on to enable calorimeter energy info for physics streams");
48 declareProperty("enableClusters", enableClusters = false, "turn on to enable calo topo cluster info for physics streams");
49 declareProperty("writeOnlyTriggers", writeOnlyTriggers = false, "comment");
50 declareProperty("useGRL", useGRL = true, "comment");
51 declareProperty("grlFilename", grlFilename = "$ROOTCOREBIN/data/ZdcNtuple/data16_hip8TeV.periodAllYear_DetStatus-v86-pro20-19_DQDefects-00-02-04_PHYS_HeavyIonP_All_Good.xml", "comment");
52 declareProperty("slimmed", slimmed = false, "comment");
53 declareProperty("zdcCalib", zdcCalib = false, "zdc/ZDCCalib file");
54 declareProperty("zdcInj", zdcInj = false, "ZDC injected pulse");
55 declareProperty("zdcLaser", zdcLaser = false, "Run 2 ZDC Laser");
56 declareProperty("zdcOnly", zdcOnly = false, "comment");
57 declareProperty("zdcLowGainMode", zdcLowGainMode = 0, "comment");
58 declareProperty("gapPtMin", m_gapPtMin = 200, "minimum pT of cluster used in gaps");
59 declareProperty("flipDelay", flipDelay = 0, "comment");
60 declareProperty("reprocZdc", reprocZdc = 0, "comment");
61 declareProperty("auxSuffix", auxSuffix = "", "comment");
62 declareProperty("nsamplesZdc", nsamplesZdc = 24, "number of samples, 7 = most of Run 2, 24,32,40 = Run 3");
63 declareProperty("lhcf2022", lhcf2022 = false,"LHCf2022 general config");
64 declareProperty("lhcf2022afp", lhcf2022afp = false,"LHCf2022 AFP-specific config");
65 declareProperty("lhcf2022zdc", lhcf2022zdc = false,"LHCf2022 ZDC-specific config");
66 declareProperty("pbpb2023", pbpb2023 = false, "PbPb2023 config");
67 declareProperty("oo2025", oo2025 = false, "OO and NeNe 2025 config");
68 declareProperty("zdcConfig", zdcConfig = "PbPb2018", "argument to configure ZdcAnalysisTool");
69 declareProperty("doZdcCalib", doZdcCalib = false, "perform ZDC energy calibration");
70 declareProperty("enableZDC", enableZDC = true);
71 declareProperty("enableRPD",enableRPD = false,"enable reading any RPD decorations");
72 declareProperty("enableRPDAmp",enableRPDAmp = false,"enable reading RPD amplitudes (also requires enableRPD)");
73 declareProperty("enableCentroid",enableCentroid = false,"enable reading centroid decorations (also requires enableRPD)");
74
75 declareProperty( "TrackSelectionTool", m_selTool );
76
77 trackLimitReject = false;
78
79 m_zdcAnalysisTool.declarePropertyFor (this, "zdcAnalysisTool");
80
81}
82
83/*
84StatusCode ZdcNtuple :: setupJob (EL::Job& job)
85{
86 // Here you put code that sets up the job on the submission object
87 // so that it is ready to work with your algorithm, e.g. you can
88 // request the D3PDReader service or add output files. Any code you
89 // put here could instead also go into the submission script. The
90 // sole advantage of putting it here is that it gets automatically
91 // activated/deactivated when you add/remove the algorithm from your
92 // job, which may or may not be of value to you.
93
94 job.useXAOD ();
95 ANA_CHECK( "setupJob()", xAOD::Init() ); // call before opening first file
96
97 return StatusCode::SUCCESS;
98}
99*/
100
101
102StatusCode ZdcNtuple :: initialize ()
103{
104 // Here you do everything that needs to be done at the very
105 // beginning on each worker node, e.g. create histograms and output
106 // trees. This method gets called before any input files are
107 // connected.
108
109 ANA_MSG_DEBUG("Howdy from Initialize!");
110
112 ANA_CHECK(m_zdcSumContainerName.initialize());
114
116 {
117 h_TCSigCut = new TH1D("_gapSigCut_", "", 98, -4.9, 4.9);
118 h_TCSigCut->SetContent(&m_gapThresholds[0]);
119
120 ANA_CHECK( book(TTree("zdcTree", "ZDC Tree")));
121 m_outputTree = tree( "zdcTree" );
122
123 m_outputTree->Branch("runNumber", &t_runNumber, "runNumber/i");
124 m_outputTree->Branch("eventNumber", &t_eventNumber, "eventNumber/i");
125 m_outputTree->Branch("lumiBlock", &t_lumiBlock, "lumiBlock/i");
126 m_outputTree->Branch("bunchGroup", &t_bunchGroup, "bunchGroup/b");
127 m_outputTree->Branch("bcid", &t_bcid, "bcid/i");
128 if (zdcInj) m_outputTree->Branch("vInj",&t_vInj,"vInj/F");
129 m_outputTree->Branch("avgIntPerCrossing", &t_avgIntPerCrossing, "avgIntPerCrossing/F");
130 m_outputTree->Branch("actIntPerCrossing", &t_actIntPerCrossing, "actIntPerCrossing/F");
131 m_outputTree->Branch("trigger", &t_trigger, "trigger/l");
132 m_outputTree->Branch("trigger_TBP", &t_trigger_TBP, "trigger_TBP/i");
133 m_outputTree->Branch("tbp", &t_tbp, "tbp[16]/i");
134 m_outputTree->Branch("tav", &t_tav, "tav[16]/i");
135 m_outputTree->Branch("passBits", &t_passBits, "passBits/i");
136 m_outputTree->Branch("extendedLevel1ID",&t_extendedLevel1ID,"extendedLevel1ID/i");
137 m_outputTree->Branch("timeStamp",&t_timeStamp,"timeStamp/i");
138 m_outputTree->Branch("timeStampNSOffset",&t_timeStampNSOffset,"timeStampNSOffset/i");
139 m_outputTree->Branch("zdcEventInfoError",&t_zdcEventInfoError,"zdcEventInfoError/b");
140 m_outputTree->Branch("zdcEventInfoErrorWord",&t_zdcEventInfoErrorWord,"zdcEventInfoErrorWord/i");
141 // ZDC and RPD decoding errors
142 m_outputTree->Branch("zdcDecodingError",&t_zdcDecodingError,"zdcDecodingError/b");
143 m_outputTree->Branch("rpdDecodingError",&t_rpdDecodingError,"rpdDecodingError/b");
144
145 if (enableZDC)
146 {
148 {
149 if (nsamplesZdc == 7)
150 {
151 ANA_MSG_INFO("Setting up for 7 samples");
152 m_outputTree->Branch("zdc_raw", &t_raw7, "zdc_raw[2][4][2][2][7]/s"); // 7 samples
153 }
154
155 if (nsamplesZdc == 15)
156 {
157 ANA_MSG_INFO("Setting up for 15 samples");
158 m_outputTree->Branch("zdc_raw", &t_raw15, "zdc_raw[2][4][2][2][15]/s"); // 15 samples
159 }
160
161 if (nsamplesZdc == 24)
162 {
163 ANA_MSG_INFO("Setting up for 24 samples");
164 m_outputTree->Branch("zdc_raw", &t_raw24, "zdc_raw[2][4][2][2][24]/s"); // 24 samples
165 m_outputTree->Branch("rpd_raw", &t_rpdRaw, "rpd_raw[2][16][24]/s"); // 24 samples
166 }
167 if (nsamplesZdc == 32)
168 {
169 ANA_MSG_INFO("Setting up for 32 samples");
170 m_outputTree->Branch("zdc_raw", &t_raw32, "zdc_raw[2][4][2][2][32]/s"); // 32 samples
171 m_outputTree->Branch("rpd_raw", &t_rpdRaw32, "rpd_raw[2][16][32]/s"); // 32 samples
172 }
173 if (nsamplesZdc == 40)
174 {
175 ANA_MSG_INFO("Setting up for 40 samples");
176 m_outputTree->Branch("zdc_raw", &t_raw40, "zdc_raw[2][4][2][2][40]/s"); // 40 samples
177 m_outputTree->Branch("rpd_raw", &t_rpdRaw40, "rpd_raw[2][16][40]/s"); // 40 samples
178 }
179 }
180
181 m_outputTree->Branch("zdc_ZdcAmp", &t_ZdcAmp, "zdc_ZdcAmp[2]/F");
182 m_outputTree->Branch("zdc_ZdcAmpErr", &t_ZdcAmpErr, "zdc_ZdcAmpErr[2]/F");
183 m_outputTree->Branch("zdc_ZdcEnergy", &t_ZdcEnergy, "zdc_ZdcEnergy[2]/F");
184 m_outputTree->Branch("zdc_ZdcEnergyErr", &t_ZdcEnergyErr, "zdc_ZdcEnergyErr[2]/F");
185 m_outputTree->Branch("zdc_ZdcNLEnergy", &t_ZdcNLEnergy, "zdc_ZdcNLEnergy[2]/F");
186 m_outputTree->Branch("zdc_ZdcNLEnergyErr", &t_ZdcNLEnergyErr, "zdc_ZdcNLEnergyErr[2]/F");
187 m_outputTree->Branch("zdc_ZdcTime", &t_ZdcTime, "zdc_ZdcTime[2]/F");
188 m_outputTree->Branch("zdc_ZdcStatus", &t_ZdcStatus, "zdc_ZdcStatus[2]/S");
189 m_outputTree->Branch("zdc_ZdcTrigEff", &t_ZdcTrigEff, "zdc_ZdcTrigEff[2]/F");
190 m_outputTree->Branch("zdc_ZdcModuleMask", &t_ZdcModuleMask, "zdc_ZdcModuleMask/i");
191 m_outputTree->Branch("zdc_ZdcLucrodTriggerSideAmp",&t_ZdcLucrodTriggerSideAmp,"zdc_ZdcLucrodTriggerSideAmp[2]/S");
192 m_outputTree->Branch("zdc_ZdcLucrodTriggerSideAmpLG",&t_ZdcLucrodTriggerSideAmpLG,"zdc_ZdcLucrodTriggerSideAmpLG[2]/S");
193
194 m_outputTree->Branch("zdc_ZdcModuleAmp", &t_ZdcModuleAmp, "zdc_ZdcModuleAmp[2][4]/F");
195 m_outputTree->Branch("zdc_ZdcModuleAmpUncorr", &t_ZdcModuleAmpUncorr, "zdc_ZdcModuleAmpUncorr[2][4]/F");
196 m_outputTree->Branch("zdc_ZdcModuleTime", &t_ZdcModuleTime, "zdc_ZdcModuleTime[2][4]/F");
197 m_outputTree->Branch("zdc_ZdcModuleFitAmp", &t_ZdcModuleFitAmp, "zdc_ZdcModuleFitAmp[2][4]/F");
198 m_outputTree->Branch("zdc_ZdcModuleFitT0", &t_ZdcModuleFitT0, "zdc_ZdcModuleFitT0[2][4]/F");
199 m_outputTree->Branch("zdc_ZdcModuleStatus", &t_ZdcModuleStatus, "zdc_ZdcModuleStatus[2][4]/i");
200 m_outputTree->Branch("zdc_ZdcModuleChisq", &t_ZdcModuleChisq, "zdc_ZdcModuleChisq[2][4]/F");
201 m_outputTree->Branch("zdc_ZdcModuleChisqRatio", &t_ZdcModuleChisqRatio, "zdc_ZdcModuleChisqRatio[2][4]/F");
202 m_outputTree->Branch("zdc_ZdcModuleCalibAmp", &t_ZdcModuleCalibAmp, "zdc_ZdcModuleCalibAmp[2][4]/F");
203 m_outputTree->Branch("zdc_ZdcModuleCalibTime", &t_ZdcModuleCalibTime, "zdc_ZdcModuleCalibTime[2][4]/F");
204 m_outputTree->Branch("zdc_ZdcModuleBkgdMaxFraction", &t_ZdcModuleBkgdMaxFraction, "zdc_ZdcModuleBkgdMaxFraction[2][4]/F");
205 m_outputTree->Branch("zdc_ZdcModuleAmpError", &t_ZdcModuleAmpError, "zdc_ZdcModuleAmpError[2][4]/F");
206 m_outputTree->Branch("zdc_ZdcModuleMinDeriv2nd", &t_ZdcModuleMinDeriv2nd, "zdc_ZdcModuleMinDeriv2nd[2][4]/F");
207 m_outputTree->Branch("zdc_ZdcModulePresample", &t_ZdcModulePresample, "zdc_ZdcModulePresample[2][4]/F");
208 m_outputTree->Branch("zdc_ZdcModulePreSampleAmp", &t_ZdcModulePreSampleAmp, "zdc_ZdcModulePreSampleAmp[2][4]/F");
209 m_outputTree->Branch("zdc_ZdcLucrodTriggerAmp",&t_ZdcLucrodTriggerAmp,"zdc_ZdcLucrodTriggerAmp[2][4]/S");
210 m_outputTree->Branch("zdc_ZdcLucrodTriggerAmpLG",&t_ZdcLucrodTriggerAmpLG,"zdc_ZdcLucrodTriggerAmpLG[2][4]/S");
211 m_outputTree->Branch("zdc_ZdcModuleMaxADC",&t_ZdcModuleMaxADC,"zdc_ZdcModuleMaxADC[2][4]/F");
212 m_outputTree->Branch("zdc_ZdcModuleMaxADCHG",&t_ZdcModuleMaxADCHG,"zdc_ZdcModuleMaxADCHG[2][4]/F");
213 m_outputTree->Branch("zdc_ZdcModuleMaxADCLG",&t_ZdcModuleMaxADCLG,"zdc_ZdcModuleMaxADCLG[2][4]/F");
214 m_outputTree->Branch("zdc_ZdcModulePeakADCHG",&t_ZdcModulePeakADCHG,"zdc_ZdcModulePeakADCHG[2][4]/F");
215 m_outputTree->Branch("zdc_ZdcModulePeakADCLG",&t_ZdcModulePeakADCLG,"zdc_ZdcModulePeakADCLG[2][4]/F");
216 m_outputTree->Branch("zdc_ZdcModuleAmpLGRefit", &t_ZdcModuleAmpLGRefit, "zdc_ZdcModuleAmpLGRefit[2][4]/F");
217 m_outputTree->Branch("zdc_ZdcModuleAmpCorrLGRefit", &t_ZdcModuleAmpCorrLGRefit, "zdc_ZdcModuleAmpCorrLGRefit[2][4]/F");
218 m_outputTree->Branch("zdc_ZdcModuleT0LGRefit", &t_ZdcModuleT0LGRefit, "zdc_ZdcModuleT0LGRefit[2][4]/F");
219 m_outputTree->Branch("zdc_ZdcModuleT0SubLGRefit", &t_ZdcModuleT0SubLGRefit, "zdc_ZdcModuleT0SubLGRefit[2][4]/F");
220 m_outputTree->Branch("zdc_ZdcModuleChisqLGRefit", &t_ZdcModuleChisqLGRefit, "zdc_ZdcModuleChisqLGRefit[2][4]/F");
221
222 if(m_isMC){
223 //Modules
224 m_outputTree->Branch("zdc_ZdcModuleTruthTotal",&t_ZdcModuleTruthTotal,"zdc_ZdcModuleTruthTotal[2][7]/F");
225 m_outputTree->Branch("zdc_ZdcModuleTruthInvisible",&t_ZdcModuleTruthInvis,"zdc_ZdcModuleTruthInvisible[2][7]/F");
226 m_outputTree->Branch("zdc_ZdcModuleTruthEM",&t_ZdcModuleTruthEM,"zdc_ZdcModuleTruthEM[2][7]/F");
227 m_outputTree->Branch("zdc_ZdcModuleTruthNonEM",&t_ZdcModuleTruthNonEM,"zdc_ZdcModuleTruthNonEM[2][7]/F");
228 m_outputTree->Branch("zdc_ZdcModuleTruthEscaped",&t_ZdcModuleTruthEscaped,"zdc_ZdcModuleTruthEscaped[2][7]/F");
229 m_outputTree->Branch("zdc_ZdcModuleTruthNphotons",&t_ZdcModuleTruthNphotons,"zdc_ZdcModuleTruthNphotons[2][7]/i");
230 m_outputTree->Branch("zdc_RpdModuleTruthNphotons",&t_RpdModuleTruthNphotons,"zdc_RpdModuleTruthNphotons[2][16]/i");
231
232 //Sums
233 m_outputTree->Branch("zdc_ZdcTruthTotal",&t_ZdcTruthTotal,"zdc_ZdcTruthTotal[2]/F");
234 m_outputTree->Branch("zdc_ZdcTruthInvisible",&t_ZdcTruthInvis, "zdc_ZdcTruthInvisible[2]/F");
235 m_outputTree->Branch("zdc_ZdcTruthEM",&t_ZdcTruthEM,"zdc_ZdcTruthEM[2]/F");
236 m_outputTree->Branch("zdc_ZdcTruthNonEM",&t_ZdcTruthNonEM,"zdc_ZdcTruthNonEM[2]/F");
237 m_outputTree->Branch("zdc_ZdcTruthEscaped",&t_ZdcTruthEscaped,"zdc_ZdcTruthEscaped[2]/F");
238
239 //Event gen particles
240 m_outputTree->Branch("zdc_ZdcTruthParticlePosx",&t_ZdcTruthParticlePosx);
241 m_outputTree->Branch("zdc_ZdcTruthParticlePosy",&t_ZdcTruthParticlePosy);
242 m_outputTree->Branch("zdc_ZdcTruthParticlePosz",&t_ZdcTruthParticlePosz);
243 m_outputTree->Branch("zdc_ZdcTruthParticleTime",&t_ZdcTruthParticleTime);
244 m_outputTree->Branch("zdc_ZdcTruthParticlePx",&t_ZdcTruthParticlePx);
245 m_outputTree->Branch("zdc_ZdcTruthParticlePy",&t_ZdcTruthParticlePy);
246 m_outputTree->Branch("zdc_ZdcTruthParticlePz",&t_ZdcTruthParticlePz);
247 m_outputTree->Branch("zdc_ZdcTruthParticleEnergy",&t_ZdcTruthParticleEnergy);
248 m_outputTree->Branch("zdc_ZdcTruthParticlePid",&t_ZdcTruthParticlePid);
249 m_outputTree->Branch("zdc_ZdcTruthParticleStatus",&t_ZdcTruthParticleStatus);
250 }
251 }
252 if (enableRPD)
253 {
254 if (enableRPDAmp) {
255 m_outputTree->Branch("zdc_RpdChannelBaseline",&t_RpdChannelBaseline,"zdc_RpdChannelBaseline[2][16]/F");
256 m_outputTree->Branch("zdc_RpdChannelPileupExpFitParams",&t_RpdChannelPileupExpFitParams,"zdc_RpdChannelPileupExpFitParams[2][16][2]/F");
257 m_outputTree->Branch("zdc_RpdChannelPileupStretchedExpFitParams",&t_RpdChannelPileupStretchedExpFitParams,"zdc_RpdChannelPileupStretchedExpFitParams[2][16][3]/F");
258 m_outputTree->Branch("zdc_RpdChannelPileupExpFitParamErrs",&t_RpdChannelPileupExpFitParamErrs,"zdc_RpdChannelPileupExpFitParamErrs[2][16][2]/F");
259 m_outputTree->Branch("zdc_RpdChannelPileupStretchedExpFitParamErrs",&t_RpdChannelPileupStretchedExpFitParamErrs,"zdc_RpdChannelPileupStretchedExpFitParamErrs[2][16][3]/F");
260 m_outputTree->Branch("zdc_RpdChannelPileupExpFitMSE",&t_RpdChannelPileupExpFitMSE,"zdc_RpdChannelPileupExpFitMSE[2][16]/F");
261 m_outputTree->Branch("zdc_RpdChannelPileupStretchedExpFitMSE",&t_RpdChannelPileupStretchedExpFitMSE,"zdc_RpdChannelPileupStretchedExpFitMSE[2][16]/F");
262 m_outputTree->Branch("zdc_RpdChannelAmplitude",&t_RpdChannelAmplitude,"zdc_RpdChannelAmplitude[2][16]/F");
263 m_outputTree->Branch("zdc_RpdChannelAmplitudeCalib",&t_RpdChannelAmplitudeCalib,"zdc_RpdChannelAmplitudeCalib[2][16]/F");
264 m_outputTree->Branch("zdc_RpdChannelMaxADC",&t_RpdChannelMaxADC,"zdc_RpdChannelMaxADC[2][16]/F");
265 m_outputTree->Branch("zdc_RpdChannelMaxADCCalib",&t_RpdChannelMaxADCCalib,"zdc_RpdChannelMaxADCCalib[2][16]/F");
266 m_outputTree->Branch("zdc_RpdChannelMaxSample",&t_RpdChannelMaxSample,"zdc_RpdChannelMaxSample[2][16]/i");
267 m_outputTree->Branch("zdc_RpdChannelStatus",&t_RpdChannelStatus,"zdc_RpdChannelStatus[2][16]/i");
268 m_outputTree->Branch("zdc_RpdChannelPileupFrac",&t_RpdChannelPileupFrac,"zdc_RpdChannelPileupFrac[2][16]/F");
269 m_outputTree->Branch("zdc_RpdSideStatus",&t_RpdSideStatus,"zdc_RpdSideStatus[2]/i");
270 }
271 if (enableCentroid)
272 {
273 m_outputTree->Branch("zdc_centroidAvailable", &t_centroidDecorationsAvailable);
274 m_outputTree->Branch("zdc_centroidEventValid", &t_centroidEventValid, "zdc_centroidEventValid/B");
275 m_outputTree->Branch("zdc_centroidStatus", &t_centroidStatus, "zdc_centroidStatus[2]/i");
276 m_outputTree->Branch("zdc_RPDChannelSubtrAmp", &t_RPDChannelSubtrAmp, "zdc_RPDChannelSubtrAmp[2][16]/F");
277 m_outputTree->Branch("zdc_RPDSubtrAmpSum", &t_RPDSubtrAmpSum, "zdc_RPDSubtrAmpSum[2]/F");
278 m_outputTree->Branch("zdc_xCentroidPreGeomCorPreAvgSubtr", &t_xCentroidPreGeomCorPreAvgSubtr, "zdc_xCentroidPreGeomCorPreAvgSubtr[2]/F");
279 m_outputTree->Branch("zdc_yCentroidPreGeomCorPreAvgSubtr", &t_yCentroidPreGeomCorPreAvgSubtr, "zdc_yCentroidPreGeomCorPreAvgSubtr[2]/F");
280 m_outputTree->Branch("zdc_xCentroidPreAvgSubtr", &t_xCentroidPreAvgSubtr, "zdc_xCentroidPreAvgSubtr[2]/F");
281 m_outputTree->Branch("zdc_yCentroidPreAvgSubtr", &t_yCentroidPreAvgSubtr, "zdc_yCentroidPreAvgSubtr[2]/F");
282 m_outputTree->Branch("zdc_xCentroid", &t_xCentroid, "zdc_xCentroid[2]/F");
283 m_outputTree->Branch("zdc_yCentroid", &t_yCentroid, "zdc_yCentroid[2]/F");
284 m_outputTree->Branch("zdc_xRowCentroid", &t_xRowCentroid, "zdc_xRowCentroid[2][4]/F");
285 m_outputTree->Branch("zdc_yColCentroid", &t_yColCentroid, "zdc_yColCentroid[2][4]/F");
286 m_outputTree->Branch("zdc_reactionPlaneAngle", &t_reactionPlaneAngle, "zdc_reactionPlaneAngle[2]/F");
287 m_outputTree->Branch("zdc_cosDeltaReactionPlaneAngle", &t_cosDeltaReactionPlaneAngle, "zdc_cosDeltaReactionPlaneAngle/F");
288 }
289 }
290
291 if (!(zdcCalib || zdcLaser || zdcOnly || zdcInj))
292 {
293 m_outputTree->Branch("mbts_in_e", &t_mbts_in_e, "mbts_in_e[2][8]/F");
294 m_outputTree->Branch("mbts_in_t", &t_mbts_in_t, "mbts_in_t[2][8]/F");
295 m_outputTree->Branch("mbts_out_e", &t_mbts_out_e, "mbts_out_e[2][4]/F");
296 m_outputTree->Branch("mbts_out_t", &t_mbts_out_t, "mbts_out_t[2][4]/F");
297
298 m_outputTree->Branch("T2mbts_in_e", &t_T2mbts_in_e, "T2mbts_in_e[2][8]/F");
299 m_outputTree->Branch("T2mbts_in_t", &t_T2mbts_in_t, "T2mbts_in_t[2][8]/F");
300 m_outputTree->Branch("T2mbts_out_e", &t_T2mbts_out_e, "T2mbts_out_e[2][4]/F");
301 m_outputTree->Branch("T2mbts_out_t", &t_T2mbts_out_t, "T2mbts_out_t[2][4]/F");
302
303 m_outputTree->Branch("L1ET", &t_L1ET, "L1ET/F");
304 m_outputTree->Branch("L1ET24", &t_L1ET24, "L1ET24/F");
305
306 m_outputTree->Branch("totalEt", &t_totalEt, "totalEt/F");
307 m_outputTree->Branch("totalEt_TTsum", &t_totalEt_TTsum, "totalEt_TTsum/F");
308
309 m_outputTree->Branch("totalEt24", &t_totalEt24, "totalEt24/F");
310 m_outputTree->Branch("totalEt24_TTsum", &t_totalEt24_TTsum, "totalEt24_TTsum/F");
311
312 m_outputTree->Branch("fcalEt", &t_fcalEt, "fcalEt/F");
313 m_outputTree->Branch("fcalEtA", &t_fcalEtA, "fcalEtA/F");
314 m_outputTree->Branch("fcalEtC", &t_fcalEtC, "fcalEtC/F");
315 m_outputTree->Branch("fcalEtA_TT", &t_fcalEtA_TT, "fcalEtA_TT/F");
316 m_outputTree->Branch("fcalEtC_TT", &t_fcalEtC_TT, "fcalEtC_TT/F");
317
318 m_outputTree->Branch("nvx", &t_nvx, "nvx/I");
319 m_outputTree->Branch("vx", &t_vx, "vx[3]/F");
320 m_outputTree->Branch("pvindex", &t_pvindex, "pvindex/I");
321 m_outputTree->Branch("vxntrk", &t_vxntrk, "vxntrk/I");
322 m_outputTree->Branch("vx_trk_index", "vector<int>", &t_vx_trk_index);
323 m_outputTree->Branch("vxtype", &t_vxtype, "vxtype/I");
324 m_outputTree->Branch("vxcov", &t_vxcov, "vxcov[6]/F");
325 m_outputTree->Branch("vxsumpt2", &t_vxsumpt2, "vxsumpt2/F");
326 m_outputTree->Branch("nstrong", &t_nstrong, "nstrong/I");
327 m_outputTree->Branch("puvxntrk", &t_puvxntrk, "puvxntrk/I");
328 m_outputTree->Branch("puvxsumpt", &t_puvxsumpt, "puvxsumpt/F");
329 m_outputTree->Branch("puvxz", &t_puvxz, "puvxz/F");
330 m_outputTree->Branch("vxnlooseprimary", &t_vxnlooseprimary, "vxnlooseprimary/I");
331 m_outputTree->Branch("vxnminbias", &t_vxnminbias, "vxnminbias/I");
332 m_outputTree->Branch("vxngoodmuon", &t_vxngoodmuon, "vxngoodmuon/I");
333
334 m_outputTree->Branch("t_nvtx", &t_nvtx, "nvtx/I");
335 m_outputTree->Branch("vtx_type", "vector<int8_t>", &t_vtx_type);
336 m_outputTree->Branch("vtx_x", "vector<float>", &t_vtx_x);
337 m_outputTree->Branch("vtx_y", "vector<float>", &t_vtx_y);
338 m_outputTree->Branch("vtx_z", "vector<float>", &t_vtx_z);
339 m_outputTree->Branch("vtx_ntrk_all", "vector<int16_t>", &t_vtx_ntrk_all);
340 m_outputTree->Branch("vtx_sumpt2_all", "vector<float>", &t_vtx_sumpt2_all);
341 m_outputTree->Branch("vtx_ntrk", "vector<int16_t>", &t_vtx_ntrk);
342 m_outputTree->Branch("vtx_sumpt2", "vector<float>", &t_vtx_sumpt2);
343 m_outputTree->Branch("vtx_trk_index", "vector< vector<int16_t> >", &t_vtx_trk_index);
344
345 m_outputTree->Branch("mbts_countA", &t_mbts_countA, "mbts_countA/s");
346 m_outputTree->Branch("mbts_countC", &t_mbts_countC, "mbts_countC/s");
347 m_outputTree->Branch("T2mbts_countAin", &t_T2mbts_countAin, "T2mbts_countAin/s");
348 m_outputTree->Branch("T2mbts_countCin", &t_T2mbts_countCin, "T2mbts_countCin/s");
349 m_outputTree->Branch("mbts_timeA", &t_mbts_timeA, "mbts_timeA/F");
350 m_outputTree->Branch("mbts_timeC", &t_mbts_timeC, "mbts_timeC/F");
351 m_outputTree->Branch("mbts_timeDiff", &t_mbts_timeDiff, "mbts_timeDiff/F");
352
353 t_nclus = 0;
354 m_outputTree->Branch("nclus", &t_nclus, "nclus/i");
355 m_outputTree->Branch("clusEt", &t_clusEt, "clusEt/F");
356 m_outputTree->Branch("clusEtMax", &t_clusEtMax, "clusEtMax/F");
357 m_outputTree->Branch("clusetaMax", &t_clusetaMax, "clusetaMax/F");
358 m_outputTree->Branch("clusphiMax", &t_clusphiMax, "clusphiMax/F");
359
360 m_outputTree->Branch("cc_pt", "vector<float>", &t_cc_pt);
361 m_outputTree->Branch("cc_eta", "vector<float>", &t_cc_eta);
362 m_outputTree->Branch("cc_phi", "vector<float>", &t_cc_phi);
363 m_outputTree->Branch("cc_e", "vector<float>", &t_cc_e);
364 m_outputTree->Branch("cc_raw_m", "vector<float>", &t_cc_raw_m);
365 m_outputTree->Branch("cc_raw_eta", "vector<float>", &t_cc_raw_eta);
366 m_outputTree->Branch("cc_raw_phi", "vector<float>", &t_cc_raw_phi);
367 m_outputTree->Branch("cc_raw_e", "vector<float>", &t_cc_raw_e);
368 m_outputTree->Branch("cc_raw_samp", "vector<vector<float>>", &t_cc_raw_samp);
369 m_outputTree->Branch("cc_sig", "vector<float>", &t_cc_sig);
370 m_outputTree->Branch("cc_layer", "vector<int>", &t_cc_layer);
371
372 m_outputTree->Branch("edgeGapA", &t_edgeGapA, "edgeGapA/F");
373 m_outputTree->Branch("edgeGapC", &t_edgeGapC, "edgeGapC/F");
374
375 m_outputTree->Branch("ntrk", &t_ntrk, "ntrk/i");
376 if (enableTracks)
377 {
378 m_outputTree->Branch("trk_pt", "vector<float>", &t_trk_pt);
379 m_outputTree->Branch("trk_eta", "vector<float>", &t_trk_eta);
380 m_outputTree->Branch("trk_theta", "vector<float>", &t_trk_theta);
381 m_outputTree->Branch("trk_phi", "vector<float>", &t_trk_phi);
382 m_outputTree->Branch("trk_e", "vector<float>", &t_trk_e);
383 m_outputTree->Branch("trk_index", "vector<int>", &t_trk_index);
384 m_outputTree->Branch("trk_d0", "vector<float>", &t_trk_d0);
385 m_outputTree->Branch("trk_z0", "vector<float>", &t_trk_z0);
386 m_outputTree->Branch("trk_vz", "vector<float>", &t_trk_vz);
387 m_outputTree->Branch("trk_vtxz", "vector<float>", &t_trk_vtxz);
388 m_outputTree->Branch("trk_pixeldEdx", "vector<float>", &t_trk_pixeldEdx);
389 m_outputTree->Branch("trk_charge", "vector<int8_t>", &t_trk_charge);
390 m_outputTree->Branch("trk_quality", "vector<int16_t>", &t_trk_quality);
391 m_outputTree->Branch("trk_nPixHits", "vector<uint8_t>", &t_trk_nPixHits);
392 m_outputTree->Branch("trk_nSctHits", "vector<uint8_t>", &t_trk_nSctHits);
393 m_outputTree->Branch("trk_nPixDead", "vector<uint8_t>", &t_trk_nPixDead);
394 m_outputTree->Branch("trk_nSctDead", "vector<uint8_t>", &t_trk_nSctDead);
395 m_outputTree->Branch("trk_nPixHoles", "vector<uint8_t>", &t_trk_nPixHoles);
396 m_outputTree->Branch("trk_nSctHoles", "vector<uint8_t>", &t_trk_nSctHoles);
397 m_outputTree->Branch("trk_nTrtHits", "vector<uint8_t>", &t_trk_nTrtHits);
398 m_outputTree->Branch("trk_nTrtOutliers", "vector<uint8_t>", &t_trk_nTrtOutliers);
399 m_outputTree->Branch("trk_inPixHits", "vector<uint8_t>", &t_trk_inPixHits);
400 m_outputTree->Branch("trk_exPixHits", "vector<uint8_t>", &t_trk_exPixHits);
401 m_outputTree->Branch("trk_ninPixHits", "vector<uint8_t>", &t_trk_ninPixHits);
402 m_outputTree->Branch("trk_nexPixHits", "vector<uint8_t>", &t_trk_nexPixHits);
403 }
404
406 m_outputTree->Branch("nProtons", &nProtons, "nProtons/i");
407 m_outputTree->Branch("proton_pt", "vector<double>", &proton_pt);
408 m_outputTree->Branch("proton_eta", "vector<double>", &proton_eta);
409 m_outputTree->Branch("proton_phi", "vector<double>", &proton_phi);
410 m_outputTree->Branch("proton_e", "vector<double>", &proton_e);
411 m_outputTree->Branch("proton_side", "vector<int>", &proton_side);
412 m_outputTree->Branch("proton_eLoss", "vector<double>", &proton_eLoss);
413 m_outputTree->Branch("proton_t", "vector<double>", &proton_t);
414 m_outputTree->Branch("proton_track_stationID", "vector<vector<int>>", &proton_track_stationID);
415 m_outputTree->Branch("proton_track_nClusters", "vector<vector<int>>", &proton_track_nClusters);
416 m_outputTree->Branch("proton_track_xLocal", "vector<vector<float>>", &proton_track_xLocal);
417 m_outputTree->Branch("proton_track_yLocal", "vector<vector<float>>", &proton_track_yLocal);
418 m_outputTree->Branch("proton_track_zLocal", "vector<vector<float>>", &proton_track_zLocal);
419 m_outputTree->Branch("proton_track_xSlope", "vector<vector<float>>", &proton_track_xSlope);
420 m_outputTree->Branch("proton_track_ySlope", "vector<vector<float>>", &proton_track_ySlope);
421 }
422
423 }
424 }
425
426 ANA_MSG_DEBUG("Anti-howdy from Initialize!");
427
428
429 // Here you do everything that you need to do after the first input
430 // file has been connected and before the first event is processed,
431 // e.g. create additional histograms based on which variables are
432 // available in the input files. You can also create all of your
433 // histograms and trees in here, but be aware that this method
434 // doesn't get called if no events are processed. So any objects
435 // you create here won't be available in the output if you have no
436 // input events.
437
438 ANA_MSG_INFO("enableOutputTree = " << enableOutputTree);
439 ANA_MSG_INFO("writeOnlyTriggers = " << writeOnlyTriggers);
440 ANA_MSG_INFO("enableOutputSamples = " << enableOutputSamples);
441 ANA_MSG_INFO("enableTrigger = " << enableTrigger);
442 ANA_MSG_INFO("enableRPD = " << enableRPD);
443 ANA_MSG_INFO("enableCentroid = " << enableCentroid);
444 ANA_MSG_INFO("zdcCalib = " << zdcCalib);
445 ANA_MSG_INFO("zdcInj = " << zdcInj);
446 ANA_MSG_INFO("zdcLaser = " << zdcLaser);
447 ANA_MSG_INFO("zdcConfig = " << zdcConfig);
448 ANA_MSG_INFO("reprocZdc = " << reprocZdc);
449 ANA_MSG_INFO("auxSuffix = " << auxSuffix );
450 ANA_MSG_INFO("zdcLowGainMode = " << zdcLowGainMode);
451 ANA_MSG_INFO("enableID = " << enableID);
452 ANA_MSG_INFO("enableCalo = " << enableCalo);
453 ANA_MSG_INFO("enableClusters = " << enableClusters);
454 ANA_MSG_INFO("trackLimit = " << trackLimit);
455 ANA_MSG_INFO("trackLimitReject = " << trackLimitReject);
456 ANA_MSG_INFO("isMC = " << m_isMC);
457 ANA_MSG_INFO("useGRL = " << useGRL);
458 ANA_MSG_INFO("grlFilename = " << grlFilename);
459 ANA_MSG_INFO("slimmed = " << slimmed);
460 ANA_MSG_INFO("zdcOnly = " << zdcOnly);
461 ANA_MSG_INFO("flipDelay = " << flipDelay);
462 ANA_MSG_INFO("nsamplesZdc = " << nsamplesZdc);
463 ANA_MSG_INFO("lhcf2022 = " << lhcf2022);
464 ANA_MSG_INFO("lhcf2022afp = " << lhcf2022afp);
465 ANA_MSG_INFO("lhcf2022zdc = " << lhcf2022zdc);
466 ANA_MSG_INFO("doZdcCalib = " << doZdcCalib);
467
468 ANA_MSG_DEBUG("initialize: Initialize!");
469
470
471 // GRL
472
473 if (useGRL)
474 {
475 const char* fullGRLFilePath = gSystem->ExpandPathName (grlFilename.c_str());
476 ANA_MSG_INFO("GRL: " << fullGRLFilePath);
477 std::vector<std::string> vecStringGRL;
478 vecStringGRL.push_back(fullGRLFilePath);
479 ANA_CHECK(m_grl.setProperty( "GoodRunsListVec", vecStringGRL));
480 ANA_CHECK(m_grl.setProperty("PassThrough", false)); // if true (default) will ignore result of GRL and will just pass all events
481 ANA_CHECK(m_grl.initialize());
482
483 }
484
485 if (enableTracks)
486 {
487 ANA_CHECK(m_selTool.retrieve());
488 }
489
490 if (enableTrigger) // HLT related
491 {
492 ANA_MSG_INFO("Trying to initialize TDT");
493 ANA_CHECK(m_trigDecisionTool.retrieve());
494 }
495
496 // ZDC re-reco tool
497 if (reprocZdc)
498 {
499 m_zdcAnalysisTool.setTypeAndName("ZDC::ZdcAnalysisTool/ZdcAnalysisTool");
500
501 ANA_MSG_INFO("Trying to configure ZDC Analysis Tool!");
502
503 ANA_CHECK(m_zdcAnalysisTool.setProperty("FlipEMDelay", flipDelay));
504 ANA_CHECK(m_zdcAnalysisTool.setProperty("LowGainMode", zdcLowGainMode));
505 ANA_CHECK(m_zdcAnalysisTool.setProperty("DoCalib", doZdcCalib));
506 ANA_CHECK(m_zdcAnalysisTool.setProperty("Configuration", zdcConfig));
507 ANA_CHECK(m_zdcAnalysisTool.setProperty("AuxSuffix", auxSuffix));
508 ANA_CHECK(m_zdcAnalysisTool.setProperty("ForceCalibRun", -1));
509
510 ANA_MSG_INFO("Setting up zdcConfig=" << zdcConfig);
511 if (zdcConfig=="LHCf2022")
512 {
513 ANA_CHECK(m_zdcAnalysisTool.setProperty("DoTrigEff", false)); // for now
514 ANA_CHECK(m_zdcAnalysisTool.setProperty("DoTimeCalib", false)); // for now
515 ANA_CHECK(m_zdcAnalysisTool.setProperty("Configuration", "LHCf2022"));
516 }
517 else if (zdcConfig == "PbPb2018")
518 {
519 ANA_CHECK(m_zdcAnalysisTool.setProperty("Configuration", "PbPb2018"));
520 }
521 else if (zdcConfig == "pPb2016")
522 {
523 ANA_CHECK(m_zdcAnalysisTool.setProperty("Configuration", "pPb2016"));
524 }
525 else if (zdcConfig == "PbPb2015")
526 {
527 ANA_CHECK(m_zdcAnalysisTool.setProperty("Configuration", "PbPb2015"));
528 }
529 else if (zdcConfig == "OONeNe2025")
530 {
531 ANA_CHECK(m_zdcAnalysisTool.setProperty("DoTrigEff", false)); // for now
532 ANA_CHECK(m_zdcAnalysisTool.setProperty("DoTimeCalib", true)); // for now
533 ANA_CHECK(m_zdcAnalysisTool.setProperty("Configuration", "OONeNe2025"));
534 }
535
536 if (flipDelay)
537 ANA_MSG_INFO("FLIP ZDC DELAY IN EM MODULES");
538 else
539 ANA_MSG_INFO("NO FLIP ZDC DELAY IN EM MODULES");
540
541
542 ANA_MSG_INFO("Trying to initialize ZDC Analysis Tool!");
543 ANA_CHECK(m_zdcAnalysisTool.initialize());
544 }
545
546 if (zdcInj)
547 {
548 m_zdcInjPulserAmpMap = std::make_shared<ZdcInjPulserAmpMap>();
549 ATH_MSG_INFO( "Using JSON file for injector-pulse voltage at path " << m_zdcInjPulserAmpMap->getFilePath() );
550 }
551
552 return StatusCode::SUCCESS;
553}
554
555
556
557StatusCode ZdcNtuple :: execute ()
558{
559 // Here you do everything that needs to be done on every single
560 // events, e.g. read input variables, apply cuts, and fill
561 // histograms and trees. This is where most of your actual analysis
562 // code will go.
563
564
565 // prefilter with a track limit
566
567 if (!evtStore())
568 {
569 ANA_MSG_INFO("*** No event found! ***");
570 return StatusCode::SUCCESS;
571 }
572
573 ANA_CHECK(evtStore()->retrieve( m_eventInfo, "EventInfo"));
575 if (zdcInj){
577 }
578
579 bool passTrigger = true;
580 m_trigDecision = 0;
581 if (enableTrigger)
582 {
583 ANA_CHECK(evtStore()->retrieve( m_trigDecision, "xTrigDecision"));
585 passTrigger = processTriggerDecision();
586 }
587
588 // if trigger enabled, only write out events which pass one of them, unless using MC
589 //
590 if (enableTrigger && !passTrigger && !m_isMC && writeOnlyTriggers) {
591 ANA_MSG_DEBUG ("Event failed trigger");
592 return StatusCode::SUCCESS;
593 }
594
595 if (reprocZdc){
596 ANA_MSG_INFO ("Reprocessing ZDC in ZdcNtuple");
597 ANA_CHECK(m_zdcAnalysisTool->reprocessZdc());
598 }else{
599 ANA_MSG_DEBUG ("No ZDC reprocessing");
600 }
601
602 processZdcNtupleFromModules(); // same model in both cases -- processZdcNtuple() goes straight to the anlaysis tool, which is good for debugging
603
604 if(m_isMC){
606 }
607
608 //tracks used to go here
609
611
612 if ((!(zdcCalib || zdcLaser || zdcOnly || zdcInj)) && enableID)
613 {
614 ANA_MSG_DEBUG("Trying to extract InDetTrackParticles from evtStore()=" << evtStore());
615 ANA_CHECK(evtStore()->retrieve( m_trackParticles, "InDetTrackParticles") );
616 size_t n = m_trackParticles->size();
617 ANA_MSG_DEBUG("Done w/ extracting InDetTrackParticles with size = " << n);
618
619 if (n > trackLimit && trackLimitReject) return StatusCode::SUCCESS;
620 }
621
622 if (!(zdcCalib || zdcLaser || zdcOnly || zdcInj))
623 {
624
625 // PLEASE NOTE: the commented sections here will be restored once we have a better sense of the Run 3 HI data
626
627 // Global E_T quantities for centrality
628 if (enableCalo){
629 ANA_CHECK(evtStore()->retrieve( m_caloSums, "CaloSums") );
630 ANA_CHECK(evtStore()->retrieve( m_eventShapes, "HIEventShape") );
631
633 ANA_CHECK(evtStore()->retrieve( m_lvl1EnergySumRoI, "LVL1EnergySumRoI") );
634
635 processFCal();
636 }
637
638 // MBTS quantities, but may require a derivation to be accessible (required STDM6 in pp)
639 //ANA_CHECK(evtStore()->retrieve( m_mbtsInfo, "MBTSForwardEventInfo") );
640 //ANA_CHECK(evtStore()->retrieve( m_mbtsModules, "MBTSModules") );
641 //m_trigT2MbtsBits = 0;
642 //ANA_CHECK(evtStore()->retrieve( m_trigT2MbtsBits, "HLT_xAOD__TrigT2MbtsBitsContainer_T2Mbts") );
643 //processMBTS();
644
645 if (enableID){
646 ANA_CHECK(evtStore()->retrieve( m_primaryVertices, "PrimaryVertices") );
647 processInDet();
648 }
649
650
651 if (enableClusters){
652 ANA_CHECK(evtStore()->retrieve( m_caloClusters, "CaloCalTopoClusters"));
654 }
655
656 // Gaps will require some evaluation of Run 3 performance of the clusters
657 processGaps();
658
660 ANA_CHECK(evtStore()->retrieve( m_afpProtons, "AFPProtonContainer"));
662 }
663 }
664
666 {
667 tree( "zdcTree" )->Fill();
668 }
669
670 return StatusCode::SUCCESS;
671}
672
674{
675
678
679 ANA_MSG_DEBUG ("copying already processed info!");
680
681 //Reset the truth separately since it has a different range
682 for(int iside : {0,1}){
683 for(int imod = 0; imod < 7; ++imod){
684 t_ZdcModuleTruthTotal[iside][imod] = 0;
685 t_ZdcModuleTruthInvis[iside][imod] = 0;
686 t_ZdcModuleTruthEM[iside][imod] = 0;
687 t_ZdcModuleTruthNonEM[iside][imod] = 0;
688 t_ZdcModuleTruthEscaped[iside][imod] = 0;
689 t_ZdcModuleTruthNphotons[iside][imod] = 0;
690 }
691 for(int ch = 0; ch < 16; ++ch){
692 t_RpdModuleTruthNphotons[iside][ch] = 0;
693 }
694 }
695
696 for (size_t iside = 0; iside < 2; iside++)
697 {
698 t_ZdcAmp[iside] = 0; t_ZdcEnergy[iside] = 0; t_ZdcEnergyErr[iside] = 0;t_ZdcTime[iside] = 0; t_ZdcStatus[iside] = 0;
699 t_ZdcNLEnergy[iside] = 0;t_ZdcNLEnergyErr[iside] = 0;
700 t_ZdcTrigEff[iside] = 0;t_ZdcLucrodTriggerSideAmp[iside] = 0; t_ZdcLucrodTriggerSideAmpLG[iside] = 0; t_ZdcTruthTotal[iside] = 0;
701 t_ZdcTruthInvis[iside] = 0; t_ZdcTruthEM[iside] = 0; t_ZdcTruthNonEM[iside] = 0;
702 t_ZdcTruthEscaped[iside] = 0;
703 for (int imod = 0; imod < 4; imod++)
704 {
705 t_ZdcModuleAmp[iside][imod] = 0; t_ZdcModuleAmpUncorr[iside][imod] = 0;
706 t_ZdcModuleTime[iside][imod] = 0; t_ZdcModuleStatus[iside][imod] = 0;
707
708 t_ZdcModuleCalibAmp[iside][imod] = 0; t_ZdcModuleCalibTime[iside][imod] = 0; t_ZdcModuleChisq[iside][imod] = 0; t_ZdcModuleChisqRatio[iside][imod] = 0; t_ZdcModuleFitAmp[iside][imod] = 0;
709 t_ZdcModuleFitT0[iside][imod] = 0; t_ZdcModuleBkgdMaxFraction[iside][imod] = 0; t_ZdcModuleAmpError[iside][imod] = 0;
710 t_ZdcModuleMinDeriv2nd[iside][imod] = 0; t_ZdcModulePresample[iside][imod] = 0; t_ZdcModulePreSampleAmp[iside][imod] = 0;
711 t_ZdcLucrodTriggerAmp[iside][imod] = 0;t_ZdcLucrodTriggerAmpLG[iside][imod] = 0;
712 t_ZdcModuleMaxADC[iside][imod] = 0; t_ZdcModuleMaxADCHG[iside][imod] = 0; t_ZdcModuleMaxADCLG[iside][imod] = 0;
713 t_ZdcModulePeakADCHG[iside][imod] = 0; t_ZdcModulePeakADCLG[iside][imod] = 0;
714 t_ZdcModuleAmpLGRefit[iside][imod] = 0; t_ZdcModuleAmpCorrLGRefit[iside][imod] = 0;
715 t_ZdcModuleT0LGRefit[iside][imod] = 0; t_ZdcModuleT0SubLGRefit[iside][imod] = 0; t_ZdcModuleChisqLGRefit[iside][imod] = 0;
716
718 {
719 for (int ig=0;ig<2;ig++)
720 {
721 for (int id=0;id<2;id++)
722 {
723 for (unsigned int isamp=0;isamp<nsamplesZdc;isamp++)
724 {
725 if (nsamplesZdc==7) t_raw7[iside][imod][ig][id][isamp]=0;
726 if (nsamplesZdc==15) t_raw15[iside][imod][ig][id][isamp]=0;
727 if (nsamplesZdc==24) t_raw24[iside][imod][ig][id][isamp]=0;
728 if (nsamplesZdc==32) t_raw32[iside][imod][ig][id][isamp]=0;
729 if (nsamplesZdc==40) t_raw40[iside][imod][ig][id][isamp]=0;
730 }
731 }
732 }
733 if (nsamplesZdc==24||nsamplesZdc==32||nsamplesZdc==40)
734 {
735 for (int ch=0;ch<16;ch++)
736 {
737 for (unsigned int isamp=0;isamp<nsamplesZdc;isamp++)
738 {
739 t_rpdRaw[iside][ch][isamp]=0;
740 }
741 }
742 }
743 }
744 if (enableRPD)
745 {
746 for (int ch = 0; ch < 16; ch++) {
747 t_RpdChannelBaseline[iside][ch] = 0;
748 std::fill(t_RpdChannelPileupExpFitParams[iside][ch], t_RpdChannelPileupExpFitParams[iside][ch] + 2, 0);
750 std::fill(t_RpdChannelPileupExpFitParamErrs[iside][ch], t_RpdChannelPileupExpFitParamErrs[iside][ch] + 2, 0);
752 t_RpdChannelPileupExpFitMSE[iside][ch] = 0;
754 t_RpdChannelAmplitude[iside][ch] = 0;
755 t_RpdChannelAmplitudeCalib[iside][ch] = 0;
756 t_RpdChannelMaxADC[iside][ch] = 0;
757 t_RpdChannelMaxADCCalib[iside][ch] = 0;
758 t_RpdChannelMaxSample[iside][ch] = 0;
759 t_RpdChannelStatus[iside][ch] = 0;
760 t_RpdChannelPileupFrac[iside][ch] = 0;
761 }
762 t_RpdSideStatus[iside] = 0;
763 }
764 if (enableCentroid)
765 {
766 t_centroidStatus[iside] = 0;
767 std::fill(t_RPDChannelSubtrAmp[iside], t_RPDChannelSubtrAmp[iside] + 16, 0);
768 t_RPDSubtrAmpSum[iside] = 0;
771 t_xCentroidPreAvgSubtr[iside] = 0;
772 t_yCentroidPreAvgSubtr[iside] = 0;
773 t_xCentroid[iside] = 0;
774 t_yCentroid[iside] = 0;
775 std::fill(t_xRowCentroid[iside], t_xRowCentroid[iside] + 4, 0);
776 std::fill(t_yColCentroid[iside], t_yColCentroid[iside] + 4, 0);
777 t_reactionPlaneAngle[iside] = 0;
778 }
779 }
780 }
781
782 t_ZdcModuleMask = 0;
783 if (enableCentroid) {
785 t_centroidEventValid = false;
787 }
788
789 /*
790 if (t_zdcEventInfoError == xAOD::EventInfo::Error)
791 {
792 ANA_MSG_INFO("ZDC event failed EventInfo error check - aborting!");
793 return;
794 }
795 */
796
797 static const SG::ConstAccessor<char> centroidEventValidAcc("centroidEventValid" + auxSuffix);
798 static const SG::ConstAccessor<float> cosDeltaReactionPlaneAngleAcc("cosDeltaReactionPlaneAngle" + auxSuffix);
799 static const SG::ConstAccessor<float> CalibEnergyAcc("CalibEnergy"+auxSuffix);
800 static const SG::ConstAccessor<float> CalibEnergyErrAcc("CalibEnergyErr"+auxSuffix);
801 static const SG::ConstAccessor<float> NLCalibEnergyAcc("NLCalibEnergy"+auxSuffix);
802 static const SG::ConstAccessor<float> NLCalibEnergyErrAcc("NLCalibEnergyErr"+auxSuffix);
803 static const SG::ConstAccessor<float> UncalibSumAcc("UncalibSum"+auxSuffix);
804 static const SG::ConstAccessor<float> UncalibSumErrAcc("UncalibSumErr"+auxSuffix);
805 static const SG::ConstAccessor<float> AverageTimeAcc("AverageTime"+auxSuffix);
806 static const SG::ConstAccessor<unsigned int> StatusAcc("Status"+auxSuffix);
807 static const SG::ConstAccessor<unsigned int> ModuleMaskAcc("ModuleMask"+auxSuffix);
808 static const SG::ConstAccessor<float> TruthTotalEnergyAcc("TruthTotalEnergy" + auxSuffix);
809 static const SG::ConstAccessor<float> TruthInvisibleEnergyAcc("TruthInvisibleEnergy" + auxSuffix);
810 static const SG::ConstAccessor<float> TruthEMEnergyAcc("TruthEMEnergy" + auxSuffix);
811 static const SG::ConstAccessor<float> TruthNonEMEnergyAcc("TruthNonEMEnergy" + auxSuffix);
812 static const SG::ConstAccessor<float> TruthEscapedEnergyAcc("TruthEscapedEnergy" + auxSuffix);
813 static const SG::ConstAccessor<unsigned int> centroidStatusAcc("centroidStatus" + auxSuffix);
814 static const SG::ConstAccessor<std::vector<float> > RPDChannelSubtrAmpAcc("RPDChannelSubtrAmp" + auxSuffix);
815 static const SG::ConstAccessor<float> RPDSubtrAmpSumAcc("RPDSubtrAmpSum" + auxSuffix);
816 static const SG::ConstAccessor<float> xCentroidPreGeomCorPreAvgSubtrAcc("xCentroidPreGeomCorPreAvgSubtr" + auxSuffix);
817 static const SG::ConstAccessor<float> yCentroidPreGeomCorPreAvgSubtrAcc("yCentroidPreGeomCorPreAvgSubtr" + auxSuffix);
818 static const SG::ConstAccessor<float> xCentroidPreAvgSubtrAcc("xCentroidPreAvgSubtr" + auxSuffix);
819 static const SG::ConstAccessor<float> yCentroidPreAvgSubtrAcc("yCentroidPreAvgSubtr" + auxSuffix);
820 static const SG::ConstAccessor<float> xCentroidAcc("xCentroid" + auxSuffix);
821 static const SG::ConstAccessor<float> yCentroidAcc("yCentroid" + auxSuffix);
822 static const SG::ConstAccessor<std::vector<float> > xRowCentroidAcc("xRowCentroid" + auxSuffix);
823 static const SG::ConstAccessor<std::vector<float> > yColCentroidAcc("yColCentroid" + auxSuffix);
824 static const SG::ConstAccessor<float> reactionPlaneAngleAcc("reactionPlaneAngle" + auxSuffix);
825 static const SG::ConstAccessor<unsigned int> RPDStatusAcc("RPDStatus" + auxSuffix);
826 static const SG::ConstAccessor<unsigned int> nPhotonsAcc("nPhotons" + auxSuffix);
827 static const SG::ConstAccessor<float> CalibTimeAcc("CalibTime" + auxSuffix);
828 static const SG::ConstAccessor<float> AmplitudeAcc("Amplitude" + auxSuffix);
829 static const SG::ConstAccessor<float> AmplitudeNoNonLinAcc("AmpNoNonLin" + auxSuffix);
830 static const SG::ConstAccessor<float> TimeAcc("Time" + auxSuffix);
831 static const SG::ConstAccessor<float> ChisqAcc("Chisq" + auxSuffix);
832 static const SG::ConstAccessor<float> ChisqRatioAcc("ChisqRatio" + auxSuffix);
833 static const SG::ConstAccessor<float> FitAmpAcc("FitAmp" + auxSuffix);
834 static const SG::ConstAccessor<float> FitAmpErrorAcc("FitAmpError" + auxSuffix);
835 static const SG::ConstAccessor<float> FitT0Acc("FitT0" + auxSuffix);
836 static const SG::ConstAccessor<float> BkgdMaxFractionAcc("BkgdMaxFraction" + auxSuffix);
837 static const SG::ConstAccessor<float> MinDeriv2ndAcc("MinDeriv2nd" + auxSuffix);
838 static const SG::ConstAccessor<float> PresampleAcc("Presample" + auxSuffix);
839 static const SG::ConstAccessor<float> PreSampleAmpAcc("PreSampleAmp" + auxSuffix);
840 static const SG::ConstAccessor<float> RPDChannelBaselineAcc("RPDChannelBaseline" + auxSuffix);
841 static const SG::ConstAccessor<std::vector<float> > RPDChannelPileupExpFitParamsAcc("RPDChannelPileupExpFitParams" + auxSuffix);
842 static const SG::ConstAccessor<std::vector<float> > RPDChannelPileupExpFitParamErrsAcc("RPDChannelPileupExpFitParamErrs" + auxSuffix);
843 static const SG::ConstAccessor<std::vector<float> > RPDChannelPileupStretchedExpFitParamsAcc("RPDChannelPileupStretchedExpFitParams" + auxSuffix);
844 static const SG::ConstAccessor<std::vector<float> > RPDChannelPileupStretchedExpFitParamErrsAcc("RPDChannelPileupStretchedExpFitParamErrs" + auxSuffix);
845 static const SG::ConstAccessor<float> RPDChannelPileupExpFitMSEAcc("RPDChannelPileupExpFitMSE" + auxSuffix);
846 static const SG::ConstAccessor<float> RPDChannelPileupStretchedExpFitMSEAcc("RPDChannelPileupStretchedExpFitMSE" + auxSuffix);
847 static const SG::ConstAccessor<float> RPDChannelAmplitudeAcc("RPDChannelAmplitude" + auxSuffix);
848 static const SG::ConstAccessor<float> RPDChannelAmplitudeCalibAcc("RPDChannelAmplitudeCalib" + auxSuffix);
849 static const SG::ConstAccessor<float> RPDChannelMaxADCAcc("RPDChannelMaxADC" + auxSuffix);
850 static const SG::ConstAccessor<float> RPDChannelMaxADCCalibAcc("RPDChannelMaxADCCalib" + auxSuffix);
851 static const SG::ConstAccessor<unsigned int> RPDChannelMaxSampleAcc("RPDChannelMaxSample" + auxSuffix);
852 static const SG::ConstAccessor<unsigned int> RPDChannelStatusAcc("RPDChannelStatus" + auxSuffix);
853 static const SG::ConstAccessor<float> RPDChannelPileupFracAcc("RPDChannelPileupFrac" + auxSuffix);
854 static const SG::ConstAccessor<float> AmpLGRefitAcc("AmpLGRefit" + auxSuffix);
855 static const SG::ConstAccessor<float> T0LGRefitAcc("T0LGRefit" + auxSuffix);
856 static const SG::ConstAccessor<float> T0SubLGRefitAcc("T0SubLGRefit" + auxSuffix);
857 static const SG::ConstAccessor<float> ChisqLGRefitAcc("ChisqLGRefit" + auxSuffix);
858
859 static const SG::ConstAccessor<uint16_t> LucrodTriggerAmpAcc("LucrodTriggerAmp");
860 static const SG::ConstAccessor<uint16_t> LucrodTriggerAmpLGAcc("LucrodTriggerAmpLG");
861 static const SG::ConstAccessor<uint16_t> LucrodTriggerSideAmpAcc("LucrodTriggerSideAmp");
862 static const SG::ConstAccessor<uint16_t> LucrodTriggerSideAmpLGAcc("LucrodTriggerSideAmpLG");
863 static const SG::ConstAccessor<float> Amplitude0Acc("Amplitude");
864 static const SG::ConstAccessor<float> MaxADCAcc("MaxADC");
865 static const SG::ConstAccessor<float> MaxADCHGAcc("MaxADCHG");
866 static const SG::ConstAccessor<float> MaxADCLGAcc("MaxADCLG");
867 static const SG::ConstAccessor<float> PeakADCHGAcc("PeakADCHG");
868 static const SG::ConstAccessor<float> PeakADCLGAcc("PeakADCLG");
869 static const SG::ConstAccessor<std::vector<uint16_t> > g0d0DataAcc("g0d0Data");
870 static const SG::ConstAccessor<std::vector<uint16_t> > g0d1DataAcc("g0d1Data");
871 static const SG::ConstAccessor<std::vector<uint16_t> > g1d0DataAcc("g1d0Data");
872 static const SG::ConstAccessor<std::vector<uint16_t> > g1d1DataAcc("g1d1Data");
873 static const SG::ConstAccessor<std::vector<uint16_t> > g0dataAcc("g0data");
874 static const SG::ConstAccessor<std::vector<uint16_t> > g1dataAcc("g1data");
875
878 t_rpdDecodingError = rpdErr;
879 t_zdcDecodingError = zdcErr;
880 if (enableCentroid) {
881 // locate global sum (only if centroid is needed)
882 xAOD::ZdcModule const * globalSum = nullptr;
883 for (auto const * zdcSum : *zdcSums) {
884 if (zdcSum->zdcSide() == 0) {
885 globalSum = zdcSum;
886 break;
887 }
888 }
889 if (!globalSum) {
890 ANA_MSG_ERROR("unable to locate global ZdcSum (side = 0)");
892 }
893 else {
894 t_centroidDecorationsAvailable = centroidStatusAcc.isAvailable(*globalSum);
895 }
896 }
897
898 if (rpdErr||zdcErr) ANA_MSG_WARNING( "Decoding errors ZDC=" << zdcErr << " RPD=" << rpdErr );
899
900 if (zdcSums.ptr())
901 {
902 ANA_MSG_DEBUG( "accessing ZdcSums" );
903 for (const auto zdcSum : *zdcSums)
904 {
905 if (zdcSum->zdcSide()==0) {
906 // trap new global sum
908 t_centroidEventValid = centroidEventValidAcc(*zdcSum);
909 t_cosDeltaReactionPlaneAngle = cosDeltaReactionPlaneAngleAcc(*zdcSum);
910 }
911 // no other branches are filled from global sum - skip to the real sides (C=-1 and A=1)
912 continue;
913 }
914 int iside = 0;
915 if (zdcSum->zdcSide() > 0) iside = 1;
916
917 //static SG::AuxElement::ConstAccessor< float > acc( "CalibEnergy" );
918 //t_ZdcEnergy[iside] = acc(*zdcSum);
919
920 if (enableZDC && !zdcErr)
921 {
922 t_ZdcEnergy[iside] = CalibEnergyAcc(*zdcSum);
923 t_ZdcEnergyErr[iside] = CalibEnergyErrAcc(*zdcSum);
924 if (NLCalibEnergyAcc.isAvailable(*zdcSum)) {
925 t_ZdcNLEnergy[iside] = NLCalibEnergyAcc(*zdcSum);
926 t_ZdcNLEnergyErr[iside] = NLCalibEnergyErrAcc(*zdcSum);
927 }
928 t_ZdcAmp[iside] = UncalibSumAcc(*zdcSum);
929 t_ZdcAmpErr[iside] = UncalibSumErrAcc(*zdcSum);
930 if (LucrodTriggerSideAmpAcc.isAvailable(*zdcSum))
931 t_ZdcLucrodTriggerSideAmp[iside] = LucrodTriggerSideAmpAcc(*zdcSum);
932 if (LucrodTriggerSideAmpLGAcc.isAvailable(*zdcSum))
933 t_ZdcLucrodTriggerSideAmpLG[iside] = LucrodTriggerSideAmpLGAcc(*zdcSum);
934
935 ANA_MSG_VERBOSE("processZdcNtupleFromModules: ZdcSum energy = " << t_ZdcEnergy[iside]);
936
937 t_ZdcTime[iside] = AverageTimeAcc(*zdcSum);
938 t_ZdcStatus[iside] = StatusAcc(*zdcSum);
939 t_ZdcModuleMask += ( ModuleMaskAcc(*zdcSum) << 4 * iside);
940
941 if(m_isMC){
942 ANA_MSG_DEBUG("Filling sum truth");
943 t_ZdcTruthTotal [iside] = TruthTotalEnergyAcc(*zdcSum);
944 t_ZdcTruthInvis [iside] = TruthInvisibleEnergyAcc(*zdcSum);
945 t_ZdcTruthEM [iside] = TruthEMEnergyAcc(*zdcSum);
946 t_ZdcTruthNonEM [iside] = TruthNonEMEnergyAcc(*zdcSum);
947 t_ZdcTruthEscaped[iside] = TruthEscapedEnergyAcc(*zdcSum);
948 }
949
950 }
951
952 if (enableRPD)
953 {
954 if (enableRPDAmp && !rpdErr)
955 {
956 t_RpdSideStatus[iside] = RPDStatusAcc(*zdcSum);
957 }
959 {
960 t_centroidStatus[iside] = centroidStatusAcc(*zdcSum);
961 std::vector<float> const& rpdChannelSubtrAmp = RPDChannelSubtrAmpAcc(*zdcSum);
962 std::copy(rpdChannelSubtrAmp.begin(), rpdChannelSubtrAmp.end(), t_RPDChannelSubtrAmp[iside]);
963 t_RPDSubtrAmpSum[iside] = RPDSubtrAmpSumAcc(*zdcSum);
964 t_xCentroidPreGeomCorPreAvgSubtr[iside] = xCentroidPreGeomCorPreAvgSubtrAcc(*zdcSum);
965 t_yCentroidPreGeomCorPreAvgSubtr[iside] = yCentroidPreGeomCorPreAvgSubtrAcc(*zdcSum);
966 t_xCentroidPreAvgSubtr[iside] = xCentroidPreAvgSubtrAcc(*zdcSum);
967 t_yCentroidPreAvgSubtr[iside] = yCentroidPreAvgSubtrAcc(*zdcSum);
968 t_xCentroid[iside] = xCentroidAcc(*zdcSum);
969 t_yCentroid[iside] = yCentroidAcc(*zdcSum);
970 std::vector<float> const& xRowCentroid = xRowCentroidAcc(*zdcSum);
971 std::copy(xRowCentroid.begin(), xRowCentroid.end(), t_xRowCentroid[iside]);
972 std::vector<float> const& yColCentroid = yColCentroidAcc(*zdcSum);
973 std::copy(yColCentroid.begin(), yColCentroid.end(), t_yColCentroid[iside]);
974 t_reactionPlaneAngle[iside] = reactionPlaneAngleAcc(*zdcSum);
975 }
976 }
977 }
978 }
979
980 ANA_MSG_DEBUG( "accessing ZdcModules" );
981
982 if (zdcModules.ptr())
983 {
984 for (const auto zdcMod : *zdcModules)
985 {
986 int iside = 0;
987 if (zdcMod->zdcSide() > 0) iside = 1;
988 int imod = zdcMod->zdcModule();
989
990 if (m_isMC){
991 //Calib hits are only stored in channel 0 of the RPD
992 if(!(imod == 4 && zdcMod->zdcChannel() != 0)){
993 t_ZdcModuleTruthTotal [iside][imod] = TruthTotalEnergyAcc(*zdcMod);
994 t_ZdcModuleTruthInvis [iside][imod] = TruthInvisibleEnergyAcc(*zdcMod);
995 t_ZdcModuleTruthEM [iside][imod] = TruthEMEnergyAcc(*zdcMod);
996 t_ZdcModuleTruthNonEM [iside][imod] = TruthNonEMEnergyAcc(*zdcMod);
997 t_ZdcModuleTruthEscaped[iside][imod] = TruthEscapedEnergyAcc(*zdcMod);
998 t_ZdcModuleTruthNphotons[iside][imod] = nPhotonsAcc(*zdcMod);
999 }
1000 //Calib hits are stored for all modules
1001 //Other data is only valid for module 1-4
1002 if(imod > 4) continue;
1003 }
1004
1005 ANA_MSG_VERBOSE ("Module " << zdcMod->zdcSide() << " " << zdcMod->zdcModule() << " amp:" << AmplitudeAcc(*zdcMod));
1006
1007 if (zdcMod->zdcType() == 0 && !zdcErr)
1008 {
1009 // ZDC energy type modules
1010 t_ZdcModuleCalibAmp[iside][imod] = CalibEnergyAcc(*zdcMod);
1011 t_ZdcModuleCalibTime[iside][imod] = CalibTimeAcc(*zdcMod);
1012 t_ZdcModuleStatus[iside][imod] = StatusAcc(*zdcMod);
1013 if (t_ZdcModuleAmp[iside][imod] != 0.)
1014 Warning("processZdcNtupleFromModules", "overwriting side %d module %d!", iside, imod);
1015 t_ZdcModuleAmp[iside][imod] = AmplitudeAcc(*zdcMod);
1016 t_ZdcModuleAmpUncorr[iside][imod] = AmplitudeNoNonLinAcc(*zdcMod);
1017 t_ZdcModuleTime[iside][imod] = TimeAcc(*zdcMod);
1018
1019 t_ZdcModuleChisq[iside][imod] = ChisqAcc(*zdcMod);
1020 t_ZdcModuleChisqRatio[iside][imod] = ChisqRatioAcc(*zdcMod);
1021 t_ZdcModuleFitAmp[iside][imod] = FitAmpAcc(*zdcMod);
1022 t_ZdcModuleAmpError[iside][imod] = FitAmpErrorAcc(*zdcMod);
1023 t_ZdcModuleFitT0[iside][imod] = FitT0Acc(*zdcMod);
1024 t_ZdcModuleBkgdMaxFraction[iside][imod] = BkgdMaxFractionAcc(*zdcMod);
1025 t_ZdcModuleMinDeriv2nd[iside][imod] = MinDeriv2ndAcc(*zdcMod);
1026 t_ZdcModulePresample[iside][imod] = PresampleAcc(*zdcMod);
1027 t_ZdcModulePreSampleAmp[iside][imod] = PreSampleAmpAcc(*zdcMod);
1028
1029 if (AmpLGRefitAcc.isAvailable(*zdcMod)) {
1030 t_ZdcModuleAmpLGRefit[iside][imod] = AmpLGRefitAcc(*zdcMod);
1031 t_ZdcModuleT0LGRefit[iside][imod] = T0LGRefitAcc(*zdcMod);
1032 t_ZdcModuleT0SubLGRefit[iside][imod] = T0SubLGRefitAcc(*zdcMod);
1033 t_ZdcModuleChisqLGRefit[iside][imod] = ChisqLGRefitAcc(*zdcMod);
1034 }
1035
1036 if (LucrodTriggerAmpAcc.isAvailable(*zdcMod))
1037 t_ZdcLucrodTriggerAmp[iside][imod] = LucrodTriggerAmpAcc(*zdcMod);
1038 if (LucrodTriggerAmpLGAcc.isAvailable(*zdcMod))
1039 t_ZdcLucrodTriggerAmpLG[iside][imod] = LucrodTriggerAmpLGAcc(*zdcMod);
1040
1041 if (MaxADCAcc.isAvailable(*zdcMod))
1042 t_ZdcModuleMaxADC[iside][imod] = MaxADCAcc(*zdcMod);
1043 if (MaxADCHGAcc.isAvailable(*zdcMod))
1044 t_ZdcModuleMaxADCHG[iside][imod] = MaxADCHGAcc(*zdcMod);
1045 if (MaxADCLGAcc.isAvailable(*zdcMod))
1046 t_ZdcModuleMaxADCLG[iside][imod] = MaxADCLGAcc(*zdcMod);
1047 if (PeakADCHGAcc.isAvailable(*zdcMod))
1048 t_ZdcModulePeakADCHG[iside][imod] = PeakADCHGAcc(*zdcMod);
1049 if (PeakADCLGAcc.isAvailable(*zdcMod))
1050 t_ZdcModulePeakADCLG[iside][imod] = PeakADCLGAcc(*zdcMod);
1051
1052 if (enableOutputSamples && !zdcErr)
1053 {
1054 for (unsigned int isamp = 0; isamp < nsamplesZdc; isamp++) // 7 samples
1055 {
1056 if (nsamplesZdc == 7)
1057 {
1058 t_raw7[iside][imod][0][0][isamp] = g0d0DataAcc(*zdcMod).at(isamp);
1059 t_raw7[iside][imod][0][1][isamp] = g0d1DataAcc(*zdcMod).at(isamp);
1060 t_raw7[iside][imod][1][0][isamp] = g1d0DataAcc(*zdcMod).at(isamp);
1061 t_raw7[iside][imod][1][1][isamp] = g1d1DataAcc(*zdcMod).at(isamp);
1062 }
1063
1064 if (nsamplesZdc == 15)
1065 {
1066 t_raw15[iside][imod][0][0][isamp] = g0d0DataAcc(*zdcMod).at(isamp);
1067 t_raw15[iside][imod][0][1][isamp] = g0d1DataAcc(*zdcMod).at(isamp);
1068 t_raw15[iside][imod][1][0][isamp] = g1d0DataAcc(*zdcMod).at(isamp);
1069 t_raw15[iside][imod][1][1][isamp] = g1d1DataAcc(*zdcMod).at(isamp);
1070 }
1071
1072 if (nsamplesZdc == 24)
1073 {
1074 t_raw24[iside][imod][0][0][isamp] = g0dataAcc(*zdcMod).at(isamp);
1075 t_raw24[iside][imod][1][0][isamp] = g1dataAcc(*zdcMod).at(isamp);
1076 }
1077 if (nsamplesZdc == 32)
1078 {
1079 t_raw32[iside][imod][0][0][isamp] = g0dataAcc(*zdcMod).at(isamp);
1080 t_raw32[iside][imod][1][0][isamp] = g1dataAcc(*zdcMod).at(isamp);
1081 }
1082 if (nsamplesZdc == 40)
1083 {
1084 t_raw40[iside][imod][0][0][isamp] = g0dataAcc(*zdcMod).at(isamp);
1085 t_raw40[iside][imod][1][0][isamp] = g1dataAcc(*zdcMod).at(isamp);
1086 }
1087 }
1088 }
1089 }
1090 else if (zdcMod->zdcType() == 1 && nsamplesZdc == 24)
1091 {
1092 // this is the RPD
1093 if (enableRPD)
1094 {
1095 if (enableRPDAmp && !rpdErr)
1096 {
1097 t_RpdChannelBaseline[iside][zdcMod->zdcChannel()] = RPDChannelBaselineAcc(*zdcMod);
1098 std::vector<float> const &rpdChannelPileupExpFitParams = RPDChannelPileupExpFitParamsAcc(*zdcMod);
1099 std::copy(rpdChannelPileupExpFitParams.begin(), rpdChannelPileupExpFitParams.end(), t_RpdChannelPileupExpFitParams[iside][zdcMod->zdcChannel()]);
1100 std::vector<float> const &rpdChannelPileupExpFitParamErrs = RPDChannelPileupExpFitParamErrsAcc(*zdcMod);
1101 std::copy(rpdChannelPileupExpFitParamErrs.begin(), rpdChannelPileupExpFitParamErrs.end(), t_RpdChannelPileupExpFitParamErrs[iside][zdcMod->zdcChannel()]);
1102 std::vector<float> const &rpdChannelPileupStretchedExpFitParams = RPDChannelPileupStretchedExpFitParamsAcc(*zdcMod);
1103 std::copy(rpdChannelPileupStretchedExpFitParams.begin(), rpdChannelPileupStretchedExpFitParams.end(), t_RpdChannelPileupStretchedExpFitParams[iside][zdcMod->zdcChannel()]);
1104 std::vector<float> const &rpdChannelPileupStretchedExpFitParamErrs = RPDChannelPileupStretchedExpFitParamErrsAcc(*zdcMod);
1105 std::copy(rpdChannelPileupStretchedExpFitParamErrs.begin(), rpdChannelPileupStretchedExpFitParamErrs.end(), t_RpdChannelPileupStretchedExpFitParamErrs[iside][zdcMod->zdcChannel()]);
1106 t_RpdChannelPileupExpFitMSE[iside][zdcMod->zdcChannel()] = RPDChannelPileupExpFitMSEAcc(*zdcMod);
1107 t_RpdChannelPileupStretchedExpFitMSE[iside][zdcMod->zdcChannel()] = RPDChannelPileupStretchedExpFitMSEAcc(*zdcMod);
1108 t_RpdChannelAmplitude[iside][zdcMod->zdcChannel()] = RPDChannelAmplitudeAcc(*zdcMod);
1109 t_RpdChannelAmplitudeCalib[iside][zdcMod->zdcChannel()] = RPDChannelAmplitudeCalibAcc(*zdcMod);
1110 t_RpdChannelMaxADC[iside][zdcMod->zdcChannel()] = RPDChannelMaxADCAcc(*zdcMod);
1111 t_RpdChannelMaxADCCalib[iside][zdcMod->zdcChannel()] = RPDChannelMaxADCCalibAcc(*zdcMod);
1112 t_RpdChannelMaxSample[iside][zdcMod->zdcChannel()] = RPDChannelMaxSampleAcc(*zdcMod);
1113 t_RpdChannelStatus[iside][zdcMod->zdcChannel()] = RPDChannelStatusAcc(*zdcMod);
1114 t_RpdChannelPileupFrac[iside][zdcMod->zdcChannel()] = RPDChannelPileupFracAcc(*zdcMod);
1115 if(m_isMC){
1116 t_RpdModuleTruthNphotons[iside][zdcMod->zdcChannel()] = nPhotonsAcc(*zdcMod);
1117 }
1118 }
1120 {
1121 std::vector<uint16_t> const &rpdChannelRaw = g0dataAcc(*zdcMod);
1122 std::copy(rpdChannelRaw.begin(), rpdChannelRaw.end(), t_rpdRaw[iside][zdcMod->zdcChannel()]);
1123 }
1124 }
1125 }
1126 }
1127 }
1128 else
1129 {
1130 ANA_MSG_INFO("No ZdcModules" << auxSuffix << " when expected!");
1131 }
1132
1133 if (msgLvl (MSG::VERBOSE))
1134 {
1135 std::ostringstream message;
1136 message << "Dump zdc_ZdcModuleAmp: ";
1137 for (int iside = 0; iside < 2; iside++)
1138 {
1139 for (int imod = 0; imod < 4; imod++)
1140 {
1141 message << t_ZdcModuleAmp[iside][imod] << " ";
1142 }
1143 }
1144 }
1145}
1146
1148 /******************************************
1149 * Get the McEventCollection (input)
1150 ******************************************/
1152 if (!mcEventCollection.isValid()){
1153 ANA_MSG_ERROR("Could not retrieve HepMC with key:" << m_mcEventCollectionName.key());
1154 return;
1155 }else{
1156 ANA_MSG_DEBUG("Retrieved HepMC with key: " << m_mcEventCollectionName.key());
1157 }
1158
1159 /******************************************
1160 * Clear and resize the output vectors
1161 ******************************************/
1162 t_ZdcTruthParticlePosx.clear();
1163 t_ZdcTruthParticlePosy.clear();
1164 t_ZdcTruthParticlePosz.clear();
1165 t_ZdcTruthParticleTime.clear();
1166 t_ZdcTruthParticlePx.clear();
1167 t_ZdcTruthParticlePy.clear();
1168 t_ZdcTruthParticlePz.clear();
1170 t_ZdcTruthParticlePid.clear();
1172
1173 /******************************************
1174 * Sort the particles into sides and add
1175 * them to the output vectors
1176 ******************************************/
1177 for (unsigned int cntr = 0; cntr < mcEventCollection->size(); ++cntr){
1178 const HepMC::GenEvent *genEvt = (*mcEventCollection)[cntr];
1179 for (const auto &vertex : genEvt->vertices()){
1180 for (const auto &particle : vertex->particles_in()){
1181 t_ZdcTruthParticlePosx.push_back(vertex->position().x());
1182 t_ZdcTruthParticlePosy.push_back(vertex->position().y());
1183 t_ZdcTruthParticlePosz.push_back(vertex->position().z());
1184 t_ZdcTruthParticleTime.push_back(vertex->position().t());
1185 t_ZdcTruthParticlePx.push_back(particle->momentum().x());
1186 t_ZdcTruthParticlePy.push_back(particle->momentum().y());
1187 t_ZdcTruthParticlePz.push_back(particle->momentum().z());
1188 t_ZdcTruthParticleEnergy.push_back(particle->momentum().e());
1189 t_ZdcTruthParticlePid.push_back(particle->pdg_id());
1190 t_ZdcTruthParticleStatus.push_back(particle->status());
1191 } // end loop over particles
1192 }// end loop over vertices
1193 }// end loop over HepMC events
1194}
1195
1197{
1198 ANA_MSG_DEBUG ("Processing trigger");
1199
1200 bool passTrigger = false;
1201
1202 t_trigger = 0;
1203 t_trigger_TBP = 0;
1204
1205 for (int i = 0; i < 16; i++)
1206 {
1207 t_tav[i] = 0;
1208 t_tbp[i] = 0;
1209 }
1210
1211 if (m_trigDecision)
1212 {
1213 for (int i = 0; i < 16; i++)
1214 {
1215 t_tbp[i] = m_trigDecision->tbp().at(i);
1216 t_tav[i] = m_trigDecision->tav().at(i);
1217 ANA_MSG_DEBUG( "TD: " << i << " tbp: " << std::hex << t_tbp[i] << "\t" << t_tav[i] );
1218 }
1219 t_bunchGroup = m_trigDecision->bgCode();
1220 }
1221
1222 if (enableTrigger)
1223 {
1224
1225 int ic = 0;
1226 for (auto cg : m_chainGroups)
1227 {
1228
1229 if (zdcCalib)
1230 {
1231 std::string name = cg->getListOfTriggers().at(0);
1232 const unsigned int triggerbits = m_trigDecisionTool->isPassedBits(name);
1233 // deferred functionality
1234 //bool tbp = triggerbits&TrigDefs::L1_isPassedBeforePrescale;
1235 //bool tap = triggerbits&TrigDefs::L1_isPassedAfterPrescale;
1236 bool tav = triggerbits&TrigDefs::L1_isPassedAfterVeto;
1237 ANA_MSG_DEBUG("TD: checking trigger name=" << name<< " tav=" << tav);
1238 if (tav)
1239 {
1240 t_trigger += (1 << ic);
1241 t_decisions[ic] = true;
1242 t_prescales[ic] = cg->getPrescale();
1243 passTrigger = true;
1244 }
1245 else
1246 {
1247 t_decisions[ic] = 0;
1248 t_prescales[ic] = 0;
1249 }
1250 }
1251 else
1252 {
1253 if (cg->isPassed())
1254 {
1255 t_trigger += (1 << ic);
1256 t_decisions[ic] = true;
1257 t_prescales[ic] = cg->getPrescale();
1258 passTrigger = true;
1259 }
1260 else
1261 {
1262 t_decisions[ic] = 0;
1263 t_prescales[ic] = 0;
1264 }
1265 }
1266
1267 if (cg->isPassedBits()&TrigDefs::EF_passedRaw)
1268 {
1269 t_trigger_TBP += (1 << ic);
1270 }
1271
1272
1273 ic++;
1274 }
1275
1276 int irc = 0;
1277 for (auto cg : m_rerunChainGroups)
1278 {
1279 t_rerunDecisions[irc] = false;
1280 if (cg->isPassedBits()&TrigDefs::EF_passedRaw)
1281 {
1282 t_rerunDecisions[irc] = true;
1283 }
1284 irc++;
1285 }
1286
1287 }
1288
1289 return passTrigger;
1290}
1291
1293{
1294 ANA_MSG_DEBUG( "processing event info");
1295
1296 t_bcid = m_eventInfo->bcid();
1297 t_runNumber = m_eventInfo->runNumber();
1298 t_eventNumber = m_eventInfo->eventNumber();
1299 t_lumiBlock = m_eventInfo->lumiBlock();
1300 t_bunchGroup = -1;
1301 t_extendedLevel1ID = m_eventInfo->extendedLevel1ID();
1302 t_timeStamp = m_eventInfo->timeStamp();
1303 t_timeStampNSOffset = m_eventInfo->timeStampNSOffset();
1305 t_avgIntPerCrossing = m_eventInfo->averageInteractionsPerCrossing();
1306 t_actIntPerCrossing = m_eventInfo->actualInteractionsPerCrossing();
1309
1310 if ( !(m_eventCounter++ % 1000) || msgLvl(MSG::DEBUG))
1311 {
1312 ANA_MSG_INFO("Event# " << m_eventCounter << " Run " << m_eventInfo->runNumber() << " Event " << m_eventInfo->eventNumber() << " LB " << m_eventInfo->lumiBlock() );
1313 }
1314
1315}
1316
1318 // Check for new run number
1319 //
1321 //
1322 // Get access to the injector pulse steps for this run
1323 //
1325 if (!m_injMapRunToken.isValid()) {
1326 ANA_MSG_ERROR("Unable to obtain injector pulse steps for run " << t_runNumber);
1327 }
1328 else {
1329 unsigned int startLB = m_zdcInjPulserAmpMap->getFirstLumiBlock(m_injMapRunToken);
1330 unsigned int nsteps = m_zdcInjPulserAmpMap->getNumSteps(m_injMapRunToken);
1331 ANA_MSG_DEBUG("Successfully obtained injector pulse steps for run " << t_runNumber
1332 << ", first LB = " << startLB << ", number of steps = " << nsteps);
1333 }
1334
1335 // update the last run number to be the current run number
1337 }
1338
1340}
1341
1343{
1344 ANA_MSG_DEBUG("processInDet(): processing tracks & vertices!");
1345 t_ntrk = 0;
1346 t_nvx = 0;
1347 t_vxntrk = 0;
1348 t_vx_trk_index.clear();
1349 t_vxsumpt2 = 0;
1350 t_vxtype = 0;
1351 t_pvindex = -1;
1352 t_puvxntrk = 0;
1353 t_puvxsumpt = 0;
1355 t_vxnminbias = 0;
1356
1357 int i;
1358 for (i = 0; i < 3; i++) t_vx[i] = 0;
1359 for (i = 0; i < 6; i++) t_vxcov[i] = 0;
1360
1361 const xAOD::Vertex* primary_vertex = nullptr;
1362 size_t pv_index = -1;
1363 size_t vx_index = 0;
1364 float max_pileup_sumpT = 0.;
1365 int max_pileup_nTrack = 0;
1366 float max_pileup_z = 0;
1367 int nStrongPileup = 0;
1368
1369 t_nvtx = 0;
1370 t_vtx_type.clear();
1371 t_vtx_x.clear();
1372 t_vtx_y.clear();
1373 t_vtx_z.clear();
1374 t_vtx_ntrk_all.clear();
1375 t_vtx_sumpt2_all.clear();
1376 t_vtx_ntrk.clear();
1377 t_vtx_sumpt2.clear();
1378 t_vtx_trk_index.clear();
1379
1381 {
1382 ANA_MSG_DEBUG("processInDet: processing vertices");
1383
1384 t_nvx = m_primaryVertices->size();
1385
1386 static const SG::ConstAccessor<float> sumPt2Acc("sumPt2");
1387
1388 // start of new vertex representation
1389 t_nvtx = m_primaryVertices->size();
1390 for (const auto vertex : *m_primaryVertices)
1391 {
1392 float vtx_sumpt2 = 0;
1393 int vtx_ntrk = 0;
1394
1395 t_vtx_type.push_back(vertex->vertexType());
1396 t_vtx_x.push_back(0);
1397 t_vtx_y.push_back(0);
1398 t_vtx_z.push_back(vertex->z());
1399
1400 t_vtx_ntrk.push_back(vtx_ntrk);
1401 t_vtx_sumpt2.push_back(vtx_sumpt2 / 1e6);
1402 t_vtx_ntrk_all.push_back(vertex->nTrackParticles());
1403
1404 if (sumPt2Acc.isAvailable(*vertex))
1405 t_vtx_sumpt2_all.push_back(sumPt2Acc(*vertex));
1406 else
1407 t_vtx_sumpt2_all.push_back(-1);
1408
1409 std::vector<int16_t> trk_index;
1410 if ( m_trackParticles && vertex->nTrackParticles() <= trackLimit )
1411 {
1412 const std::vector< ElementLink< xAOD::TrackParticleContainer > >& vxTrackParticles = vertex->trackParticleLinks();
1413 for (size_t itrk = 0; itrk < vxTrackParticles.size(); itrk++)
1414 {
1415 ElementLink< xAOD::TrackParticleContainer > trkLink = vxTrackParticles.at(itrk);
1416 trk_index.push_back(trkLink.index());
1417 }
1418 }
1419 t_vtx_trk_index.push_back(trk_index);
1420
1421 // end of new vertex representation
1422
1423 if (vertex->vertexType() == xAOD::VxType::PriVtx)
1424 {
1425 primary_vertex = vertex;
1426 pv_index = vx_index;
1427 }
1428 if (vertex->vertexType() == xAOD::VxType::PileUp)
1429 {
1430 float pileup_sumpT = 0;
1431 int pileup_nTrack = 0;
1432 for (size_t itr = 0; itr < vertex->nTrackParticles(); itr++)
1433 {
1434 int track_quality = trackQuality(vertex->trackParticle(itr), vertex);
1435 if (track_quality != -1 && (track_quality & 128) != 0)
1436 {
1437 pileup_nTrack++;
1438 pileup_sumpT += vertex->trackParticle(itr)->pt();
1439 }
1440 }
1441 if (pileup_sumpT > max_pileup_sumpT)
1442 {
1443 max_pileup_sumpT = pileup_sumpT;
1444 max_pileup_nTrack = pileup_nTrack;
1445 max_pileup_z = vertex->z();
1446 }
1447 if (pileup_sumpT > 5e3 || pileup_nTrack > 5) nStrongPileup++;
1448 }
1449 vx_index++;
1450 }
1451 }
1452
1453 t_nstrong = nStrongPileup;
1454
1455 if (primary_vertex != nullptr)
1456 {
1457 t_vx[0] = primary_vertex->x();
1458 t_vx[1] = primary_vertex->y();
1459 t_vx[2] = primary_vertex->z();
1460 /*
1461 const std::vector<float>& cov = primary_vertex->covariance();
1462 */
1463 //for (size_t i=0;i<cov.size();i++)
1464 for (size_t i = 0; i < 6; i++)
1465 {
1466 //t_vxcov[i] = cov.at(i);
1467 t_vxcov[i] = 0;
1468 }
1469 t_vxntrk = primary_vertex->nTrackParticles();
1470 static const SG::ConstAccessor<float> sumPt2Acc("sumPt2");
1471 if (sumPt2Acc.isAvailable(*primary_vertex))
1472 t_vxsumpt2 = sumPt2Acc(*primary_vertex);
1473 else
1474 t_vxsumpt2 = 0;
1475
1476 t_vxtype = primary_vertex->vertexType();
1477 t_pvindex = pv_index;
1478 t_puvxz = max_pileup_z;
1479 t_puvxsumpt = max_pileup_sumpT;
1480 t_puvxntrk = max_pileup_nTrack;
1481
1482 const std::vector< ElementLink< xAOD::TrackParticleContainer > >& vxTrackParticles = primary_vertex->trackParticleLinks();
1483
1484 for (size_t itrk = 0; itrk < vxTrackParticles.size(); itrk++)
1485 {
1486 ElementLink< xAOD::TrackParticleContainer > trkLink = vxTrackParticles.at(itrk);
1487 if (!trkLink.isValid()) continue;
1488 if (m_trackParticles)
1489 {
1490 if (m_trackParticles->size() <= trackLimit)
1491 t_vx_trk_index.push_back(trkLink.index());
1492 }
1493 }
1494
1495 }
1496
1497
1498 if (m_trackParticles)
1499 {
1500 ANA_MSG_DEBUG("processInDet: processing trackss");
1501
1502 t_trk_pt.clear();
1503 t_trk_eta.clear();
1504 t_trk_phi.clear();
1505 t_trk_e.clear();
1506 t_trk_index.clear();
1507 t_trk_theta.clear();
1508 t_trk_charge.clear();
1509 t_trk_d0.clear();
1510 t_trk_z0.clear();
1511 t_trk_vz.clear();
1512 t_trk_vtxz.clear();
1513 t_trk_quality.clear();
1514 t_trk_nPixHits.clear();
1515 t_trk_nSctHits.clear();
1516 t_trk_nPixDead.clear();
1517 t_trk_nSctDead.clear();
1518 t_trk_nPixHoles.clear();
1519 t_trk_nSctHoles.clear();
1520 t_trk_nTrtHits.clear();
1521 t_trk_nTrtOutliers.clear();
1522 t_trk_inPixHits.clear();
1523 t_trk_exPixHits.clear();
1524 t_trk_ninPixHits.clear();
1525 t_trk_nexPixHits.clear();
1526 t_trk_pixeldEdx.clear();
1527
1528 t_ntrk = m_trackParticles->size();
1529
1530 if ( !enableTracks ) return;
1531
1532 if ( t_ntrk <= trackLimit ) // dump all tracks
1533 {
1534 int trk_index = 0;
1535 for (const auto track : *m_trackParticles)
1536 {
1537 writeTrack(track, primary_vertex, trk_index++);
1538 }
1539 }
1540 else // write small vertices
1541 {
1542 for (const auto vertex : *m_primaryVertices)
1543 {
1544 if (vertex->nTrackParticles() <= trackLimit )
1545 {
1546 const std::vector< ElementLink< xAOD::TrackParticleContainer > >& vxTrackParticles = vertex->trackParticleLinks();
1547 for (size_t itrk = 0; itrk < vxTrackParticles.size(); itrk++)
1548 {
1549 ElementLink< xAOD::TrackParticleContainer > trkLink = vxTrackParticles.at(itrk);
1550 writeTrack(*trkLink, vertex, trkLink.index());
1551 }
1552 }
1553 }
1554 }
1555 }
1556
1557 return;
1558}
1559
1560
1562{
1563
1564 if (!track) return -1;
1565
1566 bool pass_looseprimary = false;
1567 if (m_selTool->accept(*track,vertex))
1568 {
1569 pass_looseprimary = true;
1570 }
1571
1572 int quality = 0;
1573 if (pass_looseprimary) quality += 1;
1574
1575 return quality;
1576
1577}
1578
1579
1580
1581void ZdcNtuple::writeTrack(const xAOD::TrackParticle* track, const xAOD::Vertex* vertex, int trk_index)
1582{
1583 t_trk_pt.push_back(track->pt());
1584 t_trk_eta.push_back(track->eta());
1585 t_trk_phi.push_back(track->phi());
1586 t_trk_e.push_back(track->e());
1587 t_trk_index.push_back(trk_index);
1588 t_trk_theta.push_back(track->theta());
1589 t_trk_charge.push_back(track->charge());
1590 t_trk_d0.push_back(track->d0());
1591 t_trk_z0.push_back(track->z0());
1592 t_trk_vz.push_back(track->vz());
1593
1594 float vtxz = -999.;
1595 t_trk_vtxz.push_back(vtxz);
1596
1597 static const SG::ConstAccessor<uint8_t> numberOfInnermostPixelLayerHitsAcc("numberOfInnermostPixelLayerHits");
1598 static const SG::ConstAccessor<uint8_t> expectInnermostPixelLayerHitAcc("expectInnermostPixelLayerHit");
1599 static const SG::ConstAccessor<uint8_t> numberOfNextToInnermostPixelLayerHitsAcc("numberOfNextToInnermostPixelLayerHits");
1600 static const SG::ConstAccessor<uint8_t> expectNextToInnermostPixelLayerHitAcc("expectNextToInnermostPixelLayerHit");
1601 static const SG::ConstAccessor<uint8_t> numberOfSCTHitsAcc("numberOfSCTHits");
1602 static const SG::ConstAccessor<uint8_t> numberOfPixelHitsAcc("numberOfPixelHits");
1603 static const SG::ConstAccessor<uint8_t> numberOfSCTDeadSensorsAcc("numberOfSCTDeadSensors");
1604 static const SG::ConstAccessor<uint8_t> numberOfPixelDeadSensorsAcc("numberOfPixelDeadSensors");
1605 static const SG::ConstAccessor<uint8_t> numberOfSCTHolesAcc("numberOfSCTHoles");
1606 static const SG::ConstAccessor<uint8_t> numberOfPixelHolesAcc("numberOfPixelHoles");
1607 static const SG::ConstAccessor<uint8_t> numberOfTRTHitsAcc("numberOfTRTHits");
1608 static const SG::ConstAccessor<uint8_t> numberOfTRTOutliersAcc("numberOfTRTOutliers");
1609
1610 t_trk_quality.push_back(trackQuality(track, vertex));
1611 t_trk_inPixHits.push_back(numberOfInnermostPixelLayerHitsAcc(*track));
1612 t_trk_exPixHits.push_back(expectInnermostPixelLayerHitAcc(*track));
1613 t_trk_ninPixHits.push_back(numberOfNextToInnermostPixelLayerHitsAcc(*track));
1614 t_trk_nexPixHits.push_back(expectNextToInnermostPixelLayerHitAcc(*track));
1615 t_trk_nSctHits.push_back(numberOfSCTHitsAcc(*track));
1616 t_trk_nPixHits.push_back(numberOfPixelHitsAcc(*track));
1617 t_trk_nSctDead.push_back(numberOfSCTDeadSensorsAcc(*track));
1618 t_trk_nPixDead.push_back(numberOfPixelDeadSensorsAcc(*track));
1619 t_trk_nSctHoles.push_back(numberOfSCTHolesAcc(*track));
1620 t_trk_nPixHoles.push_back(numberOfPixelHolesAcc(*track));
1621 t_trk_nTrtHits.push_back(numberOfTRTHitsAcc(*track));
1622 t_trk_nTrtOutliers.push_back(numberOfTRTOutliersAcc(*track));
1623
1624 float pixeldEdx = 0;
1625 track->summaryValue(pixeldEdx, xAOD::SummaryType::pixeldEdx);
1626 t_trk_pixeldEdx.push_back(pixeldEdx);
1627}
1628
1629
1631{
1632 ANA_MSG_DEBUG("processFCal: processing FCal");
1633
1634 t_fcalEt = 0.;
1635 t_fcalEtA = 0.;
1636 t_fcalEtC = 0.;
1637 t_fcalEtA_TT = 0.;
1638 t_fcalEtC_TT = 0.;
1639
1640 if (m_caloSums)
1641 {
1642 static const SG::ConstAccessor<std::string> SummaryAcc("Summary");
1643 for (const auto calosum : *m_caloSums)
1644 {
1645 const std::string name = SummaryAcc(*calosum);
1646 if (name == "FCal")
1647 {
1648 t_fcalEt = calosum->et();
1649 ANA_MSG_DEBUG("processFCal: fcalEt = " << t_fcalEt);
1650 }
1651
1652 if (name == "All")
1653 {
1654 t_totalEt = calosum->et();
1655 ANA_MSG_DEBUG("processFCal: totalEt = " << t_totalEt);
1656 }
1657 }
1658 }
1659
1660 t_fcalEtA = 0;
1661 t_fcalEtC = 0;
1662 t_totalEt24 = 0;
1663
1664 if (m_eventShapes)
1665 {
1666 for (const auto eventShape : *m_eventShapes)
1667 {
1668 int layer = eventShape->layer();
1669 float eta = eventShape->etaMin();
1670 float et = eventShape->et();
1671 if (layer == 21 || layer == 22 || layer == 23)
1672 {
1673 if (eta > 0) t_fcalEtA += et;
1674 if (eta < 0) t_fcalEtC += et;
1675 }
1676
1677 if (TMath::Abs(eta) < 2.4)
1678 {
1679 t_totalEt24 += et;
1680 }
1681 }
1682 }
1683
1684 t_L1ET = 0;
1685 t_L1ET24 = 0;
1686
1688 {
1689 t_L1ET = m_lvl1EnergySumRoI->energyT();
1690 //t_L1ET24 = m_lvl1EnergySumRoI->energyTRestricted(); // TBD when limited eta ET available
1691 }
1692
1693 return;
1694}
1695
1697{
1698
1699 float eta_min = 5;
1700 float eta_max = -5;
1701
1702 if (!m_caloClusters) return;
1703 for (const auto cl : *m_caloClusters)
1704 {
1705
1706 if (cl->pt() < m_gapPtMin) continue;
1707
1708 int etabin = h_TCSigCut->GetXaxis()->FindBin(cl->eta());
1709 if (etabin < 1 || etabin > h_TCSigCut->GetNbinsX()) continue;
1710 float sig_cut = h_TCSigCut->GetBinContent(etabin);
1711 float sig = cl->getMomentValue(xAOD::CaloCluster::CELL_SIGNIFICANCE);
1712 int cl_cell_sig_samp = static_cast<int>(cl->getMomentValue(xAOD::CaloCluster::CELL_SIG_SAMPLING));
1713
1714 // ANA_MSG_VERBOSE ("gapclus: etabin " << etabin << " sig_cut=" << sig_cut << " sig=" << sig << " samp=" << cl_cell_sig_samp);
1715
1716 if (sig < sig_cut) continue;
1717
1718 if (cl_cell_sig_samp >= CaloSampling::TileBar0 && cl_cell_sig_samp <= CaloSampling::TileExt2) continue;
1719
1720 if (cl->eta() < eta_min) eta_min = cl->eta();
1721 if (cl->eta() > eta_max) eta_max = cl->eta();
1722
1723 }
1724
1725 t_edgeGapA = 4.9 - eta_max;
1726 t_edgeGapC = eta_min + 4.9;
1727 ANA_MSG_DEBUG("processGaps(): egA " << t_edgeGapA << " , egC " << t_edgeGapC);
1728
1729}
1730
1732{
1733 ANA_MSG_DEBUG("processMBTS: trying to process!");
1734 t_mbts_countA = 0;
1735 t_mbts_countC = 0;
1738 t_mbts_timeA = 0.;
1739 t_mbts_timeC = 0.;
1740 t_mbts_timeDiff = 0.;
1741
1742 if (m_mbtsInfo->size() > 0)
1743 {
1744 t_mbts_countA = m_mbtsInfo->at(0)->countA();
1745 t_mbts_countC = m_mbtsInfo->at(0)->countC();
1746 t_mbts_timeA = m_mbtsInfo->at(0)->timeA();
1747 t_mbts_timeC = m_mbtsInfo->at(0)->timeC();
1748 t_mbts_timeDiff = m_mbtsInfo->at(0)->timeDiff();
1749 }
1750 else
1751 {
1752 ANA_MSG_INFO("processMBTS: Warning: MBTS info empty!");
1753 }
1754
1755 for (int iside = 0; iside < 2; iside++)
1756 {
1757 for (int iin = 0; iin < 8; iin++)
1758 {
1759 t_mbts_in_e[iside][iin] = 0.;
1760 t_mbts_in_t[iside][iin] = 0.;
1761 t_T2mbts_in_e[iside][iin] = 0.;
1762 t_T2mbts_in_t[iside][iin] = 0.;
1763 }
1764 for (int iout = 0; iout < 4; iout++)
1765 {
1766 t_mbts_out_e[iside][iout] = 0.;
1767 t_mbts_out_t[iside][iout] = 0.;
1768 t_T2mbts_out_e[iside][iout] = 0.;
1769 t_T2mbts_out_t[iside][iout] = 0.;
1770 }
1771 }
1772
1773 ANA_MSG_DEBUG ("filling MBTS");
1774
1775 if (m_mbtsModules == 0)
1776 {
1777 ANA_MSG_INFO("processMBTS: no MBTS container?");
1778 return;
1779 }
1780
1781 for (const auto mbtsMod : *m_mbtsModules)
1782 {
1783 int iside = 1;
1784 if (mbtsMod->type() < 0) iside = 0.;
1785 float phibin = 0.;
1786 int iphibin = -1;
1787 if (mbtsMod->eta() > 3)
1788 {
1789 phibin = mbtsMod->phi() / (2 * TMath::Pi() / 8.) - 0.4;
1790 iphibin = static_cast<int>(phibin);
1791 if (iphibin < 0 || iphibin > 7)
1792 {
1793 ANA_MSG_INFO("processMBTS: MBTS has bad phi bin");
1794 continue;
1795 }
1796 t_mbts_in_e[iside][iphibin] = mbtsMod->e();
1797 t_mbts_in_t[iside][iphibin] = mbtsMod->time();
1798 }
1799 else
1800 {
1801 phibin = mbtsMod->phi() / (2 * TMath::Pi() / 4.) - 0.24;
1802 iphibin = static_cast<int>(phibin);
1803 if (iphibin < 0 || iphibin > 3)
1804 {
1805 ANA_MSG_INFO("processMBTS: MBTS has bad phi bin");
1806 continue;
1807 }
1808 t_mbts_out_e[iside][iphibin] = mbtsMod->e();
1809 t_mbts_out_t[iside][iphibin] = mbtsMod->time();
1810 }
1811 }
1812
1813 if (!m_trigT2MbtsBits) return;
1814
1815 for (const auto mbtsBits : *m_trigT2MbtsBits)
1816 {
1817 const std::vector<float>& energies = mbtsBits->triggerEnergies();
1818 const std::vector<float>& times = mbtsBits->triggerTimes();
1819 for (int imbts = 0; imbts < 32; imbts++)
1820 {
1821 int side = imbts / 16;
1822 int ring = (imbts - 16 * side) / 8;
1823 bool isInner = (ring == 0);
1824 int index = (imbts - 16 * side - ring * 8);
1825 if (!isInner)
1826 {
1827 if ((index % 2) != 0) continue; // skip odd out ring
1828 index /= 2;
1829 }
1830 int iside = (side == 0) ? 1 : 0; // code maps side 1 into first 16 bits and side -1 into second set
1831
1832 ANA_MSG_VERBOSE ("imbts=" << imbts << " isInner=" << isInner << " iside=" << iside << " index=" << index << " e=" << energies.at(imbts) << " t=" << times.at(imbts));
1833 if (iside < 2 and index < 8){ //indices in range?
1834 if (isInner)
1835 {
1836 t_T2mbts_in_e[iside][index] = energies.at(imbts);
1837 t_T2mbts_in_t[iside][index] = times.at(imbts);
1838 if (TMath::Abs(times.at(imbts)) < 12.0 && energies.at(imbts) > 40 / 222.)
1839 {
1840 if (iside == 0) t_T2mbts_countCin++;
1841 if (iside == 1) t_T2mbts_countAin++;
1842 }
1843 }
1844 else
1845 {
1846 t_T2mbts_out_e[iside][index] = energies.at(imbts);
1847 t_T2mbts_out_t[iside][index] = times.at(imbts);
1848 }
1849 } //indices check
1850 }
1851 }
1852
1853 return;
1854}
1855
1857{
1858 //t_nclus = 0;
1859
1860 t_cc_pt.clear();
1861 t_cc_eta.clear();
1862 t_cc_phi.clear();
1863 t_cc_e.clear();
1864 t_cc_raw_m.clear();
1865 t_cc_raw_eta.clear();
1866 t_cc_raw_phi.clear();
1867 t_cc_raw_e.clear();
1868 t_cc_raw_samp.clear();
1869 t_cc_layer.clear();
1870 t_cc_sig.clear();
1871
1872 t_nclus = m_caloClusters->size();
1873
1874 t_clusEt = 0;
1875 t_clusEtMax = -999;
1876 t_clusetaMax = 0;
1877 t_clusphiMax = 0;
1878
1879 for (const auto cluster : *m_caloClusters)
1880 {
1881 t_cc_pt.push_back(cluster->pt());
1882 t_cc_eta.push_back(cluster->eta());
1883 t_cc_phi.push_back(cluster->phi());
1884 t_cc_e.push_back(cluster->e());
1885 t_cc_raw_m.push_back(cluster->rawM());
1886 t_cc_raw_eta.push_back(cluster->rawEta());
1887 t_cc_raw_phi.push_back(cluster->rawPhi());
1888 t_cc_raw_e.push_back(cluster->rawE());
1889
1890 std::vector<float> energies;
1891
1892 for (size_t s = CaloSampling::PreSamplerB; s < CaloSampling::Unknown; s++ )
1893 {
1894 bool hasSample = cluster->hasSampling( (xAOD::CaloCluster::CaloSample) s );
1895 float e = 0;
1896 if (hasSample)
1897 {
1898 e = cluster->eSample( (xAOD::CaloCluster::CaloSample) s);
1899 }
1900 energies.push_back(e);
1901 }
1902 t_cc_raw_samp.push_back(energies);
1903
1904 float et = cluster->e() / TMath::CosH(cluster->eta());
1905 t_clusEt += et;
1906 if (et > t_clusEtMax)
1907 {
1908 t_clusEtMax = et;
1909 t_clusetaMax = cluster->eta();
1910 t_clusphiMax = cluster->phi();
1911 }
1912
1913 double cell_sig = 0;
1914 if (!cluster->retrieveMoment(xAOD::CaloCluster::CELL_SIGNIFICANCE, cell_sig)) {ANA_MSG_DEBUG("processClusters() : No CELL_SIGNIFICANCE!");}
1915 t_cc_sig.push_back(cell_sig);
1916 double cell_layer = 0;
1917 if (!cluster->retrieveMoment(xAOD::CaloCluster::CELL_SIG_SAMPLING, cell_layer)) {ANA_MSG_DEBUG("processClusters() : No CELL_SIG_SAMPLING!");}
1918 t_cc_layer.push_back(static_cast<int>(cell_layer));
1919 //t_nclus++;
1920 }
1921
1922 if ( (!enableClusters) || (t_ntrk >= trackLimit) ) // if disabled or if too many tracks
1923 {
1924 t_cc_pt.clear();
1925 t_cc_eta.clear();
1926 t_cc_phi.clear();
1927 t_cc_e.clear();
1928 t_cc_layer.clear();
1929 t_cc_sig.clear();
1930 }
1931 else
1932 {
1933 ANA_MSG_DEBUG("processClusters(): keeping clusters");
1934 }
1935 return;
1936}
1937
1939
1940 proton_pt.clear();
1941 proton_eta.clear();
1942 proton_phi.clear();
1943 proton_e.clear();
1944 proton_side.clear();
1945 proton_eLoss.clear();
1946 proton_t.clear();
1947
1948 proton_track_stationID.clear();
1949 proton_track_nClusters.clear();
1950 proton_track_xLocal.clear();
1951 proton_track_yLocal.clear();
1952 proton_track_zLocal.clear();
1953 proton_track_xSlope.clear();
1954 proton_track_ySlope.clear();
1955
1956 proton_track_stationID.resize(m_afpProtons->size(), std::vector<int>(2));
1957 proton_track_nClusters.resize(m_afpProtons->size(), std::vector<int>(2));
1958 proton_track_xLocal.resize(m_afpProtons->size(), std::vector<float>(2));
1959 proton_track_yLocal.resize(m_afpProtons->size(), std::vector<float>(2));
1960 proton_track_zLocal.resize(m_afpProtons->size(), std::vector<float>(2));
1961 proton_track_xSlope.resize(m_afpProtons->size(), std::vector<float>(2));
1962 proton_track_ySlope.resize(m_afpProtons->size(), std::vector<float>(2));
1963
1964 nProtons = 0;
1965
1966 for(const auto * proton: *m_afpProtons){
1967
1968 proton_pt.push_back(proton->pt());
1969 proton_eta.push_back(proton->eta());
1970 proton_phi.push_back(proton->phi());
1971 proton_e.push_back(proton->e());
1972 proton_side.push_back(proton->side());
1973
1974 proton_eLoss.push_back((6800.-proton->e())/6800.);
1975 p_scat.SetPtEtaPhiE(proton->pt(), proton->eta(), proton->phi(), proton->e());
1976 (signbit(proton->eta())) ? p_beam.SetPxPyPzE(0.0, 0.0, -6800.0, 6800.0) : p_beam.SetPxPyPzE(0.0, 0.0, 6800.0,\
1977 6800.0);
1978
1979 proton_t.push_back( (p_beam - p_scat)*(p_beam - p_scat));
1980
1981 for(int i=0; i< int(proton->nTracks()); i++){
1982
1983 proton_track_stationID.at(nProtons).at(i) = proton->track(i)->stationID();
1984 proton_track_nClusters.at(nProtons).at(i) = proton->track(i)->nClusters();
1985 proton_track_xLocal.at(nProtons).at(i) = proton->track(i)->xLocal();
1986 proton_track_yLocal.at(nProtons).at(i) = proton->track(i)->yLocal();
1987 proton_track_zLocal.at(nProtons).at(i) = proton->track(i)->zLocal();
1988 proton_track_xSlope.at(nProtons).at(i) = proton->track(i)->xSlope();
1989 proton_track_ySlope.at(nProtons).at(i) = proton->track(i)->ySlope();
1990
1991 }
1992
1993 nProtons++;
1994 }
1995
1996 return;
1997}
1998
2000{
2001 uint32_t passbits = 0;
2002
2003 if (!m_isMC)
2004 {
2005 if (useGRL)
2006 {
2007 if (!m_grl->passRunLB(*m_eventInfo)) {
2008 passbits += 1; // UPC GRL
2009 }
2010 }
2011
2012 /*
2013 if(!m_grl_mb->passRunLB(*m_eventInfo)){
2014 passbits += 4; // MB GRL
2015 }
2016 */
2017
2021 || (m_eventInfo->isEventFlagBitSet(xAOD::EventInfo::Core, 18) ) )
2022 {
2023 passbits += 2;
2024 } // end if event flags check
2025 } // end if the event is data
2026
2027 return passbits;
2028}
2029
2031{
2032 if (!enableTrigger) return;
2033
2034 m_outputTree = tree( "zdcTree" );
2035 ANA_MSG_INFO("setupTriggerHistos(): Setting up trigger histos and ntuple = " << m_outputTree);
2036
2037 std::vector<std::string> triggers;
2038 std::vector<std::string> rerunTriggers;
2039 bool zdc_triggers = true;
2040
2041 // ZDC triggers
2042 if (zdc_triggers)
2043 {
2044 if (zdcCalib) // lists for calibration data
2045 {
2046 if (lhcf2022)
2047 {
2048 triggers.push_back("L1_LHCF");
2049 triggers.push_back("L1_ZDC_OR");
2050 }
2051
2052 if (pbpb2023)
2053 {
2054 triggers.push_back("L1_ZDC_OR");
2055 triggers.push_back("L1_ZDC_A");
2056 triggers.push_back("L1_ZDC_C");
2057 triggers.push_back("L1_ZDC_A_C");
2058 triggers.push_back("L1_ZDC_OR_EMPTY");
2059 triggers.push_back("L1_ZDC_A_EMPTY");
2060 triggers.push_back("L1_ZDC_C_EMPTY");
2061 triggers.push_back("L1_ZDC_A_C_EMPTY");
2062 triggers.push_back("L1_ZDC_OR_UNPAIRED_NONISO");
2063 triggers.push_back("L1_ZDC_A_UNPAIRED_NONISO");
2064 triggers.push_back("L1_ZDC_C_UNPAIRED_NONISO");
2065 triggers.push_back("L1_ZDC_A_C_UNPAIRED_NONISO");
2066 }
2067 }
2068 else // lists for physics data
2069 {
2070 if (lhcf2022)
2071 {
2072 triggers.push_back("HLT_noalg_L1LHCF");
2073 }
2074 if (lhcf2022afp)
2075 {
2076 triggers.push_back("HLT_noalg_AFPPEB_L1AFP_A");
2077 triggers.push_back("HLT_noalg_AFPPEB_L1AFP_C");
2078 }
2079 if (lhcf2022zdc)
2080 {
2081 triggers.push_back("HLT_noalg_ZDCPEB_L1ZDC_OR");
2082 triggers.push_back("HLT_noalg_ZDCPEB_L1LHCF");
2083 triggers.push_back("HLT_noalg_L1ZDC_OR");
2084 triggers.push_back("HLT_noalg_L1ZDC_XOR_E2");
2085 triggers.push_back("HLT_noalg_L1ZDC_XOR_E1_E3");
2086 triggers.push_back("HLT_noalg_L1ZDC_A_AND_C");
2087 triggers.push_back("HLT_mb_sptrk_L1ZDC_OR");
2088 triggers.push_back("HLT_mb_sptrk_L1ZDC_XOR_E2");
2089 triggers.push_back("HLT_mb_sptrk_L1ZDC_XOR_E1_E3");
2090 triggers.push_back("HLT_mb_sptrk_L1ZDC_A_AND_C");
2091 triggers.push_back("HLT_mb_sp100_trk30_hmt_L1ZDC_XOR_E2");
2092 triggers.push_back("HLT_mb_sp100_trk30_hmt_L1ZDC_XOR_E1_E3");
2093 triggers.push_back("HLT_mb_sp100_trk30_hmt_L1ZDC_A_AND_C");
2094 }
2095 if (oo2025) {
2096 triggers = {
2097 "HLT_mb_sptrk_L1TRT_ZDC_A", "HLT_mb_sptrk_L1TRT_ZDC_C", "HLT_mb_sptrk_L1TRT_ZDC_A_C",
2098 "HLT_mb_sptrk_L1TRT_ZDC_OR", "HLT_mb_sptrk_L1TRT_ZDC_LOR",
2099 "HLT_mb_sptrk_L1ZDC_A", "HLT_mb_sptrk_L1ZDC_C", "HLT_mb_sptrk_L1ZDC_A_C",
2100 "HLT_mb_sptrk_L1ZDC_LOR", "HLT_mb_sptrk_L1ZDC_OR",
2101 "HLT_mb_sptrk_L1ZDC_XN", "HLT_mb_sptrk_L1ZDC_YN", "HLT_mb_sptrk_L1ZDC_ZN",
2102 "HLT_mb_sptrk_L1ZDC_XNXN", "HLT_mb_sptrk_L1ZDC_XNYN", "HLT_mb_sptrk_L1ZDC_XNZN",
2103 "HLT_mb_sptrk_L1ZDC_XN_XOR", "HLT_mb_sptrk_L1ZDC_YNYN", "HLT_mb_sptrk_L1ZDC_YN_XOR",
2104 "HLT_mb_sptrk_L1ZDC_ZN_XOR",
2105 "HLT_noalg_L1TRT_ZDC_A", "HLT_noalg_L1TRT_ZDC_C", "HLT_noalg_L1TRT_ZDC_A_C",
2106 "HLT_noalg_L1TRT_ZDC_OR", "HLT_noalg_L1TRT_ZDC_LOR",
2107 "HLT_noalg_L1TRT_ZDC_YN", "HLT_noalg_L1TRT_ZDC_ZN",
2108 "HLT_noalg_L1TRT_ZDC_XNXN", "HLT_noalg_L1TRT_ZDC_XNYN", "HLT_noalg_L1TRT_ZDC_XNZN",
2109 "HLT_noalg_L1TRT_ZDC_XN_XOR", "HLT_noalg_L1TRT_ZDC_YNYN", "HLT_noalg_L1TRT_ZDC_YN_XOR",
2110 "HLT_noalg_L1TRT_ZDC_ZN_XOR",
2111 "HLT_noalg_L1ZDC_A", "HLT_noalg_L1ZDC_C", "HLT_noalg_L1ZDC_A_C",
2112 "HLT_noalg_L1ZDC_OR", "HLT_noalg_L1ZDC_LOR",
2113 "HLT_noalg_L1ZDC_YN", "HLT_noalg_L1ZDC_ZN",
2114 "HLT_noalg_L1ZDC_XNXN", "HLT_noalg_L1ZDC_XNYN", "HLT_noalg_L1ZDC_XNZN",
2115 "HLT_noalg_L1ZDC_XN_XOR", "HLT_noalg_L1ZDC_YNYN", "HLT_noalg_L1ZDC_YN_XOR",
2116 "HLT_noalg_L1ZDC_ZN_XOR"
2117 };
2118 }
2119 }
2120 }
2121
2122 //char name[50];
2123 ANA_MSG_INFO("Adding trigger branches!");
2124
2125 int ic = 0;
2126 for (auto &trig : triggers)
2127 {
2128 const Trig::ChainGroup* cg = m_trigDecisionTool->getChainGroup(trig);
2129 if (cg->getListOfTriggers().size())
2130 {
2131 ANA_MSG_INFO("setupTriggerHistos(): Trigger found = " << trig.c_str() << " bit " << ic);
2132 }
2133 else
2134 {
2135 ANA_MSG_INFO("setupTriggerHistos(): Trigger NOT found = " << trig.c_str() << " bit " << ic);
2136 }
2137 m_chainGroups.push_back(cg);
2138 // force all triggers to show up in tree
2139 TString bname(trig.c_str());
2140 m_outputTree->Branch(bname, &(t_decisions[ic]), bname + "/O");
2141 m_outputTree->Branch("ps_" + bname, &(t_prescales[ic]), "ps_" + bname + "/F");
2142 ic++;
2143 }
2144
2145 ANA_MSG_INFO( "triggers = " << triggers.size() << " chains = " << m_chainGroups.size() );
2146
2147 int irc = 0;
2148 ANA_MSG_INFO("Adding rerun trigger branches!");
2149 for (auto &trig : rerunTriggers)
2150 {
2151 const Trig::ChainGroup* cg = m_trigDecisionTool->getChainGroup(trig);
2152 m_rerunChainGroups.push_back(cg);
2153 if (cg->getListOfTriggers().size())
2154 {
2155 ANA_MSG_INFO("setupTriggerHistos(): Rerun trigger found = " << trig.c_str() << " bit " << irc);
2156 }
2157 else
2158 {
2159 ANA_MSG_INFO("setupTriggerHistos(): Rerun trigger NOT found = " << trig.c_str() << " bit " << irc);
2160 }
2161 // force all rerun triggers to show up in tree
2162 TString bname(trig.c_str());
2163 m_outputTree->Branch(bname, &(t_rerunDecisions[irc]), bname + "/O");
2164 irc++;
2165 }
2166
2167 // trigger matching flags for electrons and muons
2168
2169 m_setupTrigHist = true;
2170
2171 ANA_MSG_INFO("setupTriggerHistos(): Finished setting up trigger");
2172
2173}
2174
2175// from TrigMuonMatching
2176double ZdcNtuple::dR(const double eta1, const double phi1, const double eta2, const double phi2)
2177{
2178 double deta = std::abs(eta1 - eta2);
2179 double dphi = std::abs(phi1 - phi2) < TMath::Pi() ? std::abs(phi1 - phi2) : 2 * TMath::Pi() - std::abs(phi1 - phi2);
2180 return std::sqrt(deta * deta + dphi * dphi);
2181}
2182
2183
2184StatusCode ZdcNtuple :: finalize ()
2185{
2186 // This method is the mirror image of initialize(), meaning it gets
2187 // called after the last event has been processed on the worker node
2188 // and allows you to finish up any objects you created in
2189 // initialize() before they are written to disk. This is actually
2190 // fairly rare, since this happens separately for each worker node.
2191 // Most of the time you want to do your post-processing on the
2192 // submission node after all your histogram outputs have been
2193 // merged. This is different from histFinalize() in that it only
2194 // gets called on worker nodes that processed input events.
2195
2196
2197 return StatusCode::SUCCESS;
2198}
Scalar eta() const
pseudorapidity method
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_INFO(x)
Helper class to provide constant type-safe access to aux data.
#define ANA_MSG_INFO(xmsg)
Macro printing info messages.
#define ANA_MSG_ERROR(xmsg)
Macro printing error messages.
#define ANA_MSG_WARNING(xmsg)
Macro printing warning messages.
#define ANA_MSG_VERBOSE(xmsg)
Macro printing verbose messages.
#define ANA_MSG_DEBUG(xmsg)
Macro printing debug messages.
#define ANA_CHECK(EXP)
check whether the given expression was successful
Define enumerations for event-level ZDC data.
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
ServiceHandle< StoreGateSvc > & evtStore()
bool msgLvl(const MSG::Level lvl) const
StatusCode book(const TH1 &hist, const std::string &tDir="", const std::string &stream="")
Simplify the booking and registering (into THistSvc) of histograms.
AnaAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
constructor with parameters
Helper class to provide constant type-safe access to aux data.
bool isAvailable(const ELT &e) const
Test to see if this variable exists in the store.
const_pointer_type ptr()
Dereference the pointer.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
std::vector< std::string > getListOfTriggers() const
std::vector< float > t_cc_raw_phi
Definition ZdcNtuple.h:399
const xAOD::VertexContainer * m_primaryVertices
Definition ZdcNtuple.h:122
float t_yCentroidPreGeomCorPreAvgSubtr[2]
Definition ZdcNtuple.h:274
float t_cosDeltaReactionPlaneAngle
Definition ZdcNtuple.h:282
bool reprocZdc
Definition ZdcNtuple.h:79
float t_mbts_timeDiff
Definition ZdcNtuple.h:346
std::vector< double > proton_t
Definition ZdcNtuple.h:417
float t_ZdcModuleFitT0[2][4]
Definition ZdcNtuple.h:220
std::vector< const Trig::ChainGroup * > m_rerunChainGroups
Definition ZdcNtuple.h:138
float t_yCentroid[2]
Definition ZdcNtuple.h:278
std::vector< float > t_cc_pt
Definition ZdcNtuple.h:391
TLorentzVector p_scat
Definition ZdcNtuple.h:427
const xAOD::MBTSModuleContainer * m_mbtsModules
Definition ZdcNtuple.h:120
float t_RpdChannelPileupStretchedExpFitParamErrs[2][16][3]
Definition ZdcNtuple.h:255
SG::ReadHandleKey< McEventCollection > m_mcEventCollectionName
Definition ZdcNtuple.h:111
short t_ZdcStatus[2]
Definition ZdcNtuple.h:195
std::vector< float > t_ZdcTruthParticlePy
Definition ZdcNtuple.h:210
float t_RpdChannelAmplitudeCalib[2][16]
Definition ZdcNtuple.h:259
uint32_t t_ntrk
Definition ZdcNtuple.h:362
float t_ZdcTruthEM[2]
Definition ZdcNtuple.h:202
float t_totalEt
Definition ZdcNtuple.h:320
unsigned int m_lastRunNumber
Definition ZdcNtuple.h:49
ZdcInjPulserAmpMap::Token m_injMapRunToken
Definition ZdcNtuple.h:50
float t_RPDSubtrAmpSum[2]
Definition ZdcNtuple.h:272
unsigned int t_RpdSideStatus[2]
Definition ZdcNtuple.h:265
float t_ZdcModuleChisqLGRefit[2][4]
Definition ZdcNtuple.h:242
bool enableOutputTree
Definition ZdcNtuple.h:56
float t_clusphiMax
Definition ZdcNtuple.h:406
float t_ZdcModuleT0SubLGRefit[2][4]
Definition ZdcNtuple.h:241
bool pbpb2023
Definition ZdcNtuple.h:85
bool flipDelay
Definition ZdcNtuple.h:78
unsigned short t_ZdcLucrodTriggerAmpLG[2][4]
Definition ZdcNtuple.h:232
bool zdcLaser
Definition ZdcNtuple.h:72
float t_RpdChannelAmplitude[2][16]
Definition ZdcNtuple.h:258
std::vector< uint8_t > t_trk_nPixHoles
Definition ZdcNtuple.h:379
float t_puvxz
Definition ZdcNtuple.h:292
std::vector< uint8_t > t_trk_nSctHoles
Definition ZdcNtuple.h:380
bool trackLimitReject
Definition ZdcNtuple.h:77
uint16_t t_mbts_countA
Definition ZdcNtuple.h:342
float t_fcalEtC
Definition ZdcNtuple.h:314
void processMCEventCollection()
bool lhcf2022afp
Definition ZdcNtuple.h:84
unsigned short t_ZdcLucrodTriggerSideAmp[2]
Definition ZdcNtuple.h:198
unsigned int t_RpdModuleTruthNphotons[2][16]
Definition ZdcNtuple.h:266
const xAOD::ForwardEventInfoContainer * m_mbtsInfo
Definition ZdcNtuple.h:119
bool enableCalo
Definition ZdcNtuple.h:61
bool doZdcCalib
Definition ZdcNtuple.h:92
std::vector< int > t_vx_trk_index
Definition ZdcNtuple.h:287
double dR(const double eta1, const double phi1, const double eta2, const double phi2)
float t_ZdcModuleAmpUncorr[2][4]
Definition ZdcNtuple.h:217
float t_reactionPlaneAngle[2]
Definition ZdcNtuple.h:281
std::vector< std::vector< float > > proton_track_ySlope
Definition ZdcNtuple.h:423
void processZdcNtupleFromModules()
unsigned int t_ZdcModuleMask
Definition ZdcNtuple.h:196
std::vector< float > t_trk_vz
Definition ZdcNtuple.h:370
void processInDet()
std::vector< float > t_trk_pt
Definition ZdcNtuple.h:363
uint32_t t_eventNumber
Definition ZdcNtuple.h:150
float t_RpdChannelPileupExpFitParams[2][16][2]
Definition ZdcNtuple.h:252
bool lhcf2022zdc
Definition ZdcNtuple.h:83
float t_totalEt24
Definition ZdcNtuple.h:322
uint16_t t_raw32[2][4][2][2][32]
Definition ZdcNtuple.h:354
const xAOD::EventInfo * m_eventInfo
Definition ZdcNtuple.h:113
float t_RpdChannelMaxADCCalib[2][16]
Definition ZdcNtuple.h:261
std::vector< int > t_trk_index
Definition ZdcNtuple.h:374
bool enableID
Definition ZdcNtuple.h:60
float t_clusEtMax
Definition ZdcNtuple.h:404
std::vector< std::vector< float > > proton_track_xLocal
Definition ZdcNtuple.h:419
float t_T2mbts_in_e[2][8]
Definition ZdcNtuple.h:180
uint16_t t_raw7[2][4][2][2][7]
Definition ZdcNtuple.h:351
float t_vInj
Definition ZdcNtuple.h:153
void processClusters()
bool slimmed
Definition ZdcNtuple.h:53
std::vector< const Trig::ChainGroup * > m_chainGroups
Definition ZdcNtuple.h:137
std::vector< float > t_cc_raw_e
Definition ZdcNtuple.h:400
float t_ZdcModuleChisqRatio[2][4]
Definition ZdcNtuple.h:222
float t_mbts_in_t[2][8]
Definition ZdcNtuple.h:177
std::vector< int16_t > t_vtx_ntrk
Definition ZdcNtuple.h:307
float t_ZdcAmpErr[2]
Definition ZdcNtuple.h:189
float t_vxcov[6]
Definition ZdcNtuple.h:290
float t_RpdChannelMaxADC[2][16]
Definition ZdcNtuple.h:260
float t_ZdcModuleCalibTime[2][4]
Definition ZdcNtuple.h:225
int m_eventCounter
Definition ZdcNtuple.h:133
uint32_t acceptEvent()
float t_ZdcModulePresample[2][4]
Definition ZdcNtuple.h:229
float t_ZdcNLEnergy[2]
Definition ZdcNtuple.h:192
std::vector< float > t_vtx_sumpt2_all
Definition ZdcNtuple.h:306
const xAOD::HIEventShapeContainer * m_caloSums
Definition ZdcNtuple.h:117
std::vector< int16_t > t_vtx_ntrk_all
Definition ZdcNtuple.h:305
float t_xRowCentroid[2][4]
Definition ZdcNtuple.h:279
unsigned int t_RpdChannelMaxSample[2][16]
Definition ZdcNtuple.h:262
std::vector< float > t_cc_raw_eta
Definition ZdcNtuple.h:398
float t_actIntPerCrossing
Definition ZdcNtuple.h:160
uint64_t t_trigger
Definition ZdcNtuple.h:167
bool t_centroidDecorationsAvailable
Definition ZdcNtuple.h:268
std::vector< std::vector< int16_t > > t_vtx_trk_index
Definition ZdcNtuple.h:309
std::string grlFilename
Definition ZdcNtuple.h:55
std::vector< float > t_trk_eta
Definition ZdcNtuple.h:364
int t_puvxntrk
Definition ZdcNtuple.h:293
TLorentzVector p_beam
Definition ZdcNtuple.h:426
uint16_t t_raw15[2][4][2][2][15]
Definition ZdcNtuple.h:352
bool lhcf2022
Definition ZdcNtuple.h:82
std::vector< float > t_cc_eta
Definition ZdcNtuple.h:392
TH1 * h_TCSigCut
Definition ZdcNtuple.h:339
uint16_t t_T2mbts_countCin
Definition ZdcNtuple.h:349
float t_xCentroidPreAvgSubtr[2]
Definition ZdcNtuple.h:275
float t_ZdcTrigEff[2]
Definition ZdcNtuple.h:197
float t_ZdcModuleMinDeriv2nd[2][4]
Definition ZdcNtuple.h:228
std::vector< float > t_trk_vtxz
Definition ZdcNtuple.h:371
float t_RPDChannelSubtrAmp[2][16]
Definition ZdcNtuple.h:271
float t_ZdcNLEnergyErr[2]
Definition ZdcNtuple.h:193
uint32_t t_passBits
Definition ZdcNtuple.h:155
float t_ZdcModuleChisq[2][4]
Definition ZdcNtuple.h:221
std::vector< int8_t > t_vtx_type
Definition ZdcNtuple.h:301
float t_T2mbts_out_e[2][4]
Definition ZdcNtuple.h:181
const xAOD::CaloClusterContainer * m_caloClusters
Definition ZdcNtuple.h:123
std::vector< int > t_cc_layer
Definition ZdcNtuple.h:396
uint8_t t_rpdDecodingError
Definition ZdcNtuple.h:165
float t_ZdcModuleAmpError[2][4]
Definition ZdcNtuple.h:226
float t_ZdcModuleTime[2][4]
Definition ZdcNtuple.h:218
ToolHandle< InDet::IInDetTrackSelectionTool > m_selTool
Definition ZdcNtuple.h:104
PublicToolHandle< Trig::TrigDecisionTool > m_trigDecisionTool
Definition ZdcNtuple.h:101
int t_nstrong
Definition ZdcNtuple.h:295
std::vector< float > t_trk_theta
Definition ZdcNtuple.h:367
std::vector< uint8_t > t_trk_ninPixHits
Definition ZdcNtuple.h:385
uint16_t t_T2mbts_countAin
Definition ZdcNtuple.h:348
bool m_setupTrigHist
Definition ZdcNtuple.h:135
uint32_t t_tav[16]
Definition ZdcNtuple.h:185
std::string zdcConfig
Definition ZdcNtuple.h:93
std::vector< float > t_cc_e
Definition ZdcNtuple.h:394
bool zdcOnly
Definition ZdcNtuple.h:74
double m_gapThresholds[98]
Definition ZdcNtuple.h:330
float t_mbts_timeC
Definition ZdcNtuple.h:345
float t_ZdcModuleAmpCorrLGRefit[2][4]
Definition ZdcNtuple.h:239
std::vector< float > t_cc_phi
Definition ZdcNtuple.h:393
uint32_t t_nclus
Definition ZdcNtuple.h:390
uint32_t t_tbp[16]
Definition ZdcNtuple.h:186
void processMBTS()
uint16_t t_rpdRaw[2][16][24]
Definition ZdcNtuple.h:357
std::vector< std::vector< int > > proton_track_nClusters
Definition ZdcNtuple.h:424
std::vector< int > proton_side
Definition ZdcNtuple.h:415
uint32_t t_timeStamp
Definition ZdcNtuple.h:157
float t_ZdcModuleTruthTotal[2][7]
Definition ZdcNtuple.h:244
float t_xCentroidPreGeomCorPreAvgSubtr[2]
Definition ZdcNtuple.h:273
float t_ZdcTruthInvis[2]
Definition ZdcNtuple.h:201
float t_ZdcModuleCalibAmp[2][4]
Definition ZdcNtuple.h:224
float t_ZdcModuleFitAmp[2][4]
Definition ZdcNtuple.h:219
float t_fcalEtA
Definition ZdcNtuple.h:313
float t_ZdcModuleAmpLGRefit[2][4]
Definition ZdcNtuple.h:238
float t_vx[3]
Definition ZdcNtuple.h:285
float t_ZdcModulePeakADCLG[2][4]
Definition ZdcNtuple.h:237
unsigned int t_ZdcModuleStatus[2][4]
Definition ZdcNtuple.h:223
float t_mbts_out_t[2][4]
Definition ZdcNtuple.h:178
float t_L1ET24
Definition ZdcNtuple.h:141
float t_ZdcModuleT0LGRefit[2][4]
Definition ZdcNtuple.h:240
void processGaps()
bool enableZDC
Definition ZdcNtuple.h:87
std::vector< uint8_t > t_trk_nPixDead
Definition ZdcNtuple.h:377
std::vector< int8_t > t_trk_charge
Definition ZdcNtuple.h:372
float t_ZdcModuleTruthNonEM[2][7]
Definition ZdcNtuple.h:247
int t_vxnminbias
Definition ZdcNtuple.h:297
float t_ZdcModuleAmp[2][4]
Definition ZdcNtuple.h:216
float t_fcalEtC_TT
Definition ZdcNtuple.h:316
uint32_t t_zdcEventInfoErrorWord
Definition ZdcNtuple.h:162
bool enableTrigger
Definition ZdcNtuple.h:58
float t_ZdcEnergy[2]
Definition ZdcNtuple.h:190
std::vector< std::vector< float > > t_cc_raw_samp
Definition ZdcNtuple.h:401
float t_RpdChannelPileupFrac[2][16]
Definition ZdcNtuple.h:264
bool enableRPDAmp
Definition ZdcNtuple.h:89
std::vector< float > t_ZdcTruthParticlePosy
Definition ZdcNtuple.h:206
std::vector< int16_t > t_trk_quality
Definition ZdcNtuple.h:373
bool enableTracks
Definition ZdcNtuple.h:63
std::vector< uint8_t > t_trk_nSctHits
Definition ZdcNtuple.h:376
uint16_t t_rpdRaw32[2][16][32]
Definition ZdcNtuple.h:358
float t_clusEt
Definition ZdcNtuple.h:403
std::vector< float > t_cc_raw_m
Definition ZdcNtuple.h:397
const xAOD::TrigT2MbtsBitsContainer * m_trigT2MbtsBits
Definition ZdcNtuple.h:121
std::vector< float > t_trk_d0
Definition ZdcNtuple.h:368
size_t nsamplesZdc
Definition ZdcNtuple.h:81
const xAOD::AFPProtonContainer * m_afpProtons
Definition ZdcNtuple.h:128
void writeTrack(const xAOD::TrackParticle *, const xAOD::Vertex *vertex, int)
std::vector< std::vector< float > > proton_track_zLocal
Definition ZdcNtuple.h:421
void processEventInfo()
float t_RpdChannelPileupExpFitParamErrs[2][16][2]
Definition ZdcNtuple.h:254
void processFCal()
std::vector< float > t_trk_z0
Definition ZdcNtuple.h:369
bool t_rerunDecisions[200]
Definition ZdcNtuple.h:173
float t_avgIntPerCrossing
Definition ZdcNtuple.h:159
std::vector< float > t_vtx_x
Definition ZdcNtuple.h:302
float t_ZdcTruthTotal[2]
Definition ZdcNtuple.h:200
const xAOD::TrackParticleContainer * m_trackParticles
Definition ZdcNtuple.h:124
float t_prescales[200]
Definition ZdcNtuple.h:171
bool processTriggerDecision()
float t_ZdcTime[2]
Definition ZdcNtuple.h:194
float t_T2mbts_in_t[2][8]
Definition ZdcNtuple.h:182
std::vector< float > t_vtx_y
Definition ZdcNtuple.h:303
uint32_t t_timeStampNSOffset
Definition ZdcNtuple.h:158
std::vector< float > t_vtx_z
Definition ZdcNtuple.h:304
std::vector< uint8_t > t_trk_nTrtHits
Definition ZdcNtuple.h:381
std::vector< double > proton_pt
Definition ZdcNtuple.h:411
int t_vxtype
Definition ZdcNtuple.h:288
std::vector< int > t_ZdcTruthParticlePid
Definition ZdcNtuple.h:213
SG::ReadHandleKey< xAOD::ZdcModuleContainer > m_zdcSumContainerName
Definition ZdcNtuple.h:109
unsigned short t_ZdcLucrodTriggerAmp[2][4]
Definition ZdcNtuple.h:231
void processVInjInfo()
float t_ZdcModuleBkgdMaxFraction[2][4]
Definition ZdcNtuple.h:227
asg::AnaToolHandle< IGoodRunsListSelectionTool > m_grl
Definition ZdcNtuple.h:102
unsigned int t_ZdcModuleTruthNphotons[2][7]
Definition ZdcNtuple.h:249
int nProtons
Definition ZdcNtuple.h:410
std::vector< std::vector< float > > proton_track_yLocal
Definition ZdcNtuple.h:420
std::vector< float > t_vtx_sumpt2
Definition ZdcNtuple.h:308
const xAOD::TrigDecision * m_trigDecision
Definition ZdcNtuple.h:116
std::vector< uint8_t > t_trk_nSctDead
Definition ZdcNtuple.h:378
float t_RpdChannelPileupStretchedExpFitMSE[2][16]
Definition ZdcNtuple.h:257
void processProtons()
std::vector< float > t_trk_pixeldEdx
Definition ZdcNtuple.h:387
float t_yCentroidPreAvgSubtr[2]
Definition ZdcNtuple.h:276
float t_xCentroid[2]
Definition ZdcNtuple.h:277
int t_pvindex
Definition ZdcNtuple.h:289
float t_puvxsumpt
Definition ZdcNtuple.h:294
std::vector< double > proton_eta
Definition ZdcNtuple.h:412
float t_RpdChannelBaseline[2][16]
Definition ZdcNtuple.h:251
std::vector< float > t_ZdcTruthParticlePx
Definition ZdcNtuple.h:209
std::vector< float > t_trk_phi
Definition ZdcNtuple.h:365
bool enableOutputSamples
Definition ZdcNtuple.h:57
float t_mbts_in_e[2][8]
Definition ZdcNtuple.h:175
std::vector< double > proton_eLoss
Definition ZdcNtuple.h:416
uint16_t t_raw24[2][4][2][2][24]
Definition ZdcNtuple.h:353
bool enableCentroid
Definition ZdcNtuple.h:90
float t_ZdcModulePreSampleAmp[2][4]
Definition ZdcNtuple.h:230
float t_mbts_timeA
Definition ZdcNtuple.h:344
uint16_t t_mbts_countC
Definition ZdcNtuple.h:343
unsigned int t_centroidStatus[2]
Definition ZdcNtuple.h:270
float t_clusetaMax
Definition ZdcNtuple.h:405
float t_ZdcTruthNonEM[2]
Definition ZdcNtuple.h:203
uint8_t t_bunchGroup
Definition ZdcNtuple.h:154
uint32_t t_runNumber
Definition ZdcNtuple.h:149
unsigned int zdcLowGainMode
Definition ZdcNtuple.h:75
float t_edgeGapC
Definition ZdcNtuple.h:327
int t_vxnlooseprimary
Definition ZdcNtuple.h:296
bool enableRPD
Definition ZdcNtuple.h:88
float t_ZdcAmp[2]
Definition ZdcNtuple.h:188
int t_vxngoodmuon
Definition ZdcNtuple.h:298
TTree * m_outputTree
Definition ZdcNtuple.h:148
bool zdcInj
Definition ZdcNtuple.h:73
size_t trackLimit
Definition ZdcNtuple.h:76
const xAOD::EnergySumRoI * m_lvl1EnergySumRoI
Definition ZdcNtuple.h:125
float t_RpdChannelPileupExpFitMSE[2][16]
Definition ZdcNtuple.h:256
std::vector< std::vector< int > > proton_track_stationID
Definition ZdcNtuple.h:418
SG::ReadHandleKey< xAOD::ZdcModuleContainer > m_zdcModuleContainerName
Definition ZdcNtuple.h:107
float t_totalEt24_TTsum
Definition ZdcNtuple.h:323
float t_ZdcTruthEscaped[2]
Definition ZdcNtuple.h:204
float t_ZdcModulePeakADCHG[2][4]
Definition ZdcNtuple.h:236
std::shared_ptr< ZdcInjPulserAmpMap > m_zdcInjPulserAmpMap
Definition ZdcNtuple.h:130
std::vector< float > t_ZdcTruthParticleEnergy
Definition ZdcNtuple.h:212
std::vector< double > proton_e
Definition ZdcNtuple.h:414
bool useGRL
Definition ZdcNtuple.h:54
bool oo2025
Definition ZdcNtuple.h:86
float t_fcalEtA_TT
Definition ZdcNtuple.h:315
float t_vxsumpt2
Definition ZdcNtuple.h:291
uint32_t t_bcid
Definition ZdcNtuple.h:152
float t_ZdcEnergyErr[2]
Definition ZdcNtuple.h:191
float t_ZdcModuleTruthEM[2][7]
Definition ZdcNtuple.h:246
std::vector< float > t_ZdcTruthParticleTime
Definition ZdcNtuple.h:208
std::vector< uint8_t > t_trk_nPixHits
Definition ZdcNtuple.h:375
uint32_t t_extendedLevel1ID
Definition ZdcNtuple.h:156
unsigned short t_ZdcLucrodTriggerSideAmpLG[2]
Definition ZdcNtuple.h:199
unsigned int t_RpdChannelStatus[2][16]
Definition ZdcNtuple.h:263
float t_L1ET
Definition ZdcNtuple.h:140
uint16_t t_raw40[2][4][2][2][40]
Definition ZdcNtuple.h:355
std::string auxSuffix
Definition ZdcNtuple.h:80
bool writeOnlyTriggers
Definition ZdcNtuple.h:59
std::vector< float > t_ZdcTruthParticlePosz
Definition ZdcNtuple.h:207
char t_centroidEventValid
Definition ZdcNtuple.h:269
bool t_decisions[200]
Definition ZdcNtuple.h:172
bool enableClusters
Definition ZdcNtuple.h:62
asg::AnaToolHandle< ZDC::IZdcAnalysisTool > m_zdcAnalysisTool
Definition ZdcNtuple.h:103
float t_totalEt_TTsum
Definition ZdcNtuple.h:321
std::vector< float > t_ZdcTruthParticlePz
Definition ZdcNtuple.h:211
uint16_t t_rpdRaw40[2][16][40]
Definition ZdcNtuple.h:359
uint32_t t_trigger_TBP
Definition ZdcNtuple.h:168
std::vector< std::vector< float > > proton_track_xSlope
Definition ZdcNtuple.h:422
int t_vxntrk
Definition ZdcNtuple.h:286
bool m_isMC
Definition ZdcNtuple.h:134
void setupTriggerHistos()
std::vector< float > t_ZdcTruthParticlePosx
Definition ZdcNtuple.h:205
int trackQuality(const xAOD::TrackParticle *tp, const xAOD::Vertex *vertex)
float t_yColCentroid[2][4]
Definition ZdcNtuple.h:280
float t_ZdcModuleTruthInvis[2][7]
Definition ZdcNtuple.h:245
std::vector< uint8_t > t_trk_nexPixHits
Definition ZdcNtuple.h:386
float m_gapPtMin
Definition ZdcNtuple.h:328
float t_ZdcModuleMaxADCHG[2][4]
Definition ZdcNtuple.h:234
std::vector< float > t_cc_sig
Definition ZdcNtuple.h:395
std::vector< double > proton_phi
Definition ZdcNtuple.h:413
std::vector< uint8_t > t_trk_inPixHits
Definition ZdcNtuple.h:383
float t_T2mbts_out_t[2][4]
Definition ZdcNtuple.h:183
float t_fcalEt
Definition ZdcNtuple.h:312
uint8_t t_zdcEventInfoError
Definition ZdcNtuple.h:161
std::vector< int > t_ZdcTruthParticleStatus
Definition ZdcNtuple.h:214
float t_RpdChannelPileupStretchedExpFitParams[2][16][3]
Definition ZdcNtuple.h:253
float t_ZdcModuleMaxADCLG[2][4]
Definition ZdcNtuple.h:235
std::vector< uint8_t > t_trk_nTrtOutliers
Definition ZdcNtuple.h:382
uint32_t t_lumiBlock
Definition ZdcNtuple.h:151
float t_edgeGapA
Definition ZdcNtuple.h:326
bool zdcCalib
Definition ZdcNtuple.h:71
std::vector< float > t_trk_e
Definition ZdcNtuple.h:366
const xAOD::HIEventShapeContainer * m_eventShapes
Definition ZdcNtuple.h:118
std::vector< uint8_t > t_trk_exPixHits
Definition ZdcNtuple.h:384
float t_ZdcModuleMaxADC[2][4]
Definition ZdcNtuple.h:233
float t_ZdcModuleTruthEscaped[2][7]
Definition ZdcNtuple.h:248
uint8_t t_zdcDecodingError
Definition ZdcNtuple.h:164
float t_mbts_out_e[2][4]
Definition ZdcNtuple.h:176
@ CELL_SIGNIFICANCE
Cell significance = E/sig of the cell with the largest |E|/sig.
@ CELL_SIG_SAMPLING
CaloSample of the cell with the largest |E|/sig.
CaloSampling::CaloSample CaloSample
@ Tile
The Tile calorimeter.
@ Core
Core flags describing the event.
@ ForwardDet
The forward detectors.
@ LAr
The LAr calorimeter.
@ Error
The sub-detector issued an error.
float z() const
Returns the z position.
size_t nTrackParticles() const
Get the number of tracks associated with this vertex.
const TrackParticleLinks_t & trackParticleLinks() const
Get all the particles associated with the vertex.
float y() const
Returns the y position.
VxType::VertexType vertexType() const
The type of the vertex.
float x() const
Returns the x position.
This module defines the arguments passed from the BATCH driver to the BATCH worker.
HepMC3::GenEvent GenEvent
Definition GenEvent.h:39
Definition index.py:1
@ PileUp
Pile-up vertex.
@ PriVtx
Primary vertex.
ZdcModule_v1 ZdcModule
Definition ZdcModule.h:15
TrackParticle_v1 TrackParticle
Reference the current persistent version:
Vertex_v1 Vertex
Define the latest version of the vertex class.
@ pixeldEdx
the dE/dx estimate, calculated using the pixel clusters [?
Extra patterns decribing particle interation process.
TChain * tree