File indexing completed on 2023-03-17 11:18:32
0001 #ifndef __InputGenJetsParticleSelector__
0002 #define __InputGenJetsParticleSelector__
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016 #include "DataFormats/Provenance/interface/Provenance.h"
0017 #include "FWCore/Framework/interface/Event.h"
0018 #include "DataFormats/Candidate/interface/CandidateFwd.h"
0019 #include "DataFormats/Candidate/interface/Candidate.h"
0020
0021 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0022
0023 #include "FWCore/Framework/interface/global/EDProducer.h"
0024 #include "DataFormats/Common/interface/EDProductfwd.h"
0025 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0026
0027 class InputGenJetsParticleSelector : public edm::global::EDProducer<> {
0028
0029 public:
0030 typedef std::vector<bool> ParticleBitmap;
0031 typedef std::vector<const reco::Candidate *> ParticleVector;
0032
0033 InputGenJetsParticleSelector(const edm::ParameterSet &);
0034 ~InputGenJetsParticleSelector() override;
0035
0036
0037 void produce(edm::StreamID, edm::Event &evt, const edm::EventSetup &evtSetup) const override;
0038
0039 bool getPartonicFinalState() const { return partonicFinalState; }
0040 bool getExcludeResonances() const { return excludeResonances; }
0041 bool getTausAndJets() const { return tausAsJets; }
0042 double getPtMin() const { return ptMin; }
0043 const std::vector<unsigned int> &getIgnoredParticles() const { return ignoreParticleIDs; }
0044
0045 void setPartonicFinalState(bool flag = true) { partonicFinalState = flag; }
0046 void setExcludeResonances(bool flag = true) { excludeResonances = flag; }
0047 void setTausAsJets(bool flag = true) { tausAsJets = flag; }
0048 void setPtMin(double ptMin) { this->ptMin = ptMin; }
0049 bool isParton(int pdgId) const;
0050 static bool isHadron(int pdgId);
0051 static bool isResonance(int pdgId);
0052
0053 bool isIgnored(int pdgId) const;
0054 bool hasPartonChildren(ParticleBitmap &invalid, const ParticleVector &p, const reco::Candidate *particle) const;
0055
0056 enum ResonanceState { kNo = 0, kDirect, kIndirect };
0057 ResonanceState fromResonance(ParticleBitmap &invalid, const ParticleVector &p, const reco::Candidate *particle) const;
0058
0059
0060
0061 private:
0062
0063 InputGenJetsParticleSelector() {}
0064
0065 edm::InputTag inTag;
0066 edm::InputTag prunedInTag;
0067 int testPartonChildren(ParticleBitmap &invalid, const ParticleVector &p, const reco::Candidate *particle) const;
0068
0069 std::vector<unsigned int> ignoreParticleIDs;
0070 std::vector<unsigned int> excludeFromResonancePids;
0071 void setExcludeFromResonancePids(const std::vector<unsigned int> &particleIDs);
0072 void setIgnoredParticles(const std::vector<unsigned int> &particleIDs);
0073 bool isExcludedFromResonance(int pdgId) const;
0074
0075 bool partonicFinalState;
0076 bool excludeResonances;
0077 bool tausAsJets;
0078 bool isMiniAOD;
0079 double ptMin;
0080
0081 edm::EDGetTokenT<reco::CandidateView> input_genpartcoll_token_;
0082 edm::EDGetTokenT<reco::CandidateView> input_prunedgenpartcoll_token_;
0083 };
0084
0085 #endif