73 void SortEvent(Pythia8::Event &event,
HEP::Event &OutEvt,
int npileups, std::vector<HEP::PileupEvent*> &pileups,
double &Rjet, std::mt19937 &engine){
75 fastjet::JetDefinition jetDef(fastjet::antikt_algorithm, Rjet);
76 std::vector <HEP::Jet*> outjets;
78 std::vector <fastjet::PseudoJet> inclusiveJets, jets;
80 std::vector <fastjet::PseudoJet> pileupJets, pJInputs;
85 std::vector <fastjet::PseudoJet> fjInputs, bquark_momenta;
88 bquark_momenta.resize(0);
93 for(
int mpart = event.size()-1; mpart>=0 ; mpart--)
96 Pythia8::Particle* prt = &
event[mpart];
108 if(prt->isHadron() && prt->isVisible())
110 Pythia8::Vec4 pos = prt->vProd();
112 if (pos.pAbs() > 0.0001)
114 newpart->set_prod(
HEP::P4(pos.px(),pos.py(),pos.pz(),pos.e()));
121 newpart->set_3Q(prt->chargeType());
122 OutEvt.add_charged_hadron(newpart);
133 OutEvt.add_neutral_hadron(newpart->
mom());
143 Pythia8::Vec4 pos = prt->vProd();
146 if (pos.pAbs() > 0.0001)
148 newpart->set_prod(
HEP::P4(pos.px(),pos.py(),pos.pz(),pos.e()));
154 if(apid == 11 || apid == 13 || apid == 22 )
160 if(apid == 11 || apid ==13 )
162 if(pid > 0) {newpart->set_3Q(-3);}
else {newpart->set_3Q(3);}
192 newpart->set_3Q(prt->chargeType());
203 if( pid == 12 || pid == 14 || pid == 16 || pid == 18 )
207 if((apid > 1000000) && (apid < 9000000))
212 Pythia8::Vec4 v4=prt->p();
213 fastjet::PseudoJet particleTemp(v4.px(),v4.py(),v4.pz(),v4.e());
214 fjInputs.push_back(particleTemp);
219 if(ischargedTrackHadron(prt,event))
222 Pythia8::Vec4 pos = prt->vProd();
223 Pythia8::Vec4 vdec = prt->vDec();
224 if(vdec.pT() < 33.0)
continue;
228 if (pos.pAbs() > 0.0001)
230 newpart->set_prod(
HEP::P4(pos.px(),pos.py(),pos.pz(),pos.e()));
232 newpart->set_decay(
HEP::P4(vdec.px(),vdec.py(),vdec.pz(),vdec.e()));
233 newpart->set_3Q(prt->chargeType());
235 OutEvt.add_charged_hadron(newpart);
246 std::vector<int> daughters = prt->daughterList();
247 for(
int di = 0; di < daughters.size(); di ++)
249 if (event[daughters[di]].idAbs() == 15)
261 Pythia8::Vec4 pos = prt->vProd();
262 if (pos.pAbs() > 0.001)
264 newpart->set_prod(
HEP::P4(pos.px(),pos.py(),pos.pz(),pos.e()));
267 if (pos.pAbs() > 0.001)
269 newpart->set_decay(
HEP::P4(pos.px(),pos.py(),pos.pz(),pos.e()));
278 if(isHSCP(prt,event))
284 Pythia8::Vec4 pos = prt->vProd();
286 if (pos.pAbs() > 0.001)
288 newpart->set_prod(
HEP::P4(pos.px(),pos.py(),pos.pz(),pos.e()));
296 double decay_dist = pos.pAbs();
297 if (decay_dist > 0.01)
299 newpart->set_decay(
HEP::P4(pos.px(),pos.py(),pos.pz(),pos.e()));
301 else if( decay_dist > 0.0)
306 newpart->set_3Q(prt->chargeType());
307 OutEvt.add_HSCP(newpart);
320 std::vector<int> daughters = prt->daughterList();
321 for(
int di = 0; di < daughters.size(); di ++)
323 if (event[daughters[di]].idAbs() == 5)
333 Pythia8::Vec4 v4 = prt->p();
335 fastjet::PseudoJet tpjet(v4.px(),v4.py(),v4.pz(),v4.e());
337 bquark_momenta.push_back(tpjet);
347 std::uniform_int_distribution<> rd_el(0,pileups.size()-1);
349 static std::normal_distribution<double> zdist(0,53.0);
350 static std::normal_distribution<double> tdist(0,160e-12);
359 fastjet::ClusterSequence clustSeq(fjInputs, jetDef);
360 inclusiveJets = clustSeq.inclusive_jets(1.0);
361 jets = sorted_by_pt(inclusiveJets);
376 for(
int jp=0; jp< npileups; jp++)
378 int pileup_number=rd_el(engine);
380 double dz=zdist(engine);
381 double dt=tdist(engine);
384 OutEvt.
add_particles(pileups[pileup_number]->translate_particles(dz,dt));
385 OutEvt.add_charged_hadrons(pileups[pileup_number]->translate_charged_hadrons(dz,dt));
388 OutEvt.add_neutral_hadrons(pileups[pileup_number]->get_neutral_hadrons());
458 for(
auto const& jjet: jets)
461 for(
auto const& bquark : bquark_momenta)
463 if(bquark.delta_R(jjet) < Rjet) { btag =
true;
break;}
472 outjets.push_back(tjet);
496 void filleventPYTHIA(
HEP::Event &OutEvt, Pythia8::Event &evt,
double weight,
int npileups, std::vector<HEP::PileupEvent*> &pileups, std::mt19937 &engine)
503 OutEvt.set_weight(weight);
511 SortEvent(evt,OutEvt,npileups,pileups,dR,engine);
539 void filleventPYTHIA_FatJet(
HEP::Event &OutEvt, Pythia8::Event &evt,
double weight,
int npileups, std::vector<HEP::PileupEvent*> &pileups, std::mt19937 &engine)
546 OutEvt.set_weight(weight);
550 SortEvent(evt,OutEvt,npileups,pileups,dR,engine);
Simple event class, separating particles into classes.
Definition: heputil.h:227
void add_particles(const std::vector< Particle * > &ps)
Definition: heputil.h:584
void set_missingmom(const P4 &pmiss)
Set the missing momentum vector.
Definition: heputil.h:736
void add_particle(Particle *p)
Definition: heputil.h:523
void set_jets(const std::vector< Jet * > &jets)
Set the jets collection.
Definition: heputil.h:709
A 4-momentum class for vectors.
Definition: Vectors.h:45
Definition: Particle.h:24
const P4 & mom() const
Get the 4 vector.
Definition: Particle.h:109
void set_prompt(bool isprompt=true)
Set promptness.
Definition: Particle.h:178