ATLAS Offline Software
LArRawChannelBuilderDriver.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 
7 
10 #include "Identifier/Identifier.h"
11 #include "GaudiKernel/ThreadLocalContext.h"
12 
13 #include "CLHEP/Units/SystemOfUnits.h"
14 
16  ISvcLocator* pSvcLocator):
17  AthAlgorithm(name, pSvcLocator),
18  m_onlineHelper(nullptr),
19  m_DataLocation("FREE"),
20  m_ChannelContainerName("LArRawChannels"),
21  m_buildTools(this),
22  m_adc2eTools(this),
23  m_pedestalTools(this),
24  m_oldPedestal(0)
25 {
26  declareProperty("LArRawChannelContainerName", m_ChannelContainerName);
27  declareProperty("DataLocation", m_DataLocation );
28  declareProperty("BuilderTools", m_buildTools);
29  declareProperty("ADCtoEnergyTools", m_adc2eTools);
30  declareProperty("PedestalTools", m_pedestalTools);
31  declareProperty("checkSamples", m_checkSamples=32);
32  declareProperty("BuildDiscChannel", m_buildDiscChannel=false);
33  declareProperty("DefaultShiftTimeSample", m_defaultShiftTimeSamples=0);
34 }
35 
37 {
38  // initialize parameters
40 
41  ATH_CHECK( detStore()->retrieve(m_onlineHelper, "LArOnlineID") );
43 
44  ATH_CHECK( m_buildTools.retrieve() );
45  ATH_MSG_INFO("Successfully retrieved Builder Tools " << m_buildTools);
46  for (ToolHandle<ILArRawChannelBuilderToolBase>& tool : m_buildTools)
47  if( ( tool->initToolHidden(&m_params) ).isFailure() )
48  ATH_MSG_ERROR( "Unable to initialize Builder Tool " << tool->name() );
49 
50  ATH_CHECK( m_adc2eTools.retrieve() );
51  ATH_MSG_INFO("Successfully retrieved ADC2E Tools " << m_adc2eTools);
52  for (ToolHandle<ILArRawChannelBuilderADC2EToolBase>& tool : m_adc2eTools)
53  if( ( tool->initToolHidden(&m_params) ).isFailure() )
54  ATH_MSG_ERROR( "Unable to initialize ADC2E Tool " << tool->name() );
55 
56  ATH_CHECK( m_pedestalTools.retrieve() );
57  ATH_MSG_INFO("Successfully retrieved Pedestal Tools " << m_pedestalTools);
58  for (ToolHandle<ILArRawChannelBuilderPedestalToolBase>& tool : m_pedestalTools)
59  if( ( tool->initToolHidden(&m_params) ).isFailure() )
60  ATH_MSG_ERROR( "Unable to initialize Pedestal Tool " << tool->name() );
61 
62  // check that we have tools to run the reconstruction !
63  if( m_buildTools.empty() ){
64  ATH_MSG_ERROR( "Didn't find any BuilderTools to do reconstruction !" );
65  return(StatusCode::FAILURE);
66  }
67  if( m_adc2eTools.empty() ){
68  ATH_MSG_ERROR( "Didn't find and ADC2ETools to do reconstruction !" );
69  return(StatusCode::FAILURE);
70  }
71  if( m_pedestalTools.empty() ){
72  ATH_MSG_ERROR( "Didn't find and PedestalTools to do reconstruction !" );
73  return(StatusCode::FAILURE);
74  }
75  return StatusCode::SUCCESS;
76 }
77 
79 {
80  ATH_MSG_DEBUG("In execute");
81  const EventContext& ctx = Gaudi::Hive::currentContext();
82 
83  //Pointer to input data container
84  const LArDigitContainer* digitContainer=nullptr;
85 
86  //Retrieve Digit Container
87  ATH_MSG_DEBUG("About to retrieve LArDigitContainer with key " << m_DataLocation);
88 
89  if (evtStore()->retrieve(digitContainer,m_DataLocation).isFailure()) {
90  ATH_MSG_WARNING("Can't retrieve LArDigitContainer with key " << m_DataLocation << "from StoreGate.");
91  return StatusCode::SUCCESS;
92  }
93 
95  m_params.m_larRawChannelContainer->reserve(digitContainer->size());
96  // Put this LArRawChannel container in the transient store
98 
99 
100  ATH_MSG_VERBOSE("1) LArDigitContainer container size = " << digitContainer->size());
101 
102  if( digitContainer->empty() ) {
103  ATH_MSG_INFO( "Empty LArDigitContainer container." );
104  return StatusCode::SUCCESS;
105  }
106 
108  const LArOnOffIdMapping* cabling{*cablingHdl};
109  if(!cabling) {
110  ATH_MSG_ERROR( "Do not have cabling mapping from key " << m_cablingKey.key() );
111  return StatusCode::FAILURE;
112  }
113 
114  // declare all variables first ...
115  for (ToolHandle<ILArRawChannelBuilderToolBase>& tool : m_buildTools)
116  tool->initEventHidden();
117 
118  ATH_MSG_DEBUG("Start to build LArRawChannels");
119 
120  // reset to zero
122 
123  for (const LArDigit* digit : *digitContainer)
124  {
125  ATH_MSG_VERBOSE("building LArRawChannel");
126  m_params.curr_chid=digit->channelID();
127  m_params.curr_gain=digit->gain();
128 
130  // write ERROR message, could change to warning if needed
131  ATH_MSG_WARNING( " Corrupted data found : gain = " << m_params.curr_gain );
133  }
134 
135  if(!m_buildDiscChannel && !cabling->isOnlineConnected(m_params.curr_chid))
136  continue;
137 
138  m_params.curr_sample0 = digit->samples()[0];
141  m_params.curr_nsamples = m_checkSamples < digit->nsamples() ?
142  m_checkSamples : digit->nsamples();
144 
146 
147  if(m_params.curr_nsamples>0)
148  {
149  for( unsigned int i=0; i<m_params.curr_nsamples; i++ )
150  {
151  if( m_params.curr_maximum<digit->samples()[i] )
152  {
154  m_params.curr_maximum= digit->samples()[i];
155  }
156  }
157  }
158  //ATH_MSG_VERBOSE("now building LArRawChannel");
159 
160  //Invoke all LArRawChannelBuilderTools until one returns success
161  // indicated by a int=zero return code. The return code contains
162  // the error if non-zero
163 
164  // retrieve pedestal and get the ADC2E factors.
165  // The ramps are stored in the data member m_ramps
166  const float pedestal = this->pedestal();
167  this->ADC2energy (ctx);
168 
169  for (ToolHandle<ILArRawChannelBuilderToolBase>& tool : m_buildTools) {
170  if (tool->buildRawChannel(digit, pedestal, m_ramps, &msg())) break;
171  ATH_MSG_DEBUG("One LArRawChannelBuilderTool failed");
172  }
173 
174  //ATH_MSG_VERBOSE("done building LArRawChannel")
175  m_params.curr_id=0;
176  }
177 
178  ATH_MSG_DEBUG("Finished building LArRawChannels");
179 
180  //Organize Collections
181  // sortChannels(m_larRawChannelContainer);
182  //ATH_MSG_DEBUG( "sorted RawChannelContainer, now lock it " );
183  // lock raw channel container
184  if ( evtStore()->setConst(m_params.m_larRawChannelContainer).isFailure() ) {
185  ATH_MSG_WARNING( " Cannot lock RawChannel Container " );
186  // return(StatusCode::FAILURE);
187  }
188 
189 
190  // reset error counter per event
191  for (ToolHandle<ILArRawChannelBuilderToolBase>& tool : m_buildTools)
192  tool->finalEventHidden();
193 
194  for (ToolHandle<ILArRawChannelBuilderPedestalToolBase>& tool : m_pedestalTools)
195  tool->finalEventHidden();
196 
197  for (ToolHandle<ILArRawChannelBuilderADC2EToolBase>& tool : m_adc2eTools)
198  tool->finalEventHidden();
199 
200  return StatusCode::SUCCESS;
201 }
202 
204 {
205  // did we retrieved pedestals for this channel before ?
207  return m_oldPedestal;
208 
211 
212  while( !(*it)->pedestal(m_oldPedestal, &msg()) && ++it != itEnd )
213  ATH_MSG_DEBUG("One PedestalTool failed");
214 
215  // remember for which channel we retrieved the pedestal
217 
218  return m_oldPedestal;
219 }
220 
221 void LArRawChannelBuilderDriver::ADC2energy (const EventContext& ctx)
222 {
225 
226  while( !(*it)->ADC2E(ctx, m_ramps, &msg()) && ++it != itEnd )
227  ATH_MSG_DEBUG("One ADC2Energy Tool failed");
228 }
229 
231 {
232  ATH_MSG_INFO( "LArRawChannelBuilderDriver finalize." );
233  ATH_MSG_INFO( " Build Tools:" );
234  for (ToolHandle<ILArRawChannelBuilderToolBase>& tool : m_buildTools)
235  tool->printSummary();
236 
237  ATH_MSG_INFO( " ADC2Energy Tools:" );
238  for (ToolHandle<ILArRawChannelBuilderADC2EToolBase>& tool : m_adc2eTools)
239  tool->printSummary();
240 
241  ATH_MSG_INFO( " Pedestal Tools:" );
242  for (ToolHandle<ILArRawChannelBuilderPedestalToolBase>& tool : m_pedestalTools)
243  tool->printSummary();
244 
245  return StatusCode::SUCCESS;
246 }
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
LArRawChannelBuilderParams::curr_gain
CaloGain::CaloGain curr_gain
Definition: LArRawChannelBuilderParams.h:25
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
CaloGain::UNKNOWNGAIN
@ UNKNOWNGAIN
Definition: CaloGain.h:20
LArRawChannelBuilderParams::curr_id
Identifier curr_id
Definition: LArRawChannelBuilderParams.h:23
LArRawChannelBuilderDriver::pedestal
float pedestal()
Definition: LArRawChannelBuilderDriver.cxx:203
ReadCellNoiseFromCool.cabling
cabling
Definition: ReadCellNoiseFromCool.py:154
skel.it
it
Definition: skel.GENtoEVGEN.py:423
LArRawChannelBuilderParams::m_larRawChannelContainer
LArRawChannelContainer * m_larRawChannelContainer
Definition: LArRawChannelBuilderParams.h:35
LArRawChannelBuilderDriver::m_onlineHelper
const LArOnlineID * m_onlineHelper
Definition: LArRawChannelBuilderDriver.h:73
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
checkRpcDigits.digit
digit
Definition: checkRpcDigits.py:186
HWIdentifier
Definition: HWIdentifier.h:13
CaloGain::LARNGAIN
@ LARNGAIN
Definition: CaloGain.h:19
LArRawChannelBuilderDriver::m_DataLocation
std::string m_DataLocation
Definition: LArRawChannelBuilderDriver.h:75
LArRawChannelBuilderDriver::m_pedestalTools
pedestalToolVector m_pedestalTools
Definition: LArRawChannelBuilderDriver.h:82
AthCommonDataStore< AthCommonMsg< Algorithm > >::detStore
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:95
LArRawChannelBuilderDriver::m_ramps
std::vector< float > m_ramps
Definition: LArRawChannelBuilderDriver.h:91
LArRawChannelBuilderParams::curr_shiftTimeSamples
int curr_shiftTimeSamples
Definition: LArRawChannelBuilderParams.h:31
LArRawChannelBuilderDriver::execute
StatusCode execute()
Definition: LArRawChannelBuilderDriver.cxx:78
AthCommonDataStore< AthCommonMsg< Algorithm > >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:85
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
LArRawChannelBuilderDriver::m_defaultShiftTimeSamples
int m_defaultShiftTimeSamples
Definition: LArRawChannelBuilderDriver.h:95
LArDigit
Liquid Argon digit base class.
Definition: LArDigit.h:25
lumiFormat.i
int i
Definition: lumiFormat.py:92
LArRawChannelContainer
Athena::TPCnvVers::Current Athena::TPCnvVers::Old Athena::TPCnvVers::Old LArRawChannelContainer
Definition: LArTPCnv.cxx:86
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
LArRawChannelBuilderDriver::m_oldPedestal
float m_oldPedestal
Definition: LArRawChannelBuilderDriver.h:84
LArRawChannelBuilderDriver::m_ChannelContainerName
std::string m_ChannelContainerName
Definition: LArRawChannelBuilderDriver.h:75
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
LArRawChannelBuilderDriver::m_buildDiscChannel
bool m_buildDiscChannel
Definition: LArRawChannelBuilderDriver.h:93
AthAlgorithm
Definition: AthAlgorithm.h:47
LArRawChannelBuilderDriver.h
LArRawChannelBuilderParams::curr_maxsample
unsigned int curr_maxsample
Definition: LArRawChannelBuilderParams.h:29
LArRawChannelBuilderDriver::m_params
LArRawChannelBuilderParams m_params
Definition: LArRawChannelBuilderDriver.h:66
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
AtlCoolConsole.tool
tool
Definition: AtlCoolConsole.py:453
LArRawChannelBuilderParams::curr_sample0
int curr_sample0
Definition: LArRawChannelBuilderParams.h:27
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
LArDigitContainer.h
LArRawChannelBuilderDriver::m_adc2eTools
adc2eToolVector m_adc2eTools
Definition: LArRawChannelBuilderDriver.h:80
LArRawChannelBuilderDriver::ADC2energy
void ADC2energy(const EventContext &ctx)
Definition: LArRawChannelBuilderDriver.cxx:221
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
LArRawChannelBuilderDriver::LArRawChannelBuilderDriver
LArRawChannelBuilderDriver(const std::string &name, ISvcLocator *pSvcLocator)
Definition: LArRawChannelBuilderDriver.cxx:15
LArRawChannelBuilderDriver::m_checkSamples
int m_checkSamples
Definition: LArRawChannelBuilderDriver.h:87
AthCommonMsg< Algorithm >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
LArRawChannelBuilderDriver::m_cablingKey
SG::ReadCondHandleKey< LArOnOffIdMapping > m_cablingKey
Definition: LArRawChannelBuilderDriver.h:89
LArDigitContainer
Container class for LArDigit.
Definition: LArDigitContainer.h:24
LArRawChannelBuilderDriver::finalize
StatusCode finalize()
Definition: LArRawChannelBuilderDriver.cxx:230
LArRawChannelBuilderDriver::m_buildTools
builderToolVector m_buildTools
Definition: LArRawChannelBuilderDriver.h:78
LArRawChannelBuilderDriver::m_oldIdentifier
HWIdentifier m_oldIdentifier
Definition: LArRawChannelBuilderDriver.h:85
LArRawChannelBuilderParams::curr_nsamples
unsigned int curr_nsamples
Definition: LArRawChannelBuilderParams.h:30
LArRawChannelBuilderDriver::initialize
StatusCode initialize()
Definition: LArRawChannelBuilderDriver.cxx:36
LArRawChannelBuilderParams::curr_chid
HWIdentifier curr_chid
Definition: LArRawChannelBuilderParams.h:24
LArRawChannelBuilderParams::qualityBitPattern
unsigned int qualityBitPattern
Definition: LArRawChannelBuilderParams.h:34
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
DataVector::empty
bool empty() const noexcept
Returns true if the collection is empty.
LArRawChannelContainer.h
LArRawChannelBuilderParams::curr_maximum
int curr_maximum
Definition: LArRawChannelBuilderParams.h:28
LArOnOffIdMapping
Definition: LArOnOffIdMapping.h:20