4 Pythia8::Vec4 getMissingMomentum_ATLAS(Pythia8::Event &event)
6 Pythia8::Vec4 missingETvec;
7 std::vector<int> metaStableMothers;
9 for (
int i = 0; i <
event.size(); ++i) {
10 Pythia8::Particle ptc =
event[i];
11 if (!ptc.isFinal())
continue;
20 if (fabs(ptc.vProd().pz()) > 13000. || ptc.vProd().pT() > 10000.){
22 int mom = ptc.mother1();
24 if(std::find(metaStableMothers.begin(), metaStableMothers.end(), mom) == metaStableMothers.end()) {
25 metaStableMothers.push_back(mom);
32 if (ptc.idAbs() == 12 || ptc.idAbs() == 14 || ptc.idAbs() == 16){
34 missingETvec += ptc.p();
37 if (ptc.isHadron())
continue;
38 if (ptc.idAbs() == 22)
continue;
39 if (ptc.chargeType() !=0)
continue;
40 if (ptc.isVisible() && ptc.m() < 10.)
continue;
44 missingETvec += ptc.p();
48 for (
int imom = 0; imom < metaStableMothers.size(); ++imom) {
49 Pythia8::Particle ptc =
event[metaStableMothers[imom]];
53 if (ptc.idAbs() == 12 || ptc.idAbs() == 14 || ptc.idAbs() == 16){
55 missingETvec += ptc.p();
58 if (ptc.isHadron())
continue;
59 if (ptc.idAbs() == 22)
continue;
60 if (ptc.chargeType() !=0)
continue;
61 if (ptc.isVisible() && ptc.m() < 10.)
continue;
65 missingETvec += ptc.p();
93 void SortEvent_ATLAS(Pythia8::Event &event,
HEP::Event &OutEvt,
int npileups, std::vector<HEP::PileupEvent*> &pileups,
double &Rjet, std::mt19937 &engine){
95 fastjet::JetDefinition jetDef(fastjet::antikt_algorithm, Rjet);
96 std::vector <HEP::Jet*> outjets;
98 std::vector <fastjet::PseudoJet> inclusiveJets, jets;
100 std::vector <fastjet::PseudoJet> pileupJets, pJInputs;
105 std::vector <fastjet::PseudoJet> fjInputs, bquark_momenta;
108 bquark_momenta.resize(0);
113 for(
int mpart = event.size()-1; mpart>=0 ; mpart--)
116 Pythia8::Particle* prt = &
event[mpart];
133 Pythia8::Vec4 pos = prt->vProd();
134 if (pos.pAbs() > 0.0001)
136 newpart->set_prod(
HEP::P4(pos.px(),pos.py(),pos.pz(),pos.e()));
138 newpart->set_3Q(prt->chargeType());
139 OutEvt.add_charged_hadron(newpart);
144 OutEvt.add_neutral_hadron(newpart->
mom());
154 Pythia8::Vec4 pos = prt->vProd();
157 if (pos.pAbs() > 0.0001)
159 newpart->set_prod(
HEP::P4(pos.px(),pos.py(),pos.pz(),pos.e()));
165 if(apid == 11 || apid == 13 || apid == 22 )
167 if(!fromHadron(mpart,event))
171 if(apid == 11 || apid ==13 )
173 if(pid > 0) {newpart->set_3Q(-3);}
else {newpart->set_3Q(3);}
187 OutEvt.add_neutral_hadron(newpart->
mom());
192 OutEvt.add_charged_hadron(newpart);
203 newpart->set_3Q(prt->chargeType());
215 if( pid == 12 || pid == 14 || pid == 16 || pid == 18 )
219 if((apid > 1000000) && (apid < 9000000))
224 Pythia8::Vec4 v4=prt->p();
225 fastjet::PseudoJet particleTemp(v4.px(),v4.py(),v4.pz(),v4.e());
226 fjInputs.push_back(particleTemp);
235 std::vector<int> daughters = prt->daughterList();
236 for(
int di = 0; di < daughters.size(); di ++)
238 if (event[daughters[di]].idAbs() == 15)
250 Pythia8::Vec4 pos = prt->vProd();
251 if (pos.pAbs() > 0.001)
253 newpart->set_prod(
HEP::P4(pos.px(),pos.py(),pos.pz(),pos.e()));
256 if (pos.pAbs() > 0.001)
258 newpart->set_decay(
HEP::P4(pos.px(),pos.py(),pos.pz(),pos.e()));
274 std::vector<int> daughters = prt->daughterList();
275 for(
int di = 0; di < daughters.size(); di ++)
277 if (event[daughters[di]].idAbs() == 5)
287 Pythia8::Vec4 v4 = prt->p();
289 fastjet::PseudoJet tpjet(v4.px(),v4.py(),v4.pz(),v4.e());
291 bquark_momenta.push_back(tpjet);
354 std::uniform_int_distribution<> rd_el(0,pileups.size()-1);
356 static std::normal_distribution<double> zdist(0,53.0);
357 static std::normal_distribution<double> tdist(0,160e-12);
361 fastjet::ClusterSequence clustSeq(fjInputs, jetDef);
362 inclusiveJets = clustSeq.inclusive_jets(1.0);
363 jets = sorted_by_pt(inclusiveJets);
378 for(
int jp=0; jp< npileups; jp++)
380 int pileup_number=rd_el(engine);
382 double dz=zdist(engine);
383 double dt=tdist(engine);
384 OutEvt.
add_particles(pileups[pileup_number]->translate_particles(dz,dt));
385 OutEvt.add_neutral_hadrons(pileups[pileup_number]->get_neutral_hadrons());
387 OutEvt.add_charged_hadrons(pileups[pileup_number]->translate_charged_hadrons(dz,dt));
455 for(
auto const& jjet: jets)
458 for(
auto const& bquark : bquark_momenta)
460 if(bquark.delta_R(jjet) < Rjet) { btag =
true;
break;}
469 outjets.push_back(tjet);
508 void filleventPYTHIA_ATLAS(
HEP::Event &OutEvt, Pythia8::Event &evt,
double weight,
int npileups, std::vector<HEP::PileupEvent*> &pileups, std::mt19937 &engine)
515 OutEvt.set_weight(weight);
521 SortEvent_ATLAS(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
const std::vector< Particle * > & muons() const
Get prompt muons.
Definition: heputil.h:661
const std::vector< Particle * > & electrons() const
Get prompt electrons.
Definition: heputil.h:651
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
void smearElectronEnergy(std::vector< HEP::Particle * > &electrons, std::mt19937 &engine)
Randomly smear the supplied electrons' momenta by parameterised resolutions.
Definition: smearing.h:413
void smearMuonMomentum(std::vector< HEP::Particle * > &muons, std::mt19937 &engine)
Randomly smear the supplied muons' momenta by parameterised resolutions.
Definition: smearing.h:460