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