10#include "FairPrimaryGenerator.h"
11#include "TDatabasePDG.h"
15const Double_t
cm = 10.;
16const Double_t
mm = 1.;
35 fPythia =
new Pythia8::Pythia();
50 LOG(info) <<
"Open external file with charm or beauty hadrons: "
53 LOG(fatal) <<
"Error opening input file.";
64 fTree->SetBranchAddress(
"E", &
hE);
65 fTree->SetBranchAddress(
"M", &
hM);
66 fTree->SetBranchAddress(
"mid", &
mid);
67 fTree->SetBranchAddress(
"mpx", &
mpx);
68 fTree->SetBranchAddress(
"mpy", &
mpy);
69 fTree->SetBranchAddress(
"mpz", &
mpz);
70 fTree->SetBranchAddress(
"mE", &
mE);
74 fPythia->settings.mode(
"Beams:idB", 2212);
75 fPythia->settings.mode(
"Beams:frameType", 2);
77 fPythia->settings.parm(
"Beams:eB", 0.);
79 TDatabasePDG* pdgBase = TDatabasePDG::Instance();
80 Double_t root_ctau = pdgBase->GetParticle(
fHNL)->Lifetime();
82 LOG(
debug) <<
"tau root " << root_ctau
83 <<
"[s] ctau root = " << root_ctau * 3e10 <<
"[cm]";
84 LOG(
debug) <<
"ctau pythia " <<
fctau <<
"[mm]";
99 Double_t tp, tS, zp, xp, yp, zS, xS, yS, pz, px, py, e, w;
100 Double_t tm, zm, xm, ym, pmz, pmx, pmy, em;
110 std::vector<int> hnls;
118 LOG(warning) <<
"End of input file. Rewind.";
122 if (
static_cast<int>(fabs(
hid[0])) != 431) {
125 Double_t rnr = gRandom->Uniform(0, 1);
135 hE[0],
hM[0], 0., 9.);
138 for (
int i = 0; i <
fPythia->event.size(); i++) {
151 int r =
static_cast<int>(gRandom->Uniform(0, iHNL));
155 zp =
fPythia->event[i].zProd();
156 xp =
fPythia->event[i].xProd();
157 yp =
fPythia->event[i].yProd();
158 tp =
fPythia->event[i].tProd();
166 Double_t p = TMath::Sqrt(px * px + py * py + pz * pz);
167 Double_t lam = LS / p;
171 Double_t gam = e / TMath::Sqrt(e * e - p * p);
172 Double_t beta = p / e;
177 w = TMath::Exp(-LS / (beta * gam *
fctau)) *
179 im = (Int_t)
fPythia->event[i].mother1();
180 zm =
fPythia->event[im].zProd();
181 xm =
fPythia->event[im].xProd();
182 ym =
fPythia->event[im].yProd();
187 tm =
fPythia->event[im].tProd();
194 ym /
cm + dy /
cm, zm /
cm, -1,
false,
mE[0], 0., 1.);
196 (Int_t)
fPythia->event[im].id(), pmx, pmy, pmz, xm /
cm + dx /
cm,
199 cpg->AddTrack(
fHNL, px, py, pz, xp /
cm + dx /
cm, yp /
cm + dy /
cm,
203 (Int_t)
fPythia->event[im].id(), pmx, pmy, pmz, xm /
cm + dx /
cm,
206 cpg->AddTrack(
fHNL, px, py, pz, xp /
cm + dx /
cm, yp /
cm + dy /
cm,
210 dec_chain.push_back(im);
211 dec_chain.push_back(i);
222 LOGF(info,
"ship event %i / pythia event-nr %i",
fShipEventNr,
fn);
226 for (
int k = 0; k <
fPythia->event.size(); k++) {
228 im =
fPythia->event[k].mother1();
235 im =
fPythia->event[im].mother1();
241 dec_chain.push_back(k);
246 for (std::vector<int>::iterator it = dec_chain.begin() + 2;
247 it != dec_chain.end(); ++it) {
251 int impy =
fPythia->event[k].mother1();
252 std::vector<int>::iterator itm =
253 std::find(dec_chain.begin(), dec_chain.end(), impy);
255 if (itm != dec_chain.end())
256 im = itm - dec_chain.begin();
258 Bool_t wanttracking =
false;
259 if (
fPythia->event[k].isFinal()) {
269 cpg->AddTrack((Int_t)
fPythia->event[k].id(), px, py, pz, xS /
cm, yS /
cm,
270 zS /
cm, im, wanttracking, e, tS /
cm /
c_light, w);
280 LOG(
debug) <<
"fPythia->readString(\"" << par <<
"\")";
std::pair< Double_t, Double_t > CalculateBeamOffset(Double_t smearBeam, Double_t paintBeam)
void SetParameters(char *)
TTree * fTree
pointer to a file
Bool_t ReadEvent(FairPrimaryGenerator *) override
std::shared_ptr< Pythia8::RndmEngine > fRandomEngine
Pythia8::Pythia * fPythia
~HNLPythia8Generator() override
std::optional< std::string > fextFile