9 #include "CLHEP/Random/RandFlat.h"
10 #include "CLHEP/Vector/LorentzVector.h"
34 return StatusCode::FAILURE;
43 return StatusCode::FAILURE;
54 return StatusCode::FAILURE;
73 return StatusCode::FAILURE;
79 const auto nBinsX =
m_LRAHist->GetNbinsX();
80 const auto nBinsY =
m_LRAHist->GetNbinsY();
81 const auto nBinsZ =
m_LRAHist->GetNbinsZ();
96 Double_t Integral = 0.0;
97 for(Int_t
x = 1;
x <= nBinsX;
x++)
99 for(Int_t
y = 1;
y <= nBinsY;
y++)
101 for(Int_t
z = 1;
z <= nBinsZ;
z++)
105 m_Integral.emplace_back(std::forward_as_tuple(
x,
y,
z, Integral));
118 return StatusCode::SUCCESS;
123 return StatusCode::SUCCESS;
131 m_RNGEngine->setSeed(
name(), ctx);
132 CLHEP::HepRandomEngine *LRAEngine(m_RNGEngine->getEngine(ctx));
137 auto Comparison = [](
const auto &LHS,
const auto &RHS)
140 auto [lx, ly, lz,
i] = LHS;
141 auto [rx, ry, rz,
t] = RHS;
147 auto GetCoordinate = [](
const auto Axis,
const auto Bin,
const auto V)
149 return(
Axis->GetBinLowEdge(Bin) + (V *
Axis->GetBinWidth(Bin)));
153 auto [xBin, yBin, zBin, Integral] = *(std::lower_bound(
m_Integral.cbegin(),
155 std::make_tuple(0, 0, 0, CLHEP::RandFlat::shoot(LRAEngine)),
159 CLHEP::HepLorentzVector *vertexPosition =
new CLHEP::HepLorentzVector(GetCoordinate(
m_xAxis, xBin, CLHEP::RandFlat::shoot(LRAEngine)),
160 GetCoordinate(
m_yAxis, yBin, CLHEP::RandFlat::shoot(LRAEngine)),
161 GetCoordinate(
m_zAxis, zBin, CLHEP::RandFlat::shoot(LRAEngine)),
171 return(vertexPosition);