1 #ifndef GeneratorInterface_RivetInterface_RivetAnalysis_H 2 #define GeneratorInterface_RivetInterface_RivetAnalysis_H 6 #include "Rivet/Analysis.hh" 7 #include "Rivet/Projections/FinalState.hh" 8 #include "Rivet/Particle.hh" 9 #include "Rivet/Particle.fhh" 10 #include "Rivet/Event.hh" 11 #include "Rivet/Projections/FastJets.hh" 12 #include "Rivet/Projections/JetAlg.hh" 13 #include "Rivet/Projections/ChargedLeptons.hh" 14 #include "Rivet/Projections/PromptFinalState.hh" 15 #include "Rivet/Projections/DressedLeptons.hh" 16 #include "Rivet/Projections/VetoedFinalState.hh" 17 #include "Rivet/Projections/IdentifiedFinalState.hh" 18 #include "Rivet/Projections/MissingMomentum.hh" 19 #include "Rivet/Tools/RivetHepMC.hh" 52 _usePromptFinalStates(pset.getParameter<
bool>(
"usePromptFinalStates")),
53 _excludePromptLeptonsFromJetClustering(pset.getParameter<
bool>(
"excludePromptLeptonsFromJetClustering")),
54 _excludeNeutrinosFromJetClustering(pset.getParameter<
bool>(
"excludeNeutrinosFromJetClustering")),
55 _doJetClustering(pset.getParameter<
bool>(
"doJetClustering")),
57 _particleMinPt (pset.getParameter<double>(
"particleMinPt")),
58 _particleMaxEta (pset.getParameter<double>(
"particleMaxEta")),
60 _lepConeSize (pset.getParameter<double>(
"lepConeSize")),
61 _lepMinPt (pset.getParameter<double>(
"lepMinPt")),
62 _lepMaxEta (pset.getParameter<double>(
"lepMaxEta")),
64 _jetConeSize (pset.getParameter<double>(
"jetConeSize")),
65 _jetMinPt (pset.getParameter<double>(
"jetMinPt")),
66 _jetMaxEta (pset.getParameter<double>(
"jetMaxEta")),
68 _fatJetConeSize (pset.getParameter<double>(
"fatJetConeSize")),
69 _fatJetMinPt (pset.getParameter<double>(
"fatJetMinPt")),
70 _fatJetMaxEta (pset.getParameter<double>(
"fatJetMaxEta")),
72 _phoMinPt (pset.getParameter<double>(
"phoMinPt")),
73 _phoMaxEta (pset.getParameter<double>(
"phoMaxEta")),
74 _phoIsoConeSize (pset.getParameter<double>(
"phoIsoConeSize")),
75 _phoMaxRelIso (pset.getParameter<double>(
"phoMaxRelIso"))
82 Cut particle_cut = (Cuts::abseta < _particleMaxEta) and (Cuts::pT > _particleMinPt*
GeV);
83 Cut lepton_cut = (Cuts::abseta < _lepMaxEta) and (Cuts::pT > _lepMinPt*
GeV);
86 FinalState fs(particle_cut);
88 addProjection(fs,
"FS");
91 ChargedLeptons charged_leptons(fs);
92 IdentifiedFinalState
photons(fs);
95 PromptFinalState prompt_leptons(charged_leptons);
96 prompt_leptons.acceptMuonDecays(
true);
97 prompt_leptons.acceptTauDecays(
true);
98 addProjection(prompt_leptons,
"PromptLeptons");
100 PromptFinalState prompt_photons(photons);
101 prompt_photons.acceptMuonDecays(
true);
102 prompt_photons.acceptTauDecays(
true);
107 DressedLeptons dressed_leptons(prompt_photons, prompt_leptons, _lepConeSize,
109 if (not _usePromptFinalStates)
110 dressed_leptons = DressedLeptons(photons, charged_leptons, _lepConeSize,
112 addProjection(dressed_leptons,
"DressedLeptons");
115 addProjection(photons,
"Photons");
118 VetoedFinalState fsForJets(fs);
119 if (_usePromptFinalStates and _excludePromptLeptonsFromJetClustering)
120 fsForJets.addVetoOnThisFinalState(dressed_leptons);
121 JetAlg::InvisiblesStrategy invisiblesStrategy = JetAlg::DECAY_INVISIBLES;
122 if (_excludeNeutrinosFromJetClustering)
123 invisiblesStrategy = JetAlg::NO_INVISIBLES;
124 addProjection(FastJets(fsForJets, FastJets::ANTIKT, _jetConeSize,
125 JetAlg::ALL_MUONS, invisiblesStrategy),
"Jets");
128 addProjection(FastJets(fsForJets, FastJets::ANTIKT, _fatJetConeSize),
"FatJets");
132 neutrinos.acceptNeutrinos();
133 if (_usePromptFinalStates) {
134 PromptFinalState prompt_neutrinos(neutrinos);
135 prompt_neutrinos.acceptMuonDecays(
true);
136 prompt_neutrinos.acceptTauDecays(
true);
137 addProjection(prompt_neutrinos,
"Neutrinos");
140 addProjection(neutrinos,
"Neutrinos");
143 addProjection(MissingMomentum(fs),
"MET");
155 Cut jet_cut = (Cuts::abseta < _jetMaxEta) and (Cuts::pT > _jetMinPt*
GeV);
156 Cut fatjet_cut = (Cuts::abseta < _fatJetMaxEta) and (Cuts::pT > _fatJetMinPt*
GeV);
158 _leptons = applyProjection<DressedLeptons>(
event,
"DressedLeptons").particlesByPt();
160 Particles promptleptons = applyProjection<PromptFinalState>(
event,
"PromptLeptons").
particles();
161 for (
auto & lepton : _leptons ) {
162 const auto &
cl = lepton.constituents().front();
163 for (
auto const & pl : promptleptons ) {
164 if (
cl.momentum() == pl.momentum()) {
165 for (
auto &
p : pl.ancestors()) {
166 if (
p.abspid() == 15) {
167 p.setMomentum(
p.momentum()*10
e-20);
168 lepton.addConstituent(
p,
false);
176 Particles fsparticles = applyProjection<FinalState>(
event,
"FS").
particles();
178 for (
auto &
photon : applyProjection<FinalState>(event,
"Photons").particlesByPt() ) {
186 double photonptsum = 0;
188 for (
auto &fsparticle : fsparticles) {
196 photonptsum += fsparticle.pt();
202 _photons.push_back(
photon);
206 if (_doJetClustering) {
207 _jets = apply<FastJets>(
event,
"Jets").jetsByPt(jet_cut);
208 _fatjets = apply<FastJets>(
event,
"FatJets").jetsByPt(fatjet_cut);
210 _neutrinos = applyProjection<FinalState>(
event,
"Neutrinos").particlesByPt();
211 _met = applyProjection<MissingMomentum>(
event,
"MET").missingMomentum().p3();
214 for (
auto&
jet : _jets) {
215 for (
auto&
pt :
jet.tags()) {
217 pt.addConstituent(
p,
false);
221 for (
auto&
jet : _fatjets) {
222 for (
auto&
pt :
jet.tags()) {
224 pt.addConstituent(
p,
false);
bool isLepton(const Candidate &part)
ParticleVector neutrinos() const
RivetAnalysis(const edm::ParameterSet &pset)
ParticleVector photons() const
bool _excludeNeutrinosFromJetClustering
Abs< T >::type abs(const T &t)
void analyze(const Event &event) override
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
std::string status() const override
bool _excludePromptLeptonsFromJetClustering
bool _usePromptFinalStates
ParticleVector _neutrinos
ParticleVector leptons() const