|
ATLAS Offline Software
|
Go to the documentation of this file.
16 m_ntpath =
"/NTUPLES/FILE1/SCDIGITS";
60 if ( ck.find(
"SC") == std::string::npos){
79 }
else if ( ck ==
"SC_ADC_BAS" ){
92 }
else if ( ck ==
"SC_ET" ){
104 if (
sc.isFailure()) {
109 }
else if ( ck ==
"SC_ET_ID" ){
112 if (
sc.isFailure()) {
117 if (
sc.isFailure()) {
122 if (
sc.isFailure()) {
131 if (
sc.isFailure()) {
138 if (
sc.isFailure()) {
144 if (
sc.isFailure()) {
149 if (
sc.isFailure()) {
157 if (
sc.isFailure()) {
167 if (
sc.isFailure()) {
172 if (
sc.isFailure()) {
177 if (
sc.isFailure()) {
182 if (
sc.isFailure()) {
187 if (
sc.isFailure()) {
193 return StatusCode::SUCCESS;
202 const EventContext& ctx = Gaudi::Hive::currentContext();
207 unsigned long long thisevent =
evt->eventNumber();
208 unsigned short thislb =
evt->lumiBlock();
211 unsigned long thisbcid =
evt->bcid();
212 unsigned long thisELVL1Id = 0;
213 unsigned long thisttype =
evt->level1TriggerType();
216 bool hasDigitContainer=
true;
222 hasDigitContainer=
false;
225 DigitContainer = hdlDigit.
cptr();
227 }
else hasDigitContainer=
false;
229 bool hasAccCalibDigitContainer=
true;
235 hasAccCalibDigitContainer=
false;
238 AccCalibDigitContainer = hdlAccDigit.
cptr();
240 }
else hasAccCalibDigitContainer=
false;
242 bool hasAccDigitContainer=
true;
248 hasAccDigitContainer=
false;
251 AccDigitContainer = hdlAccDigit.
cptr();
253 }
else hasAccDigitContainer=
false;
260 std::map<unsigned int, const LArLATOMEHeader*> LATOMEHeadMap;
264 sc =
evtStore()->retrieve(RawChannelContainer,
"LArRawChannels");
265 if (
sc.isFailure()) {
266 ATH_MSG_WARNING(
"Unable to retrieve LArRawChannelContainer with key LArRawChannels from DetectorStore. " );
269 ATH_MSG_DEBUG(
"Got LArRawChannelContainer with key LArRawChannels" );
273 sc =
evtStore()->retrieve(DigitContainer_next,
"SC_ADC_BAS");
274 if (
sc.isFailure()) {
275 ATH_MSG_WARNING(
"Unable to retrieve LArDigitContainer with key SC_ADC_BAS from DetectorStore. " );
278 ATH_MSG_DEBUG(
"Got additional LArDigitContainer with key SC_ADC_BAS " );
282 sc =
evtStore()->retrieve(etcontainer,
"SC_ET");
283 if (
sc.isFailure()) {
284 ATH_MSG_WARNING(
"Unable to retrieve LArRawSCContainer with key SC_ET from DetectorStore. " );
291 sc =
evtStore()->retrieve(etcontainer_next,
"SC_ET_ID");
292 if (
sc.isFailure()) {
293 ATH_MSG_WARNING(
"Unable to retrieve LArRawSCContainer with key SC_ET_ID from DetectorStore. " );
304 headcontainer=&*hdrCont;
305 thisELVL1Id = (*hdrCont->
begin())->L1Id();
306 ATH_MSG_DEBUG(
" ELVL1I FROM LATOME HEADER " << thisELVL1Id );
311 LATOMEHeadMap.try_emplace ( hit->SourceId(), hit );
316 rawChannelMap.try_emplace( raw.channelID(), &raw );
326 return StatusCode::FAILURE;
329 cablingROD=*cablingHdlROD;
332 return StatusCode::FAILURE;
337 if( DigitContainer_next && DigitContainer_next->
empty() ) DigitContainer_next =
nullptr;
339 if( etcontainer && etcontainer->
empty() ) etcontainer =
nullptr;
341 if( etcontainer_next && etcontainer_next->
empty() ) etcontainer_next =
nullptr;
344 if (hasDigitContainer) {
345 if( !DigitContainer->
empty() ) cellsno = DigitContainer->
size();
347 ATH_MSG_WARNING(
"DigitContainer has zero size, but asked, will be not filled... ");
348 return StatusCode::SUCCESS;
351 ATH_MSG_DEBUG(
"DigitContainer has size: "<<cellsno<<
" hasDigitContainer: "<<hasDigitContainer);
353 if (hasAccCalibDigitContainer) {
354 if( !AccCalibDigitContainer->
empty() ) {
355 cellsno = AccCalibDigitContainer->
size();
356 ATH_MSG_DEBUG(
"AccCalibDigitContainer has size: "<<cellsno<<
" hasAccCalibDigitContainer: "<<hasAccCalibDigitContainer);
358 ATH_MSG_WARNING(
"AccCalibDigitContainer has zero size, but asked, will be not filled... ");
359 return StatusCode::SUCCESS;
362 if (hasAccDigitContainer) {
363 if( !AccDigitContainer->
empty() ) {
364 cellsno = AccDigitContainer->
size();
365 ATH_MSG_DEBUG(
"AccDigitContainer has size: "<<cellsno<<
" hasAccDigitContainer: "<<hasAccDigitContainer);
367 ATH_MSG_WARNING(
"AccDigitContainer has zero size, but asked, will be not filled... ");
368 return StatusCode::SUCCESS;
372 if (DigitContainer_next){
374 cellsno = DigitContainer_next->
size();
375 }
else if(DigitContainer_next->
size() != (
unsigned)cellsno ){
ATH_MSG_ERROR(
" NOOOOOOO! Different number of entries in DigitContainer_next"<< cellsno <<
" " << DigitContainer_next->
size() );
380 cellsno = etcontainer->
size();
381 }
else if(etcontainer->
size() != (
unsigned)cellsno ){
ATH_MSG_ERROR(
" NOOOOOOO! Different number of entries in etcontainer"<< cellsno <<
" " << etcontainer->
size() );
384 if (etcontainer_next){
386 cellsno = etcontainer_next->
size();
387 }
else if(etcontainer_next->
size() != (
unsigned)cellsno ){
ATH_MSG_ERROR(
" NOOOOOOO! Different number of entries in etcontainer_next"<< cellsno <<
" " << etcontainer_next->
size() );
390 unsigned cellCounter = 0;
393 for(
int c = 0;
c<cellsno;++
c ){
400 if( hasAccDigitContainer ){
406 unsigned int trueMaxSample = digi->
nsample();
410 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 " );
419 for(
unsigned i = 0;
i<trueMaxSample;++
i) {
426 if( hasAccCalibDigitContainer ){
432 unsigned int trueMaxSample = digi->
nsamples();
436 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 " );
445 for(
unsigned i = 0;
i<trueMaxSample;++
i) {
455 if( hasDigitContainer ){
460 unsigned int trueMaxSample = digi->
nsamples();
464 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 " );
495 unsigned int trueMaxBcid = trueMaxSample;
496 if(trueMaxBcid > scdigi->
BCId().size()) trueMaxBcid=scdigi->
BCId().size();
497 for(
unsigned i = 0;
i<trueMaxBcid; ++
i){
512 if( DigitContainer_next ){
516 unsigned int trueMaxSample = digi->
nsamples();
520 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 " );
527 if( !hasDigitContainer){
537 if(!scdigi){
ATH_MSG_DEBUG(
" Can't cast digi to LArSCDigit*");
547 for(
unsigned i = 0;
i<trueMaxSample;++
i){
553 if( !hasDigitContainer &&
m_fillRawChan && RawChannelContainer ){
565 if ( !hasDigitContainer && !DigitContainer_next ){
579 unsigned int truenet =
m_Net;
580 if(truenet > rawSC->
bcids().size()) truenet=rawSC->
bcids().size();
581 for(
unsigned i=0;
i<truenet;++
i){
585 for(
unsigned i=0;
i<truenet;++
i){
588 if(truenet > rawSC->
satur().size()) truenet=rawSC->
satur().size();
589 for(
unsigned i = 0;
i<truenet;++
i){
597 if( etcontainer_next ){
600 if ( !hasDigitContainer && !DigitContainer_next && !etcontainer ){
626 if (
sc != StatusCode::SUCCESS) {
639 if( !
m_trigDec->getListOfTriggers(
x).empty() ){
657 for (
x = TTVector->
begin(); x < TTVector->
end(); ++
x ){
663 if(
count==20000)
break;
671 if (
sc != StatusCode::SUCCESS) {
677 ATH_MSG_DEBUG(
"LArSC2Ntuple has finished, filled " << cellCounter <<
" cells");
678 return StatusCode::SUCCESS;
684 const std::vector<Identifier> cellIds =
m_scidtool->superCellToOfflineID(offId);
688 for(
unsigned i=0;
i<cellIds.size(); ++
i ) {
690 if (hwcell.
is_valid() && (rawChanMap.count(hwcell) != 0) ) {
693 m_ROD_id[
i] = rawChanMap[hwcell]->hardwareID().get_identifier32().get_compact();
def retrieve(aClass, aKey=None)
Liquid Argon SuperCell raw data.
Data class for calibration ADC samples preprocessed by the DSP.
NTuple::Array< float > m_ROD_time
NTuple::Array< double > m_TTphi
SG::ReadCondHandleKey< LArOnOffIdMapping > m_cablingKeyAdditional
Gaudi::Property< std::vector< std::string > > m_trigNames
NTuple::Item< unsigned int > m_dac
SG::ReadHandleKey< LArLATOMEHeaderContainer > m_LArLatomeHeaderContainerKey
NTuple::Item< unsigned long long > m_IEventEvt
Container class for LArAccumulatedDigit.
std::string find(const std::string &s)
return a remapped string
const_pointer_type cptr()
Dereference the pointer.
NTuple::Array< short > m_samples_ADC_BAS
Gaudi::Property< unsigned int > m_Nsamples
unsigned int SourceId() const
NTuple::Item< uint16_t > m_bcidLATOMEHEAD
Gaudi::Property< bool > m_fillBCID
Container class for LArRawSC.
const HWIdentifier & hardwareID() const
Gaudi::Property< bool > m_fillLB
size_t nsamples() const
return number of samples
const std::vector< short > & samples() const
const HWIdentifier & hardwareID() const
float mean(int n_min=-1, int n_max=-1) const
Calculates and returns the Mean value of ADC samples.
NTuple::Array< int > m_energyVec_ET_ID
NTuple::Item< unsigned long long > m_IEvent
NTuple::Array< unsigned short > m_bcidVec
const std::string & key() const
Return the StoreGate ID for the referenced object.
std::map< HWIdentifier, const LArRawChannel * > rawChanMap_t
NTuple::Item< uint32_t > m_ntNet
unsigned int SourceId() const
@ LAr
The LAr calorimeter.
uint16_t getIsPulsedInt() const
get the four bit int that tells which lines pulsed
bool is_valid() const
Check if id is in a valid state.
NTuple::Item< long > m_ntNsamples
NTuple::Item< unsigned long > m_ELVL1Id
const std::vector< bool > & satur() const
const SG::ReadCondHandleKey< LArOnOffIdMapping > & cablingKey() const
@ Error
The sub-detector issued an error.
const HWIdentifier & hardwareID() const
Return HWIdentifier.
LArSC2Ntuple(const std::string &name, ISvcLocator *pSvcLocator)
NTuple::Array< bool > m_saturVec_ET
SG::ReadHandleKey< xAOD::EventInfo > m_eventInfoKey
NTuple::Array< bool > m_saturVec_ET_ID
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
Gaudi::Property< std::vector< unsigned int > > m_FTlist
NTuple::Array< int > m_TTEhad
NTuple::Item< short > m_bcid
Data class for ADC samples and autocorr preprocessed by the DSP.
NTuple::Array< int > m_TTEem
NTuple::Array< float > m_RMS
NTuple::Item< unsigned int > m_pulsed
NTuple::Array< unsigned short > m_bcidVec_ET_ID
Liquid Argon digit base class.
NTuple::Item< uint32_t > m_latomeSourceId
Liquid Argon ROD output object base class.
int nsample() const
return number of samples
NTuple::Item< uint32_t > m_LArEventBits
::StatusCode StatusCode
StatusCode definition for legacy code.
std::vector< float > RMS() const
Calculates and returns the RMS value of each ADC sample.
Gaudi::Property< bool > m_fillRawChan
Gaudi::Property< bool > m_fillTType
SG::ReadDecorHandleKey< xAOD::EventInfo > m_eventInfoDecorKey
#define CHECK(...)
Evaluate an expression and check for errors.
virtual StatusCode execute() override
SG::ReadHandleKey< LArAccumulatedDigitContainer > m_accContKey
ToolHandle< Trig::TrigDecisionTool > m_trigDec
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
NTuple::Item< short > m_latomeChannel
NTuple::Array< int > m_energyVec_ET
Gaudi::Property< bool > m_overwriteEventNumber
NTuple::Item< unsigned int > m_TType
void fillRODEnergy(HWIdentifier SCId, rawChanMap_t &rawChanMap, const LArOnOffIdMapping *cabling, const LArOnOffIdMapping *cablingROD)
NTuple::Array< unsigned short > m_bcidVec_ET
const HWIdentifier & hardwareID() const
Return HWIdentifier.
HWIdentifier createSignalChannelID(const Identifier &id) const
create a HWIdentifier from an Identifier (not inline)
Gaudi::Property< std::vector< std::string > > m_contKeys
Base class for LArDigits taken by LATOME.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
float RMS(int n_min=-1, int n_max=-1) const
Calculates and returns the RMS value of ADC samples
void fill(H5::Group &out_file, size_t iterations)
NTuple::Array< float > m_ROD_id
Gaudi::Property< std::string > m_triggerTowerKey
std::vector< float > mean() const
Calculates and returns the Mean value of each ADC sample.
NTuple::Item< uint32_t > m_ntNTT
SG::ReadHandleKey< LArDigitContainer > m_contKey
StatusCode initialize(bool used=true)
NTuple::Array< float > m_ROD_energy
int delay() const
return the setting of the delay
const std::vector< unsigned short > & bcids() const
ToolHandle< ICaloSuperCellIDTool > m_scidtool
bool fillFromIdentifier(const HWIdentifier &id)
@ Warning
The sub-detector issued a warning.
virtual StatusCode initialize()
#define ATH_MSG_WARNING(x)
NTuple::Item< unsigned int > m_delay
Gaudi::Property< bool > m_isSC
NTuple::Array< float > m_mean
NTuple::Array< short > m_samples
Container class for LArDigit.
virtual StatusCode initialize() override
Gaudi::Property< unsigned int > m_Net
NTuple::Array< unsigned short > m_bcidVec_ADC_BAS
const T * at(size_type n) const
Access an element, as an rvalue.
SG::ReadHandleKey< LArAccumulatedCalibDigitContainer > m_accCalibContKey
Container class for LArAccumulatedCalibDigit.
const std::vector< unsigned short > & BCId() const
size_type size() const noexcept
Returns the number of elements in the collection.
NTuple::Item< short > m_LArInError
NTuple::Item< long > m_FT
NTuple::Item< short > m_LB
NTuple::Array< double > m_TTeta
bool empty() const noexcept
Returns true if the collection is empty.
std::map< std::string, NTuple::Item< unsigned int > > m_trigNameMap
Gaudi::Property< bool > m_fillCaloTT
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
Container for LArRawChannel (IDC using LArRawChannelCollection)
const std::vector< int > & energies() const
int DAC() const
return the number of samples