set container pointers to nullptr if size is 0 (avoid checking again the size in many places)
202{
203
205
206 const EventContext& ctx = Gaudi::Hive::currentContext();
207
210
211 unsigned long long thisevent =
evt->eventNumber();
212 unsigned short thislb =
evt->lumiBlock();
213
214
215 unsigned long thisbcid =
evt->bcid();
216 unsigned long thisELVL1Id = 0;
217 unsigned long thisttype =
evt->level1TriggerType();
218
220 bool hasDigitContainer=true;
221 const LArDigitContainer *DigitContainer = nullptr;
223 SG::ReadHandle<LArDigitContainer> hdlDigit(
m_contKey, ctx);
224 if(!hdlDigit.isValid()) {
226 hasDigitContainer=false;
227 } else {
229 DigitContainer = hdlDigit.cptr();
230 }
231 } else hasDigitContainer=false;
232
233 bool hasAccCalibDigitContainer=true;
234 const LArAccumulatedCalibDigitContainer *AccCalibDigitContainer = nullptr;
236 SG::ReadHandle<LArAccumulatedCalibDigitContainer> hdlAccDigit(
m_accCalibContKey, ctx);
237 if(!hdlAccDigit.isValid()) {
239 hasAccCalibDigitContainer=false;
240 } else {
242 AccCalibDigitContainer = hdlAccDigit.cptr();
243 }
244 } else hasAccCalibDigitContainer=false;
245
246 bool hasAccDigitContainer=true;
247 const LArAccumulatedDigitContainer *AccDigitContainer = nullptr;
249 SG::ReadHandle<LArAccumulatedDigitContainer> hdlAccDigit(
m_accContKey, ctx);
250 if(!hdlAccDigit.isValid()) {
252 hasAccDigitContainer=false;
253 } else {
255 AccDigitContainer = hdlAccDigit.cptr();
256 }
257 } else hasAccDigitContainer=false;
258
259 const LArDigitContainer* DigitContainer_next = nullptr;
260 const LArRawSCContainer* etcontainer = nullptr;
261 const LArRawSCContainer* etcontainer_next = nullptr;
264 std::map<unsigned int, const LArLATOMEHeader*> LATOMEHeadMap;
266
268 sc =
evtStore()->retrieve(RawChannelContainer,
"LArRawChannels");
269 if (
sc.isFailure()) {
270 ATH_MSG_WARNING(
"Unable to retrieve LArRawChannelContainer with key LArRawChannels from DetectorStore. " );
271 }
272 else
273 ATH_MSG_DEBUG(
"Got LArRawChannelContainer with key LArRawChannels" );
274 }
275
277 ATH_MSG_WARNING(
"Asked for ETThresholdMain, but no LArRawChannelContainer, will not apply ! " );
279 }
280
282 sc =
evtStore()->retrieve(DigitContainer_next,
"SC_ADC_BAS");
283 if (
sc.isFailure()) {
284 ATH_MSG_WARNING(
"Unable to retrieve LArDigitContainer with key SC_ADC_BAS from DetectorStore. " );
285 }
286 else
287 ATH_MSG_DEBUG(
"Got additional LArDigitContainer with key SC_ADC_BAS " );
288 }
289
291 sc =
evtStore()->retrieve(etcontainer,
"SC_ET");
292 if (
sc.isFailure()) {
293 ATH_MSG_WARNING(
"Unable to retrieve LArRawSCContainer with key SC_ET from DetectorStore. " );
294 }
295 else
297 }
298
300 sc =
evtStore()->retrieve(etcontainer_next,
"SC_ET_ID");
301 if (
sc.isFailure()) {
302 ATH_MSG_WARNING(
"Unable to retrieve LArRawSCContainer with key SC_ET_ID from DetectorStore. " );
303 }
304 else
306 }
307
309 if (! hdrCont.isValid()) {
311 } else {
313 headcontainer=&*hdrCont;
314 if(headcontainer != nullptr && *hdrCont->begin()) thisELVL1Id = (*hdrCont->begin())->L1Id();
315 ATH_MSG_DEBUG(
" ELVL1I FROM LATOME HEADER " << thisELVL1Id );
316 }
317
318 if (headcontainer){
319 for (const LArLATOMEHeader* hit : *headcontainer) {
320 LATOMEHeadMap.try_emplace ( hit->SourceId(), hit );
321 }
322 }
324 for (const LArRawChannel& raw : *RawChannelContainer) {
325 rawChannelMap.try_emplace( raw.channelID(), &raw );
326 }
327 }
328 const LArOnOffIdMapping*
cabling=
nullptr;
329 const LArOnOffIdMapping* cablingROD=nullptr;
331 SG::ReadCondHandle<LArOnOffIdMapping> cablingHdl{
cablingKey()};
333 if(!cabling) {
335 return StatusCode::FAILURE;
336 }
338 cablingROD=*cablingHdlROD;
339 if(!cablingROD) {
341 return StatusCode::FAILURE;
342 }
343 }
344
346 if( DigitContainer_next && DigitContainer_next->
empty() ) DigitContainer_next =
nullptr;
347
348 if( etcontainer && etcontainer->
empty() ) etcontainer =
nullptr;
349
350 if( etcontainer_next && etcontainer_next->
empty() ) etcontainer_next =
nullptr;
351
352 int cellsno = 0;
353 if (hasDigitContainer) {
354 if( !DigitContainer->
empty() ) cellsno = DigitContainer->
size();
355 else {
356 ATH_MSG_WARNING(
"DigitContainer has zero size, but asked, will be not filled... ");
357 return StatusCode::SUCCESS;
358 }
359 }
360 ATH_MSG_DEBUG(
"DigitContainer has size: "<<cellsno<<
" hasDigitContainer: "<<hasDigitContainer);
361
362 if(
m_ETThresh > 0. && !etcontainer && !etcontainer_next) {
363 ATH_MSG_WARNING(
"Asked for ETThreshold, but no SC_ET* container, will not apply ! " );
365 }
366
368 SG::ReadCondHandle<CaloSuperCellDetDescrManager> caloMgrHandle{
m_caloSCMgrKey};
371 }
372
373 if(
m_ADCThresh > 0. && ! DigitContainer&& !DigitContainer_next) {
374 ATH_MSG_WARNING(
"Asked for ADCThreshold, but no digits container, will not apply ! " );
376 }
377
378 if (hasAccCalibDigitContainer) {
379 if( !AccCalibDigitContainer->
empty() ) {
380 cellsno = AccCalibDigitContainer->
size();
381 ATH_MSG_DEBUG(
"AccCalibDigitContainer has size: "<<cellsno<<
" hasAccCalibDigitContainer: "<<hasAccCalibDigitContainer);
382 } else {
383 ATH_MSG_WARNING(
"AccCalibDigitContainer has zero size, but asked, will be not filled... ");
384 return StatusCode::SUCCESS;
385 }
386 }
387 if (hasAccDigitContainer) {
388 if( !AccDigitContainer->
empty() ) {
389 cellsno = AccDigitContainer->
size();
390 ATH_MSG_DEBUG(
"AccDigitContainer has size: "<<cellsno<<
" hasAccDigitContainer: "<<hasAccDigitContainer);
391 } else {
392 ATH_MSG_WARNING(
"AccDigitContainer has zero size, but asked, will be not filled... ");
393 return StatusCode::SUCCESS;
394 }
395 }
396
397 if (DigitContainer_next){
398 if ( cellsno == 0 ){
399 cellsno = DigitContainer_next->
size();
400 }
else if(DigitContainer_next->
size() != (
unsigned)cellsno ){
ATH_MSG_ERROR(
" NOOOOOOO! Different number of entries in DigitContainer_next"<< cellsno <<
" " << DigitContainer_next->
size() );
401 }
402 }
403 if (etcontainer){
404 if ( cellsno == 0 ){
405 cellsno = etcontainer->
size();
406 }
else if(etcontainer->
size() != (
unsigned)cellsno ){
ATH_MSG_ERROR(
" NOOOOOOO! Different number of entries in etcontainer"<< cellsno <<
" " << etcontainer->
size() );
407 }
408 }
409 if (etcontainer_next){
410 if ( cellsno == 0 ){
411 cellsno = etcontainer_next->
size();
412 }
else if(etcontainer_next->
size() != (
unsigned)cellsno ){
ATH_MSG_ERROR(
" NOOOOOOO! Different number of entries in etcontainer_next"<< cellsno <<
" " << etcontainer_next->
size() );
413 }
414 }
415 unsigned cellCounter = 0;
417
418 for(
int c = 0;
c<cellsno;++
c ){
420
424
425 bool acceptETMain = true;
426
427 if( hasAccDigitContainer ){
428
429 const LArAccumulatedDigit* digi = AccDigitContainer->
at(c);
430
431
432
433 unsigned int trueMaxSample = digi->
nsample();
434
437 ATH_MSG_DEBUG(
"The number of samples in data is larger than the one specified by JO: " << trueMaxSample <<
" > " <<
m_Nsamples <<
" --> only " <<
m_Nsamples <<
" will be available in the ntuple " );
439 }
441 }
443
445
446 float adcmax=-1.;
447 for(
unsigned i = 0;
i<trueMaxSample;++
i) {
451 }
453
454 }
455
456 if( hasAccCalibDigitContainer ){
457
458 const LArAccumulatedCalibDigit* digi = AccCalibDigitContainer->
at(c);
459
460
461
462 unsigned int trueMaxSample = digi->
nsamples();
463
466 ATH_MSG_DEBUG(
"The number of samples in data is larger than the one specified by JO: " << trueMaxSample <<
" > " <<
m_Nsamples <<
" --> only " <<
m_Nsamples <<
" will be available in the ntuple " );
468 }
470 }
472
474
475 float adcmax=-1.;
476 for(
unsigned i = 0;
i<trueMaxSample;++
i) {
480 }
485
486 }
487
488 if( hasDigitContainer ){
489
490 const LArDigit* digi = DigitContainer->
at(c);
491
492
493 unsigned int trueMaxSample = digi->
nsamples();
494
497 ATH_MSG_DEBUG(
"The number of samples in data is larger than the one specified by JO: " << trueMaxSample <<
" > " <<
m_Nsamples <<
" --> only " <<
m_Nsamples <<
" will be available in the ntuple " );
499 }
501 }
503
505
508 continue;
509 }
510 }
511
514 if(!acceptETMain) continue;
515 }
516
517 short adcmax=0;
518 for(
unsigned i = 0;
i<trueMaxSample;++
i) {
521 }
523
524 const LArSCDigit* scdigi = dynamic_cast<const LArSCDigit*>(digi);
525 if(!scdigi){
527 }else{
528 if (headcontainer){
530 const LArLATOMEHeader*headmap = LATOMEHeadMap[scdigi->
SourceId()];
531 if(headmap){
534 }
535 }
537 unsigned int trueMaxBcid = trueMaxSample;
538 if(trueMaxBcid > scdigi->
BCId().size()) trueMaxBcid=scdigi->
BCId().size();
539 for(
unsigned i = 0;
i<trueMaxBcid; ++
i){
541 }
543 }
544
545
546 }
548
549
550
551 if( DigitContainer_next ){
552
553 const LArDigit* digi = DigitContainer_next->
at(c);
554
555 unsigned int trueMaxSample = digi->
nsamples();
556
559 ATH_MSG_DEBUG(
"The number of samples in data is larger than the one specified by JO: " << trueMaxSample <<
" > " <<
m_Nsamples <<
" --> only " <<
m_Nsamples <<
" will be available in the ntuple " );
561 }
563 }
565
566 if( !hasDigitContainer){
570 if(!acceptETMain) continue;
571 }
572 }
573
574 short adcmax=0;
575 for(
unsigned i = 0;
i<trueMaxSample;++
i) {
578 }
580
581 const LArSCDigit* scdigi = dynamic_cast<const LArSCDigit*>(digi);
582 if(!scdigi){
ATH_MSG_DEBUG(
" Can't cast digi to LArSCDigit*");
583 }else{
584 if (headcontainer){
585 const LArLATOMEHeader*headmap = LATOMEHeadMap[scdigi->
SourceId()];
586 if(headmap){
589 }
590 }
592 for(
unsigned i = 0;
i<trueMaxSample;++
i){
594 }
596 }
597
598 }
600
601
602
603
604 if( etcontainer ){
605 const LArRawSC*rawSC = etcontainer->
at(c);
606
607 if ( !hasDigitContainer && !DigitContainer_next ){
610 if (headcontainer){
611 const LArLATOMEHeader*headmap = LATOMEHeadMap[rawSC->
SourceId()];
612 if(headmap){
615 }
616 }
619 if(!acceptETMain) continue;
620 }
621 }
622 unsigned int truenet =
m_Net;
623 if(truenet > rawSC->
bcids().size()) truenet=rawSC->
bcids().size();
624 for(
unsigned i=0;
i<truenet;++
i){
626 }
629 for( i=0;
i<truenet;++
i){
631 if(rawSC->
bcids().size()) {
634 }
635 } else {
638 }
639 }
640 }
641 if(i<truenet) continue;
642
643 if(truenet > rawSC->
satur().size()) truenet=rawSC->
satur().size();
644 for(
unsigned i = 0;
i<truenet;++
i){
646 }
649
650 }
652
653 if( etcontainer_next ){
654 const LArRawSC*rawSC = etcontainer_next->
at(c);
655
656 if ( !hasDigitContainer && !DigitContainer_next && !etcontainer ){
659 if (headcontainer){
660 const LArLATOMEHeader*headmap = LATOMEHeadMap[rawSC->
SourceId()];
661 if(headmap){
664 }
665 }
668 if(!acceptETMain) continue;
669 }
670 }
672 for(
unsigned i=0;
i<rawSC->
bcids().size();++
i){
674 }
678 if(rawSC->
bcids().size()) {
681 }
682 } else {
685 }
686 }
687 }
688 if(i<rawSC->energies().size()) {
689 continue;
690 }
691
692 for(
unsigned i = 0;
i<rawSC->
satur().size();++
i){
694 }
695 }
697
699 if (
sc != StatusCode::SUCCESS) {
702 }
703 cellCounter++;
704 }
705
711
713 if( !
m_trigDec->getListOfTriggers(
x).empty() ){
715 }
716 }
721
722 }
723
725 const DataVector<LVL1::TriggerTower>* TTVector = nullptr;
728 } else {
738 if(
count==20000)
break;
739 }
741 }
742 }
743
746 if (
sc != StatusCode::SUCCESS) {
749 }
750 }
751
752 ATH_MSG_DEBUG(
"LArSC2Ntuple has finished, filled " << cellCounter <<
" cells");
753 return StatusCode::SUCCESS;
754}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)
Athena::TPCnvVers::Current Athena::TPCnvVers::Old Athena::TPCnvVers::Old LArRawChannelContainer
Athena::TPCnvVers::Current Athena::TPCnvVers::Old Athena::TPCnvVers::Old Athena::TPCnvVers::Old Athena::TPCnvVers::Old LArLATOMEHeaderContainer
ServiceHandle< StoreGateSvc > & evtStore()
DataModel_detail::const_iterator< DataVector > const_iterator
Standard const_iterator.
const T * at(size_type n) const
Access an element, as an rvalue.
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
size_type size() const noexcept
Returns the number of elements in the collection.
bool empty() const noexcept
Returns true if the collection is empty.
int delay() const
return the setting of the delay
const HWIdentifier & hardwareID() const
Return HWIdentifier.
uint16_t getIsPulsedInt() const
get the four bit int that tells which lines pulsed
int DAC() const
return the number of samples
std::vector< float > RMS() const
Calculates and returns the RMS value of each ADC sample.
std::vector< float > mean() const
Calculates and returns the Mean value of each ADC sample.
size_t nsamples() const
return number of samples
const HWIdentifier & hardwareID() const
Return HWIdentifier.
float RMS(int n_min=-1, int n_max=-1) const
Calculates and returns the RMS value of ADC samples.
float mean(int n_min=-1, int n_max=-1) const
Calculates and returns the Mean value of ADC samples.
int nsample() const
return number of samples
const SG::ReadCondHandleKey< LArOnOffIdMapping > & cablingKey() const
NTuple::Item< long > m_FT
bool fillFromIdentifier(const HWIdentifier &id)
const HWIdentifier & hardwareID() const
const std::vector< short > & samples() const
NTuple::Array< short > m_samples
Gaudi::Property< bool > m_fillBCID
NTuple::Item< unsigned int > m_delay
SG::ReadHandleKey< LArDigitContainer > m_contKey
NTuple::Array< float > m_RMS
NTuple::Item< short > m_LB
NTuple::Array< float > m_mean
Gaudi::Property< std::vector< unsigned int > > m_FTlist
Gaudi::Property< unsigned int > m_Nsamples
NTuple::Item< long > m_ntNsamples
NTuple::Item< short > m_bcid
NTuple::Item< unsigned long long > m_IEvent
SG::ReadHandleKey< LArAccumulatedDigitContainer > m_accContKey
NTuple::Item< unsigned long > m_ELVL1Id
NTuple::Item< unsigned int > m_pulsed
SG::ReadHandleKey< LArAccumulatedCalibDigitContainer > m_accCalibContKey
NTuple::Item< unsigned long long > m_IEventEvt
NTuple::Item< unsigned int > m_dac
unsigned int SourceId() const
const std::vector< bool > & satur() const
const std::vector< unsigned short > & bcids() const
const std::vector< int > & energies() const
const HWIdentifier & hardwareID() const
NTuple::Array< bool > m_saturVec_ET_ID
Gaudi::Property< float > m_ETThresh
NTuple::Array< int > m_energyVec_ET_ID
std::map< std::string, NTuple::Item< unsigned int > > m_trigNameMap
NTuple::Array< bool > m_saturVec_ET
std::map< HWIdentifier, const LArRawChannel * > rawChanMap_t
NTuple::Array< unsigned short > m_bcidVec_ET
Gaudi::Property< std::string > m_triggerTowerKey
Gaudi::Property< bool > m_fillRawChan
Gaudi::Property< bool > m_fillTType
NTuple::Array< short > m_samples_ADC_BAS
NTuple::Array< unsigned short > m_bcidVec
Gaudi::Property< std::vector< std::string > > m_contKeys
void fillRODEnergy(HWIdentifier SCId, rawChanMap_t &rawChanMap, const LArOnOffIdMapping *cabling, const LArOnOffIdMapping *cablingROD, bool &acceptMain)
NTuple::Item< uint32_t > m_latomeSourceId
Gaudi::Property< float > m_ETThreshMain
NTuple::Item< short > m_LArInError
NTuple::Array< int > m_TTEem
SG::ReadCondHandleKey< CaloSuperCellDetDescrManager > m_caloSCMgrKey
NTuple::Item< uint32_t > m_ntNTT
Gaudi::Property< float > m_ADCThresh
Gaudi::Property< bool > m_fillCaloTT
Gaudi::Property< std::vector< std::string > > m_trigNames
NTuple::Item< unsigned int > m_TType
NTuple::Array< double > m_TTeta
SG::ReadHandleKey< LArLATOMEHeaderContainer > m_LArLatomeHeaderContainerKey
NTuple::Array< unsigned short > m_bcidVec_ET_ID
Gaudi::Property< bool > m_overwriteEventNumber
SG::ReadHandleKey< xAOD::EventInfo > m_eventInfoKey
Gaudi::Property< unsigned int > m_Net
NTuple::Item< uint32_t > m_LArEventBits
NTuple::Array< double > m_TTphi
NTuple::Array< int > m_TTEhad
NTuple::Item< short > m_latomeChannel
NTuple::Array< int > m_energyVec_ET
NTuple::Item< uint32_t > m_ntNet
SG::ReadCondHandleKey< LArOnOffIdMapping > m_cablingKeyAdditional
ToolHandle< Trig::TrigDecisionTool > m_trigDec
NTuple::Item< uint16_t > m_bcidLATOMEHEAD
unsigned int SourceId() const
const std::vector< unsigned short > & BCId() const
@ LAr
The LAr calorimeter.
@ Warning
The sub-detector issued a warning.
@ Error
The sub-detector issued an error.
int count(std::string s, const std::string ®x)
count how many occurances of a regx are in a string
::StatusCode StatusCode
StatusCode definition for legacy code.
retrieve(aClass, aKey=None)