15#include "GaudiKernel/MsgStream.h"
16#include "GaudiKernel/StatusCode.h"
17#include "GaudiKernel/DataObject.h"
18#include "GaudiKernel/IRegistry.h"
25#include "eformat/StreamTag.h"
31 ,
AthMessaging(svcloc != nullptr ? msgSvc() : nullptr,
"EventInfoByteStreamAuxCnv")
33 ,
m_mdSvc(
"InputMetaDataStore",
"EventInfoByteStreamAuxCnv")
54 CHECK(Converter::initialize());
59 SmartIF<IProperty> byteStreamCnvSvc(service(
"ByteStreamCnvSvc"));
60 CHECK( byteStreamCnvSvc.isValid() );
62 SimpleProperty<bool> propIsSimulation(
"IsSimulation",
m_isSimulation);
63 StatusCode
sc = byteStreamCnvSvc->getProperty(&propIsSimulation);
73 SimpleProperty<bool> propIsTestbeam(
"IsTestbeam",
m_isTestbeam);
74 sc = byteStreamCnvSvc->getProperty(&propIsTestbeam);
84 SimpleProperty<bool> propIsCalibration(
"IsCalibration",
m_isCalibration);
85 sc = byteStreamCnvSvc->getProperty(&propIsCalibration);
95 return StatusCode::SUCCESS;
102 StatusCode
sc = Converter::finalize();
103 if (
sc.isFailure()) {
115 return StatusCode::FAILURE;
124 return StatusCode::FAILURE;
128 int runNumber =
re->run_no();
131 uint64_t eventNumber;
132 if (
re->version() < 0x03010000) {
133 eventNumber=
re->lvl1_id();
135 eventNumber=
re->global_id();
139 uint32_t bc_time_sec =
re->bc_time_seconds();
140 uint32_t bc_time_ns =
re->bc_time_nanoseconds();
142 if (bc_time_ns > 1000000000) {
143 if (runNumber < 20920) {
145 uint32_t temp = bc_time_ns;
146 bc_time_ns = bc_time_sec;
148 ATH_MSG_DEBUG(
"bc_time second/nanosecond swapped, sec/ns = " << bc_time_sec <<
" " << bc_time_ns);
152 ATH_MSG_WARNING(
"bc_time nanosecond number larger than 1e9, it is " << bc_time_ns <<
", reset it to 1 sec");
153 bc_time_ns = 1000000000;
158 uint16_t lumiBlock =
re->lumi_block();
161 uint16_t bcID =
re->bc_id();
163 unsigned int detMask0 = 0xFFFFFFFF, detMask1 = 0xFFFFFFFF, detMask2 = 0xFFFFFFFF, detMask3 = 0xFFFFFFFF;
166 StatusCode status =
m_mdSvc->retrieve(metadatacont,
"ByteStreamMetadata");
167 if (!status.isSuccess()) {
172 uint64_t detectorMask = metadata->getDetectorMask();
173 detMask0 = (
unsigned int)(detectorMask & 0x00000000FFFFFFFF);
174 detMask1 = (
unsigned int)(detectorMask >> 32);
175 uint64_t detectorMask2 = metadata->getDetectorMask2();
176 detMask2 = (
unsigned int)(detectorMask2 & 0x00000000FFFFFFFF);
177 detMask3 = (
unsigned int)(detectorMask2 >> 32);
201 uint32_t eventTypeBitmask{0};
217 uint32_t statusElement = *buffer;
220 uint32_t extendedLevel1ID =
re->lvl1_id();
223 uint32_t level1TriggerType =
re->lvl1_trigger_type();
226 std::vector<xAOD::EventInfo::StreamTag> streamTags;
227 std::vector<eformat::helper::StreamTag> onl_streamTags;
228 re->stream_tag(buffer);
229 eformat::helper::decode(
re->nstream_tag(), buffer, onl_streamTags);
230 for (
const eformat::helper::StreamTag& onl_streamTag : onl_streamTags) {
231 std::set<uint32_t> tmp_off_dets = std::set<uint32_t>();
232 if (!onl_streamTag.dets.empty()) {
233 std::set<eformat::SubDetector> tmp_onl_dets = onl_streamTag.dets;
234 for (
const eformat::SubDetector& subdet : tmp_onl_dets) {
235 tmp_off_dets.insert((uint32_t) subdet);
240 , onl_streamTag.obeys_lumiblock
255 ATH_MSG_DEBUG(
" New xAOD::EventAuxInfo made, run/event= " << runNumber
256 <<
" " << eventNumber
257 <<
" Time stamp = " <<
ascTime(bc_time_sec)
260 return StatusCode::SUCCESS;
265 ATH_MSG_DEBUG(
"Nothing to be done for xAOD::EventAuxInfo createReps");
266 return StatusCode::SUCCESS;
281 time_t ct = mktime(&t);
285 asctime_r (&t2, buf);
286 return std::string (buf);
const boost::regex re(r_e)
#define ATH_MSG_WARNING(x)
Helpers for checking error return status codes and reporting errors.
#define CHECK(...)
Evaluate an expression and check for errors.
uint32_t CLID
The Class ID type.
OFFLINE_FRAGMENTS_NAMESPACE::FullEventFragment RawEvent
data type for reading raw event
AthMessaging(IMessageSvc *msgSvc, const std::string &name)
Constructor.
IOpaqueAddress for ByteStreamCnvSvc, with ROB ids.
static constexpr long storageType()
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
virtual StatusCode createObj(IOpaqueAddress *pAddr, DataObject *&pObj) override
converter method to create object
virtual StatusCode createRep(DataObject *pObj, IOpaqueAddress *&pAddr) override
converter method to write object
virtual StatusCode finalize() override
std::string ascTime(unsigned int t)
convert timestamp to ascii time.
ServiceHandle< IROBDataProviderSvc > m_robDataProvider
RODDataProviderSvc handle.
static const CLID & classID()
virtual StatusCode initialize() override
ServiceHandle< StoreGateSvc > m_mdSvc
TDS handle.
static long storageType()
EventInfoByteStreamAuxCnv(ISvcLocator *svcloc)
void setStore(const SG::IConstAuxStore *store)
Set the store associated with this object.
Class describing a stream tag on the event.
void setBCID(uint32_t value)
Set the bunch crossing ID of the event.
void setDetectorMask(uint32_t mask0, uint32_t mask1)
Set the bit fields indicating with TTC timezones were present.
void setTimeStampNSOffset(uint32_t value)
Set the nanosecond offset wrt. the time stamp.
void setMCEventNumber(uint64_t value)
Set the MC generator's event number.
@ Core
Core flags describing the event.
void setStreamTags(const std::vector< StreamTag > &value)
Set the streams that the event was put in.
void setTimeStamp(uint32_t value)
Set the POSIX time of the event.
void setLevel1TriggerType(uint16_t value)
Set the Level-1 trigger type.
bool setEventFlags(EventFlagSubDet subDet, uint32_t flags)
Set the event flags for a particular sub-detector.
void setDetectorMaskExt(uint32_t mask2, uint32_t mask3)
Set the bit fields indicating with TTC timezones were present.
void setEventNumber(uint64_t value)
Set the current event's event number.
void setEventTypeBitmask(uint32_t value)
Set the event type bitmask.
void setMCChannelNumber(uint32_t value)
Set the MC generator's channel number.
void setExtendedLevel1ID(uint32_t value)
Set the extended Level-1 identifier.
void setMCEventWeights(const std::vector< float > &value)
Set the weights of all the MC events used in the simulation.
void setRunNumber(uint32_t value)
Set the current event's run number.
@ IS_CALIBRATION
true: calibration, false: physics
@ IS_SIMULATION
true: simulation, false: data
@ IS_TESTBEAM
true: testbeam, false: full detector
void setStatusElement(uint32_t value)
Set the trigger status element.
void setLumiBlock(uint32_t value)
Set the current event's luminosity block number.
DataObject * asStorable(SG::DataObjectSharedPtr< T > pObject)
EventInfo_v1 EventInfo
Definition of the latest event info version.
EventAuxInfo_v3 EventAuxInfo
Definition of the latest event auxiliary info version.