Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
PileUpMergeSvc.h
Go to the documentation of this file.
1 /* -*- C++ -*- */
2 
3 /*
4  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
5 */
6 
12 #ifndef PILEUPTOOLS_PILEUPMERGESVC_H
13 #define PILEUPTOOLS_PILEUPMERGESVC_H
14 
17 #include "PileUpTools/IPileUpTool.h" /* subEventIterator*/
19 
21 #include "GaudiKernel/ClassID.h"
22 #include "Gaudi/Property.h" /*StringArrayProperty*/
23 #include "GaudiKernel/StatusCode.h"
24 #include "GaudiKernel/ServiceHandle.h"
25 #include "GaudiKernel/ToolHandle.h"
26 
27 #include "AthLinks/DataLink.h"
29 
32 
33 #include <cassert>
34 
35 #include <list>
36 #include <map>
37 #include <utility> /*std::pair*/
38 #include <mutex>
39 
40 class ISvcLocator;
41 class StoreGateSvc;
42 class ITriggerTime;
43 class IToolSvc;
44 
45 
56 class PileUpMergeSvc : public AthService {
57 
58 public:
60  PileUpMergeSvc(const std::string& name, ISvcLocator* svc);
61 
62  virtual ~PileUpMergeSvc() {}
63 
64  virtual StatusCode initialize() override;
65 
67  template <typename DATA>
68  struct TimedList {
69  typedef DATA data_t;
71  typedef std::pair<PileUpTimeEventIndex, DataLink<DATA> > value_t;
73  typedef std::list<value_t> type;
74  };
75 
77  template <typename KEY, typename DATA>
78  StatusCode
79  retrieveOriginal(const KEY& dataKey, const DATA*& data);
80 
81  template <typename KEY, typename DATA>
83  retrieveSingleSubEvtData(const KEY& dataKey, const DATA*& data, int bunchXing, SubEventIterator iEvt);
84 
86  template <typename KEY, typename TIMEDDATA>
87  StatusCode
88  retrieveSubEvtsData(const KEY& dataKey, //orig evt key
89  TIMEDDATA& timedData);
90 
91  template <typename KEY, typename TIMEDDATA>
92  StatusCode
93  retrieveSubSetEvtData(const KEY& dataKey, //orig evt key
94  TIMEDDATA& timedData, int bunchXing,
95  SubEventIterator bSubEvents, SubEventIterator eSubEvents);
96 
98  template <typename KEY, typename TIMEDDATA>
99  StatusCode
100  retrieveSubEvtsData(const KEY& dataKey, //orig evt key
101  TIMEDDATA& timedData, unsigned int& numberOfSimHits);
102 
103 
104 // ///retrieve default DATA objs for all sub-events and attach a time to them
105 // template <typename TIMEDDATA>
106 // StatusCode
107 // retrieveSubEvtsData(TIMEDDATA& timedData);
108 
112 
115  const std::string& einame ) const;
116 
117 private:
119  ToolHandleArray<IPileUpXingFolder> m_intervals;
120 
121  // Protect against multiple threads trying to make EventInfo
122  // for the same slot.
124 
125  template <typename DATA, typename KEY>
126  bool isLive(const KEY& key, int iXing);
127  bool isLive(CLID id, const std::string& dataKey, int iXing);
128 
129  void decodeIntervals();
130 
132  class Range {
133  public:
135  Range(int first, int last, double cacheRefreshFrequency) :
136  m_noLimits(false), m_first(first), m_last(last),
137  m_cacheRefreshFrequency(cacheRefreshFrequency) {
139  }
140  Range(const Range& rhs) :
141  m_noLimits(rhs.m_noLimits),
142  m_first(rhs.m_first), m_last(rhs.m_last),
144  Range& operator =(const Range& rhs)
145  {
146  if (this == &rhs) {return *this;} // Handle self assignment
147  m_noLimits = rhs.m_noLimits;
148  m_first = rhs.m_first;
149  m_last = rhs.m_last;
151  return *this;
152  }
153  bool contains(int xing) const {
154  return m_noLimits || (m_first<=xing && xing<=m_last);
155  }
156  bool doRefresh(float random) const {
157  assert(0.0 <= random && random <= 1.0);
158  // bool result(random < m_cacheRefreshFrequency);
159  // std::cerr << "Range::doRefresh: random " << random
160  // << " frequency " << m_cacheRefreshFrequency
161  // << " result " << result << std::endl;
162  return ( random < m_cacheRefreshFrequency );
163  }
164  private:
168  };
169  typedef std::map<std::pair<CLID, std::string>, Range> RangeContainer;
171 
172  ToolHandle<ITriggerTime> m_pITriggerTime;
173  BooleanProperty m_returnTimedData;
175 
176  bool doRefresh(const Range& r, int iXing);
177 
178  //Default name for EventInfo
179  std::string m_EventInfoKeyName;
180 
182  ToolHandle< xAODMaker::IEventInfoCnvTool > m_xAODCnvTool;
183 };
185 #endif /* PILEUPTOOLS_PILEUPMERGESVC_H */
186 
beamspotman.r
def r
Definition: beamspotman.py:676
data
char data[hepevt_bytes_allocation_ATLAS]
Definition: HepEvt.cxx:11
PileUpMergeSvc::getPileUpEvent
const xAOD::EventInfo * getPileUpEvent(StoreGateSvc *sg, const std::string &einame) const
get EventInfo from SG, by default using p_overStore
Definition: PileUpMergeSvc.cxx:122
PileUpMergeSvc::Range::operator=
Range & operator=(const Range &rhs)
Definition: PileUpMergeSvc.h:144
PileUpMergeSvc::ATLAS_THREAD_SAFE
SG::SlotSpecificObj< std::mutex > m_slotMutex ATLAS_THREAD_SAFE
Definition: PileUpMergeSvc.h:123
PileUpMergeSvc::TimedList
generate the types of the timed data objects
Definition: PileUpMergeSvc.h:68
PileUpMergeSvc::Range::contains
bool contains(int xing) const
Definition: PileUpMergeSvc.h:153
PileUpMergeSvc::isLive
bool isLive(const KEY &key, int iXing)
is iXing live for DATA/key?
PileUpMergeSvc::retrieveSingleSubEvtData
StatusCode retrieveSingleSubEvtData(const KEY &dataKey, const DATA *&data, int bunchXing, SubEventIterator iEvt)
PileUpMergeSvc::doRefresh
bool doRefresh(const Range &r, int iXing)
Definition: PileUpMergeSvc.cxx:263
PileUpMergeSvc::Range::m_last
int m_last
Definition: PileUpMergeSvc.h:166
PileUpMergeSvc::retrieveOriginal
StatusCode retrieveOriginal(const KEY &dataKey, const DATA *&data)
retrieve keyed DATA objs for the original event only
PileUpMergeSvc::m_EventInfoKeyName
std::string m_EventInfoKeyName
Definition: PileUpMergeSvc.h:179
PileUpMergeSvc
the preferred mechanism to access information from the different event stores in a pileup job.
Definition: PileUpMergeSvc.h:56
PileUpTimeEventIndex.h
PileUpMergeSvc::TimedList::type
std::list< value_t > type
type of the collection of timed data object
Definition: PileUpMergeSvc.h:73
PileUpMergeSvc::retrieveSubEvtsData
StatusCode retrieveSubEvtsData(const KEY &dataKey, TIMEDDATA &timedData, unsigned int &numberOfSimHits)
retrieve keyed DATA objs for all sub-events and attach a time to them
StoreGateSvc
The Athena Transient Store API.
Definition: StoreGateSvc.h:124
SG::SlotSpecificObj< std::mutex >
PileUpMergeSvc::Range::doRefresh
bool doRefresh(float random) const
Definition: PileUpMergeSvc.h:156
PileUpMergeSvc::p_overStore
ServiceHandle< StoreGateSvc > p_overStore
overlaid SG (default)
Definition: PileUpMergeSvc.h:118
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
PileUpMergeSvc::Range::Range
Range(int first, int last, double cacheRefreshFrequency)
Definition: PileUpMergeSvc.h:135
AthService
Definition: AthService.h:32
PileUpMergeSvc::Range::Range
Range(const Range &rhs)
Definition: PileUpMergeSvc.h:140
IPileUpTool.h
a call-back interface for tools that merge pileup events information An IPileUpTool is called back fo...
Handler::svc
AthROOTErrorHandlerSvc * svc
Definition: AthROOTErrorHandlerSvc.cxx:10
CLID
uint32_t CLID
The Class ID type.
Definition: Event/xAOD/xAODCore/xAODCore/ClassID_traits.h:47
PileUpMergeSvc::decodeIntervals
void decodeIntervals()
setup PileUpIntervals
Definition: PileUpMergeSvc.cxx:56
PileUpMergeSvc::clearDataCaches
StatusCode clearDataCaches()
clear bkg event caches from unneeded data objects (as configured using PileUpXingFolder CacheRefreshF...
Definition: PileUpMergeSvc.cxx:271
PileUpMergeSvc::~PileUpMergeSvc
virtual ~PileUpMergeSvc()
Definition: PileUpMergeSvc.h:62
PileUpMergeSvc::retrieveSubSetEvtData
StatusCode retrieveSubSetEvtData(const KEY &dataKey, TIMEDDATA &timedData, int bunchXing, SubEventIterator bSubEvents, SubEventIterator eSubEvents)
PileUpMergeSvc::m_intervals
ToolHandleArray< IPileUpXingFolder > m_intervals
Property: bunch xing intervals.
Definition: PileUpMergeSvc.h:119
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
ITriggerTime
interface to a tool that returns the time offset of the current trigger. Used by PileUpMergeSvc
Definition: ITriggerTime.h:19
PileUpMergeSvc::RangeContainer
std::map< std::pair< CLID, std::string >, Range > RangeContainer
Definition: PileUpMergeSvc.h:169
PileUpMergeSvc::initialize
virtual StatusCode initialize() override
Service initialisation.
Definition: PileUpMergeSvc.cxx:89
EventInfo.h
xAOD::EventInfo_v1
Class describing the basic event information.
Definition: EventInfo_v1.h:43
PileUpMergeSvc::TimedList::value_t
std::pair< PileUpTimeEventIndex, DataLink< DATA > > value_t
type of timed data object
Definition: PileUpMergeSvc.h:71
IEventInfoCnvTool.h
PileUpMergeSvc::Range::m_noLimits
bool m_noLimits
Definition: PileUpMergeSvc.h:165
PileUpMergeSvc.icc
PileUpMergeSvc::TimedList::data_t
DATA data_t
Definition: PileUpMergeSvc.h:69
PileUpMergeSvc::m_ranges
RangeContainer m_ranges
Definition: PileUpMergeSvc.h:170
DeMoScan.first
bool first
Definition: DeMoScan.py:536
PileUpMergeSvc::Range::m_cacheRefreshFrequency
double m_cacheRefreshFrequency
Definition: PileUpMergeSvc.h:167
PileUpMergeSvc::PileUpMergeSvc
PileUpMergeSvc(const std::string &name, ISvcLocator *svc)
Standard Gaudi Constructor.
Definition: PileUpMergeSvc.cxx:38
AthService.h
SlotSpecificObj.h
Maintain a set of objects, one per slot.
IPileUpXingFolder.h
an interface to SG::Folder with an attached bunch crossing interval
SubEventIterator
std::vector< xAOD::EventInfo::SubEvent >::const_iterator SubEventIterator
Definition: IPileUpTool.h:22
PileUpMergeSvc::Range::m_first
int m_first
Definition: PileUpMergeSvc.h:166
checker_macros.h
Define macros for attributes used to control the static checker.
PileUpMergeSvc::m_xAODCnvTool
ToolHandle< xAODMaker::IEventInfoCnvTool > m_xAODCnvTool
property: Handle to the EventInfo -> xAOD::EventInfo converter tool
Definition: PileUpMergeSvc.h:182
PileUpMergeSvc::m_pITriggerTime
ToolHandle< ITriggerTime > m_pITriggerTime
allows to apply a trigger time offset
Definition: PileUpMergeSvc.h:172
PileUpMergeSvc::Range
the active crossing range for a data object (CLID/key combination)
Definition: PileUpMergeSvc.h:132
PileUpMergeSvc::Range::Range
Range()
Definition: PileUpMergeSvc.h:134
PileUpMergeSvc::m_returnTimedData
BooleanProperty m_returnTimedData
Definition: PileUpMergeSvc.h:174
PileUpMergeSvc::retrieveSubEvtsData
StatusCode retrieveSubEvtsData(const KEY &dataKey, TIMEDDATA &timedData)
retrieve keyed DATA objs for all sub-events and attach a time to them
ServiceHandle< StoreGateSvc >
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37