1 #ifndef MUSCLEFITMUONSELECTOR 2 #define MUSCLEFITMUONSELECTOR 17 #include "HepMC/GenParticle.h" 18 #include "HepMC/GenEvent.h" 36 const std::vector<int>&
resfind,
39 const bool compareToSimTracks,
71 std::vector<MuScleFitMuon>&
muons,
72 std::vector<GenMuonPair>& genPair,
73 std::vector<std::pair<lorentzVector, lorentzVector> >& simPair,
88 const std::vector<const pat::Muon*>& collMuSel,
89 std::vector<GenMuonPair>& genPair,
92 std::vector<GenMuonPair>& genPair,
93 std::vector<std::pair<lorentzVector, lorentzVector> >& simPair,
99 std::vector<std::pair<lorentzVector, lorentzVector> >& simPair,
103 template <
typename T>
105 std::vector<MuScleFitMuon>
muons;
106 typename std::vector<T>::const_iterator
track;
111 Double_t hitsTk(0), hitsMuon(0), ptError(0);
112 if (
const reco::Muon* myMu = dynamic_cast<const reco::Muon*>(&(*
track))) {
113 hitsTk = myMu->innerTrack()->hitPattern().numberOfValidTrackerHits();
114 hitsMuon = myMu->innerTrack()->hitPattern().numberOfValidMuonHits();
115 ptError = myMu->innerTrack()->ptError();
116 }
else if (
const pat::Muon* myMu = dynamic_cast<const pat::Muon*>(&(*
track))) {
117 hitsTk = myMu->innerTrack()->hitPattern().numberOfValidTrackerHits();
118 hitsMuon = myMu->innerTrack()->hitPattern().numberOfValidMuonHits();
119 ptError = myMu->innerTrack()->ptError();
120 }
else if (
const reco::Track* myMu = dynamic_cast<const reco::Track*>(&(*
track))) {
121 hitsTk = myMu->hitPattern().numberOfValidTrackerHits();
122 hitsMuon = myMu->hitPattern().numberOfValidMuonHits();
123 ptError = myMu->ptError();
129 std::cout <<
"[MuScleFitMuonSelector::fillMuonCollection] after MuScleFitMuon initialization" << std::endl;
139 template <
typename T>
std::vector< GenParticle > GenParticleCollection
collection of GenParticles
MuScleFitMuonSelector(edm::ConsumesCollector &iC, const edm::InputTag &muonLabel, const int muonType, const bool PATmuons, const std::vector< int > &resfind, const bool speedup, const std::string &genParticlesName, const bool compareToSimTracks, const edm::InputTag &simTracksCollectionName, const bool sherpa, const bool debug)
std::pair< lorentzVector, lorentzVector > findSimMuFromRes(const edm::Handle< edm::HepMCProduct > &evtMC, const edm::Handle< edm::SimTrackContainer > &simTracks)
const std::string genParticlesName_
void selectMuons(const edm::Event &event, std::vector< MuScleFitMuon > &muons, std::vector< GenMuonPair > &genPair, std::vector< std::pair< lorentzVector, lorentzVector > > &simPair, MuScleFitPlotter *plotter)
Main method used to select muons of type specified by muonType_ from the collection specified by muon...
std::vector< CompositeCandidate > CompositeCandidateCollection
collection of Candidate objects
std::vector< MuScleFitMuon > fillMuonCollection(const std::vector< T > &tracks)
Template function used to convert the muon collection to a vector of reco::LeafCandidate.
std::vector< Track > TrackCollection
collection of Tracks
std::vector< CaloMuon > CaloMuonCollection
collection of Muon objects
bool selTrackerMuon(const pat::Muon *aMuon)
Apply the Onia cuts to select trackerMuons.
void selectGeneratedMuons(const edm::Handle< pat::CompositeCandidateCollection > &collAll, const std::vector< const pat::Muon *> &collMuSel, std::vector< GenMuonPair > &genPair, MuScleFitPlotter *plotter)
For PATmuons the generator information is read directly from the PAT object.
const edm::EDGetTokenT< edm::HepMCProduct > evtMCToken_
void selectSimulatedMuons(const edm::Event &event, const bool ifHepMC, edm::Handle< edm::HepMCProduct > evtMC, std::vector< std::pair< lorentzVector, lorentzVector > > &simPair, MuScleFitPlotter *plotter)
const edm::EDGetTokenT< reco::CaloMuonCollection > caloMuonToken_
~MuScleFitMuonSelector()=default
const edm::EDGetTokenT< reco::GenParticleCollection > genParticleToken_
std::vector< Muon > MuonCollection
collection of Muon objects
const edm::EDGetTokenT< pat::MuonCollection > patMuonToken_
const bool compareToSimTracks_
static const unsigned int motherPdgIdArray[6]
const edm::InputTag muonLabel_
reco::Particle::LorentzVector lorentzVector
const edm::EDGetTokenT< edm::SimTrackContainer > simTrackToken_
auto const & tracks
cannot be loose
GenMuonPair findGenMuFromRes(const reco::GenParticleCollection *genParticles)
void selectGenSimMuons(const edm::Event &event, std::vector< GenMuonPair > &genPair, std::vector< std::pair< lorentzVector, lorentzVector > > &simPair, MuScleFitPlotter *plotter)
const edm::InputTag simTracksCollectionName_
bool selGlobalMuon(const pat::Muon *aMuon)
Apply the Onia cuts to select globalMuons.
const edm::EDGetTokenT< reco::MuonCollection > recoMuonToken_
void takeSelectedMuonType(const T &muon, std::vector< reco::Track > &tracks)
Template function used to extract the selected muon type from the muon collection.
const reco::Candidate * getStatus3Muon(const reco::Candidate *status3Muon)
const edm::EDGetTokenT< pat::CompositeCandidateCollection > onia2MuMuToken_
const std::vector< int > resfind_
math::XYZTLorentzVector LorentzVector
Lorentz vector.
std::vector< SimTrack > SimTrackContainer
Analysis-level muon class.
const edm::EDGetTokenT< reco::TrackCollection > trackCollectionToken_
const reco::Candidate * getStatus1Muon(const reco::Candidate *status3Muon)