ATLAS Offline Software
LArDigits2Ntuple.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
9 
10 LArDigits2Ntuple::LArDigits2Ntuple(const std::string& name, ISvcLocator* pSvcLocator):
11  LArCond2NtupleBase(name, pSvcLocator),
12  m_ipass(0),
13  m_event(0)
14 {
15  m_ntTitle = "LArDigits";
16  m_ntpath = "/NTUPLES/FILE1/LARDIGITS";
17 }
18 
20 = default;
21 
22 
24 {
25  ATH_MSG_DEBUG( "in initialize" );
26 
27  ATH_MSG_DEBUG(" IS it SC?? " << m_isSC );
28 
29  if( (m_contKey.key().size()) && (m_accContKey.key().size() || m_accCalibContKey.key().size()) ){
30  ATH_MSG_FATAL("Could not run with both standard and acc. digits !!!");
31  ATH_MSG_FATAL("m_contKey: "<<m_contKey.key()<<" m_accContKey: "<<m_accContKey.key()<<" m_accCalibContKey: "<<m_accCalibContKey.key());
32  return StatusCode::FAILURE;
33  }
34 
36 
37  StatusCode sc = m_nt->addItem("IEvent",m_IEvent);
38  if (sc!=StatusCode::SUCCESS) {
39  ATH_MSG_ERROR( "addItem 'IEvent' failed" );
40  return sc;
41  }
42 
43  if(m_accContKey.key().size() || m_accCalibContKey.key().size()) {
44  sc = m_nt->addItem("mean",m_Nsamples,m_mean);
45  if (sc!=StatusCode::SUCCESS) {
46  ATH_MSG_ERROR( "addItem 'mean' failed" );
47  return sc;
48  }
49  sc = m_nt->addItem("RMS",m_Nsamples,m_RMS);
50  if (sc!=StatusCode::SUCCESS) {
51  ATH_MSG_ERROR( "addItem 'RMS' failed" );
52  return sc;
53  }
54  if(m_accCalibContKey.key().size()) {
55  sc = m_nt->addItem("DAC",m_dac);
56  if (sc!=StatusCode::SUCCESS) {
57  ATH_MSG_ERROR( "addItem 'DAC' failed" );
58  return sc;
59  }
60  sc = m_nt->addItem("delay",m_delay);
61  if (sc!=StatusCode::SUCCESS) {
62  ATH_MSG_ERROR( "addItem 'delay' failed" );
63  return sc;
64  }
65  sc = m_nt->addItem("Pulsed",m_pulsed);
66  if (sc!=StatusCode::SUCCESS) {
67  ATH_MSG_ERROR( "addItem 'Pulsed' failed" );
68  return sc;
69  }
70  }
71  }
72 
73  if(m_contKey.key().size()) {
74  sc = m_nt->addItem("samples",m_Nsamples,m_samples);
75  if (sc!=StatusCode::SUCCESS) {
76  ATH_MSG_ERROR( "addItem 'samples' failed" );
77  return sc;
78  }
79  }
80 
81  sc = m_nt->addItem("Nsamples",m_ntNsamples,0,32);
82  if (sc!=StatusCode::SUCCESS) {
83  ATH_MSG_ERROR( "addItem 'Nsamples' failed" );
84  return sc;
85  }
86 
87  if(m_fillBCID){
88  sc = m_nt->addItem("BCID",m_bcid);
89  if (sc!=StatusCode::SUCCESS) {
90  ATH_MSG_ERROR( "addItem 'BCID' failed" );
91  return sc;
92  }
93  }
94 
95  sc = m_nt->addItem("ELVL1Id",m_ELVL1Id);
96  if (sc!=StatusCode::SUCCESS) {
97  ATH_MSG_ERROR( "addItem 'ELVL1Id' failed" );
98  return sc;
99  }
100 
101  if(!m_isSC){
102  sc = m_nt->addItem("Gain",m_gain,-1,3);
103  if (sc!=StatusCode::SUCCESS) {
104  ATH_MSG_ERROR( "addItem 'Gain' failed" );
105  return sc;
106  }
107  }
108 
109  if(m_fillLB){
110  NTuplePtr nt(ntupleSvc(),m_ntpath+"Evnt");
111  if (!nt) {
112  nt=ntupleSvc()->book(m_ntpath+"Evnt",CLID_ColumnWiseTuple,m_ntTitle+"Evnt");
113  }
114  if (!nt){
115  ATH_MSG_ERROR( "Booking of NTuple at "<< m_ntpath << " and name " << m_ntTitle << " failed" );
116  return StatusCode::FAILURE;
117  }
118 
119  m_evt_nt=nt;
120 
121  sc = m_evt_nt->addItem("IEvent",m_IEventEvt);
122  if (sc!=StatusCode::SUCCESS) {
123  ATH_MSG_ERROR( "addItem 'IEvent' failed" );
124  return sc;
125  }
126 
127  sc=m_evt_nt->addItem("LB",m_LB);
128  if (sc.isFailure()) {
129  ATH_MSG_ERROR( "addItem 'LB' failed" );
130  return sc;
131  }
132  }
137 
138  m_ipass = 0;
139  m_event = 0;
140 
141  return StatusCode::SUCCESS;
142 
143 }
144 
146 {
147 
148  const EventContext& ctx = Gaudi::Hive::currentContext();
149  if(!m_contKey.key().size() && !m_accContKey.key().size() && !m_accCalibContKey.key().size()) return StatusCode::SUCCESS;
150 
151  StatusCode sc;
152 
153  ATH_MSG_DEBUG( "LArDigits2Ntuple in execute" );
154  m_event++;
155  unsigned long long thisevent;
156  unsigned long thisbcid = 0;
157  unsigned long thisELVL1Id = 0;
158 
159  thisevent = ctx.eventID().event_number();
160 
161  // Get BCID from FEB header
162  if ( !m_isSC ){ // we are not processing SC data, Feb header could be accessed
164  if (! hdrCont.isValid()) {
165  ATH_MSG_WARNING( "No LArFEB container found in TDS" );
166  }
167  else {
168  ATH_MSG_DEBUG( "LArFEB container found");
169  if(m_fillBCID) thisbcid = (*hdrCont->begin())->BCId() ;
170  ATH_MSG_DEBUG( "BCID FROM FEB HEADER " << thisbcid );
171  thisELVL1Id = (*hdrCont->begin())->ELVL1Id();
172  ATH_MSG_DEBUG( "NSAMPLES FROM FEB HEADER " << (*hdrCont->begin())->NbSamples() );
173  }
174  }else{
175  // This should be used for main readout later, once TDAQ fill event headers also in calib. runs properly
176  thisbcid = ctx.eventID().bunch_crossing_id();
177  }
178 
179  if( m_contKey.key().size() ) { // fill from standard digits
181  if(!hdlDigit.isValid()) {
182  ATH_MSG_WARNING( "Unable to retrieve LArDigitContainer with key " << m_contKey << " from DetectorStore. " );
183  return StatusCode::SUCCESS;
184  } else
185  ATH_MSG_DEBUG( "Got LArDigitContainer with key " << m_contKey.key() );
186 
187  const LArDigitContainer DigitContainer = *hdlDigit;
188 
189  if(!hdlDigit.cptr()) {
190  ATH_MSG_WARNING( "No digits in this event ?");
191  return StatusCode::SUCCESS;
192  }
193 
194  for( const LArDigit *digi : DigitContainer ){
195 
196  if(m_fillBCID) m_bcid = thisbcid;
197  m_ELVL1Id = thisELVL1Id;
198  m_IEvent = thisevent;
199 
200  unsigned int trueMaxSample = digi->nsamples();
201 
202  if (!m_isSC){
203  m_gain = digi->gain();
204  if(m_gain < CaloGain::INVALIDGAIN || m_gain > CaloGain::LARNGAIN) m_gain = CaloGain::LARNGAIN;
205  }
206  if(trueMaxSample>m_Nsamples){
207  if(!m_ipass){
208  ATH_MSG_WARNING( "The number of digi samples in data is larger than the one specified by JO: " << trueMaxSample << " > " << m_Nsamples << " --> only " << m_Nsamples << " will be available in the ntuple " );
209  m_ipass = 1;
210  }
211  trueMaxSample = m_Nsamples;
212  }
213  else if(trueMaxSample<m_Nsamples){
214  if(!m_ipass){
215  ATH_MSG_WARNING( "The number of digi samples in data is lower than the one specified by JO: " << trueMaxSample << " > " << m_Nsamples << " --> only " << trueMaxSample << " will be available in the ntuple " );
216  m_ipass = 1;
217  }
218  }
219  m_ntNsamples = trueMaxSample;
220  ATH_MSG_DEBUG( "The number of digi samples in data "<< m_Nsamples );
221 
222  fillFromIdentifier(digi->hardwareID());
223 
224  if(m_isSC && m_fillEMB && m_barrel_ec !=0) continue;
225  if(m_isSC && m_fillEndcap && m_barrel_ec !=1) continue;
226 
227  if(m_FTlist.size() > 0) { // should do a selection
228  if(std::find(std::begin(m_FTlist), std::end(m_FTlist), m_FT) == std::end(m_FTlist)) { // is our FT in list ?
229  continue;
230  }
231  }
232 
233  if(m_Slotlist.size() > 0) { // should do a selection
234  if(std::find(std::begin(m_Slotlist), std::end(m_Slotlist), m_slot) == std::end(m_Slotlist)) { // is our slot in list ?
235  continue;
236  }
237  }
238  for(unsigned i = 0; i<trueMaxSample;++i) m_samples[i] = digi->samples().at(i);
239 
240 
241  ATH_CHECK( ntupleSvc()->writeRecord(m_nt) );
242  }// over cells
243  }// standard digits
244 
245  if( m_accCalibContKey.key().size() ) { // fill from acc. calib digits
247  if(!hdlDigit.isValid()) {
248  ATH_MSG_WARNING( "Unable to retrieve LArAccumulatedCalibDigitContainer with key " << m_accCalibContKey << " from DetectorStore. " );
249  return StatusCode::SUCCESS;
250  } else
251  ATH_MSG_DEBUG( "Got LArAccumulatedCalibDigitContainer with key " << m_accCalibContKey.key() );
252 
253  const LArAccumulatedCalibDigitContainer DigitContainer = *hdlDigit;
254 
255  if(!hdlDigit.cptr()) {
256  ATH_MSG_WARNING( "No digits in this event ?");
257  return StatusCode::SUCCESS;
258  }
259 
260  for( const LArAccumulatedCalibDigit *digi : DigitContainer ){
261 
262  if(m_fillBCID) m_bcid = thisbcid;
263  m_ELVL1Id = thisELVL1Id;
264  m_IEvent = thisevent;
265 
266  unsigned int trueMaxSample = digi->nsamples();
267 
268  if (!m_isSC){
269  m_gain = digi->gain();
270  if(m_gain < CaloGain::INVALIDGAIN || m_gain > CaloGain::LARNGAIN) m_gain = CaloGain::LARNGAIN;
271  }
272  if(trueMaxSample>m_Nsamples){
273  if(!m_ipass){
274  ATH_MSG_WARNING( "The number of digi samples in data is larger than the one specified by JO: " << trueMaxSample << " > " << m_Nsamples << " --> only " << m_Nsamples << " will be available in the ntuple " );
275  m_ipass = 1;
276  }
277  trueMaxSample = m_Nsamples;
278  }
279  else if(trueMaxSample<m_Nsamples){
280  if(!m_ipass){
281  ATH_MSG_WARNING( "The number of digi samples in data is lower than the one specified by JO: " << trueMaxSample << " > " << m_Nsamples << " --> only " << trueMaxSample << " will be available in the ntuple " );
282  m_ipass = 1;
283  }
284  }
285  m_ntNsamples = trueMaxSample;
286  ATH_MSG_DEBUG( "The number of acc. calib digi samples in data "<< m_Nsamples );
287 
288  fillFromIdentifier(digi->hardwareID());
289 
290  if(m_isSC && m_fillEMB && m_barrel_ec !=0) continue;
291  if(m_isSC && m_fillEndcap && m_barrel_ec !=1) continue;
292 
293  if(m_FTlist.size() > 0) { // should do a selection
294  if(std::find(std::begin(m_FTlist), std::end(m_FTlist), m_FT) == std::end(m_FTlist)) { // is our FT in list ?
295  continue;
296  }
297  }
298 
299  if(m_Slotlist.size() > 0) { // should do a selection
300  if(std::find(std::begin(m_Slotlist), std::end(m_Slotlist), m_slot) == std::end(m_Slotlist)) { // is our slot in list ?
301  continue;
302  }
303  }
304  for(unsigned i = 0; i<trueMaxSample;++i) {
305  m_mean[i] = digi->mean(i);
306  m_RMS[i] = digi->RMS(i);
307  }
308  //m_nTriggers = digi->nTriggers();
309  m_dac = digi->DAC();
310  m_delay = digi->delay();
311  m_pulsed = digi->getIsPulsedInt();
312 
313 
314  ATH_CHECK( ntupleSvc()->writeRecord(m_nt) );
315  }// over cells
316  }// acc calib. digits
317 
318  if( m_accContKey.key().size() ) { // fill from acc digits
320  if(!hdlDigit.isValid()) {
321  ATH_MSG_WARNING( "Unable to retrieve LArAccumulatedDigitContainer with key " << m_accContKey << " from DetectorStore. " );
322  return StatusCode::SUCCESS;
323  } else
324  ATH_MSG_DEBUG( "Got LArAccumulatedDigitContainer with key " << m_accContKey.key() );
325 
326  const LArAccumulatedDigitContainer DigitContainer = *hdlDigit;
327 
328  if(!hdlDigit.cptr()) {
329  ATH_MSG_WARNING( "No digits in this event ?");
330  return StatusCode::SUCCESS;
331  }
332 
333  for( const LArAccumulatedDigit *digi : DigitContainer ){
334 
335  if(m_fillBCID) m_bcid = thisbcid;
336  m_ELVL1Id = thisELVL1Id;
337  m_IEvent = thisevent;
338 
339  unsigned int trueMaxSample = digi->nsample();
340 
341  if (!m_isSC){
342  m_gain = digi->gain();
343  if(m_gain < CaloGain::INVALIDGAIN || m_gain > CaloGain::LARNGAIN) m_gain = CaloGain::LARNGAIN;
344  }
345 
346  if(trueMaxSample>m_Nsamples){
347  if(!m_ipass){
348  ATH_MSG_WARNING( "The number of digi samples in data is larger than the one specified by JO: " << trueMaxSample << " > " << m_Nsamples << " --> only " << m_Nsamples << " will be available in the ntuple " );
349  m_ipass = 1;
350  }
351  trueMaxSample = m_Nsamples;
352  } else if(trueMaxSample<m_Nsamples){
353  if(!m_ipass){
354  ATH_MSG_WARNING( "The number of digi samples in data is lower than the one specified by JO: " << trueMaxSample << " > " << m_Nsamples << " --> only " << trueMaxSample << " will be available in the ntuple " );
355  m_ipass = 1;
356  }
357  }
358  m_ntNsamples = trueMaxSample;
359  ATH_MSG_DEBUG( "The number of acc. digi samples in data "<< m_Nsamples );
360 
361  fillFromIdentifier(digi->hardwareID());
362 
363  if(m_isSC && m_fillEMB && m_barrel_ec !=0) continue;
364  if(m_isSC && m_fillEndcap && m_barrel_ec !=1) continue;
365 
366  if(m_FTlist.size() > 0) { // should do a selection
367  if(std::find(std::begin(m_FTlist), std::end(m_FTlist), m_FT) == std::end(m_FTlist)) { // is our FT in list ?
368  continue;
369  }
370  }
371 
372  if(m_Slotlist.size() > 0) { // should do a selection
373  if(std::find(std::begin(m_Slotlist), std::end(m_Slotlist), m_slot) == std::end(m_Slotlist)) { // is our slot in list ?
374  continue;
375  }
376  }
377  for(unsigned i = 0; i<trueMaxSample;++i) {
378  m_mean[i] = digi->mean(i);
379  m_RMS[i] = digi->RMS(i);
380  }
381 
382  ATH_CHECK( ntupleSvc()->writeRecord(m_nt) );
383  }// over cells
384  }// acc digits
385 
386  if(m_fillLB) {
387  m_IEventEvt = thisevent;
388  m_LB = ctx.eventID().lumi_block();
389 
390  sc = ntupleSvc()->writeRecord(m_evt_nt);
391  if (sc != StatusCode::SUCCESS) {
392  ATH_MSG_ERROR( "writeRecord failed" );
393  return sc;
394  }
395  }
396 
397  ATH_MSG_DEBUG( "LArDigits2Ntuple has finished." );
398  return StatusCode::SUCCESS;
399 }// end finalize-method.
LArDigits2Ntuple::m_evt_nt
NTuple::Tuple * m_evt_nt
Definition: LArDigits2Ntuple.h:54
LArAccumulatedCalibDigit
Data class for calibration ADC samples preprocessed by the DSP.
Definition: LArAccumulatedCalibDigit.h:42
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
LArDigits2Ntuple::m_LArFebHeaderContainerKey
SG::ReadHandleKey< LArFebHeaderContainer > m_LArFebHeaderContainerKey
Definition: LArDigits2Ntuple.h:62
LArDigits2Ntuple::m_dac
NTuple::Item< unsigned int > m_dac
Definition: LArDigits2Ntuple.h:48
LArDigits2Ntuple::m_IEventEvt
NTuple::Item< unsigned long long > m_IEventEvt
Definition: LArDigits2Ntuple.h:56
LArAccumulatedDigitContainer
Container class for LArAccumulatedDigit.
Definition: LArAccumulatedDigitContainer.h:22
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:135
SG::ReadHandle::cptr
const_pointer_type cptr()
Dereference the pointer.
LArCond2NtupleBase::m_slot
NTuple::Item< long > m_slot
Definition: LArCond2NtupleBase.h:72
LArDigits2Ntuple::LArDigits2Ntuple
LArDigits2Ntuple(const std::string &name, ISvcLocator *pSvcLocator)
Definition: LArDigits2Ntuple.cxx:10
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
LArDigits2Ntuple::m_Nsamples
Gaudi::Property< unsigned int > m_Nsamples
Definition: LArDigits2Ntuple.h:31
LArDigits2Ntuple::m_fillBCID
Gaudi::Property< bool > m_fillBCID
Definition: LArDigits2Ntuple.h:36
LArDigits2Ntuple::m_fillEMB
Gaudi::Property< bool > m_fillEMB
Definition: LArDigits2Ntuple.h:34
LArDigits2Ntuple::m_fillLB
Gaudi::Property< bool > m_fillLB
Definition: LArDigits2Ntuple.h:37
PlotCalibFromCool.begin
begin
Definition: PlotCalibFromCool.py:94
LArDigits2Ntuple::m_fillEndcap
Gaudi::Property< bool > m_fillEndcap
Definition: LArDigits2Ntuple.h:35
LArDigits2Ntuple::m_IEvent
NTuple::Item< unsigned long long > m_IEvent
Definition: LArDigits2Ntuple.h:43
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
CaloGain::LARNGAIN
@ LARNGAIN
Definition: CaloGain.h:19
LArCond2NtupleBase::initialize
StatusCode initialize()
Definition: LArCond2NtupleBase.cxx:33
LArDigits2Ntuple::m_ntNsamples
NTuple::Item< long > m_ntNsamples
Definition: LArDigits2Ntuple.h:39
LArDigits2Ntuple::m_ELVL1Id
NTuple::Item< unsigned long > m_ELVL1Id
Definition: LArDigits2Ntuple.h:42
LArCond2NtupleBase
Definition: LArCond2NtupleBase.h:32
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
LArCond2NtupleBase::m_barrel_ec
NTuple::Item< long > m_barrel_ec
Definition: LArCond2NtupleBase.h:72
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:93
LArDigits2Ntuple::m_event
long m_event
Definition: LArDigits2Ntuple.h:29
LArDigits2Ntuple::m_FTlist
Gaudi::Property< std::vector< unsigned int > > m_FTlist
Definition: LArDigits2Ntuple.h:32
LArDigits2Ntuple::m_bcid
NTuple::Item< short > m_bcid
Definition: LArDigits2Ntuple.h:41
LArAccumulatedDigit
Data class for ADC samples and autocorr preprocessed by the DSP.
Definition: LArAccumulatedDigit.h:32
LArDigits2Ntuple::m_RMS
NTuple::Array< float > m_RMS
Definition: LArDigits2Ntuple.h:47
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
LArDigits2Ntuple::execute
virtual StatusCode execute()
Definition: LArDigits2Ntuple.cxx:145
LArDigits2Ntuple::m_pulsed
NTuple::Item< unsigned int > m_pulsed
Definition: LArDigits2Ntuple.h:50
LArDigit
Liquid Argon digit base class.
Definition: LArDigit.h:25
LArDigits2Ntuple::m_gain
NTuple::Item< short > m_gain
Definition: LArDigits2Ntuple.h:40
lumiFormat.i
int i
Definition: lumiFormat.py:85
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
LArCond2NtupleBase::m_ntpath
std::string m_ntpath
Definition: LArCond2NtupleBase.h:65
LArCond2NtupleBase::m_nt
NTuple::Tuple * m_nt
Definition: LArCond2NtupleBase.h:68
LArSCDigit.h
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
LArDigits2Ntuple::m_accContKey
SG::ReadHandleKey< LArAccumulatedDigitContainer > m_accContKey
Definition: LArDigits2Ntuple.h:61
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
LArDigits2Ntuple.h
LArDigits2Ntuple::m_ipass
int m_ipass
Definition: LArDigits2Ntuple.h:28
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
LArDigits2Ntuple::m_Slotlist
Gaudi::Property< std::vector< unsigned int > > m_Slotlist
Definition: LArDigits2Ntuple.h:33
HWIdentifier.h
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:221
LArCond2NtupleBase::m_ntTitle
std::string m_ntTitle
Definition: LArCond2NtupleBase.h:65
LArDigits2Ntuple::m_contKey
SG::ReadHandleKey< LArDigitContainer > m_contKey
Definition: LArDigits2Ntuple.h:59
LArDigitContainer.h
LArCond2NtupleBase::fillFromIdentifier
bool fillFromIdentifier(const HWIdentifier &id)
Definition: LArCond2NtupleBase.cxx:288
LArDigits2Ntuple::initialize
virtual StatusCode initialize()
Definition: LArDigits2Ntuple.cxx:23
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
LArDigits2Ntuple::m_delay
NTuple::Item< unsigned int > m_delay
Definition: LArDigits2Ntuple.h:49
LArCond2NtupleBase::m_isSC
Gaudi::Property< bool > m_isSC
Definition: LArCond2NtupleBase.h:55
LArDigits2Ntuple::m_mean
NTuple::Array< float > m_mean
Definition: LArDigits2Ntuple.h:46
LArDigits2Ntuple::m_samples
NTuple::Array< short > m_samples
Definition: LArDigits2Ntuple.h:44
LArDigitContainer
Container class for LArDigit.
Definition: LArDigitContainer.h:24
beamspotnt.nt
def nt
Definition: bin/beamspotnt.py:1063
LArDigits2Ntuple::m_accCalibContKey
SG::ReadHandleKey< LArAccumulatedCalibDigitContainer > m_accCalibContKey
Definition: LArDigits2Ntuple.h:60
ntupleSvc
INTupleSvc * ntupleSvc()
Definition: ServiceAccessor.h:14
LArAccumulatedCalibDigitContainer
Container class for LArAccumulatedCalibDigit.
Definition: LArAccumulatedCalibDigitContainer.h:25
LArCond2NtupleBase::m_FT
NTuple::Item< long > m_FT
Definition: LArCond2NtupleBase.h:72
LArDigits2Ntuple::m_LB
NTuple::Item< short > m_LB
Definition: LArDigits2Ntuple.h:57
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
LArDigits2Ntuple::~LArDigits2Ntuple
~LArDigits2Ntuple()