 |
ATLAS Offline Software
|
#include <OnDemandMinbiasSvc.h>
|
std::size_t | calcMBRequired (std::int64_t hs_id, std::size_t slot, unsigned int run, unsigned int lumi, std::uint64_t event) |
|
Definition at line 28 of file OnDemandMinbiasSvc.h.
◆ SGHandle
◆ OnDemandMinbiasSvc()
OnDemandMinbiasSvc::OnDemandMinbiasSvc |
( |
const std::string & |
name, |
|
|
ISvcLocator * |
svc |
|
) |
| |
◆ ~OnDemandMinbiasSvc()
OnDemandMinbiasSvc::~OnDemandMinbiasSvc |
( |
| ) |
|
|
final |
◆ beginHardScatter()
StatusCode OnDemandMinbiasSvc::beginHardScatter |
( |
const EventContext & |
ctx | ) |
|
|
override |
Definition at line 215 of file OnDemandMinbiasSvc.cxx.
216 using namespace std::chrono_literals;
217 std::chrono::steady_clock::time_point order_wait_start{};
219 const std::int64_t hs_id =
get_hs_id(ctx);
220 const std::size_t slot = ctx.slot();
221 const std::size_t num_to_load =
223 ctx.eventID().lumi_block(), ctx.eventID().event_number());
226 if (stores.size() < num_to_load) {
227 ATH_MSG_INFO(
"Adding " << num_to_load - stores.size() <<
" stores");
228 stores.reserve(num_to_load);
229 for (std::size_t
i = stores.size();
i < num_to_load; ++
i) {
230 auto& sg = stores.emplace_back(
240 ATH_MSG_INFO(
"Waiting to prevent out-of-order loading. Last loaded is "
244 std::this_thread::sleep_for(50
ms);
255 for (std::size_t
i = 0;
i < num_to_load; ++
i) {
256 auto& sg = stores[
i];
264 return StatusCode::FAILURE;
266 IOpaqueAddress* addr =
nullptr;
270 return StatusCode::FAILURE;
272 if (addr ==
nullptr) {
274 return StatusCode::FAILURE;
280 for (
const auto* proxy_ptr : sg->proxies()) {
282 sg->proxy_exact(proxy_ptr->sgkey())->accessData();
292 return StatusCode::SUCCESS;
◆ calcMBRequired()
std::size_t OnDemandMinbiasSvc::calcMBRequired |
( |
std::int64_t |
hs_id, |
|
|
std::size_t |
slot, |
|
|
unsigned int |
run, |
|
|
unsigned int |
lumi, |
|
|
std::uint64_t |
event |
|
) |
| |
|
private |
Definition at line 148 of file OnDemandMinbiasSvc.cxx.
154 <<
"| hs_id " << hs_id);
157 std::vector<std::uint64_t> stack_num_mb_by_bunch{};
158 std::vector<std::uint64_t>& num_mb_by_bunch =
160 num_mb_by_bunch.clear();
161 num_mb_by_bunch.resize(n_bunches);
165 bool sf_updated_throwaway;
166 const float beam_lumi_sf =
169 const float beam_lumi = beam_lumi_sf *
m_nPerBunch.value();
170 std::vector<float> avg_num_mb_by_bunch(n_bunches, beam_lumi);
179 avg_num_mb_by_bunch[
idx] *=
m_beamInt->normFactor(bunch);
184 std::transform(avg_num_mb_by_bunch.begin(), avg_num_mb_by_bunch.end(),
185 num_mb_by_bunch.begin(), [&prng](
float avg) {
186 return std::poisson_distribution<std::uint64_t>(avg)(prng);
189 std::transform(avg_num_mb_by_bunch.begin(), avg_num_mb_by_bunch.end(),
190 num_mb_by_bunch.begin(), [](
float f) {
191 return static_cast<std::uint64_t>(std::round(f));
201 std::vector<std::uint64_t>& index_array =
m_idx_lists[slot];
203 index_array.resize(num_mb);
204 std::iota(index_array.begin(), index_array.end(), 0);
◆ endHardScatter()
StatusCode OnDemandMinbiasSvc::endHardScatter |
( |
const EventContext & |
ctx | ) |
|
|
override |
◆ get_hs_id()
virtual std::int64_t OnDemandMinbiasSvc::get_hs_id |
( |
const EventContext & |
ctx | ) |
const |
|
inlineoverridevirtual |
◆ getMinbias()
StoreGateSvc * OnDemandMinbiasSvc::getMinbias |
( |
const EventContext & |
ctx, |
|
|
std::uint64_t |
mb_id |
|
) |
| |
|
override |
◆ getNumForBunch()
std::size_t OnDemandMinbiasSvc::getNumForBunch |
( |
const EventContext & |
ctx, |
|
|
int |
bunch |
|
) |
| const |
|
override |
Definition at line 302 of file OnDemandMinbiasSvc.cxx.
306 "Tried to request bunch {} which is outside the range [{}, {}]", bunch,
◆ initialize()
StatusCode OnDemandMinbiasSvc::initialize |
( |
| ) |
|
|
final |
AthService initialize.
Definition at line 40 of file OnDemandMinbiasSvc.cxx.
53 ATH_MSG_ERROR(
"Failed to create background event selector context");
54 return StatusCode::FAILURE;
63 if (!addressProvider) {
65 "Could not cast background event selector to IAddressProvider");
70 SmartIF<IAddressProvider> athPoolAP{
71 serviceLocator()->service(
std::format(
"AthenaPoolAddressProviderSvc/BkgAPAPSvc_{}",
name()))
75 "Could not cast AthenaPoolAddressProviderSvc to IAddressProvider");
80 SmartIF<IAddressProvider> addRemapAP{
81 serviceLocator()->service(
std::format(
"AddressRemappingSvc/BkgARSvc_{}",
name()))
84 ATH_MSG_WARNING(
"Could not cast AddressRemappingSvc to IAddressProvider");
89 const std::size_t n_concurrent =
90 Gaudi::Concurrency::ConcurrencyFlags::numConcurrentEvents();
100 const int n_stores = 50;
102 for (std::size_t
i = 0;
i < n_concurrent; ++
i) {
104 sgs.reserve(n_stores);
105 for (
int j = 0; j < n_stores; ++j) {
107 auto& sg = sgs.emplace_back(
119 auto skipEvent_callback = [
this](
122 using namespace std::chrono_literals;
131 << n_to_skip <<
" pileup events");
132 for (std::size_t
i = 0;
i < n_to_skip; ++
i) {
135 return StatusCode::FAILURE;
141 return StatusCode::SUCCESS;
145 return StatusCode::SUCCESS;
◆ m_activeStoreSvc
Initial value:{
this, "ActiveStoreSvc", "ActiveStoreSvc", "ActiveStoreSvc"}
Definition at line 84 of file OnDemandMinbiasSvc.h.
◆ m_beamInt
Initial value:{this, "BeamIntSvc", "FlatBM",
"Beam intensity service"}
Definition at line 80 of file OnDemandMinbiasSvc.h.
◆ m_beamLumi
Initial value:{
this, "BeamLumiSvc", "LumiProfileSvc", "Beam luminosity service"}
Definition at line 82 of file OnDemandMinbiasSvc.h.
◆ m_bkg_evt_sel_ctx
IEvtSelector::Context* OnDemandMinbiasSvc::m_bkg_evt_sel_ctx |
|
private |
◆ m_bkgEventSelector
ServiceHandle<IEvtSelector> OnDemandMinbiasSvc::m_bkgEventSelector |
|
private |
Initial value:{
this, "BkgEventSelector", {}, "Event selector for minbias events"}
Definition at line 78 of file OnDemandMinbiasSvc.h.
◆ m_earliestDeltaBC
Gaudi::Property<int> OnDemandMinbiasSvc::m_earliestDeltaBC |
|
private |
Initial value:{
this, "EarliestDeltaBC", -32,
"Earliest bunch crossing to consider (as delta)"}
Definition at line 69 of file OnDemandMinbiasSvc.h.
◆ m_idx_lists
std::vector<std::vector<std::uint64_t> > OnDemandMinbiasSvc::m_idx_lists |
|
private |
◆ m_last_loaded_hs
std::atomic_int64_t OnDemandMinbiasSvc::m_last_loaded_hs {-1} |
|
private |
◆ m_latestDeltaBC
Gaudi::Property<int> OnDemandMinbiasSvc::m_latestDeltaBC |
|
private |
Initial value:{
this, "LatestDeltaBC", +6,
"Latest bunch crossing to consider (as delta)"}
Definition at line 72 of file OnDemandMinbiasSvc.h.
◆ m_nPerBunch
Gaudi::Property<float> OnDemandMinbiasSvc::m_nPerBunch |
|
private |
Initial value:{
this, "AvgMBPerBunch", 0.f,
"Average (max) number of minbias events per bunch"}
Definition at line 59 of file OnDemandMinbiasSvc.h.
◆ m_num_mb_by_bunch
std::vector<std::vector<std::uint64_t> > OnDemandMinbiasSvc::m_num_mb_by_bunch |
|
private |
◆ m_onDemandMB
Gaudi::Property<bool> OnDemandMinbiasSvc::m_onDemandMB |
|
private |
Initial value:{
this, "OnDemandMB", false,
"Should minbias event contents be read on demand"}
Definition at line 54 of file OnDemandMinbiasSvc.h.
◆ m_proxyProviderSvc
◆ m_reading_batch_mtx
std::mutex OnDemandMinbiasSvc::m_reading_batch_mtx |
|
private |
◆ m_seed
Gaudi::Property<std::uint64_t> OnDemandMinbiasSvc::m_seed |
|
private |
Initial value:{this, "Seed", 0,
"Additional seed for PRNGs"}
Definition at line 52 of file OnDemandMinbiasSvc.h.
◆ m_skipEventIdxSvc
Initial value:{
this, "SkipEvtIdxSvc", "SkipEventIdxSvc",
"Skipped event index (run / lb num) provider"}
Definition at line 75 of file OnDemandMinbiasSvc.h.
◆ m_skippedHSEvents
Gaudi::Property<int> OnDemandMinbiasSvc::m_skippedHSEvents |
|
private |
Initial value:{this, "SkippedHSEvents", 0,
"Number of skipped HS events"}
Definition at line 57 of file OnDemandMinbiasSvc.h.
◆ m_spare_store
SGHandle OnDemandMinbiasSvc::m_spare_store |
|
private |
Initial value:{this, "StoreGateSvc",
"StoreGate for discarding events"}
Definition at line 87 of file OnDemandMinbiasSvc.h.
◆ m_stores
std::vector<std::vector<SGHandle> > OnDemandMinbiasSvc::m_stores |
|
private |
◆ m_useBeamInt
Gaudi::Property<bool> OnDemandMinbiasSvc::m_useBeamInt |
|
private |
Initial value:{
this, "UseBeamInt", true, "Whether to use the beam intensity service"}
Definition at line 65 of file OnDemandMinbiasSvc.h.
◆ m_useBeamLumi
Gaudi::Property<bool> OnDemandMinbiasSvc::m_useBeamLumi |
|
private |
Initial value:{
this, "UseBeamLumi", true, "Whether to use the beam luminosity service"}
Definition at line 67 of file OnDemandMinbiasSvc.h.
◆ m_usePoisson
Gaudi::Property<bool> OnDemandMinbiasSvc::m_usePoisson |
|
private |
Initial value:{this, "UsePoisson", true,
"Whether to use a Poisson distribution "
"(if False, use a delta distribution)"}
Definition at line 62 of file OnDemandMinbiasSvc.h.
◆ s_NoSlot
constexpr std::size_t OnDemandMinbiasSvc::s_NoSlot |
|
staticconstexprprivate |
The documentation for this class was generated from the following files:
ServiceHandle< IBeamLuminosity > m_beamLumi
Gaudi::Property< bool > m_useBeamInt
std::vector< std::vector< std::uint64_t > > m_num_mb_by_bunch
Temporarily change the current store.
ServiceHandle< ISkipEventIdxSvc > m_skipEventIdxSvc
std::size_t calcMBRequired(std::int64_t hs_id, std::size_t slot, unsigned int run, unsigned int lumi, std::uint64_t event)
ServiceHandle< IEvtSelector > m_bkgEventSelector
std::vector< std::vector< std::uint64_t > > m_idx_lists
Gaudi::Property< bool > m_usePoisson
ServiceHandle< IProxyProviderSvc > m_proxyProviderSvc
virtual std::int64_t get_hs_id(const EventContext &ctx) const override
POOL::TEvent event(POOL::TEvent::kClassAccess)
std::atomic_int64_t m_last_loaded_hs
std::vector< EvtId >::const_iterator EvtIter
Gaudi::Property< bool > m_onDemandMB
::StatusCode StatusCode
StatusCode definition for legacy code.
Gaudi::Property< bool > m_useBeamLumi
static constexpr std::size_t s_NoSlot
Amg::Vector3D transform(Amg::Vector3D &v, Amg::Transform3D &tr)
Transform a point from a Trasformation3D.
std::vector< std::vector< SGHandle > > m_stores
AthROOTErrorHandlerSvc * svc
IEvtSelector::Context * m_bkg_evt_sel_ctx
Gaudi::Property< float > m_nPerBunch
Gaudi::Property< int > m_latestDeltaBC
Gaudi::Property< int > m_skippedHSEvents
ServiceHandle< IBeamIntensity > m_beamInt
accumulate
Update flags based on parser line args.
#define ATH_MSG_WARNING(x)
std::mutex m_reading_batch_mtx
Gaudi::Property< int > m_earliestDeltaBC
ServiceHandle< ActiveStoreSvc > m_activeStoreSvc
Gaudi::Property< std::uint64_t > m_seed