ATLAS Offline Software
Loading...
Searching...
No Matches
LArCaliWaveBuilder Class Reference

#include <LArCaliWaveBuilder.h>

Inheritance diagram for LArCaliWaveBuilder:
Collaboration diagram for LArCaliWaveBuilder:

Public Member Functions

 LArCaliWaveBuilder (const std::string &name, ISvcLocator *pSvcLocator)
 ~LArCaliWaveBuilder ()
StatusCode initialize ()
StatusCode execute ()
virtual StatusCode stop ()
StatusCode finalize ()
virtual StatusCode sysInitialize () override
 Override sysInitialize.
virtual const DataObjIDColl & extraOutputDeps () const override
 Return the list of extra output dependencies.
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed.

Private Types

typedef std::map< int, LArCaliWaveWaveMap
typedef LArConditionsContainer< WaveMapWaveContainer
typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

StatusCode executeWithAccumulatedDigits (const LArCalibParams *calibParams, const LArCalibLineMapping *clcabling)
StatusCode executeWithStandardDigits (const LArCalibParams *calibParams, const LArCalibLineMapping *clcabling)
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

SG::ReadCondHandleKey< LArOnOffIdMappingm_cablingKey {this,"CablingKey","LArOnOffIdMap","SG Key of LArOnOffIdMapping object"}
SG::ReadCondHandleKey< LArOnOffIdMappingm_cablingKeySC {this,"ScCablingKey","LArOnOffIdMapSC","SG Key of SC LArOnOffIdMapping object"}
SG::ReadCondHandleKey< LArCalibLineMappingm_calibMapKey {this,"CalibLineKey","LArCalibLineMap","SG Key of calib. line mapping object"}
SG::ReadCondHandleKey< ILArPedestalm_pedKey {this,"PedestalKey","Pedestal","SG Key of pedestal object"}
bool m_useAccumulatedDigits
std::vector< std::string > m_keylist
std::vector< std::string > m_keylistproperty
std::string m_keyoutput
std::string m_groupingType
WaveContainer m_waves
bool m_pedSub
unsigned m_baseline
bool m_recAll
bool m_isSC
bool m_useDacAndIsPulsedIndex
int m_ADCsatur
bool m_checkEmptyPhases
const LArOnlineID_Basem_onlineID
unsigned m_event_counter
int m_NStep
float m_SamplingPeriod
float m_dt
uint16_t m_fatalFebErrorPattern
int m_usePatt
bool m_useParams
DataObjIDColl m_extendedExtraObjects
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default)
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
bool m_varHandleArraysDeclared

Detailed Description

Definition at line 28 of file LArCaliWaveBuilder.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< Algorithm > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

◆ WaveContainer

◆ WaveMap

typedef std::map<int, LArCaliWave> LArCaliWaveBuilder::WaveMap
private

Definition at line 56 of file LArCaliWaveBuilder.h.

Constructor & Destructor Documentation

◆ LArCaliWaveBuilder()

LArCaliWaveBuilder::LArCaliWaveBuilder ( const std::string & name,
ISvcLocator * pSvcLocator )

Definition at line 25 of file LArCaliWaveBuilder.cxx.

26 : AthAlgorithm(name, pSvcLocator),
27 m_groupingType("ExtendedFeedThrough"), // SubDetector, Single, FeedThrough
28 m_onlineID(nullptr),
30{
31 declareProperty("UseAccumulatedDigits", m_useAccumulatedDigits=true);
33 declareProperty("KeyOutput", m_keyoutput="LArCaliWave");
34 declareProperty("SubtractPed", m_pedSub=true);
35 declareProperty("NBaseline", m_baseline=1);
36 declareProperty("SamplingPeriod", m_SamplingPeriod=1./(40.08*megahertz));
37 declareProperty("NSteps", m_NStep=24); // Number of Delay Steps. FIXME: Try to get this information for somewhere else
38 declareProperty("ADCsaturation", m_ADCsatur=0) ;
39 declareProperty("GroupingType", m_groupingType);
40 declareProperty("UseDacAndIsPulsedIndex", m_useDacAndIsPulsedIndex=false);
41 declareProperty("CheckEmptyPhases", m_checkEmptyPhases=false);
42 declareProperty("RecAllCells", m_recAll=false);
43 declareProperty("UsePattern", m_usePatt=-1);
44 declareProperty("UseParams", m_useParams=false); // Read LArCalibParams from DetStore ?
45 declareProperty("isSC", m_isSC=false);
46
47
49
51
52}
AthAlgorithm()
Default constructor:
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
const LArOnlineID_Base * m_onlineID
std::vector< std::string > m_keylistproperty

◆ ~LArCaliWaveBuilder()

LArCaliWaveBuilder::~LArCaliWaveBuilder ( )
default

Member Function Documentation

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Algorithm > >::declareGaudiProperty ( Gaudi::Property< T, V, H > & hndl,
const SG::VarHandleKeyType &  )
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158 {
160 hndl.value(),
161 hndl.documentation());
162
163 }

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty ( Gaudi::Property< T, V, H > & t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145 {
146 typedef typename SG::HandleClassifier<T>::type htype;
148 }
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>

◆ detStore()

const ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Algorithm > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

◆ evtStore()

ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Algorithm > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

◆ execute()

StatusCode LArCaliWaveBuilder::execute ( )

Definition at line 117 of file LArCaliWaveBuilder.cxx.

118{
119 // using EvtId
120 const EventContext& ctx = getContext();
121 m_event_counter=ctx.eventID().event_number();
122
123 const LArCalibParams* calibParams = nullptr;
124 const LArCalibLineMapping *clcabling=nullptr;
125 if(m_useParams) { // we have to check in which event we are, reading only ones corresponding
126 // to our pattern
127 ATH_CHECK(detStore()->retrieve(calibParams,"LArCalibParams"));
128 unsigned numPatt=calibParams->getNumberPatterns(HWIdentifier(0));
129
131 if(m_useAccumulatedDigits) counter /= calibParams->NTrigger(HWIdentifier(1007091712));
132 if(m_usePatt >= 0 && numPatt > 0 && static_cast<int>(counter % numPatt) != m_usePatt) {
133 return StatusCode::SUCCESS;
134 }
135 ATH_MSG_DEBUG("Good event "<<m_event_counter<<" for pattern " << m_usePatt << " out of " << numPatt << " patterns " << calibParams->NTrigger(HWIdentifier(1007091712)) <<" triggers ");
136
137 const EventContext& ctx = Gaudi::Hive::currentContext();
138 SG::ReadCondHandle<LArCalibLineMapping> clHdl{m_calibMapKey, ctx};
139 clcabling =*clHdl;
140 if(!clcabling) {
141 ATH_MSG_WARNING( "Do not have calib line mapping from key " << m_calibMapKey.key() );
142 return StatusCode::FAILURE;
143 }
144
145 }
146
147 if ( m_event_counter < 100 || m_event_counter%100==0 )
148 ATH_MSG_INFO( "Processing event " << m_event_counter );
149
150 if (m_keylist.empty()) {
151 ATH_MSG_ERROR( "Key list is empty! No containers to process!" );
152 return StatusCode::FAILURE;
153 }
154
155
156 // execute() method...
158 return executeWithAccumulatedDigits(calibParams, clcabling);
159 else
160 return executeWithStandardDigits(calibParams, clcabling);
161}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_INFO(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
const ServiceHandle< StoreGateSvc > & detStore() const
SG::ReadCondHandleKey< LArCalibLineMapping > m_calibMapKey
StatusCode executeWithStandardDigits(const LArCalibParams *calibParams, const LArCalibLineMapping *clcabling)
std::vector< std::string > m_keylist
StatusCode executeWithAccumulatedDigits(const LArCalibParams *calibParams, const LArCalibLineMapping *clcabling)
unsigned getNumberPatterns(const HWIdentifier calibModuleID) const
unsigned NTrigger(const HWIdentifier calibModuleID) const
retrieve(aClass, aKey=None)
Definition PyKernel.py:110

◆ executeWithAccumulatedDigits()

StatusCode LArCaliWaveBuilder::executeWithAccumulatedDigits ( const LArCalibParams * calibParams,
const LArCalibLineMapping * clcabling )
private

Definition at line 163 of file LArCaliWaveBuilder.cxx.

164{
166
167 const LArAccumulatedCalibDigitContainer* larAccumulatedCalibDigitContainer = nullptr;
168
169 std::vector<std::string>::const_iterator key_it=m_keylist.begin();
170 std::vector<std::string>::const_iterator key_it_e=m_keylist.end();
171 int foundkey = 0;
172 for (;key_it!=key_it_e; ++key_it) { //Loop over all containers that are to be processed (e.g. different gains)
173
174 sc = evtStore()->retrieve(larAccumulatedCalibDigitContainer,*key_it);
175 if (sc.isFailure()) {
176 ATH_MSG_WARNING( "Cannot read LArAccumulatedCalibDigitContainer from StoreGate! key=" << *key_it );
177 if ( (std::next(key_it) == key_it_e) && foundkey==0 ){
178 ATH_MSG_ERROR("None of the provided LArAccumulatedDigitContainer keys could be read");
179 return StatusCode::FAILURE;
180 }else{
181 continue;
182 }
183 }
184 foundkey+=1;
185
186 const LArFebErrorSummary* febErrSum=nullptr;
187 if (evtStore()->contains<LArFebErrorSummary>("LArFebErrorSummary")) {
188 sc=evtStore()->retrieve(febErrSum);
189 if (sc.isFailure()) {
190 ATH_MSG_ERROR( "Failed to retrieve FebErrorSummary object!" );
191 return sc;
192 }
193 }
194 else
195 if (m_event_counter==0)
196 ATH_MSG_WARNING( "No FebErrorSummaryObject found! Feb errors not checked!" );
197
198 HWIdentifier lastFailedFEB(0);
199 LArAccumulatedCalibDigitContainer::const_iterator it=larAccumulatedCalibDigitContainer->begin();
200 LArAccumulatedCalibDigitContainer::const_iterator it_end=larAccumulatedCalibDigitContainer->end();
201
202 if (it == it_end) {
203 ATH_MSG_DEBUG("LArAccumulatedCalibDigitContainer with key=" << *key_it << " is empty ");
204 continue; // at this event LArAccumulatedCalibDigitContainer is empty, do not even try to loop on it...
205 }
206
207 const float delayScale = larAccumulatedCalibDigitContainer->getDelayScale();
208 const float deltaDelay = 25*ns/(delayScale*m_NStep);
209
210 for (;it!=it_end; ++it) { // Loop over all cells
211
212 bool ispulsed=false;
213 if(m_useParams && calibParams && clcabling) { // got LArCalibParams from DetStore
214 const std::vector<HWIdentifier>& calibLineLeg = clcabling->calibSlotLine((*it)->hardwareID());
215 for (const HWIdentifier &calibLineHWID : calibLineLeg) {// loop calib lines
216 ispulsed |= calibParams->isPulsed(m_event_counter,calibLineHWID);
217 }
218 } else {
219 ispulsed=(*it)->isPulsed();
220 }
221 if ( (!m_recAll) && !ispulsed ) {
222 ATH_MSG_DEBUG( "Non pulsed cell " << m_onlineID->channel_name((*it)->hardwareID())<<" in evt. "<<m_event_counter );
223 continue; // Check if cell is pulsed
224 }
225 HWIdentifier chid=(*it)->hardwareID();
226 HWIdentifier febid=m_onlineID->feb_Id(chid);
227 if (febErrSum) {
228 const uint16_t febErrs=febErrSum->feb_error(febid);
229 if (febErrs & m_fatalFebErrorPattern) {
230 if (febid!=lastFailedFEB) {
231 lastFailedFEB=febid;
232 ATH_MSG_ERROR( "Event " << m_event_counter << " Feb " << m_onlineID->channel_name(febid)
233 << " reports error(s):" << febErrSum->error_to_string(febErrs) << ". Data ignored." );
234 }
235 continue;
236 }
237 }
238 CaloGain::CaloGain gain=(*it)->gain();
239
240 if (gain<0 || gain>CaloGain::LARNGAIN) {
241 ATH_MSG_ERROR( "Found not-matching gain number ("<< (int)gain <<")" );
242 return StatusCode::FAILURE;
243 }
244
245 // transform sampleSum vector from uint32_t to double
246 std::vector<double> samplesum;
247 std::vector < uint64_t >::const_iterator samplesum_it=(*it)->sampleSum().begin();
248 std::vector < uint64_t >::const_iterator samplesum_it_e=(*it)->sampleSum().end();
249 for (;samplesum_it!=samplesum_it_e; ++samplesum_it)
250 samplesum.push_back((double)(*samplesum_it));
251
252 // transform sample2Sum vector from uint32_t to double
253 std::vector<double> sample2sum;
254 std::vector < uint64_t >::const_iterator sample2sum_it=(*it)->sample2Sum().begin();
255 std::vector < uint64_t >::const_iterator sample2sum_it_e=(*it)->sample2Sum().end();
256 for (;sample2sum_it!=sample2sum_it_e; ++sample2sum_it)
257 sample2sum.push_back((double)(*sample2sum_it));
258
259 WaveMap& waveMap = m_waves.get(chid,gain);
260
261 //make dacPulsed which has dac and four bits of is pulsed info
262 int dacPulsed;
263 float delay = (*it)->delay();
264 int dac=(*it)->DAC();
265 int index;
266 int pulsed=0;
267 if(m_useParams && calibParams && clcabling) { // get LArCalibParams from DetStore
268 const std::vector<HWIdentifier>& calibLineLeg = clcabling->calibSlotLine((*it)->hardwareID());
269 if(calibLineLeg.empty()) {
270 ATH_MSG_WARNING("Why do not have calib lines for "<<(*it)->hardwareID()<<" ?");
271 continue;
272 }
273 dac=calibParams->DAC(m_event_counter,calibLineLeg[0]);
274 dacPulsed=dac;
275 delay = calibParams->Delay(m_event_counter,calibLineLeg[0]);
276 for (unsigned i=0; i<calibLineLeg.size(); ++i) {// loop calib lines
277 if(calibParams->isPulsed(m_event_counter,calibLineLeg[i])){
278 ATH_MSG_DEBUG("GR: line pulsed true, line="<<i+1);
279 dacPulsed=(dacPulsed | (0x1 << (15+i+1)));
280 pulsed=(pulsed | (0x1 << (15+i+1)));
281 }
282
283 }
284 } else {
285 dacPulsed=(*it)->DAC();
286 for(int iLine=1;iLine<5;iLine++){
287 if((*it)->isPulsed(iLine)){
288 ATH_MSG_DEBUG("GR: line pulsed true, line="<<iLine);
289 dacPulsed=(dacPulsed | (0x1 << (15+iLine)));
290 pulsed=(pulsed | (0x1 << (15+iLine)));
291 }
292 }
293 }
294
295 if(m_useDacAndIsPulsedIndex){//switch used to turn on the option to have indexs that are DAC and isPulsed info
296 index = dacPulsed;
297 } else {
298 index = dac;
299 }
300
301 ATH_MSG_DEBUG( "Pulsed cell " << m_onlineID->channel_name(chid) << " gain: "<<gain );
302 ATH_MSG_DEBUG( "with " << (*it)->sampleSum().size() << " samples " << index << " DAC " << delay << " delay " << dacPulsed << " dacPulsed " );
303
304 WaveMap::iterator itm = waveMap.find(index);
305
306 if ( itm == waveMap.end() ) { // A new LArCaliWave is booked
307 LArCaliWave wave(samplesum.size()*m_NStep, m_dt, dac, pulsed, LArWave::meas);
308 itm = (waveMap.insert(WaveMap::value_type(index,wave))).first;
309 ATH_MSG_DEBUG("index: "<<index<<" new wave inserted");
310 }
311 (*itm).second.addAccumulatedEvent(int(std::roundf(delay/deltaDelay)), m_NStep,
312 samplesum, sample2sum, (*it)->nTriggers());
313
314 } //End loop over all cells
315 } //End loop over all containers
316
317 return StatusCode::SUCCESS;
318}
double delay(std::size_t d)
static Double_t sc
LArFebErrorSummary
Definition LArTPCnv.cxx:56
DataModel_detail::const_iterator< DataVector > const_iterator
Definition DataVector.h:838
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
double getDelayScale() const
get the delay Scale
std::map< int, LArCaliWave > WaveMap
const std::vector< HWIdentifier > & calibSlotLine(const HWIdentifier id) const
unsigned Delay(const unsigned event, const HWIdentifier calibLineID) const
bool isPulsed(const unsigned event, const HWIdentifier calibLineID) const
unsigned DAC(const unsigned event, const HWIdentifier calibLineID) const
static std::string error_to_string(uint16_t error)
interpret the error in string
uint16_t feb_error(HWIdentifier febid) const
get error for feb
bool contains(const std::string &s, const std::string &regx)
does a string contain the substring
Definition hcg.cxx:114
@ LARNGAIN
Definition CaloGain.h:19
str index
Definition DeMoScan.py:362
::StatusCode StatusCode
StatusCode definition for legacy code.
setWord1 uint16_t

◆ executeWithStandardDigits()

StatusCode LArCaliWaveBuilder::executeWithStandardDigits ( const LArCalibParams * calibParams,
const LArCalibLineMapping * clcabling )
private

Definition at line 321 of file LArCaliWaveBuilder.cxx.

322{
324
325 const LArCalibDigitContainer* larCalibDigitContainer = nullptr;
326
327 std::vector<std::string>::const_iterator key_it=m_keylist.begin();
328 std::vector<std::string>::const_iterator key_it_e=m_keylist.end();
329
330 for (;key_it!=key_it_e; ++key_it) { //Loop over all containers that are to be processed (e.g. different gains)
331
332 sc = evtStore()->retrieve(larCalibDigitContainer,*key_it);
333 if (sc.isFailure()) {
334 ATH_MSG_WARNING( "Cannot read LArCalibDigitContainer from StoreGate! key=" << *key_it );
335 continue; // Try next container
336 }
337
338 LArCalibDigitContainer::const_iterator it=larCalibDigitContainer->begin();
339 LArCalibDigitContainer::const_iterator it_end=larCalibDigitContainer->end();
340
341 if (it == it_end) {
342 ATH_MSG_INFO( "LArCalibDigitContainer with key=" << *key_it << " is empty " );
343 continue; // at this event LArCalibDigitContainer is empty, do not even try to loop on it...
344 }
345
346 const float delayScale = larCalibDigitContainer->getDelayScale();
347 const float deltaDelay = 25*ns/(delayScale*m_NStep);
348
349 for (;it!=it_end; ++it) { // Loop over all cells
350
351 bool pulsed=false;
352 int dac = (*it)->DAC();
353 float delay= (*it)->delay();
354 if(m_useParams && calibParams && clcabling) { // get LArCalibParams from DetStore
355 const std::vector<HWIdentifier>& calibLineLeg = clcabling->calibSlotLine((*it)->hardwareID());
356 dac=calibParams->DAC(m_event_counter,calibLineLeg[0]); // assuming all calib. boards configured equally
357 delay = calibParams->Delay(m_event_counter,calibLineLeg[0]);
358 for (const HWIdentifier &calibLineHWID : calibLineLeg) {// loop calib lines
359 pulsed |= calibParams->isPulsed(m_event_counter,calibLineHWID);
360 }
361 } else {
362 pulsed=(*it)->isPulsed();
363 }
364 if ((!m_recAll) && !pulsed ) continue ; // Check if cell is pulsed
365
366 HWIdentifier chid=(*it)->hardwareID();
367 CaloGain::CaloGain gain=(*it)->gain();
368
369 if (gain<0 || gain>CaloGain::LARNGAIN) {
370 ATH_MSG_ERROR( "Found not-matching gain number ("<< (int)gain <<")" );
371 return StatusCode::FAILURE;
372 }
373
374 // transform samples vector from uint32_t to double
375 std::vector<double> samples;
376 for (short sample : (*it)->samples())
377 samples.push_back((double)(sample));
378
379 WaveMap& waveMap = m_waves.get(chid,gain);
380 WaveMap::iterator itm = waveMap.find(dac);
381
382 if ( itm == waveMap.end() ) { // A new LArCaliWave is booked
383 LArCaliWave wave(samples.size()*m_NStep, m_dt, (*it)->DAC(), 0x1, LArWave::meas );
384 itm = (waveMap.insert(WaveMap::value_type((*it)->DAC(),wave))).first;
385 }
386
387 (*itm).second.addEvent((int)roundf(delay/deltaDelay), m_NStep, samples);
388
389 } //End loop over all cells
390 } //End loop over all containers
391
392 return StatusCode::SUCCESS;
393}
double getDelayScale() const
get delay scale

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< Algorithm > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase & ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ extraOutputDeps()

const DataObjIDColl & AthAlgorithm::extraOutputDeps ( ) const
overridevirtualinherited

Return the list of extra output dependencies.

This list is extended to include symlinks implied by inheritance relations.

Definition at line 50 of file AthAlgorithm.cxx.

51{
52 // If we didn't find any symlinks to add, just return the collection
53 // from the base class. Otherwise, return the extended collection.
54 if (!m_extendedExtraObjects.empty()) {
56 }
57 return Algorithm::extraOutputDeps();
58}
DataObjIDColl m_extendedExtraObjects

◆ finalize()

StatusCode LArCaliWaveBuilder::finalize ( )
inline

Definition at line 37 of file LArCaliWaveBuilder.h.

37{return StatusCode::SUCCESS;}

◆ initialize()

StatusCode LArCaliWaveBuilder::initialize ( )

Definition at line 57 of file LArCaliWaveBuilder.cxx.

58{
59 if (m_keylistproperty.empty()) {
60 m_keylistproperty.emplace_back("HIGH");
61 m_keylistproperty.emplace_back("MEDIUM");
62 m_keylistproperty.emplace_back("LOW");
63 }
65
66 //FIXME probably useless because m_wave isn't written anywhere
67 StatusCode sc=m_waves.setGroupingType(m_groupingType,msg());
68 if (sc.isFailure()) {
69 ATH_MSG_ERROR( "Failed to set groupingType for LArCaliWave intermediate object" );
70 return sc;
71 }
72
73 ATH_MSG_INFO( "Initialize intermediate Wave object" );
74 sc=m_waves.initialize();
75 if (sc.isFailure()) {
76 ATH_MSG_ERROR( "Failed initialize LArCaliWave intermediate object" );
77 return sc;
78 }
79
82
83
85 ATH_MSG_INFO( "Empty phases check selected." );
86
87 //Get pedestal from CondStore
88 ATH_CHECK( m_pedKey.initialize(m_pedSub) );
89
90 //Get Online helper from DetStore
91 if ( m_isSC ) {
92 const LArOnline_SuperCellID* ll;
93 ATH_CHECK( detStore()->retrieve(ll, "LArOnline_SuperCellID") );
94 m_onlineID = static_cast<const LArOnlineID_Base*>(ll);
95 ATH_MSG_DEBUG(" Found the LArOnline_SuperCellID helper. ");
96 } else { // m_isSC
97 const LArOnlineID* ll;
98 ATH_CHECK( detStore()->retrieve(ll, "LArOnlineID") );
99 m_onlineID = static_cast<const LArOnlineID_Base*>(ll);
100 ATH_MSG_DEBUG(" Found the LArOnlineID helper. ");
101 }
102
103 ATH_CHECK( m_cablingKey.initialize() );
104 ATH_CHECK( m_cablingKeySC.initialize(m_isSC) );
105
106 if(m_usePatt >= 0 && !m_useParams) {
107 ATH_MSG_ERROR("Inconsistent configuration, for UsePattern > 0 the UseParams must be true");
108 return StatusCode::FAILURE;
109 }
110
111 ATH_CHECK( m_calibMapKey.initialize(m_useParams) );
112
113 return StatusCode::SUCCESS;
114}
MsgStream & msg() const
SG::ReadCondHandleKey< ILArPedestal > m_pedKey
SG::ReadCondHandleKey< LArOnOffIdMapping > m_cablingKey
SG::ReadCondHandleKey< LArOnOffIdMapping > m_cablingKeySC
long long ll

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Algorithm > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ msg()

MsgStream & AthCommonMsg< Algorithm >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24 {
25 return this->msgStream();
26 }

◆ msgLvl()

bool AthCommonMsg< Algorithm >::msgLvl ( const MSG::Level lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30 {
31 return this->msgLevel(lvl);
32 }

◆ outputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Algorithm > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ renounce()

std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > AthCommonDataStore< AthCommonMsg< Algorithm > >::renounce ( T & h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381 {
382 h.renounce();
384 }
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< Algorithm > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ stop()

StatusCode LArCaliWaveBuilder::stop ( )
virtual

get iterator for all channels for a gain

Definition at line 397 of file LArCaliWaveBuilder.cxx.

398{
399 // Create wave container using feedthru grouping and initialize
400 auto caliWaveContainer = std::make_unique<LArCaliWaveContainer>();
401
402 StatusCode sc=caliWaveContainer->setGroupingType(m_groupingType,msg());
403 if (sc.isFailure()) {
404 ATH_MSG_ERROR( "Failed to set groupingType for LArCaliWaveContainer object" );
405 return sc;
406 }
407
408 ATH_MSG_INFO( "Initialize final Wave object" );
409 sc=caliWaveContainer->initialize();
410 if (sc.isFailure()) {
411 ATH_MSG_ERROR( "Failed initialize LArCaliWaveContainer object" );
412 return sc;
413 }
414
415 const EventContext& ctx = Gaudi::Hive::currentContext();
416 const LArOnOffIdMapping* cabling(nullptr);
417 if( m_isSC ){
418 SG::ReadCondHandle<LArOnOffIdMapping> cablingHdl{m_cablingKeySC, ctx};
419 cabling = {*cablingHdl};
420 if(!cabling) {
421 ATH_MSG_ERROR("Do not have mapping object " << m_cablingKeySC.key());
422 return StatusCode::FAILURE;
423 }
424
425 }else{
426 SG::ReadCondHandle<LArOnOffIdMapping> cablingHdl{m_cablingKey, ctx};
427 cabling = {*cablingHdl};
428 if(!cabling) {
429 ATH_MSG_ERROR("Do not have mapping object " << m_cablingKey.key());
430 return StatusCode::FAILURE;
431 }
432 }
433 SG::ReadCondHandle<ILArPedestal> pedHdl{m_pedKey, ctx};
434 const ILArPedestal* larPedestal{*pedHdl};
435 if(m_pedSub && !larPedestal) {
436 ATH_MSG_DEBUG("No pedestal(s) found ");
437 ATH_MSG_INFO( "Using fake (baseline) pedestal subtraction..." );
438 }
439
440 LArWaveHelper wHelper;
441 int NCaliWave=0;
442
443 // Loop over all gains
444 for (unsigned k=0;k<(int)CaloGain::LARNGAIN;k++) {
445
447
449 WaveContainer::ConditionsMapIterator cell_it = m_waves.begin(gain) ;
450 WaveContainer::ConditionsMapIterator cell_it_e = m_waves.end(gain);
451
452 HWIdentifier lastId;
453
454 for (; cell_it!=cell_it_e; ++cell_it) {
455
456
457 // Get id of this cell - use id from first cell in map
458 //
459 // Some accumulations may be empty and we must skip this
460 // cell. WaveContainer has all 128 channels for each FEB
461 // with at least ONE being read out.
462 //
463
464 const HWIdentifier hwId = cell_it.channelId();
465 if ((!m_recAll) && (!cabling->isOnlineConnected(hwId))) {
466
467 //ATH_MSG_INFO( "Skipping disconnected channel: "<<MSG::hex<<hwId<<MSG::dec );
468 continue; //Ignore disconnected channels
469 }
470
471 const WaveMap& waveMap = (*cell_it);
472 if (waveMap.empty()) {
473 ATH_MSG_INFO( "Empty accumulated wave. Last id: " << MSG::hex
474 //<< lastId << " " << emId->show_to_string(lastId) );
475 << lastId << " this id: "<<hwId<<MSG::dec );
476 continue;
477 }
478
479 lastId = hwId; // save previous id for debug printout
480
481 // Get the vector of waves for this chid,gain
482 LArCaliWaveContainer::LArCaliWaves& dacWaves = caliWaveContainer->get(hwId, gain);
483
484 std::map<int, LArCaliWave>::const_iterator dac_it = cell_it->begin();
485 std::map<int, LArCaliWave>::const_iterator dac_it_e = cell_it->end();
486
487 HWIdentifier chid = cell_it.channelId();
488
489 for (; dac_it != dac_it_e; ++dac_it) {
490
491 const LArCaliWave& thisWave = dac_it->second ;
492
493 if (m_checkEmptyPhases) {
494 const std::vector<int>& thisTriggers = thisWave.getTriggers();
495 for (unsigned i=0;i<thisTriggers.size();++i) {
496 if (thisTriggers[i]==0) {
497 ATH_MSG_FATAL( "Empty phase found in channel 0x" << MSG::hex << chid << MSG::dec
498 << "., aborting reconstruction. Sorry." );
499 return StatusCode::FAILURE;
500 }
501 }
502 }
503
504 float pedAve = 0.;
505
506 if ( m_pedSub ) {
507 if ( larPedestal ) {
508 float pedestal = larPedestal->pedestal(chid,gain);
509 if (pedestal <= (1.0+LArElecCalib::ERRORCODE)) {
510 ATH_MSG_DEBUG("No pedestal(s) found for channel 0x" << MSG::hex << chid << MSG::dec);
511 ATH_MSG_INFO( "Using fake (baseline) pedestal subtraction..." );
512 pedAve = wHelper.getBaseline(thisWave,m_baseline) ;
513 } else {
514 pedAve = pedestal;
515 }
516 } else {
517 pedAve = wHelper.getBaseline(thisWave,m_baseline) ;
518 }
519 ATH_MSG_DEBUG("Pedestal for channel 0x" << MSG::hex << chid << MSG::dec << " is = " << pedAve << " ADC");
520 }
521
522 double waveMax = thisWave.getSample( wHelper.getMax(thisWave) ) ;
523 if ( (!m_recAll) && m_ADCsatur>0 && waveMax>=m_ADCsatur ) {
524 ATH_MSG_INFO( "Absolute ADC saturation at DAC = " << thisWave.getDAC() << " ... skip!" ) ;
525 continue ;
526 } else {
527 dacWaves.emplace_back(((thisWave)+(-pedAve)).getWave() ,
528 thisWave.getErrors(),
529 thisWave.getTriggers(),
530 thisWave.getDt(),
531 thisWave.getDAC(),
532 thisWave.getIsPulsedInt(),
533 thisWave.getFlag() );
534
535 NCaliWave++;
536 }
537
538 } // end of loop DACs
539
540 // intermediate map cleanup (save memory)
541 cell_it->clear();
542
543 } //end loop cells
544
545 } //end loop over m_keyList
546
547 ATH_MSG_INFO( " Summary : Number of cells with a CaliWave reconstructed : " << NCaliWave );
548 ATH_MSG_INFO( " Summary : Number of Barrel PS cells side A or C (connected+unconnected): 3904+ 192 = 4096 " );
549 ATH_MSG_INFO( " Summary : Number of Barrel cells side A or C (connected+unconnected): 50944+2304 = 53248 " );
550 ATH_MSG_INFO( " Summary : Number of EMEC cells side A or C (connected+unconnected): 31872+3456 = 35328 " );
551 ATH_MSG_INFO( " Summary : Number of HEC cells side A or C (connected+unconnected): 2816+ 256 = 3072 " );
552 ATH_MSG_INFO( " Summary : Number of FCAL cells side A or C (connected+unconnected): 1762+ 30 = 1792 " );
553
554 // Record in detector store with key (m_keyoutput)
555 ATH_CHECK( detStore()->record(std::move(caliWaveContainer), m_keyoutput) );
556
557 ATH_MSG_INFO( "LArCaliWaveBuilder has finished." );
558 return StatusCode::SUCCESS;
559}
#define ATH_MSG_FATAL(x)
virtual float pedestal(const HWIdentifier &id, int gain) const =0
int getIsPulsedInt() const
isPulsed value
int getDAC() const
DAC value.
ConditionsMap::iterator ConditionsMapIterator
const std::vector< int > & getTriggers() const
trigger vector
const std::vector< double > & getErrors() const
error vector
double getBaseline(const LArWave &theWave, unsigned nBase) const
unsigned int getMax(const LArWave &theWave) const
return index of maximum sample
const double & getSample(const unsigned int i) const
Amplitude per time bin.
Definition LArWave.h:53
const double & getDt() const
delta time
Definition LArWave.h:50
unsigned getFlag() const
flag: ...
Definition LArWave.h:178

◆ sysInitialize()

StatusCode AthAlgorithm::sysInitialize ( )
overridevirtualinherited

Override sysInitialize.

Override sysInitialize from the base class.

Loop through all output handles, and if they're WriteCondHandles, automatically register them and this Algorithm with the CondSvc

Scan through all outputHandles, and if they're WriteCondHandles, register them with the CondSvc

Reimplemented from AthCommonDataStore< AthCommonMsg< Algorithm > >.

Reimplemented in AthAnalysisAlgorithm, AthFilterAlgorithm, AthHistogramAlgorithm, and PyAthena::Alg.

Definition at line 66 of file AthAlgorithm.cxx.

66 {
68
69 if (sc.isFailure()) {
70 return sc;
71 }
72 ServiceHandle<ICondSvc> cs("CondSvc",name());
73 for (auto h : outputHandles()) {
74 if (h->isCondition() && h->mode() == Gaudi::DataHandle::Writer) {
75 // do this inside the loop so we don't create the CondSvc until needed
76 if ( cs.retrieve().isFailure() ) {
77 ATH_MSG_WARNING("no CondSvc found: won't autoreg WriteCondHandles");
78 return StatusCode::SUCCESS;
79 }
80 if (cs->regHandle(this,*h).isFailure()) {
81 sc = StatusCode::FAILURE;
82 ATH_MSG_ERROR("unable to register WriteCondHandle " << h->fullKey()
83 << " with CondSvc");
84 }
85 }
86 }
87 return sc;
88}
virtual StatusCode sysInitialize() override
Override sysInitialize.
AthCommonDataStore(const std::string &name, T... args)
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< Algorithm > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< Algorithm > >::updateVHKA ( Gaudi::Details::PropertyBase & )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308 {
309 // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310 // << " size: " << m_vhka.size() << endmsg;
311 for (auto &a : m_vhka) {
313 for (auto k : keys) {
314 k->setOwner(this);
315 }
316 }
317 }
std::vector< SG::VarHandleKeyArray * > m_vhka

Member Data Documentation

◆ m_ADCsatur

int LArCaliWaveBuilder::m_ADCsatur
private

Definition at line 74 of file LArCaliWaveBuilder.h.

◆ m_baseline

unsigned LArCaliWaveBuilder::m_baseline
private

Definition at line 62 of file LArCaliWaveBuilder.h.

◆ m_cablingKey

SG::ReadCondHandleKey<LArOnOffIdMapping> LArCaliWaveBuilder::m_cablingKey {this,"CablingKey","LArOnOffIdMap","SG Key of LArOnOffIdMapping object"}
private

Definition at line 41 of file LArCaliWaveBuilder.h.

41{this,"CablingKey","LArOnOffIdMap","SG Key of LArOnOffIdMapping object"};

◆ m_cablingKeySC

SG::ReadCondHandleKey<LArOnOffIdMapping> LArCaliWaveBuilder::m_cablingKeySC {this,"ScCablingKey","LArOnOffIdMapSC","SG Key of SC LArOnOffIdMapping object"}
private

Definition at line 42 of file LArCaliWaveBuilder.h.

42{this,"ScCablingKey","LArOnOffIdMapSC","SG Key of SC LArOnOffIdMapping object"};

◆ m_calibMapKey

SG::ReadCondHandleKey<LArCalibLineMapping> LArCaliWaveBuilder::m_calibMapKey {this,"CalibLineKey","LArCalibLineMap","SG Key of calib. line mapping object"}
private

Definition at line 43 of file LArCaliWaveBuilder.h.

43{this,"CalibLineKey","LArCalibLineMap","SG Key of calib. line mapping object"};

◆ m_checkEmptyPhases

bool LArCaliWaveBuilder::m_checkEmptyPhases
private

Definition at line 77 of file LArCaliWaveBuilder.h.

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Algorithm > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_dt

float LArCaliWaveBuilder::m_dt
private

Definition at line 84 of file LArCaliWaveBuilder.h.

◆ m_event_counter

unsigned LArCaliWaveBuilder::m_event_counter
private

Definition at line 81 of file LArCaliWaveBuilder.h.

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Algorithm > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_extendedExtraObjects

DataObjIDColl AthAlgorithm::m_extendedExtraObjects
privateinherited

Definition at line 79 of file AthAlgorithm.h.

◆ m_fatalFebErrorPattern

uint16_t LArCaliWaveBuilder::m_fatalFebErrorPattern
private

Definition at line 86 of file LArCaliWaveBuilder.h.

◆ m_groupingType

std::string LArCaliWaveBuilder::m_groupingType
private

Definition at line 53 of file LArCaliWaveBuilder.h.

◆ m_isSC

bool LArCaliWaveBuilder::m_isSC
private

Definition at line 68 of file LArCaliWaveBuilder.h.

◆ m_keylist

std::vector<std::string> LArCaliWaveBuilder::m_keylist
private

Definition at line 50 of file LArCaliWaveBuilder.h.

◆ m_keylistproperty

std::vector<std::string> LArCaliWaveBuilder::m_keylistproperty
private

Definition at line 51 of file LArCaliWaveBuilder.h.

◆ m_keyoutput

std::string LArCaliWaveBuilder::m_keyoutput
private

Definition at line 52 of file LArCaliWaveBuilder.h.

◆ m_NStep

int LArCaliWaveBuilder::m_NStep
private

Definition at line 82 of file LArCaliWaveBuilder.h.

◆ m_onlineID

const LArOnlineID_Base* LArCaliWaveBuilder::m_onlineID
private

Definition at line 79 of file LArCaliWaveBuilder.h.

◆ m_pedKey

SG::ReadCondHandleKey<ILArPedestal> LArCaliWaveBuilder::m_pedKey {this,"PedestalKey","Pedestal","SG Key of pedestal object"}
private

Definition at line 44 of file LArCaliWaveBuilder.h.

44{this,"PedestalKey","Pedestal","SG Key of pedestal object"};

◆ m_pedSub

bool LArCaliWaveBuilder::m_pedSub
private

Definition at line 61 of file LArCaliWaveBuilder.h.

◆ m_recAll

bool LArCaliWaveBuilder::m_recAll
private

Definition at line 65 of file LArCaliWaveBuilder.h.

◆ m_SamplingPeriod

float LArCaliWaveBuilder::m_SamplingPeriod
private

Definition at line 83 of file LArCaliWaveBuilder.h.

◆ m_useAccumulatedDigits

bool LArCaliWaveBuilder::m_useAccumulatedDigits
private

Definition at line 46 of file LArCaliWaveBuilder.h.

◆ m_useDacAndIsPulsedIndex

bool LArCaliWaveBuilder::m_useDacAndIsPulsedIndex
private

Definition at line 71 of file LArCaliWaveBuilder.h.

◆ m_useParams

bool LArCaliWaveBuilder::m_useParams
private

Definition at line 89 of file LArCaliWaveBuilder.h.

◆ m_usePatt

int LArCaliWaveBuilder::m_usePatt
private

Definition at line 88 of file LArCaliWaveBuilder.h.

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< Algorithm > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< Algorithm > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.

◆ m_waves

WaveContainer LArCaliWaveBuilder::m_waves
private

Definition at line 58 of file LArCaliWaveBuilder.h.


The documentation for this class was generated from the following files: