9#include "FairPrimaryGenerator.h"
10#include "Pythia8/Pythia.h"
11#include "TDatabasePDG.h"
15const Double_t
cm = 10.;
37 fPythia =
new Pythia8::Pythia();
87 std::cout <<
"Beam Momentum " <<
fMom << std::endl;
90 fPythia->settings.mode(
"Beams:idB", 2212);
91 fPythia->settings.mode(
"Beams:frameType", 2);
93 fPythia->settings.parm(
"Beams:eB", 0.);
96 fPythia->settings.parm(
"PhaseSpace:mHatMin",
103 LOG(fatal) <<
"Failed in retrieving dark photon PDF for production by "
104 "proton bremstrahlung!";
123 TDatabasePDG* pdgBase = TDatabasePDG::Instance();
124 Double_t root_ctau = pdgBase->GetParticle(
fDP)->Lifetime();
127 std::cout <<
"Final particle parameters for PDGID " <<
fDP <<
":"
132 std::cout <<
"tau root PDG database " << root_ctau
133 <<
"[s] ctau root = " << root_ctau * 3e10 <<
"[cm]" << std::endl;
137 std::cout <<
"ctau pythia " <<
fctau <<
"[mm]" << std::endl;
139 int initPass =
fPythia->init();
141 std::cout <<
"Pythia initialisation bool: " << initPass << std::endl;
145 LOG(fatal) <<
"Pythia initialisation failed";
161 Double_t tp, tS, zp, xp, yp, zS, xS, yS, pz, px, py, e, w;
162 Double_t tm, zm, xm, ym, pmz, pmx, pmy, em;
173 std::vector<int> dpvec;
200 double dpe = sqrt(dpmom * dpmom + dpm * dpm);
201 double phiin = 2. * M_PI * gRandom->Rndm();
204 std::cout <<
" Adding DP gun with p " << dpmom <<
" m " << dpm <<
" e "
205 << dpe <<
" theta,phi " << thetain <<
"," << phiin
209 fPythia->event.append(
fDP, 1, 0, 0, dpmom * sin(thetain) * cos(phiin),
210 dpmom * sin(thetain) * sin(phiin),
211 dpmom * cos(thetain), dpe, dpm);
214 if (!
fPythia->next()) LOG(fatal) <<
"fPythia->next() failed";
217 for (
int i = 0; i <
fPythia->event.size(); i++) {
237 zp =
fPythia->event[i].zProd();
238 xp =
fPythia->event[i].xProd();
239 yp =
fPythia->event[i].yProd();
240 tp =
fPythia->event[i].tProd();
248 std::cout <<
" Debug: decay product of A: "
261 Double_t p = TMath::Sqrt(px * px + py * py + pz * pz);
262 Double_t lam = LS / p;
266 Double_t gam = e / TMath::Sqrt(e * e - p * p);
267 Double_t beta = p / e;
272 w = TMath::Exp(-LS / (beta * gam *
fctau)) *
274 im = (Int_t)
fPythia->event[i].mother1();
275 zm =
fPythia->event[im].zProd();
276 xm =
fPythia->event[im].xProd();
277 ym =
fPythia->event[im].yProd();
282 tm =
fPythia->event[im].tProd();
288 Double_t Rsq = test + 1.;
292 Rsq = dx * dx + dy * dy;
305 (Int_t)
fPythia->event[im].id(), pmx, pmy, pmz, xm /
cm + dx,
308 cpg->AddTrack(
fDP, px, py, pz, xp /
cm + dx, yp /
cm + dy, zp /
cm, 0,
312 dec_chain.push_back(im);
313 dec_chain.push_back(i);
315 std::cout << std::endl
316 <<
" insert mother id " << im
317 <<
" pdg=" <<
fPythia->event[im].id() <<
" pmz = " << pmz
318 <<
" [GeV], zm = " << zm <<
" [mm] tm = " << tm <<
" [mm/c]"
321 std::cout <<
" ----> insert DP id " << i <<
" pdg=" <<
fDP
322 <<
" pz = " << pz <<
" [GeV] zp = " << zp
323 <<
" [mm] tp = " << tp <<
" [mm/c]" << std::endl;
330 LOGF(info,
"ship event %i / pythia event-nr %i",
fShipEventNr,
fn);
334 if (
debug > 1) std::cout <<
"Filling daughter particles" << std::endl;
336 for (
int k = 0; k <
fPythia->event.size(); k++) {
339 std::cout << k <<
" pdg =" <<
fPythia->event[k].id() <<
" mum "
340 <<
fPythia->event[k].mother1() << std::endl;
341 im =
fPythia->event[k].mother1();
348 im =
fPythia->event[im].mother1();
352 if (
debug > 1) std::cout <<
"reject" << std::endl;
355 if (
debug > 1) std::cout <<
"accept" << std::endl;
356 dec_chain.push_back(k);
383 for (std::vector<int>::iterator it = dec_chain.begin() + 2;
384 it != dec_chain.end(); ++it) {
388 int impy =
fPythia->event[k].mother1();
389 std::vector<int>::iterator itm =
390 std::find(dec_chain.begin(), dec_chain.end(), impy);
392 if (itm != dec_chain.end())
393 im = itm - dec_chain.begin();
395 Bool_t wanttracking =
false;
396 if (
fPythia->event[k].isFinal()) {
406 cpg->AddTrack((Int_t)
fPythia->event[k].id(), px, py, pz, xS /
cm, yS /
cm,
407 zS /
cm, im, wanttracking, e, tS /
cm /
c_light, w);
419 std::cout <<
"fPythia->readString(\"" << par <<
"\")" << std::endl;
Pythia8::Pythia * fPythia
Bool_t ReadEvent(FairPrimaryGenerator *) override
~DPPythia8Generator() override
std::shared_ptr< Pythia8::RndmEngine > fRandomEngine
void SetParameters(char *)
std::optional< std::string > fextFile