53 nFinal(0), totalMass(0.), massExcess(0.), weightMax(0.), nTrials(0) {;}
60 const std::vector<G4double>& masses,
61 std::vector<G4LorentzVector>& finalState) {
68 const G4int maxNumberOfLoops = 10000;
75 if (
nTrials >= maxNumberOfLoops ) {
77 ed <<
" Failed sampling after maxNumberOfLoops attempts : forced exit" <<
G4endl;
91 std::partial_sum(masses.begin(), masses.end(),
msum.begin());
93 std::multiplies<G4double>());
115 std::sort(
rndm.begin(),
rndm.end());
124 const std::vector<G4double>& masses) {
130 meff.push_back(masses[0]);
131 for (
size_t i=1; i<
nFinal-1; i++) {
135 meff.push_back(initialMass);
153 for (
size_t i=1; i<
nFinal; i++) {
167 std::multiplies<G4double>()));
182 std::vector<G4LorentzVector>& finalState) {
185 finalState.resize(
nFinal);
187 for (
size_t i=0; i<
nFinal; i++) {
190 G4cout <<
" finalState[" << i <<
"] " << finalState[i] <<
G4endl;
198 const std::vector<G4double>& masses,
199 std::vector<G4LorentzVector>& finalState) {
213 G4cout <<
" initialized Py " << -
pd[i-1] <<
" phi " << phi
214 <<
" theta " << theta <<
G4endl;
221 gamma = esys /
meff[i];
224 G4cout <<
" esys " << esys <<
" beta " << beta <<
" gamma " << gamma
228 for (
size_t j=0; j<=i; j++) {
229 finalState[j].rotateZ(theta).rotateY(phi);
230 finalState[j].setY(gamma*(finalState[j].
y() + beta*finalState[j].
e()));