21#ifndef XAOD_STANDALONE
29 template<
typename T >
30 std::ostream&
operator<<( std::ostream& out,
const std::set< T >& s );
33 template<
typename T >
34 std::ostream&
operator<<( std::ostream& out,
const std::vector< T >&
vec ) {
37 for(
size_t i = 0; i <
vec.size(); ++i ) {
39 if( i != (
vec.size() - 1 ) ) {
48 template<
typename T >
49 std::ostream&
operator<<( std::ostream& out,
const std::set< T >& s ) {
51 return out << std::vector< T >( begin( s ), end( s ) );
58 static std::atomic< bool > uninitPileupAccessPrinted =
false;
59 if( ! uninitPileupAccessPrinted ) {
60 std::cout <<
"xAOD::EventInfo WARNING Uninitialised pileup value was "
62 " Debug it by breaking on "
63 "xAODEventInfoPrivate::pileupUnsetHook function calls!"
65 uninitPileupAccessPrinted =
true;
80 using xAODEventInfoPrivate::operator<<;
122 runNumber, setRunNumber )
131 setTimeStampNSOffset )
135 detectorMask0, setDetectorMask0 )
139 detectorMask2, setDetectorMask2 )
195 detDescrTags, setDetDescrTags )
199 mcEventNumber, setMCEventNumber )
210 eventTypeBitmask, setEventTypeBitmask )
226 statusElement, setStatusElement )
228 extendedLevel1ID, setExtendedLevel1ID )
231 setLevel1TriggerType )
234 const std::string&
type,
236 const std::set< uint32_t >& robs,
237 const std::set< uint32_t >& dets )
238 : m_name(
name ), m_type(
type ), m_obeysLumiblock( obeysLumiblock ),
239 m_robs( robs ), m_dets( dets ) {
276 olb(
"streamTagObeysLumiblock" );
282 const std::vector< EventInfo_v1::StreamTag >&
287 std::vector< StreamTag >
tags;
290 if( (
names( *this ).size() !=
types( *this ).size() ) ||
291 (
names( *this ).size() !=
olb( *this ).size() ) ||
292 (
robsets.isAvailable( *
this ) &&
293 (
names( *this ).size() !=
robsets( *this ).size() ) ) ||
294 (
detsets.isAvailable( *
this ) &&
295 (
names( *this ).size() !=
detsets( *this ).size() ) ) ) {
296 std::cerr <<
"<xAOD::EventInfo_v1::streamTags> ERROR "
297 <<
"Corrupt information found!" << std::endl;
298 std::cerr <<
" streamTagNames = " <<
names( *
this )
300 std::cerr <<
" streamTagTypes = " <<
types( *
this )
302 std::cerr <<
" streamTagObeysLumiblock = " <<
olb( *
this )
304 std::cerr <<
" streamTagRobs = ";
305 if(
robsets.isAvailable( *
this ) ) {
306 std::cerr <<
"N/A" << std::endl;
308 std::cerr <<
robsets( *
this ) << std::endl;
310 std::cerr <<
" streamTagDets = ";
311 if(
detsets.isAvailable( *
this ) ) {
312 std::cerr <<
"N/A" << std::endl;
314 std::cerr <<
detsets( *
this ) << std::endl;
320 for(
size_t i = 0; i <
names( *this ).size(); ++i ) {
321 static const std::set< uint32_t > dummySet;
325 (
robsets.isAvailable( *
this ) ?
328 (
detsets.isAvailable( *
this ) ?
348 names( *this ).clear();
types( *this ).clear();
olb( *this ).clear();
352 std::vector< StreamTag >::const_iterator itr = value.begin();
353 std::vector< StreamTag >::const_iterator end = value.end();
354 for( ; itr != end; ++itr ) {
355 names( *this ).push_back( itr->name() );
356 types( *this ).push_back( itr->type() );
357 olb( *this ).push_back( itr->obeysLumiblock() );
358 robsets( *this ).push_back( itr->robs() );
359 detsets( *this ).push_back( itr->dets() );
415 pileUpMixtureIDLowBits,
416 setPileUpMixtureIDLowBits )
419 setPileUpMixtureIDHighBits )
443 EventInfo_v1::SubEvent::
472 static const std::string
name =
"Signal";
475 static const std::string
name =
"MinimumBias";
478 static const std::string
name =
"Cavern";
481 static const std::string
name =
"HaloGas";
484 static const std::string
name =
"HighPtMinimumBias";
487 static const std::string
name =
"ZeroBias";
490 static const std::string
name =
"Unknown";
522 std::vector< EventInfo_v1::SubEvent >
528 if( ( !
timeAcc.isAvailable( *
this ) ) &&
529 ( !
indexAcc.isAvailable( *
this ) ) &&
530 ( !
linkAcc.isAvailable( *
this ) ) &&
531 ( !
typeAcc.isAvailable( *
this ) ) )
538 if(
timeAcc.isAvailable( *
this ) ) {
539 size =
timeAcc( *this ).size();
540 }
else if(
indexAcc.isAvailable( *
this ) ) {
542 }
else if(
linkAcc.isAvailable( *
this ) ) {
543 size =
linkAcc( *this ).size();
544 }
else if(
typeAcc.isAvailable( *
this ) ) {
545 size =
typeAcc( *this ).size();
547 std::cerr <<
"xAOD::EventInfo_v1 ERROR Logic error in subEvents()"
551 if( (
timeAcc.isAvailable( *
this ) &&
552 ( size !=
timeAcc( *this ).size() ) ) ||
554 ( size !=
indexAcc( *this ).size() ) ) ||
555 (
linkAcc.isAvailable( *
this ) &&
556 ( size !=
linkAcc( *this ).size() ) ) ||
557 (
typeAcc.isAvailable( *
this ) &&
558 ( size !=
typeAcc( *this ).size() ) ) ) {
559 std::cerr <<
"xAOD::EventInfo_v1 ERROR Data corruption found in "
560 <<
"the sub-event information" << std::endl;
561 std::cerr <<
"subEventTime = "
563 std::vector< int16_t >() ) << std::endl;
564 std::cerr <<
"subEventIndex = "
566 std::vector< uint16_t >() ) << std::endl;
567 std::cerr <<
"subEventLink = "
571 std::cerr <<
"subEventType = "
573 std::vector< uint16_t >() ) << std::endl;
577 for(
size_t i = 0; i < size; ++i ) {
586 (
typeAcc.isAvailable( *
this ) ?
595 const std::vector< EventInfo_v1::SubEvent >&
617 std::vector< SubEvent >::const_iterator itr = value.begin();
618 std::vector< SubEvent >::const_iterator end = value.end();
619 for( ; itr != end; ++itr ) {
620 timeAcc( *this ).push_back( itr->time() );
621 indexAcc( *this ).push_back( itr->index() );
623 linkAcc( *this ).push_back( itr->link() );
677 int t = (typ==99)? 0: (
int)typ+1;
708 throw std::runtime_error(
"EventInfo_v1::isEventFlagBitSet: Asked for "
709 "non-existent bit" );
716 return ( ( value >> bit ) & 0x1 );
729 std::atomic<uint32_t>&
a = (*acc)(*this);
732 while (!
a.compare_exchange_strong (orig, value)) {
755 if (existingFlags & (1u << bit)) {
766 ( *acc )( *this ) |= ( 1u << bit );
786 ( *acc )( *this ) &= ~( 1u << bit );
799 if ((existingFlags | flags) == existingFlags) {
810 ( *acc )( *this ) |= ( flags &
EF_BITS );
840 std::atomic<uint32_t>&
a = (*acc)(*this);
843 (
static_cast< uint32_t >( state ) <<
845 while (!
a.compare_exchange_strong (orig, value)) {
848 (
static_cast< uint32_t >( state ) <<
877 std::atomic<uint32_t>&
a = (*acc)(*this);
886 (
static_cast< uint32_t >( state ) <<
888 while (!
a.compare_exchange_strong (orig, value)) {
894 (
static_cast< uint32_t >( state ) <<
999 if(
linkAcc.isAvailableWritable( *
this ) ) {
1001 std::vector< ElementLink< EventInfoContainer_v1 > >
::iterator
1002 el_itr =
linkAcc( *this ).begin();
1003 std::vector< ElementLink< EventInfoContainer_v1 > >
::iterator
1004 el_end =
linkAcc( *this ).end();
1005 for( ; el_itr != el_end; ++el_itr ) {
1006 el_itr->toPersistent();
1022#ifdef XAOD_STANDALONE
1058 const char fillChar = out.fill();
1059 const std::ios_base::fmtflags flags = out.flags();
1060 const std::streamsize
width = out.width();
1063 out <<
"[Run,Evt,Lumi,Time,BunchCross,DetMask] = ["
1070 <<
",0x" << std::hex << std::setw( 16 ) << std::setfill(
'0' )
1075 out.fill( fillChar );
1094 const char fillChar = out.fill();
1095 const std::ios_base::fmtflags flags = out.flags();
1096 const std::streamsize
width = out.width();
1099 out << std::hex << std::setw( 16 ) << std::setfill(
'0' );
1104 out.fill( fillChar );
1123 return a.lowBits == b.lowBits &&
a.highBits == b.highBits;
Access an auxiliary variable atomically.
#define AUXSTORE_PRIMITIVE_GETTER(CL, TYPE, NAME)
Macro creating the reader function for a primitive auxiliary property.
#define AUXSTORE_PRIMITIVE_SETTER_AND_GETTER(CL, TYPE, NAME, SETTER)
Macro creating the accessors of primitive auxiliary properties.
#define AUXSTORE_OBJECT_SETTER_AND_GETTER(CL, TYPE, NAME, SETTER)
Macro creating the accessors of complex auxiliary properties.
std::vector< size_t > vec
static const std::vector< std::string > types
static const uint32_t mask3
ElementLink implementation for ROOT usage.
This class represents the "type of event" where the type is given by one or more "characteristics".
Access an auxiliary variable atomically.
void makePrivateStore()
Create a new (empty) private store for this object.
AuxElement & operator=(const AuxElement &other)
Assignment.
void setStore(const SG::IConstAuxStore *store)
Set the store associated with this object.
bool usingStandaloneStore() const
Test to see if this object is currently using a standalone store.
XAOD_AUXDATA_DEPRECATED bool isAvailable(const std::string &name, const std::string &clsname="") const
Check if an aux variable is available for reading.
SG::Accessor< T, ALLOC > Accessor
AuxElement()
Default constructor.
static IProxyDict * store()
Fetch the current store.
Interface for non-const operations on an auxiliary store.
The Athena Transient Store API.
bool obeysLumiblock() const
Get whether the the stream obeys the luminosity block boundaires.
StreamTag(const std::string &name, const std::string &type, bool obeysLumiblock, const std::set< uint32_t > &robs=std::set< uint32_t >(), const std::set< uint32_t > &dets=std::set< uint32_t >())
Constructor giving all relevant information to the object.
const std::set< uint32_t > & dets() const
Get the (optional) list of detector IDs for partial event building.
std::set< uint32_t > m_dets
Optional list of detector IDs for PEB.
bool m_obeysLumiblock
Whether the stream obeys luminosity block boundaries.
const std::string & type() const
Get the type of the stream.
std::string m_type
The type of the stream.
std::string m_name
The name of the stream.
const std::string & name() const
Get the name of the stream.
std::set< uint32_t > m_robs
Optional list of RoB IDs for PEB.
const std::set< uint32_t > & robs() const
Get the (optional) list of RoB IDs for partial event building.
Class describing the properties of one pileup sub-event.
uint16_t m_index
The index of the pileup event.
PileUpType m_type
The type of the pileup event.
ElementLink< EventInfoContainer_v1 > m_link
Link to the EventInfo object in question.
uint16_t index() const
Get the index of the sub-event.
const ElementLink< EventInfoContainer_v1 > & link() const
Get a link to the EventInfo object describing the pileup event.
int16_t m_time
The time wrt. the signal event.
int16_t time() const
Get the time wrt. the signal event (which has time() == 0)
const EventInfo_v1 * ptr() const
Get a pointer to the EventInfo object describing the pileup event.
PileUpType type() const
Get the type of the pileup event.
const std::string & typeName() const
The string name of the type.
Class describing the basic event information.
void setBeamPosSigma(float x, float y, float z)
Set the size of the beam spot.
static const std::string & PileUpType2Name(PileUpType typ)
Convert PileUpType enum value to string.
uint32_t detectorMask3() const
Bit field indicating which TTC zones are present in the event.
void setAverageInteractionsPerCrossing(float value)
Set average interactions per crossing for all BCIDs.
CxxUtils::CachedValue< std::vector< StreamTag > > m_streamTags
Cached stream tag objects.
bool resetEventFlagBit(EventFlagSubDet subDet, size_t bit)
Reset one particular bit of one particular sub-detector.
uint64_t pileUpMixtureIDLowBits() const
Unique pile-up mixture identifier low bits.
float beamPosSigmaY() const
The width of the beam spot in the Y direction.
void setDetectorMask(uint32_t mask0, uint32_t mask1)
Set the bit fields indicating with TTC timezones were present.
uint32_t lumiBlock() const
The current event's luminosity block number.
bool eventType(EventType type) const
Check for one particular bitmask value.
std::vector< EventInfo_v1::SubEvent > makeSubEvents() const
void toPersistent()
Prepare the object for writing.
std::vector< std::pair< std::string, std::string > > DetDescrTags_t
Type of the detector description tags.
uint32_t eventTypeBitmask() const
The event type bitmask.
uint32_t bcid() const
The bunch crossing ID of the event.
EventFlagSubDet
Sub-detector types for which we store event-level flags.
float beamPosX() const
X coordinate of the beam spot position.
void setDetectorMask1(uint32_t value)
Set the bit field indicating with TTC timezones were present.
bool updateEventFlagBit(const EventFlagSubDet subDet, const size_t bit) const
Change detector flags with update semantics.
void setStreamTags(const std::vector< StreamTag > &value)
Set the streams that the event was put in.
void setBeamTiltYZ(float value)
Set the beam's tilt in radians in YZ.
bool setErrorState(EventFlagSubDet subDet, EventFlagErrorState state)
Set the error state for a particular sub-detector.
void clearSubEvents()
Clear all the currently held sub-events.
StoreGateSvc * m_evtStore
Transient pointer to the StoreGateSvc instance associated with the event (Needed for pile-up digitisa...
float beamPosSigmaXY() const
The beam spot shape's X-Y correlation.
float beamSpotWeight() const
Weight for beam spot size reweighting.
void toTransient()
Cleanse the object after being read in.
bool updateEventFlags(const EventFlagSubDet subDet, const uint32_t flags_in) const
Turn on a set of event flags for one particular sub-detector.
void setDetectorMask0(uint32_t value)
Set the bit field indicating with TTC timezones were present.
bool setEventFlags(EventFlagSubDet subDet, uint32_t flags)
Set the event flags for a particular sub-detector.
EventInfo_v1 & operator=(const EventInfo_v1 &rhs)
Assignment operator.
bool isEventFlagBitSet(EventFlagSubDet subDet, size_t bit) const
Check one particular bit of one particular sub-detector.
void setDetectorMaskExt(uint32_t mask2, uint32_t mask3)
Set the bit fields indicating with TTC timezones were present.
void setSubEvents(const std::vector< SubEvent > &value)
Set the pileup events that were used in the simulation.
void setBeamSpotWeight(float value)
Set weight for beam spot size reweighting.
float averageInteractionsPerCrossing() const
Average interactions per crossing for all BCIDs - for out-of-time pile-up.
void setBeamPos(float x, float y, float z)
Set the beam spot position.
EventFlagErrorState
States that a given sub-detector could be in.
@ Warning
The sub-detector issued a warning.
@ NotSet
The flag was not set to anything.
@ Error
The sub-detector issued an error.
float beamTiltYZ() const
The beam's tilt in radians in YZ.
PileUpMixtureID pileUpMixtureID() const
Unique pile-up mixture identifier.
void setBeamPosSigmaXY(float value)
Set the beam spot shape's X-Y correlation.
float actualInteractionsPerCrossing() const
Average interactions per crossing for the current BCID - for in-time pile-up.
CxxUtils::CachedValue< std::vector< SubEvent > > m_subEvents
Cached sub-event objects.
uint32_t timeStamp() const
POSIX time in seconds from 1970. January 1st.
void addSubEvent(const SubEvent &subEvent)
Add one sub-event to the existing list.
void setPileUpMixtureID(const PileUpMixtureID &value)
Set unique pile-up mixture identifier.
void setDetectorMask2(uint32_t value)
Set the bit field indicating with TTC timezones were present.
void setBeamStatus(uint32_t value)
Set the beam spot's status word.
uint32_t eventFlags(EventFlagSubDet subDet) const
Get the event flags for a particular sub-detector.
uint64_t detectorMaskExt() const
Bit field indicating which TTC zones are present in the event.
const std::vector< SubEvent > & subEvents() const
Get the pileup events that were used in the simulation.
const std::vector< StreamTag > & streamTags() const
Get the streams that the event was put in.
void setDetectorMask3(uint32_t value)
Set the bit field indicating with TTC timezones were present.
EventInfo_v1()
Default constructor.
void setEvtStore(StoreGateSvc *svc)
Set the pointer to the event store associated with this event.
float beamPosSigmaX() const
The width of the beam spot in the X direction.
uint32_t detectorMask0() const
Bit field indicating which TTC zones are present in the event.
PileUpType
Enumerator describing the types of pileup events.
@ HaloGas
Halo-gas non-collision background.
@ HighPtMinimumBias
High pT Minimum bias pileup event.
@ MinimumBias
(Low pT) Minimum bias pileup event
@ ZeroBias
Zero bias pileup event.
@ Signal
The signal event.
@ Cavern
Cavern background pileup event.
@ Unknown
Type not known/specified.
void setBeamTiltXZ(float value)
Set the beam's tilt in radians in XZ.
float beamPosZ() const
Z coordinate of the beam spot position.
uint64_t pileUpMixtureIDHighBits() const
Unique pile-up mixture identifier high bits.
bool updateErrorState(const EventFlagSubDet subDet, const EventFlagErrorState state) const
Update the error state for one particular sub-detector.
uint32_t runNumber() const
The current event's run number.
bool hasBeamSpotWeight() const
Check if weight for beam spot size reweighting exists.
void setPileUpMixtureIDHighBits(uint64_t value)
Set unique pile-up mixture identifier high bits.
uint32_t detectorMask2() const
Bit field indicating which TTC zones are present in the event.
uint32_t timeStampNSOffset() const
Nanosecond time offset wrt. the time stamp.
EventFlagErrorState errorState(EventFlagSubDet subDet) const
Get the error state for a particular sub-detector.
uint64_t eventNumber() const
The current event's event number.
float beamPosSigmaZ() const
The length of the beam spot in the Z direction.
float beamPosY() const
Y coordinate of the beam spot position.
float mcEventWeight(size_t i=0) const
The weight of one specific MC event used in the simulation.
bool setEventFlagBit(EventFlagSubDet subDet, size_t bit) const
Set one particular bit of one particular sub-detector.
uint64_t detectorMask() const
Bit field indicating which TTC zones are present in the event.
static PileUpType PileUpInt2Type(unsigned short typ)
Convert int to PileUpType enum value.
void setPileUpMixtureIDLowBits(uint64_t value)
Set unique pile-up mixture identifier low bits.
void setActualInteractionsPerCrossing(float value)
Set average interactions per crossing for the current BCID.
std::vector< std::string > tags
void stall()
Emit stall instruction for use in a spin loop.
std::ostream & operator<<(std::ostream &out, const std::set< T > &s)
Convenience operator for printing the contents of sets.
static const SG::AuxElement::Accessor< uint64_t > accMcEvNum("mcEventNumber")
void pileupUnsetHook()
Function that would be possible to use to debug what client is trying to access pileup values from an...
static const SG::AuxElement::Accessor< uint64_t > accHigh("pileUpMixtureIDHighBits")
static const SG::AuxElement::Accessor< uint64_t > accLow("pileUpMixtureIDLowBits")
static const SG::AuxElement::Accessor< uint64_t > accEvNum("eventNumber")
ICaloAffectedTool is abstract interface for tools checking if 4 mom is in calo affected region.
static const SG::AuxElement::Accessor< std::vector< int16_t > > timeAcc("subEventTime")
const SG::AtomicDecorator< uint32_t > * eventFlagsAccessorsV1(EventInfo_v1::EventFlagSubDet subDet)
Helper function for accessing event flag variables.
static const SG::AuxElement::Accessor< std::vector< uint16_t > > typeAcc("subEventType")
static const EventInfo_v1::Accessor< std::vector< std::set< uint32_t > > > detsets("streamTagDets")
static const EventInfo_v1::Accessor< std::vector< std::set< uint32_t > > > robsets("streamTagRobs")
static const EventInfo_v1::Accessor< std::vector< char > > olb("streamTagObeysLumiblock")
static const uint32_t EF_ERROR_SHIFT
Shift used to store the sub-detector error states.
setMCChannelNumber mcEventWeights
static const uint32_t EF_BITS
Bits that store the "user defined" detector flags.
bool operator==(const xAOD::EventInfo_v1::PileUpMixtureID &a, const xAOD::EventInfo_v1::PileUpMixtureID &b)
This operator is provided to make it convenient to compare two instances of PileUpMixtureID directly.
static const EventInfo_v1::Accessor< std::vector< std::string > > types("streamTagTypes")
static const SG::AuxElement::Accessor< float > accAverageInteractionsPerCrossing("averageInteractionsPerCrossing")
Accessor for "averageInteractionsPerCrossing".
setScaleOne setStatusOne setSaturated int16_t
static const SG::AuxElement::Accessor< std::vector< std::string > > names("thrNames")
Accessor for the names of the passed thresholds.
AUXSTORE_PRIMITIVE_SETTER_AND_GETTER(BTagging_v1, float, IP2D_pb, setIP2D_pb) AUXSTORE_PRIMITIVE_SETTER_AND_GETTER(BTagging_v1
static const SG::AuxElement::Accessor< float > accActualInteractionsPerCrossing("actualInteractionsPerCrossing")
Accessor for "actualInteractionsPerCrossing".
setEventNumber setTimeStamp setBCID setDetectorMask1 detectorMask3
static const uint32_t EF_ERROR_BITS
Bits that store the error state of the sub-detectors.
setBeamTiltXZ static setBeamStatus const SG::AuxElement::Accessor< float > accBeamSpotWeight("beamSpotWeight")
Accessor for "BeamSpotWeight".
static const SG::AuxElement::Accessor< ElementLink< IParticleContainer > > acc("originalObjectLink")
Object used for setting/getting the dynamic decoration in question.
setEventNumber setTimeStamp bcid
std::ostream & operator<<(std::ostream &out, const std::pair< FIRST, SECOND > &pair)
Helper print operator.
JetConstituentVector::iterator iterator
AUXSTORE_OBJECT_SETTER_AND_GETTER(CaloRings_v1, RingSetLinks, ringSetLinks, setRingSetLinks) unsigned CaloRings_v1
setEventNumber setTimeStamp setBCID detectorMask1
static const SG::AuxElement::Accessor< std::vector< ElementLink< EventInfoContainer_v1 > > > linkAcc("subEventLink")
static const SG::AuxElement::Accessor< std::vector< uint16_t > > indexAcc("subEventIndex")
const SG::AtomicConstAccessor< uint32_t > * eventFlagsConstAccessorsV1(EventInfo_v1::EventFlagSubDet subDet)
Helper function for accessing event flag variables, for const access.
Emit stall instruction for use in a spin loop.
Unique pile-up mixture identifier definition.