3 Pythia8::Vec4 getMissingMomentum_TEST(Pythia8::Event &event)
5 Pythia8::Vec4 missingETvec;
6 std::vector<int> metaStableMothers;
8 for (
int i = 0; i <
event.size(); ++i) {
9 Pythia8::Particle ptc =
event[i];
10 if (!ptc.isFinal())
continue;
17 if (fabs(ptc.vProd().pz()) > 11000. || ptc.vProd().pT() > 7000.){
18 int mom = ptc.mother1();
20 if(std::find(metaStableMothers.begin(), metaStableMothers.end(), mom) == metaStableMothers.end()) {
21 metaStableMothers.push_back(mom);
28 if (ptc.idAbs() == 12 || ptc.idAbs() == 14 || ptc.idAbs() == 16){
30 missingETvec += ptc.p();
33 if (ptc.isHadron())
continue;
34 if (ptc.idAbs() == 22)
continue;
35 if (ptc.chargeType() !=0)
continue;
36 if (ptc.isVisible() && ptc.m() < 10.)
continue;
40 missingETvec += ptc.p();
44 for (
int imom = 0; imom < metaStableMothers.size(); ++imom) {
45 Pythia8::Particle ptc =
event[metaStableMothers[imom]];
49 if (ptc.idAbs() == 12 || ptc.idAbs() == 14 || ptc.idAbs() == 16){
51 missingETvec += ptc.p();
54 if (ptc.isHadron())
continue;
55 if (ptc.idAbs() == 22)
continue;
56 if (ptc.chargeType() !=0)
continue;
57 if (ptc.isVisible() && ptc.m() < 10.)
continue;
61 missingETvec += ptc.p();
82 void SortEvent_TEST(Pythia8::Event &event,
HEP::Event &OutEvt,
int npileups, std::vector<HEP::PileupEvent*> &pileups,
double &Rjet, std::mt19937 &engine){
84 fastjet::JetDefinition jetDef(fastjet::antikt_algorithm, Rjet);
85 std::vector <HEP::Jet*> outjets;
87 std::vector <fastjet::PseudoJet> inclusiveJets, jets;
89 std::vector <fastjet::PseudoJet> pileupJets, pJInputs;
94 std::vector <fastjet::PseudoJet> fjInputs, bquark_momenta;
97 bquark_momenta.resize(0);
102 for(
int mpart = event.size()-1; mpart>=0 ; mpart--)
105 Pythia8::Particle* prt = &
event[mpart];
117 if(prt->isHadron() && prt->isVisible())
119 Pythia8::Vec4 pos = prt->vProd();
121 if (pos.pAbs() > 0.0001)
123 newpart->set_prod(
HEP::P4(pos.px(),pos.py(),pos.pz(),pos.e()));
130 newpart->set_3Q(prt->chargeType());
131 OutEvt.add_charged_hadron(newpart);
142 OutEvt.add_neutral_hadron(newpart->
mom());
152 Pythia8::Vec4 pos = prt->vProd();
155 if (pos.pAbs() > 0.0001)
157 newpart->set_prod(
HEP::P4(pos.px(),pos.py(),pos.pz(),pos.e()));
163 if(apid == 11 || apid == 13 || apid == 22 )
169 if(apid == 11 || apid ==13 )
171 if(pid > 0) {newpart->set_3Q(-3);}
else {newpart->set_3Q(3);}
201 newpart->set_3Q(prt->chargeType());
212 if( pid == 12 || pid == 14 || pid == 16 || pid == 18 )
216 if((apid > 1000000) && (apid < 9000000))
221 Pythia8::Vec4 v4=prt->p();
222 fastjet::PseudoJet particleTemp(v4.px(),v4.py(),v4.pz(),v4.e());
223 fjInputs.push_back(particleTemp);
228 if(ischargedTrackHadron(prt,event))
231 Pythia8::Vec4 pos = prt->vProd();
232 Pythia8::Vec4 vdec = prt->vDec();
233 if(vdec.pT() < 33.0)
continue;
237 if (pos.pAbs() > 0.0001)
239 newpart->set_prod(
HEP::P4(pos.px(),pos.py(),pos.pz(),pos.e()));
241 newpart->set_decay(
HEP::P4(vdec.px(),vdec.py(),vdec.pz(),vdec.e()));
242 newpart->set_3Q(prt->chargeType());
244 OutEvt.add_charged_hadron(newpart);
255 std::vector<int> daughters = prt->daughterList();
256 for(
int di = 0; di < daughters.size(); di ++)
258 if (event[daughters[di]].idAbs() == 15)
270 Pythia8::Vec4 pos = prt->vProd();
271 if (pos.pAbs() > 0.001)
273 newpart->set_prod(
HEP::P4(pos.px(),pos.py(),pos.pz(),pos.e()));
276 if (pos.pAbs() > 0.001)
278 newpart->set_decay(
HEP::P4(pos.px(),pos.py(),pos.pz(),pos.e()));
287 if(isHSCP(prt,event))
293 Pythia8::Vec4 pos = prt->vProd();
295 if (pos.pAbs() > 0.001)
297 newpart->set_prod(
HEP::P4(pos.px(),pos.py(),pos.pz(),pos.e()));
306 if (pos.pAbs() > 0.0001)
308 newpart->set_decay(
HEP::P4(pos.px(),pos.py(),pos.pz(),pos.e()));
310 newpart->set_3Q(prt->chargeType());
311 OutEvt.add_HSCP(newpart);
324 std::vector<int> daughters = prt->daughterList();
325 for(
int di = 0; di < daughters.size(); di ++)
327 if (event[daughters[di]].idAbs() == 5)
337 Pythia8::Vec4 v4 = prt->p();
339 fastjet::PseudoJet tpjet(v4.px(),v4.py(),v4.pz(),v4.e());
341 bquark_momenta.push_back(tpjet);
351 std::uniform_int_distribution<> rd_el(0,pileups.size()-1);
353 static std::normal_distribution<double> zdist(0,53.0);
354 static std::normal_distribution<double> tdist(0,160e-12);
363 fastjet::ClusterSequence clustSeq(fjInputs, jetDef);
364 inclusiveJets = clustSeq.inclusive_jets(1.0);
365 jets = sorted_by_pt(inclusiveJets);
380 for(
int jp=0; jp< npileups; jp++)
382 int pileup_number=rd_el(engine);
384 double dz=zdist(engine);
385 double dt=tdist(engine);
388 OutEvt.
add_particles(pileups[pileup_number]->translate_particles(dz,dt));
389 OutEvt.add_charged_hadrons(pileups[pileup_number]->translate_charged_hadrons(dz,dt));
392 OutEvt.add_neutral_hadrons(pileups[pileup_number]->get_neutral_hadrons());
462 for(
auto const& jjet: jets)
465 for(
auto const& bquark : bquark_momenta)
467 if(bquark.delta_R(jjet) < Rjet) { btag =
true;
break;}
476 outjets.push_back(tjet);
500 void filleventPYTHIA_TEST(
HEP::Event &OutEvt, Pythia8::Event &evt,
double weight,
int npileups, std::vector<HEP::PileupEvent*> &pileups, std::mt19937 &engine)
506 OutEvt.set_weight(weight);
511 SortEvent_TEST(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