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