ATLAS Offline Software
PileUpMTAlg.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 // PileUpMT includes
6 #include "PileUpMTAlg.h"
7 
8 #include <CxxUtils/XXH.h>
9 #include <fmt/chrono.h>
10 #include <fmt/format.h>
11 #include <fmt/ostream.h>
12 #include <unistd.h>
13 
14 #include <boost/core/demangle.hpp>
15 #include <chrono>
16 #include <range/v3/all.hpp>
17 #include "EventInfo/EventInfo.h"
18 
20 #include "PileUpTools/PileUpMisc.h"
25 
27 namespace rv = ranges::views;
28 // namespace ra = ranges::actions;
29 
30 inline std::string CLIDToString(const CLID& clid) {
31  return boost::core::demangle(CLIDRegistry::CLIDToTypeinfo(clid)->name());
32 }
33 
34 PileUpMTAlg::PileUpMTAlg(const std::string& name, ISvcLocator* pSvcLocator)
35  : AthAlgorithm(name, pSvcLocator) {}
36 
38 
40  std::unique_ptr<const xAOD::EventInfo>& ei_,
41  std::unique_ptr<xAOD::EventAuxInfo>& ei_aux_,
42  bool pileup) const {
43  std::string key = pileup ? "EventInfo" : "HSEventInfo";
44  xAOD::EventInfo* newEi = new xAOD::EventInfo();
46  newEi->setStore(eiAux);
47  SG::ReadHandle<xAOD::EventInfo> ei_h(key, sg.name());
48  const xAOD::EventInfo* ei = ei_h.get();
49  if (ei != nullptr) {
50  *newEi = *ei;
51  } else {
52  SG::ReadHandle<::EventInfo> ei2_h(key, sg.name());
53  const ::EventInfo* ei2 = ei2_h.get();
54  if (ei2 == nullptr) {
55  // Just in case
56  ATH_MSG_ERROR("Got null ::EventInfo from " << sg.name());
57  ATH_MSG_ERROR(sg.dump());
58  return StatusCode::FAILURE;
59  }
60  ATH_CHECK(m_xAODEICnvTool->convert(ei2, newEi, true));
61  }
62  // Use attribute list if EventInfo doesn't have event numbers set
63  if (newEi->eventNumber() == 0) {
64  const auto* attr_list_p = sg.tryConstRetrieve<AthenaAttributeList>("Input");
65  if (attr_list_p != nullptr) {
66  if (attr_list_p->size() <= 6) {
67  ATH_MSG_WARNING("Read Input attribute list but size <= 6");
68  } else {
69  const AthenaAttributeList& attr_list = *attr_list_p;
70  const auto runNum = attr_list["RunNumber"].data<unsigned>();
71  const auto evtNum = attr_list["EventNumber"].data<unsigned long long>();
72  const auto lbNum = attr_list["LumiBlockN"].data<unsigned>();
73  newEi->setRunNumber(runNum);
74  newEi->setLumiBlock(lbNum);
75  newEi->setEventNumber(evtNum);
76  }
77  } else {
79  "Could not read Input attribute list and EventInfo has no event "
80  "number");
81  }
82  }
83  newEi->setEvtStore(&sg);
84  ei_.reset(newEi);
85  ei_aux_.reset(eiAux);
86  return StatusCode::SUCCESS;
87 }
88 
90  const std::vector<std::uint32_t>& bcid,
94  int bc, const EventContext& ctx, unsigned long subevt_id,
95  std::vector<std::uint64_t>& trace) {
96  // Keep the code to add and process a subevent in one place
97  const unsigned int bc_idx = bc - m_earliestDeltaBC;
98  StoreGateSvc* sg = mbSvc->getMinbias(ctx, subevt_id);
99  std::unique_ptr<const xAOD::EventInfo> ei;
100  std::unique_ptr<xAOD::EventAuxInfo> eiAux;
101  ATH_CHECK(get_ei(*sg, ei, eiAux, true));
102  xAOD::EventInfo mb_to_modify(*ei);
103  if (m_writeTrace) {
104  trace.push_back(mb_to_modify.eventNumber());
105  }
106  mb_to_modify.setBCID(bcid[bc_idx]);
107  try {
108  addSubEvent(overlaidEvt.ptr(), &mb_to_modify, bc * m_BCSpacing, puType,
109  puCont.ptr(), m_evtInfoContKey.key(), sg);
110  } catch (const std::exception& e) {
111  ATH_MSG_ERROR("Caught exception adding subevent: " << e.what());
112  return StatusCode::FAILURE;
113  }
114  return StatusCode::SUCCESS;
115 }
116 
118  using namespace std::chrono;
119  ATH_MSG_DEBUG("Initializing " << name() << "...");
120  if (m_writeTrace) {
121  m_pileupTrace.init(
122  fmt::format("pileup_trace_skipping-{}_{:%Y-%m-%dT%H%M}.txt",
123  m_skippedHSEvents.value(),
124  fmt::localtime(system_clock::to_time_t(system_clock::now()))));
125  }
126  ATH_CHECK(m_skipEventIdxSvc.retrieve());
127  ATH_CHECK(m_rngSvc.retrieve());
128  if (m_fracLowPt != 0) {
129  ATH_CHECK(m_lowptMBSvc.retrieve());
130  }
131  if (m_fracHighPt != 0) {
132  ATH_CHECK(m_highptMBSvc.retrieve());
133  }
134  if (m_numCavern != 0) {
135  ATH_CHECK(m_cavernMBSvc.retrieve());
136  }
137  if (m_numBeamGas != 0) {
138  ATH_CHECK(m_beamgasMBSvc.retrieve());
139  }
140  if (m_numBeamHalo != 0) {
141  ATH_CHECK(m_beamhaloMBSvc.retrieve());
142  }
143  ATH_CHECK(m_beamInt.retrieve());
144  ATH_CHECK(m_beamLumi.retrieve());
145  ATH_CHECK(m_xAODEICnvTool.retrieve());
146  ATH_CHECK(m_puTools.retrieve());
147 
148  m_evtInfoContKey = "PileUpEventInfo";
150  ATH_CHECK(m_evtInfoContKey.initialize());
151 
152  // Trace skipped events
153  if (m_writeTrace) {
156  fmt::memory_buffer trace_buf{};
157  auto trace = std::back_inserter(trace_buf);
158  for (; it != end; ++it) {
159  fmt::format_to(trace, "SKIPPING Run: {} LB: {} EVT: {} HS ID: {}\n",
160  it->runNum, it->lbNum, it->evtNum, it->evtIdx);
161  }
162  m_pileupTrace.print(trace_buf);
163  return StatusCode::SUCCESS;
164  };
165  if (!m_skiptrace_written) {
166  ATH_CHECK(m_skipEventIdxSvc->registerCallback(handler));
167  m_skiptrace_written = true;
168  }
169  }
170  return StatusCode::SUCCESS;
171 }
172 
174  ATH_MSG_DEBUG("Finalizing " << name() << "...");
175  //
176  // Things that happen once at the end of the event loop go here
177  //
178 
179  return StatusCode::SUCCESS;
180 }
181 
183  using PUType = xAOD::EventInfo::PileUpType;
184  fmt::memory_buffer trace_buf{}; // Hold trace of events.
185  auto trace = std::back_inserter(trace_buf);
186  ATH_MSG_DEBUG("Executing " << name() << "...");
187  const EventContext& ctx = Gaudi::Hive::currentContext();
188  const auto& evtID = ctx.eventID();
189 
191  setFilterPassed(false); // optional: start with algorithm not passed
192 
193  // Code based on PileUpEventLoopMgr and PileUpToolsAlg (trying to extract the
194  // core merging code) Read hard scatter
195  std::unique_ptr<const xAOD::EventInfo> hsEvt = nullptr;
196  std::unique_ptr<xAOD::EventAuxInfo> hsEvtAux = nullptr;
197  ATH_CHECK(get_ei(*evtStore(), hsEvt, hsEvtAux));
198 
199  // Setup overlaid event
201  ATH_CHECK(overlaidEvt.record(std::make_unique<xAOD::EventInfo>(),
202  std::make_unique<xAOD::EventAuxInfo>()));
203  *overlaidEvt = *hsEvt; // copy in hard scatter
204  overlaidEvt->setEvtStore(evtStore().get());
205  overlaidEvt->clearSubEvents();
206 
207  // This was the problem. Need to fix overlaidEvt using context run and lb
208  // number
209  overlaidEvt->setRunNumber(evtID.run_number());
210  overlaidEvt->setLumiBlock(evtID.lumi_block());
211  overlaidEvt->setEventNumber(evtID.event_number());
212  overlaidEvt->setBCID(evtID.bunch_crossing_id());
213  overlaidEvt->setTimeStamp(evtID.time_stamp());
214  overlaidEvt->setTimeStampNSOffset(evtID.time_stamp_ns_offset());
215  // Pileup container
217  ATH_CHECK(puCont.record(std::make_unique<xAOD::EventInfoContainer>(),
218  std::make_unique<xAOD::EventInfoAuxContainer>()));
219 
220  // Get crossing number
221  m_beamInt->selectT0(evtID.run_number(), evtID.event_number());
222  overlaidEvt->setBCID(m_beamInt->getCurrentT0BunchCrossing());
223 
224  // Set simulation bit
225  overlaidEvt->setEventTypeBitmask(hsEvt->eventTypeBitmask() |
227 
228  // Set properties
229  bool sf_updated = false;
230  float lumi_sf = m_beamLumi->scaleFactor(evtID.run_number(),
231  evtID.lumi_block(), sf_updated);
232  float cur_avg_mu = lumi_sf * m_avgMu;
233  overlaidEvt->setAverageInteractionsPerCrossing(cur_avg_mu);
234  overlaidEvt->setActualInteractionsPerCrossing(m_beamInt->normFactor(0) *
235  cur_avg_mu);
236 
237  // Trace
238  if (m_writeTrace) {
239  fmt::format_to(trace,
240  "Idx: {} Run: {} LB: {} EVT: {} "
241  "HS ID: {}\n",
242  ctx.evt(), evtID.run_number(), evtID.lumi_block(),
243  evtID.event_number(), m_lowptMBSvc->get_hs_id(ctx));
244  auto bunch_pattern =
245  rv::closed_iota(m_earliestDeltaBC.value(), m_latestDeltaBC.value()) |
247  [this](int bc) { return int(m_beamInt->normFactor(bc)); }) |
248 #if RANGE_V3_VERSION >= 1200
249  rv::chunk_by(std::equal_to{}) |
250 #else
251  rv::group_by(std::equal_to{}) |
252 #endif
253  rv::transform([](const auto& rng) {
254  return fmt::format("{}{}", rng.size(), rng[0] == 0 ? 'E' : 'F');
255  }) |
256  ranges::to<std::vector<std::string>>;
257  fmt::format_to(trace, "mu = {}, central BCID = {}, bunch pattern = [{}]\n",
258  cur_avg_mu, m_beamInt->getCurrentT0BunchCrossing(),
259  fmt::join(bunch_pattern, " "));
260  }
261  // Copy subevents
262  if (!hsEvt->subEvents().empty()) {
263  for (const SubEvent& se : hsEvt->subEvents()) {
264  addSubEvent(overlaidEvt.ptr(), se, puCont.ptr(), m_evtInfoContKey.key(),
265  evtStore().get());
266  }
267  } else {
268  // if no subevents, add original event
269  addSubEvent(overlaidEvt.ptr(), hsEvt.get(), 0, xAOD::EventInfo::Signal,
270  puCont.ptr(), m_evtInfoContKey.key(), evtStore().get());
271  }
272 
273  // Initialize MinbiasSvcs
274  if (m_fracLowPt != 0) {
275  ATH_CHECK(m_lowptMBSvc->beginHardScatter(ctx));
276  }
277  if (m_fracHighPt != 0) {
278  ATH_CHECK(m_highptMBSvc->beginHardScatter(ctx));
279  }
280  if (m_numCavern != 0) {
281  ATH_CHECK(m_cavernMBSvc->beginHardScatter(ctx));
282  }
283  if (m_numBeamHalo != 0) {
284  ATH_CHECK(m_beamhaloMBSvc->beginHardScatter(ctx));
285  }
286  if (m_numBeamGas != 0) {
287  ATH_CHECK(m_beamgasMBSvc->beginHardScatter(ctx));
288  }
289 
290  std::uint32_t central_bcid = overlaidEvt->bcid();
291  std::vector<std::uint32_t> bcid{};
292  bcid.reserve(m_latestDeltaBC - m_earliestDeltaBC + 1);
293 
294  for (int bc = m_earliestDeltaBC; bc <= m_latestDeltaBC; ++bc) {
295  bcid.push_back(get_BCID(bc, central_bcid));
296  }
297 
298  // Setup tools
299  for (auto&& tool : m_puTools) {
300  // Reset filter -- Don't know if this is necessary
301  tool->resetFilter();
302  }
303 
304  // Now add the events
305  std::uint64_t low_pt_count = 0;
306  std::uint64_t high_pt_count = 0;
307  std::uint64_t cavern_count = 0;
308  std::uint64_t beam_halo_count = 0;
309  std::uint64_t beam_gas_count = 0;
311  for (int bc = m_earliestDeltaBC; bc <= m_latestDeltaBC; ++bc) {
312  if (m_beamInt->normFactor(bc) == 0.) {
313  // skip empty bunch crossings
314  continue;
315  }
316  std::vector<std::uint64_t> subevts_vec{};
317  if (m_fracLowPt != 0) {
318  if (m_writeTrace) {
319  fmt::format_to(trace, "\tBC {:03} : LOW PT {} ", bc,
320  m_lowptMBSvc->getNumForBunch(ctx, bc));
321  }
322  for (std::size_t i = 0; i < m_lowptMBSvc->getNumForBunch(ctx, bc); ++i) {
323  ATH_CHECK(add_subevt(bcid, overlaidEvt, puCont, m_lowptMBSvc,
324  PUType::MinimumBias, bc, ctx, low_pt_count,
325  subevts_vec));
326  ++low_pt_count;
327  }
328  }
329  if (m_fracHighPt != 0) {
330  if (m_writeTrace) {
331  fmt::format_to(trace, "HIGH PT {} | ",
332  m_highptMBSvc->getNumForBunch(ctx, bc));
333  }
334  for (std::size_t i = 0; i < m_highptMBSvc->getNumForBunch(ctx, bc); ++i) {
335  ATH_CHECK(add_subevt(bcid, overlaidEvt, puCont, m_highptMBSvc,
336  PUType::HighPtMinimumBias, bc, ctx, high_pt_count,
337  subevts_vec));
338  ++high_pt_count;
339  }
340  }
341  if (m_numCavern != 0) {
342  if (m_writeTrace) {
343  fmt::format_to(trace, "CAVERN {} | ",
344  m_cavernMBSvc->getNumForBunch(ctx, bc));
345  }
346  for (std::size_t i = 0; i < m_cavernMBSvc->getNumForBunch(ctx, bc); ++i) {
347  ATH_CHECK(add_subevt(bcid, overlaidEvt, puCont, m_cavernMBSvc,
348  PUType::Cavern, bc, ctx, cavern_count,
349  subevts_vec));
350  ++cavern_count;
351  }
352  }
353  if (m_numBeamHalo != 0) {
354  if (m_writeTrace) {
355  fmt::format_to(trace, "BEAM HALO {} | ",
356  m_beamhaloMBSvc->getNumForBunch(ctx, bc));
357  }
358  for (std::size_t i = 0; i < m_beamhaloMBSvc->getNumForBunch(ctx, bc);
359  ++i) {
360  ATH_CHECK(add_subevt(bcid, overlaidEvt, puCont, m_beamhaloMBSvc,
361  PUType::HaloGas, bc, ctx, beam_halo_count,
362  subevts_vec));
363  ++beam_halo_count;
364  }
365  }
366  if (m_numBeamGas != 0) {
367  if (m_writeTrace) {
368  fmt::format_to(trace, "BEAM GAS {} | ",
369  m_beamgasMBSvc->getNumForBunch(ctx, bc));
370  }
371  for (std::size_t i = 0; i < m_beamgasMBSvc->getNumForBunch(ctx, bc);
372  ++i) {
373  ATH_CHECK(add_subevt(bcid, overlaidEvt, puCont, m_beamgasMBSvc,
374  PUType::HaloGas, bc, ctx, beam_gas_count,
375  subevts_vec));
376  ++beam_gas_count;
377  }
378  }
379  if (m_writeTrace) {
380  fmt::format_to(trace, "TOTAL {} | HASH {:08X}\n", subevts_vec.size(),
381  xxh3::hash64(subevts_vec));
382  }
383  }
384  if (m_writeTrace) {
385  fmt::format_to(trace, "\n");
386  m_pileupTrace.print(trace_buf);
387  }
388 
389  for (auto&& tool : m_puTools) {
390  try {
391  ATH_CHECK(tool->processAllSubEvents(ctx));
392  } catch (const std::exception& e) {
393  ATH_MSG_ERROR("Caught exception running " << tool.name() << ": "
394  << e.what());
395  return StatusCode::FAILURE;
396  }
397  // Propagate filter result
398  if (!tool->filterPassed()) {
399  setFilterPassed(false);
400  }
401  }
402  ATH_MSG_DEBUG(fmt::format("***** Took {:%OMm %OSs} to process all subevents",
404  //
405  // Save hash (direct copy from PileUpEventLoopMgr)
406  PileUpHashHelper pileUpHashHelper;
407  pileUpHashHelper.addToHashSource(overlaidEvt.cptr());
408  ATH_MSG_VERBOSE("Pile-up hash source:" << pileUpHashHelper.hashSource());
409 
410  // Calculate and set hash
411  uuid_t pileUpHash;
412  pileUpHashHelper.calculateHash(pileUpHash);
413  overlaidEvt->setPileUpMixtureID(
415  ATH_MSG_DEBUG("PileUpMixtureID = " << overlaidEvt->pileUpMixtureID());
416 
417  setFilterPassed(true); // if got here, assume that means algorithm passed
418  if (m_fracLowPt != 0) {
419  ATH_CHECK(m_lowptMBSvc->endHardScatter(ctx));
420  }
421  if (m_fracHighPt != 0) {
422  ATH_CHECK(m_highptMBSvc->endHardScatter(ctx));
423  }
424  if (m_numCavern != 0) {
425  ATH_CHECK(m_cavernMBSvc->endHardScatter(ctx));
426  }
427  if (m_numBeamHalo != 0) {
428  ATH_CHECK(m_beamhaloMBSvc->endHardScatter(ctx));
429  }
430  if (m_numBeamGas != 0) {
431  ATH_CHECK(m_beamgasMBSvc->endHardScatter(ctx));
432  }
433  return StatusCode::SUCCESS;
434 }
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
AllowedVariables::e
e
Definition: AsgElectronSelectorTool.cxx:37
PileUpHashHelper.h
A helper class to compute a hash of pile-up events.
xAOD::EventInfo_v1::setActualInteractionsPerCrossing
void setActualInteractionsPerCrossing(float value)
Set average interactions per crossing for the current BCID.
Definition: EventInfo_v1.cxx:391
xAOD::EventInfo_v1::setEventNumber
void setEventNumber(uint64_t value)
Set the current event's event number.
xAOD::EventInfo
EventInfo_v1 EventInfo
Definition of the latest event info version.
Definition: IEventInfoCnvTool.h:17
vtune_athena.format
format
Definition: vtune_athena.py:14
xAOD::EventInfo_v1::eventNumber
uint64_t eventNumber() const
The current event's event number.
PileUpMTAlg::m_numBeamHalo
Gaudi::Property< float > m_numBeamHalo
Definition: PileUpMTAlg.h:127
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
PileUpMTAlg::initialize
virtual StatusCode initialize() override
uncomment and implement methods as required
Definition: PileUpMTAlg.cxx:117
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
xAOD::EventAuxInfo_v3
Auxiliary information about the event.
Definition: EventAuxInfo_v3.h:28
PileUpMTAlg::finalize
virtual StatusCode finalize() override
Definition: PileUpMTAlg.cxx:173
EventInfo
EventInfo
Definition: EventTPCnv.cxx:47
xAOD::EventInfo_v1::clearSubEvents
void clearSubEvents()
Clear all the currently held sub-events.
Definition: EventInfo_v1.cxx:647
EventInfoAuxContainer.h
PileUpMTAlg::m_lowptMBSvc
ServiceHandle< IMinbiasSvc > m_lowptMBSvc
Other useful methods provided by base class are: evtStore() : ServiceHandle to main event data storeg...
Definition: PileUpMTAlg.h:94
skel.it
it
Definition: skel.GENtoEVGEN.py:407
PileUpMTAlg::m_fracLowPt
Gaudi::Property< float > m_fracLowPt
Definition: PileUpMTAlg.h:119
xAOD::EventInfo_v1::PileUpType
PileUpType
Enumerator describing the types of pileup events.
Definition: EventInfo_v1.h:264
CLIDRegistry::CLIDToTypeinfo
static const std::type_info * CLIDToTypeinfo(CLID clid)
Translate between CLID and type_info.
Definition: CLIDRegistry.cxx:136
PileUpHashHelper::uuidToPileUpMixtureId
static xAOD::EventInfo::PileUpMixtureID uuidToPileUpMixtureId(const uuid_t &hash)
Convert uuid_t to xAOD::EventInfo::PileUpMixtureID.
Definition: PileUpHashHelper.cxx:57
xAOD::EventInfo_v1::eventTypeBitmask
uint32_t eventTypeBitmask() const
The event type bitmask.
PileUpHashHelper
Definition: PileUpHashHelper.h:21
python.PileUpEventType.MinimumBias
int MinimumBias
Definition: PileUpEventType.py:4
PileUpHashHelper::hashSource
std::string hashSource() const
Get the current hash base.
Definition: PileUpHashHelper.h:35
SG::WriteHandle::cptr
const_pointer_type cptr() const
Dereference the pointer.
PileUpMTAlg::~PileUpMTAlg
virtual ~PileUpMTAlg()
Definition: PileUpMTAlg.cxx:37
PileUpMTAlg::m_latestDeltaBC
Gaudi::Property< int > m_latestDeltaBC
Definition: PileUpMTAlg.h:134
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
PileUpMTAlg::m_avgMu
Gaudi::Property< float > m_avgMu
Definition: PileUpMTAlg.h:118
skel.runNum
runNum
Definition: skel.ABtoEVGEN.py:137
D3PDTest::rng
uint32_t rng()
Definition: FillerAlg.cxx:40
keylayer_zslicemap.se
se
Definition: keylayer_zslicemap.py:194
xAOD::EventInfo_v1::IS_SIMULATION
@ IS_SIMULATION
true: simulation, false: data
Definition: EventInfo_v1.h:151
PileUpMTAlg::m_beamInt
ServiceHandle< IBeamIntensity > m_beamInt
Definition: PileUpMTAlg.h:104
xAOD::EventInfo_v1::pileUpMixtureID
PileUpMixtureID pileUpMixtureID() const
Unique pile-up mixture identifier.
Definition: EventInfo_v1.cxx:421
python.PileUpEventType.HighPtMinimumBias
int HighPtMinimumBias
Definition: PileUpEventType.py:7
EventInfoContainer.h
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:93
handler
void handler(int sig)
signal handler
Definition: rmain.cxx:99
PileUpMTAlg::m_writeTrace
Gaudi::Property< bool > m_writeTrace
Definition: PileUpMTAlg.h:115
PileUpMTAlg::m_evtInfoContKey
SG::WriteHandleKey< xAOD::EventInfoContainer > m_evtInfoContKey
Definition: PileUpMTAlg.h:142
PileUpMTAlg::m_numCavern
Gaudi::Property< float > m_numCavern
Definition: PileUpMTAlg.h:123
PileUpMTAlg::m_earliestDeltaBC
Gaudi::Property< int > m_earliestDeltaBC
Definition: PileUpMTAlg.h:131
xAOD::EventInfo_v1::setPileUpMixtureID
void setPileUpMixtureID(const PileUpMixtureID &value)
Set unique pile-up mixture identifier.
Definition: EventInfo_v1.cxx:436
AthCommonDataStore< AthCommonMsg< Algorithm > >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:85
PileUpMTAlg::execute
virtual StatusCode execute() override
Definition: PileUpMTAlg.cxx:182
StoreGateSvc
The Athena Transient Store API.
Definition: StoreGateSvc.h:125
PileUpMTAlg::m_highptMBSvc
ServiceHandle< IMinbiasSvc > m_highptMBSvc
Definition: PileUpMTAlg.h:96
python.handimod.now
now
Definition: handimod.py:675
StoreGateSvc::dump
std::string dump() const
dump objects in store.
Definition: StoreGateSvc.cxx:376
CLIDToString
std::string CLIDToString(const CLID &clid)
Definition: PileUpMTAlg.cxx:30
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
xAOD::EventInfo_v1::setEventTypeBitmask
void setEventTypeBitmask(uint32_t value)
Set the event type bitmask.
PileUpMTAlg::m_numBeamGas
Gaudi::Property< float > m_numBeamGas
Definition: PileUpMTAlg.h:125
lumiFormat.i
int i
Definition: lumiFormat.py:85
SG::AuxElement::setStore
void setStore(const SG::IConstAuxStore *store)
Set the store associated with this object.
Definition: AuxElement.cxx:241
PileUpMTAlg::m_xAODEICnvTool
ToolHandle< xAODMaker::IEventInfoCnvTool > m_xAODEICnvTool
Definition: PileUpMTAlg.h:110
ISkipEventIdxSvc::EvtIter
std::vector< EvtId >::const_iterator EvtIter
Definition: ISkipEventIdxSvc.h:23
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
SG::WriteHandle::ptr
pointer_type ptr()
Dereference the pointer.
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
python.LArMinBiasAlgConfig.int
int
Definition: LArMinBiasAlgConfig.py:59
PileUpMTAlg::m_beamLumi
ServiceHandle< IBeamLuminosity > m_beamLumi
Definition: PileUpMTAlg.h:106
calibdata.exception
exception
Definition: calibdata.py:496
Amg::transform
Amg::Vector3D transform(Amg::Vector3D &v, Amg::Transform3D &tr)
Transform a point from a Trasformation3D.
Definition: GeoPrimitivesHelpers.h:156
python.PileUpEventType.HaloGas
int HaloGas
Definition: PileUpEventType.py:6
PileUpHashHelper::addToHashSource
void addToHashSource(const std::string &string)
Add a plain string to the stream.
Definition: PileUpHashHelper.cxx:11
PileUpMTAlg::m_beamgasMBSvc
ServiceHandle< IMinbiasSvc > m_beamgasMBSvc
Definition: PileUpMTAlg.h:102
xAOD::uint64_t
uint64_t
Definition: EventInfo_v1.cxx:123
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
AthenaAttributeList
An AttributeList represents a logical row of attributes in a metadata table. The name and type of eac...
Definition: PersistentDataModel/PersistentDataModel/AthenaAttributeList.h:45
XXH.h
C++ native wrapper for the C xxhash API.
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
PileUpMTAlg::get_BCID
unsigned int get_BCID(int bc, unsigned int central_BCID) const
Definition: PileUpMTAlg.h:148
xAOD::EventInfo_v1::setTimeStamp
void setTimeStamp(uint32_t value)
Set the POSIX time of the event.
xAOD::EventInfo_v1::setBCID
void setBCID(uint32_t value)
Set the bunch crossing ID of the event.
PileUpMTAlg::m_beamhaloMBSvc
ServiceHandle< IMinbiasSvc > m_beamhaloMBSvc
Definition: PileUpMTAlg.h:100
CLID
uint32_t CLID
The Class ID type.
Definition: Event/xAOD/xAODCore/xAODCore/ClassID_traits.h:47
PileUpMTAlg::add_subevt
StatusCode add_subevt(const std::vector< std::uint32_t > &bcid, SG::WriteHandle< xAOD::EventInfo > &overlaidEvt, SG::WriteHandle< xAOD::EventInfoContainer > &puCont, ServiceHandle< IMinbiasSvc > &mbSvc, xAOD::EventInfo::PileUpType puType, int bc, const EventContext &ctx, unsigned long subevt_id, std::vector< std::uint64_t > &trace)
Definition: PileUpMTAlg.cxx:89
AthAlgorithm
Definition: AthAlgorithm.h:47
xAOD::EventAuxInfo
EventAuxInfo_v3 EventAuxInfo
Definition of the latest event auxiliary info version.
Definition: EventAuxInfo.h:15
PileUpMTAlg.h
TCS::join
std::string join(const std::vector< std::string > &v, const char c=',')
Definition: Trigger/TrigT1/L1Topo/L1TopoCommon/Root/StringUtils.cxx:10
PileUpMTAlg::m_rngSvc
ServiceHandle< IAthRNGSvc > m_rngSvc
Definition: PileUpMTAlg.h:108
dqt_zlumi_pandas.pileup
pileup
Definition: dqt_zlumi_pandas.py:174
EventAuxInfo.h
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
PileUpMTAlg::m_BCSpacing
Gaudi::Property< int > m_BCSpacing
Definition: PileUpMTAlg.h:129
AtlCoolConsole.tool
tool
Definition: AtlCoolConsole.py:453
xAOD::EventInfo_v1::setAverageInteractionsPerCrossing
void setAverageInteractionsPerCrossing(float value)
Set average interactions per crossing for all BCIDs.
Definition: EventInfo_v1.cxx:408
PileUpMTAlg::m_skippedHSEvents
Gaudi::Property< int > m_skippedHSEvents
Definition: PileUpMTAlg.h:116
xAOD::bcid
setEventNumber setTimeStamp bcid
Definition: EventInfo_v1.cxx:133
dq_make_web_display.rv
def rv
Definition: dq_make_web_display.py:219
StoreGateSvc::tryConstRetrieve
const T * tryConstRetrieve() const
EventInfo.h
CxxUtils::to
CONT to(RANGE &&r)
Definition: ranges.h:39
xAOD::EventInfo_v1
Class describing the basic event information.
Definition: EventInfo_v1.h:43
PileUpMTAlg::m_skipEventIdxSvc
ServiceHandle< ISkipEventIdxSvc > m_skipEventIdxSvc
Definition: PileUpMTAlg.h:137
xAOD::EventInfo_v1::setTimeStampNSOffset
void setTimeStampNSOffset(uint32_t value)
Set the nanosecond offset wrt. the time stamp.
xxh3::hash64
std::uint64_t hash64(const void *data, std::size_t size)
Passthrough to XXH3_64bits.
Definition: XXH.cxx:9
xAOD::EventInfo_v1::Signal
@ Signal
The signal event.
Definition: EventInfo_v1.h:266
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:76
PileUpMTAlg::m_fracHighPt
Gaudi::Property< float > m_fracHighPt
Definition: PileUpMTAlg.h:121
SG::WriteHandle::record
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
xAOD::EventInfo_v1::setRunNumber
void setRunNumber(uint32_t value)
Set the current event's run number.
PileUpMTAlg::m_cavernMBSvc
ServiceHandle< IMinbiasSvc > m_cavernMBSvc
Definition: PileUpMTAlg.h:98
PileUpMTAlg::PileUpMTAlg
PileUpMTAlg(const std::string &name, ISvcLocator *pSvcLocator)
Definition: PileUpMTAlg.cxx:34
python.PileUpEventType.Cavern
int Cavern
Definition: PileUpEventType.py:5
PileUpHashHelper::calculateHash
void calculateHash(uuid_t &hash) const
Calculate the hash.
Definition: PileUpHashHelper.cxx:49
get
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
Definition: hcg.cxx:127
PileUpMisc.h
PileUpMTAlg::get_ei
StatusCode get_ei(StoreGateSvc &sg, std::unique_ptr< const xAOD::EventInfo > &ei, std::unique_ptr< xAOD::EventAuxInfo > &eiAux, bool pileup=false) const
Definition: PileUpMTAlg.cxx:39
PileUpMTAlg::m_puTools
ToolHandleArray< IPileUpTool > m_puTools
Definition: PileUpMTAlg.h:113
xAOD::EventInfo_v1::setLumiBlock
void setLumiBlock(uint32_t value)
Set the current event's luminosity block number.
xAOD::EventInfo_v1::subEvents
const std::vector< SubEvent > & subEvents() const
Get the pileup events that were used in the simulation.
Definition: EventInfo_v1.cxx:596
xAOD::EventInfo_v1::bcid
uint32_t bcid() const
The bunch crossing ID of the event.
SubEvent
xAOD::EventInfo::SubEvent SubEvent
Definition: PileUpMTAlg.cxx:26
xAOD::EventInfo_v1::SubEvent
Class describing the properties of one pileup sub-event.
Definition: EventInfo_v1.h:286
addSubEvent
xAOD::EventInfo * addSubEvent(xAOD::EventInfo *targetEv, const xAOD::EventInfo::SubEvent &subev, xAOD::EventInfoContainer *eiContainer, const std::string &eiContKey, StoreGateSvc *subev_store=nullptr)
Definition: PileUpMisc.cxx:18
PileUpMTAlg::m_evtInfoKey
SG::WriteHandleKey< xAOD::EventInfo > m_evtInfoKey
Definition: PileUpMTAlg.h:140
ServiceHandle< IMinbiasSvc >
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37