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;
206 const EventContext& ctx = Gaudi::Hive::currentContext();
211 unsigned long long thisevent = evt->eventNumber();
212 unsigned short thislb = evt->lumiBlock();
215 unsigned long thisbcid = evt->bcid();
216 unsigned long thisELVL1Id = 0;
217 unsigned long thisttype = evt->level1TriggerType();
220 bool hasDigitContainer=
true;
226 hasDigitContainer=
false;
229 DigitContainer = hdlDigit.
cptr();
231 }
else hasDigitContainer=
false;
233 bool hasAccCalibDigitContainer=
true;
239 hasAccCalibDigitContainer=
false;
242 AccCalibDigitContainer = hdlAccDigit.
cptr();
244 }
else hasAccCalibDigitContainer=
false;
246 bool hasAccDigitContainer=
true;
252 hasAccDigitContainer=
false;
255 AccDigitContainer = hdlAccDigit.
cptr();
257 }
else hasAccDigitContainer=
false;
264 std::map<unsigned int, const LArLATOMEHeader*> LATOMEHeadMap;
268 sc =
evtStore()->retrieve(RawChannelContainer,
"LArRawChannels");
269 if (
sc.isFailure()) {
270 ATH_MSG_WARNING(
"Unable to retrieve LArRawChannelContainer with key LArRawChannels from DetectorStore. " );
273 ATH_MSG_DEBUG(
"Got LArRawChannelContainer with key LArRawChannels" );
277 ATH_MSG_WARNING(
"Asked for ETThresholdMain, but no LArRawChannelContainer, will not apply ! " );
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. " );
287 ATH_MSG_DEBUG(
"Got additional LArDigitContainer with key SC_ADC_BAS " );
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. " );
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. " );
313 headcontainer=&*hdrCont;
314 if(headcontainer !=
nullptr && *hdrCont->begin()) thisELVL1Id = (*hdrCont->begin())->L1Id();
315 ATH_MSG_DEBUG(
" ELVL1I FROM LATOME HEADER " << thisELVL1Id );
320 LATOMEHeadMap.try_emplace ( hit->SourceId(), hit );
325 rawChannelMap.try_emplace( raw.channelID(), &raw );
335 return StatusCode::FAILURE;
338 cablingROD=*cablingHdlROD;
341 return StatusCode::FAILURE;
346 if( DigitContainer_next && DigitContainer_next->
empty() ) DigitContainer_next =
nullptr;
348 if( etcontainer && etcontainer->
empty() ) etcontainer =
nullptr;
350 if( etcontainer_next && etcontainer_next->
empty() ) etcontainer_next =
nullptr;
353 if (hasDigitContainer) {
354 if( !DigitContainer->
empty() ) cellsno = DigitContainer->
size();
356 ATH_MSG_WARNING(
"DigitContainer has zero size, but asked, will be not filled... ");
357 return StatusCode::SUCCESS;
360 ATH_MSG_DEBUG(
"DigitContainer has size: "<<cellsno<<
" hasDigitContainer: "<<hasDigitContainer);
362 if(
m_ETThresh > 0. && !etcontainer && !etcontainer_next) {
363 ATH_MSG_WARNING(
"Asked for ETThreshold, but no SC_ET* container, will not apply ! " );
373 if(
m_ADCThresh > 0. && ! DigitContainer&& !DigitContainer_next) {
374 ATH_MSG_WARNING(
"Asked for ADCThreshold, but no digits container, will not apply ! " );
378 if (hasAccCalibDigitContainer) {
379 if( !AccCalibDigitContainer->
empty() ) {
380 cellsno = AccCalibDigitContainer->
size();
381 ATH_MSG_DEBUG(
"AccCalibDigitContainer has size: "<<cellsno<<
" hasAccCalibDigitContainer: "<<hasAccCalibDigitContainer);
383 ATH_MSG_WARNING(
"AccCalibDigitContainer has zero size, but asked, will be not filled... ");
384 return StatusCode::SUCCESS;
387 if (hasAccDigitContainer) {
388 if( !AccDigitContainer->
empty() ) {
389 cellsno = AccDigitContainer->
size();
390 ATH_MSG_DEBUG(
"AccDigitContainer has size: "<<cellsno<<
" hasAccDigitContainer: "<<hasAccDigitContainer);
392 ATH_MSG_WARNING(
"AccDigitContainer has zero size, but asked, will be not filled... ");
393 return StatusCode::SUCCESS;
397 if (DigitContainer_next){
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() );
405 cellsno = etcontainer->
size();
406 }
else if(etcontainer->
size() != (
unsigned)cellsno ){
ATH_MSG_ERROR(
" NOOOOOOO! Different number of entries in etcontainer"<< cellsno <<
" " << etcontainer->
size() );
409 if (etcontainer_next){
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() );
415 unsigned cellCounter = 0;
418 for(
int c = 0;c<cellsno;++c ){
425 bool acceptETMain =
true;
427 if( hasAccDigitContainer ){
433 unsigned int trueMaxSample = digi->
nsample();
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 " );
447 for(
unsigned i = 0; i<trueMaxSample;++i) {
456 if( hasAccCalibDigitContainer ){
462 unsigned int trueMaxSample = digi->
nsamples();
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 " );
476 for(
unsigned i = 0; i<trueMaxSample;++i) {
488 if( hasDigitContainer ){
493 unsigned int trueMaxSample = digi->
nsamples();
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 " );
514 if(!acceptETMain)
continue;
518 for(
unsigned i = 0; i<trueMaxSample;++i) {
537 unsigned int trueMaxBcid = trueMaxSample;
538 if(trueMaxBcid > scdigi->
BCId().size()) trueMaxBcid=scdigi->
BCId().size();
539 for(
unsigned i = 0; i<trueMaxBcid; ++i){
551 if( DigitContainer_next ){
553 const LArDigit* digi = DigitContainer_next->
at(c);
555 unsigned int trueMaxSample = digi->
nsamples();
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 " );
566 if( !hasDigitContainer){
570 if(!acceptETMain)
continue;
575 for(
unsigned i = 0; i<trueMaxSample;++i) {
582 if(!scdigi){
ATH_MSG_DEBUG(
" Can't cast digi to LArSCDigit*");
592 for(
unsigned i = 0; i<trueMaxSample;++i){
607 if ( !hasDigitContainer && !DigitContainer_next ){
619 if(!acceptETMain)
continue;
622 unsigned int truenet =
m_Net;
623 if(truenet > rawSC->
bcids().size()) truenet=rawSC->
bcids().size();
624 for(
unsigned i=0; i<truenet;++i){
629 for( i=0; i<truenet;++i){
631 if(rawSC->
bcids().size()) {
641 if(i<truenet)
continue;
643 if(truenet > rawSC->
satur().size()) truenet=rawSC->
satur().size();
644 for(
unsigned i = 0; i<truenet;++i){
653 if( etcontainer_next ){
654 const LArRawSC*rawSC = etcontainer_next->
at(c);
656 if ( !hasDigitContainer && !DigitContainer_next && !etcontainer ){
668 if(!acceptETMain)
continue;
672 for(
unsigned i=0; i<rawSC->
bcids().size();++i){
676 for( i=0; i<rawSC->
energies().size();++i){
678 if(rawSC->
bcids().size()) {
688 if(i<rawSC->energies().size()) {
692 for(
unsigned i = 0; i<rawSC->
satur().size();++i){
699 if (
sc != StatusCode::SUCCESS) {
713 if( !
m_trigDec->getListOfTriggers(
x).empty() ){
738 if(
count==20000)
break;
746 if (
sc != StatusCode::SUCCESS) {
752 ATH_MSG_DEBUG(
"LArSC2Ntuple has finished, filled " << cellCounter <<
" cells");
753 return StatusCode::SUCCESS;
758 const Identifier offId = cabling->cnvToIdentifier(SCId);
759 const std::vector<Identifier> cellIds =
m_scidtool->superCellToOfflineID(offId);
763 for(
unsigned i=0; i<cellIds.size(); ++i ) {
765 if (hwcell.
is_valid() && (rawChanMap.count(hwcell) != 0) ) {
768 m_ROD_id[i] = rawChanMap[hwcell]->hardwareID().get_identifier32().get_compact();
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)
#define CHECK(...)
Evaluate an expression and check for errors.
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
virtual StatusCode execute() override
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
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