diff --git a/PhysicsTools/NanoAOD/plugins/BToKeeProducer.cc b/PhysicsTools/NanoAOD/plugins/BToKeeProducer.cc index b1492097e781c..a7c5d31fcfc67 100644 --- a/PhysicsTools/NanoAOD/plugins/BToKeeProducer.cc +++ b/PhysicsTools/NanoAOD/plugins/BToKeeProducer.cc @@ -94,6 +94,7 @@ class BToKeeProducer : public edm::EDProducer { edm::EDGetTokenT beamSpotSrc_; edm::EDGetTokenT> electronSrc_; edm::EDGetTokenT> PFCandSrc_; + edm::EDGetTokenT> lostTrackSrc_; double ptMinEle_; double etaMaxEle_; @@ -103,6 +104,7 @@ class BToKeeProducer : public edm::EDProducer { bool diEleCharge_; double JPsiMassConstraint_; bool save2TrkRefit_; + bool useLostTracks_; float ElectronMass_ = 0.5109989e-3; float ElectronMassErr_ = 3.1*1e-12; @@ -119,6 +121,7 @@ BToKeeProducer::BToKeeProducer(const edm::ParameterSet &iConfig): beamSpotSrc_( consumes ( iConfig.getParameter( "beamSpot" ) ) ), electronSrc_( consumes> ( iConfig.getParameter( "electronCollection" ) ) ), PFCandSrc_( consumes> ( iConfig.getParameter( "PFCandCollection" ) ) ), +lostTrackSrc_( consumes> ( iConfig.getParameter( "lostTrackCollection" ) ) ), ptMinEle_( iConfig.getParameter( "ElectronMinPt" ) ), etaMaxEle_( iConfig.getParameter( "ElectronMaxEta" ) ), ptMinKaon_( iConfig.getParameter( "KaonMinPt" ) ), @@ -126,7 +129,8 @@ etaMaxKaon_( iConfig.getParameter( "KaonMaxEta" ) ), DCASigMinKaon_( iConfig.getParameter( "KaonMinDCASig" ) ), diEleCharge_( iConfig.getParameter( "DiElectronChargeCheck" ) ), JPsiMassConstraint_( iConfig.getParameter( "JPsiMassConstraint" ) ), -save2TrkRefit_( iConfig.getParameter( "save2TrackRefit" ) ) +save2TrkRefit_( iConfig.getParameter( "save2TrackRefit" ) ), +useLostTracks_( iConfig.getParameter( "useLostTracks" ) ) { produces(); } @@ -153,17 +157,19 @@ void BToKeeProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) edm::Handle> electronHandle; edm::Handle> pfCandHandle; + edm::Handle> lostTrackHandle; iEvent.getByToken(electronSrc_, electronHandle); iEvent.getByToken(PFCandSrc_, pfCandHandle); - + if(useLostTracks_) iEvent.getByToken(lostTrackSrc_, lostTrackHandle); + unsigned int electronNumber = electronHandle->size(); unsigned int pfCandNumber = pfCandHandle->size(); - + unsigned int lostTrackNumber = useLostTracks_ ? lostTrackHandle->size() : 0; + // Output collection std::unique_ptr result( new pat::CompositeCandidateCollection ); - if(electronNumber>1){ // loop on all the eeK triplets @@ -191,6 +197,7 @@ void BToKeeProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) double EELSBS = -1.; double EELSBSErr = -1.; double EEVtx_CL = -1.; + double EEVtx_Chi2 = -1.; double EE_mass_err = -1.; RefCountedKinematicParticle refitEE; @@ -222,16 +229,18 @@ void BToKeeProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) EELSBS = EELS.first; EELSBSErr = EELS.second; + EEVtx_Chi2 = (double)refitVertexEE->chiSquared(); EEVtx_CL = TMath::Prob((double)refitVertexEE->chiSquared(), int(rint(refitVertexEE->degreesOfFreedom()))); } } - + //Kaon - for (unsigned int k = 0; k < pfCandNumber; ++k) { - - const pat::PackedCandidate & pfCand = (*pfCandHandle)[k]; + for (unsigned int k = 0; k < (pfCandNumber+lostTrackNumber); ++k) { + + bool isPFCand = ketaMaxKaon_) continue; @@ -265,6 +274,7 @@ void BToKeeProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) double LSBS = BToKEELS.first; double LSBSErr = BToKEELS.second; + double BToKEEVtx_Chi2 = (double)refitVertexBToKEE->chiSquared(); double BToKEEVtx_CL = TMath::Prob((double)refitVertexBToKEE->chiSquared(), int(rint(refitVertexBToKEE->degreesOfFreedom()))); @@ -278,19 +288,21 @@ void BToKeeProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) BToKEECand.addDaughter( pfCand, "kaon"); BToKEECand.addUserInt("ele1_index", i); BToKEECand.addUserInt("ele2_index", j); - BToKEECand.addUserInt("kaon_index", k); + BToKEECand.addUserInt("kaon_index", isPFCand ? k : -1); + BToKEECand.addUserInt("kaon_lostTrack_index", isPFCand ? -1 : k-pfCandNumber); + BToKEECand.addUserInt("kaon_isPFCand", (int)isPFCand); math::XYZVector refitEle1V3D = refitEle1->refittedTransientTrack().track().momentum(); BToKEECand.addUserFloat("ele1_pt", sqrt(refitEle1V3D.perp2())); BToKEECand.addUserFloat("ele1_eta", refitEle1V3D.eta()); BToKEECand.addUserFloat("ele1_phi", refitEle1V3D.phi()); - BToKEECand.addUserFloat("ele1_charge", refitEle1->currentState().particleCharge()); + BToKEECand.addUserInt("ele1_charge", refitEle1->currentState().particleCharge()); math::XYZVector refitEle2V3D = refitEle2->refittedTransientTrack().track().momentum(); BToKEECand.addUserFloat("ele2_pt", sqrt(refitEle2V3D.perp2())); BToKEECand.addUserFloat("ele2_eta", refitEle2V3D.eta()); BToKEECand.addUserFloat("ele2_phi", refitEle2V3D.phi()); - BToKEECand.addUserFloat("ele2_charge", refitEle2->currentState().particleCharge()); + BToKEECand.addUserInt("ele2_charge", refitEle2->currentState().particleCharge()); TLorentzVector ele1cand; ele1cand.SetPtEtaPhiM(sqrt(refitEle1V3D.perp2()), refitEle1V3D.eta(), refitEle1V3D.phi(), ElectronMass_); @@ -302,7 +314,7 @@ void BToKeeProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) BToKEECand.addUserFloat("kaon_pt", sqrt(refitKaonV3D.perp2())); BToKEECand.addUserFloat("kaon_eta", refitKaonV3D.eta()); BToKEECand.addUserFloat("kaon_phi", refitKaonV3D.phi()); - BToKEECand.addUserFloat("kaon_charge",refitKaon->currentState().particleCharge()); + BToKEECand.addUserInt("kaon_charge", refitKaon->currentState().particleCharge()); BToKEECand.addUserFloat("kaon_DCASig", DCABS/DCABSErr); BToKEECand.addUserInt("eeRefit", (int)passedDiEle); @@ -313,6 +325,7 @@ void BToKeeProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) BToKEECand.addUserFloat("ee_mass_err", (passedDiEle)? EE_mass_err : -1.); BToKEECand.addUserFloat("ee_Lxy", (passedDiEle)? (float) EELSBS/EELSBSErr : -1.); BToKEECand.addUserFloat("ee_ctxy", (passedDiEle)? (float) EELSBS/sqrt(refitEEV3D.perp2()) : -1.); + BToKEECand.addUserFloat("ee_Chi2_vtx", (passedDiEle)? (float) EEVtx_Chi2 : -1.); BToKEECand.addUserFloat("ee_CL_vtx", (passedDiEle)? (float) EEVtx_CL : -1.); math::XYZVector refitBToKEEV3D = refitEle1V3D + refitEle2V3D + refitKaonV3D; @@ -323,6 +336,7 @@ void BToKeeProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) BToKEECand.addUserFloat("mass_err", mass_err); BToKEECand.addUserFloat("Lxy", (float) LSBS/LSBSErr); BToKEECand.addUserFloat("ctxy", (float) LSBS/sqrt(refitBToKEEV3D.perp2())); + BToKEECand.addUserFloat("Chi2_vtx", (float) BToKEEVtx_Chi2); BToKEECand.addUserFloat("CL_vtx", (float) BToKEEVtx_CL); BToKEECand.addUserFloat("cosAlpha", (float) cosAlpha); @@ -333,6 +347,7 @@ void BToKeeProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) float mass_err_2trk = -9999.; float Lxy_2trk = -9999.; float ctxy_2trk = -9999.; + float Chi2_vtx_2trk = -9999.; float CL_vtx_2trk = -9999.; float cosAlpha_2trk = -9999.; @@ -373,6 +388,7 @@ void BToKeeProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) double LSBSErr_2trk = BToKJPsiEELS.second; Lxy_2trk = LSBS_2trk/LSBSErr_2trk; ctxy_2trk = LSBS_2trk/pt_2trk; + Chi2_vtx_2trk = (double)refitVertexBToKJPsiEE->chiSquared(); CL_vtx_2trk = TMath::Prob((double)refitVertexBToKJPsiEE->chiSquared(), int(rint(refitVertexBToKJPsiEE->degreesOfFreedom()))); cosAlpha_2trk = computeCosAlpha(refitBToKJPsiEE,refitVertexBToKJPsiEE,beamSpot); @@ -388,12 +404,12 @@ void BToKeeProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) BToKEECand.addUserFloat("mass_err_2trk", mass_err_2trk); BToKEECand.addUserFloat("Lxy_2trk", Lxy_2trk); BToKEECand.addUserFloat("ctxy_2trk", ctxy_2trk); + BToKEECand.addUserFloat("Chi2_vtx_2trk", Chi2_vtx_2trk); BToKEECand.addUserFloat("CL_vtx_2trk", CL_vtx_2trk); BToKEECand.addUserFloat("cosAlpha_2trk", cosAlpha_2trk); result->push_back(BToKEECand); - } } diff --git a/PhysicsTools/NanoAOD/plugins/BToKmumuProducer.cc b/PhysicsTools/NanoAOD/plugins/BToKmumuProducer.cc index f2198cdeaf06a..da55a84a2b3df 100644 --- a/PhysicsTools/NanoAOD/plugins/BToKmumuProducer.cc +++ b/PhysicsTools/NanoAOD/plugins/BToKmumuProducer.cc @@ -95,6 +95,7 @@ class BToKmumuProducer : public edm::EDProducer { edm::EDGetTokenT vertexSrc_; edm::EDGetTokenT> muonSrc_; edm::EDGetTokenT> PFCandSrc_; + edm::EDGetTokenT> lostTrackSrc_; double ptMinMu_; double etaMaxMu_; @@ -104,6 +105,7 @@ class BToKmumuProducer : public edm::EDProducer { bool diMuonCharge_; double JPsiMassConstraint_; bool save2TrkRefit_; + bool useLostTracks_; float MuonMass_ = 0.10565837; float MuonMassErr_ = 3.5*1e-9; @@ -121,6 +123,7 @@ beamSpotSrc_( consumes ( iConfig.getParameter( "b vertexSrc_( consumes ( iConfig.getParameter( "vertexCollection" ) ) ), muonSrc_( consumes> ( iConfig.getParameter( "muonCollection" ) ) ), PFCandSrc_( consumes> ( iConfig.getParameter( "PFCandCollection" ) ) ), +lostTrackSrc_( consumes> ( iConfig.getParameter( "lostTrackCollection" ) ) ), ptMinMu_( iConfig.getParameter( "MuonMinPt" ) ), etaMaxMu_( iConfig.getParameter( "MuonMaxEta" ) ), ptMinKaon_( iConfig.getParameter( "KaonMinPt" ) ), @@ -128,7 +131,8 @@ etaMaxKaon_( iConfig.getParameter( "KaonMaxEta" ) ), DCASigMinKaon_( iConfig.getParameter( "KaonMinDCASig" ) ), diMuonCharge_( iConfig.getParameter( "DiMuonChargeCheck" ) ), JPsiMassConstraint_( iConfig.getParameter( "JPsiMassConstraint" ) ), -save2TrkRefit_( iConfig.getParameter( "save2TrackRefit" ) ) +save2TrkRefit_( iConfig.getParameter( "save2TrackRefit" ) ), +useLostTracks_( iConfig.getParameter( "useLostTracks" ) ) { produces(); } @@ -158,12 +162,15 @@ void BToKmumuProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup edm::Handle> muonHandle; edm::Handle> pfCandHandle; + edm::Handle> lostTrackHandle; iEvent.getByToken(muonSrc_, muonHandle); iEvent.getByToken(PFCandSrc_, pfCandHandle); + if(useLostTracks_) iEvent.getByToken(lostTrackSrc_, lostTrackHandle); unsigned int muonNumber = muonHandle->size(); unsigned int pfCandNumber = pfCandHandle->size(); + unsigned int lostTrackNumber = useLostTracks_ ? lostTrackHandle->size() : 0; // Output collection std::unique_ptr result( new pat::CompositeCandidateCollection ); @@ -195,6 +202,7 @@ void BToKmumuProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup double MuMuLSBS = -1.; double MuMuLSBSErr = -1.; + double MuMuVtx_Chi2 = -1.; double MuMuVtx_CL = -1.; double MuMu_mass_err = -1.; @@ -226,6 +234,7 @@ void BToKmumuProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup MuMuLSBS = MuMuLS.first; MuMuLSBSErr = MuMuLS.second; + MuMuVtx_Chi2 = (double)refitVertexMuMu->chiSquared(); MuMuVtx_CL = TMath::Prob((double)refitVertexMuMu->chiSquared(), int(rint(refitVertexMuMu->degreesOfFreedom()))); @@ -234,9 +243,9 @@ void BToKmumuProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup } //Kaon - for (unsigned int k = 0; k < pfCandNumber; ++k) { - - const pat::PackedCandidate & pfCand = (*pfCandHandle)[k]; + for (unsigned int k = 0; k < (pfCandNumber+lostTrackNumber); ++k) { + bool isPFCand = ketaMaxKaon_) continue; @@ -244,8 +253,8 @@ void BToKmumuProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup pair DCA = computeDCA(pfCand, bFieldHandle, beamSpot); - double DCABS = DCA.first; - double DCABSErr = DCA.second; + double DCABS = DCA.first; + double DCABSErr = DCA.second; if(fabs(DCABS/DCABSErr)chiSquared(); double BToKMuMuVtx_CL = TMath::Prob((double)refitVertexBToKMuMu->chiSquared(), int(rint(refitVertexBToKMuMu->degreesOfFreedom()))); @@ -284,19 +294,21 @@ void BToKmumuProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup BToKMuMuCand.addDaughter( pfCand, "kaon"); BToKMuMuCand.addUserInt("mu1_index", i); BToKMuMuCand.addUserInt("mu2_index", j); - BToKMuMuCand.addUserInt("kaon_index", k); + BToKMuMuCand.addUserInt("kaon_index", isPFCand ? k : -1); + BToKMuMuCand.addUserInt("kaon_lostTrack_index", isPFCand ? -1 : k-pfCandNumber); + BToKMuMuCand.addUserInt("kaon_isPFCand", (int)isPFCand); math::XYZVector refitMu1V3D = refitMuon1->refittedTransientTrack().track().momentum(); BToKMuMuCand.addUserFloat("mu1_pt", sqrt(refitMu1V3D.perp2())); BToKMuMuCand.addUserFloat("mu1_eta", refitMu1V3D.eta()); BToKMuMuCand.addUserFloat("mu1_phi", refitMu1V3D.phi()); - BToKMuMuCand.addUserFloat("mu1_charge", refitMuon1->currentState().particleCharge()); + BToKMuMuCand.addUserInt("mu1_charge", refitMuon1->currentState().particleCharge()); math::XYZVector refitMu2V3D = refitMuon2->refittedTransientTrack().track().momentum(); BToKMuMuCand.addUserFloat("mu2_pt", sqrt(refitMu2V3D.perp2())); BToKMuMuCand.addUserFloat("mu2_eta", refitMu2V3D.eta()); BToKMuMuCand.addUserFloat("mu2_phi", refitMu2V3D.phi()); - BToKMuMuCand.addUserFloat("mu2_charge", refitMuon2->currentState().particleCharge()); + BToKMuMuCand.addUserInt("mu2_charge", refitMuon2->currentState().particleCharge()); TLorentzVector muon1cand; muon1cand.SetPtEtaPhiM(sqrt(refitMu1V3D.perp2()), refitMu1V3D.eta(), refitMu1V3D.phi(), MuonMass_); @@ -308,7 +320,7 @@ void BToKmumuProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup BToKMuMuCand.addUserFloat("kaon_pt", sqrt(refitKaonV3D.perp2())); BToKMuMuCand.addUserFloat("kaon_eta", refitKaonV3D.eta()); BToKMuMuCand.addUserFloat("kaon_phi", refitKaonV3D.phi()); - BToKMuMuCand.addUserFloat("kaon_charge",refitKaon->currentState().particleCharge()); + BToKMuMuCand.addUserInt("kaon_charge",refitKaon->currentState().particleCharge()); BToKMuMuCand.addUserFloat("kaon_DCASig", DCABS/DCABSErr); BToKMuMuCand.addUserInt("mumuRefit", (int)passedDiMuon); @@ -319,6 +331,7 @@ void BToKmumuProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup BToKMuMuCand.addUserFloat("mumu_mass_err", (passedDiMuon)? MuMu_mass_err : -1.); BToKMuMuCand.addUserFloat("mumu_Lxy", (passedDiMuon)? (float) MuMuLSBS/MuMuLSBSErr : -1.); BToKMuMuCand.addUserFloat("mumu_ctxy", (passedDiMuon)? (float) MuMuLSBS/sqrt(refitMuMuV3D.perp2()) : -1.); + BToKMuMuCand.addUserFloat("mumu_Chi2_vtx", (passedDiMuon)? (float) MuMuVtx_Chi2 : -1.); BToKMuMuCand.addUserFloat("mumu_CL_vtx", (passedDiMuon)? (float) MuMuVtx_CL : -1.); math::XYZVector refitBToKMuMuV3D = refitMu1V3D + refitMu2V3D + refitKaonV3D; @@ -330,6 +343,7 @@ void BToKmumuProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup BToKMuMuCand.addUserFloat("Lxy", (float) LSBS/LSBSErr); BToKMuMuCand.addUserFloat("ctxy", (float) LSBS/sqrt(refitBToKMuMuV3D.perp2())); + BToKMuMuCand.addUserFloat("Chi2_vtx", (float) BToKMuMuVtx_Chi2); BToKMuMuCand.addUserFloat("CL_vtx", (float) BToKMuMuVtx_CL); BToKMuMuCand.addUserFloat("cosAlpha", (float) cosAlpha); @@ -340,6 +354,7 @@ void BToKmumuProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup float mass_err_2trk = -9999.; float Lxy_2trk = -9999.; float ctxy_2trk = -9999.; + float Chi2_vtx_2trk = -9999.; float CL_vtx_2trk = -9999.; float cosAlpha_2trk = -9999.; @@ -380,6 +395,7 @@ void BToKmumuProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup double LSBSErr_2trk = BToKJPsiMuMuLS.second; Lxy_2trk = LSBS_2trk/LSBSErr_2trk; ctxy_2trk = LSBS_2trk/pt_2trk; + Chi2_vtx_2trk = (double)refitVertexBToKJPsiMuMu->chiSquared(); CL_vtx_2trk = TMath::Prob((double)refitVertexBToKJPsiMuMu->chiSquared(), int(rint(refitVertexBToKJPsiMuMu->degreesOfFreedom()))); cosAlpha_2trk = computeCosAlpha(refitBToKJPsiMuMu,refitVertexBToKJPsiMuMu,beamSpot); @@ -395,6 +411,7 @@ void BToKmumuProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup BToKMuMuCand.addUserFloat("mass_err_2trk", mass_err_2trk); BToKMuMuCand.addUserFloat("Lxy_2trk", Lxy_2trk); BToKMuMuCand.addUserFloat("ctxy_2trk", ctxy_2trk); + BToKMuMuCand.addUserFloat("Chi2_vtx_2trk", Chi2_vtx_2trk); BToKMuMuCand.addUserFloat("CL_vtx_2trk", CL_vtx_2trk); BToKMuMuCand.addUserFloat("cosAlpha_2trk", cosAlpha_2trk); diff --git a/PhysicsTools/NanoAOD/plugins/BToKsteeProducer.cc b/PhysicsTools/NanoAOD/plugins/BToKsteeProducer.cc index 34815b05830ef..30ab07c7704c2 100644 --- a/PhysicsTools/NanoAOD/plugins/BToKsteeProducer.cc +++ b/PhysicsTools/NanoAOD/plugins/BToKsteeProducer.cc @@ -112,6 +112,7 @@ class BToKsteeProducer : public edm::EDProducer { edm::EDGetTokenT beamSpotSrc_; edm::EDGetTokenT> electronSrc_; edm::EDGetTokenT> PFCandSrc_; + edm::EDGetTokenT> lostTrackSrc_; double ptMinEle_; double etaMaxEle_; @@ -127,6 +128,7 @@ class BToKsteeProducer : public edm::EDProducer { double KstMassConstraint_; bool save2TrkRefit_; bool save4TrkRefit_; + bool useLostTracks_; float ElectronMass_ = 0.5109989e-3; float ElectronMassErr_ = 3.1*1e-12; @@ -147,6 +149,7 @@ BToKsteeProducer::BToKsteeProducer(const edm::ParameterSet &iConfig): beamSpotSrc_( consumes ( iConfig.getParameter( "beamSpot" ) ) ), electronSrc_( consumes> ( iConfig.getParameter( "electronCollection" ) ) ), PFCandSrc_( consumes> ( iConfig.getParameter( "PFCandCollection" ) ) ), +lostTrackSrc_( consumes> ( iConfig.getParameter( "lostTrackCollection" ) ) ), ptMinEle_( iConfig.getParameter( "ElectronMinPt" ) ), etaMaxEle_( iConfig.getParameter( "ElectronMaxEta" ) ), ptMinKaon_( iConfig.getParameter( "KaonMinPt" ) ), @@ -160,7 +163,8 @@ KstCharge_( iConfig.getParameter( "KstarChargeCheck" ) ), JPsiMassConstraint_( iConfig.getParameter( "JPsiMassConstraint" ) ), KstMassConstraint_( iConfig.getParameter( "KstMassConstraint" ) ), save2TrkRefit_( iConfig.getParameter( "save2TrackRefit" ) ), -save4TrkRefit_( iConfig.getParameter( "save4TrackRefit" ) ) +save4TrkRefit_( iConfig.getParameter( "save4TrackRefit" ) ), +useLostTracks_( iConfig.getParameter( "useLostTracks" ) ) { produces(); } @@ -185,12 +189,15 @@ void BToKsteeProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup edm::Handle> electronHandle; edm::Handle> pfCandHandle; + edm::Handle> lostTrackHandle; iEvent.getByToken(electronSrc_, electronHandle); iEvent.getByToken(PFCandSrc_, pfCandHandle); + if(useLostTracks_) iEvent.getByToken(lostTrackSrc_, lostTrackHandle); unsigned int electronNumber = electronHandle->size(); unsigned int pfCandNumber = pfCandHandle->size(); + unsigned int lostTrackNumber = useLostTracks_ ? lostTrackHandle->size() : 0; // Output collection std::unique_ptr result( new pat::CompositeCandidateCollection ); @@ -220,6 +227,7 @@ void BToKsteeProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup double EELSBS = -1.; double EELSBSErr = -1.; + double EEVtx_Chi2 = -1.; double EEVtx_CL = -1.; double EE_mass_err = -1.; @@ -249,6 +257,7 @@ void BToKsteeProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup EELSBS = EELS.first; EELSBSErr = EELS.second; + EEVtx_Chi2 = (double)refitVertexEE->chiSquared(); EEVtx_CL = TMath::Prob((double)refitVertexEE->chiSquared(), int(rint(refitVertexEE->degreesOfFreedom()))); @@ -259,9 +268,10 @@ void BToKsteeProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup } //Kaon - for (unsigned int k = 0; k < pfCandNumber; ++k) { + for (unsigned int k = 0; k < (pfCandNumber+lostTrackNumber); ++k) { - const pat::PackedCandidate & kaon = (*pfCandHandle)[k]; + bool kaon_isPFCand = ketaMaxKaon_) continue; @@ -274,11 +284,12 @@ void BToKsteeProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup if(fabs(DCABS_kaon/DCABSErr_kaon)etaMaxPion_) continue; @@ -310,6 +321,7 @@ void BToKsteeProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup double KstLSBS = KstLS.first; double KstLSBSErr = KstLS.second; + double KstVtx_Chi2 = (double)refitVertexKst->chiSquared(); double KstVtx_CL = TMath::Prob((double)refitVertexKst->chiSquared(), int(rint(refitVertexKst->degreesOfFreedom()))); @@ -340,6 +352,7 @@ void BToKsteeProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup double LSBS = BToKstEELS.first; double LSBSErr = BToKstEELS.second; + double BToKstEEVtx_Chi2 = (double)refitVertexBToKstEE->chiSquared(); double BToKstEEVtx_CL = TMath::Prob((double)refitVertexBToKstEE->chiSquared(), int(rint(refitVertexBToKstEE->degreesOfFreedom()))); @@ -362,18 +375,22 @@ void BToKsteeProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup BToKstEECand.addUserInt("ele1_index", i); BToKstEECand.addUserInt("ele2_index", j); - BToKstEECand.addUserInt("kaon_index", k); - BToKstEECand.addUserInt("pion_index", l); + BToKstEECand.addUserInt("kaon_index", kaon_isPFCand ? k : -1); + BToKstEECand.addUserInt("kaon_lostTrack_index", kaon_isPFCand ? -1 : k-pfCandNumber); + BToKstEECand.addUserInt("kaon_isPFCand", (int)kaon_isPFCand); + BToKstEECand.addUserInt("pion_index", pion_isPFCand ? l : -1); + BToKstEECand.addUserInt("pion_lostTrack_index", pion_isPFCand ? -1 : l-pfCandNumber); + BToKstEECand.addUserInt("pion_isPFCand", (int)pion_isPFCand); BToKstEECand.addUserFloat("ele1_pt", sqrt(refitEle1V3D.perp2())); BToKstEECand.addUserFloat("ele1_eta", refitEle1V3D.eta()); BToKstEECand.addUserFloat("ele1_phi", refitEle1V3D.phi()); - BToKstEECand.addUserFloat("ele1_charge", refitEle1->currentState().particleCharge()); + BToKstEECand.addUserInt("ele1_charge", refitEle1->currentState().particleCharge()); BToKstEECand.addUserFloat("ele2_pt", sqrt(refitEle2V3D.perp2())); BToKstEECand.addUserFloat("ele2_eta", refitEle2V3D.eta()); BToKstEECand.addUserFloat("ele2_phi", refitEle2V3D.phi()); - BToKstEECand.addUserFloat("ele2_charge", refitEle2->currentState().particleCharge()); + BToKstEECand.addUserInt("ele2_charge", refitEle2->currentState().particleCharge()); TLorentzVector ele1cand; ele1cand.SetPtEtaPhiM(sqrt(refitEle1V3D.perp2()), refitEle1V3D.eta(), refitEle1V3D.phi(), ElectronMass_); @@ -384,13 +401,13 @@ void BToKsteeProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup BToKstEECand.addUserFloat("kaon_pt", sqrt(refitKaonV3D_Kst.perp2())); BToKstEECand.addUserFloat("kaon_eta", refitKaonV3D_Kst.eta()); BToKstEECand.addUserFloat("kaon_phi", refitKaonV3D_Kst.phi()); - BToKstEECand.addUserFloat("kaon_charge", refitKaon_Kst->currentState().particleCharge()); + BToKstEECand.addUserInt("kaon_charge", refitKaon_Kst->currentState().particleCharge()); BToKstEECand.addUserFloat("kaon_DCASig", DCABS_kaon/DCABSErr_kaon); BToKstEECand.addUserFloat("pion_pt", sqrt(refitPionV3D_Kst.perp2())); BToKstEECand.addUserFloat("pion_eta", refitPionV3D_Kst.eta()); BToKstEECand.addUserFloat("pion_phi", refitPionV3D_Kst.phi()); - BToKstEECand.addUserFloat("pion_charge", refitPion_Kst->currentState().particleCharge()); + BToKstEECand.addUserInt("pion_charge", refitPion_Kst->currentState().particleCharge()); BToKstEECand.addUserFloat("pion_DCASig", DCABS_pion/DCABSErr_pion); BToKstEECand.addUserFloat("Kst_pt", sqrt(refitKstV3D.perp2())); @@ -400,6 +417,7 @@ void BToKsteeProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup BToKstEECand.addUserFloat("Kst_mass_err", Kst_mass_err); BToKstEECand.addUserFloat("Kst_Lxy", (float) KstLSBS/KstLSBSErr); BToKstEECand.addUserFloat("Kst_ctxy", (float) KstLSBS/sqrt(refitKstV3D.perp2())); + BToKstEECand.addUserFloat("Kst_Chi2_vtx", (float) KstVtx_Chi2); BToKstEECand.addUserFloat("Kst_CL_vtx", (float) KstVtx_CL); BToKstEECand.addUserFloat("pt", sqrt(refitBToKstEEV3D.perp2())); @@ -409,6 +427,7 @@ void BToKsteeProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup BToKstEECand.addUserFloat("mass_err", mass_err); BToKstEECand.addUserFloat("Lxy", (float) LSBS/LSBSErr); BToKstEECand.addUserFloat("ctxy", (float) LSBS/sqrt(refitBToKstEEV3D.perp2())); + BToKstEECand.addUserFloat("Chi2_vtx", (float) BToKstEEVtx_Chi2); BToKstEECand.addUserFloat("CL_vtx", (float) BToKstEEVtx_CL); BToKstEECand.addUserFloat("cosAlpha", (float) cosAlpha); @@ -421,6 +440,7 @@ void BToKsteeProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup BToKstEECand.addUserFloat("ee_mass_err", (passedDiEle)? EE_mass_err : -1.); BToKstEECand.addUserFloat("ee_Lxy", (passedDiEle)? (float) EELSBS/EELSBSErr : -1.); BToKstEECand.addUserFloat("ee_ctxy", (passedDiEle)? (float) EELSBS/sqrt(refitEEV3D.perp2()) : -1.); + BToKstEECand.addUserFloat("ee_Chi2_vtx", (passedDiEle)? (float) EEVtx_Chi2 : -1.); BToKstEECand.addUserFloat("ee_CL_vtx", (passedDiEle)? (float) EEVtx_CL : -1.); @@ -432,6 +452,7 @@ void BToKsteeProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup float mass_err_2trk = -9999.; float Lxy_2trk = -9999.; float ctxy_2trk = -9999.; + float Chi2_vtx_2trk = -9999.; float CL_vtx_2trk = -9999.; float cosAlpha_2trk = -9999.; @@ -470,6 +491,7 @@ void BToKsteeProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup double LSBSErr_2trk = BToKstJPsiEELS.second; Lxy_2trk = LSBS_2trk/LSBSErr_2trk; ctxy_2trk = LSBS_2trk/pt_2trk; + Chi2_vtx_2trk = (double)refitVertexBToKstJPsiEE->chiSquared(); CL_vtx_2trk = TMath::Prob((double)refitVertexBToKstJPsiEE->chiSquared(), int(rint(refitVertexBToKstJPsiEE->degreesOfFreedom()))); cosAlpha_2trk = computeCosAlpha(refitBToKstJPsiEE,refitVertexBToKstJPsiEE,beamSpot); @@ -486,6 +508,7 @@ void BToKsteeProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup BToKstEECand.addUserFloat("mass_err_2trk", mass_err_2trk); BToKstEECand.addUserFloat("Lxy_2trk", Lxy_2trk); BToKstEECand.addUserFloat("ctxy_2trk", ctxy_2trk); + BToKstEECand.addUserFloat("Chi2_vtx_2trk", Chi2_vtx_2trk); BToKstEECand.addUserFloat("CL_vtx_2trk", CL_vtx_2trk); BToKstEECand.addUserFloat("cosAlpha_2trk", cosAlpha_2trk); @@ -499,6 +522,7 @@ void BToKsteeProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup float mass_err_4trk = -9999.; float Lxy_4trk = -9999.; float ctxy_4trk = -9999.; + float Chi2_vtx_4trk = -9999.; float CL_vtx_4trk = -9999.; float cosAlpha_4trk = -9999.; @@ -542,6 +566,7 @@ void BToKsteeProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup double LSBSErr_4trk = BToKPiEELS.second; Lxy_4trk = LSBS_4trk/LSBSErr_4trk; ctxy_4trk = LSBS_4trk/pt_4trk; + Chi2_vtx_4trk = (double)refitVertexBToKPiEE->chiSquared(); CL_vtx_4trk = TMath::Prob((double)refitVertexBToKPiEE->chiSquared(), int(rint(refitVertexBToKPiEE->degreesOfFreedom()))); cosAlpha_4trk = computeCosAlpha(refitBToKPiEE,refitVertexBToKPiEE,beamSpot); @@ -558,6 +583,7 @@ void BToKsteeProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup BToKstEECand.addUserFloat("mass_err_4trk", mass_err_4trk); BToKstEECand.addUserFloat("Lxy_4trk", Lxy_4trk); BToKstEECand.addUserFloat("ctxy_4trk", ctxy_4trk); + BToKstEECand.addUserFloat("Chi2_vtx_4trk", Chi2_vtx_4trk); BToKstEECand.addUserFloat("CL_vtx_4trk", CL_vtx_4trk); BToKstEECand.addUserFloat("cosAlpha_4trk", cosAlpha_4trk); diff --git a/PhysicsTools/NanoAOD/plugins/BToKstmumuProducer.cc b/PhysicsTools/NanoAOD/plugins/BToKstmumuProducer.cc index 4f60e7cc66b6d..6dcc9f5c0b9f4 100644 --- a/PhysicsTools/NanoAOD/plugins/BToKstmumuProducer.cc +++ b/PhysicsTools/NanoAOD/plugins/BToKstmumuProducer.cc @@ -115,6 +115,7 @@ class BToKstmumuProducer : public edm::EDProducer { edm::EDGetTokenT vertexSrc_; edm::EDGetTokenT> muonSrc_; edm::EDGetTokenT> PFCandSrc_; + edm::EDGetTokenT> lostTrackSrc_; double ptMinMu_; double etaMaxMu_; @@ -130,6 +131,7 @@ class BToKstmumuProducer : public edm::EDProducer { double KstMassConstraint_; bool save2TrkRefit_; bool save4TrkRefit_; + bool useLostTracks_; float MuonMass_ = 0.10565837; float MuonMassErr_ = 3.5*1e-9; @@ -151,6 +153,7 @@ beamSpotSrc_( consumes ( iConfig.getParameter( "b vertexSrc_( consumes ( iConfig.getParameter( "vertexCollection" ) ) ), muonSrc_( consumes> ( iConfig.getParameter( "muonCollection" ) ) ), PFCandSrc_( consumes> ( iConfig.getParameter( "PFCandCollection" ) ) ), +lostTrackSrc_( consumes> ( iConfig.getParameter( "lostTrackCollection" ) ) ), ptMinMu_( iConfig.getParameter( "MuonMinPt" ) ), etaMaxMu_( iConfig.getParameter( "MuonMaxEta" ) ), ptMinKaon_( iConfig.getParameter( "KaonMinPt" ) ), @@ -164,7 +167,8 @@ KstCharge_( iConfig.getParameter( "KstarChargeCheck" ) ), JPsiMassConstraint_( iConfig.getParameter( "JPsiMassConstraint" ) ), KstMassConstraint_( iConfig.getParameter( "KstMassConstraint" ) ), save2TrkRefit_( iConfig.getParameter( "save2TrackRefit" ) ), -save4TrkRefit_( iConfig.getParameter( "save4TrackRefit" ) ) +save4TrkRefit_( iConfig.getParameter( "save4TrackRefit" ) ), +useLostTracks_( iConfig.getParameter( "useLostTracks" ) ) { produces(); } @@ -191,12 +195,15 @@ void BToKstmumuProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSet edm::Handle> muonHandle; edm::Handle> pfCandHandle; + edm::Handle> lostTrackHandle; iEvent.getByToken(muonSrc_, muonHandle); iEvent.getByToken(PFCandSrc_, pfCandHandle); + if(useLostTracks_) iEvent.getByToken(lostTrackSrc_, lostTrackHandle); unsigned int muonNumber = muonHandle->size(); unsigned int pfCandNumber = pfCandHandle->size(); + unsigned int lostTrackNumber = useLostTracks_ ? lostTrackHandle->size() : 0; // Output collection std::unique_ptr result( new pat::CompositeCandidateCollection ); @@ -226,6 +233,7 @@ void BToKstmumuProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSet double MuMuLSBS = -1.; double MuMuLSBSErr = -1.; + double MuMuVtx_Chi2 = -1.; double MuMuVtx_CL = -1.; double MuMu_mass_err = -1.; @@ -251,6 +259,7 @@ void BToKstmumuProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSet MuMuLSBS = MuMuLS.first; MuMuLSBSErr = MuMuLS.second; + MuMuVtx_Chi2 = (double)refitVertexMuMu->chiSquared(); MuMuVtx_CL = TMath::Prob((double)refitVertexMuMu->chiSquared(), int(rint(refitVertexMuMu->degreesOfFreedom()))); @@ -266,9 +275,10 @@ void BToKstmumuProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSet //Kaon - for (unsigned int k = 0; k < pfCandNumber; ++k) { + for (unsigned int k = 0; k < (pfCandNumber+lostTrackNumber); ++k) { - const pat::PackedCandidate & kaon = (*pfCandHandle)[k]; + bool kaon_isPFCand = ketaMaxKaon_) continue; @@ -285,7 +295,8 @@ void BToKstmumuProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSet if(k==l) continue; - const pat::PackedCandidate & pion = (*pfCandHandle)[l]; + bool pion_isPFCand = letaMaxPion_) continue; @@ -317,6 +328,7 @@ void BToKstmumuProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSet double KstLSBS = KstLS.first; double KstLSBSErr = KstLS.second; + double KstVtx_Chi2 = (double)refitVertexKst->chiSquared(); double KstVtx_CL = TMath::Prob((double)refitVertexKst->chiSquared(), int(rint(refitVertexKst->degreesOfFreedom()))); @@ -346,6 +358,7 @@ void BToKstmumuProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSet double LSBS = BToKstMuMuLS.first; double LSBSErr = BToKstMuMuLS.second; + double BToKstMuMuVtx_Chi2 = (double)refitVertexBToKstMuMu->chiSquared(); double BToKstMuMuVtx_CL = TMath::Prob((double)refitVertexBToKstMuMu->chiSquared(), int(rint(refitVertexBToKstMuMu->degreesOfFreedom()))); @@ -366,18 +379,22 @@ void BToKstmumuProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSet BToKstMuMuCand.addUserInt("mu1_index", i); BToKstMuMuCand.addUserInt("mu2_index", j); - BToKstMuMuCand.addUserInt("kaon_index", k); - BToKstMuMuCand.addUserInt("pion_index", l); + BToKstMuMuCand.addUserInt("kaon_index", kaon_isPFCand ? k : -1); + BToKstMuMuCand.addUserInt("kaon_lostTrack_index", kaon_isPFCand ? -1 : k-pfCandNumber); + BToKstMuMuCand.addUserInt("kaon_isPFCand", (int)kaon_isPFCand); + BToKstMuMuCand.addUserInt("pion_index", pion_isPFCand ? l : -1); + BToKstMuMuCand.addUserInt("pion_lostTrack_index", pion_isPFCand ? -1 : l-pfCandNumber); + BToKstMuMuCand.addUserInt("pion_isPFCand", (int)pion_isPFCand); BToKstMuMuCand.addUserFloat("mu1_pt", sqrt(refitMuon1V3D.perp2())); BToKstMuMuCand.addUserFloat("mu1_eta", refitMuon1V3D.eta()); BToKstMuMuCand.addUserFloat("mu1_phi", refitMuon1V3D.phi()); - BToKstMuMuCand.addUserFloat("mu1_charge", refitMu1->currentState().particleCharge()); + BToKstMuMuCand.addUserInt("mu1_charge", refitMu1->currentState().particleCharge()); BToKstMuMuCand.addUserFloat("mu2_pt", sqrt(refitMuon2V3D.perp2())); BToKstMuMuCand.addUserFloat("mu2_eta", refitMuon2V3D.eta()); BToKstMuMuCand.addUserFloat("mu2_phi", refitMuon2V3D.phi()); - BToKstMuMuCand.addUserFloat("mu2_charge", refitMu2->currentState().particleCharge()); + BToKstMuMuCand.addUserInt("mu2_charge", refitMu2->currentState().particleCharge()); TLorentzVector muon1cand; muon1cand.SetPtEtaPhiM(sqrt(refitMuon1V3D.perp2()), refitMuon1V3D.eta(), refitMuon1V3D.phi(), MuonMass_); @@ -388,13 +405,13 @@ void BToKstmumuProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSet BToKstMuMuCand.addUserFloat("kaon_pt", sqrt(refitKaonV3D_Kst.perp2())); BToKstMuMuCand.addUserFloat("kaon_eta", refitKaonV3D_Kst.eta()); BToKstMuMuCand.addUserFloat("kaon_phi", refitKaonV3D_Kst.phi()); - BToKstMuMuCand.addUserFloat("kaon_charge",refitKaon_Kst->currentState().particleCharge()); + BToKstMuMuCand.addUserInt("kaon_charge",refitKaon_Kst->currentState().particleCharge()); BToKstMuMuCand.addUserFloat("kaon_DCASig", DCABS_kaon/DCABSErr_kaon); BToKstMuMuCand.addUserFloat("pion_pt", sqrt(refitPionV3D_Kst.perp2())); BToKstMuMuCand.addUserFloat("pion_eta", refitPionV3D_Kst.eta()); BToKstMuMuCand.addUserFloat("pion_phi", refitPionV3D_Kst.phi()); - BToKstMuMuCand.addUserFloat("pion_charge",refitPion_Kst->currentState().particleCharge()); + BToKstMuMuCand.addUserInt("pion_charge",refitPion_Kst->currentState().particleCharge()); BToKstMuMuCand.addUserFloat("pion_DCASig", DCABS_pion/DCABSErr_pion); BToKstMuMuCand.addUserFloat("Kst_pt", sqrt(refitKstV3D.perp2())); @@ -404,6 +421,7 @@ void BToKstmumuProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSet BToKstMuMuCand.addUserFloat("Kst_mass_err", Kst_mass_err); BToKstMuMuCand.addUserFloat("Kst_Lxy", (float) KstLSBS/KstLSBSErr); BToKstMuMuCand.addUserFloat("Kst_ctxy", (float) KstLSBS/sqrt(refitKstV3D.perp2())); + BToKstMuMuCand.addUserFloat("Kst_Chi2_vtx", (float) KstVtx_Chi2); BToKstMuMuCand.addUserFloat("Kst_CL_vtx", (float) KstVtx_CL); BToKstMuMuCand.addUserFloat("pt", sqrt(refitBToKstMuMuV3D.perp2())); @@ -413,6 +431,7 @@ void BToKstmumuProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSet BToKstMuMuCand.addUserFloat("mass_err", mass_err); BToKstMuMuCand.addUserFloat("Lxy", (float) LSBS/LSBSErr); BToKstMuMuCand.addUserFloat("ctxy", (float) LSBS/sqrt(refitBToKstMuMuV3D.perp2())); + BToKstMuMuCand.addUserFloat("Chi2_vtx", (float) BToKstMuMuVtx_Chi2); BToKstMuMuCand.addUserFloat("CL_vtx", (float) BToKstMuMuVtx_CL); BToKstMuMuCand.addUserFloat("cosAlpha", (float) cosAlpha); @@ -424,6 +443,7 @@ void BToKstmumuProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSet BToKstMuMuCand.addUserFloat("mumu_mass_err", (passedDiMuon)? MuMu_mass_err : -1.); BToKstMuMuCand.addUserFloat("mumu_Lxy", (passedDiMuon)? (float) MuMuLSBS/MuMuLSBSErr : -1.); BToKstMuMuCand.addUserFloat("mumu_ctxy", (passedDiMuon)? (float) MuMuLSBS/sqrt(refitMuMuV3D.perp2()) : -1.); + BToKstMuMuCand.addUserFloat("mumu_Chi2_vtx", (passedDiMuon)? (float) MuMuVtx_Chi2 : -1.); BToKstMuMuCand.addUserFloat("mumu_CL_vtx", (passedDiMuon)? (float) MuMuVtx_CL : -1.); bool passed_2trk = false; @@ -434,6 +454,7 @@ void BToKstmumuProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSet float mass_err_2trk = -9999.; float Lxy_2trk = -9999.; float ctxy_2trk = -9999.; + float Chi2_vtx_2trk = -9999.; float CL_vtx_2trk = -9999.; float cosAlpha_2trk = -9999.; @@ -473,6 +494,7 @@ void BToKstmumuProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSet double LSBSErr_2trk = BToKstJPsiMuMuLS.second; Lxy_2trk = LSBS_2trk/LSBSErr_2trk; ctxy_2trk = LSBS_2trk/pt_2trk; + Chi2_vtx_2trk = (double)refitVertexBToKstJPsiMuMu->chiSquared(); CL_vtx_2trk = TMath::Prob((double)refitVertexBToKstJPsiMuMu->chiSquared(), int(rint(refitVertexBToKstJPsiMuMu->degreesOfFreedom()))); cosAlpha_2trk = computeCosAlpha(refitBToKstJPsiMuMu,refitVertexBToKstJPsiMuMu,beamSpot); @@ -490,6 +512,7 @@ void BToKstmumuProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSet BToKstMuMuCand.addUserFloat("Lxy_2trk", Lxy_2trk); BToKstMuMuCand.addUserFloat("ctxy_2trk", ctxy_2trk); BToKstMuMuCand.addUserFloat("CL_vtx_2trk", CL_vtx_2trk); + BToKstMuMuCand.addUserFloat("Chi2_vtx_2trk", Chi2_vtx_2trk); BToKstMuMuCand.addUserFloat("cosAlpha_2trk", cosAlpha_2trk); bool passed_4trk = false; @@ -500,6 +523,7 @@ void BToKstmumuProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSet float mass_err_4trk = -9999.; float Lxy_4trk = -9999.; float ctxy_4trk = -9999.; + float Chi2_vtx_4trk = -9999.; float CL_vtx_4trk = -9999.; float cosAlpha_4trk = -9999.; @@ -540,6 +564,7 @@ void BToKstmumuProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSet double LSBSErr_4trk = BToKPiMuMuLS.second; Lxy_4trk = LSBS_4trk/LSBSErr_4trk; ctxy_4trk = LSBS_4trk/pt_4trk; + Chi2_vtx_4trk = (double)refitVertexBToKPiMuMu->chiSquared(); CL_vtx_4trk = TMath::Prob((double)refitVertexBToKPiMuMu->chiSquared(), int(rint(refitVertexBToKPiMuMu->degreesOfFreedom()))); cosAlpha_4trk = computeCosAlpha(refitBToKPiMuMu,refitVertexBToKPiMuMu,beamSpot); @@ -556,6 +581,7 @@ void BToKstmumuProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSet BToKstMuMuCand.addUserFloat("mass_err_4trk", mass_err_4trk); BToKstMuMuCand.addUserFloat("Lxy_4trk", Lxy_4trk); BToKstMuMuCand.addUserFloat("ctxy_4trk", ctxy_4trk); + BToKstMuMuCand.addUserFloat("Chi2_vtx_4trk", Chi2_vtx_4trk); BToKstMuMuCand.addUserFloat("CL_vtx_4trk", CL_vtx_4trk); BToKstMuMuCand.addUserFloat("cosAlpha_4trk", cosAlpha_4trk); diff --git a/PhysicsTools/NanoAOD/python/BToKee_cff.py b/PhysicsTools/NanoAOD/python/BToKee_cff.py index 700f32c2a467a..06eec212bdae6 100644 --- a/PhysicsTools/NanoAOD/python/BToKee_cff.py +++ b/PhysicsTools/NanoAOD/python/BToKee_cff.py @@ -4,8 +4,9 @@ BToKee=cms.EDProducer("BToKeeProducer", beamSpot=cms.InputTag("offlineBeamSpot"), - electronCollection = cms.InputTag("linkedObjects","electrons"),#ref slimmedElectronsWithUserData: nanoAOD ele collection has pT>5 GeV, can go lower here + electronCollection = cms.InputTag("linkedObjects","electrons"), PFCandCollection=cms.InputTag("packedPFCandidates"), + lostTrackCollection = cms.InputTag("lostTracks"), ElectronMinPt=cms.double(1.), ElectronMaxEta=cms.double(2.4), KaonMinPt=cms.double(1.), @@ -13,25 +14,13 @@ KaonMinDCASig=cms.double(-1.), DiElectronChargeCheck=cms.bool(False), JPsiMassConstraint=cms.double(-1), #2-trk refitting uses measured di-ele mass - save2TrackRefit=cms.bool(False) + save2TrackRefit=cms.bool(False), + useLostTracks=cms.bool(False) ) #Example not used for now: could replace BToKee collection in BToKeeTable or be used in a cloned BToKJPsieeTable -BToKJPsiee=cms.EDProducer("BToKeeProducer", - beamSpot=cms.InputTag("offlineBeamSpot"), - electronCollection=cms.InputTag("slimmedElectronsWithUserData"), #NanoAOD electron collection has pT>5 GeV, can go lower here - PFCandCollection=cms.InputTag("packedPFCandidates"), - ElectronMinPt=cms.double(1.), - ElectronMaxEta=cms.double(2.4), - KaonMinPt=cms.double(1.), - KaonMaxEta=cms.double(2.4), - KaonMinDCASig=cms.double(-1.), - DiElectronChargeCheck=cms.bool(False), - JPsiMassConstraint=cms.double(3.096916), #2-trk refitting uses JPsi mass - save2TrackRefit=cms.bool(True) - ) - +BToKJPsiee=BToKee.clone(JPsiMassConstraint = cms.double(3.096916)) BToKeeTable=cms.EDProducer("SimpleCompositeCandidateFlatTableProducer", src=cms.InputTag("BToKee"), @@ -43,25 +32,27 @@ variables=cms.PSet( ele1_index=Var("userInt('ele1_index')", int,doc="index of corresponding leading electron"), ele2_index=Var("userInt('ele2_index')", int,doc="index of corresponding subleading electron"), - kaon_index=Var("userInt('kaon_index')", int,doc="index of corresponding kaon"), + kaon_index=Var("userInt('kaon_index')", int,doc="PFCand index of corresponding kaon"), + kaon_lostTrack_index=Var("userInt('kaon_lostTrack_index')", int,doc="LostTrack index of corresponding kaon"), + kaon_isPFCand=Var("userInt('kaon_isPFCand')", int,doc="flag is kaon from PFCand"), eeRefit=Var("userInt('eeRefit')", int,doc="result of di electron refit"), ele1_pt=Var("userFloat('ele1_pt')", float,doc="pt of leading electron (refitted)"), ele1_eta=Var("userFloat('ele1_eta')", float,doc="eta of leading electron (refitted)"), ele1_phi=Var("userFloat('ele1_phi')", float,doc="phi of leading electron (refitted)"), - ele1_charge=Var("userFloat('ele1_charge')", int,doc="charge of leading electron"), + ele1_charge=Var("userInt('ele1_charge')", int,doc="charge of leading electron"), ele1_dxy=Var("daughter('ele1').dB('PV2D')", float,doc="dxy of leading electron (with sign) wrt first PV, in cm"), ele1_dz=Var("daughter('ele1').dB('PVDZ')", float,doc="dz of leading electron (with sign) wrt first PV, in cm"), ele2_pt=Var("userFloat('ele2_pt')", float,doc="pt of subleading electron (refitted)"), ele2_eta=Var("userFloat('ele2_eta')", float,doc="eta of subleading electron (refitted)"), ele2_phi=Var("userFloat('ele2_phi')", float,doc="phi of subleading electron (refitted)"), - ele2_charge=Var("userFloat('ele2_charge')", int,doc="charge of subleading electron"), + ele2_charge=Var("userInt('ele2_charge')", int,doc="charge of subleading electron"), ele2_dxy=Var("daughter('ele2').dB('PV2D')", float,doc="dxy of subleading electron (with sign) wrt first PV, in cm"), ele2_dz=Var("daughter('ele2').dB('PVDZ')", float,doc="dz of subleading electron (with sign) wrt first PV, in cm"), eeKFit_ee_mass=Var("userFloat('eeKFit_ee_mass')", float, doc="dielectron invariant mass post 3tracks refit"), kaon_pt=Var("userFloat('kaon_pt')", float,doc="pt of kaon (refitted)"), kaon_eta=Var("userFloat('kaon_eta')", float,doc="eta of kaon (refitted)"), kaon_phi=Var("userFloat('kaon_phi')", float,doc="phi of kaon (refitted)"), - kaon_charge=Var("userFloat('kaon_charge')", int,doc="charge of kaon"), + kaon_charge=Var("userInt('kaon_charge')", int,doc="charge of kaon"), kaon_DCASig=Var("userFloat('kaon_DCASig')", float,doc="significance of xy-distance of closest approach kaon-beamspot"), kaon_dxy=Var("daughter('kaon').dxy()", float,doc="dxy of kaon (not refitted)"), kaon_dz=Var("daughter('kaon').dz()", float,doc="dz of kaon (not refitted)"), @@ -72,6 +63,7 @@ ee_mass_err=Var("userFloat('ee_mass_err')", float,doc="error on dielectron mass"), ee_Lxy=Var("userFloat('ee_Lxy')", float,doc="significance of dielectron vertex-beamspot xy-separation"), ee_ctxy=Var("userFloat('ee_ctxy')", float,doc="dielectron vertex-beamspot xy-separation/pt"), + ee_Chi2_vtx=Var("userFloat('ee_Chi2_vtx')", float,doc="dielectron vertex chi2"), ee_CL_vtx=Var("userFloat('ee_CL_vtx')", float,doc="dielectron chi2 vertex probability"), pt=Var("userFloat('pt')", float,doc="pt of BToKee candidate (3-trk refitted)"), eta=Var("userFloat('eta')", float,doc="eta of BToKee candidate (3-trk refitted)"), @@ -80,6 +72,7 @@ mass_err=Var("userFloat('mass_err')", float,doc="error on mass of BToKee candidate (3-trk refitted)"), Lxy=Var("userFloat('Lxy')", float,doc="significance of BToKee vertex-beamspot xy-separation (3-trk refitted)"), ctxy=Var("userFloat('ctxy')", float,doc="BToKee vertex-beamspot xy-separation/pt (3-trk refitted)"), + Chi2_vtx=Var("userFloat('Chi2_vtx')", float,doc="BToKee vertex chi2 (3-trk refitted)"), CL_vtx=Var("userFloat('CL_vtx')", float,doc="BToKee chi2 vertex probability (3-trk refitted)"), cosAlpha=Var("userFloat('cosAlpha')", float,doc="cosine of angle between BToKmumu momentum and vertex-beamspot separation (3-trk refitted)"), pt_2trk=Var("userFloat('pt_2trk')", float,doc="pt of BToKee candidate (2-trk refitted)"), @@ -89,6 +82,7 @@ mass_err_2trk=Var("userFloat('mass_err_2trk')", float,doc="error on mass of BToKee candidate (2-trk refitted)"), Lxy_2trk=Var("userFloat('Lxy_2trk')", float,doc="significance of BToKee vertex-beamspot xy-separation (2-trk refitted)"), ctxy_2trk=Var("userFloat('ctxy_2trk')", float,doc="BToKee vertex-beamspot xy-separation/pt (2-trk refitted)"), + Chi2_vtx_2trk=Var("userFloat('Chi2_vtx_2trk')", float,doc="BToKee vertex chi2 (2-trk refitted)"), CL_vtx_2trk=Var("userFloat('CL_vtx_2trk')", float,doc="BToKee chi2 vertex probability (2-trk refitted)"), cosAlpha_2trk=Var("userFloat('cosAlpha_2trk')", float,doc="cosine of angle between BToKmumu momentum and vertex-beamspot separation (2-trk refitted)"), ) diff --git a/PhysicsTools/NanoAOD/python/BToKmumu_cff.py b/PhysicsTools/NanoAOD/python/BToKmumu_cff.py index 4daa332280b3d..ea3267fd0b301 100644 --- a/PhysicsTools/NanoAOD/python/BToKmumu_cff.py +++ b/PhysicsTools/NanoAOD/python/BToKmumu_cff.py @@ -5,34 +5,23 @@ BToKmumu=cms.EDProducer("BToKmumuProducer", beamSpot=cms.InputTag("offlineBeamSpot"), vertexCollection=cms.InputTag("offlineSlimmedPrimaryVertices"), - muonCollection = cms.InputTag("linkedObjects","muons"), # ref slimmedMuons: NanoAOD muon collection has pT>3 GeV, can go lower here + muonCollection = cms.InputTag("linkedObjects","muons"), PFCandCollection=cms.InputTag("packedPFCandidates"), + lostTrackCollection = cms.InputTag("lostTracks"), MuonMinPt=cms.double(1.), MuonMaxEta=cms.double(2.4), KaonMinPt=cms.double(1.), KaonMaxEta=cms.double(2.4), KaonMinDCASig=cms.double(-1.), DiMuonChargeCheck=cms.bool(False), - JPsiMassConstraint=cms.double(-1), #2-trk refitting uses measured di-ele mass - save2TrackRefit=cms.bool(False) + JPsiMassConstraint=cms.double(-1), #2-trk refitting uses measured di-muon mass + save2TrackRefit=cms.bool(False), + useLostTracks=cms.bool(False) ) #Example not used for now: could replace BToKmumu collection in BToKmumuTable or be used in a cloned BToKJPsimumuTable -BToKJPsimumu=cms.EDProducer("BToKmumuProducer", - beamSpot=cms.InputTag("offlineBeamSpot"), - vertexCollection=cms.InputTag("offlineSlimmedPrimaryVertices"), - muonCollection=cms.InputTag("slimmedMuons"), #NanoAOD muon collection has pT>3 GeV, can go lower here - PFCandCollection=cms.InputTag("packedPFCandidates"), - MuonMinPt=cms.double(1.), - MuonMaxEta=cms.double(2.4), - KaonMinPt=cms.double(1.), - KaonMaxEta=cms.double(2.4), - KaonMinDCASig=cms.double(-1.), - DiMuonChargeCheck=cms.bool(False), - JPsiMassConstraint=cms.double(3.096916), #2-trk refitting uses measured di-ele mass - save2TrackRefit=cms.bool(True) - ) +BToKJPsimumu=BToKmumu.clone(JPsiMassConstraint = cms.double(3.096916)) @@ -46,25 +35,27 @@ variables=cms.PSet( mu1_index=Var("userInt('mu1_index')", int,doc="index of corresponding leading muon"), mu2_index=Var("userInt('mu2_index')", int,doc="index of corresponding subleading muon"), - kaon_index=Var("userInt('kaon_index')", int,doc="index of corresponding kaon"), + kaon_index=Var("userInt('kaon_index')", int,doc="PFCand index of corresponding kaon"), + kaon_lostTrack_index=Var("userInt('kaon_lostTrack_index')", int,doc="LostTrack index of corresponding kaon"), + kaon_isPFCand=Var("userInt('kaon_isPFCand')", int,doc="flag is kaon from PFCand"), mumuRefit=Var("userInt('mumuRefit')", int,doc="result of di muon refit"), mu1_pt=Var("userFloat('mu1_pt')", float,doc="pt of leading muon (refitted)"), mu1_eta=Var("userFloat('mu1_eta')", float,doc="eta of leading muon (refitted)"), mu1_phi=Var("userFloat('mu1_phi')", float,doc="phi of leading muon (refitted)"), - mu1_charge=Var("userFloat('mu1_charge')", int,doc="charge of leading muon"), + mu1_charge=Var("userInt('mu1_charge')", int,doc="charge of leading muon"), mu1_dxy=Var("daughter('muon1').dB('PV2D')", float,doc="dxy of leading muon (with sign) wrt first PV, in cm"), mu1_dz=Var("daughter('muon1').dB('PVDZ')", float,doc="dz of leading muon (with sign) wrt first PV, in cm"), mu2_pt=Var("userFloat('mu2_pt')", float,doc="pt of subleading muon (refitted)"), mu2_eta=Var("userFloat('mu2_eta')", float,doc="eta of subleading muon (refitted)"), mu2_phi=Var("userFloat('mu2_phi')", float,doc="phi of subleading muon (refitted)"), - mu2_charge=Var("userFloat('mu2_charge')", int,doc="charge of subleading muon"), + mu2_charge=Var("userInt('mu2_charge')", int,doc="charge of subleading muon"), mu2_dxy=Var("daughter('muon2').dB('PV2D')", float,doc="dxy of subleading muon (with sign) wrt first PV, in cm"), mu2_dz=Var("daughter('muon2').dB('PVDZ')", float,doc="dz of subleading muon (with sign) wrt first PV, in cm"), mumuKFit_mumu_mass=Var("userFloat('mumuKFit_mumu_mass')", float, doc="dimuon invariant mass post 3tracks refit"), kaon_pt=Var("userFloat('kaon_pt')", float,doc="pt of kaon (refitted)"), kaon_eta=Var("userFloat('kaon_eta')", float,doc="eta of kaon (refitted)"), kaon_phi=Var("userFloat('kaon_phi')", float,doc="phi of kaon (refitted)"), - kaon_charge=Var("userFloat('kaon_charge')", int,doc="charge of kaon"), + kaon_charge=Var("userInt('kaon_charge')", int,doc="charge of kaon"), kaon_DCASig=Var("userFloat('kaon_DCASig')", float,doc="significance of xy-distance of closest approach kaon-beamspot"), kaon_dxy=Var("daughter('kaon').dxy()", float,doc="dxy of kaon (not refitted)"), kaon_dz=Var("daughter('kaon').dz()", float,doc="dz of kaon (not refitted)"), @@ -75,6 +66,7 @@ mumu_mass_err=Var("userFloat('mumu_mass_err')", float,doc="error on dimuon mass"), mumu_Lxy=Var("userFloat('mumu_Lxy')", float,doc="significance of dimuon vertex-beamspot xy-separation"), mumu_ctxy=Var("userFloat('mumu_ctxy')", float,doc="dimuon vertex-beamspot xy-separation/pt"), + mumu_Chi2_vtx=Var("userFloat('mumu_Chi2_vtx')", float,doc="dimuon vertex chi2"), mumu_CL_vtx=Var("userFloat('mumu_CL_vtx')", float,doc="dimuon chi2 vertex probability"), pt=Var("userFloat('pt')", float,doc="pt of BToKmumu candidate (refitted)"), eta=Var("userFloat('eta')", float,doc="eta of BToKmumu candidate (refitted)"), @@ -83,16 +75,18 @@ mass_err=Var("userFloat('mass_err')", float,doc="error on mass of BToKmumu candidate"), Lxy=Var("userFloat('Lxy')", float,doc="significance of BToKmumu vertex-beamspot xy-separation"), ctxy=Var("userFloat('ctxy')", float,doc="BToKmumu vertex-beamspot xy-separation/pt"), + Chi2_vtx=Var("userFloat('Chi2_vtx')", float,doc="BToKmumu vertex chi2"), CL_vtx=Var("userFloat('CL_vtx')", float,doc="BToKmumu chi2 vertex probability"), cosAlpha=Var("userFloat('cosAlpha')", float,doc="cosine of angle between BToKmumu momentum and vertex-beamspot separation"), - pt_2trk=Var("userFloat('pt_2trk')", float,doc="pt of BToKee candidate (2-trk refitted)"), - eta_2trk=Var("userFloat('eta_2trk')", float,doc="eta of BToKee candidate (2-trk refitted)"), - phi_2trk=Var("userFloat('phi_2trk')", float,doc="phi of BToKee candidate (2-trk refitted)"), - mass_2trk=Var("userFloat('mass_2trk')", float,doc="mass of BToKee candidate (2-trk refitted)"), - mass_err_2trk=Var("userFloat('mass_err_2trk')", float,doc="error on mass of BToKee candidate (2-trk refitted)"), - Lxy_2trk=Var("userFloat('Lxy_2trk')", float,doc="significance of BToKee vertex-beamspot xy-separation (2-trk refitted)"), - ctxy_2trk=Var("userFloat('ctxy_2trk')", float,doc="BToKee vertex-beamspot xy-separation/pt (2-trk refitted)"), - CL_vtx_2trk=Var("userFloat('CL_vtx_2trk')", float,doc="BToKee chi2 vertex probability (2-trk refitted)"), + pt_2trk=Var("userFloat('pt_2trk')", float,doc="pt of BToKmumu candidate (2-trk refitted)"), + eta_2trk=Var("userFloat('eta_2trk')", float,doc="eta of BToKmumu candidate (2-trk refitted)"), + phi_2trk=Var("userFloat('phi_2trk')", float,doc="phi of BToKmumu candidate (2-trk refitted)"), + mass_2trk=Var("userFloat('mass_2trk')", float,doc="mass of BToKmumu candidate (2-trk refitted)"), + mass_err_2trk=Var("userFloat('mass_err_2trk')", float,doc="error on mass of BToKmumu candidate (2-trk refitted)"), + Lxy_2trk=Var("userFloat('Lxy_2trk')", float,doc="significance of BToKmumu vertex-beamspot xy-separation (2-trk refitted)"), + ctxy_2trk=Var("userFloat('ctxy_2trk')", float,doc="BToKmumu vertex-beamspot xy-separation/pt (2-trk refitted)"), + Chi2_vtx_2trk=Var("userFloat('Chi2_vtx_2trk')", float,doc="BToKmumu vertex chi2 (2-trk refitted)"), + CL_vtx_2trk=Var("userFloat('CL_vtx_2trk')", float,doc="BToKmumu chi2 vertex probability (2-trk refitted)"), cosAlpha_2trk=Var("userFloat('cosAlpha_2trk')", float,doc="cosine of angle between BToKmumu momentum and vertex-beamspot separation (2-trk refitted)"), ) ) diff --git a/PhysicsTools/NanoAOD/python/BToKstee_cff.py b/PhysicsTools/NanoAOD/python/BToKstee_cff.py index 5ecc221e045cc..fb3b8ccad64fb 100644 --- a/PhysicsTools/NanoAOD/python/BToKstee_cff.py +++ b/PhysicsTools/NanoAOD/python/BToKstee_cff.py @@ -6,6 +6,7 @@ beamSpot=cms.InputTag("offlineBeamSpot"), electronCollection=cms.InputTag("linkedObjects","electrons"), #same collection as in NanoAOD PFCandCollection=cms.InputTag("packedPFCandidates"), + lostTrackCollection = cms.InputTag("lostTracks"), ElectronMinPt=cms.double(1.), ElectronMaxEta=cms.double(2.4), KaonMinPt=cms.double(1.), @@ -19,7 +20,8 @@ JPsiMassConstraint=cms.double(-1), #2-trk refitting uses measured di-ele mass KstMassConstraint=cms.double(0.89176), #2-trk refitting uses nominal K*(892) mass save2TrackRefit=cms.bool(False), - save4TrackRefit=cms.bool(False) + save4TrackRefit=cms.bool(False), + useLostTracks=cms.bool(False) ) BToKsteeTable=cms.EDProducer("SimpleCompositeCandidateFlatTableProducer", @@ -30,29 +32,37 @@ singleton=cms.bool(False), extension=cms.bool(False), variables=cms.PSet( + ele1_index=Var("userInt('ele1_index')", int,doc="index of corresponding leading electron"), + ele2_index=Var("userInt('ele2_index')", int,doc="index of corresponding subleading electron"), + kaon_index=Var("userInt('kaon_index')", int,doc="PFCand index of corresponding kaon"), + kaon_lostTrack_index=Var("userInt('kaon_lostTrack_index')", int,doc="LostTrack index of corresponding kaon"), + kaon_isPFCand=Var("userInt('kaon_isPFCand')", int,doc="flag is kaon from PFCand"), + pion_index=Var("userInt('pion_index')", int,doc="PFCand index of corresponding pion"), + pion_lostTrack_index=Var("userInt('pion_lostTrack_index')", int,doc="LostTrack index of corresponding pion"), + pion_isPFCand=Var("userInt('pion_isPFCand')", int,doc="flag is pion from PFCand"), ele1_pt=Var("userFloat('ele1_pt')", float,doc="pt of leading electron (refitted)"), ele1_eta=Var("userFloat('ele1_eta')", float,doc="eta of leading electron (refitted)"), ele1_phi=Var("userFloat('ele1_phi')", float,doc="phi of leading electron (refitted)"), - ele1_charge=Var("userFloat('ele1_charge')", int,doc="charge of leading electron"), + ele1_charge=Var("userInt('ele1_charge')", int,doc="charge of leading electron"), ele1_dxy=Var("daughter('ele1').dB('PV2D')", float,doc="dxy of leading electron (with sign) wrt first PV, in cm"), ele1_dz=Var("daughter('ele1').dB('PVDZ')", float,doc="dz of leading electron (with sign) wrt first PV, in cm"), ele2_pt=Var("userFloat('ele2_pt')", float,doc="pt of subleading electron (refitted)"), ele2_eta=Var("userFloat('ele2_eta')", float,doc="eta of subleading electron (refitted)"), ele2_phi=Var("userFloat('ele2_phi')", float,doc="phi of subleading electron (refitted)"), - ele2_charge=Var("userFloat('ele2_charge')", int,doc="charge of subleading electron"), + ele2_charge=Var("userInt('ele2_charge')", int,doc="charge of subleading electron"), ele2_dxy=Var("daughter('ele2').dB('PV2D')", float,doc="dxy of subleading electron (with sign) wrt first PV, in cm"), ele2_dz=Var("daughter('ele2').dB('PVDZ')", float,doc="dz of subleading electron (with sign) wrt first PV, in cm"), kaon_pt=Var("userFloat('kaon_pt')", float,doc="pt of kaon (refitted)"), kaon_eta=Var("userFloat('kaon_eta')", float,doc="eta of kaon (refitted)"), kaon_phi=Var("userFloat('kaon_phi')", float,doc="phi of kaon (refitted)"), - kaon_charge=Var("userFloat('kaon_charge')", int,doc="charge of kaon"), + kaon_charge=Var("userInt('kaon_charge')", int,doc="charge of kaon"), kaon_DCASig=Var("userFloat('kaon_DCASig')", float,doc="significance of xy-distance of closest approach kaon-beamspot"), kaon_dxy=Var("daughter('kaon').dxy()", float,doc="dxy of kaon (not refitted)"), kaon_dz=Var("daughter('kaon').dz()", float,doc="dz of kaon (not refitted)"), pion_pt=Var("userFloat('pion_pt')", float,doc="pt of kaon (refitted)"), pion_eta=Var("userFloat('pion_eta')", float,doc="eta of kaon (refitted)"), pion_phi=Var("userFloat('pion_phi')", float,doc="phi of kaon (refitted)"), - pion_charge=Var("userFloat('pion_charge')", int,doc="charge of kaon"), + pion_charge=Var("userInt('pion_charge')", int,doc="charge of kaon"), pion_DCASig=Var("userFloat('pion_DCASig')", float,doc="significance of xy-distance of closest approach kaon-beamspot"), pion_dxy=Var("daughter('pion').dxy()", float,doc="dxy of kaon (not refitted)"), pion_dz=Var("daughter('pion').dz()", float,doc="dz of kaon (not refitted)"), @@ -63,6 +73,7 @@ ee_mass_err=Var("userFloat('ee_mass_err')", float,doc="error on dielectron mass"), ee_Lxy=Var("userFloat('ee_Lxy')", float,doc="significance of dielectron vertex-beamspot xy-separation"), ee_ctxy=Var("userFloat('ee_ctxy')", float,doc="dielectron vertex-beamspot xy-separation/pt"), + ee_Chi2_vtx=Var("userFloat('ee_Chi2_vtx')", float,doc="dielectron vertex chi2"), ee_CL_vtx=Var("userFloat('ee_CL_vtx')", float,doc="dielectron chi2 vertex probability"), Kst_pt=Var("userFloat('Kst_pt')", float,doc="K* pt (refitted)"), Kst_eta=Var("userFloat('Kst_eta')", float,doc="K* eta (refitted)"), @@ -71,6 +82,7 @@ Kst_mass_err=Var("userFloat('Kst_mass_err')", float,doc="error on K* mass"), Kst_Lxy=Var("userFloat('Kst_Lxy')", float,doc="significance of K* vertex-beamspot xy-separation"), Kst_ctxy=Var("userFloat('Kst_ctxy')", float,doc="K* vertex-beamspot xy-separation/pt"), + Kst_Chi2_vtx=Var("userFloat('Kst_Chi2_vtx')", float,doc="K* vertex chi2"), Kst_CL_vtx=Var("userFloat('Kst_CL_vtx')", float,doc="K* chi2 vertex probability"), pt=Var("userFloat('pt')", float,doc="pt of BToKstee candidate (3-trk refitted)"), eta=Var("userFloat('eta')", float,doc="eta of BToKstee candidate (3-trk refitted)"), @@ -79,6 +91,7 @@ mass_err=Var("userFloat('mass_err')", float,doc="error on mass of BToKstee candidate (3-trk refitted)"), Lxy=Var("userFloat('Lxy')", float,doc="significance of BToKstee vertex-beamspot xy-separation (3-trk refitted)"), ctxy=Var("userFloat('ctxy')", float,doc="BToKstee vertex-beamspot xy-separation/pt (3-trk refitted)"), + Chi2_vtx=Var("userFloat('Chi2_vtx')", float,doc="BToKstee vertex chi2 (3-trk refitted)"), CL_vtx=Var("userFloat('CL_vtx')", float,doc="BToKstee chi2 vertex probability (3-trk refitted)"), cosAlpha=Var("userFloat('cosAlpha')", float,doc="cosine of angle between BToKmumu momentum and vertex-beamspot separation (3-trk refitted)"), pt_2trk=Var("userFloat('pt_2trk')", float,doc="pt of BToKstee candidate (2-trk refitted)"), @@ -88,6 +101,7 @@ mass_err_2trk=Var("userFloat('mass_err_2trk')", float,doc="error on mass of BToKstee candidate (2-trk refitted)"), Lxy_2trk=Var("userFloat('Lxy_2trk')", float,doc="significance of BToKstee vertex-beamspot xy-separation (2-trk refitted)"), ctxy_2trk=Var("userFloat('ctxy_2trk')", float,doc="BToKstee vertex-beamspot xy-separation/pt (2-trk refitted)"), + Chi2_vtx_2trk=Var("userFloat('Chi2_vtx_2trk')", float,doc="BToKstee vertex chi2 (2-trk refitted)"), CL_vtx_2trk=Var("userFloat('CL_vtx_2trk')", float,doc="BToKstee chi2 vertex probability (2-trk refitted)"), cosAlpha_2trk=Var("userFloat('cosAlpha_2trk')", float,doc="cosine of angle between BToKmumu momentum and vertex-beamspot separation (2-trk refitted)"), pt_4trk=Var("userFloat('pt_4trk')", float,doc="pt of BToKstee candidate (4-trk refitted)"), @@ -97,6 +111,7 @@ mass_err_4trk=Var("userFloat('mass_err_4trk')", float,doc="error on mass of BToKstee candidate (4-trk refitted)"), Lxy_4trk=Var("userFloat('Lxy_4trk')", float,doc="significance of BToKstee vertex-beamspot xy-separation (4-trk refitted)"), ctxy_4trk=Var("userFloat('ctxy_4trk')", float,doc="BToKstee vertex-beamspot xy-separation/pt (4-trk refitted)"), + Chi2_vtx_4trk=Var("userFloat('Chi2_vtx_4trk')", float,doc="BToKstee vertex chi2 (4-trk refitted)"), CL_vtx_4trk=Var("userFloat('CL_vtx_4trk')", float,doc="BToKstee chi2 vertex probability (4-trk refitted)"), cosAlpha_4trk=Var("userFloat('cosAlpha_4trk')", float,doc="cosine of angle between BToKmumu momentum and vertex-beamspot separation (4-trk refitted)"), ) diff --git a/PhysicsTools/NanoAOD/python/BToKstmumu_cff.py b/PhysicsTools/NanoAOD/python/BToKstmumu_cff.py index 7416ca338e62c..f85b3ba266167 100644 --- a/PhysicsTools/NanoAOD/python/BToKstmumu_cff.py +++ b/PhysicsTools/NanoAOD/python/BToKstmumu_cff.py @@ -7,6 +7,7 @@ vertexCollection=cms.InputTag("offlineSlimmedPrimaryVertices"), muonCollection=cms.InputTag("linkedObjects","muons"), #same collection as in NanoAOD PFCandCollection=cms.InputTag("packedPFCandidates"), + lostTrackCollection = cms.InputTag("lostTracks"), MuonMinPt=cms.double(1.), MuonMaxEta=cms.double(2.4), KaonMinPt=cms.double(1.), @@ -20,7 +21,8 @@ JPsiMassConstraint=cms.double(-1), #2-trk refitting uses measured di-ele mass KstMassConstraint=cms.double(0.89176), #2-trk refitting uses nominal K*(892) mass save2TrackRefit=cms.bool(False), - save4TrackRefit=cms.bool(False) + save4TrackRefit=cms.bool(False), + useLostTracks=cms.bool(False) ) BToKstmumuTable=cms.EDProducer("SimpleCompositeCandidateFlatTableProducer", @@ -31,29 +33,37 @@ singleton=cms.bool(False), extension=cms.bool(False), variables=cms.PSet( + mu1_index=Var("userInt('mu1_index')", int,doc="index of corresponding leading muon"), + mu2_index=Var("userInt('mu2_index')", int,doc="index of corresponding subleading muon"), + kaon_index=Var("userInt('kaon_index')", int,doc="PFCand index of corresponding kaon"), + kaon_lostTrack_index=Var("userInt('kaon_lostTrack_index')", int,doc="LostTrack index of corresponding kaon"), + kaon_isPFCand=Var("userInt('kaon_isPFCand')", int,doc="flag is kaon from PFCand"), + pion_index=Var("userInt('pion_index')", int,doc="PFCand index of corresponding pion"), + pion_lostTrack_index=Var("userInt('pion_lostTrack_index')", int,doc="LostTrack index of corresponding pion"), + pion_isPFCand=Var("userInt('pion_isPFCand')", int,doc="flag is pion from PFCand"), mu1_pt=Var("userFloat('mu1_pt')", float,doc="pt of leading muon (refitted)"), mu1_eta=Var("userFloat('mu1_eta')", float,doc="eta of leading muon (refitted)"), mu1_phi=Var("userFloat('mu1_phi')", float,doc="phi of leading muon (refitted)"), - mu1_charge=Var("userFloat('mu1_charge')", int,doc="charge of leading muon"), + mu1_charge=Var("userInt('mu1_charge')", int,doc="charge of leading muon"), mu1_dxy=Var("daughter('muon1').dB('PV2D')", float,doc="dxy of leading muon (with sign) wrt first PV, in cm"), mu1_dz=Var("daughter('muon1').dB('PVDZ')", float,doc="dz of leading muon (with sign) wrt first PV, in cm"), mu2_pt=Var("userFloat('mu2_pt')", float,doc="pt of subleading muon (refitted)"), mu2_eta=Var("userFloat('mu2_eta')", float,doc="eta of subleading muon (refitted)"), mu2_phi=Var("userFloat('mu2_phi')", float,doc="phi of subleading muon (refitted)"), - mu2_charge=Var("userFloat('mu2_charge')", int,doc="charge of subleading muon"), + mu2_charge=Var("userInt('mu2_charge')", int,doc="charge of subleading muon"), mu2_dxy=Var("daughter('muon2').dB('PV2D')", float,doc="dxy of subleading muon (with sign) wrt first PV, in cm"), mu2_dz=Var("daughter('muon2').dB('PVDZ')", float,doc="dz of subleading muon (with sign) wrt first PV, in cm"), kaon_pt=Var("userFloat('kaon_pt')", float,doc="pt of kaon (refitted)"), kaon_eta=Var("userFloat('kaon_eta')", float,doc="eta of kaon (refitted)"), kaon_phi=Var("userFloat('kaon_phi')", float,doc="phi of kaon (refitted)"), - kaon_charge=Var("userFloat('kaon_charge')", int,doc="charge of kaon"), + kaon_charge=Var("userInt('kaon_charge')", int,doc="charge of kaon"), kaon_DCASig=Var("userFloat('kaon_DCASig')", float,doc="significance of xy-distance of closest approach kaon-beamspot"), kaon_dxy=Var("daughter('kaon').dxy()", float,doc="dxy of kaon (not refitted)"), kaon_dz=Var("daughter('kaon').dz()", float,doc="dz of kaon (not refitted)"), pion_pt=Var("userFloat('pion_pt')", float,doc="pt of kaon (refitted)"), pion_eta=Var("userFloat('pion_eta')", float,doc="eta of kaon (refitted)"), pion_phi=Var("userFloat('pion_phi')", float,doc="phi of kaon (refitted)"), - pion_charge=Var("userFloat('pion_charge')", int,doc="charge of kaon"), + pion_charge=Var("userInt('pion_charge')", int,doc="charge of kaon"), pion_DCASig=Var("userFloat('pion_DCASig')", float,doc="significance of xy-distance of closest approach kaon-beamspot"), pion_dxy=Var("daughter('pion').dxy()", float,doc="dxy of kaon (not refitted)"), pion_dz=Var("daughter('pion').dz()", float,doc="dz of kaon (not refitted)"), @@ -64,6 +74,7 @@ mumu_mass_err=Var("userFloat('mumu_mass_err')", float,doc="error on dimuon mass"), mumu_Lxy=Var("userFloat('mumu_Lxy')", float,doc="significance of dimuon vertex-beamspot xy-separation"), mumu_ctxy=Var("userFloat('mumu_ctxy')", float,doc="dimuon vertex-beamspot xy-separation/dimuon pt"), + mumu_Chi2_vtx=Var("userFloat('mumu_Chi2_vtx')", float,doc="dimuon vertex chi2"), mumu_CL_vtx=Var("userFloat('mumu_CL_vtx')", float,doc="dimuon chi2 vertex probability"), Kst_pt=Var("userFloat('Kst_pt')", float,doc="K* pt (refitted)"), Kst_eta=Var("userFloat('Kst_eta')", float,doc="K* eta (refitted)"), @@ -72,6 +83,7 @@ Kst_mass_err=Var("userFloat('Kst_mass_err')", float,doc="error on K* mass"), Kst_Lxy=Var("userFloat('Kst_Lxy')", float,doc="significance of K* vertex-beamspot xy-separation"), Kst_ctxy=Var("userFloat('Kst_ctxy')", float,doc="K* vertex-beamspot xy-separation/K* pt"), + Kst_Chi2_vtx=Var("userFloat('Kst_Chi2_vtx')", float,doc="K* vertex chi2"), Kst_CL_vtx=Var("userFloat('Kst_CL_vtx')", float,doc="K* chi2 vertex probability"), pt=Var("userFloat('pt')", float,doc="pt of BToKstmumu candidate (3-trk refitted)"), eta=Var("userFloat('eta')", float,doc="eta of BToKstmumu candidate (3-trk refitted)"), @@ -80,6 +92,7 @@ mass_err=Var("userFloat('mass_err')", float,doc="error on mass of BToKstmumu candidate (3-trk refitted)"), Lxy=Var("userFloat('Lxy')", float,doc="significance of BToKstmumu vertex-beamspot xy-separation (3-trk refitted)"), ctxy=Var("userFloat('ctxy')", float,doc="BToKstmumu vertex-beamspot xy-separation/pt (3-trk refitted)"), + Chi2_vtx=Var("userFloat('Chi2_vtx')", float,doc="BToKstmumu vertex chi2 (3-trk refitted)"), CL_vtx=Var("userFloat('CL_vtx')", float,doc="BToKstmumu chi2 vertex probability (3-trk refitted)"), cosAlpha=Var("userFloat('cosAlpha')", float,doc="cosine of angle between BToKmumu momentum and vertex-beamspot separation (3-trk refitted)"), pt_2trk=Var("userFloat('pt_2trk')", float,doc="pt of BToKstmumu candidate (2-trk refitted)"), @@ -89,6 +102,7 @@ mass_err_2trk=Var("userFloat('mass_err_2trk')", float,doc="error on mass of BToKstmumu candidate (2-trk refitted)"), Lxy_2trk=Var("userFloat('Lxy_2trk')", float,doc="significance of BToKstmumu vertex-beamspot xy-separation (2-trk refitted)"), ctxy_2trk=Var("userFloat('ctxy_2trk')", float,doc="BToKstmumu vertex-beamspot xy-separation/pt (2-trk refitted)"), + Chi2_vtx_2trk=Var("userFloat('Chi2_vtx_2trk')", float,doc="BToKstmumu vertex chi2 (2-trk refitted)"), CL_vtx_2trk=Var("userFloat('CL_vtx_2trk')", float,doc="BToKstmumu chi2 vertex probability (2-trk refitted)"), cosAlpha_2trk=Var("userFloat('cosAlpha_2trk')", float,doc="cosine of angle between BToKstmumu momentum and vertex-beamspot separation (2-trk refitted)"), pt_4trk=Var("userFloat('pt_4trk')", float,doc="pt of BToKstmumu candidate (4-trk refitted)"), @@ -98,6 +112,7 @@ mass_err_4trk=Var("userFloat('mass_err_4trk')", float,doc="error on mass of BToKstmumu candidate (4-trk refitted)"), Lxy_4trk=Var("userFloat('Lxy_4trk')", float,doc="significance of BToKstmumu vertex-beamspot xy-separation (4-trk refitted)"), ctxy_4trk=Var("userFloat('ctxy_4trk')", float,doc="BToKstmumu vertex-beamspot xy-separation/pt (4-trk refitted)"), + Chi2_vtx_4trk=Var("userFloat('Chi2_vtx_4trk')", float,doc="BToKstmumu vertex chi2 (4-trk refitted)"), CL_vtx_4trk=Var("userFloat('CL_vtx_4trk')", float,doc="BToKstmumu chi2 vertex probability (4-trk refitted)"), cosAlpha_4trk=Var("userFloat('cosAlpha_4trk')", float,doc="cosine of angle between BToKstmumu momentum and vertex-beamspot separation (4-trk refitted)"), ) diff --git a/PhysicsTools/NanoAOD/python/PFCands_cff.py b/PhysicsTools/NanoAOD/python/PFCands_cff.py index d36bbf01a02bf..4e150a2266ec1 100644 --- a/PhysicsTools/NanoAOD/python/PFCands_cff.py +++ b/PhysicsTools/NanoAOD/python/PFCands_cff.py @@ -31,3 +31,13 @@ PFCandSequence=cms.Sequence(PFCand) PFCandTables=cms.Sequence(PFCandTable) + + +LostTrack = PFCand.clone( PFCandCollection=cms.InputTag("lostTracks") ) +LostTrackTable = PFCandTable.clone( src=cms.InputTag("LostTrack"), + name=cms.string("LostTrack"), + doc=cms.string("Lost tracks Variable") ) + +LostTrackSequence=cms.Sequence(LostTrack) +LostTrackTables=cms.Sequence(LostTrackTable) + diff --git a/PhysicsTools/NanoAOD/python/nano_cff.py b/PhysicsTools/NanoAOD/python/nano_cff.py index 2c0d590464bc6..ccc604a20b2b5 100644 --- a/PhysicsTools/NanoAOD/python/nano_cff.py +++ b/PhysicsTools/NanoAOD/python/nano_cff.py @@ -101,6 +101,33 @@ def nanoAOD_customizeMC(process): process.calibratedPatPhotons.isMC = cms.bool(True) return process +def nanoAOD_customizeBToKPiPi(process): + process = nanoAOD_customizeCommon(process) + process.nanoSequence = cms.Sequence( process.nanoSequence + BToKpipiSequence + BToKpipiTables) + return process + +def nanoAOD_customizeBToKee(process): + process = nanoAOD_customizeCommon(process) + process.nanoSequence = cms.Sequence( process.nanoSequence + BToKeeSequence + BToKsteeSequence + BToKeeTables + BToKsteeTables) + return process + +def nanoAOD_customizeBToKmumu(process): + process = nanoAOD_customizeCommon(process) + process.nanoSequence = cms.Sequence( process.nanoSequence + BToKmumuSequence + BToKstmumuSequence + BToKmumuTables + BToKstmumuTables) + return process + +def nanoAOD_customizeLostTracks(process): + process = nanoAOD_customizeCommon(process) + process.nanoSequence = cms.Sequence( LostTrackSequence + LostTrackTables + process.nanoSequence ) + if(hasattr(process,'BToKee')): + process.BToKee.useLostTracks=cms.bool(True) + process.BToKstee.useLostTracks=cms.bool(True) + if(hasattr(process,'BToKmumu')): + process.BToKmumu.useLostTracks=cms.bool(True) + process.BToKstmumu.useLostTracks=cms.bool(True) + return process + + ### Era dependent customization from Configuration.Eras.Modifier_run2_miniAOD_80XLegacy_cff import run2_miniAOD_80XLegacy _80x_sequence = nanoSequence.copy() diff --git a/PhysicsTools/NanoAOD/test/test94X_NANO.py b/PhysicsTools/NanoAOD/test/test94X_NANO.py index e3192c6b1dab7..ed48210bf7c7c 100644 --- a/PhysicsTools/NanoAOD/test/test94X_NANO.py +++ b/PhysicsTools/NanoAOD/test/test94X_NANO.py @@ -7,6 +7,7 @@ runBToKPiPi = False runBToKee = True runBToKmumu = True +useLostTracks = False import FWCore.ParameterSet.Config as cms @@ -28,7 +29,7 @@ process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(10) + input = cms.untracked.int32(50) ) # Input source @@ -58,7 +59,8 @@ filterName = cms.untracked.string('') ), fileName = cms.untracked.string('test94X_NANO.root'), - outputCommands = process.NANOAODSIMEventContent.outputCommands + outputCommands = process.NANOAODSIMEventContent.outputCommands, + fakeNameForCrab =cms.untracked.bool(True) ) # Additional output definition @@ -68,18 +70,6 @@ process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase1_2017_realistic', '') # Path and EndPath definitions -if runBToKPiPi: - from PhysicsTools.NanoAOD.BToKpipi_cff import * - process.nanoSequenceMC = cms.Sequence( process.nanoSequenceMC + BToKpipiSequence + BToKpipiTables) -if runBToKee: - from PhysicsTools.NanoAOD.BToKee_cff import * - from PhysicsTools.NanoAOD.BToKstee_cff import * - process.nanoSequence = cms.Sequence( process.nanoSequence + BToKeeSequence + BToKsteeSequence + BToKeeTables + BToKsteeTables) -if runBToKmumu: - from PhysicsTools.NanoAOD.BToKmumu_cff import * - from PhysicsTools.NanoAOD.BToKstmumu_cff import * - process.nanoSequence = cms.Sequence( process.nanoSequence + BToKmumuSequence + BToKstmumuSequence + BToKmumuTables + BToKstmumuTables) - process.nanoAOD_step = cms.Path(process.nanoSequenceMC) process.endjob_step = cms.EndPath(process.endOfProcess) process.NANOAODSIMoutput_step = cms.EndPath(process.NANOAODSIMoutput) @@ -97,10 +87,22 @@ #call to customisation function nanoAOD_customizeMC imported from PhysicsTools.NanoAOD.nano_cff process = nanoAOD_customizeMC(process) +if runBToKPiPi: + from PhysicsTools.NanoAOD.nano_cff import nanoAOD_customizeBToKPiPi + process = nanoAOD_customizeBToKPiPi(process) +if runBToKee: + from PhysicsTools.NanoAOD.nano_cff import nanoAOD_customizeBToKee + process = nanoAOD_customizeBToKee(process) +if runBToKmumu: + from PhysicsTools.NanoAOD.nano_cff import nanoAOD_customizeBToKmumu + process = nanoAOD_customizeBToKmumu(process) +if useLostTracks: + from PhysicsTools.NanoAOD.nano_cff import nanoAOD_customizeLostTracks + process = nanoAOD_customizeLostTracks(process) + # End of customisation functions # Customisation from command line - process.load("TrackingTools/TransientTrack/TransientTrackBuilder_cfi") # Add early deletion of temporary data products to reduce peak memory need from Configuration.StandardSequences.earlyDeleteSettings_cff import customiseEarlyDelete diff --git a/PhysicsTools/NanoAOD/test/test_data_101X_NANO.py b/PhysicsTools/NanoAOD/test/test_data_101X_NANO.py index 3628b83b5ff1b..e152697cc44eb 100644 --- a/PhysicsTools/NanoAOD/test/test_data_101X_NANO.py +++ b/PhysicsTools/NanoAOD/test/test_data_101X_NANO.py @@ -7,6 +7,7 @@ runBToKPiPi = False runBToKee = True runBToKmumu = True +useLostTracks = False import FWCore.ParameterSet.Config as cms @@ -67,18 +68,6 @@ process.GlobalTag = GlobalTag(process.GlobalTag, '101X_dataRun2_Prompt_v10', '') # Path and EndPath definitions -if runBToKPiPi: - from PhysicsTools.NanoAOD.BToKpipi_cff import * - process.nanoSequence = cms.Sequence( process.nanoSequence + BToKpipiSequence + BToKpipiTables) -if runBToKee: - from PhysicsTools.NanoAOD.BToKee_cff import * - from PhysicsTools.NanoAOD.BToKstee_cff import * - process.nanoSequence = cms.Sequence( process.nanoSequence + BToKeeSequence + BToKsteeSequence + BToKeeTables + BToKsteeTables) -if runBToKmumu: - from PhysicsTools.NanoAOD.BToKmumu_cff import * - from PhysicsTools.NanoAOD.BToKstmumu_cff import * - process.nanoSequence = cms.Sequence( process.nanoSequence + BToKmumuSequence + BToKstmumuSequence + BToKmumuTables + BToKstmumuTables) - process.nanoAOD_step = cms.Path(process.nanoSequence) process.endjob_step = cms.EndPath(process.endOfProcess) process.NANOAODoutput_step = cms.EndPath(process.NANOAODoutput) @@ -96,6 +85,19 @@ #call to customisation function nanoAOD_customizeData imported from PhysicsTools.NanoAOD.nano_cff process = nanoAOD_customizeData(process) +if runBToKPiPi: + from PhysicsTools.NanoAOD.nano_cff import nanoAOD_customizeBToKPiPi + process = nanoAOD_customizeBToKPiPi(process) +if runBToKee: + from PhysicsTools.NanoAOD.nano_cff import nanoAOD_customizeBToKee + process = nanoAOD_customizeBToKee(process) +if runBToKmumu: + from PhysicsTools.NanoAOD.nano_cff import nanoAOD_customizeBToKmumu + process = nanoAOD_customizeBToKmumu(process) +if useLostTracks: + from PhysicsTools.NanoAOD.nano_cff import nanoAOD_customizeLostTracks + process = nanoAOD_customizeLostTracks(process) + # End of customisation functions # Customisation from command line