18 m_ntpath =
"/NTUPLES/FILE1/SCDIGITS";
64 if ( ck.find(
"SC") == std::string::npos){
83 }
else if ( ck ==
"SC_ADC_BAS" ){
96 }
else if ( ck ==
"SC_ET" ){
103 if (
sc.isFailure()) {
108 if (
sc.isFailure()) {
113 }
else if ( ck ==
"SC_ET_ID" ){
116 if (
sc.isFailure()) {
121 if (
sc.isFailure()) {
126 if (
sc.isFailure()) {
135 if (
sc.isFailure()) {
142 if (
sc.isFailure()) {
148 if (
sc.isFailure()) {
153 if (
sc.isFailure()) {
161 if (
sc.isFailure()) {
171 if (
sc.isFailure()) {
176 if (
sc.isFailure()) {
181 if (
sc.isFailure()) {
186 if (
sc.isFailure()) {
191 if (
sc.isFailure()) {
197 return StatusCode::SUCCESS;
210 unsigned long long thisevent = evt->eventNumber();
211 unsigned short thislb = evt->lumiBlock();
214 unsigned long thisbcid = evt->bcid();
215 unsigned long thisELVL1Id = 0;
216 unsigned long thisttype = evt->level1TriggerType();
219 bool hasDigitContainer=
true;
225 hasDigitContainer=
false;
228 DigitContainer = hdlDigit.
cptr();
230 }
else hasDigitContainer=
false;
232 bool hasAccCalibDigitContainer=
true;
238 hasAccCalibDigitContainer=
false;
241 AccCalibDigitContainer = hdlAccDigit.
cptr();
243 }
else hasAccCalibDigitContainer=
false;
245 bool hasAccDigitContainer=
true;
251 hasAccDigitContainer=
false;
254 AccDigitContainer = hdlAccDigit.
cptr();
256 }
else hasAccDigitContainer=
false;
263 std::map<unsigned int, const LArLATOMEHeader*> LATOMEHeadMap;
267 sc =
evtStore()->retrieve(RawChannelContainer,
"LArRawChannels");
268 if (
sc.isFailure()) {
269 ATH_MSG_WARNING(
"Unable to retrieve LArRawChannelContainer with key LArRawChannels from DetectorStore. " );
272 ATH_MSG_DEBUG(
"Got LArRawChannelContainer with key LArRawChannels" );
276 ATH_MSG_WARNING(
"Asked for ETThresholdMain, but no LArRawChannelContainer, will not apply ! " );
281 sc =
evtStore()->retrieve(DigitContainer_next,
"SC_ADC_BAS");
282 if (
sc.isFailure()) {
283 ATH_MSG_WARNING(
"Unable to retrieve LArDigitContainer with key SC_ADC_BAS from DetectorStore. " );
286 ATH_MSG_DEBUG(
"Got additional LArDigitContainer with key SC_ADC_BAS " );
290 sc =
evtStore()->retrieve(etcontainer,
"SC_ET");
291 if (
sc.isFailure()) {
292 ATH_MSG_WARNING(
"Unable to retrieve LArRawSCContainer with key SC_ET from DetectorStore. " );
299 sc =
evtStore()->retrieve(etcontainer_next,
"SC_ET_ID");
300 if (
sc.isFailure()) {
301 ATH_MSG_WARNING(
"Unable to retrieve LArRawSCContainer with key SC_ET_ID from DetectorStore. " );
312 headcontainer=&*hdrCont;
313 if(headcontainer !=
nullptr && *hdrCont->begin()) thisELVL1Id = (*hdrCont->begin())->L1Id();
314 ATH_MSG_DEBUG(
" ELVL1I FROM LATOME HEADER " << thisELVL1Id );
319 LATOMEHeadMap.try_emplace ( hit->SourceId(), hit );
324 rawChannelMap.try_emplace( raw.channelID(), &raw );
334 return StatusCode::FAILURE;
337 cablingROD=*cablingHdlROD;
340 return StatusCode::FAILURE;
345 if( DigitContainer_next && DigitContainer_next->
empty() ) DigitContainer_next =
nullptr;
347 if( etcontainer && etcontainer->
empty() ) etcontainer =
nullptr;
349 if( etcontainer_next && etcontainer_next->
empty() ) etcontainer_next =
nullptr;
352 if (hasDigitContainer) {
353 if( !DigitContainer->
empty() ) cellsno = DigitContainer->
size();
355 ATH_MSG_WARNING(
"DigitContainer has zero size, but asked, will be not filled... ");
356 return StatusCode::SUCCESS;
359 ATH_MSG_DEBUG(
"DigitContainer has size: "<<cellsno<<
" hasDigitContainer: "<<hasDigitContainer);
361 if(
m_ETThresh > 0. && !etcontainer && !etcontainer_next) {
362 ATH_MSG_WARNING(
"Asked for ETThreshold, but no SC_ET* container, will not apply ! " );
372 if(
m_ADCThresh > 0. && ! DigitContainer&& !DigitContainer_next) {
373 ATH_MSG_WARNING(
"Asked for ADCThreshold, but no digits container, will not apply ! " );
377 if (hasAccCalibDigitContainer) {
378 if( !AccCalibDigitContainer->
empty() ) {
379 cellsno = AccCalibDigitContainer->
size();
380 ATH_MSG_DEBUG(
"AccCalibDigitContainer has size: "<<cellsno<<
" hasAccCalibDigitContainer: "<<hasAccCalibDigitContainer);
382 ATH_MSG_WARNING(
"AccCalibDigitContainer has zero size, but asked, will be not filled... ");
383 return StatusCode::SUCCESS;
386 if (hasAccDigitContainer) {
387 if( !AccDigitContainer->
empty() ) {
388 cellsno = AccDigitContainer->
size();
389 ATH_MSG_DEBUG(
"AccDigitContainer has size: "<<cellsno<<
" hasAccDigitContainer: "<<hasAccDigitContainer);
391 ATH_MSG_WARNING(
"AccDigitContainer has zero size, but asked, will be not filled... ");
392 return StatusCode::SUCCESS;
396 if (DigitContainer_next){
398 cellsno = DigitContainer_next->
size();
399 }
else if(DigitContainer_next->
size() != (
unsigned)cellsno ){
ATH_MSG_WARNING(
" NOOOOOOO! Different number of entries in DigitContainer_next"<< cellsno <<
" " << DigitContainer_next->
size() );
400 return StatusCode::SUCCESS;
405 cellsno = etcontainer->
size();
406 }
else if(etcontainer->
size() != (
unsigned)cellsno ){
ATH_MSG_WARNING(
" NOOOOOOO! Different number of entries in etcontainer"<< cellsno <<
" " << etcontainer->
size() );
407 return StatusCode::SUCCESS;
410 if (etcontainer_next){
412 cellsno = etcontainer_next->
size();
413 }
else if(etcontainer_next->
size() != (
unsigned)cellsno ){
ATH_MSG_WARNING(
" NOOOOOOO! Different number of entries in etcontainer_next"<< cellsno <<
" " << etcontainer_next->
size() );
414 return StatusCode::SUCCESS;
417 unsigned cellCounter = 0;
420 for(
int c = 0;c<cellsno;++c ){
427 bool acceptETMain =
true;
429 if( hasAccDigitContainer ){
435 unsigned int trueMaxSample = digi->
nsample();
439 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 " );
449 for(
unsigned i = 0; i<trueMaxSample;++i) {
458 if( hasAccCalibDigitContainer ){
464 unsigned int trueMaxSample = digi->
nsamples();
468 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 " );
478 for(
unsigned i = 0; i<trueMaxSample;++i) {
490 if( hasDigitContainer ){
495 unsigned int trueMaxSample = digi->
nsamples();
499 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 " );
516 if(!acceptETMain)
continue;
520 for(
unsigned i = 0; i<trueMaxSample;++i) {
539 unsigned int trueMaxBcid = trueMaxSample;
540 if(trueMaxBcid > scdigi->
BCId().size()) trueMaxBcid=scdigi->
BCId().size();
541 for(
unsigned i = 0; i<trueMaxBcid; ++i){
553 if( DigitContainer_next ){
555 const LArDigit* digi = DigitContainer_next->
at(c);
557 unsigned int trueMaxSample = digi->
nsamples();
561 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 " );
568 if( !hasDigitContainer){
572 if(!acceptETMain)
continue;
577 for(
unsigned i = 0; i<trueMaxSample;++i) {
584 if(!scdigi){
ATH_MSG_DEBUG(
" Can't cast digi to LArSCDigit*");
594 for(
unsigned i = 0; i<trueMaxSample;++i){
609 if ( !hasDigitContainer && !DigitContainer_next ){
621 if(!acceptETMain)
continue;
624 unsigned int truenet =
m_Net;
625 if(truenet > rawSC->
bcids().size()) truenet=rawSC->
bcids().size();
626 for(
unsigned i=0; i<truenet;++i){
631 for( i=0; i<truenet;++i){
633 if(rawSC->
bcids().size()) {
643 if(i<truenet)
continue;
645 if(truenet > rawSC->
satur().size()) truenet=rawSC->
satur().size();
646 for(
unsigned i = 0; i<truenet;++i){
655 if( etcontainer_next ){
656 const LArRawSC*rawSC = etcontainer_next->
at(c);
658 if ( !hasDigitContainer && !DigitContainer_next && !etcontainer ){
670 if(!acceptETMain)
continue;
674 for(
unsigned i=0; i<rawSC->
bcids().
size();++i){
680 if(rawSC->
bcids().size()) {
690 if(i<rawSC->energies().
size()) {
694 for(
unsigned i = 0; i<rawSC->
satur().
size();++i){
701 if (
sc != StatusCode::SUCCESS) {
715 if( !
m_trigDec->getListOfTriggers(
x).empty() ){
740 if(
count==20000)
break;
748 if (
sc != StatusCode::SUCCESS) {
754 ATH_MSG_DEBUG(
"LArSC2Ntuple has finished, filled " << cellCounter <<
" cells");
755 return StatusCode::SUCCESS;
760 const Identifier offId = cabling->cnvToIdentifier(SCId);
761 const std::vector<Identifier> cellIds =
m_scidtool->superCellToOfflineID(offId);
765 for(
unsigned i=0; i<cellIds.size(); ++i ) {
767 if (hwcell.
is_valid() && (rawChanMap.count(hwcell) != 0) ) {
770 m_ROD_id[i] = rawChanMap[hwcell]->hardwareID().get_identifier32().get_compact();
778 if(dde && result / cosh(dde->eta()) <
m_ETThreshMain) acceptETMain =
false;
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)
#define CHECK(...)
Evaluate an expression and check for errors.
size_t size() const
Number of registered mappings.
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.
bool is_valid() const
Check if id is in a valid state.
Container class for LArAccumulatedCalibDigit.
Data class for calibration ADC samples preprocessed by the DSP.
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
Container class for LArAccumulatedDigit.
Data class for ADC samples and autocorr preprocessed by the DSP.
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
Gaudi::Property< bool > m_isSC
const SG::ReadCondHandleKey< LArOnOffIdMapping > & cablingKey() const
NTuple::Item< long > m_FT
bool fillFromIdentifier(const HWIdentifier &id)
Container class for LArDigit.
Liquid Argon digit base class.
const HWIdentifier & hardwareID() const
const std::vector< short > & samples() const
NTuple::Array< short > m_samples
Gaudi::Property< bool > m_fillLB
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
LArDigits2Ntuple(const std::string &name, ISvcLocator *pSvcLocator)
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
virtual StatusCode initialize()
NTuple::Item< unsigned int > m_pulsed
SG::ReadHandleKey< LArAccumulatedCalibDigitContainer > m_accCalibContKey
NTuple::Item< unsigned long long > m_IEventEvt
NTuple::Item< unsigned int > m_dac
HWIdentifier createSignalChannelID(const Identifier &id) const
create a HWIdentifier from an Identifier (not inline)
Container for LArRawChannel (IDC using LArRawChannelCollection).
Liquid Argon ROD output object base class.
Container class for LArRawSC.
Liquid Argon SuperCell raw data.
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
SG::ReadDecorHandleKey< xAOD::EventInfo > m_eventInfoDecorKey
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
NTuple::Array< unsigned short > m_bcidVec_ADC_BAS
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
ToolHandle< ICaloSuperCellIDTool > m_scidtool
NTuple::Array< double > m_TTeta
NTuple::Array< float > m_ROD_id
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
const CaloSuperCellDetDescrManager * m_caloMgrSC
NTuple::Array< int > m_TTEhad
NTuple::Array< float > m_ROD_energy
NTuple::Item< short > m_latomeChannel
NTuple::Array< int > m_energyVec_ET
NTuple::Item< uint32_t > m_ntNet
NTuple::Array< float > m_ROD_time
virtual StatusCode execute(const EventContext &ctx) override
Execute method.
LArSC2Ntuple(const std::string &name, ISvcLocator *pSvcLocator)
SG::ReadCondHandleKey< LArOnOffIdMapping > m_cablingKeyAdditional
ToolHandle< Trig::TrigDecisionTool > m_trigDec
virtual StatusCode initialize() override
NTuple::Item< uint16_t > m_bcidLATOMEHEAD
Base class for LArDigits taken by LATOME.
unsigned int SourceId() const
const std::vector< unsigned short > & BCId() const
virtual bool isValid() override final
Can the handle be successfully dereferenced?
const_pointer_type cptr()
Dereference the pointer.
@ 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