ATLAS Offline Software
ZdcLEDNtuple.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 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"
11 
12 #include <ZdcNtuple/ZdcLEDNtuple.h>
13 
14 ZdcLEDNtuple ::ZdcLEDNtuple(const std::string &name, ISvcLocator *pSvcLocator)
15  : EL::AnaAlgorithm(name, pSvcLocator)
16 {
17 
18 
19  declareProperty("enableOutputTree", enableOutputTree = true, "Enable output tree");
20  declareProperty("auxSuffix", auxSuffix = "", "comment");
21 
22  m_eventCounter = 0;
23 }
24 
26 {
27 
28  ANA_MSG_DEBUG("Howdy from Initialize!");
29 
30  ANA_CHECK(m_zdcModuleContainerName.initialize());
31  ANA_CHECK(m_zdcSumContainerName.initialize());
32 
33  if (enableOutputTree)
34  {
35 
36  ANA_CHECK(book(TTree("zdcLEDTree", "ZDC LED Tree")));
37  m_outputTree = tree("zdcLEDTree");
38 
39  m_outputTree->Branch("bcid", &t_bcid, "bcid/i");
40  m_outputTree->Branch("runNumber", &t_runNumber, "runNumber/i");
41  m_outputTree->Branch("eventNumber", &t_eventNumber, "eventNumber/i");
42  m_outputTree->Branch("lumiBlock", &t_lumiBlock, "lumiBlock/i");
43  m_outputTree->Branch("bunchGroup", &t_bunchGroup, "bunchGroup/b");
44  m_outputTree->Branch("extendedLevel1ID", &t_extendedLevel1ID, "extendedLevel1ID/i");
45  m_outputTree->Branch("timeStamp", &t_timeStamp, "timeStamp/i");
46  m_outputTree->Branch("timeStampNSOffset", &t_timeStampNSOffset, "timeStampNSOffset/i");
47 
48  m_outputTree->Branch("avgIntPerCrossing", &t_avgIntPerCrossing, "avgIntPerCrossing/F");
49  m_outputTree->Branch("actIntPerCrossing", &t_actIntPerCrossing, "actIntPerCrossing/F");
50 
51  m_outputTree->Branch("LEDType", &t_LEDType, "LEDType/i");
52 
53  m_outputTree->Branch("ZdcModulePresample", &t_ZdcModulePresample, Form("ZdcModulePresample[%d][%d]/F", nSides, nZDC));
54  m_outputTree->Branch("ZdcModuleADCSum", &t_ZdcModuleADCSum, Form("ZdcModuleADCSum[%d][%d]/I", nSides, nZDC));
55  m_outputTree->Branch("ZdcModuleMaxADC", &t_ZdcModuleMaxADC, Form("ZdcModuleMaxADC[%d][%d]/I", nSides, nZDC));
56  m_outputTree->Branch("ZdcModuleMaxSample", &t_ZdcModuleMaxSample, Form("ZdcModuleMaxSample[%d][%d]/i", nSides, nZDC));
57  m_outputTree->Branch("ZdcModuleAvgTime", &t_ZdcModuleAvgTime, Form("ZdcModuleAvgTime[%d][%d]/F", nSides, nZDC));
58  m_outputTree->Branch("ZdcModuleRawsLowGain", &t_ZdcModuleg0data, Form("ZdcModuleRawsLowGain[%d][%d][%d]/s", nSides, nZDC, nSamples));
59  m_outputTree->Branch("ZdcModuleRawsHighGain", &t_ZdcModuleg1data, Form("ZdcModuleRawsHighGain[%d][%d][%d]/s", nSides, nZDC, nSamples));
60  m_outputTree->Branch("RPDModuleRaws", &t_RPDModuleRawdata, Form("RPDModuleRaws[%d][%d][%d]/s", nSides, nRPD, nSamples));
61  m_outputTree->Branch("RPDModulePresample", &t_RPDModulePresample, Form("RPDModulePresample[%d][%d]/F", nSides, nRPD));
62  m_outputTree->Branch("RPDModuleADCSum", &t_RPDModuleADCSum, Form("RPDModuleADCSum[%d][%d]/I", nSides, nRPD));
63  m_outputTree->Branch("RPDModuleMaxADC", &t_RPDModuleMaxADC, Form("RPDModuleMaxADC[%d][%d]/I", nSides, nRPD));
64  m_outputTree->Branch("RPDModuleMaxSample", &t_RPDModuleMaxSample, Form("RPDModuleMaxSample[%d][%d]/i", nSides, nRPD));
65  m_outputTree->Branch("RPDModuleAvgTime", &t_RPDModuleAvgTime, Form("RPDModuleAvgTime[%d][%d]/F", nSides, nRPD));
66  }
67 
68  return StatusCode::SUCCESS;
69 }
70 
72 {
73  if (!evtStore())
74  {
75  ANA_MSG_INFO("*** No event found! ***");
76  return StatusCode::SUCCESS;
77  }
78 
79  ANA_CHECK(evtStore()->retrieve(m_eventInfo, "EventInfo"));
82 
83  if (enableOutputTree)
84  {
85  if (t_LEDType == 0 || t_LEDType == 1 || t_LEDType == 2 )
86  {
87  tree("zdcLEDTree")->Fill();
88  }
89  }
90 
91  return StatusCode::SUCCESS;
92 }
93 
95 {
96  // iside 0 is side C, iside 1 is side A
99 
100  ANA_MSG_DEBUG("copying already processed info!");
101 
102  for (size_t iside = 0; iside < nSides; iside++)
103  {
104  for (int imod = 0; imod < nZDC; imod++)
105  {
106  t_ZdcModulePresample[iside][imod] = 0;
107  t_ZdcModuleADCSum[iside][imod] = 0;
108  t_ZdcModuleMaxADC[iside][imod] = 0;
109  t_ZdcModuleMaxSample[iside][imod] = 0;
110  t_ZdcModuleAvgTime[iside][imod] = 0;
111 
112  for (int isam = 0; isam < nSamples; isam++)
113  {
114  t_ZdcModuleg0data[iside][imod][isam] = 0;
115  t_ZdcModuleg1data[iside][imod][isam] = 0;
116  }
117  }
118  for (int imod = 0; imod < nRPD; imod++)
119  {
120  t_RPDModulePresample[iside][imod] = 0;
121  t_RPDModuleADCSum[iside][imod] = 0;
122  t_RPDModuleMaxADC[iside][imod] = 0;
123  t_RPDModuleMaxSample[iside][imod] = 0;
124  t_RPDModuleAvgTime[iside][imod] = 0;
125  }
126  }
127 
128  ANA_MSG_DEBUG("accessing ZdcModules");
129 
130  if (zdcModules.ptr())
131  {
132 
133  for (const auto zdcMod : *zdcModules)
134  {
135  if (zdcMod->isAvailable<int>("ADCSum" + auxSuffix))
136  {
137  if (zdcSums.ptr())
138  {
139  for (const auto zdcSum : *zdcSums)
140  {
141  if (zdcSum->zdcSide() == infoSumInd)
142  {
143  if (zdcSum->isAvailable<unsigned int>("LEDType" + auxSuffix))
144  {
145  t_LEDType = zdcSum->auxdataConst<unsigned int>("LEDType" + auxSuffix);
146  break;
147  }
148  }
149  }
150  }
151  }
152  else
153  {
154  t_LEDType = 999;
155  break;
156  }
157  if (zdcMod->zdcSide() != 0)
158  { // side 0 is info
159  int iside = 0;
160  if (zdcMod->zdcSide() > 0)
161  iside = 1;
162 
163  ANA_MSG_VERBOSE("Module " << zdcMod->zdcSide() << " " << zdcMod->zdcModule());
164  if (zdcMod->zdcType() == ZdcTypeInd)
165  {
166  int imod = zdcMod->zdcModule();
167  if (!zdcMod->isAvailable<float>("Presample"+auxSuffix))
168  {
169  ANA_MSG_WARNING("Missing ZDC aux data");
170  continue;
171  }
172  t_ZdcModulePresample[iside][imod] = zdcMod->auxdataConst<float>("Presample" + auxSuffix);
173  t_ZdcModuleADCSum[iside][imod] = zdcMod->auxdataConst<int>("ADCSum" + auxSuffix);
174  t_ZdcModuleMaxADC[iside][imod] = zdcMod->auxdataConst<int>("MaxADC" + auxSuffix);
175  t_ZdcModuleMaxSample[iside][imod] = zdcMod->auxdataConst<unsigned int>("MaxSample" + auxSuffix);
176  t_ZdcModuleAvgTime[iside][imod] = zdcMod->auxdataConst<float>("AvgTime" + auxSuffix);
177 
178  g0dataVec = zdcMod->auxdataConst<std::vector<uint16_t>>("g0data" + auxSuffix);
179  g1dataVec = zdcMod->auxdataConst<std::vector<uint16_t>>("g1data" + auxSuffix);
180 
181  for (int isam = 0; isam < nSamples; isam++)
182  {
183  t_ZdcModuleg0data[iside][imod][isam] = g0dataVec.at(isam);
184  t_ZdcModuleg1data[iside][imod][isam] = g1dataVec.at(isam);
185  }
186  }
187  if ((zdcMod->zdcType() == RPDTypeInd) && (zdcMod->zdcModule() == RPDModuleInd))
188  {
189  int imod = zdcMod->zdcChannel();
190  if (!zdcMod->isAvailable<float>("Presample"+auxSuffix))
191  {
192  ANA_MSG_WARNING("Missing RPD aux data");
193  continue;
194  }
195  t_RPDModulePresample[iside][imod] = zdcMod->auxdataConst<float>("Presample" + auxSuffix);
196  t_RPDModuleADCSum[iside][imod] = zdcMod->auxdataConst<int>("ADCSum" + auxSuffix);
197  t_RPDModuleMaxADC[iside][imod] = zdcMod->auxdataConst<int>("MaxADC" + auxSuffix);
198  t_RPDModuleMaxSample[iside][imod] = zdcMod->auxdataConst<unsigned int>("MaxSample" + auxSuffix);
199  t_RPDModuleAvgTime[iside][imod] = zdcMod->auxdataConst<float>("AvgTime" + auxSuffix);
200 
201  g0dataVec = zdcMod->auxdataConst<std::vector<uint16_t>>("g0data" + auxSuffix);
202 
203  for (int isam = 0; isam < nSamples; isam++)
204  {
205  t_RPDModuleRawdata[iside][imod][isam] = g0dataVec.at(isam);
206  }
207  }
208  }
209  }
210  }
211 }
212 
214 {
215  ANA_MSG_DEBUG("processing event info");
216 
217  t_bcid = m_eventInfo->bcid();
221  t_bunchGroup = -1;
227 
228  if (!(m_eventCounter++ % 1000))
229  {
230  ANA_MSG_INFO("Event# " << m_eventCounter << "Run " << m_eventInfo->runNumber() << " Event " << m_eventInfo->eventNumber() << " LB " << m_eventInfo->lumiBlock());
231  }
232 }
233 
235 {
236  return StatusCode::SUCCESS;
237 }
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
ShallowCopy.h
ZdcLEDNtuple::initialize
virtual StatusCode initialize() override
Definition: ZdcLEDNtuple.cxx:25
ZdcLEDNtuple::m_zdcSumContainerName
SG::ReadHandleKey< xAOD::ZdcModuleContainer > m_zdcSumContainerName
Definition: ZdcLEDNtuple.h:21
ZdcLEDNtuple::t_eventNumber
uint32_t t_eventNumber
Definition: ZdcLEDNtuple.h:34
ZdcLEDNtuple::t_ZdcModuleMaxSample
unsigned int t_ZdcModuleMaxSample[nSides][nZDC]
Definition: ZdcLEDNtuple.h:62
xAOD::EventInfo_v1::eventNumber
uint64_t eventNumber() const
The current event's event number.
ZdcLEDNtuple::nSamples
static constexpr int nSamples
Definition: ZdcLEDNtuple.h:50
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
ZdcLEDNtuple::t_bcid
uint32_t t_bcid
Definition: ZdcLEDNtuple.h:36
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
ZdcLEDNtuple::m_eventInfo
const xAOD::EventInfo * m_eventInfo
Definition: ZdcLEDNtuple.h:22
ZdcLEDNtuple::t_RPDModuleADCSum
int t_RPDModuleADCSum[nSides][nRPD]
Definition: ZdcLEDNtuple.h:74
ZdcLEDNtuple::processEventInfo
void processEventInfo()
Definition: ZdcLEDNtuple.cxx:213
ZdcLEDNtuple::t_runNumber
uint32_t t_runNumber
Definition: ZdcLEDNtuple.h:33
ZdcLEDNtuple::RPDModuleInd
static constexpr int RPDModuleInd
Definition: ZdcLEDNtuple.h:55
ZdcLEDNtuple::nZDC
static constexpr int nZDC
Definition: ZdcLEDNtuple.h:48
ZdcLEDNtuple::t_RPDModuleMaxADC
int t_RPDModuleMaxADC[nSides][nRPD]
Definition: ZdcLEDNtuple.h:75
ANA_CHECK
#define ANA_CHECK(EXP)
check whether the given expression was successful
Definition: Control/AthToolSupport/AsgMessaging/AsgMessaging/MessageCheck.h:324
ZdcLEDNtuple::nRPD
static constexpr int nRPD
Definition: ZdcLEDNtuple.h:49
ZdcLEDNtuple::t_ZdcModuleADCSum
int t_ZdcModuleADCSum[nSides][nZDC]
Definition: ZdcLEDNtuple.h:60
xAOD::EventInfo_v1::timeStampNSOffset
uint32_t timeStampNSOffset() const
Nanosecond time offset wrt. the time stamp.
xAOD::EventInfo_v1::runNumber
uint32_t runNumber() const
The current event's run number.
ZdcLEDNtuple::ZdcLEDNtuple
ZdcLEDNtuple(const std::string &name, ISvcLocator *pSvcLocator)
Definition: ZdcLEDNtuple.cxx:14
ZdcLEDNtuple::t_LEDType
unsigned int t_LEDType
Definition: ZdcLEDNtuple.h:45
ZdcLEDNtuple::t_bunchGroup
uint8_t t_bunchGroup
Definition: ZdcLEDNtuple.h:37
AthCommonDataStore< AthCommonMsg< Algorithm > >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:85
ZdcLEDNtuple::infoSumInd
static constexpr int infoSumInd
Definition: ZdcLEDNtuple.h:56
ZdcLEDNtuple::enableOutputTree
bool enableOutputTree
Definition: ZdcLEDNtuple.h:26
ZdcLEDNtuple::t_RPDModulePresample
float t_RPDModulePresample[nSides][nRPD]
Definition: ZdcLEDNtuple.h:73
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
Message.h
ANA_MSG_INFO
#define ANA_MSG_INFO(xmsg)
Macro printing info messages.
Definition: Control/AthToolSupport/AsgMessaging/AsgMessaging/MessageCheck.h:290
ZdcLEDNtuple::t_RPDModuleAvgTime
float t_RPDModuleAvgTime[nSides][nRPD]
Definition: ZdcLEDNtuple.h:77
ANA_MSG_WARNING
#define ANA_MSG_WARNING(xmsg)
Macro printing warning messages.
Definition: Control/AthToolSupport/AsgMessaging/AsgMessaging/MessageCheck.h:292
ZdcLEDNtuple::m_outputTree
TTree * m_outputTree
Definition: ZdcLEDNtuple.h:30
TEvent.h
xAOD::EventInfo_v1::extendedLevel1ID
uint32_t extendedLevel1ID() const
The extended Level-1 identifier.
EL
This module defines the arguments passed from the BATCH driver to the BATCH worker.
Definition: AlgorithmWorkerData.h:24
Init.h
ZdcLEDNtuple::t_RPDModuleMaxSample
unsigned int t_RPDModuleMaxSample[nSides][nRPD]
Definition: ZdcLEDNtuple.h:76
ZdcLEDNtuple::t_actIntPerCrossing
float t_actIntPerCrossing
Definition: ZdcLEDNtuple.h:42
ZdcLEDNtuple::t_ZdcModulePresample
float t_ZdcModulePresample[nSides][nZDC]
Definition: ZdcLEDNtuple.h:59
ZdcLEDNtuple.h
xAOD::EventInfo_v1::lumiBlock
uint32_t lumiBlock() const
The current event's luminosity block number.
ZdcLEDNtuple::t_avgIntPerCrossing
float t_avgIntPerCrossing
Definition: ZdcLEDNtuple.h:41
ZdcLEDNtuple::t_extendedLevel1ID
uint32_t t_extendedLevel1ID
Definition: ZdcLEDNtuple.h:38
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
ZdcLEDNtuple::g0dataVec
std::vector< uint16_t > g0dataVec
Definition: ZdcLEDNtuple.h:70
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:195
ZdcLEDNtuple::m_zdcModuleContainerName
SG::ReadHandleKey< xAOD::ZdcModuleContainer > m_zdcModuleContainerName
Definition: ZdcLEDNtuple.h:20
ZdcLEDNtuple::t_ZdcModuleMaxADC
int t_ZdcModuleMaxADC[nSides][nZDC]
Definition: ZdcLEDNtuple.h:61
ZdcLEDNtuple::auxSuffix
std::string auxSuffix
Definition: ZdcLEDNtuple.h:16
SG::ReadHandle::ptr
const_pointer_type ptr()
Dereference the pointer.
ZdcLEDNtuple::t_lumiBlock
uint32_t t_lumiBlock
Definition: ZdcLEDNtuple.h:35
ZdcLEDNtuple::t_ZdcModuleg1data
uint16_t t_ZdcModuleg1data[nSides][nZDC][nSamples]
Definition: ZdcLEDNtuple.h:66
ZdcLEDNtuple::t_RPDModuleRawdata
uint16_t t_RPDModuleRawdata[nSides][nRPD][nSamples]
Definition: ZdcLEDNtuple.h:68
ZdcLEDNtuple::t_timeStamp
uint32_t t_timeStamp
Definition: ZdcLEDNtuple.h:39
ZdcLEDNtuple::t_ZdcModuleg0data
uint16_t t_ZdcModuleg0data[nSides][nZDC][nSamples]
Definition: ZdcLEDNtuple.h:65
ZdcLEDNtuple::execute
virtual StatusCode execute() override
Definition: ZdcLEDNtuple.cxx:71
ZdcLEDNtuple::ZdcTypeInd
static constexpr int ZdcTypeInd
Definition: ZdcLEDNtuple.h:52
xAOD::EventInfo_v1::timeStamp
uint32_t timeStamp() const
POSIX time in seconds from 1970. January 1st.
ZdcLEDNtuple::t_timeStampNSOffset
uint32_t t_timeStampNSOffset
Definition: ZdcLEDNtuple.h:40
xAOD::EventInfo_v1::bcid
uint32_t bcid() const
The bunch crossing ID of the event.
ZdcLEDNtuple::m_eventCounter
int m_eventCounter
Definition: ZdcLEDNtuple.h:23
ZdcLEDNtuple::t_ZdcModuleAvgTime
float t_ZdcModuleAvgTime[nSides][nZDC]
Definition: ZdcLEDNtuple.h:63
ZdcLEDNtuple::RPDTypeInd
static constexpr int RPDTypeInd
Definition: ZdcLEDNtuple.h:53
ZdcLEDNtuple::nSides
static constexpr int nSides
Definition: ZdcLEDNtuple.h:47
ZdcLEDNtuple::g1dataVec
std::vector< uint16_t > g1dataVec
Definition: ZdcLEDNtuple.h:71
ZdcLEDNtuple::processZdcLEDNtupleFromModules
void processZdcLEDNtupleFromModules()
Definition: ZdcLEDNtuple.cxx:94
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
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
ZdcLEDNtuple::finalize
virtual StatusCode finalize() override
Definition: ZdcLEDNtuple.cxx:234
ANA_MSG_DEBUG
#define ANA_MSG_DEBUG(xmsg)
Macro printing debug messages.
Definition: Control/AthToolSupport/AsgMessaging/AsgMessaging/MessageCheck.h:288