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_WARNING(
" NOOOOOOO! Different number of entries in DigitContainer_next"<< cellsno <<
" " << DigitContainer_next->
size() );
401 return StatusCode::SUCCESS;
406 cellsno = etcontainer->
size();
407 }
else if(etcontainer->
size() != (
unsigned)cellsno ){
ATH_MSG_WARNING(
" NOOOOOOO! Different number of entries in etcontainer"<< cellsno <<
" " << etcontainer->
size() );
408 return StatusCode::SUCCESS;
411 if (etcontainer_next){
413 cellsno = etcontainer_next->
size();
414 }
else if(etcontainer_next->
size() != (
unsigned)cellsno ){
ATH_MSG_WARNING(
" NOOOOOOO! Different number of entries in etcontainer_next"<< cellsno <<
" " << etcontainer_next->
size() );
415 return StatusCode::SUCCESS;
418 unsigned cellCounter = 0;
421 for(
int c = 0;c<cellsno;++c ){
428 bool acceptETMain =
true;
430 if( hasAccDigitContainer ){
436 unsigned int trueMaxSample = digi->
nsample();
440 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 " );
450 for(
unsigned i = 0; i<trueMaxSample;++i) {
459 if( hasAccCalibDigitContainer ){
465 unsigned int trueMaxSample = digi->
nsamples();
469 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 " );
479 for(
unsigned i = 0; i<trueMaxSample;++i) {
491 if( hasDigitContainer ){
496 unsigned int trueMaxSample = digi->
nsamples();
500 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 " );
517 if(!acceptETMain)
continue;
521 for(
unsigned i = 0; i<trueMaxSample;++i) {
540 unsigned int trueMaxBcid = trueMaxSample;
541 if(trueMaxBcid > scdigi->
BCId().size()) trueMaxBcid=scdigi->
BCId().size();
542 for(
unsigned i = 0; i<trueMaxBcid; ++i){
554 if( DigitContainer_next ){
556 const LArDigit* digi = DigitContainer_next->
at(c);
558 unsigned int trueMaxSample = digi->
nsamples();
562 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 " );
569 if( !hasDigitContainer){
573 if(!acceptETMain)
continue;
578 for(
unsigned i = 0; i<trueMaxSample;++i) {
585 if(!scdigi){
ATH_MSG_DEBUG(
" Can't cast digi to LArSCDigit*");
595 for(
unsigned i = 0; i<trueMaxSample;++i){
610 if ( !hasDigitContainer && !DigitContainer_next ){
622 if(!acceptETMain)
continue;
625 unsigned int truenet =
m_Net;
626 if(truenet > rawSC->
bcids().size()) truenet=rawSC->
bcids().size();
627 for(
unsigned i=0; i<truenet;++i){
632 for( i=0; i<truenet;++i){
634 if(rawSC->
bcids().size()) {
644 if(i<truenet)
continue;
646 if(truenet > rawSC->
satur().size()) truenet=rawSC->
satur().size();
647 for(
unsigned i = 0; i<truenet;++i){
656 if( etcontainer_next ){
657 const LArRawSC*rawSC = etcontainer_next->
at(c);
659 if ( !hasDigitContainer && !DigitContainer_next && !etcontainer ){
671 if(!acceptETMain)
continue;
675 for(
unsigned i=0; i<rawSC->
bcids().size();++i){
679 for( i=0; i<rawSC->
energies().size();++i){
681 if(rawSC->
bcids().size()) {
691 if(i<rawSC->energies().size()) {
695 for(
unsigned i = 0; i<rawSC->
satur().size();++i){
702 if (
sc != StatusCode::SUCCESS) {
716 if( !
m_trigDec->getListOfTriggers(
x).empty() ){
741 if(
count==20000)
break;
749 if (
sc != StatusCode::SUCCESS) {
755 ATH_MSG_DEBUG(
"LArSC2Ntuple has finished, filled " << cellCounter <<
" cells");
756 return StatusCode::SUCCESS;
761 const Identifier offId = cabling->cnvToIdentifier(SCId);
762 const std::vector<Identifier> cellIds =
m_scidtool->superCellToOfflineID(offId);
766 for(
unsigned i=0; i<cellIds.size(); ++i ) {
768 if (hwcell.
is_valid() && (rawChanMap.count(hwcell) != 0) ) {
771 m_ROD_id[i] = rawChanMap[hwcell]->hardwareID().get_identifier32().get_compact();
779 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.
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