diff --git a/PhysicsTools/BPHNano/plugins/BPHTrackMerger.cc b/PhysicsTools/BPHNano/plugins/BPHTrackMerger.cc index cb326728bdd0..e2325da1fc06 100644 --- a/PhysicsTools/BPHNano/plugins/BPHTrackMerger.cc +++ b/PhysicsTools/BPHNano/plugins/BPHTrackMerger.cc @@ -25,37 +25,29 @@ #include "helper.h" class BPHTrackMerger : public edm::global::EDProducer<> { - public: +public: // would it be useful to give this a bit more standard structure? explicit BPHTrackMerger(const edm::ParameterSet &cfg) : bFieldToken_(esConsumes()), - beamSpotSrc_(consumes( - cfg.getParameter("beamSpot"))), - tracksToken_(consumes( - cfg.getParameter("tracks"))), - lostTracksToken_(consumes( - cfg.getParameter("lostTracks"))), - dileptonToken_(consumes( - cfg.getParameter("dileptons"))), - muonToken_(consumes( - cfg.getParameter("muons"))), - eleToken_(consumes( - cfg.getParameter("electrons"))), + beamSpotSrc_(consumes(cfg.getParameter("beamSpot"))), + tracksToken_(consumes(cfg.getParameter("tracks"))), + lostTracksToken_(consumes(cfg.getParameter("lostTracks"))), + dileptonToken_(consumes(cfg.getParameter("dileptons"))), + muonToken_(consumes(cfg.getParameter("muons"))), + eleToken_(consumes(cfg.getParameter("electrons"))), maxDzDilep_(cfg.getParameter("maxDzDilep")), dcaSig_(cfg.getParameter("dcaSig")), track_selection_(cfg.getParameter("trackSelection")) { produces("SelectedTracks"); produces("SelectedTransientTracks"); - produces>( - "SelectedTracks"); + produces>("SelectedTracks"); } ~BPHTrackMerger() override {} - void produce(edm::StreamID, edm::Event &, - const edm::EventSetup &) const override; + void produce(edm::StreamID, edm::Event &, const edm::EventSetup &) const override; - private: +private: const edm::ESGetToken bFieldToken_; const edm::EDGetTokenT beamSpotSrc_; const edm::EDGetTokenT tracksToken_; @@ -70,8 +62,7 @@ class BPHTrackMerger : public edm::global::EDProducer<> { const StringCutObjectSelector track_selection_; }; -void BPHTrackMerger::produce(edm::StreamID, edm::Event &evt, - edm::EventSetup const &stp) const { +void BPHTrackMerger::produce(edm::StreamID, edm::Event &evt, edm::EventSetup const &stp) const { // input edm::Handle beamSpotHandle; evt.getByToken(beamSpotSrc_, beamSpotHandle); @@ -98,13 +89,10 @@ void BPHTrackMerger::produce(edm::StreamID, edm::Event &evt, unsigned int totalTracks = nTracks + lostTracks->size(); // ok this was CompositeCandidateCollection - std::unique_ptr tracks_out( - new pat::CompositeCandidateCollection); - std::unique_ptr trans_tracks_out( - new TransientTrackCollection); + std::unique_ptr tracks_out(new pat::CompositeCandidateCollection); + std::unique_ptr trans_tracks_out(new TransientTrackCollection); - std::vector> - vectrk_ttrk; + std::vector> vectrk_ttrk; // try topreserve same logic avoiding the copy of the full collection /* //correct logic but a bit convoluted -> changing to smthn simpler @@ -115,12 +103,14 @@ void BPHTrackMerger::produce(edm::StreamID, edm::Event &evt, std::vector match_indices(totalTracks, -1); // for loop is better to be range based - especially for large ensembles for (unsigned int iTrk = 0; iTrk < totalTracks; ++iTrk) { - const pat::PackedCandidate &trk = - (iTrk < nTracks) ? (*tracks)[iTrk] : (*lostTracks)[iTrk - nTracks]; + const pat::PackedCandidate &trk = (iTrk < nTracks) ? (*tracks)[iTrk] : (*lostTracks)[iTrk - nTracks]; // arranging cuts for speed - if (!trk.hasTrackDetails()) continue; - if (fabs(trk.pdgId()) != 211) continue; // do we want also to keep muons? - if (!track_selection_(trk)) continue; + if (!trk.hasTrackDetails()) + continue; + if (fabs(trk.pdgId()) != 211) + continue; // do we want also to keep muons? + if (!track_selection_(trk)) + continue; bool skipTrack = true; float dzTrg = 0.0; @@ -134,27 +124,27 @@ void BPHTrackMerger::produce(edm::StreamID, edm::Event &evt, } // if track is far from all dilepton candidate - if (skipTrack) continue; + if (skipTrack) + continue; // high purity requirment applied only in packedCands - if (iTrk < nTracks && !trk.trackHighPurity()) continue; + if (iTrk < nTracks && !trk.trackHighPurity()) + continue; const reco::TransientTrack trackTT((*trk.bestTrack()), &bField); // distance closest approach in x,y wrt beam spot std::pair DCA = bph::computeDCA(trackTT, beamSpot); float DCABS = DCA.first; float DCABSErr = DCA.second; - float DCASig = (DCABSErr != 0 && float(DCABSErr) == DCABSErr) - ? fabs(DCABS / DCABSErr) - : -1; - if (DCASig > dcaSig_ && dcaSig_ > 0) continue; + float DCASig = (DCABSErr != 0 && float(DCABSErr) == DCABSErr) ? fabs(DCABS / DCABSErr) : -1; + if (DCASig > dcaSig_ && dcaSig_ > 0) + continue; // clean tracks wrt to all muons int matchedToMuon = 0; for (const pat::Muon &imutmp : *muons) { for (unsigned int i = 0; i < imutmp.numberOfSourceCandidatePtrs(); ++i) { - if (!((imutmp.sourceCandidatePtr(i)).isNonnull() && - (imutmp.sourceCandidatePtr(i)).isAvailable())) + if (!((imutmp.sourceCandidatePtr(i)).isNonnull() && (imutmp.sourceCandidatePtr(i)).isAvailable())) continue; const edm::Ptr &source = imutmp.sourceCandidatePtr(i); @@ -169,8 +159,7 @@ void BPHTrackMerger::produce(edm::StreamID, edm::Event &evt, int matchedToEle = 0; for (const pat::Electron &ietmp : *pfele) { for (unsigned int i = 0; i < ietmp.numberOfSourceCandidatePtrs(); ++i) { - if (!((ietmp.sourceCandidatePtr(i)).isNonnull() && - (ietmp.sourceCandidatePtr(i)).isAvailable())) + if (!((ietmp.sourceCandidatePtr(i)).isNonnull() && (ietmp.sourceCandidatePtr(i)).isAvailable())) continue; const edm::Ptr &source = ietmp.sourceCandidatePtr(i); if (source.id() == tracks.id() && source.key() == iTrk) { @@ -217,8 +206,7 @@ void BPHTrackMerger::produce(edm::StreamID, edm::Event &evt, if (iTrk < nTracks) pcand.addUserCand("cand", edm::Ptr(tracks, iTrk)); else - pcand.addUserCand( - "cand", edm::Ptr(lostTracks, iTrk - nTracks)); + pcand.addUserCand("cand", edm::Ptr(lostTracks, iTrk - nTracks)); // in order to avoid revoking the sxpensive ttrack builder many times and // still have everything sorted, we add them to vector of pairs @@ -231,11 +219,9 @@ void BPHTrackMerger::produce(edm::StreamID, edm::Event &evt, // sort to be uniform with leptons // sort by index since we want to update the match too - std::sort(sort_indices.begin(), sort_indices.end(), - [&vectrk_ttrk](auto &iTrk1, auto &iTrk2) -> bool { - return (vectrk_ttrk[iTrk1].first).pt() > - (vectrk_ttrk[iTrk2].first).pt(); - }); + std::sort(sort_indices.begin(), sort_indices.end(), [&vectrk_ttrk](auto &iTrk1, auto &iTrk2) -> bool { + return (vectrk_ttrk[iTrk1].first).pt() > (vectrk_ttrk[iTrk2].first).pt(); + }); // std::sort( vectrk_ttrk.begin(), vectrk_ttrk.end(), // [] ( auto & trk1, auto & trk2) -> // bool {return (trk1.first).pt() > (trk2.first).pt();} @@ -253,12 +239,12 @@ void BPHTrackMerger::produce(edm::StreamID, edm::Event &evt, } // Now point the match indices to the sorted output collection - std::transform(match_indices.begin(), match_indices.end(), - match_indices.begin(), - [&reverse_sort_indices](int iUnsortedTrack) { - if (iUnsortedTrack < 0) return -1; - return reverse_sort_indices[iUnsortedTrack]; - }); + std::transform( + match_indices.begin(), match_indices.end(), match_indices.begin(), [&reverse_sort_indices](int iUnsortedTrack) { + if (iUnsortedTrack < 0) + return -1; + return reverse_sort_indices[iUnsortedTrack]; + }); int unassoc = 0; for (auto iTrkAssoc : match_indices) { @@ -272,15 +258,11 @@ void BPHTrackMerger::produce(edm::StreamID, edm::Event &evt, evt.put(std::move(trans_tracks_out), "SelectedTransientTracks"); // Associate PackedCandidates to the merged Track collection - auto tracks_out_match = - std::make_unique>( - tracks_orphan_handle); - edm::Association::Filler filler( - *tracks_out_match); + auto tracks_out_match = std::make_unique>(tracks_orphan_handle); + edm::Association::Filler filler(*tracks_out_match); filler.insert(tracks, match_indices.begin(), match_indices.begin() + nTracks); - filler.insert(lostTracks, match_indices.begin() + nTracks, - match_indices.end()); + filler.insert(lostTracks, match_indices.begin() + nTracks, match_indices.end()); filler.fill(); evt.put(std::move(tracks_out_match), "SelectedTracks"); diff --git a/PhysicsTools/BPHNano/plugins/BToTrkLLBuilder.cc b/PhysicsTools/BPHNano/plugins/BToTrkLLBuilder.cc index 31080d5776f0..b0a5bf63ddb9 100644 --- a/PhysicsTools/BPHNano/plugins/BToTrkLLBuilder.cc +++ b/PhysicsTools/BPHNano/plugins/BToTrkLLBuilder.cc @@ -32,36 +32,29 @@ class BToTrkLLBuilder : public edm::global::EDProducer<> { // perhaps we need better structure here (begin run etc) - public: +public: typedef std::vector TransientTrackCollection; explicit BToTrkLLBuilder(const edm::ParameterSet &cfg) : bFieldToken_{esConsumes()}, pre_vtx_selection_{cfg.getParameter("preVtxSelection")}, post_vtx_selection_{cfg.getParameter("postVtxSelection")}, - dileptons_{consumes( - cfg.getParameter("dileptons"))}, - leptons_ttracks_{consumes( - cfg.getParameter("leptonTransientTracks"))}, - kaons_{consumes( - cfg.getParameter("kaons"))}, - kaons_ttracks_{consumes( - cfg.getParameter("kaonsTransientTracks"))}, + dileptons_{consumes(cfg.getParameter("dileptons"))}, + leptons_ttracks_{consumes(cfg.getParameter("leptonTransientTracks"))}, + kaons_{consumes(cfg.getParameter("kaons"))}, + kaons_ttracks_{consumes(cfg.getParameter("kaonsTransientTracks"))}, track_mass_{cfg.getParameter("trackMass")}, - pu_tracks_(consumes( - cfg.getParameter("PUtracks"))), - beamspot_{consumes( - cfg.getParameter("beamSpot"))}, + pu_tracks_(consumes(cfg.getParameter("PUtracks"))), + beamspot_{consumes(cfg.getParameter("beamSpot"))}, dilepton_constraint_{cfg.getParameter("dileptonMassContraint")} { produces(); } ~BToTrkLLBuilder() override {} - void produce(edm::StreamID, edm::Event &, - const edm::EventSetup &) const override; + void produce(edm::StreamID, edm::Event &, const edm::EventSetup &) const override; - private: +private: const edm::ESGetToken bFieldToken_; // selections @@ -79,8 +72,7 @@ class BToTrkLLBuilder : public edm::global::EDProducer<> { const bool dilepton_constraint_; }; -void BToTrkLLBuilder::produce(edm::StreamID, edm::Event &evt, - edm::EventSetup const &iSetup) const { +void BToTrkLLBuilder::produce(edm::StreamID, edm::Event &evt, edm::EventSetup const &iSetup) const { // input edm::Handle dileptons; evt.getByToken(dileptons_, dileptons); @@ -103,14 +95,12 @@ void BToTrkLLBuilder::produce(edm::StreamID, edm::Event &evt, AnalyticalImpactPointExtrapolator extrapolator(&bField); // output - std::unique_ptr ret_val( - new pat::CompositeCandidateCollection()); + std::unique_ptr ret_val(new pat::CompositeCandidateCollection()); for (size_t k_idx = 0; k_idx < kaons->size(); ++k_idx) { edm::Ptr k_ptr(kaons, k_idx); - math::PtEtaPhiMLorentzVector k_p4(k_ptr->pt(), k_ptr->eta(), k_ptr->phi(), - bph::K_MASS); + math::PtEtaPhiMLorentzVector k_p4(k_ptr->pt(), k_ptr->eta(), k_ptr->phi(), bph::K_MASS); for (size_t ll_idx = 0; ll_idx < dileptons->size(); ++ll_idx) { edm::Ptr ll_prt(dileptons, ll_idx); @@ -137,53 +127,45 @@ void BToTrkLLBuilder::produce(edm::StreamID, edm::Event &evt, cand.addUserFloat("min_dr", dr_info.first); cand.addUserFloat("max_dr", dr_info.second); - if (!pre_vtx_selection_(cand)) continue; + if (!pre_vtx_selection_(cand)) + continue; - KinVtxFitter fitter( - {leptons_ttracks->at(l1_idx), leptons_ttracks->at(l2_idx), - kaons_ttracks->at(k_idx)}, - {l1_ptr->mass(), l2_ptr->mass(), bph::K_MASS}, - {bph::LEP_SIGMA, bph::LEP_SIGMA, bph::K_SIGMA} - // some small sigma for the lepton mass + KinVtxFitter fitter({leptons_ttracks->at(l1_idx), leptons_ttracks->at(l2_idx), kaons_ttracks->at(k_idx)}, + {l1_ptr->mass(), l2_ptr->mass(), bph::K_MASS}, + {bph::LEP_SIGMA, bph::LEP_SIGMA, bph::K_SIGMA} // some small sigma for the lepton mass ); - if (!fitter.success()) continue; // hardcoded, but do we need otherwise? - cand.setVertex(reco::Candidate::Point(fitter.fitted_vtx().x(), - fitter.fitted_vtx().y(), - fitter.fitted_vtx().z())); + if (!fitter.success()) + continue; // hardcoded, but do we need otherwise? + cand.setVertex(reco::Candidate::Point(fitter.fitted_vtx().x(), fitter.fitted_vtx().y(), fitter.fitted_vtx().z())); cand.addUserInt("sv_OK", fitter.success()); cand.addUserFloat("sv_chi2", fitter.chi2()); cand.addUserFloat("sv_ndof", fitter.dof()); // float?? cand.addUserFloat("sv_prob", fitter.prob()); - cand.addUserFloat("fitted_mll", - (fitter.daughter_p4(0) + fitter.daughter_p4(1)).mass()); + cand.addUserFloat("fitted_mll", (fitter.daughter_p4(0) + fitter.daughter_p4(1)).mass()); auto fit_p4 = fitter.fitted_p4(); cand.addUserFloat("fitted_pt", fit_p4.pt()); cand.addUserFloat("fitted_eta", fit_p4.eta()); cand.addUserFloat("fitted_phi", fit_p4.phi()); cand.addUserFloat("fitted_mass", fitter.fitted_candidate().mass()); - cand.addUserFloat( - "fitted_massErr", - sqrt(fitter.fitted_candidate().kinematicParametersError().matrix()( - 6, 6))); + cand.addUserFloat("fitted_massErr", sqrt(fitter.fitted_candidate().kinematicParametersError().matrix()(6, 6))); - cand.addUserFloat("cos_theta_2D", - bph::cos_theta_2D(fitter, *beamspot, cand.p4())); - cand.addUserFloat("fitted_cos_theta_2D", - bph::cos_theta_2D(fitter, *beamspot, fit_p4)); + cand.addUserFloat("cos_theta_2D", bph::cos_theta_2D(fitter, *beamspot, cand.p4())); + cand.addUserFloat("fitted_cos_theta_2D", bph::cos_theta_2D(fitter, *beamspot, fit_p4)); auto lxy = bph::l_xy(fitter, *beamspot); cand.addUserFloat("l_xy", lxy.value()); cand.addUserFloat("l_xy_unc", lxy.error()); // track impact parameter from SV - TrajectoryStateOnSurface tsos = extrapolator.extrapolate( - kaons_ttracks->at(k_idx).impactPointState(), fitter.fitted_vtx()); - std::pair cur2DIP = bph::signedTransverseImpactParameter( - tsos, fitter.fitted_refvtx(), *beamspot); + TrajectoryStateOnSurface tsos = + extrapolator.extrapolate(kaons_ttracks->at(k_idx).impactPointState(), fitter.fitted_vtx()); + std::pair cur2DIP = + bph::signedTransverseImpactParameter(tsos, fitter.fitted_refvtx(), *beamspot); cand.addUserFloat("k_svip2d", cur2DIP.second.value()); cand.addUserFloat("k_svip2d_err", cur2DIP.second.error()); - if (!post_vtx_selection_(cand)) continue; + if (!post_vtx_selection_(cand)) + continue; cand.addUserFloat("vtx_x", cand.vx()); cand.addUserFloat("vtx_y", cand.vy()); @@ -201,14 +183,11 @@ void BToTrkLLBuilder::produce(edm::StreamID, edm::Event &evt, std::vector dnames{"l1", "l2", "trk"}; for (size_t idaughter = 0; idaughter < dnames.size(); idaughter++) { - cand.addUserFloat("fitted_" + dnames[idaughter] + "_pt", - fitter.daughter_p4(idaughter).pt()); + cand.addUserFloat("fitted_" + dnames[idaughter] + "_pt", fitter.daughter_p4(idaughter).pt()); - cand.addUserFloat("fitted_" + dnames[idaughter] + "_eta", - fitter.daughter_p4(idaughter).eta()); + cand.addUserFloat("fitted_" + dnames[idaughter] + "_eta", fitter.daughter_p4(idaughter).eta()); - cand.addUserFloat("fitted_" + dnames[idaughter] + "_phi", - fitter.daughter_p4(idaughter).phi()); + cand.addUserFloat("fitted_" + dnames[idaughter] + "_phi", fitter.daughter_p4(idaughter).phi()); } // compute isolation @@ -217,43 +196,41 @@ void BToTrkLLBuilder::produce(edm::StreamID, edm::Event &evt, cand.addUserFloat(dnames[idaughter] + "_iso04", isos[idaughter]); } - float constraint_sv_prob=-9; - float constraint_pt=-9; - float constraint_eta=-9; - float constraint_phi=-9; - float constraint_mass=-9; - float constraint_massErr=-9; - float constraint_mll=-9; + float constraint_sv_prob = -9; + float constraint_pt = -9; + float constraint_eta = -9; + float constraint_phi = -9; + float constraint_mass = -9; + float constraint_massErr = -9; + float constraint_mll = -9; const double dilepton_mass = ll_prt->userFloat("fitted_mass"); const double jpsi_bin[2] = {2.8, 3.35}; const double psi2s_bin[2] = {3.45, 3.85}; - if (dilepton_constraint_ && - ((dilepton_mass > jpsi_bin[0] && dilepton_mass < jpsi_bin[1]) || - (dilepton_mass > psi2s_bin[0] && dilepton_mass < psi2s_bin[1]))) { + if (dilepton_constraint_ && ((dilepton_mass > jpsi_bin[0] && dilepton_mass < jpsi_bin[1]) || + (dilepton_mass > psi2s_bin[0] && dilepton_mass < psi2s_bin[1]))) { ParticleMass JPsi_mass = 3.0969; // Jpsi mass 3.096900±0.000006 ParticleMass Psi2S_mass = 3.6861; // Psi2S mass 3.6861093±0.0000034 - ParticleMass mass_constraint = - (dilepton_mass < jpsi_bin[1]) ? JPsi_mass : Psi2S_mass; + ParticleMass mass_constraint = (dilepton_mass < jpsi_bin[1]) ? JPsi_mass : Psi2S_mass; // Mass constraint is applied to the first two particles in the // "particles" vector Make sure that the first two particles are the // ones you want to constrain KinVtxFitter constraint_fitter( - {leptons_ttracks->at(l1_idx), leptons_ttracks->at(l2_idx), - kaons_ttracks->at(k_idx)}, + {leptons_ttracks->at(l1_idx), leptons_ttracks->at(l2_idx), kaons_ttracks->at(k_idx)}, {l1_ptr->mass(), l2_ptr->mass(), bph::K_MASS}, - {bph::LEP_SIGMA, bph::LEP_SIGMA, bph::K_SIGMA}, mass_constraint); + {bph::LEP_SIGMA, bph::LEP_SIGMA, bph::K_SIGMA}, + mass_constraint); if (constraint_fitter.success()) { auto constraint_p4 = constraint_fitter.fitted_p4(); - constraint_sv_prob=constraint_fitter.prob(); - constraint_pt=constraint_p4.pt(); - constraint_eta=constraint_p4.eta(); - constraint_phi=constraint_p4.phi(); - constraint_mass=constraint_fitter.fitted_candidate().mass(); - constraint_massErr=sqrt(constraint_fitter.fitted_candidate().kinematicParametersError().matrix()(6, 6)); - constraint_mll=(constraint_fitter.daughter_p4(0) + constraint_fitter.daughter_p4(1)).mass(); + constraint_sv_prob = constraint_fitter.prob(); + constraint_pt = constraint_p4.pt(); + constraint_eta = constraint_p4.eta(); + constraint_phi = constraint_p4.phi(); + constraint_mass = constraint_fitter.fitted_candidate().mass(); + constraint_massErr = sqrt(constraint_fitter.fitted_candidate().kinematicParametersError().matrix()(6, 6)); + constraint_mll = (constraint_fitter.daughter_p4(0) + constraint_fitter.daughter_p4(1)).mass(); } } cand.addUserFloat("constraint_sv_prob", constraint_sv_prob); diff --git a/PhysicsTools/BPHNano/plugins/BToTrkTrkLLBuilder.cc b/PhysicsTools/BPHNano/plugins/BToTrkTrkLLBuilder.cc index 245db0254b6a..345fa33cf1f9 100644 --- a/PhysicsTools/BPHNano/plugins/BToTrkTrkLLBuilder.cc +++ b/PhysicsTools/BPHNano/plugins/BToTrkTrkLLBuilder.cc @@ -31,7 +31,7 @@ class BToTrkTrkLLBuilder : public edm::global::EDProducer<> { // perhaps we need better structure here (begin run etc) - public: +public: typedef std::vector TransientTrackCollection; explicit BToTrkTrkLLBuilder(const edm::ParameterSet &cfg) @@ -40,18 +40,12 @@ class BToTrkTrkLLBuilder : public edm::global::EDProducer<> { pre_vtx_selection_{cfg.getParameter("preVtxSelection")}, post_vtx_selection_{cfg.getParameter("postVtxSelection")}, // inputs - dileptons_{consumes( - cfg.getParameter("dileptons"))}, - ditracks_{consumes( - cfg.getParameter("ditracks"))}, - leptons_ttracks_{consumes( - cfg.getParameter("leptonTransientTracks"))}, - ditracks_ttracks_{consumes( - cfg.getParameter("transientTracks"))}, - pu_tracks_(consumes( - cfg.getParameter("PUtracks"))), - beamspot_{consumes( - cfg.getParameter("beamSpot"))}, + dileptons_{consumes(cfg.getParameter("dileptons"))}, + ditracks_{consumes(cfg.getParameter("ditracks"))}, + leptons_ttracks_{consumes(cfg.getParameter("leptonTransientTracks"))}, + ditracks_ttracks_{consumes(cfg.getParameter("transientTracks"))}, + pu_tracks_(consumes(cfg.getParameter("PUtracks"))), + beamspot_{consumes(cfg.getParameter("beamSpot"))}, dilepton_constraint_{cfg.getParameter("dileptonMassContraint")} { // output produces(); @@ -59,10 +53,9 @@ class BToTrkTrkLLBuilder : public edm::global::EDProducer<> { ~BToTrkTrkLLBuilder() override {} - void produce(edm::StreamID, edm::Event &, - const edm::EventSetup &) const override; + void produce(edm::StreamID, edm::Event &, const edm::EventSetup &) const override; - private: +private: const edm::ESGetToken bFieldToken_; // selections @@ -79,8 +72,7 @@ class BToTrkTrkLLBuilder : public edm::global::EDProducer<> { const bool dilepton_constraint_; }; -void BToTrkTrkLLBuilder::produce(edm::StreamID, edm::Event &evt, - edm::EventSetup const &iSetup) const { +void BToTrkTrkLLBuilder::produce(edm::StreamID, edm::Event &evt, edm::EventSetup const &iSetup) const { // input edm::Handle dileptons; evt.getByToken(dileptons_, dileptons); @@ -103,11 +95,9 @@ void BToTrkTrkLLBuilder::produce(edm::StreamID, edm::Event &evt, AnalyticalImpactPointExtrapolator extrapolator(&bField); // output - std::unique_ptr ret_val( - new pat::CompositeCandidateCollection()); + std::unique_ptr ret_val(new pat::CompositeCandidateCollection()); - for (size_t ditracks_idx = 0; ditracks_idx < ditracks->size(); - ++ditracks_idx) { + for (size_t ditracks_idx = 0; ditracks_idx < ditracks->size(); ++ditracks_idx) { // both k*,phi and lep pair already passed cuts; no need for more // preselection edm::Ptr ditracks_ptr(ditracks, ditracks_idx); @@ -126,8 +116,7 @@ void BToTrkTrkLLBuilder::produce(edm::StreamID, edm::Event &evt, // B0 candidate pat::CompositeCandidate cand; cand.setP4(ll_ptr->p4() + ditracks_ptr->p4()); - cand.setCharge(l1_ptr->charge() + l2_ptr->charge() + trk1_ptr->charge() + - trk2_ptr->charge()); + cand.setCharge(l1_ptr->charge() + l2_ptr->charge() + trk1_ptr->charge() + trk2_ptr->charge()); // save daughters - unfitted cand.addUserCand("l1", l1_ptr); @@ -154,47 +143,49 @@ void BToTrkTrkLLBuilder::produce(edm::StreamID, edm::Event &evt, trk1_p4.SetM(bph::K_MASS); trk2_p4.SetM(bph::K_MASS); - cand.addUserFloat("unfitted_B_mass_KK", - (trk1_p4 + trk2_p4 + lep1_p4 + lep2_p4).M()); + cand.addUserFloat("unfitted_B_mass_KK", (trk1_p4 + trk2_p4 + lep1_p4 + lep2_p4).M()); trk1_p4.SetM(bph::K_MASS); trk2_p4.SetM(bph::PI_MASS); - cand.addUserFloat("unfitted_B_mass_Kpi", - (trk1_p4 + trk2_p4 + lep1_p4 + lep2_p4).M()); + cand.addUserFloat("unfitted_B_mass_Kpi", (trk1_p4 + trk2_p4 + lep1_p4 + lep2_p4).M()); trk2_p4.SetM(bph::K_MASS); trk1_p4.SetM(bph::PI_MASS); - cand.addUserFloat("unfitted_B_mass_piK", - (trk1_p4 + trk2_p4 + lep1_p4 + lep2_p4).M()); + cand.addUserFloat("unfitted_B_mass_piK", (trk1_p4 + trk2_p4 + lep1_p4 + lep2_p4).M()); auto dr_info = bph::min_max_dr({l1_ptr, l2_ptr, trk1_ptr, trk2_ptr}); cand.addUserFloat("min_dr", dr_info.first); cand.addUserFloat("max_dr", dr_info.second); // check if pass pre vertex cut - if (!pre_vtx_selection_(cand)) continue; - - KinVtxFitter fitter( - {leptons_ttracks->at(l1_idx), leptons_ttracks->at(l2_idx), - ditracks_ttracks->at(trk1_idx), ditracks_ttracks->at(trk2_idx)}, - {l1_ptr->mass(), l2_ptr->mass(), bph::K_MASS, bph::K_MASS}, - {bph::LEP_SIGMA, bph::LEP_SIGMA, bph::K_SIGMA, bph::K_SIGMA}); - if (!fitter.success()) continue; - KinVtxFitter fitter_Kpi( - {leptons_ttracks->at(l1_idx), leptons_ttracks->at(l2_idx), - ditracks_ttracks->at(trk1_idx), ditracks_ttracks->at(trk2_idx)}, - {l1_ptr->mass(), l2_ptr->mass(), bph::K_MASS, bph::PI_MASS}, - {bph::LEP_SIGMA, bph::LEP_SIGMA, bph::K_SIGMA, bph::K_SIGMA}); - if (!fitter_Kpi.success()) continue; - KinVtxFitter fitter_piK( - {leptons_ttracks->at(l1_idx), leptons_ttracks->at(l2_idx), - ditracks_ttracks->at(trk1_idx), ditracks_ttracks->at(trk2_idx)}, - {l1_ptr->mass(), l2_ptr->mass(), bph::PI_MASS, bph::K_MASS}, - {bph::LEP_SIGMA, bph::LEP_SIGMA, bph::K_SIGMA, bph::K_SIGMA}); - if (!fitter_piK.success()) continue; + if (!pre_vtx_selection_(cand)) + continue; + + KinVtxFitter fitter({leptons_ttracks->at(l1_idx), + leptons_ttracks->at(l2_idx), + ditracks_ttracks->at(trk1_idx), + ditracks_ttracks->at(trk2_idx)}, + {l1_ptr->mass(), l2_ptr->mass(), bph::K_MASS, bph::K_MASS}, + {bph::LEP_SIGMA, bph::LEP_SIGMA, bph::K_SIGMA, bph::K_SIGMA}); + if (!fitter.success()) + continue; + KinVtxFitter fitter_Kpi({leptons_ttracks->at(l1_idx), + leptons_ttracks->at(l2_idx), + ditracks_ttracks->at(trk1_idx), + ditracks_ttracks->at(trk2_idx)}, + {l1_ptr->mass(), l2_ptr->mass(), bph::K_MASS, bph::PI_MASS}, + {bph::LEP_SIGMA, bph::LEP_SIGMA, bph::K_SIGMA, bph::K_SIGMA}); + if (!fitter_Kpi.success()) + continue; + KinVtxFitter fitter_piK({leptons_ttracks->at(l1_idx), + leptons_ttracks->at(l2_idx), + ditracks_ttracks->at(trk1_idx), + ditracks_ttracks->at(trk2_idx)}, + {l1_ptr->mass(), l2_ptr->mass(), bph::PI_MASS, bph::K_MASS}, + {bph::LEP_SIGMA, bph::LEP_SIGMA, bph::K_SIGMA, bph::K_SIGMA}); + if (!fitter_piK.success()) + continue; // B0 position - cand.setVertex(reco::Candidate::Point(fitter.fitted_vtx().x(), - fitter.fitted_vtx().y(), - fitter.fitted_vtx().z())); + cand.setVertex(reco::Candidate::Point(fitter.fitted_vtx().x(), fitter.fitted_vtx().y(), fitter.fitted_vtx().z())); // vertex vars cand.addUserFloat("sv_chi2", fitter.chi2()); @@ -202,31 +193,16 @@ void BToTrkTrkLLBuilder::produce(edm::StreamID, edm::Event &evt, cand.addUserFloat("sv_prob", fitter.prob()); // refitted kinematic vars - cand.addUserFloat("fitted_ditrack_mass_KK", - (fitter.daughter_p4(2) + fitter.daughter_p4(3)).mass()); - cand.addUserFloat( - "fitted_ditrack_mass_Kpi", - (fitter_Kpi.daughter_p4(2) + fitter_Kpi.daughter_p4(3)).mass()); - cand.addUserFloat( - "fitted_ditrack_mass_piK", - (fitter_piK.daughter_p4(2) + fitter_piK.daughter_p4(3)).mass()); - cand.addUserFloat( - "fitted_massErr_KK", - sqrt(fitter.fitted_candidate().kinematicParametersError().matrix()( - 6, 6))); - cand.addUserFloat( - "fitted_massErr_Kpi", - sqrt( - fitter_Kpi.fitted_candidate().kinematicParametersError().matrix()( - 6, 6))); - cand.addUserFloat( - "fitted_massErr_piK", - sqrt( - fitter_piK.fitted_candidate().kinematicParametersError().matrix()( - 6, 6))); - - cand.addUserFloat("fitted_mll", - (fitter.daughter_p4(0) + fitter.daughter_p4(1)).mass()); + cand.addUserFloat("fitted_ditrack_mass_KK", (fitter.daughter_p4(2) + fitter.daughter_p4(3)).mass()); + cand.addUserFloat("fitted_ditrack_mass_Kpi", (fitter_Kpi.daughter_p4(2) + fitter_Kpi.daughter_p4(3)).mass()); + cand.addUserFloat("fitted_ditrack_mass_piK", (fitter_piK.daughter_p4(2) + fitter_piK.daughter_p4(3)).mass()); + cand.addUserFloat("fitted_massErr_KK", sqrt(fitter.fitted_candidate().kinematicParametersError().matrix()(6, 6))); + cand.addUserFloat("fitted_massErr_Kpi", + sqrt(fitter_Kpi.fitted_candidate().kinematicParametersError().matrix()(6, 6))); + cand.addUserFloat("fitted_massErr_piK", + sqrt(fitter_piK.fitted_candidate().kinematicParametersError().matrix()(6, 6))); + + cand.addUserFloat("fitted_mll", (fitter.daughter_p4(0) + fitter.daughter_p4(1)).mass()); auto fit_p4 = fitter.fitted_p4(); cand.addUserFloat("fitted_pt", fit_p4.pt()); @@ -238,35 +214,32 @@ void BToTrkTrkLLBuilder::produce(edm::StreamID, edm::Event &evt, cand.addUserFloat("fitted_mass_piK", fitter_piK.fitted_p4().mass()); // other vars - cand.addUserFloat("cos_theta_2D", - bph::cos_theta_2D(fitter, *beamspot, cand.p4())); + cand.addUserFloat("cos_theta_2D", bph::cos_theta_2D(fitter, *beamspot, cand.p4())); - cand.addUserFloat("fitted_cos_theta_2D", - bph::cos_theta_2D(fitter, *beamspot, fit_p4)); + cand.addUserFloat("fitted_cos_theta_2D", bph::cos_theta_2D(fitter, *beamspot, fit_p4)); auto lxy = bph::l_xy(fitter, *beamspot); cand.addUserFloat("l_xy", lxy.value()); cand.addUserFloat("l_xy_unc", lxy.error()); // track impact parameter from dilepton SV - TrajectoryStateOnSurface tsos1 = extrapolator.extrapolate( - ditracks_ttracks->at(trk1_idx).impactPointState(), - fitter.fitted_vtx()); - std::pair cur2DIP1 = bph::signedTransverseImpactParameter( - tsos1, fitter.fitted_refvtx(), *beamspot); + TrajectoryStateOnSurface tsos1 = + extrapolator.extrapolate(ditracks_ttracks->at(trk1_idx).impactPointState(), fitter.fitted_vtx()); + std::pair cur2DIP1 = + bph::signedTransverseImpactParameter(tsos1, fitter.fitted_refvtx(), *beamspot); cand.addUserFloat("trk1_svip2d", cur2DIP1.second.value()); cand.addUserFloat("trk1_svip2d_err", cur2DIP1.second.error()); - TrajectoryStateOnSurface tsos2 = extrapolator.extrapolate( - ditracks_ttracks->at(trk2_idx).impactPointState(), - fitter.fitted_vtx()); - std::pair cur2DIP2 = bph::signedTransverseImpactParameter( - tsos2, fitter.fitted_refvtx(), *beamspot); + TrajectoryStateOnSurface tsos2 = + extrapolator.extrapolate(ditracks_ttracks->at(trk2_idx).impactPointState(), fitter.fitted_vtx()); + std::pair cur2DIP2 = + bph::signedTransverseImpactParameter(tsos2, fitter.fitted_refvtx(), *beamspot); cand.addUserFloat("trk2_svip2d", cur2DIP2.second.value()); cand.addUserFloat("trk2_svip2d_err", cur2DIP2.second.error()); // post fit selection - if (!post_vtx_selection_(cand)) continue; + if (!post_vtx_selection_(cand)) + continue; cand.addUserFloat("vtx_x", cand.vx()); cand.addUserFloat("vtx_y", cand.vy()); @@ -284,12 +257,9 @@ void BToTrkTrkLLBuilder::produce(edm::StreamID, edm::Event &evt, std::vector dnames{"l1", "l2", "trk1", "trk2"}; for (size_t idaughter = 0; idaughter < dnames.size(); idaughter++) { - cand.addUserFloat("fitted_" + dnames[idaughter] + "_pt", - fitter.daughter_p4(idaughter).pt()); - cand.addUserFloat("fitted_" + dnames[idaughter] + "_eta", - fitter.daughter_p4(idaughter).eta()); - cand.addUserFloat("fitted_" + dnames[idaughter] + "_phi", - fitter.daughter_p4(idaughter).phi()); + cand.addUserFloat("fitted_" + dnames[idaughter] + "_pt", fitter.daughter_p4(idaughter).pt()); + cand.addUserFloat("fitted_" + dnames[idaughter] + "_eta", fitter.daughter_p4(idaughter).eta()); + cand.addUserFloat("fitted_" + dnames[idaughter] + "_phi", fitter.daughter_p4(idaughter).phi()); } // compute isolation @@ -298,66 +268,76 @@ void BToTrkTrkLLBuilder::produce(edm::StreamID, edm::Event &evt, cand.addUserFloat(dnames[idaughter] + "_iso04", isos[idaughter]); } - float constraint_sv_prob=-9; - float constraint_pt=-9; - float constraint_eta=-9; - float constraint_phi=-9; - float constraint_mass_KK=-9; - float constraint_mass_Kpi=-9; - float constraint_mass_piK=-9; - float constraint_massErr_KK=-9; - float constraint_massErr_Kpi=-9; - float constraint_massErr_piK=-9; - float constraint_mll=-9; + float constraint_sv_prob = -9; + float constraint_pt = -9; + float constraint_eta = -9; + float constraint_phi = -9; + float constraint_mass_KK = -9; + float constraint_mass_Kpi = -9; + float constraint_mass_piK = -9; + float constraint_massErr_KK = -9; + float constraint_massErr_Kpi = -9; + float constraint_massErr_piK = -9; + float constraint_mll = -9; const double dilepton_mass = ll_ptr->userFloat("fitted_mass"); const double jpsi_bin[2] = {2.8, 3.35}; const double psi2s_bin[2] = {3.45, 3.85}; - if (dilepton_constraint_ && - ((dilepton_mass > jpsi_bin[0] && dilepton_mass < jpsi_bin[1]) || - (dilepton_mass > psi2s_bin[0] && dilepton_mass < psi2s_bin[1]))) { + if (dilepton_constraint_ && ((dilepton_mass > jpsi_bin[0] && dilepton_mass < jpsi_bin[1]) || + (dilepton_mass > psi2s_bin[0] && dilepton_mass < psi2s_bin[1]))) { ParticleMass JPsi_mass = 3.0969; // Jpsi mass 3.096900±0.000006 ParticleMass Psi2S_mass = 3.6861; // Psi2S mass 3.6861093±0.0000034 - ParticleMass mass_constraint = - (dilepton_mass < jpsi_bin[1]) ? JPsi_mass : Psi2S_mass; + ParticleMass mass_constraint = (dilepton_mass < jpsi_bin[1]) ? JPsi_mass : Psi2S_mass; // Mass constraint is applied to the first two particles in the // "particles" vector Make sure that the first two particles are the // ones you want to constrain - KinVtxFitter constraint_fitter_KK( - {leptons_ttracks->at(l1_idx), leptons_ttracks->at(l2_idx), - ditracks_ttracks->at(trk1_idx), ditracks_ttracks->at(trk2_idx)}, - {l1_ptr->mass(), l2_ptr->mass(), bph::K_MASS, bph::K_MASS}, - {bph::LEP_SIGMA, bph::LEP_SIGMA, bph::K_SIGMA, bph::K_SIGMA}, mass_constraint); - if (!constraint_fitter_KK.success()) continue; - KinVtxFitter constraint_fitter_Kpi( - {leptons_ttracks->at(l1_idx), leptons_ttracks->at(l2_idx), - ditracks_ttracks->at(trk1_idx), ditracks_ttracks->at(trk2_idx)}, - {l1_ptr->mass(), l2_ptr->mass(), bph::K_MASS, bph::PI_MASS}, - {bph::LEP_SIGMA, bph::LEP_SIGMA, bph::K_SIGMA, bph::K_SIGMA}, mass_constraint); - if (!constraint_fitter_Kpi.success()) continue; - KinVtxFitter constraint_fitter_piK( - {leptons_ttracks->at(l1_idx), leptons_ttracks->at(l2_idx), - ditracks_ttracks->at(trk1_idx), ditracks_ttracks->at(trk2_idx)}, - {l1_ptr->mass(), l2_ptr->mass(), bph::PI_MASS, bph::K_MASS}, - {bph::LEP_SIGMA, bph::LEP_SIGMA, bph::K_SIGMA, bph::K_SIGMA}, mass_constraint); - if (!constraint_fitter_piK.success()) continue; + KinVtxFitter constraint_fitter_KK({leptons_ttracks->at(l1_idx), + leptons_ttracks->at(l2_idx), + ditracks_ttracks->at(trk1_idx), + ditracks_ttracks->at(trk2_idx)}, + {l1_ptr->mass(), l2_ptr->mass(), bph::K_MASS, bph::K_MASS}, + {bph::LEP_SIGMA, bph::LEP_SIGMA, bph::K_SIGMA, bph::K_SIGMA}, + mass_constraint); + if (!constraint_fitter_KK.success()) + continue; + KinVtxFitter constraint_fitter_Kpi({leptons_ttracks->at(l1_idx), + leptons_ttracks->at(l2_idx), + ditracks_ttracks->at(trk1_idx), + ditracks_ttracks->at(trk2_idx)}, + {l1_ptr->mass(), l2_ptr->mass(), bph::K_MASS, bph::PI_MASS}, + {bph::LEP_SIGMA, bph::LEP_SIGMA, bph::K_SIGMA, bph::K_SIGMA}, + mass_constraint); + if (!constraint_fitter_Kpi.success()) + continue; + KinVtxFitter constraint_fitter_piK({leptons_ttracks->at(l1_idx), + leptons_ttracks->at(l2_idx), + ditracks_ttracks->at(trk1_idx), + ditracks_ttracks->at(trk2_idx)}, + {l1_ptr->mass(), l2_ptr->mass(), bph::PI_MASS, bph::K_MASS}, + {bph::LEP_SIGMA, bph::LEP_SIGMA, bph::K_SIGMA, bph::K_SIGMA}, + mass_constraint); + if (!constraint_fitter_piK.success()) + continue; if (constraint_fitter_KK.success()) { auto constraint_p4 = constraint_fitter_KK.fitted_p4(); - constraint_sv_prob=constraint_fitter_KK.prob(); - constraint_pt=constraint_p4.pt(); - constraint_eta=constraint_p4.eta(); - constraint_phi=constraint_p4.phi(); - constraint_mass_KK=constraint_fitter_KK.fitted_candidate().mass(); - constraint_massErr_KK=sqrt(constraint_fitter_KK.fitted_candidate().kinematicParametersError().matrix()(6, 6)); - constraint_mass_Kpi= constraint_fitter_Kpi.fitted_candidate().mass(); - constraint_massErr_Kpi=sqrt(constraint_fitter_Kpi.fitted_candidate().kinematicParametersError().matrix()(6, 6)); - constraint_mass_piK=constraint_fitter_piK.fitted_candidate().mass(); - constraint_massErr_piK=sqrt(constraint_fitter_piK.fitted_candidate().kinematicParametersError().matrix()(6, 6)); - constraint_mll=(constraint_fitter_KK.daughter_p4(0) + constraint_fitter_KK.daughter_p4(1)).mass(); + constraint_sv_prob = constraint_fitter_KK.prob(); + constraint_pt = constraint_p4.pt(); + constraint_eta = constraint_p4.eta(); + constraint_phi = constraint_p4.phi(); + constraint_mass_KK = constraint_fitter_KK.fitted_candidate().mass(); + constraint_massErr_KK = + sqrt(constraint_fitter_KK.fitted_candidate().kinematicParametersError().matrix()(6, 6)); + constraint_mass_Kpi = constraint_fitter_Kpi.fitted_candidate().mass(); + constraint_massErr_Kpi = + sqrt(constraint_fitter_Kpi.fitted_candidate().kinematicParametersError().matrix()(6, 6)); + constraint_mass_piK = constraint_fitter_piK.fitted_candidate().mass(); + constraint_massErr_piK = + sqrt(constraint_fitter_piK.fitted_candidate().kinematicParametersError().matrix()(6, 6)); + constraint_mll = (constraint_fitter_KK.daughter_p4(0) + constraint_fitter_KK.daughter_p4(1)).mass(); } } cand.addUserFloat("constraint_sv_prob", constraint_sv_prob); diff --git a/PhysicsTools/BPHNano/plugins/BToV0LLBuilder.cc b/PhysicsTools/BPHNano/plugins/BToV0LLBuilder.cc index aaa11117a1fa..0aa72a0f70ac 100644 --- a/PhysicsTools/BPHNano/plugins/BToV0LLBuilder.cc +++ b/PhysicsTools/BPHNano/plugins/BToV0LLBuilder.cc @@ -38,35 +38,28 @@ class BToV0LLBuilder : public edm::global::EDProducer<> { // perhaps we need better structure here (begin run etc) - public: +public: typedef std::vector TransientTrackCollection; explicit BToV0LLBuilder(const edm::ParameterSet &cfg) : bFieldToken_{esConsumes()}, pre_vtx_selection_{cfg.getParameter("preVtxSelection")}, post_vtx_selection_{cfg.getParameter("postVtxSelection")}, - dileptons_{consumes( - cfg.getParameter("dileptons"))}, - leptons_ttracks_{consumes( - cfg.getParameter("leptonTransientTracks"))}, - v0s_{consumes( - cfg.getParameter("v0s"))}, - v0_ttracks_{consumes( - cfg.getParameter("v0TransientTracks"))}, - pu_tracks_(consumes( - cfg.getParameter("PUtracks"))), - beamspot_{consumes( - cfg.getParameter("beamSpot"))}, + dileptons_{consumes(cfg.getParameter("dileptons"))}, + leptons_ttracks_{consumes(cfg.getParameter("leptonTransientTracks"))}, + v0s_{consumes(cfg.getParameter("v0s"))}, + v0_ttracks_{consumes(cfg.getParameter("v0TransientTracks"))}, + pu_tracks_(consumes(cfg.getParameter("PUtracks"))), + beamspot_{consumes(cfg.getParameter("beamSpot"))}, dilepton_constraint_{cfg.getParameter("dileptonMassContraint")} { produces(); } ~BToV0LLBuilder() override {} - void produce(edm::StreamID, edm::Event &, - const edm::EventSetup &) const override; + void produce(edm::StreamID, edm::Event &, const edm::EventSetup &) const override; - private: +private: const edm::ESGetToken bFieldToken_; // selection @@ -83,8 +76,7 @@ class BToV0LLBuilder : public edm::global::EDProducer<> { const bool dilepton_constraint_; }; -void BToV0LLBuilder::produce(edm::StreamID, edm::Event &evt, - edm::EventSetup const &iSetup) const { +void BToV0LLBuilder::produce(edm::StreamID, edm::Event &evt, edm::EventSetup const &iSetup) const { // input edm::Handle dileptons; evt.getByToken(dileptons_, dileptons); @@ -107,8 +99,7 @@ void BToV0LLBuilder::produce(edm::StreamID, edm::Event &evt, AnalyticalImpactPointExtrapolator extrapolator(&bField); // output - std::unique_ptr ret_val( - new pat::CompositeCandidateCollection()); + std::unique_ptr ret_val(new pat::CompositeCandidateCollection()); // access V0 for (size_t v0_idx = 0; v0_idx < v0s->size(); ++v0_idx) { @@ -136,24 +127,22 @@ void BToV0LLBuilder::produce(edm::StreamID, edm::Event &evt, cand.addUserFloat("max_dr", dr_info.second); // built B - if (!pre_vtx_selection_(cand)) continue; + if (!pre_vtx_selection_(cand)) + continue; - KinVtxFitter fitter({leptons_ttracks->at(l1_idx), - leptons_ttracks->at(l2_idx), v0_ttracks->at(v0_idx)}, + KinVtxFitter fitter({leptons_ttracks->at(l1_idx), leptons_ttracks->at(l2_idx), v0_ttracks->at(v0_idx)}, {l1_ptr->mass(), l2_ptr->mass(), v0_ptr->mass()}, {bph::LEP_SIGMA, bph::LEP_SIGMA, v0_ptr->userFloat("massErr")}); - if (!fitter.success()) continue; + if (!fitter.success()) + continue; - cand.setVertex(reco::Candidate::Point(fitter.fitted_vtx().x(), - fitter.fitted_vtx().y(), - fitter.fitted_vtx().z())); + cand.setVertex(reco::Candidate::Point(fitter.fitted_vtx().x(), fitter.fitted_vtx().y(), fitter.fitted_vtx().z())); cand.addUserFloat("sv_chi2", fitter.chi2()); cand.addUserFloat("sv_ndof", fitter.dof()); cand.addUserFloat("sv_prob", fitter.prob()); - cand.addUserFloat("fitted_mll", - (fitter.daughter_p4(0) + fitter.daughter_p4(1)).mass()); + cand.addUserFloat("fitted_mll", (fitter.daughter_p4(0) + fitter.daughter_p4(1)).mass()); cand.addUserFloat("fitted_v0_mass", fitter.daughter_p4(2).mass()); auto fit_p4 = fitter.fitted_p4(); @@ -161,27 +150,23 @@ void BToV0LLBuilder::produce(edm::StreamID, edm::Event &evt, cand.addUserFloat("fitted_eta", fit_p4.eta()); cand.addUserFloat("fitted_phi", fit_p4.phi()); cand.addUserFloat("fitted_mass", fitter.fitted_candidate().mass()); - cand.addUserFloat( - "fitted_massErr", - sqrt(fitter.fitted_candidate().kinematicParametersError().matrix()( - 6, 6))); - cand.addUserFloat("cos_theta_2D", - bph::cos_theta_2D(fitter, *beamspot, cand.p4())); - cand.addUserFloat("fitted_cos_theta_2D", - bph::cos_theta_2D(fitter, *beamspot, fit_p4)); + cand.addUserFloat("fitted_massErr", sqrt(fitter.fitted_candidate().kinematicParametersError().matrix()(6, 6))); + cand.addUserFloat("cos_theta_2D", bph::cos_theta_2D(fitter, *beamspot, cand.p4())); + cand.addUserFloat("fitted_cos_theta_2D", bph::cos_theta_2D(fitter, *beamspot, fit_p4)); auto lxy = bph::l_xy(fitter, *beamspot); cand.addUserFloat("l_xy", lxy.value()); cand.addUserFloat("l_xy_unc", lxy.error()); - TrajectoryStateOnSurface tsos = extrapolator.extrapolate( - v0_ttracks->at(v0_idx).impactPointState(), fitter.fitted_vtx()); - std::pair cur2DIP = bph::signedTransverseImpactParameter( - tsos, fitter.fitted_refvtx(), *beamspot); + TrajectoryStateOnSurface tsos = + extrapolator.extrapolate(v0_ttracks->at(v0_idx).impactPointState(), fitter.fitted_vtx()); + std::pair cur2DIP = + bph::signedTransverseImpactParameter(tsos, fitter.fitted_refvtx(), *beamspot); cand.addUserFloat("v0_svip2d", cur2DIP.second.value()); cand.addUserFloat("v0_svip2d_err", cur2DIP.second.error()); - if (!post_vtx_selection_(cand)) continue; + if (!post_vtx_selection_(cand)) + continue; cand.addUserFloat("vtx_x", cand.vx()); cand.addUserFloat("vtx_y", cand.vy()); @@ -198,12 +183,9 @@ void BToV0LLBuilder::produce(edm::StreamID, edm::Event &evt, // refitted daughters (leptons/tracks) std::vector dnames{"l1", "l2", "v0"}; for (size_t idaughter = 0; idaughter < dnames.size(); idaughter++) { - cand.addUserFloat("fitted_" + dnames[idaughter] + "_pt", - fitter.daughter_p4(idaughter).pt()); - cand.addUserFloat("fitted_" + dnames[idaughter] + "_eta", - fitter.daughter_p4(idaughter).eta()); - cand.addUserFloat("fitted_" + dnames[idaughter] + "_phi", - fitter.daughter_p4(idaughter).phi()); + cand.addUserFloat("fitted_" + dnames[idaughter] + "_pt", fitter.daughter_p4(idaughter).pt()); + cand.addUserFloat("fitted_" + dnames[idaughter] + "_eta", fitter.daughter_p4(idaughter).eta()); + cand.addUserFloat("fitted_" + dnames[idaughter] + "_phi", fitter.daughter_p4(idaughter).phi()); } // compute isolation @@ -211,42 +193,39 @@ void BToV0LLBuilder::produce(edm::StreamID, edm::Event &evt, for (size_t idaughter = 0; idaughter < dnames.size(); idaughter++) { cand.addUserFloat(dnames[idaughter] + "_iso04", isos[idaughter]); } - float constraint_sv_prob=-9; - float constraint_pt=-9; - float constraint_eta=-9; - float constraint_phi=-9; - float constraint_mass=-9; - float constraint_massErr=-9; - float constraint_mll=-9; + float constraint_sv_prob = -9; + float constraint_pt = -9; + float constraint_eta = -9; + float constraint_phi = -9; + float constraint_mass = -9; + float constraint_massErr = -9; + float constraint_mll = -9; const double dilepton_mass = ll_ptr->userFloat("fitted_mass"); const double jpsi_bin[2] = {2.8, 3.35}; const double psi2s_bin[2] = {3.45, 3.85}; - if (dilepton_constraint_ && - ((dilepton_mass > jpsi_bin[0] && dilepton_mass < jpsi_bin[1]) || - (dilepton_mass > psi2s_bin[0] && dilepton_mass < psi2s_bin[1]))) { + if (dilepton_constraint_ && ((dilepton_mass > jpsi_bin[0] && dilepton_mass < jpsi_bin[1]) || + (dilepton_mass > psi2s_bin[0] && dilepton_mass < psi2s_bin[1]))) { ParticleMass JPsi_mass = 3.0969; // Jpsi mass 3.096900±0.000006 ParticleMass Psi2S_mass = 3.6861; // Psi2S mass 3.6861093±0.0000034 - ParticleMass mass_constraint = - (dilepton_mass < jpsi_bin[1]) ? JPsi_mass : Psi2S_mass; + ParticleMass mass_constraint = (dilepton_mass < jpsi_bin[1]) ? JPsi_mass : Psi2S_mass; // Mass constraint is applied to the first two particles in the // "particles" vector Make sure that the first two particles are the // ones you want to constrain KinVtxFitter constraint_fitter( - {leptons_ttracks->at(l1_idx), leptons_ttracks->at(l2_idx), - v0_ttracks->at(v0_idx)}, + {leptons_ttracks->at(l1_idx), leptons_ttracks->at(l2_idx), v0_ttracks->at(v0_idx)}, {l1_ptr->mass(), l2_ptr->mass(), v0_ptr->mass()}, {bph::LEP_SIGMA, bph::LEP_SIGMA, v0_ptr->userFloat("massErr")}, mass_constraint); if (constraint_fitter.success()) { auto constraint_p4 = constraint_fitter.fitted_p4(); - constraint_sv_prob=constraint_fitter.prob(); - constraint_pt=constraint_p4.pt(); - constraint_eta=constraint_p4.eta(); - constraint_phi=constraint_p4.phi(); - constraint_mass=constraint_fitter.fitted_candidate().mass(); - constraint_massErr=sqrt(constraint_fitter.fitted_candidate().kinematicParametersError().matrix()(6, 6)); - constraint_mll=(constraint_fitter.daughter_p4(0) + constraint_fitter.daughter_p4(1)).mass(); + constraint_sv_prob = constraint_fitter.prob(); + constraint_pt = constraint_p4.pt(); + constraint_eta = constraint_p4.eta(); + constraint_phi = constraint_p4.phi(); + constraint_mass = constraint_fitter.fitted_candidate().mass(); + constraint_massErr = sqrt(constraint_fitter.fitted_candidate().kinematicParametersError().matrix()(6, 6)); + constraint_mll = (constraint_fitter.daughter_p4(0) + constraint_fitter.daughter_p4(1)).mass(); } } cand.addUserFloat("constraint_sv_prob", constraint_sv_prob); diff --git a/PhysicsTools/BPHNano/plugins/DiLeptonBuilder.cc b/PhysicsTools/BPHNano/plugins/DiLeptonBuilder.cc index 994e2aecf1f3..eeee1ccd2822 100644 --- a/PhysicsTools/BPHNano/plugins/DiLeptonBuilder.cc +++ b/PhysicsTools/BPHNano/plugins/DiLeptonBuilder.cc @@ -23,7 +23,7 @@ template class DiLeptonBuilder : public edm::global::EDProducer<> { // perhaps we need better structure here (begin run etc) - public: +public: typedef std::vector LeptonCollection; typedef std::vector TransientTrackCollection; @@ -32,33 +32,26 @@ class DiLeptonBuilder : public edm::global::EDProducer<> { l2_selection_{cfg.getParameter("lep2Selection")}, pre_vtx_selection_{cfg.getParameter("preVtxSelection")}, post_vtx_selection_{cfg.getParameter("postVtxSelection")}, - src_{ - consumes(cfg.getParameter("src"))}, - ttracks_src_{consumes( - cfg.getParameter("transientTracksSrc"))} { + src_{consumes(cfg.getParameter("src"))}, + ttracks_src_{consumes(cfg.getParameter("transientTracksSrc"))} { produces("SelectedDiLeptons"); } ~DiLeptonBuilder() override {} - void produce(edm::StreamID, edm::Event &, - const edm::EventSetup &) const override; - - private: - const StringCutObjectSelector l1_selection_; // cut on leading lepton - const StringCutObjectSelector - l2_selection_; // cut on sub-leading lepton - const StringCutObjectSelector - pre_vtx_selection_; // cut on the di-lepton before the SV fit - const StringCutObjectSelector - post_vtx_selection_; // cut on the di-lepton after the SV fit + void produce(edm::StreamID, edm::Event &, const edm::EventSetup &) const override; + +private: + const StringCutObjectSelector l1_selection_; // cut on leading lepton + const StringCutObjectSelector l2_selection_; // cut on sub-leading lepton + const StringCutObjectSelector pre_vtx_selection_; // cut on the di-lepton before the SV fit + const StringCutObjectSelector post_vtx_selection_; // cut on the di-lepton after the SV fit const edm::EDGetTokenT src_; const edm::EDGetTokenT ttracks_src_; }; template -void DiLeptonBuilder::produce(edm::StreamID, edm::Event &evt, - edm::EventSetup const &) const { +void DiLeptonBuilder::produce(edm::StreamID, edm::Event &evt, edm::EventSetup const &) const { // input edm::Handle leptons; evt.getByToken(src_, leptons); @@ -67,16 +60,17 @@ void DiLeptonBuilder::produce(edm::StreamID, edm::Event &evt, evt.getByToken(ttracks_src_, ttracks); // output - std::unique_ptr ret_value( - new pat::CompositeCandidateCollection()); + std::unique_ptr ret_value(new pat::CompositeCandidateCollection()); for (size_t l1_idx = 0; l1_idx < leptons->size(); ++l1_idx) { edm::Ptr l1_ptr(leptons, l1_idx); - if (!l1_selection_(*l1_ptr)) continue; + if (!l1_selection_(*l1_ptr)) + continue; for (size_t l2_idx = l1_idx + 1; l2_idx < leptons->size(); ++l2_idx) { edm::Ptr l2_ptr(leptons, l2_idx); - if (!l2_selection_(*l2_ptr)) continue; + if (!l2_selection_(*l2_ptr)) + continue; pat::CompositeCandidate lepton_pair; lepton_pair.setP4(l1_ptr->p4() + l2_ptr->p4()); @@ -94,27 +88,21 @@ void DiLeptonBuilder::produce(edm::StreamID, edm::Event &evt, continue; // before making the SV, cut on the info we have KinVtxFitter fitter( - {ttracks->at(l1_idx), ttracks->at(l2_idx)}, - {l1_ptr->mass(), l2_ptr->mass()}, - {bph::LEP_SIGMA, bph::LEP_SIGMA} // some small sigma for the particle mass + {ttracks->at(l1_idx), ttracks->at(l2_idx)}, {l1_ptr->mass(), l2_ptr->mass()}, {bph::LEP_SIGMA, bph::LEP_SIGMA} + // some small sigma for the particle mass ); - if (!fitter.success()) continue; - lepton_pair.setVertex(reco::Candidate::Point(fitter.fitted_vtx().x(), - fitter.fitted_vtx().y(), - fitter.fitted_vtx().z())); + if (!fitter.success()) + continue; + lepton_pair.setVertex( + reco::Candidate::Point(fitter.fitted_vtx().x(), fitter.fitted_vtx().y(), fitter.fitted_vtx().z())); lepton_pair.addUserInt("sv_ok", fitter.success() ? 1 : 0); lepton_pair.addUserFloat("sv_chi2", fitter.chi2()); lepton_pair.addUserFloat("sv_ndof", fitter.dof()); // float?? lepton_pair.addUserFloat("sv_prob", fitter.prob()); + lepton_pair.addUserFloat("fitted_mass", fitter.success() ? fitter.fitted_candidate().mass() : -1); lepton_pair.addUserFloat( - "fitted_mass", - fitter.success() ? fitter.fitted_candidate().mass() : -1); - lepton_pair.addUserFloat("fitted_massErr", - fitter.success() - ? sqrt(fitter.fitted_candidate() - .kinematicParametersError() - .matrix()(6, 6)) - : -1); + "fitted_massErr", + fitter.success() ? sqrt(fitter.fitted_candidate().kinematicParametersError().matrix()(6, 6)) : -1); lepton_pair.addUserFloat("vtx_x", lepton_pair.vx()); lepton_pair.addUserFloat("vtx_y", lepton_pair.vy()); lepton_pair.addUserFloat("vtx_z", lepton_pair.vz()); @@ -122,7 +110,8 @@ void DiLeptonBuilder::produce(edm::StreamID, edm::Event &evt, // if needed, add here more stuff // cut on the SV info - if (!post_vtx_selection_(lepton_pair)) continue; + if (!post_vtx_selection_(lepton_pair)) + continue; ret_value->push_back(lepton_pair); } } diff --git a/PhysicsTools/BPHNano/plugins/DiTrackBuilder.cc b/PhysicsTools/BPHNano/plugins/DiTrackBuilder.cc index 0eed25a19639..8c3e23b252b9 100644 --- a/PhysicsTools/BPHNano/plugins/DiTrackBuilder.cc +++ b/PhysicsTools/BPHNano/plugins/DiTrackBuilder.cc @@ -26,7 +26,7 @@ #include "helper.h" class DiTrackBuilder : public edm::global::EDProducer<> { - public: +public: typedef std::vector TransientTrackCollection; explicit DiTrackBuilder(const edm::ParameterSet &cfg) @@ -34,12 +34,9 @@ class DiTrackBuilder : public edm::global::EDProducer<> { trk2_selection_{cfg.getParameter("trk2Selection")}, pre_vtx_selection_{cfg.getParameter("preVtxSelection")}, post_vtx_selection_{cfg.getParameter("postVtxSelection")}, - pfcands_{consumes( - cfg.getParameter("tracks"))}, - ttracks_{consumes( - cfg.getParameter("transientTracks"))}, - beamspot_{consumes( - cfg.getParameter("beamSpot"))}, + pfcands_{consumes(cfg.getParameter("tracks"))}, + ttracks_{consumes(cfg.getParameter("transientTracks"))}, + beamspot_{consumes(cfg.getParameter("beamSpot"))}, trk1_mass_{cfg.getParameter("trk1Mass")}, trk2_mass_{cfg.getParameter("trk2Mass")} { // output @@ -48,29 +45,22 @@ class DiTrackBuilder : public edm::global::EDProducer<> { ~DiTrackBuilder() override {} - void produce(edm::StreamID, edm::Event &, - const edm::EventSetup &) const override; - - private: - const StringCutObjectSelector - trk1_selection_; // cuts on leading cand - const StringCutObjectSelector - trk2_selection_; // sub-leading cand - const StringCutObjectSelector - pre_vtx_selection_; // cut on the di-track before the SV fit - const StringCutObjectSelector - post_vtx_selection_; // cut on the di-track after the SV fit + void produce(edm::StreamID, edm::Event &, const edm::EventSetup &) const override; + +private: + const StringCutObjectSelector trk1_selection_; // cuts on leading cand + const StringCutObjectSelector trk2_selection_; // sub-leading cand + const StringCutObjectSelector pre_vtx_selection_; // cut on the di-track before the SV fit + const StringCutObjectSelector post_vtx_selection_; // cut on the di-track after the SV fit const edm::EDGetTokenT - pfcands_; // input PF cands this is sorted in pT in previous step - const edm::EDGetTokenT - ttracks_; // input TTracks of PF cands + pfcands_; // input PF cands this is sorted in pT in previous step + const edm::EDGetTokenT ttracks_; // input TTracks of PF cands const edm::EDGetTokenT beamspot_; double trk1_mass_; double trk2_mass_; }; -void DiTrackBuilder::produce(edm::StreamID, edm::Event &evt, - edm::EventSetup const &) const { +void DiTrackBuilder::produce(edm::StreamID, edm::Event &evt, edm::EventSetup const &) const { // inputs edm::Handle pfcands; evt.getByToken(pfcands_, pfcands); @@ -80,19 +70,19 @@ void DiTrackBuilder::produce(edm::StreamID, edm::Event &evt, evt.getByToken(beamspot_, beamspot); // output - std::unique_ptr ditrack_out( - new pat::CompositeCandidateCollection()); + std::unique_ptr ditrack_out(new pat::CompositeCandidateCollection()); // main loop for (size_t trk1_idx = 0; trk1_idx < pfcands->size(); ++trk1_idx) { edm::Ptr trk1_ptr(pfcands, trk1_idx); - if (!trk1_selection_(*trk1_ptr)) continue; + if (!trk1_selection_(*trk1_ptr)) + continue; - for (size_t trk2_idx = trk1_idx + 1; trk2_idx < pfcands->size(); - ++trk2_idx) { + for (size_t trk2_idx = trk1_idx + 1; trk2_idx < pfcands->size(); ++trk2_idx) { edm::Ptr trk2_ptr(pfcands, trk2_idx); // if (trk1_ptr->charge() == trk2_ptr->charge()) continue; - if (!trk2_selection_(*trk2_ptr)) continue; + if (!trk2_selection_(*trk2_ptr)) + continue; pat::CompositeCandidate ditrack_cand; auto trk1_p4 = trk1_ptr->polarP4(); @@ -101,8 +91,7 @@ void DiTrackBuilder::produce(edm::StreamID, edm::Event &evt, trk2_p4.SetM(bph::K_MASS); ditrack_cand.setP4(trk1_p4 + trk2_p4); ditrack_cand.setCharge(trk1_ptr->charge() + trk2_ptr->charge()); - ditrack_cand.addUserFloat("trk_deltaR", - reco::deltaR(*trk1_ptr, *trk2_ptr)); + ditrack_cand.addUserFloat("trk_deltaR", reco::deltaR(*trk1_ptr, *trk2_ptr)); // save indices ditrack_cand.addUserInt("trk1_idx", trk1_idx); ditrack_cand.addUserInt("trk2_idx", trk2_idx); @@ -121,67 +110,55 @@ void DiTrackBuilder::produce(edm::StreamID, edm::Event &evt, trk2_p4.SetM(bph::K_MASS); trk1_p4.SetM(bph::K_MASS); - if (!pre_vtx_selection_(ditrack_cand)) continue; + if (!pre_vtx_selection_(ditrack_cand)) + continue; - KinVtxFitter fitter({ttracks->at(trk1_idx), ttracks->at(trk2_idx)}, - {bph::K_MASS, bph::K_MASS}, - {bph::K_SIGMA, bph::K_SIGMA} // K and PI sigma equal... + KinVtxFitter fitter( + {ttracks->at(trk1_idx), ttracks->at(trk2_idx)}, {bph::K_MASS, bph::K_MASS}, {bph::K_SIGMA, bph::K_SIGMA} + // K and PI sigma equal... ); - if (!fitter.success()) continue; - ditrack_cand.addUserFloat("fitted_mass_KK", - fitter.fitted_candidate().mass()); - ditrack_cand.addUserFloat( - "fitted_mass_KK_Err", - sqrt(fitter.fitted_candidate().kinematicParametersError().matrix()( - 6, 6))); + if (!fitter.success()) + continue; + ditrack_cand.addUserFloat("fitted_mass_KK", fitter.fitted_candidate().mass()); + ditrack_cand.addUserFloat("fitted_mass_KK_Err", + sqrt(fitter.fitted_candidate().kinematicParametersError().matrix()(6, 6))); // fits required in order to calculate the error of the mass for each mass // hypothesis. - KinVtxFitter fitter_Kpi({ttracks->at(trk1_idx), ttracks->at(trk2_idx)}, - {bph::K_MASS, bph::PI_MASS}, - {bph::K_SIGMA, bph::K_SIGMA} // K and PI sigma equal... + KinVtxFitter fitter_Kpi( + {ttracks->at(trk1_idx), ttracks->at(trk2_idx)}, {bph::K_MASS, bph::PI_MASS}, {bph::K_SIGMA, bph::K_SIGMA} + // K and PI sigma equal... ); - if (!fitter_Kpi.success()) continue; - ditrack_cand.addUserFloat("fitted_mass_Kpi", - fitter_Kpi.fitted_candidate().mass()); - ditrack_cand.addUserFloat( - "fitted_mass_Kpi_Err", - sqrt( - fitter_Kpi.fitted_candidate().kinematicParametersError().matrix()( - 6, 6))); - KinVtxFitter fitter_piK({ttracks->at(trk1_idx), ttracks->at(trk2_idx)}, - {bph::PI_MASS, bph::K_MASS}, - {bph::K_SIGMA, bph::K_SIGMA} // K and PI sigma equal... + if (!fitter_Kpi.success()) + continue; + ditrack_cand.addUserFloat("fitted_mass_Kpi", fitter_Kpi.fitted_candidate().mass()); + ditrack_cand.addUserFloat("fitted_mass_Kpi_Err", + sqrt(fitter_Kpi.fitted_candidate().kinematicParametersError().matrix()(6, 6))); + KinVtxFitter fitter_piK( + {ttracks->at(trk1_idx), ttracks->at(trk2_idx)}, {bph::PI_MASS, bph::K_MASS}, {bph::K_SIGMA, bph::K_SIGMA} + // K and PI sigma equal... ); - if (!fitter_piK.success()) continue; - ditrack_cand.addUserFloat("fitted_mass_piK", - fitter_piK.fitted_candidate().mass()); - ditrack_cand.addUserFloat( - "fitted_mass_piK_Err", - sqrt( - fitter_piK.fitted_candidate().kinematicParametersError().matrix()( - 6, 6))); - - ditrack_cand.setVertex(reco::Candidate::Point(fitter.fitted_vtx().x(), - fitter.fitted_vtx().y(), - fitter.fitted_vtx().z())); + if (!fitter_piK.success()) + continue; + ditrack_cand.addUserFloat("fitted_mass_piK", fitter_piK.fitted_candidate().mass()); + ditrack_cand.addUserFloat("fitted_mass_piK_Err", + sqrt(fitter_piK.fitted_candidate().kinematicParametersError().matrix()(6, 6))); + + ditrack_cand.setVertex( + reco::Candidate::Point(fitter.fitted_vtx().x(), fitter.fitted_vtx().y(), fitter.fitted_vtx().z())); // save quantities after fit auto lxy = bph::l_xy(fitter, *beamspot); ditrack_cand.addUserFloat("l_xy", lxy.value()); ditrack_cand.addUserFloat("l_xy_unc", lxy.error()); ditrack_cand.addUserInt("sv_ok", fitter.success() ? 1 : 0); auto fit_p4 = fitter.fitted_p4(); - ditrack_cand.addUserFloat("fitted_cos_theta_2D", - bph::cos_theta_2D(fitter, *beamspot, fit_p4)); + ditrack_cand.addUserFloat("fitted_cos_theta_2D", bph::cos_theta_2D(fitter, *beamspot, fit_p4)); // The following quantities do not independent on the mass hypothesis ditrack_cand.addUserFloat("sv_chi2", fitter.chi2()); ditrack_cand.addUserFloat("sv_ndof", fitter.dof()); ditrack_cand.addUserFloat("sv_prob", fitter.prob()); - ditrack_cand.addUserFloat( - "fitted_pt", fitter.fitted_candidate().globalMomentum().perp()); - ditrack_cand.addUserFloat( - "fitted_eta", fitter.fitted_candidate().globalMomentum().eta()); - ditrack_cand.addUserFloat( - "fitted_phi", fitter.fitted_candidate().globalMomentum().phi()); + ditrack_cand.addUserFloat("fitted_pt", fitter.fitted_candidate().globalMomentum().perp()); + ditrack_cand.addUserFloat("fitted_eta", fitter.fitted_candidate().globalMomentum().eta()); + ditrack_cand.addUserFloat("fitted_phi", fitter.fitted_candidate().globalMomentum().phi()); ditrack_cand.addUserFloat("vtx_x", ditrack_cand.vx()); ditrack_cand.addUserFloat("vtx_y", ditrack_cand.vy()); ditrack_cand.addUserFloat("vtx_z", ditrack_cand.vz()); @@ -194,7 +171,8 @@ void DiTrackBuilder::produce(edm::StreamID, edm::Event &evt, ditrack_cand.addUserFloat("vtx_czy", covMatrix.czy()); // after fit selection - if (!post_vtx_selection_(ditrack_cand)) continue; + if (!post_vtx_selection_(ditrack_cand)) + continue; ditrack_out->emplace_back(ditrack_cand); } // end for(size_t trk2_idx = trk1_idx + 1 } // for(size_t trk1_idx = 0 diff --git a/PhysicsTools/BPHNano/plugins/KinVtxFitter.cc b/PhysicsTools/BPHNano/plugins/KinVtxFitter.cc index 9f9351eab88f..f66dfdb0b04d 100644 --- a/PhysicsTools/BPHNano/plugins/KinVtxFitter.cc +++ b/PhysicsTools/BPHNano/plugins/KinVtxFitter.cc @@ -13,15 +13,13 @@ KinVtxFitter::KinVtxFitter(const std::vector tracks, KinematicParticleFactoryFromTransientTrack factory; std::vector particles; for (size_t i = 0; i < tracks.size(); ++i) { - particles.emplace_back(factory.particle(tracks.at(i), masses.at(i), - kin_chi2_, kin_ndof_, sigmas[i])); + particles.emplace_back(factory.particle(tracks.at(i), masses.at(i), kin_chi2_, kin_ndof_, sigmas[i])); } KinematicParticleVertexFitter kcv_fitter; RefCountedKinematicTree vtx_tree = kcv_fitter.fit(particles); - if (vtx_tree->isEmpty() || !vtx_tree->isValid() || - !vtx_tree->isConsistent()) { + if (vtx_tree->isEmpty() || !vtx_tree->isValid() || !vtx_tree->isConsistent()) { success_ = false; return; } @@ -29,8 +27,7 @@ KinVtxFitter::KinVtxFitter(const std::vector tracks, vtx_tree->movePointerToTheTop(); fitted_particle_ = vtx_tree->currentParticle(); fitted_vtx_ = vtx_tree->currentDecayVertex(); - if (!fitted_particle_->currentState().isValid() || - !fitted_vtx_->vertexIsValid()) { + if (!fitted_particle_->currentState().isValid() || !fitted_vtx_->vertexIsValid()) { success_ = false; return; } @@ -46,22 +43,20 @@ KinVtxFitter::KinVtxFitter(const std::vector tracks, KinVtxFitter::KinVtxFitter(const std::vector tracks, const std::vector masses, - std::vector sigmas, ParticleMass dilep_mass) + std::vector sigmas, + ParticleMass dilep_mass) : n_particles_{masses.size()} { KinematicParticleFactoryFromTransientTrack factory; std::vector particles; for (size_t i = 0; i < tracks.size(); ++i) { - particles.emplace_back(factory.particle(tracks.at(i), masses.at(i), - kin_chi2_, kin_ndof_, sigmas[i])); + particles.emplace_back(factory.particle(tracks.at(i), masses.at(i), kin_chi2_, kin_ndof_, sigmas[i])); } - MultiTrackKinematicConstraint* dilep_c = - new TwoTrackMassKinematicConstraint(dilep_mass); + MultiTrackKinematicConstraint* dilep_c = new TwoTrackMassKinematicConstraint(dilep_mass); KinematicConstrainedVertexFitter kcv_fitter; RefCountedKinematicTree vtx_tree = kcv_fitter.fit(particles, dilep_c); - if (vtx_tree->isEmpty() || !vtx_tree->isValid() || - !vtx_tree->isConsistent()) { + if (vtx_tree->isEmpty() || !vtx_tree->isValid() || !vtx_tree->isConsistent()) { success_ = false; return; } @@ -69,8 +64,7 @@ KinVtxFitter::KinVtxFitter(const std::vector tracks, vtx_tree->movePointerToTheTop(); fitted_particle_ = vtx_tree->currentParticle(); fitted_vtx_ = vtx_tree->currentDecayVertex(); - if (!fitted_particle_->currentState().isValid() || - !fitted_vtx_->vertexIsValid()) { + if (!fitted_particle_->currentState().isValid() || !fitted_vtx_->vertexIsValid()) { success_ = false; return; } diff --git a/PhysicsTools/BPHNano/plugins/KinVtxFitter.h b/PhysicsTools/BPHNano/plugins/KinVtxFitter.h index a0bbb999b05b..b3191c9eaaf9 100644 --- a/PhysicsTools/BPHNano/plugins/KinVtxFitter.h +++ b/PhysicsTools/BPHNano/plugins/KinVtxFitter.h @@ -10,19 +10,16 @@ #include "TrackingTools/TransientTrack/interface/TransientTrack.h" class KinVtxFitter { - public: - KinVtxFitter() - : fitted_vtx_{}, - fitted_state_{}, - fitted_particle_{}, - fitted_children_{}, - fitted_track_{} {}; +public: + KinVtxFitter() : fitted_vtx_{}, fitted_state_{}, fitted_particle_{}, fitted_children_{}, fitted_track_{} {}; KinVtxFitter(const std::vector tracks, - const std::vector masses, std::vector sigmas); + const std::vector masses, + std::vector sigmas); KinVtxFitter(const std::vector tracks, - const std::vector masses, std::vector sigmas, + const std::vector masses, + std::vector sigmas, ParticleMass dilep_mass); ~KinVtxFitter() {}; @@ -30,23 +27,16 @@ class KinVtxFitter { bool success() const { return success_; } float chi2() const { return success_ ? fitted_vtx_->chiSquared() : 999; } float dof() const { return success_ ? fitted_vtx_->degreesOfFreedom() : -1; } - float prob() const { - return success_ ? ChiSquaredProbability(chi2(), dof()) : 0.; - } - float kin_chi2() const { - return kin_chi2_; - } // should they be merged in a single value? + float prob() const { return success_ ? ChiSquaredProbability(chi2(), dof()) : 0.; } + float kin_chi2() const { return kin_chi2_; } // should they be merged in a single value? float kin_ndof() const { return kin_ndof_; } - const KinematicState fitted_daughter(size_t i) const { - return fitted_children_.at(i)->currentState(); - } + const KinematicState fitted_daughter(size_t i) const { return fitted_children_.at(i)->currentState(); } const math::PtEtaPhiMLorentzVector daughter_p4(size_t i) const { const auto& state = fitted_children_.at(i)->currentState(); return math::PtEtaPhiMLorentzVector( - state.globalMomentum().perp(), state.globalMomentum().eta(), - state.globalMomentum().phi(), state.mass()); + state.globalMomentum().perp(), state.globalMomentum().eta(), state.globalMomentum().phi(), state.mass()); } const KinematicState fitted_candidate() const { return fitted_state_; } @@ -60,15 +50,13 @@ class KinVtxFitter { fitted_state_.mass()); } - const reco::TransientTrack& fitted_candidate_ttrk() const { - return fitted_track_; - } + const reco::TransientTrack& fitted_candidate_ttrk() const { return fitted_track_; } GlobalPoint fitted_vtx() const { return fitted_vtx_->position(); } GlobalError fitted_vtx_uncertainty() const { return fitted_vtx_->error(); } - private: +private: float kin_chi2_ = 0.; float kin_ndof_ = 0.; size_t n_particles_ = 0; diff --git a/PhysicsTools/BPHNano/plugins/MCFinalStateSelector.cc b/PhysicsTools/BPHNano/plugins/MCFinalStateSelector.cc index 77b0f144ff6d..2316159749ac 100644 --- a/PhysicsTools/BPHNano/plugins/MCFinalStateSelector.cc +++ b/PhysicsTools/BPHNano/plugins/MCFinalStateSelector.cc @@ -14,15 +14,13 @@ #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" class MCFinalStateSelector : public edm::global::EDProducer<> { - public: +public: MCFinalStateSelector(edm::ParameterSet const& params) : objName_(params.getParameter("objName")), branchName_(params.getParameter("branchName")), doc_(params.getParameter("docString")), - src_(consumes( - params.getParameter("src"))), - candMap_(consumes>( - params.getParameter("mcMap"))) { + src_(consumes(params.getParameter("src"))), + candMap_(consumes>(params.getParameter("mcMap"))) { produces(); const std::string& type = params.getParameter("objType"); if (type == "Muon") @@ -40,8 +38,7 @@ class MCFinalStateSelector : public edm::global::EDProducer<> { else if (type == "Other") type_ = MOther; else - throw cms::Exception("Configuration", - "Unsupported objType '" + type + "'\n"); + throw cms::Exception("Configuration", "Unsupported objType '" + type + "'\n"); switch (type_) { case MMuon: @@ -59,8 +56,7 @@ class MCFinalStateSelector : public edm::global::EDProducer<> { "511 = from B0, 521 = from B+/-, 0 = unknown or unmatched"; break; case MPhoton: - flavDoc_ = - "1 = prompt photon, 13 = prompt electron, 0 = unknown or unmatched"; + flavDoc_ = "1 = prompt photon, 13 = prompt electron, 0 = unknown or unmatched"; break; case MTau: flavDoc_ = @@ -82,21 +78,19 @@ class MCFinalStateSelector : public edm::global::EDProducer<> { } if (type_ == MTau) { - candMapVisTau_ = consumes>( - params.getParameter("mcMapVisTau")); + candMapVisTau_ = + consumes>(params.getParameter("mcMapVisTau")); } } ~MCFinalStateSelector() override {} - void produce(edm::StreamID id, edm::Event& iEvent, - const edm::EventSetup& iSetup) const override { + void produce(edm::StreamID id, edm::Event& iEvent, const edm::EventSetup& iSetup) const override { edm::Handle cands; iEvent.getByToken(src_, cands); unsigned int ncand = cands->size(); - auto tab = - std::make_unique(ncand, objName_, false, true); + auto tab = std::make_unique(ncand, objName_, false, true); edm::Handle> map; iEvent.getByToken(candMap_, map); @@ -131,32 +125,24 @@ class MCFinalStateSelector : public edm::global::EDProducer<> { break; case MElectron: if (match->isPromptFinalState()) - flav[i] = - (match->pdgId() == 22 ? 22 : 1); // prompt electron or photon + flav[i] = (match->pdgId() == 22 ? 22 : 1); // prompt electron or photon else flav[i] = getParentHadronFlag(match); // pdgId of mother break; case MPhoton: if (match->isPromptFinalState()) - flav[i] = - (match->pdgId() == 22 ? 1 : 13); // prompt electron or photon + flav[i] = (match->pdgId() == 22 ? 1 : 13); // prompt electron or photon break; case MTau: // CV: assignment of status codes according to // https://twiki.cern.ch/twiki/bin/viewauth/CMS/HiggsToTauTauWorking2016#MC_Matching - if (match.isNonnull() && match->statusFlags().isPrompt() && - abs(match->pdgId()) == 11) + if (match.isNonnull() && match->statusFlags().isPrompt() && abs(match->pdgId()) == 11) flav[i] = 1; - else if (match.isNonnull() && match->statusFlags().isPrompt() && - abs(match->pdgId()) == 13) + else if (match.isNonnull() && match->statusFlags().isPrompt() && abs(match->pdgId()) == 13) flav[i] = 2; - else if (match.isNonnull() && - match->isDirectPromptTauDecayProductFinalState() && - abs(match->pdgId()) == 11) + else if (match.isNonnull() && match->isDirectPromptTauDecayProductFinalState() && abs(match->pdgId()) == 11) flav[i] = 3; - else if (match.isNonnull() && - match->isDirectPromptTauDecayProductFinalState() && - abs(match->pdgId()) == 13) + else if (match.isNonnull() && match->isDirectPromptTauDecayProductFinalState() && abs(match->pdgId()) == 13) flav[i] = 4; else if (matchVisTau.isNonnull()) flav[i] = 5; @@ -178,14 +164,12 @@ class MCFinalStateSelector : public edm::global::EDProducer<> { }; } - tab->addColumn(branchName_ + "Idx", key, - "Index into genParticle list for " + doc_); + tab->addColumn(branchName_ + "Idx", key, "Index into genParticle list for " + doc_); // for(auto ij : flav) std::cout << " flav = " << ij << " " << (uint8_t)ij // << std::endl; tab->addColumn(branchName_+"Flav", flav, "Flavour // of genParticle for "+doc_+": "+flavDoc_, // nanoaod::FlatTable::UInt8Column); - tab->addColumn(branchName_ + "Flav", flav, - "Flavour of genParticle for " + doc_ + ": " + flavDoc_); + tab->addColumn(branchName_ + "Flav", flav, "Flavour of genParticle for " + doc_ + ": " + flavDoc_); iEvent.put(std::move(tab)); } @@ -194,29 +178,20 @@ class MCFinalStateSelector : public edm::global::EDProducer<> { for (unsigned int im = 0, nm = match->numberOfMothers(); im < nm; ++im) { reco::GenParticleRef mom = match->motherRef(im); assert(mom.isNonnull() && mom.isAvailable()); // sanity - if (mom.key() >= match.key()) continue; // prevent circular refs + if (mom.key() >= match.key()) + continue; // prevent circular refs int id = std::abs(mom->pdgId()); return id; } return 0; } - protected: +protected: const std::string objName_, branchName_, doc_; const edm::EDGetTokenT src_; - const edm::EDGetTokenT> - candMap_; - edm::EDGetTokenT> - candMapVisTau_; - enum MatchType { - MMuon, - MElectron, - MTau, - MPhoton, - MTrack, - MOther, - MKshort - } type_; + const edm::EDGetTokenT> candMap_; + edm::EDGetTokenT> candMapVisTau_; + enum MatchType { MMuon, MElectron, MTau, MPhoton, MTrack, MOther, MKshort } type_; std::string flavDoc_; }; diff --git a/PhysicsTools/BPHNano/plugins/MatchEmbedder.cc b/PhysicsTools/BPHNano/plugins/MatchEmbedder.cc index a52b6bf0b2ab..3444e4b6a39e 100644 --- a/PhysicsTools/BPHNano/plugins/MatchEmbedder.cc +++ b/PhysicsTools/BPHNano/plugins/MatchEmbedder.cc @@ -21,30 +21,26 @@ template class MatchEmbedder : public edm::global::EDProducer<> { // perhaps we need better structure here (begin run etc) - public: +public: explicit MatchEmbedder(const edm::ParameterSet &cfg) - : src_{consumes( - cfg.getParameter("src"))}, - matching_{consumes >( - cfg.getParameter("matching"))} { + : src_{consumes(cfg.getParameter("src"))}, + matching_{ + consumes >(cfg.getParameter("matching"))} { produces(); } ~MatchEmbedder() override {} - void produce(edm::StreamID, edm::Event &, - const edm::EventSetup &) const override; + void produce(edm::StreamID, edm::Event &, const edm::EventSetup &) const override; - private: +private: typedef std::vector PATOBJCollection; const edm::EDGetTokenT src_; - const edm::EDGetTokenT > - matching_; + const edm::EDGetTokenT > matching_; }; template -void MatchEmbedder::produce(edm::StreamID, edm::Event &evt, - edm::EventSetup const &iSetup) const { +void MatchEmbedder::produce(edm::StreamID, edm::Event &evt, edm::EventSetup const &iSetup) const { // input edm::Handle src; evt.getByToken(src_, src); diff --git a/PhysicsTools/BPHNano/plugins/MuonTriggerSelector.cc b/PhysicsTools/BPHNano/plugins/MuonTriggerSelector.cc index e6ed841aabc8..895ad39d8251 100644 --- a/PhysicsTools/BPHNano/plugins/MuonTriggerSelector.cc +++ b/PhysicsTools/BPHNano/plugins/MuonTriggerSelector.cc @@ -30,11 +30,11 @@ using namespace std; constexpr bool debug = false; class MuonTriggerSelector : public edm::stream::EDProducer<> { - public: +public: explicit MuonTriggerSelector(const edm::ParameterSet &iConfig); ~MuonTriggerSelector() override {}; - private: +private: void produce(edm::Event &, const edm::EventSetup &) override; const edm::ESGetToken bFieldToken_; edm::EDGetTokenT> muonSrc_; @@ -50,18 +50,14 @@ class MuonTriggerSelector : public edm::stream::EDProducer<> { MuonTriggerSelector::MuonTriggerSelector(const edm::ParameterSet &iConfig) : bFieldToken_(esConsumes()), - muonSrc_(consumes>( - iConfig.getParameter("muonCollection"))), - triggerBits_(consumes( - iConfig.getParameter("bits"))), - triggerObjects_(consumes>( - iConfig.getParameter("objects"))), - triggerPrescales_(consumes( - iConfig.getParameter("prescales"))), + muonSrc_(consumes>(iConfig.getParameter("muonCollection"))), + triggerBits_(consumes(iConfig.getParameter("bits"))), + triggerObjects_( + consumes>(iConfig.getParameter("objects"))), + triggerPrescales_(consumes(iConfig.getParameter("prescales"))), muon_selection_{iConfig.getParameter("muonSelection")}, maxdR_(iConfig.getParameter("maxdR_matching")), - HLTPaths_(iConfig.getParameter>( - "HLTPaths")) // multiple paths with comma + HLTPaths_(iConfig.getParameter>("HLTPaths")) // multiple paths with comma { // outputs produces("AllMuons"); @@ -69,8 +65,7 @@ MuonTriggerSelector::MuonTriggerSelector(const edm::ParameterSet &iConfig) produces("SelectedTransientMuons"); } -void MuonTriggerSelector::produce(edm::Event &iEvent, - const edm::EventSetup &iSetup) { +void MuonTriggerSelector::produce(edm::Event &iEvent, const edm::EventSetup &iSetup) { const auto &bField = iSetup.getData(bFieldToken_); edm::Handle triggerBits; @@ -85,8 +80,7 @@ void MuonTriggerSelector::produce(edm::Event &iEvent, std::unique_ptr allmuons_out(new pat::MuonCollection); std::unique_ptr muons_out(new pat::MuonCollection); - std::unique_ptr trans_muons_out( - new TransientTrackCollection); + std::unique_ptr trans_muons_out(new TransientTrackCollection); edm::Handle> muons; iEvent.getByToken(muonSrc_, muons); @@ -108,8 +102,7 @@ void MuonTriggerSelector::produce(edm::Event &iEvent, for (const pat::Muon &muon : *muons) { if (debug) - std::cout << "Muon Pt=" << muon.pt() << " Eta=" << muon.eta() - << " Phi=" << muon.phi() << endl; + std::cout << "Muon Pt=" << muon.pt() << " Eta=" << muon.eta() << " Phi=" << muon.phi() << endl; std::vector frs(HLTPaths_.size(), 0); // path fires for each reco muon std::vector temp_matched_to(HLTPaths_.size(), 1000.); @@ -135,45 +128,41 @@ void MuonTriggerSelector::produce(edm::Event &iEvent, // matched with the reco muon. if (!muon.triggerObjectMatches().empty()) { for (size_t i = 0; i < muon.triggerObjectMatches().size(); i++) { - if (muon.triggerObjectMatch(i) != nullptr && - muon.triggerObjectMatch(i)->hasPathName(cstr, true, true)) { + if (muon.triggerObjectMatch(i) != nullptr && muon.triggerObjectMatch(i)->hasPathName(cstr, true, true)) { frs[ipath] = 1; - float dr = deltaR(muon.eta(), muon.phi(), - muon.triggerObjectMatch(i)->eta(), - muon.triggerObjectMatch(i)->phi()); - float dpt = (muon.triggerObjectMatch(i)->pt() - muon.pt()) / - muon.triggerObjectMatch(i)->pt(); + float dr = + deltaR(muon.eta(), muon.phi(), muon.triggerObjectMatch(i)->eta(), muon.triggerObjectMatch(i)->phi()); + float dpt = (muon.triggerObjectMatch(i)->pt() - muon.pt()) / muon.triggerObjectMatch(i)->pt(); temp_dr[i] = dr; temp_dpt[i] = dpt; temp_pt[i] = muon.triggerObjectMatch(i)->pt(); - if (debug) std::cout << "Path=" << cstr << endl; + if (debug) + std::cout << "Path=" << cstr << endl; if (debug) std::cout << "HLT Pt=" << muon.triggerObjectMatch(i)->pt() - << " Eta=" << muon.triggerObjectMatch(i)->eta() - << " Phi=" << muon.triggerObjectMatch(i)->phi() << endl; + << " Eta=" << muon.triggerObjectMatch(i)->eta() << " Phi=" << muon.triggerObjectMatch(i)->phi() + << endl; + if (debug) + std::cout << "Muon Pt=" << muon.pt() << " Eta=" << muon.eta() << " Phi=" << muon.phi() << endl; if (debug) - std::cout << "Muon Pt=" << muon.pt() << " Eta=" << muon.eta() - << " Phi=" << muon.phi() << endl; - if (debug) std::cout << "DR = " << temp_dr[i] << endl; + std::cout << "DR = " << temp_dr[i] << endl; } } // and now we find the real minimum between the reco muon and all its // matched HLT objects. temp_DR[ipath] = *min_element(temp_dr.begin(), temp_dr.end()); - int position = - std::min_element(temp_dr.begin(), temp_dr.end()) - temp_dr.begin(); + int position = std::min_element(temp_dr.begin(), temp_dr.end()) - temp_dr.begin(); temp_DPT[ipath] = temp_dpt[position]; temp_matched_to[ipath] = temp_pt[position]; } } // and now since we have found the minimum DR we save a few variables for // plots - fires.push_back(frs); // This is used in order to see if a reco muon fired - // a Trigger (1) or not (0). - matcher.push_back( - temp_matched_to); // This is used in order to see if a reco muon is - // matched with a HLT object. PT of the reco muon is - // saved in this vector. + fires.push_back(frs); // This is used in order to see if a reco muon fired + // a Trigger (1) or not (0). + matcher.push_back(temp_matched_to); // This is used in order to see if a reco muon is + // matched with a HLT object. PT of the reco muon is + // saved in this vector. DR.push_back(temp_DR); DPT.push_back(temp_DPT); } @@ -181,11 +170,9 @@ void MuonTriggerSelector::produce(edm::Event &iEvent, for (unsigned int path = 0; path < HLTPaths_.size(); path++) { for (unsigned int iMuo = 0; iMuo < muons->size(); iMuo++) { for (unsigned int im = (iMuo + 1); im < muons->size(); im++) { - if (matcher[iMuo][path] != 1000. && - matcher[iMuo][path] == matcher[im][path]) { - if (DR[iMuo][path] < - DR[im][path]) { // Keep the one that has the minimum DR with the - // HLT object + if (matcher[iMuo][path] != 1000. && matcher[iMuo][path] == matcher[im][path]) { + if (DR[iMuo][path] < DR[im][path]) { // Keep the one that has the minimum DR with the + // HLT object fires[im][path] = 0; matcher[im][path] = 1000.; DR[im][path] = 1000.; @@ -209,12 +196,15 @@ void MuonTriggerSelector::produce(edm::Event &iEvent, // save the reco muon in both collections for (const pat::Muon &muon : *muons) { unsigned int iMuo(&muon - &(muons->at(0))); - if (!muon_selection_(muon)) continue; // selection cuts + if (!muon_selection_(muon)) + continue; // selection cuts const reco::TransientTrack muonTT((*(muon.bestTrack())), &bField); - if (!muonTT.isValid()) continue; + if (!muonTT.isValid()) + continue; allmuons_out->emplace_back(muon); - if (muonIsTrigger[iMuo] != 1) continue; + if (muonIsTrigger[iMuo] != 1) + continue; muons_out->emplace_back(muon); muons_out->back().addUserInt("isTriggering", muonIsTrigger[iMuo]); diff --git a/PhysicsTools/BPHNano/plugins/PVertexBPHTable.cc b/PhysicsTools/BPHNano/plugins/PVertexBPHTable.cc index 357ac9f04d7c..3d62b73a9d8f 100644 --- a/PhysicsTools/BPHNano/plugins/PVertexBPHTable.cc +++ b/PhysicsTools/BPHNano/plugins/PVertexBPHTable.cc @@ -41,11 +41,11 @@ // class PVertexBPHTable : public edm::stream::EDProducer<> { - public: +public: explicit PVertexBPHTable(const edm::ParameterSet&); ~PVertexBPHTable() override; - private: +private: void beginStream(edm::StreamID) override; void produce(edm::Event&, const edm::EventSetup&) override; void endStream() override; @@ -62,10 +62,8 @@ class PVertexBPHTable : public edm::stream::EDProducer<> { // constructors and destructor // PVertexBPHTable::PVertexBPHTable(const edm::ParameterSet& params) - : pvs_(consumes>( - params.getParameter("pvSrc"))), - pvsScore_(consumes>( - params.getParameter("pvSrc"))), + : pvs_(consumes>(params.getParameter("pvSrc"))), + pvsScore_(consumes>(params.getParameter("pvSrc"))), goodPvCut_(params.getParameter("goodPvCut"), true), pvName_(params.getParameter("pvName")) @@ -85,15 +83,13 @@ PVertexBPHTable::~PVertexBPHTable() { // ------------ method called to produce the data ------------ -void PVertexBPHTable::produce(edm::Event& iEvent, - const edm::EventSetup& iSetup) { +void PVertexBPHTable::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { using namespace edm; const auto& pvsScoreProd = iEvent.get(pvsScore_); auto pvsCol = iEvent.getHandle(pvs_); auto selCandPv = std::make_unique>(); - std::vector pvscore, chi2, covXX, covYY, covZZ, covXY, covXZ, covYZ, - vx, vy, vz, pt, eta, phi, mass, ndof; + std::vector pvscore, chi2, covXX, covYY, covZZ, covXY, covXZ, covYZ, vx, vy, vz, pt, eta, phi, mass, ndof; std::vector charge, ntracks; size_t i = 0; @@ -121,8 +117,7 @@ void PVertexBPHTable::produce(edm::Event& iEvent, ndof.push_back(pv.ndof()); i++; } - auto table = std::make_unique(pvscore.size(), pvName_, - false, false); + auto table = std::make_unique(pvscore.size(), pvName_, false, false); table->addColumn("score", pvscore, "", 10); table->addColumn("vx", vx, "", 10); table->addColumn("vy", vy, "", 10); diff --git a/PhysicsTools/BPHNano/plugins/SimpleFlatTableProducerBPHPlugins.cc b/PhysicsTools/BPHNano/plugins/SimpleFlatTableProducerBPHPlugins.cc index 6f593a93f96d..5b7ef0d3bb23 100644 --- a/PhysicsTools/BPHNano/plugins/SimpleFlatTableProducerBPHPlugins.cc +++ b/PhysicsTools/BPHNano/plugins/SimpleFlatTableProducerBPHPlugins.cc @@ -1,7 +1,6 @@ #include "DataFormats/PatCandidates/interface/CompositeCandidate.h" #include "PhysicsTools/NanoAOD/interface/SimpleFlatTableProducer.h" -typedef SimpleFlatTableProducer - SimpleCompositeCandidateFlatTableProducer; +typedef SimpleFlatTableProducer SimpleCompositeCandidateFlatTableProducer; #include "FWCore/Framework/interface/MakerMacros.h" DEFINE_FWK_MODULE(SimpleCompositeCandidateFlatTableProducer); diff --git a/PhysicsTools/BPHNano/plugins/V0ReBuilder.cc b/PhysicsTools/BPHNano/plugins/V0ReBuilder.cc index 8fd5a53d5f0a..0da18f368010 100644 --- a/PhysicsTools/BPHNano/plugins/V0ReBuilder.cc +++ b/PhysicsTools/BPHNano/plugins/V0ReBuilder.cc @@ -38,7 +38,7 @@ class V0ReBuilder : public edm::global::EDProducer<> { // perhaps we need better structure here (begin run etc) - public: +public: typedef std::vector TransientTrackCollection; typedef std::vector V0Collection; @@ -48,11 +48,9 @@ class V0ReBuilder : public edm::global::EDProducer<> { pre_vtx_selection_{cfg.getParameter("V0Selection")}, post_vtx_selection_{cfg.getParameter("postVtxSelection")}, v0s_{consumes(cfg.getParameter("V0s"))}, - beamspot_{consumes( - cfg.getParameter("beamSpot"))}, - track_match_{ - consumes>( - cfg.getParameter("track_match"))}, + beamspot_{consumes(cfg.getParameter("beamSpot"))}, + track_match_{consumes>( + cfg.getParameter("track_match"))}, isLambda_{cfg.getParameter("isLambda")} { produces("SelectedV0Collection"); produces("SelectedV0TransientCollection"); @@ -60,24 +58,20 @@ class V0ReBuilder : public edm::global::EDProducer<> { ~V0ReBuilder() override {} - void produce(edm::StreamID, edm::Event &, - const edm::EventSetup &) const override; + void produce(edm::StreamID, edm::Event &, const edm::EventSetup &) const override; - private: +private: const edm::ESGetToken theB_; const StringCutObjectSelector trk_selection_; - const StringCutObjectSelector - pre_vtx_selection_; + const StringCutObjectSelector pre_vtx_selection_; const StringCutObjectSelector post_vtx_selection_; const edm::EDGetTokenT v0s_; const edm::EDGetTokenT beamspot_; - const edm::EDGetTokenT> - track_match_; + const edm::EDGetTokenT> track_match_; const bool isLambda_; }; -void V0ReBuilder::produce(edm::StreamID, edm::Event &evt, - edm::EventSetup const &iSetup) const { +void V0ReBuilder::produce(edm::StreamID, edm::Event &evt, edm::EventSetup const &iSetup) const { // input auto const theB = &iSetup.getData(theB_); edm::Handle V0s; @@ -88,45 +82,42 @@ void V0ReBuilder::produce(edm::StreamID, edm::Event &evt, auto &track_match = evt.get(track_match_); // output - std::unique_ptr ret_val( - new pat::CompositeCandidateCollection()); - std::unique_ptr trans_out( - new TransientTrackCollection); + std::unique_ptr ret_val(new pat::CompositeCandidateCollection()); + std::unique_ptr trans_out(new TransientTrackCollection); size_t v0_idx = 0; - for (reco::VertexCompositePtrCandidateCollection::const_iterator v0 = - V0s->begin(); - v0 != V0s->end(); v0++) { + for (reco::VertexCompositePtrCandidateCollection::const_iterator v0 = V0s->begin(); v0 != V0s->end(); v0++) { reco::VertexCompositePtrCandidate V0 = V0s->at(v0_idx); v0_idx++; // selection on V0s - if (v0->numberOfDaughters() != 2) continue; - if (!pre_vtx_selection_(V0)) continue; + if (v0->numberOfDaughters() != 2) + continue; + if (!pre_vtx_selection_(V0)) + continue; - pat::PackedCandidate v0daughter1 = - *(dynamic_cast(v0->daughter(0))); - pat::PackedCandidate v0daughter2 = - *(dynamic_cast(v0->daughter(1))); + pat::PackedCandidate v0daughter1 = *(dynamic_cast(v0->daughter(0))); + pat::PackedCandidate v0daughter2 = *(dynamic_cast(v0->daughter(1))); - if (!v0daughter1.hasTrackDetails()) continue; - if (!v0daughter2.hasTrackDetails()) continue; + if (!v0daughter1.hasTrackDetails()) + continue; + if (!v0daughter2.hasTrackDetails()) + continue; if (fabs(v0daughter1.pdgId()) != 211) continue; // This cut do not affect the Lambda->proton pion candidates if (fabs(v0daughter2.pdgId()) != 211) continue; // This cut do not affect the Lambda->proton pion candidates - if (!trk_selection_(v0daughter1) || !trk_selection_(v0daughter2)) continue; + if (!trk_selection_(v0daughter1) || !trk_selection_(v0daughter2)) + continue; - reco::TransientTrack - v0daughter1_ttrack; // 1st daughter, leading daughter to be assigned. - // Proton mass will be assigned for the - // Lambda->Proton Pion mode, Pion mass will be - // assigned for the Kshort->PionPion mode. - reco::TransientTrack - v0daughter2_ttrack; // 2nd daughter, subleading daughter to be - // assigned. It hass always the pion mass + reco::TransientTrack v0daughter1_ttrack; // 1st daughter, leading daughter to be assigned. + // Proton mass will be assigned for the + // Lambda->Proton Pion mode, Pion mass will be + // assigned for the Kshort->PionPion mode. + reco::TransientTrack v0daughter2_ttrack; // 2nd daughter, subleading daughter to be + // assigned. It hass always the pion mass if (v0daughter1.p() > v0daughter2.p()) { v0daughter1_ttrack = theB->build(v0daughter1.bestTrack()); @@ -141,16 +132,14 @@ void V0ReBuilder::produce(edm::StreamID, edm::Event &evt, float Track2_mass = bph::PI_MASS; float Track2_sigma = bph::PI_SIGMA; // create V0 vertex - KinVtxFitter fitter({v0daughter1_ttrack, v0daughter2_ttrack}, - {Track1_mass, Track2_mass}, - {Track1_sigma, Track2_sigma}); + KinVtxFitter fitter( + {v0daughter1_ttrack, v0daughter2_ttrack}, {Track1_mass, Track2_mass}, {Track1_sigma, Track2_sigma}); - if (!fitter.success()) continue; + if (!fitter.success()) + continue; pat::CompositeCandidate cand; - cand.setVertex(reco::Candidate::Point(fitter.fitted_vtx().x(), - fitter.fitted_vtx().y(), - fitter.fitted_vtx().z())); + cand.setVertex(reco::Candidate::Point(fitter.fitted_vtx().x(), fitter.fitted_vtx().y(), fitter.fitted_vtx().z())); auto fit_p4 = fitter.fitted_p4(); cand.setP4(fit_p4); @@ -158,19 +147,15 @@ void V0ReBuilder::produce(edm::StreamID, edm::Event &evt, cand.addUserFloat("sv_chi2", fitter.chi2()); cand.addUserFloat("sv_prob", fitter.prob()); cand.addUserFloat("fitted_mass", fitter.fitted_candidate().mass()); - cand.addUserFloat( - "massErr", - sqrt(fitter.fitted_candidate().kinematicParametersError().matrix()(6, - 6))); - cand.addUserFloat("cos_theta_2D", - bph::cos_theta_2D(fitter, *beamspot, cand.p4())); - cand.addUserFloat("fitted_cos_theta_2D", - bph::cos_theta_2D(fitter, *beamspot, fit_p4)); + cand.addUserFloat("massErr", sqrt(fitter.fitted_candidate().kinematicParametersError().matrix()(6, 6))); + cand.addUserFloat("cos_theta_2D", bph::cos_theta_2D(fitter, *beamspot, cand.p4())); + cand.addUserFloat("fitted_cos_theta_2D", bph::cos_theta_2D(fitter, *beamspot, fit_p4)); auto lxy = bph::l_xy(fitter, *beamspot); cand.addUserFloat("l_xy", lxy.value()); cand.addUserFloat("l_xy_unc", lxy.error()); - if (!post_vtx_selection_(cand)) continue; + if (!post_vtx_selection_(cand)) + continue; cand.addUserFloat("vtx_x", cand.vx()); cand.addUserFloat("vtx_y", cand.vy()); diff --git a/PhysicsTools/BPHNano/plugins/helper.h b/PhysicsTools/BPHNano/plugins/helper.h index e7202f2ac63f..ef706fc92e8a 100644 --- a/PhysicsTools/BPHNano/plugins/helper.h +++ b/PhysicsTools/BPHNano/plugins/helper.h @@ -26,55 +26,55 @@ typedef std::vector TransientTrackCollection; -namespace bph{ - -constexpr float PROT_MASS = 0.938272; -constexpr float K_MASS = 0.493677; -constexpr float PI_MASS = 0.139571; -constexpr float LEP_SIGMA = 0.0000001; -constexpr float K_SIGMA = 0.000016; -constexpr float PI_SIGMA = 0.000016; -constexpr float PROT_SIGMA = 0.000016; -constexpr float MUON_MASS = 0.10565837; -constexpr float ELECTRON_MASS = 0.000511; - -inline std::pair min_max_dr( - const std::vector>& cands) { - float min_dr = std::numeric_limits::max(); - float max_dr = 0.; - for (size_t i = 0; i < cands.size(); ++i) { - for (size_t j = i + 1; j < cands.size(); ++j) { - float dr = reco::deltaR(*cands.at(i), *cands.at(j)); - min_dr = std::min(min_dr, dr); - max_dr = std::max(max_dr, dr); +namespace bph { + + constexpr float PROT_MASS = 0.938272; + constexpr float K_MASS = 0.493677; + constexpr float PI_MASS = 0.139571; + constexpr float LEP_SIGMA = 0.0000001; + constexpr float K_SIGMA = 0.000016; + constexpr float PI_SIGMA = 0.000016; + constexpr float PROT_SIGMA = 0.000016; + constexpr float MUON_MASS = 0.10565837; + constexpr float ELECTRON_MASS = 0.000511; + + inline std::pair min_max_dr(const std::vector>& cands) { + float min_dr = std::numeric_limits::max(); + float max_dr = 0.; + for (size_t i = 0; i < cands.size(); ++i) { + for (size_t j = i + 1; j < cands.size(); ++j) { + float dr = reco::deltaR(*cands.at(i), *cands.at(j)); + min_dr = std::min(min_dr, dr); + max_dr = std::max(max_dr, dr); + } } + return std::make_pair(min_dr, max_dr); } - return std::make_pair(min_dr, max_dr); -} -template -inline double cos_theta_2D(const FITTER& fitter, const reco::BeamSpot& bs, - const LORENTZ_VEC& p4) { - if (!fitter.success()) return -2; - GlobalPoint point = fitter.fitted_vtx(); - auto bs_pos = bs.position(point.z()); - math::XYZVector delta(point.x() - bs_pos.x(), point.y() - bs_pos.y(), 0.); - math::XYZVector pt(p4.px(), p4.py(), 0.); - double den = (delta.R() * pt.R()); - return (den != 0.) ? delta.Dot(pt) / den : -2; -} + template + inline double cos_theta_2D(const FITTER& fitter, const reco::BeamSpot& bs, const LORENTZ_VEC& p4) { + if (!fitter.success()) + return -2; + GlobalPoint point = fitter.fitted_vtx(); + auto bs_pos = bs.position(point.z()); + math::XYZVector delta(point.x() - bs_pos.x(), point.y() - bs_pos.y(), 0.); + math::XYZVector pt(p4.px(), p4.py(), 0.); + double den = (delta.R() * pt.R()); + return (den != 0.) ? delta.Dot(pt) / den : -2; + } -template -inline Measurement1D l_xy(const FITTER& fitter, const reco::BeamSpot& bs) { - if (!fitter.success()) return {-2, -2}; - GlobalPoint point = fitter.fitted_vtx(); - GlobalError err = fitter.fitted_vtx_uncertainty(); - auto bs_pos = bs.position(point.z()); - GlobalPoint delta(point.x() - bs_pos.x(), point.y() - bs_pos.y(), 0.); - return {delta.perp(), sqrt(err.rerr(delta))}; -} + template + inline Measurement1D l_xy(const FITTER& fitter, const reco::BeamSpot& bs) { + if (!fitter.success()) + return {-2, -2}; + GlobalPoint point = fitter.fitted_vtx(); + GlobalError err = fitter.fitted_vtx_uncertainty(); + auto bs_pos = bs.position(point.z()); + GlobalPoint delta(point.x() - bs_pos.x(), point.y() - bs_pos.y(), 0.); + return {delta.perp(), sqrt(err.rerr(delta))}; + } -/* + /* inline GlobalPoint FlightDistVector (const reco::BeamSpot & bm, GlobalPoint Bvtx) { @@ -84,145 +84,137 @@ bm.dxdz()), -1*( (bm.y0()-Bvtx.y()) + (Bvtx.z()-bm.z0()) * bm.dydz()), 0); } */ -inline float CosA( - GlobalPoint& dist, - ROOT::Math::LorentzVector>& Bp4) { - math::XYZVector vperp(dist.x(), dist.y(), 0); - math::XYZVector pperp(Bp4.Px(), Bp4.Py(), 0); - return vperp.Dot(pperp) / (vperp.R() * pperp.R()); -} - -inline std::pair computeDCA(const reco::TransientTrack& trackTT, - const reco::BeamSpot& beamSpot) { - double DCABS = -1.; - double DCABSErr = -1.; - - TrajectoryStateClosestToPoint theDCAXBS = - trackTT.trajectoryStateClosestToPoint( - GlobalPoint(beamSpot.position().x(), beamSpot.position().y(), - beamSpot.position().z())); - if (theDCAXBS.isValid()) { - DCABS = theDCAXBS.perigeeParameters().transverseImpactParameter(); - DCABSErr = theDCAXBS.perigeeError().transverseImpactParameterError(); + inline float CosA(GlobalPoint& dist, ROOT::Math::LorentzVector>& Bp4) { + math::XYZVector vperp(dist.x(), dist.y(), 0); + math::XYZVector pperp(Bp4.Px(), Bp4.Py(), 0); + return vperp.Dot(pperp) / (vperp.R() * pperp.R()); } - return std::make_pair(DCABS, DCABSErr); -} + inline std::pair computeDCA(const reco::TransientTrack& trackTT, const reco::BeamSpot& beamSpot) { + double DCABS = -1.; + double DCABSErr = -1.; -inline bool track_to_lepton_match(edm::Ptr l_ptr, - auto iso_tracks_id, unsigned int iTrk) { - for (unsigned int i = 0; i < l_ptr->numberOfSourceCandidatePtrs(); ++i) { - if (!((l_ptr->sourceCandidatePtr(i)).isNonnull() && - (l_ptr->sourceCandidatePtr(i)).isAvailable())) - continue; - const edm::Ptr& source = l_ptr->sourceCandidatePtr(i); - if (source.id() == iso_tracks_id && source.key() == iTrk) { - return true; + TrajectoryStateClosestToPoint theDCAXBS = trackTT.trajectoryStateClosestToPoint( + GlobalPoint(beamSpot.position().x(), beamSpot.position().y(), beamSpot.position().z())); + if (theDCAXBS.isValid()) { + DCABS = theDCAXBS.perigeeParameters().transverseImpactParameter(); + DCABSErr = theDCAXBS.perigeeError().transverseImpactParameterError(); } + + return std::make_pair(DCABS, DCABSErr); } - return false; -} -inline std::pair absoluteImpactParameter( - const TrajectoryStateOnSurface& tsos, RefCountedKinematicVertex vertex, - VertexDistance& distanceComputer) { - if (!tsos.isValid()) { - return std::pair(false, Measurement1D(0., 0.)); + inline bool track_to_lepton_match(edm::Ptr l_ptr, auto iso_tracks_id, unsigned int iTrk) { + for (unsigned int i = 0; i < l_ptr->numberOfSourceCandidatePtrs(); ++i) { + if (!((l_ptr->sourceCandidatePtr(i)).isNonnull() && (l_ptr->sourceCandidatePtr(i)).isAvailable())) + continue; + const edm::Ptr& source = l_ptr->sourceCandidatePtr(i); + if (source.id() == iso_tracks_id && source.key() == iTrk) { + return true; + } + } + return false; } - GlobalPoint refPoint = tsos.globalPosition(); - GlobalError refPointErr = tsos.cartesianError().position(); - GlobalPoint vertexPosition = vertex->vertexState().position(); - GlobalError vertexPositionErr = - RecoVertex::convertError(vertex->vertexState().error()); - return std::pair( - true, - distanceComputer.distance(VertexState(vertexPosition, vertexPositionErr), - VertexState(refPoint, refPointErr))); -} -inline std::pair absoluteImpactParameter3D( - const TrajectoryStateOnSurface& tsos, RefCountedKinematicVertex vertex) { - VertexDistance3D dist; - return absoluteImpactParameter(tsos, vertex, dist); -} + inline std::pair absoluteImpactParameter(const TrajectoryStateOnSurface& tsos, + RefCountedKinematicVertex vertex, + VertexDistance& distanceComputer) { + if (!tsos.isValid()) { + return std::pair(false, Measurement1D(0., 0.)); + } + GlobalPoint refPoint = tsos.globalPosition(); + GlobalError refPointErr = tsos.cartesianError().position(); + GlobalPoint vertexPosition = vertex->vertexState().position(); + GlobalError vertexPositionErr = RecoVertex::convertError(vertex->vertexState().error()); + return std::pair( + true, + distanceComputer.distance(VertexState(vertexPosition, vertexPositionErr), VertexState(refPoint, refPointErr))); + } -inline std::pair absoluteTransverseImpactParameter( - const TrajectoryStateOnSurface& tsos, RefCountedKinematicVertex vertex) { - VertexDistanceXY dist; - return absoluteImpactParameter(tsos, vertex, dist); -} + inline std::pair absoluteImpactParameter3D(const TrajectoryStateOnSurface& tsos, + RefCountedKinematicVertex vertex) { + VertexDistance3D dist; + return absoluteImpactParameter(tsos, vertex, dist); + } -inline std::pair signedImpactParameter3D( - const TrajectoryStateOnSurface& tsos, RefCountedKinematicVertex vertex, - const reco::BeamSpot& bs, double pv_z) { - VertexDistance3D dist; - - std::pair result = - absoluteImpactParameter(tsos, vertex, dist); - if (!result.first) return result; - - // Compute Sign - auto bs_pos = bs.position(vertex->vertexState().position().z()); - GlobalPoint impactPoint = tsos.globalPosition(); - GlobalVector IPVec(impactPoint.x() - vertex->vertexState().position().x(), - impactPoint.y() - vertex->vertexState().position().y(), - impactPoint.z() - vertex->vertexState().position().z()); - - GlobalVector direction(vertex->vertexState().position().x() - bs_pos.x(), - vertex->vertexState().position().y() - bs_pos.y(), - vertex->vertexState().position().z() - pv_z); - - double prod = IPVec.dot(direction); - double sign = (prod >= 0) ? 1. : -1.; - - // Apply sign to the result - return std::pair( - result.first, - Measurement1D(sign * result.second.value(), result.second.error())); -} + inline std::pair absoluteTransverseImpactParameter(const TrajectoryStateOnSurface& tsos, + RefCountedKinematicVertex vertex) { + VertexDistanceXY dist; + return absoluteImpactParameter(tsos, vertex, dist); + } -inline std::pair signedTransverseImpactParameter( - const TrajectoryStateOnSurface& tsos, RefCountedKinematicVertex vertex, - const reco::BeamSpot& bs) { - VertexDistanceXY dist; - - std::pair result = - absoluteImpactParameter(tsos, vertex, dist); - if (!result.first) return result; - - // Compute Sign - auto bs_pos = bs.position(vertex->vertexState().position().z()); - GlobalPoint impactPoint = tsos.globalPosition(); - GlobalVector IPVec(impactPoint.x() - vertex->vertexState().position().x(), - impactPoint.y() - vertex->vertexState().position().y(), - 0.); - GlobalVector direction(vertex->vertexState().position().x() - bs_pos.x(), - vertex->vertexState().position().y() - bs_pos.y(), 0); - - double prod = IPVec.dot(direction); - double sign = (prod >= 0) ? 1. : -1.; - - // Apply sign to the result - return std::pair( - result.first, - Measurement1D(sign * result.second.value(), result.second.error())); -} + inline std::pair signedImpactParameter3D(const TrajectoryStateOnSurface& tsos, + RefCountedKinematicVertex vertex, + const reco::BeamSpot& bs, + double pv_z) { + VertexDistance3D dist; + + std::pair result = absoluteImpactParameter(tsos, vertex, dist); + if (!result.first) + return result; + + // Compute Sign + auto bs_pos = bs.position(vertex->vertexState().position().z()); + GlobalPoint impactPoint = tsos.globalPosition(); + GlobalVector IPVec(impactPoint.x() - vertex->vertexState().position().x(), + impactPoint.y() - vertex->vertexState().position().y(), + impactPoint.z() - vertex->vertexState().position().z()); + + GlobalVector direction(vertex->vertexState().position().x() - bs_pos.x(), + vertex->vertexState().position().y() - bs_pos.y(), + vertex->vertexState().position().z() - pv_z); + + double prod = IPVec.dot(direction); + double sign = (prod >= 0) ? 1. : -1.; + + // Apply sign to the result + return std::pair(result.first, + Measurement1D(sign * result.second.value(), result.second.error())); + } + + inline std::pair signedTransverseImpactParameter(const TrajectoryStateOnSurface& tsos, + RefCountedKinematicVertex vertex, + const reco::BeamSpot& bs) { + VertexDistanceXY dist; + + std::pair result = absoluteImpactParameter(tsos, vertex, dist); + if (!result.first) + return result; + + // Compute Sign + auto bs_pos = bs.position(vertex->vertexState().position().z()); + GlobalPoint impactPoint = tsos.globalPosition(); + GlobalVector IPVec(impactPoint.x() - vertex->vertexState().position().x(), + impactPoint.y() - vertex->vertexState().position().y(), + 0.); + GlobalVector direction( + vertex->vertexState().position().x() - bs_pos.x(), vertex->vertexState().position().y() - bs_pos.y(), 0); + + double prod = IPVec.dot(direction); + double sign = (prod >= 0) ? 1. : -1.; + + // Apply sign to the result + return std::pair(result.first, + Measurement1D(sign * result.second.value(), result.second.error())); + } -inline std::vector TrackerIsolation( - edm::Handle& tracks, - pat::CompositeCandidate& B, std::vector& dnames) { - std::vector iso(dnames.size(), 0); - for (size_t k_idx = 0; k_idx < tracks->size(); ++k_idx) { - edm::Ptr trk_ptr(tracks, k_idx); - for (size_t iname = 0; iname < dnames.size(); ++iname) { - float dr = deltaR(B.userFloat("fitted_" + dnames[iname] + "_eta"), - B.userFloat("fitted_" + dnames[iname] + "_phi"), - trk_ptr->eta(), trk_ptr->phi()); - if (dr > 0 && dr < 0.4) iso[iname] += trk_ptr->pt(); + inline std::vector TrackerIsolation(edm::Handle& tracks, + pat::CompositeCandidate& B, + std::vector& dnames) { + std::vector iso(dnames.size(), 0); + for (size_t k_idx = 0; k_idx < tracks->size(); ++k_idx) { + edm::Ptr trk_ptr(tracks, k_idx); + for (size_t iname = 0; iname < dnames.size(); ++iname) { + float dr = deltaR(B.userFloat("fitted_" + dnames[iname] + "_eta"), + B.userFloat("fitted_" + dnames[iname] + "_phi"), + trk_ptr->eta(), + trk_ptr->phi()); + if (dr > 0 && dr < 0.4) + iso[iname] += trk_ptr->pt(); + } } + return iso; } - return iso; -} -} +} // namespace bph #endif diff --git a/PhysicsTools/NanoAOD/plugins/CandMCMatchTableProducer.cc b/PhysicsTools/NanoAOD/plugins/CandMCMatchTableProducer.cc index bfaa257ba1d2..c4e36bf6c54b 100644 --- a/PhysicsTools/NanoAOD/plugins/CandMCMatchTableProducer.cc +++ b/PhysicsTools/NanoAOD/plugins/CandMCMatchTableProducer.cc @@ -32,7 +32,7 @@ public: else if (type == "Photon") type_ = MPhoton; else if (type == "Track") - type_ = MTrack; + type_ = MTrack; else if (type == "Other") type_ = MOther; else @@ -200,7 +200,7 @@ public: flav[i] = 1; // prompt else flav[i] = getParentHadronFlag(match); // pdgId of mother - break; + break; default: flav[i] = match->statusFlags().fromHardProcess(); }; diff --git a/PhysicsTools/NanoAOD/plugins/SimpleFlatTableProducerPlugins.cc b/PhysicsTools/NanoAOD/plugins/SimpleFlatTableProducerPlugins.cc index 0e488ce044c5..9faf2078b5dd 100644 --- a/PhysicsTools/NanoAOD/plugins/SimpleFlatTableProducerPlugins.cc +++ b/PhysicsTools/NanoAOD/plugins/SimpleFlatTableProducerPlugins.cc @@ -88,4 +88,3 @@ DEFINE_FWK_MODULE(SimpleTrajectorySeedFlatTableProducer); DEFINE_FWK_MODULE(SimpleL2MuonTrajectorySeedFlatTableProducer); DEFINE_FWK_MODULE(SimpleTriggerTrackFlatTableProducer); DEFINE_FWK_MODULE(SimpleGsfTrackFlatTableProducer); -