Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:31:20

0001 #include "TopQuarkAnalysis/TopJetCombination/interface/TtSemiLepHypothesis.h"
0002 
0003 #include "DataFormats/PatCandidates/interface/Particle.h"
0004 
0005 class TtSemiLepHypKinFit : public TtSemiLepHypothesis {
0006 public:
0007   explicit TtSemiLepHypKinFit(const edm::ParameterSet&);
0008 
0009 private:
0010   /// build the event hypothesis key
0011   void buildKey() override { key_ = TtSemiLeptonicEvent::kKinFit; };
0012   /// build event hypothesis from the reco objects of a semi-leptonic event
0013   void buildHypo(edm::Event&,
0014                  const edm::Handle<edm::View<reco::RecoCandidate> >&,
0015                  const edm::Handle<std::vector<pat::MET> >&,
0016                  const edm::Handle<std::vector<pat::Jet> >&,
0017                  std::vector<int>&,
0018                  const unsigned int iComb) override;
0019 
0020   edm::EDGetTokenT<std::vector<int> > statusToken_;
0021   edm::EDGetTokenT<std::vector<pat::Particle> > partonsHadPToken_;
0022   edm::EDGetTokenT<std::vector<pat::Particle> > partonsHadQToken_;
0023   edm::EDGetTokenT<std::vector<pat::Particle> > partonsHadBToken_;
0024   edm::EDGetTokenT<std::vector<pat::Particle> > partonsLepBToken_;
0025   edm::EDGetTokenT<std::vector<pat::Particle> > leptonsToken_;
0026   edm::EDGetTokenT<std::vector<pat::Particle> > neutrinosToken_;
0027 };
0028 
0029 TtSemiLepHypKinFit::TtSemiLepHypKinFit(const edm::ParameterSet& cfg)
0030     : TtSemiLepHypothesis(cfg),
0031       statusToken_(consumes<std::vector<int> >(cfg.getParameter<edm::InputTag>("status"))),
0032       partonsHadPToken_(consumes<std::vector<pat::Particle> >(cfg.getParameter<edm::InputTag>("partonsHadP"))),
0033       partonsHadQToken_(consumes<std::vector<pat::Particle> >(cfg.getParameter<edm::InputTag>("partonsHadQ"))),
0034       partonsHadBToken_(consumes<std::vector<pat::Particle> >(cfg.getParameter<edm::InputTag>("partonsHadB"))),
0035       partonsLepBToken_(consumes<std::vector<pat::Particle> >(cfg.getParameter<edm::InputTag>("partonsLepB"))),
0036       leptonsToken_(consumes<std::vector<pat::Particle> >(cfg.getParameter<edm::InputTag>("leptons"))),
0037       neutrinosToken_(consumes<std::vector<pat::Particle> >(cfg.getParameter<edm::InputTag>("neutrinos"))) {}
0038 
0039 void TtSemiLepHypKinFit::buildHypo(edm::Event& evt,
0040                                    const edm::Handle<edm::View<reco::RecoCandidate> >& leps,
0041                                    const edm::Handle<std::vector<pat::MET> >& mets,
0042                                    const edm::Handle<std::vector<pat::Jet> >& jets,
0043                                    std::vector<int>& match,
0044                                    const unsigned int iComb) {
0045   edm::Handle<std::vector<int> > status;
0046   evt.getByToken(statusToken_, status);
0047   if ((*status)[iComb] != 0) {
0048     // create empty hypothesis if kinematic fit did not converge
0049     return;
0050   }
0051 
0052   edm::Handle<std::vector<pat::Particle> > partonsHadP;
0053   edm::Handle<std::vector<pat::Particle> > partonsHadQ;
0054   edm::Handle<std::vector<pat::Particle> > partonsHadB;
0055   edm::Handle<std::vector<pat::Particle> > partonsLepB;
0056   edm::Handle<std::vector<pat::Particle> > leptons;
0057   edm::Handle<std::vector<pat::Particle> > neutrinos;
0058 
0059   evt.getByToken(partonsHadPToken_, partonsHadP);
0060   evt.getByToken(partonsHadQToken_, partonsHadQ);
0061   evt.getByToken(partonsHadBToken_, partonsHadB);
0062   evt.getByToken(partonsLepBToken_, partonsLepB);
0063   evt.getByToken(leptonsToken_, leptons);
0064   evt.getByToken(neutrinosToken_, neutrinos);
0065 
0066   // -----------------------------------------------------
0067   // add jets
0068   // -----------------------------------------------------
0069   if (!(partonsHadP->empty() || partonsHadQ->empty() || partonsHadB->empty() || partonsLepB->empty())) {
0070     lightQ_ = makeCandidate(partonsHadP, iComb);
0071     lightQBar_ = makeCandidate(partonsHadQ, iComb);
0072     hadronicB_ = makeCandidate(partonsHadB, iComb);
0073     leptonicB_ = makeCandidate(partonsLepB, iComb);
0074   }
0075 
0076   // -----------------------------------------------------
0077   // add lepton
0078   // -----------------------------------------------------
0079   if (!leptons->empty()) {
0080     lepton_ = makeCandidate(leptons, iComb);
0081   }
0082   match.push_back(0);
0083 
0084   // -----------------------------------------------------
0085   // add neutrino
0086   // -----------------------------------------------------
0087   if (!neutrinos->empty()) {
0088     neutrino_ = makeCandidate(neutrinos, iComb);
0089   }
0090 }
0091 
0092 #include "FWCore/Framework/interface/MakerMacros.h"
0093 DEFINE_FWK_MODULE(TtSemiLepHypKinFit);