ATLAS Offline Software
Loading...
Searching...
No Matches
PileUpMisc.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
6
7
9#include "StoreGate/StoreGateSvc.h" /*to print name() */
11#include "GaudiKernel/IEvtSelector.h"
12
14
16
17
19 const xAOD::EventInfo::SubEvent& subev,
20 xAOD::EventInfoContainer* eiContainer,
21 const std::string& eiContKey,
22 StoreGateSvc* subev_store )
23{
24 // add a EI copy to the EI container
25 xAOD::EventInfo* newEv;
26 eiContainer->push_back( newEv=new xAOD::EventInfo( * subev.ptr() ) );
27 if(newEv->evtStore()==nullptr && subev_store!=nullptr) newEv->setEvtStore(subev_store);
28
29 // link to the fresh EI added to the container:
30 ElementLink< xAOD::EventInfoContainer > eilink( eiContKey, eiContainer->size()-1, targetEv->evtStore() );
31 xAOD::EventInfo::SubEvent newsubev( subev.time(), subev.index(), subev.type(), eilink );
32 targetEv->addSubEvent( newsubev );
33
34 // copy subevents recursively
35 for( const auto& se: subev.ptr()->subEvents() ) {
36 addSubEvent( targetEv, se, eiContainer, eiContKey );
37 }
38
39 return newEv;
40}
41
42
44 const xAOD::EventInfo* ev2add,
45 int16_t subev_time,
47 xAOD::EventInfoContainer* eiContainer,
48 const std::string& eiContKey,
49 StoreGateSvc* ev2add_store )
50{
51 // add a EI copy to the EI container
52 xAOD::EventInfo* newEv;
53 eiContainer->push_back( newEv=new xAOD::EventInfo( *ev2add ) );
54 // Need to copy this explicitly as it may be marked as a decoration.
55 static const SG::ConstAccessor<std::vector<float> > mcEventWeightsAcc ("mcEventWeights");
56 if (mcEventWeightsAcc.isAvailable (*ev2add)) {
57 eiContainer->back()->setMCEventWeights(ev2add->mcEventWeights());
58 }
59
60 if(newEv->evtStore()==nullptr && ev2add_store!=nullptr) newEv->setEvtStore(ev2add_store);
61
62 // link to the fresh EI added to the container:
63 ElementLink< xAOD::EventInfoContainer > eilink( eiContKey, eiContainer->size()-1, targetEv->evtStore() );
64 xAOD::EventInfo::SubEvent newsubev( subev_time, targetEv->subEvents().size(), subev_type, eilink );
65 targetEv->addSubEvent( newsubev );
66
67 // copy subevents recursively
68 for( const auto& subev: ev2add->subEvents() ) {
69 addSubEvent( targetEv, subev, eiContainer, eiContKey );
70 }
71
72 return newEv;
73}
74
Helper class to provide constant type-safe access to aux data.
provides the relative beam intensity as a function of the bunch xing.
xAOD::EventInfo * addSubEvent(xAOD::EventInfo *targetEv, const xAOD::EventInfo::SubEvent &subev, xAOD::EventInfoContainer *eiContainer, const std::string &eiContKey, StoreGateSvc *subev_store)
const T * back() const
Access the last element in the collection as an rvalue.
value_type push_back(value_type pElem)
Add an element to the end of the collection.
size_type size() const noexcept
Returns the number of elements in the collection.
Helper class to provide constant type-safe access to aux data.
bool isAvailable(const ELT &e) const
Test to see if this variable exists in the store.
The Athena Transient Store API.
Class describing the properties of one pileup sub-event.
uint16_t index() const
Get the index of the sub-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::vector< float > & mcEventWeights() const
The weights of all the MC events used in the simulation.
void addSubEvent(const SubEvent &subEvent)
Add one sub-event to the existing list.
const std::vector< SubEvent > & subEvents() const
Get the pileup events that were used in the simulation.
void setEvtStore(StoreGateSvc *svc)
Set the pointer to the event store associated with this event.
PileUpType
Enumerator describing the types of pileup events.
EventInfoContainer_v1 EventInfoContainer
Define the latest version of the container.
EventInfo_v1 EventInfo
Definition of the latest event info version.