ATLAS Offline Software
MakeEventStreamInfo.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
10 #include "MakeEventStreamInfo.h"
11 
12 #include "GaudiKernel/IAlgorithm.h"
13 
16 #include "EventInfo/EventInfo.h"
17 #include "EventInfo/EventID.h"
18 #include "StoreGate/StoreGateSvc.h"
21 
22 //___________________________________________________________________________
24  const std::string& name,
25  const IInterface* parent) : base_class(type, name, parent)
26 {
27 }
28 //___________________________________________________________________________
30 }
31 //___________________________________________________________________________
33  ATH_MSG_DEBUG("Initializing " << name());
34  // Locate the MetaDataStore
35  if (!m_metaDataSvc.retrieve().isSuccess()) {
36  ATH_MSG_FATAL("Could not find MetaDataSvc");
37  return(StatusCode::FAILURE);
38  }
39  if (!m_eventStore.retrieve().isSuccess()) {
40  ATH_MSG_FATAL("Could not find EventStore");
41  return(StatusCode::FAILURE);
42  }
43 
44  // Autoconfigure data header key
45  if (m_dataHeaderKey.empty()){
46  const IAlgorithm* parentAlg = dynamic_cast<const IAlgorithm*>(this->parent());
47  if (parentAlg == nullptr) {
48  ATH_MSG_ERROR("Unable to get parent Algorithm");
49  return(StatusCode::FAILURE);
50  }
51  m_dataHeaderKey.setValue(parentAlg->name());
52  }
53 
54  m_filledEvent = false;
55 
56  return(StatusCode::SUCCESS);
57 }
58 //___________________________________________________________________________
60  // Remove EventStreamInfo with same key if it exists
61  bool ignoreIfAbsent = true;
62  if( !m_metaDataSvc->remove<EventStreamInfo>(m_key.value(), ignoreIfAbsent).isSuccess() ) {
63  ATH_MSG_ERROR("Unable to remove EventStreamInfo with key " << m_key.value());
64  return StatusCode::FAILURE;
65  }
66  return(StatusCode::SUCCESS);
67 }
68 //___________________________________________________________________________
70  return(StatusCode::SUCCESS);
71 }
72 //___________________________________________________________________________
74  return(StatusCode::SUCCESS);
75 }
76 //___________________________________________________________________________
79  if (!dataHeader.isValid()) {
80  return(StatusCode::SUCCESS);
81  }
82  // Retrieve the EventInfo object
83  EventType evtype;
84  unsigned long long runN = 0;
85  unsigned lumiN = 0;
87  if (xEventInfo.isValid()) {
88  runN = xEventInfo->runNumber();
89  lumiN = xEventInfo->lumiBlock();
90  evtype = eventTypeFromxAOD(xEventInfo.get());
91  } else {
93  if (oEventInfo.isValid()) {
94  runN = oEventInfo->event_ID()->run_number();
95  lumiN = oEventInfo->event_ID()->lumi_block();
96  evtype = *oEventInfo->event_type();
97  } else {
98  ATH_MSG_ERROR("Unable to retrieve EventInfo object");
99  return(StatusCode::FAILURE);
100  }
101  }
102 
103  EventStreamInfo* pEventStream = m_metaDataSvc->tryRetrieve<EventStreamInfo>(m_key.value());
104  if( !pEventStream ) {
105  auto esinfo_up = std::make_unique<EventStreamInfo>();
106  pEventStream = esinfo_up.get();
107  if( m_metaDataSvc->record(std::move(esinfo_up), m_key.value()).isFailure() ) {
108  ATH_MSG_ERROR("Could not register EventStreamInfo object");
109  return(StatusCode::FAILURE);
110  }
111  }
112  pEventStream->addEvent();
113  pEventStream->insertProcessingTag(dataHeader->getProcessTag());
114  pEventStream->insertLumiBlockNumber( lumiN );
115  pEventStream->insertRunNumber( runN );
116  for (const DataHeaderElement& dhe : *dataHeader) {
117  pEventStream->insertItemList(dhe.getPrimaryClassID(), dhe.getKey());
118  }
119  pEventStream->insertEventType( evtype );
120 
121  m_filledEvent = true;
122 
123  return(StatusCode::SUCCESS);
124 }
125 //___________________________________________________________________________
127  EventStreamInfo* pEventStream = m_metaDataSvc->tryRetrieve<EventStreamInfo>(m_key.value());
128  if (!pEventStream) {
129  auto esinfo_up = std::make_unique<EventStreamInfo>();
130  pEventStream = esinfo_up.get();
131  ATH_CHECK(m_metaDataSvc->record(std::move(esinfo_up), m_key.value()));
132  }
133  if (!m_filledEvent) {
134  // insert non-event information (processingTags)
135  // to EventStreamInfo if we have not processed any event
136 
137  pEventStream->insertProcessingTag(m_dataHeaderKey.value());
138  }
139  return (StatusCode::SUCCESS);
140 }
141 //___________________________________________________________________________
143  ATH_MSG_DEBUG("in finalize()");
144  // release the MetaDataStore
145  if (!m_metaDataSvc.release().isSuccess()) {
146  ATH_MSG_WARNING("Could not release MetaDataStore");
147  }
148  if (!m_eventStore.release().isSuccess()) {
149  ATH_MSG_WARNING("Could not release EventStore");
150  }
151  return(StatusCode::SUCCESS);
152 }
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
MakeEventStreamInfo::m_eventStore
ServiceHandle< StoreGateSvc > m_eventStore
Definition: MakeEventStreamInfo.h:62
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
EventType
This class represents the "type of event" where the type is given by one or more "characteristics".
Definition: EventType.h:92
MakeEventStreamInfo::m_metaDataSvc
ServiceHandle< IAthMetaDataSvc > m_metaDataSvc
Pointer to the data stores.
Definition: MakeEventStreamInfo.h:61
xAOD::EventInfo_v1::runNumber
uint32_t runNumber() const
The current event's run number.
MakeEventStreamInfo::m_oEventInfoKey
StringProperty m_oEventInfoKey
Key, the StoreGate key for the old EventInfo object, ix there is no xAOD::EventInfo.
Definition: MakeEventStreamInfo.h:58
EventStreamInfo.h
This file contains the class definition for the EventStreamInfo class.
MakeEventStreamInfo::m_filledEvent
bool m_filledEvent
Check if the EventStreamInfo was filled with event-specific information.
Definition: MakeEventStreamInfo.h:65
EventInfoFromxAOD.h
EventID.h
This class provides a unique identification for each event, in terms of run/event number and/or a tim...
DataHeaderElement
This class provides a persistent form for the TransientAddress.
Definition: DataHeader.h:36
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
EventStreamInfo::insertRunNumber
void insertRunNumber(unsigned int run)
Insert new Run Number into a set.
Definition: EventStreamInfo.cxx:59
MakeEventStreamInfo::postInitialize
virtual StatusCode postInitialize() override
Called at the end of AthenaOutputStream::initialize().
Definition: MakeEventStreamInfo.cxx:59
MakeEventStreamInfo::m_dataHeaderKey
StringProperty m_dataHeaderKey
Name of DataHeader key.
Definition: MakeEventStreamInfo.h:51
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
SG::ReadHandle::get
const_pointer_type get() const
Dereference the pointer, but don't cache anything.
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
EventInfo::event_ID
EventID * event_ID()
the unique identification of the event.
Definition: EventInfo/EventInfo/EventInfo.h:210
test_pyathena.parent
parent
Definition: test_pyathena.py:15
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
MakeEventStreamInfo::MakeEventStreamInfo
MakeEventStreamInfo(const std::string &type, const std::string &name, const IInterface *parent)
Standard AlgTool Constructor.
Definition: MakeEventStreamInfo.cxx:23
EventStreamInfo::addEvent
void addEvent(unsigned int number=1)
Increase Event Counter.
Definition: EventStreamInfo.cxx:53
DataHeader.h
This file contains the class definition for the DataHeader and DataHeaderElement classes.
xAOD::EventInfo_v1::lumiBlock
uint32_t lumiBlock() const
The current event's luminosity block number.
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
MakeEventStreamInfo::finalize
virtual StatusCode finalize() override
Called at the end of AthenaOutputStream::finalize() (via release()).
Definition: MakeEventStreamInfo.cxx:142
EventStreamInfo::insertProcessingTag
void insertProcessingTag(const std::string &process)
Insert new Processing Tag into a set.
Definition: EventStreamInfo.cxx:71
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
MakeEventStreamInfo::postExecute
virtual StatusCode postExecute() override
Called at the end of AthenaOutputStream::execute().
Definition: MakeEventStreamInfo.cxx:77
MakeEventStreamInfo::preExecute
virtual StatusCode preExecute() override
Called at the beginning of AthenaOutputStream::execute().
Definition: MakeEventStreamInfo.cxx:69
EventInfo.h
MakeEventStreamInfo::~MakeEventStreamInfo
virtual ~MakeEventStreamInfo()
Destructor.
Definition: MakeEventStreamInfo.cxx:29
MakeEventStreamInfo::m_eventInfoKey
StringProperty m_eventInfoKey
Key, the StoreGate key for the xAOD::EventInfo object.
Definition: MakeEventStreamInfo.h:56
EventStreamInfo
This class provides the summary information stored for data written as a Event Stream.
Definition: EventStreamInfo.h:28
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
DataHeader::getProcessTag
const std::string & getProcessTag() const
Definition: DataHeader.cxx:247
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
MakeEventStreamInfo::preFinalize
virtual StatusCode preFinalize() override
Called at the beginning of AthenaOutputStream::finalize().
Definition: MakeEventStreamInfo.cxx:126
MakeEventStreamInfo::preStream
virtual StatusCode preStream() override
Called before actually streaming objects.
Definition: MakeEventStreamInfo.cxx:73
EventStreamInfo::insertItemList
void insertItemList(CLID type, const std::string &key)
Insert new ItemList Entry into a set.
Definition: EventStreamInfo.cxx:77
MakeEventStreamInfo::initialize
virtual StatusCode initialize() override
Required of all IAthenaOutputTools: Called by AthenaOutputStream::initialize() (via ToolSvc retrieve(...
Definition: MakeEventStreamInfo.cxx:32
eventTypeFromxAOD
EventType eventTypeFromxAOD(const xAOD::EventInfo *xaod)
Create EventType object from xAOD::EventInfo.
Definition: EventInfoFromxAOD.cxx:34
MakeEventStreamInfo::m_key
StringProperty m_key
Key, the StoreGate key for the EventStreamInfo object.
Definition: MakeEventStreamInfo.h:53
StoreGateSvc.h
EventStreamInfo::insertEventType
void insertEventType(const EventType &event)
Insert new Event Type into a set.
Definition: EventStreamInfo.cxx:83
EventStreamInfo::insertLumiBlockNumber
void insertLumiBlockNumber(unsigned int lumiBlock)
Insert new Luminosity Block Number into a set.
Definition: EventStreamInfo.cxx:65
EventInfo::event_type
EventType * event_type()
the type of the event, e.g. simulation, testbeam, etc
Definition: EventInfo/EventInfo/EventInfo.h:220
MakeEventStreamInfo.h
This file contains the class definition for the MakeEventStreamInfo class.