|
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 29 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 220 of file OnDemandMinbiasSvc.cxx.
221 using namespace std::chrono_literals;
222 std::chrono::steady_clock::time_point order_wait_start{};
224 const std::int64_t hs_id =
get_hs_id(ctx);
225 const std::size_t slot = ctx.slot();
226 const std::size_t num_to_load =
228 ctx.eventID().lumi_block(), ctx.eventID().event_number());
231 if (stores.size() < num_to_load) {
232 ATH_MSG_INFO(
"Adding " << num_to_load - stores.size() <<
" stores");
233 stores.reserve(num_to_load);
234 for (std::size_t
i = stores.size();
i < num_to_load; ++
i) {
235 auto& sg = stores.emplace_back(
245 ATH_MSG_INFO(
"Waiting to prevent out-of-order loading. Last loaded is "
249 std::this_thread::sleep_for(50
ms);
260 for (std::size_t
i = 0;
i < num_to_load; ++
i) {
261 auto& sg = stores[
i];
269 return StatusCode::FAILURE;
271 IOpaqueAddress* addr =
nullptr;
275 return StatusCode::FAILURE;
277 if (addr ==
nullptr) {
279 return StatusCode::FAILURE;
284 for (
const auto* proxy_ptr : sg->proxies()) {
287 sg->proxy_exact(proxy_ptr->sgkey())->accessData();
297 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 155 of file OnDemandMinbiasSvc.cxx.
161 <<
"| hs_id " << hs_id);
164 std::vector<std::uint64_t> stack_num_mb_by_bunch{};
165 std::vector<std::uint64_t>& num_mb_by_bunch =
167 num_mb_by_bunch.clear();
168 num_mb_by_bunch.resize(n_bunches);
172 bool sf_updated_throwaway;
173 const float beam_lumi_sf =
176 const float beam_lumi = beam_lumi_sf *
m_nPerBunch.value();
177 std::vector<float> avg_num_mb_by_bunch(n_bunches, beam_lumi);
186 avg_num_mb_by_bunch[
idx] *=
m_beamInt->normFactor(bunch);
191 std::transform(avg_num_mb_by_bunch.begin(), avg_num_mb_by_bunch.end(),
192 num_mb_by_bunch.begin(), [&prng](
float avg) {
193 return std::poisson_distribution<std::uint64_t>(avg)(prng);
196 std::transform(avg_num_mb_by_bunch.begin(), avg_num_mb_by_bunch.end(),
197 num_mb_by_bunch.begin(), [](
float f) {
198 return static_cast<std::uint64_t>(std::round(f));
208 std::vector<std::uint64_t>& index_array =
m_idx_lists[slot];
210 index_array.resize(num_mb);
211 std::iota(index_array.begin(), index_array.end(), 0);
214 ATH_MSG_DEBUG(
"HS ID " << hs_id <<
" uses " << num_mb <<
" events\n"
◆ 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 307 of file OnDemandMinbiasSvc.cxx.
311 "Tried to request bunch {} which is outside the range [{}, {}]", bunch,
◆ initialize()
StatusCode OnDemandMinbiasSvc::initialize |
( |
| ) |
|
|
final |
AthService initialize.
Definition at line 41 of file OnDemandMinbiasSvc.cxx.
54 ATH_MSG_ERROR(
"Failed to create background event selector context");
55 return StatusCode::FAILURE;
65 auto* addressProvider =
67 if (addressProvider ==
nullptr) {
69 "Could not cast background event selector to IAddressProvider");
74 IService* athPoolSvc =
nullptr;
79 if (athPoolAP ==
nullptr) {
81 "Could not cast AthenaPoolAddressProviderSvc to IAddressProvider");
86 IService* addRemapSvc =
nullptr;
90 if (addRemapAP ==
nullptr) {
91 ATH_MSG_WARNING(
"Could not cast AddressRemappingSvc to IAddressProvider");
96 const std::size_t n_concurrent =
97 Gaudi::Concurrency::ConcurrencyFlags::numConcurrentEvents();
107 const int n_stores = 50;
109 for (std::size_t
i = 0;
i < n_concurrent; ++
i) {
111 sgs.reserve(n_stores);
112 for (
int j = 0; j < n_stores; ++j) {
114 auto& sg = sgs.emplace_back(
126 auto skipEvent_callback = [
this](
129 using namespace std::chrono_literals;
133 for (
auto iter =
begin; iter <
end; ++iter) {
134 const auto&
evt = *iter;
138 << n_to_skip <<
" pileup events");
139 for (std::size_t
i = 0;
i < n_to_skip; ++
i) {
142 return StatusCode::FAILURE;
148 return StatusCode::SUCCESS;
152 return StatusCode::SUCCESS;
◆ m_activeStoreSvc
Initial value:{
this, "ActiveStoreSvc", "ActiveStoreSvc", "ActiveStoreSvc"}
Definition at line 85 of file OnDemandMinbiasSvc.h.
◆ m_beamInt
Initial value:{this, "BeamIntSvc", "FlatBM",
"Beam intensity service"}
Definition at line 81 of file OnDemandMinbiasSvc.h.
◆ m_beamLumi
Initial value:{
this, "BeamLumiSvc", "LumiProfileSvc", "Beam luminosity service"}
Definition at line 83 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 79 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 70 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 73 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 60 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 55 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 53 of file OnDemandMinbiasSvc.h.
◆ m_skipEventIdxSvc
Initial value:{
this, "SkipEvtIdxSvc", "SkipEventIdxSvc",
"Skipped event index (run / lb num) provider"}
Definition at line 76 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 58 of file OnDemandMinbiasSvc.h.
◆ m_spare_store
SGHandle OnDemandMinbiasSvc::m_spare_store |
|
private |
Initial value:{this, "StoreGateSvc",
"StoreGate for discarding events"}
Definition at line 88 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 66 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 68 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 63 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
bool accumulate(AccumulateMap &map, std::vector< module_t > const &modules, FPGATrackSimMatrixAccumulator const &acc)
Accumulates an accumulator (e.g.
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
IProxyProviderSvc * m_proxyProviderSvc
virtual void addProvider(IAddressProvider *aProvider)=0
IAddressProvider manager functionality add a provider to the set of known ones.
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
interface for IOA providers
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
std::string join(const std::vector< std::string > &v, const char c=',')
Gaudi::Property< float > m_nPerBunch
Gaudi::Property< int > m_latestDeltaBC
Gaudi::Property< int > m_skippedHSEvents
ServiceHandle< IBeamIntensity > m_beamInt
#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