From 0428785c1beff6f2c84b6817693bd4a9c3df0b0e Mon Sep 17 00:00:00 2001 From: Cesar Bernardes Date: Wed, 29 Apr 2020 21:55:06 +0200 Subject: [PATCH 01/18] Add EDProducer to create packed pixel tracks collection --- .../plugins/HIPixelTracksSlimmer_miniAOD.cc | 273 ++++++++++++++++++ .../python/hipixeltracks_miniAOD_cfi.py | 17 ++ 2 files changed, 290 insertions(+) create mode 100644 RecoHI/HiTracking/plugins/HIPixelTracksSlimmer_miniAOD.cc create mode 100644 RecoHI/HiTracking/python/hipixeltracks_miniAOD_cfi.py diff --git a/RecoHI/HiTracking/plugins/HIPixelTracksSlimmer_miniAOD.cc b/RecoHI/HiTracking/plugins/HIPixelTracksSlimmer_miniAOD.cc new file mode 100644 index 0000000000000..56335943ad479 --- /dev/null +++ b/RecoHI/HiTracking/plugins/HIPixelTracksSlimmer_miniAOD.cc @@ -0,0 +1,273 @@ +//Based on: PhysicsTools/PatAlgos/plugins/PATLostTracks.cc + +// system include files +#include + +// user include files +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/StreamID.h" + +#include "DataFormats/TrackReco/interface/Track.h" +#include "DataFormats/TrackReco/interface/TrackFwd.h" +#include "DataFormats/VertexReco/interface/Vertex.h" +#include "DataFormats/VertexReco/interface/VertexFwd.h" + +#include "DataFormats/Candidate/interface/Candidate.h" +#include "DataFormats/RecoCandidate/interface/RecoChargedCandidate.h" +#include "DataFormats/PatCandidates/interface/PackedCandidate.h" +#include "DataFormats/Common/interface/Association.h" + +#include + +// +// class declaration +// + +class HIPixelTracksSlimmer_miniAOD : public edm::stream::EDProducer<> { + public: + explicit HIPixelTracksSlimmer_miniAOD(const edm::ParameterSet&); + ~HIPixelTracksSlimmer_miniAOD(); + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + + void addPackedCandidate(std::vector& cands, + const reco::TrackRef& trk, + const reco::VertexRef& pvSlimmed, + const reco::VertexRefProd& pvSlimmedColl, + bool passPixelTrackSel)const; + + private: + virtual void beginStream(edm::StreamID) override; + virtual void produce(edm::Event&, const edm::EventSetup&) override; + virtual void endStream() override; + + //virtual void beginRun(edm::Run const&, edm::EventSetup const&) override; + //virtual void endRun(edm::Run const&, edm::EventSetup const&) override; + //virtual void beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; + //virtual void endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; + + // ----------member data --------------------------- + const edm::EDGetTokenT srcTracks_; + const edm::EDGetTokenT srcVertices_; + const edm::EDGetTokenT srcPrimaryVertices_; + const double dzSigCut_; + const double dxySigCut_; + const double dzSigHP_; + const double dxySigHP_; + const double ptMax_; + const int covarianceVersion_; + const int covarianceSchema_; +}; + +// +// constants, enums and typedefs +// + + +// +// static data member definitions +// + +// +// constructors and destructor +// +HIPixelTracksSlimmer_miniAOD::HIPixelTracksSlimmer_miniAOD(const edm::ParameterSet& iConfig) : + srcTracks_(consumes(iConfig.getParameter("srcTracks"))), + srcVertices_(consumes(iConfig.getParameter("srcVertices"))), + srcPrimaryVertices_(consumes(iConfig.getParameter("srcPrimaryVertices"))), + dzSigCut_(iConfig.getParameter("dzSigCut")), + dxySigCut_(iConfig.getParameter("dxySigCut")), + dzSigHP_(iConfig.getParameter("dzSigHP")), + dxySigHP_(iConfig.getParameter("dxySigHP")), + ptMax_(iConfig.getParameter("ptMax")), + covarianceVersion_(iConfig.getParameter("covarianceVersion")), + covarianceSchema_(iConfig.getParameter("covarianceSchema")) +{ + produces< std::vector >(); + produces< std::vector >(); + produces< edm::Association >(); +} + + +HIPixelTracksSlimmer_miniAOD::~HIPixelTracksSlimmer_miniAOD() +{ + + // do anything here that needs to be done at destruction time + // (e.g. close files, deallocate resources etc.) + +} + + +// +// member functions +// + +// ------------ method called to produce the data ------------ +void +HIPixelTracksSlimmer_miniAOD::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) +{ + using namespace edm; + using namespace std; + + + //track collection + edm::Handle tracks; + iEvent.getByToken(srcTracks_, tracks); + + auto outPtrTrks = std::make_unique>(); + auto outPtrTrksAsCands = std::make_unique>(); + + //vtx collections + edm::Handle vertices; + iEvent.getByToken(srcVertices_,vertices); + + edm::Handle pvs; + iEvent.getByToken(srcPrimaryVertices_, pvs); + reco::VertexRef pv(pvs.id()); + reco::VertexRefProd pvRefProd(pvs); + if(!pvs->empty()){ + pv = reco::VertexRef(pvs, 0); + } + + //best vertex + double bestvz=-999.9, bestvx=-999.9, bestvy=-999.9; + double bestvzError=-999.9, bestvxError=-999.9, bestvyError=-999.9; + const reco::Vertex & vtx = (*vertices)[0]; + bestvz = vtx.z(); bestvx = vtx.x(); bestvy = vtx.y(); + bestvzError = vtx.zError(); bestvxError = vtx.xError(); bestvyError = vtx.yError(); + math::XYZPoint bestvtx(bestvx,bestvy,bestvz); + + std::vector mapping(tracks->size(),-1); + int pixelTrkIndx=0; + for(unsigned int trkIndx=0; trkIndx < tracks->size(); trkIndx++){ + + reco::TrackRef trk(tracks,trkIndx); + + double dzvtx = trk->dz(bestvtx); + double dxyvtx = trk->dxy(bestvtx); + double dzerror = sqrt(trk->dzError()*trk->dzError()+bestvzError*bestvzError); + double dxyerror = sqrt(trk->d0Error()*trk->d0Error()+bestvxError*bestvyError); + + if(fabs(dzvtx/dzerror) >= dzSigCut_)continue; + if(fabs(dxyvtx/dxyerror) >= dxySigCut_)continue; + if(trk->pt() >= ptMax_)continue; + + bool passSelection=false; + if(fabs(dzvtx/dzerror) < dzSigHP_ && fabs(dxyvtx/dxyerror) < dxySigHP_)passSelection=true; + + outPtrTrks->emplace_back(*trk); + + addPackedCandidate(*outPtrTrksAsCands,trk,pv,pvRefProd,passSelection); + + //for creating the reco::Track -> pat::PackedCandidate map + mapping[trkIndx]=pixelTrkIndx; + pixelTrkIndx++; + + } + iEvent.put(std::move(outPtrTrks)); + edm::OrphanHandle oh = iEvent.put(std::move(outPtrTrksAsCands)); + auto tk2pc = std::make_unique>(oh); + edm::Association::Filler tk2pcFiller(*tk2pc); + tk2pcFiller.insert(tracks, mapping.begin(), mapping.end()); + tk2pcFiller.fill(); + iEvent.put(std::move(tk2pc)); +} + +// ------------ method called once each stream before processing any runs, lumis or events ------------ +void +HIPixelTracksSlimmer_miniAOD::beginStream(edm::StreamID) +{ +} + +// ------------ method called once each stream after processing all runs, lumis and events ------------ +void +HIPixelTracksSlimmer_miniAOD::endStream() { +} + +// ------------ method called when starting to processes a run ------------ +/* +void +HIPixelTracksSlimmer_miniAOD::beginRun(edm::Run const&, edm::EventSetup const&) +{ +} +*/ + +// ------------ method called when ending the processing of a run ------------ +/* +void +HIPixelTracksSlimmer_miniAOD::endRun(edm::Run const&, edm::EventSetup const&) +{ +} +*/ + +// ------------ method called when starting to processes a luminosity block ------------ +/* +void +HIPixelTracksSlimmer_miniAOD::beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) +{ +} +*/ + +// ------------ method called when ending the processing of a luminosity block ------------ +/* +void +HIPixelTracksSlimmer_miniAOD::endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) +{ +} +*/ + +void +HIPixelTracksSlimmer_miniAOD::addPackedCandidate(std::vector& cands, + const reco::TrackRef& trk, + const reco::VertexRef& pvSlimmed, + const reco::VertexRefProd& pvSlimmedColl, + bool passPixelTrackSel)const +{ + const float mass = 0.13957018; + + int id=211*trk->charge(); + + reco::Candidate::PolarLorentzVector p4(trk->pt(),trk->eta(),trk->phi(),mass); + cands.emplace_back(pat::PackedCandidate(p4,trk->vertex(), + trk->pt(),trk->eta(),trk->phi(), + id,pvSlimmedColl,pvSlimmed.key())); + + + if(passPixelTrackSel) + cands.back().setTrackHighPurity(true); + else + cands.back().setTrackHighPurity(false); + + + cands.back().setTrackProperties(*trk,covarianceSchema_,covarianceVersion_); + +} + + +// ------------ method fills 'descriptions' with the allowed parameters for the module ------------ +void +HIPixelTracksSlimmer_miniAOD::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + //The following says we do not know what parameters are allowed so do no validation + // Please change this to state exactly what you do use, even if it is no parameters + edm::ParameterSetDescription desc; + desc.add("srcTracks",edm::InputTag("hiConformalPixelTracks")); + desc.add("srcVertices",edm::InputTag("offlinePrimaryVertices")); + desc.add("srcPrimaryVertices",edm::InputTag("offlineSlimmedPrimaryVertices")); + desc.add("dzSigCut",double(100.0)); + desc.add("dxySigCut",double(100.0)); + desc.add("dzSigHP",double(100.0)); + desc.add("dxySigHP",double(100.0)); + desc.add("ptMax",double(1.0)); + desc.add("covarianceVersion",int(1)); + desc.add("covarianceSchema",int(0)); + descriptions.add("HIPixelTracksSlimmer_miniAOD", desc); +} + +//define this as a plug-in +DEFINE_FWK_MODULE(HIPixelTracksSlimmer_miniAOD); diff --git a/RecoHI/HiTracking/python/hipixeltracks_miniAOD_cfi.py b/RecoHI/HiTracking/python/hipixeltracks_miniAOD_cfi.py new file mode 100644 index 0000000000000..51cae45826371 --- /dev/null +++ b/RecoHI/HiTracking/python/hipixeltracks_miniAOD_cfi.py @@ -0,0 +1,17 @@ +import FWCore.ParameterSet.Config as cms + +hipixeltracks = cms.EDProducer("HIPixelTracksSlimmer_miniAOD", + srcTracks = cms.InputTag("hiConformalPixelTracks"), + srcVertices = cms.InputTag("offlinePrimaryVertices"), + srcPrimaryVertices = cms.InputTag("offlineSlimmedPrimaryVertices"), + dzSigCut = cms.double(10.0), + dxySigCut = cms.double(25.0), + dzSigHP = cms.double(7.0), #to set HighPurity flag for pixel tracks + dxySigHP = cms.double(20.0), #to set HighPurity flag for pixel tracks + ptMax = cms.double(1.0), #max pT for pixel tracks - above this use general tracks instead + covarianceVersion = cms.int32(0), #so far: 0 is Phase0, 1 is Phase1 + covarianceSchema = cms.int32(520) #use less accurate schema - reduce size of collection by around 20% +) + +from Configuration.Eras.Modifier_phase1Pixel_cff import phase1Pixel +phase1Pixel.toModify(hipixeltracks, covarianceVersion=1) From 1d2933eb2502da666f79424df9dc3146888d2479 Mon Sep 17 00:00:00 2001 From: Cesar Bernardes Date: Wed, 17 Jun 2020 21:45:45 +0200 Subject: [PATCH 02/18] To run and include pixel tracks in eras pp_on_AA_2018 and pp_on_PbPb_run3 --- .../PatAlgos/python/slimming/MicroEventContent_cff.py | 8 ++++++++ PhysicsTools/PatAlgos/python/slimming/slimming_cff.py | 3 +++ RecoHI/HiTracking/plugins/BuildFile.xml | 1 + 3 files changed, 12 insertions(+) diff --git a/PhysicsTools/PatAlgos/python/slimming/MicroEventContent_cff.py b/PhysicsTools/PatAlgos/python/slimming/MicroEventContent_cff.py index 95186b80942a7..5de87309d41a5 100644 --- a/PhysicsTools/PatAlgos/python/slimming/MicroEventContent_cff.py +++ b/PhysicsTools/PatAlgos/python/slimming/MicroEventContent_cff.py @@ -171,3 +171,11 @@ _phase2_timing_extraCommands = ["keep *_offlineSlimmedPrimaryVertices4D_*_*"] from Configuration.Eras.Modifier_phase2_timing_cff import phase2_timing phase2_timing.toModify(MicroEventContentMC, outputCommands = MicroEventContentMC.outputCommands + _phase2_timing_extraCommands) + +_pp_on_AA_2018_And_pp_on_PbPb_run3_extraCommands = [ + 'keep patPackedCandidates_hipixeltracks_*_*', +] +from Configuration.Eras.Modifier_pp_on_AA_2018_cff import pp_on_AA_2018 +from Configuration.Eras.Modifier_pp_on_PbPb_run3_cff import pp_on_PbPb_run3 +(pp_on_AA_2018 | pp_on_PbPb_run3).toModify(MicroEventContent, outputCommands = MicroEventContent.outputCommands + _pp_on_AA_2018_And_pp_on_PbPb_run3_extraCommands) +(pp_on_AA_2018 | pp_on_PbPb_run3).toModify(MicroEventContentMC, outputCommands = MicroEventContentMC.outputCommands + _pp_on_AA_2018_And_pp_on_PbPb_run3_extraCommands) diff --git a/PhysicsTools/PatAlgos/python/slimming/slimming_cff.py b/PhysicsTools/PatAlgos/python/slimming/slimming_cff.py index 102d9bcb0ae91..8295e28074d2b 100644 --- a/PhysicsTools/PatAlgos/python/slimming/slimming_cff.py +++ b/PhysicsTools/PatAlgos/python/slimming/slimming_cff.py @@ -61,6 +61,9 @@ from Configuration.Eras.Modifier_pp_on_AA_2018_cff import pp_on_AA_2018 pp_on_AA_2018.toReplaceWith(slimmingTask, slimmingTask.copyAndExclude([slimmedOOTPhotons])) +from Configuration.Eras.Modifier_pp_on_PbPb_run3_cff import pp_on_PbPb_run3 +from RecoHI.HiTracking.hipixeltracks_miniAOD_cfi import hipixeltracks +(pp_on_AA_2018 | pp_on_PbPb_run3).toReplaceWith(slimmingTask, cms.Task(slimmingTask.copy(), hipixeltracks)) from Configuration.Eras.Modifier_phase2_timing_cff import phase2_timing _phase2_timing_slimmingTask = cms.Task(slimmingTask.copy(), diff --git a/RecoHI/HiTracking/plugins/BuildFile.xml b/RecoHI/HiTracking/plugins/BuildFile.xml index afd8eee1e5bb5..58b4b858bf36f 100644 --- a/RecoHI/HiTracking/plugins/BuildFile.xml +++ b/RecoHI/HiTracking/plugins/BuildFile.xml @@ -1,5 +1,6 @@ + From 6b875a12186ecd4d6ce41a074421d3a1ad4caa88 Mon Sep 17 00:00:00 2001 From: Cesar Bernardes Date: Wed, 17 Jun 2020 22:52:43 +0200 Subject: [PATCH 03/18] shorten the name of a python list --- .../PatAlgos/python/slimming/MicroEventContent_cff.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/PhysicsTools/PatAlgos/python/slimming/MicroEventContent_cff.py b/PhysicsTools/PatAlgos/python/slimming/MicroEventContent_cff.py index 5de87309d41a5..f93f056870704 100644 --- a/PhysicsTools/PatAlgos/python/slimming/MicroEventContent_cff.py +++ b/PhysicsTools/PatAlgos/python/slimming/MicroEventContent_cff.py @@ -172,10 +172,10 @@ from Configuration.Eras.Modifier_phase2_timing_cff import phase2_timing phase2_timing.toModify(MicroEventContentMC, outputCommands = MicroEventContentMC.outputCommands + _phase2_timing_extraCommands) -_pp_on_AA_2018_And_pp_on_PbPb_run3_extraCommands = [ +_pp_on_AA_extraCommands = [ 'keep patPackedCandidates_hipixeltracks_*_*', ] from Configuration.Eras.Modifier_pp_on_AA_2018_cff import pp_on_AA_2018 from Configuration.Eras.Modifier_pp_on_PbPb_run3_cff import pp_on_PbPb_run3 -(pp_on_AA_2018 | pp_on_PbPb_run3).toModify(MicroEventContent, outputCommands = MicroEventContent.outputCommands + _pp_on_AA_2018_And_pp_on_PbPb_run3_extraCommands) -(pp_on_AA_2018 | pp_on_PbPb_run3).toModify(MicroEventContentMC, outputCommands = MicroEventContentMC.outputCommands + _pp_on_AA_2018_And_pp_on_PbPb_run3_extraCommands) +(pp_on_AA_2018 | pp_on_PbPb_run3).toModify(MicroEventContent, outputCommands = MicroEventContent.outputCommands + _pp_on_AA_extraCommands) +(pp_on_AA_2018 | pp_on_PbPb_run3).toModify(MicroEventContentMC, outputCommands = MicroEventContentMC.outputCommands + _pp_on_AA_extraCommands) From c3600fb9464f5b97db4092e0d594c8e823a7ea3b Mon Sep 17 00:00:00 2001 From: Cesar Bernardes Date: Fri, 19 Jun 2020 21:17:37 +0200 Subject: [PATCH 04/18] fix code style and clang --- .../plugins/HIPixelTracksSlimmer_miniAOD.cc | 247 ++++++++---------- 1 file changed, 115 insertions(+), 132 deletions(-) diff --git a/RecoHI/HiTracking/plugins/HIPixelTracksSlimmer_miniAOD.cc b/RecoHI/HiTracking/plugins/HIPixelTracksSlimmer_miniAOD.cc index 56335943ad479..b0c76afc58cc3 100644 --- a/RecoHI/HiTracking/plugins/HIPixelTracksSlimmer_miniAOD.cc +++ b/RecoHI/HiTracking/plugins/HIPixelTracksSlimmer_miniAOD.cc @@ -30,46 +30,45 @@ // class HIPixelTracksSlimmer_miniAOD : public edm::stream::EDProducer<> { - public: - explicit HIPixelTracksSlimmer_miniAOD(const edm::ParameterSet&); - ~HIPixelTracksSlimmer_miniAOD(); - - static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); - - void addPackedCandidate(std::vector& cands, - const reco::TrackRef& trk, - const reco::VertexRef& pvSlimmed, - const reco::VertexRefProd& pvSlimmedColl, - bool passPixelTrackSel)const; - - private: - virtual void beginStream(edm::StreamID) override; - virtual void produce(edm::Event&, const edm::EventSetup&) override; - virtual void endStream() override; - - //virtual void beginRun(edm::Run const&, edm::EventSetup const&) override; - //virtual void endRun(edm::Run const&, edm::EventSetup const&) override; - //virtual void beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; - //virtual void endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; - - // ----------member data --------------------------- - const edm::EDGetTokenT srcTracks_; - const edm::EDGetTokenT srcVertices_; - const edm::EDGetTokenT srcPrimaryVertices_; - const double dzSigCut_; - const double dxySigCut_; - const double dzSigHP_; - const double dxySigHP_; - const double ptMax_; - const int covarianceVersion_; - const int covarianceSchema_; +public: + explicit HIPixelTracksSlimmer_miniAOD(const edm::ParameterSet&); + ~HIPixelTracksSlimmer_miniAOD() override; + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + + void addPackedCandidate(std::vector& cands, + const reco::TrackRef& trk, + const reco::VertexRef& pvSlimmed, + const reco::VertexRefProd& pvSlimmedColl, + bool passPixelTrackSel) const; + +private: + void beginStream(edm::StreamID) override; + void produce(edm::Event&, const edm::EventSetup&) override; + void endStream() override; + + //virtual void beginRun(edm::Run const&, edm::EventSetup const&) override; + //virtual void endRun(edm::Run const&, edm::EventSetup const&) override; + //virtual void beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; + //virtual void endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; + + // ----------member data --------------------------- + const edm::EDGetTokenT srcTracks_; + const edm::EDGetTokenT srcVertices_; + const edm::EDGetTokenT srcPrimaryVertices_; + const double dzSigCut_; + const double dxySigCut_; + const double dzSigHP_; + const double dxySigHP_; + const double ptMax_; + const int covarianceVersion_; + const int covarianceSchema_; }; // // constants, enums and typedefs // - // // static data member definitions // @@ -77,98 +76,95 @@ class HIPixelTracksSlimmer_miniAOD : public edm::stream::EDProducer<> { // // constructors and destructor // -HIPixelTracksSlimmer_miniAOD::HIPixelTracksSlimmer_miniAOD(const edm::ParameterSet& iConfig) : - srcTracks_(consumes(iConfig.getParameter("srcTracks"))), - srcVertices_(consumes(iConfig.getParameter("srcVertices"))), - srcPrimaryVertices_(consumes(iConfig.getParameter("srcPrimaryVertices"))), - dzSigCut_(iConfig.getParameter("dzSigCut")), - dxySigCut_(iConfig.getParameter("dxySigCut")), - dzSigHP_(iConfig.getParameter("dzSigHP")), - dxySigHP_(iConfig.getParameter("dxySigHP")), - ptMax_(iConfig.getParameter("ptMax")), - covarianceVersion_(iConfig.getParameter("covarianceVersion")), - covarianceSchema_(iConfig.getParameter("covarianceSchema")) -{ - produces< std::vector >(); - produces< std::vector >(); - produces< edm::Association >(); +HIPixelTracksSlimmer_miniAOD::HIPixelTracksSlimmer_miniAOD(const edm::ParameterSet& iConfig) + : srcTracks_(consumes(iConfig.getParameter("srcTracks"))), + srcVertices_(consumes(iConfig.getParameter("srcVertices"))), + srcPrimaryVertices_(consumes(iConfig.getParameter("srcPrimaryVertices"))), + dzSigCut_(iConfig.getParameter("dzSigCut")), + dxySigCut_(iConfig.getParameter("dxySigCut")), + dzSigHP_(iConfig.getParameter("dzSigHP")), + dxySigHP_(iConfig.getParameter("dxySigHP")), + ptMax_(iConfig.getParameter("ptMax")), + covarianceVersion_(iConfig.getParameter("covarianceVersion")), + covarianceSchema_(iConfig.getParameter("covarianceSchema")) { + produces>(); + produces>(); + produces>(); } - -HIPixelTracksSlimmer_miniAOD::~HIPixelTracksSlimmer_miniAOD() -{ - - // do anything here that needs to be done at destruction time - // (e.g. close files, deallocate resources etc.) - +HIPixelTracksSlimmer_miniAOD::~HIPixelTracksSlimmer_miniAOD() { + // do anything here that needs to be done at destruction time + // (e.g. close files, deallocate resources etc.) } - // // member functions // // ------------ method called to produce the data ------------ -void -HIPixelTracksSlimmer_miniAOD::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) -{ +void HIPixelTracksSlimmer_miniAOD::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { using namespace edm; using namespace std; - //track collection - edm::Handle tracks; - iEvent.getByToken(srcTracks_, tracks); + edm::Handle tracks; + iEvent.getByToken(srcTracks_, tracks); auto outPtrTrks = std::make_unique>(); auto outPtrTrksAsCands = std::make_unique>(); - //vtx collections + //vtx collections edm::Handle vertices; - iEvent.getByToken(srcVertices_,vertices); + iEvent.getByToken(srcVertices_, vertices); edm::Handle pvs; iEvent.getByToken(srcPrimaryVertices_, pvs); reco::VertexRef pv(pvs.id()); reco::VertexRefProd pvRefProd(pvs); - if(!pvs->empty()){ + if (!pvs->empty()) { pv = reco::VertexRef(pvs, 0); - } + } //best vertex - double bestvz=-999.9, bestvx=-999.9, bestvy=-999.9; - double bestvzError=-999.9, bestvxError=-999.9, bestvyError=-999.9; - const reco::Vertex & vtx = (*vertices)[0]; - bestvz = vtx.z(); bestvx = vtx.x(); bestvy = vtx.y(); - bestvzError = vtx.zError(); bestvxError = vtx.xError(); bestvyError = vtx.yError(); - math::XYZPoint bestvtx(bestvx,bestvy,bestvz); - - std::vector mapping(tracks->size(),-1); - int pixelTrkIndx=0; - for(unsigned int trkIndx=0; trkIndx < tracks->size(); trkIndx++){ - - reco::TrackRef trk(tracks,trkIndx); + double bestvz = -999.9, bestvx = -999.9, bestvy = -999.9; + double bestvzError = -999.9, bestvxError = -999.9, bestvyError = -999.9; + const reco::Vertex& vtx = (*vertices)[0]; + bestvz = vtx.z(); + bestvx = vtx.x(); + bestvy = vtx.y(); + bestvzError = vtx.zError(); + bestvxError = vtx.xError(); + bestvyError = vtx.yError(); + math::XYZPoint bestvtx(bestvx, bestvy, bestvz); + + std::vector mapping(tracks->size(), -1); + int pixelTrkIndx = 0; + for (unsigned int trkIndx = 0; trkIndx < tracks->size(); trkIndx++) { + reco::TrackRef trk(tracks, trkIndx); double dzvtx = trk->dz(bestvtx); double dxyvtx = trk->dxy(bestvtx); - double dzerror = sqrt(trk->dzError()*trk->dzError()+bestvzError*bestvzError); - double dxyerror = sqrt(trk->d0Error()*trk->d0Error()+bestvxError*bestvyError); + double dzerror = sqrt(trk->dzError() * trk->dzError() + bestvzError * bestvzError); + double dxyerror = sqrt(trk->d0Error() * trk->d0Error() + bestvxError * bestvyError); - if(fabs(dzvtx/dzerror) >= dzSigCut_)continue; - if(fabs(dxyvtx/dxyerror) >= dxySigCut_)continue; - if(trk->pt() >= ptMax_)continue; + if (fabs(dzvtx / dzerror) >= dzSigCut_) + continue; + if (fabs(dxyvtx / dxyerror) >= dxySigCut_) + continue; + if (trk->pt() >= ptMax_) + continue; - bool passSelection=false; - if(fabs(dzvtx/dzerror) < dzSigHP_ && fabs(dxyvtx/dxyerror) < dxySigHP_)passSelection=true; + bool passSelection = false; + if (fabs(dzvtx / dzerror) < dzSigHP_ && fabs(dxyvtx / dxyerror) < dxySigHP_) + passSelection = true; outPtrTrks->emplace_back(*trk); - addPackedCandidate(*outPtrTrksAsCands,trk,pv,pvRefProd,passSelection); + addPackedCandidate(*outPtrTrksAsCands, trk, pv, pvRefProd, passSelection); //for creating the reco::Track -> pat::PackedCandidate map - mapping[trkIndx]=pixelTrkIndx; + mapping[trkIndx] = pixelTrkIndx; pixelTrkIndx++; - } iEvent.put(std::move(outPtrTrks)); edm::OrphanHandle oh = iEvent.put(std::move(outPtrTrksAsCands)); @@ -180,15 +176,10 @@ HIPixelTracksSlimmer_miniAOD::produce(edm::Event& iEvent, const edm::EventSetup& } // ------------ method called once each stream before processing any runs, lumis or events ------------ -void -HIPixelTracksSlimmer_miniAOD::beginStream(edm::StreamID) -{ -} +void HIPixelTracksSlimmer_miniAOD::beginStream(edm::StreamID) {} // ------------ method called once each stream after processing all runs, lumis and events ------------ -void -HIPixelTracksSlimmer_miniAOD::endStream() { -} +void HIPixelTracksSlimmer_miniAOD::endStream() {} // ------------ method called when starting to processes a run ------------ /* @@ -197,7 +188,7 @@ HIPixelTracksSlimmer_miniAOD::beginRun(edm::Run const&, edm::EventSetup const&) { } */ - + // ------------ method called when ending the processing of a run ------------ /* void @@ -205,7 +196,7 @@ HIPixelTracksSlimmer_miniAOD::endRun(edm::Run const&, edm::EventSetup const&) { } */ - + // ------------ method called when starting to processes a luminosity block ------------ /* void @@ -213,7 +204,7 @@ HIPixelTracksSlimmer_miniAOD::beginLuminosityBlock(edm::LuminosityBlock const&, { } */ - + // ------------ method called when ending the processing of a luminosity block ------------ /* void @@ -222,50 +213,42 @@ HIPixelTracksSlimmer_miniAOD::endLuminosityBlock(edm::LuminosityBlock const&, ed } */ -void -HIPixelTracksSlimmer_miniAOD::addPackedCandidate(std::vector& cands, - const reco::TrackRef& trk, - const reco::VertexRef& pvSlimmed, - const reco::VertexRefProd& pvSlimmedColl, - bool passPixelTrackSel)const -{ +void HIPixelTracksSlimmer_miniAOD::addPackedCandidate(std::vector& cands, + const reco::TrackRef& trk, + const reco::VertexRef& pvSlimmed, + const reco::VertexRefProd& pvSlimmedColl, + bool passPixelTrackSel) const { const float mass = 0.13957018; - - int id=211*trk->charge(); - - reco::Candidate::PolarLorentzVector p4(trk->pt(),trk->eta(),trk->phi(),mass); - cands.emplace_back(pat::PackedCandidate(p4,trk->vertex(), - trk->pt(),trk->eta(),trk->phi(), - id,pvSlimmedColl,pvSlimmed.key())); - - if(passPixelTrackSel) - cands.back().setTrackHighPurity(true); - else - cands.back().setTrackHighPurity(false); + int id = 211 * trk->charge(); + reco::Candidate::PolarLorentzVector p4(trk->pt(), trk->eta(), trk->phi(), mass); + cands.emplace_back( + pat::PackedCandidate(p4, trk->vertex(), trk->pt(), trk->eta(), trk->phi(), id, pvSlimmedColl, pvSlimmed.key())); - cands.back().setTrackProperties(*trk,covarianceSchema_,covarianceVersion_); + if (passPixelTrackSel) + cands.back().setTrackHighPurity(true); + else + cands.back().setTrackHighPurity(false); + cands.back().setTrackProperties(*trk, covarianceSchema_, covarianceVersion_); } - // ------------ method fills 'descriptions' with the allowed parameters for the module ------------ -void -HIPixelTracksSlimmer_miniAOD::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { +void HIPixelTracksSlimmer_miniAOD::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { //The following says we do not know what parameters are allowed so do no validation // Please change this to state exactly what you do use, even if it is no parameters edm::ParameterSetDescription desc; - desc.add("srcTracks",edm::InputTag("hiConformalPixelTracks")); - desc.add("srcVertices",edm::InputTag("offlinePrimaryVertices")); - desc.add("srcPrimaryVertices",edm::InputTag("offlineSlimmedPrimaryVertices")); - desc.add("dzSigCut",double(100.0)); - desc.add("dxySigCut",double(100.0)); - desc.add("dzSigHP",double(100.0)); - desc.add("dxySigHP",double(100.0)); - desc.add("ptMax",double(1.0)); - desc.add("covarianceVersion",int(1)); - desc.add("covarianceSchema",int(0)); + desc.add("srcTracks", edm::InputTag("hiConformalPixelTracks")); + desc.add("srcVertices", edm::InputTag("offlinePrimaryVertices")); + desc.add("srcPrimaryVertices", edm::InputTag("offlineSlimmedPrimaryVertices")); + desc.add("dzSigCut", double(100.0)); + desc.add("dxySigCut", double(100.0)); + desc.add("dzSigHP", double(100.0)); + desc.add("dxySigHP", double(100.0)); + desc.add("ptMax", double(1.0)); + desc.add("covarianceVersion", int(1)); + desc.add("covarianceSchema", int(0)); descriptions.add("HIPixelTracksSlimmer_miniAOD", desc); } From deebf6766c730a8c97ac3f3fe90b065b24d5e70d Mon Sep 17 00:00:00 2001 From: Cesar Bernardes Date: Mon, 29 Jun 2020 05:31:33 +0200 Subject: [PATCH 05/18] * Move and rename .cc module to PhysicsTools/PatAlgos * Create cfi file using fillDescription method * Rename cfi file hiPixelTracks and clone the module created by * fillDescription method * Add parameter ptMin and also a flag resetHP to avoid reseting HP flag * in all cases --- .../plugins/PATTracksToPackedCandidates.cc | 270 ++++++++++++++++++ .../python/patTracksToPackedCandidates_cfi.py | 17 ++ .../python/slimming/hiPixelTracks_cfi.py | 8 + 3 files changed, 295 insertions(+) create mode 100644 PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc create mode 100644 PhysicsTools/PatAlgos/python/patTracksToPackedCandidates_cfi.py create mode 100644 PhysicsTools/PatAlgos/python/slimming/hiPixelTracks_cfi.py diff --git a/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc b/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc new file mode 100644 index 0000000000000..aa6ae85dc79bf --- /dev/null +++ b/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc @@ -0,0 +1,270 @@ +//Based on: PhysicsTools/PatAlgos/plugins/PATLostTracks.cc + +// system include files +#include + +// user include files +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" + +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/StreamID.h" + +#include "DataFormats/TrackReco/interface/Track.h" +#include "DataFormats/TrackReco/interface/TrackFwd.h" +#include "DataFormats/VertexReco/interface/Vertex.h" +#include "DataFormats/VertexReco/interface/VertexFwd.h" + +#include "DataFormats/Candidate/interface/Candidate.h" +#include "DataFormats/RecoCandidate/interface/RecoChargedCandidate.h" +#include "DataFormats/PatCandidates/interface/PackedCandidate.h" +#include "DataFormats/Common/interface/Association.h" + +#include + +// +// class declaration +// + +class PATTracksToPackedCandidates : public edm::stream::EDProducer<> { +public: + explicit PATTracksToPackedCandidates(const edm::ParameterSet&); + ~PATTracksToPackedCandidates() override; + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + + void addPackedCandidate(std::vector& cands, + const reco::TrackRef& trk, + const reco::VertexRef& pvSlimmed, + const reco::VertexRefProd& pvSlimmedColl, + bool passPixelTrackSel) const; + +private: + void beginStream(edm::StreamID) override; + void produce(edm::Event&, const edm::EventSetup&) override; + void endStream() override; + + //virtual void beginRun(edm::Run const&, edm::EventSetup const&) override; + //virtual void endRun(edm::Run const&, edm::EventSetup const&) override; + //virtual void beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; + //virtual void endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; + + // ----------member data --------------------------- + const edm::EDGetTokenT srcTracks_; + const edm::EDGetTokenT srcVertices_; + const edm::EDGetTokenT srcPrimaryVertices_; + const double dzSigCut_; + const double dxySigCut_; + const double dzSigHP_; + const double dxySigHP_; + const double ptMax_; + const double ptMin_; + const bool resetHP_; + const int covarianceVersion_; + const int covarianceSchema_; +}; + +// +// constants, enums and typedefs +// + +// +// static data member definitions +// + +// +// constructors and destructor +// +PATTracksToPackedCandidates::PATTracksToPackedCandidates(const edm::ParameterSet& iConfig) + : srcTracks_(consumes(iConfig.getParameter("srcTracks"))), + srcVertices_(consumes(iConfig.getParameter("srcVertices"))), + srcPrimaryVertices_(consumes(iConfig.getParameter("srcPrimaryVertices"))), + dzSigCut_(iConfig.getParameter("dzSigCut")), + dxySigCut_(iConfig.getParameter("dxySigCut")), + dzSigHP_(iConfig.getParameter("dzSigHP")), + dxySigHP_(iConfig.getParameter("dxySigHP")), + ptMax_(iConfig.getParameter("ptMax")), + ptMin_(iConfig.getParameter("ptMin")), + resetHP_(iConfig.getParameter("resetHP")), + covarianceVersion_(iConfig.getParameter("covarianceVersion")), + covarianceSchema_(iConfig.getParameter("covarianceSchema")) { + produces>(); + produces>(); + produces>(); +} + +PATTracksToPackedCandidates::~PATTracksToPackedCandidates() { + // do anything here that needs to be done at destruction time + // (e.g. close files, deallocate resources etc.) +} + +// +// member functions +// + +// ------------ method called to produce the data ------------ +void PATTracksToPackedCandidates::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { + using namespace edm; + using namespace std; + + //track collection + edm::Handle tracks; + iEvent.getByToken(srcTracks_, tracks); + + auto outPtrTrks = std::make_unique>(); + auto outPtrTrksAsCands = std::make_unique>(); + + //vtx collections + edm::Handle vertices; + iEvent.getByToken(srcVertices_, vertices); + + edm::Handle pvs; + iEvent.getByToken(srcPrimaryVertices_, pvs); + reco::VertexRef pv(pvs.id()); + reco::VertexRefProd pvRefProd(pvs); + if (!pvs->empty()) { + pv = reco::VertexRef(pvs, 0); + } + + //best vertex + double bestvz = -999.9, bestvx = -999.9, bestvy = -999.9; + double bestvzError = -999.9, bestvxError = -999.9, bestvyError = -999.9; + const reco::Vertex& vtx = (*vertices)[0]; + bestvz = vtx.z(); + bestvx = vtx.x(); + bestvy = vtx.y(); + bestvzError = vtx.zError(); + bestvxError = vtx.xError(); + bestvyError = vtx.yError(); + math::XYZPoint bestvtx(bestvx, bestvy, bestvz); + + std::vector mapping(tracks->size(), -1); + int pixelTrkIndx = 0; + for (unsigned int trkIndx = 0; trkIndx < tracks->size(); trkIndx++) { + reco::TrackRef trk(tracks, trkIndx); + + double dzvtx = trk->dz(bestvtx); + double dxyvtx = trk->dxy(bestvtx); + double dzerror = sqrt(trk->dzError() * trk->dzError() + bestvzError * bestvzError); + double dxyerror = sqrt(trk->d0Error() * trk->d0Error() + bestvxError * bestvyError); + + if (fabs(dzvtx / dzerror) >= dzSigCut_) + continue; + if (fabs(dxyvtx / dxyerror) >= dxySigCut_) + continue; + if (trk->pt() >= ptMax_ || trk->pt() <= ptMin_) + continue; + + bool passSelection = false; + if (fabs(dzvtx / dzerror) < dzSigHP_ && fabs(dxyvtx / dxyerror) < dxySigHP_) + passSelection = true; + + outPtrTrks->emplace_back(*trk); + + addPackedCandidate(*outPtrTrksAsCands, trk, pv, pvRefProd, passSelection); + + //for creating the reco::Track -> pat::PackedCandidate map + mapping[trkIndx] = pixelTrkIndx; + pixelTrkIndx++; + } + iEvent.put(std::move(outPtrTrks)); + edm::OrphanHandle oh = iEvent.put(std::move(outPtrTrksAsCands)); + auto tk2pc = std::make_unique>(oh); + edm::Association::Filler tk2pcFiller(*tk2pc); + tk2pcFiller.insert(tracks, mapping.begin(), mapping.end()); + tk2pcFiller.fill(); + iEvent.put(std::move(tk2pc)); +} + +// ------------ method called once each stream before processing any runs, lumis or events ------------ +void PATTracksToPackedCandidates::beginStream(edm::StreamID) {} + +// ------------ method called once each stream after processing all runs, lumis and events ------------ +void PATTracksToPackedCandidates::endStream() {} + +// ------------ method called when starting to processes a run ------------ +/* +void +PATTracksToPackedCandidates::beginRun(edm::Run const&, edm::EventSetup const&) +{ +} +*/ + +// ------------ method called when ending the processing of a run ------------ +/* +void +PATTracksToPackedCandidates::endRun(edm::Run const&, edm::EventSetup const&) +{ +} +*/ + +// ------------ method called when starting to processes a luminosity block ------------ +/* +void +PATTracksToPackedCandidates::beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) +{ +} +*/ + +// ------------ method called when ending the processing of a luminosity block ------------ +/* +void +PATTracksToPackedCandidates::endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) +{ +} +*/ + +void PATTracksToPackedCandidates::addPackedCandidate(std::vector& cands, + const reco::TrackRef& trk, + const reco::VertexRef& pvSlimmed, + const reco::VertexRefProd& pvSlimmedColl, + bool passPixelTrackSel) const { + const float mass = 0.13957018; + + int id = 211 * trk->charge(); + + reco::Candidate::PolarLorentzVector p4(trk->pt(), trk->eta(), trk->phi(), mass); + cands.emplace_back( + pat::PackedCandidate(p4, trk->vertex(), trk->pt(), trk->eta(), trk->phi(), id, pvSlimmedColl, pvSlimmed.key())); + + if(resetHP_){ + if (passPixelTrackSel) + cands.back().setTrackHighPurity(true); + else + cands.back().setTrackHighPurity(false); + } + else{ + if (trk->quality(reco::TrackBase::highPurity)) + cands.back().setTrackHighPurity(true); + else + cands.back().setTrackHighPurity(false); + } + + cands.back().setTrackProperties(*trk, covarianceSchema_, covarianceVersion_); +} + +// ------------ method fills 'descriptions' with the allowed parameters for the module ------------ +void PATTracksToPackedCandidates::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + //The following says we do not know what parameters are allowed so do no validation + // Please change this to state exactly what you do use, even if it is no parameters + edm::ParameterSetDescription desc; + desc.add("srcTracks", {"hiConformalPixelTracks"}); + desc.add("srcVertices", {"offlinePrimaryVertices"}); + desc.add("srcPrimaryVertices", {"offlineSlimmedPrimaryVertices"}); + desc.add("dzSigCut", 10.0); + desc.add("dxySigCut", 25.0); + desc.add("dzSigHP", 7.0); + desc.add("dxySigHP", 20.0); + desc.add("ptMax", 1.0); + desc.add("ptMin", 0.3); + desc.add("resetHP", true); + desc.add("covarianceVersion", 0); + desc.add("covarianceSchema", 520); + descriptions.addWithDefaultLabel(desc); +} + +//define this as a plug-in +DEFINE_FWK_MODULE(PATTracksToPackedCandidates); diff --git a/PhysicsTools/PatAlgos/python/patTracksToPackedCandidates_cfi.py b/PhysicsTools/PatAlgos/python/patTracksToPackedCandidates_cfi.py new file mode 100644 index 0000000000000..e7635603d29dd --- /dev/null +++ b/PhysicsTools/PatAlgos/python/patTracksToPackedCandidates_cfi.py @@ -0,0 +1,17 @@ +import FWCore.ParameterSet.Config as cms + +patTracksToPackedCandidates = cms.EDProducer('PATTracksToPackedCandidates', + srcTracks = cms.InputTag('hiConformalPixelTracks'), + srcVertices = cms.InputTag('offlinePrimaryVertices'), + srcPrimaryVertices = cms.InputTag('offlineSlimmedPrimaryVertices'), + dzSigCut = cms.double(10), + dxySigCut = cms.double(25), + dzSigHP = cms.double(7), #to set HighPurity flag for pixel tracks + dxySigHP = cms.double(20), #to set HighPurity flag for pixel tracks + ptMax = cms.double(1), #max pT for pixel tracks - above this use general tracks instead + ptMin = cms.double(0.3), #min pT for pixel tracks + resetHP = cms.bool(True), #pixel tracks do not have HP flag set. Use False if does not want to reset HP flag + covarianceVersion = cms.int32(0), + covarianceSchema = cms.int32(520), + mightGet = cms.optional.untracked.vstring +) diff --git a/PhysicsTools/PatAlgos/python/slimming/hiPixelTracks_cfi.py b/PhysicsTools/PatAlgos/python/slimming/hiPixelTracks_cfi.py new file mode 100644 index 0000000000000..19cd1ea1f6914 --- /dev/null +++ b/PhysicsTools/PatAlgos/python/slimming/hiPixelTracks_cfi.py @@ -0,0 +1,8 @@ +import FWCore.ParameterSet.Config as cms + +from PhysicsTools.PatAlgos.patTracksToPackedCandidates_cfi import patTracksToPackedCandidates + +hiPixelTracks = patTracksToPackedCandidates.clone() + +from Configuration.Eras.Modifier_phase1Pixel_cff import phase1Pixel +phase1Pixel.toModify(hipixeltracks, covarianceVersion=1) From ed2abcda1840b625d8771911ebc1435e9761f1d4 Mon Sep 17 00:00:00 2001 From: Cesar Bernardes Date: Mon, 29 Jun 2020 18:08:59 +0200 Subject: [PATCH 06/18] Remove commented lines and empty/unused method(s) --- .../plugins/PATTracksToPackedCandidates.cc | 49 ------------------- 1 file changed, 49 deletions(-) diff --git a/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc b/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc index aa6ae85dc79bf..f096138cb0961 100644 --- a/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc +++ b/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc @@ -32,7 +32,6 @@ class PATTracksToPackedCandidates : public edm::stream::EDProducer<> { public: explicit PATTracksToPackedCandidates(const edm::ParameterSet&); - ~PATTracksToPackedCandidates() override; static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); @@ -43,14 +42,7 @@ class PATTracksToPackedCandidates : public edm::stream::EDProducer<> { bool passPixelTrackSel) const; private: - void beginStream(edm::StreamID) override; void produce(edm::Event&, const edm::EventSetup&) override; - void endStream() override; - - //virtual void beginRun(edm::Run const&, edm::EventSetup const&) override; - //virtual void endRun(edm::Run const&, edm::EventSetup const&) override; - //virtual void beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; - //virtual void endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; // ----------member data --------------------------- const edm::EDGetTokenT srcTracks_; @@ -96,10 +88,6 @@ PATTracksToPackedCandidates::PATTracksToPackedCandidates(const edm::ParameterSet produces>(); } -PATTracksToPackedCandidates::~PATTracksToPackedCandidates() { - // do anything here that needs to be done at destruction time - // (e.g. close files, deallocate resources etc.) -} // // member functions @@ -179,43 +167,6 @@ void PATTracksToPackedCandidates::produce(edm::Event& iEvent, const edm::EventSe iEvent.put(std::move(tk2pc)); } -// ------------ method called once each stream before processing any runs, lumis or events ------------ -void PATTracksToPackedCandidates::beginStream(edm::StreamID) {} - -// ------------ method called once each stream after processing all runs, lumis and events ------------ -void PATTracksToPackedCandidates::endStream() {} - -// ------------ method called when starting to processes a run ------------ -/* -void -PATTracksToPackedCandidates::beginRun(edm::Run const&, edm::EventSetup const&) -{ -} -*/ - -// ------------ method called when ending the processing of a run ------------ -/* -void -PATTracksToPackedCandidates::endRun(edm::Run const&, edm::EventSetup const&) -{ -} -*/ - -// ------------ method called when starting to processes a luminosity block ------------ -/* -void -PATTracksToPackedCandidates::beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) -{ -} -*/ - -// ------------ method called when ending the processing of a luminosity block ------------ -/* -void -PATTracksToPackedCandidates::endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) -{ -} -*/ void PATTracksToPackedCandidates::addPackedCandidate(std::vector& cands, const reco::TrackRef& trk, From 311307e88d1ddc5af433371633aa42a8e1ad8573 Mon Sep 17 00:00:00 2001 From: Cesar Bernardes Date: Mon, 29 Jun 2020 18:21:10 +0200 Subject: [PATCH 07/18] remove possibility of production of copy of reco::tracks --- PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc | 5 ----- 1 file changed, 5 deletions(-) diff --git a/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc b/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc index f096138cb0961..e6bc3c19d0ff4 100644 --- a/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc +++ b/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc @@ -83,7 +83,6 @@ PATTracksToPackedCandidates::PATTracksToPackedCandidates(const edm::ParameterSet resetHP_(iConfig.getParameter("resetHP")), covarianceVersion_(iConfig.getParameter("covarianceVersion")), covarianceSchema_(iConfig.getParameter("covarianceSchema")) { - produces>(); produces>(); produces>(); } @@ -102,7 +101,6 @@ void PATTracksToPackedCandidates::produce(edm::Event& iEvent, const edm::EventSe edm::Handle tracks; iEvent.getByToken(srcTracks_, tracks); - auto outPtrTrks = std::make_unique>(); auto outPtrTrksAsCands = std::make_unique>(); //vtx collections @@ -150,15 +148,12 @@ void PATTracksToPackedCandidates::produce(edm::Event& iEvent, const edm::EventSe if (fabs(dzvtx / dzerror) < dzSigHP_ && fabs(dxyvtx / dxyerror) < dxySigHP_) passSelection = true; - outPtrTrks->emplace_back(*trk); - addPackedCandidate(*outPtrTrksAsCands, trk, pv, pvRefProd, passSelection); //for creating the reco::Track -> pat::PackedCandidate map mapping[trkIndx] = pixelTrkIndx; pixelTrkIndx++; } - iEvent.put(std::move(outPtrTrks)); edm::OrphanHandle oh = iEvent.put(std::move(outPtrTrksAsCands)); auto tk2pc = std::make_unique>(oh); edm::Association::Filler tk2pcFiller(*tk2pc); From 8a0f07e9c2f43e4a3fec4340121025a5a1549ac4 Mon Sep 17 00:00:00 2001 From: Cesar Bernardes Date: Mon, 29 Jun 2020 18:42:26 +0200 Subject: [PATCH 08/18] Substitute usage of original vertex collection to vertex collection from slimmer --- .../PatAlgos/plugins/PATTracksToPackedCandidates.cc | 10 ++-------- .../PatAlgos/python/patTracksToPackedCandidates_cfi.py | 1 - 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc b/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc index e6bc3c19d0ff4..cf8177d3b54b4 100644 --- a/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc +++ b/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc @@ -46,7 +46,6 @@ class PATTracksToPackedCandidates : public edm::stream::EDProducer<> { // ----------member data --------------------------- const edm::EDGetTokenT srcTracks_; - const edm::EDGetTokenT srcVertices_; const edm::EDGetTokenT srcPrimaryVertices_; const double dzSigCut_; const double dxySigCut_; @@ -72,7 +71,6 @@ class PATTracksToPackedCandidates : public edm::stream::EDProducer<> { // PATTracksToPackedCandidates::PATTracksToPackedCandidates(const edm::ParameterSet& iConfig) : srcTracks_(consumes(iConfig.getParameter("srcTracks"))), - srcVertices_(consumes(iConfig.getParameter("srcVertices"))), srcPrimaryVertices_(consumes(iConfig.getParameter("srcPrimaryVertices"))), dzSigCut_(iConfig.getParameter("dzSigCut")), dxySigCut_(iConfig.getParameter("dxySigCut")), @@ -103,10 +101,7 @@ void PATTracksToPackedCandidates::produce(edm::Event& iEvent, const edm::EventSe auto outPtrTrksAsCands = std::make_unique>(); - //vtx collections - edm::Handle vertices; - iEvent.getByToken(srcVertices_, vertices); - + //vtx collection edm::Handle pvs; iEvent.getByToken(srcPrimaryVertices_, pvs); reco::VertexRef pv(pvs.id()); @@ -118,7 +113,7 @@ void PATTracksToPackedCandidates::produce(edm::Event& iEvent, const edm::EventSe //best vertex double bestvz = -999.9, bestvx = -999.9, bestvy = -999.9; double bestvzError = -999.9, bestvxError = -999.9, bestvyError = -999.9; - const reco::Vertex& vtx = (*vertices)[0]; + const reco::Vertex& vtx = (*pvs)[0]; bestvz = vtx.z(); bestvx = vtx.x(); bestvy = vtx.y(); @@ -198,7 +193,6 @@ void PATTracksToPackedCandidates::fillDescriptions(edm::ConfigurationDescription // Please change this to state exactly what you do use, even if it is no parameters edm::ParameterSetDescription desc; desc.add("srcTracks", {"hiConformalPixelTracks"}); - desc.add("srcVertices", {"offlinePrimaryVertices"}); desc.add("srcPrimaryVertices", {"offlineSlimmedPrimaryVertices"}); desc.add("dzSigCut", 10.0); desc.add("dxySigCut", 25.0); diff --git a/PhysicsTools/PatAlgos/python/patTracksToPackedCandidates_cfi.py b/PhysicsTools/PatAlgos/python/patTracksToPackedCandidates_cfi.py index e7635603d29dd..ca3666329f10e 100644 --- a/PhysicsTools/PatAlgos/python/patTracksToPackedCandidates_cfi.py +++ b/PhysicsTools/PatAlgos/python/patTracksToPackedCandidates_cfi.py @@ -2,7 +2,6 @@ patTracksToPackedCandidates = cms.EDProducer('PATTracksToPackedCandidates', srcTracks = cms.InputTag('hiConformalPixelTracks'), - srcVertices = cms.InputTag('offlinePrimaryVertices'), srcPrimaryVertices = cms.InputTag('offlineSlimmedPrimaryVertices'), dzSigCut = cms.double(10), dxySigCut = cms.double(25), From 74d9a578d20aad4c0bd4240e7d9be25e92d5ddf6 Mon Sep 17 00:00:00 2001 From: Cesar Bernardes Date: Mon, 29 Jun 2020 19:29:10 +0200 Subject: [PATCH 09/18] Improve code for track selections --- .../plugins/PATTracksToPackedCandidates.cc | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc b/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc index cf8177d3b54b4..ad0fcb222dd15 100644 --- a/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc +++ b/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc @@ -111,30 +111,27 @@ void PATTracksToPackedCandidates::produce(edm::Event& iEvent, const edm::EventSe } //best vertex - double bestvz = -999.9, bestvx = -999.9, bestvy = -999.9; double bestvzError = -999.9, bestvxError = -999.9, bestvyError = -999.9; const reco::Vertex& vtx = (*pvs)[0]; - bestvz = vtx.z(); - bestvx = vtx.x(); - bestvy = vtx.y(); bestvzError = vtx.zError(); bestvxError = vtx.xError(); bestvyError = vtx.yError(); - math::XYZPoint bestvtx(bestvx, bestvy, bestvz); + math::XYZPoint bestvtx(vtx.position()); + math::Error<3>::type vtx_cov = vtx.covariance(); std::vector mapping(tracks->size(), -1); int pixelTrkIndx = 0; for (unsigned int trkIndx = 0; trkIndx < tracks->size(); trkIndx++) { reco::TrackRef trk(tracks, trkIndx); - double dzvtx = trk->dz(bestvtx); - double dxyvtx = trk->dxy(bestvtx); - double dzerror = sqrt(trk->dzError() * trk->dzError() + bestvzError * bestvzError); - double dxyerror = sqrt(trk->d0Error() * trk->d0Error() + bestvxError * bestvyError); + double dzvtx = std::abs(trk->dz(bestvtx)); + double dxyvtx = std::abs(trk->dxy(bestvtx)); + double dzerror = std::hypot(trk->dzError(), bestvzError); + double dxyerror = sqrt(trk->dxyError(bestvtx, vtx_cov) * trk->dxyError(bestvtx, vtx_cov) + bestvxError * bestvyError); - if (fabs(dzvtx / dzerror) >= dzSigCut_) + if (dzvtx >= dzSigCut_*dzerror) continue; - if (fabs(dxyvtx / dxyerror) >= dxySigCut_) + if (dxyvtx >= dxySigCut_*dxyerror) continue; if (trk->pt() >= ptMax_ || trk->pt() <= ptMin_) continue; From 32f0d405268114c4305a6a71dc4b1d198c6d5ddf Mon Sep 17 00:00:00 2001 From: Cesar Bernardes Date: Mon, 29 Jun 2020 20:40:34 +0200 Subject: [PATCH 10/18] Improve code to access and loop over tracks --- .../plugins/PATTracksToPackedCandidates.cc | 41 +++++++++---------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc b/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc index ad0fcb222dd15..d92e128563f3c 100644 --- a/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc +++ b/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc @@ -36,7 +36,7 @@ class PATTracksToPackedCandidates : public edm::stream::EDProducer<> { static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); void addPackedCandidate(std::vector& cands, - const reco::TrackRef& trk, + const reco::Track trk, const reco::VertexRef& pvSlimmed, const reco::VertexRefProd& pvSlimmedColl, bool passPixelTrackSel) const; @@ -96,8 +96,7 @@ void PATTracksToPackedCandidates::produce(edm::Event& iEvent, const edm::EventSe using namespace std; //track collection - edm::Handle tracks; - iEvent.getByToken(srcTracks_, tracks); + auto tracks = iEvent.getHandle(srcTracks_); auto outPtrTrksAsCands = std::make_unique>(); @@ -120,31 +119,31 @@ void PATTracksToPackedCandidates::produce(edm::Event& iEvent, const edm::EventSe math::Error<3>::type vtx_cov = vtx.covariance(); std::vector mapping(tracks->size(), -1); - int pixelTrkIndx = 0; - for (unsigned int trkIndx = 0; trkIndx < tracks->size(); trkIndx++) { - reco::TrackRef trk(tracks, trkIndx); - - double dzvtx = std::abs(trk->dz(bestvtx)); - double dxyvtx = std::abs(trk->dxy(bestvtx)); - double dzerror = std::hypot(trk->dzError(), bestvzError); - double dxyerror = sqrt(trk->dxyError(bestvtx, vtx_cov) * trk->dxyError(bestvtx, vtx_cov) + bestvxError * bestvyError); + int savedCandIndx = 0; + int trkIndx = -1; + for (auto const& trk : *tracks) { + trkIndx++; + double dzvtx = std::abs(trk.dz(bestvtx)); + double dxyvtx = std::abs(trk.dxy(bestvtx)); + double dzerror = std::hypot(trk.dzError(), bestvzError); + double dxyerror = sqrt(trk.dxyError(bestvtx, vtx_cov) * trk.dxyError(bestvtx, vtx_cov) + bestvxError * bestvyError); if (dzvtx >= dzSigCut_*dzerror) continue; if (dxyvtx >= dxySigCut_*dxyerror) continue; - if (trk->pt() >= ptMax_ || trk->pt() <= ptMin_) + if (trk.pt() >= ptMax_ || trk.pt() <= ptMin_) continue; bool passSelection = false; - if (fabs(dzvtx / dzerror) < dzSigHP_ && fabs(dxyvtx / dxyerror) < dxySigHP_) + if (dzvtx < dzSigHP_*dzerror && dxyvtx < dxySigHP_*dxyerror) passSelection = true; addPackedCandidate(*outPtrTrksAsCands, trk, pv, pvRefProd, passSelection); //for creating the reco::Track -> pat::PackedCandidate map - mapping[trkIndx] = pixelTrkIndx; - pixelTrkIndx++; + mapping[trkIndx] = savedCandIndx; + savedCandIndx++; } edm::OrphanHandle oh = iEvent.put(std::move(outPtrTrksAsCands)); auto tk2pc = std::make_unique>(oh); @@ -156,17 +155,17 @@ void PATTracksToPackedCandidates::produce(edm::Event& iEvent, const edm::EventSe void PATTracksToPackedCandidates::addPackedCandidate(std::vector& cands, - const reco::TrackRef& trk, + const reco::Track trk, const reco::VertexRef& pvSlimmed, const reco::VertexRefProd& pvSlimmedColl, bool passPixelTrackSel) const { const float mass = 0.13957018; - int id = 211 * trk->charge(); + int id = 211 * trk.charge(); - reco::Candidate::PolarLorentzVector p4(trk->pt(), trk->eta(), trk->phi(), mass); + reco::Candidate::PolarLorentzVector p4(trk.pt(), trk.eta(), trk.phi(), mass); cands.emplace_back( - pat::PackedCandidate(p4, trk->vertex(), trk->pt(), trk->eta(), trk->phi(), id, pvSlimmedColl, pvSlimmed.key())); + pat::PackedCandidate(p4, trk.vertex(), trk.pt(), trk.eta(), trk.phi(), id, pvSlimmedColl, pvSlimmed.key())); if(resetHP_){ if (passPixelTrackSel) @@ -175,13 +174,13 @@ void PATTracksToPackedCandidates::addPackedCandidate(std::vectorquality(reco::TrackBase::highPurity)) + if (trk.quality(reco::TrackBase::highPurity)) cands.back().setTrackHighPurity(true); else cands.back().setTrackHighPurity(false); } - cands.back().setTrackProperties(*trk, covarianceSchema_, covarianceVersion_); + cands.back().setTrackProperties(trk, covarianceSchema_, covarianceVersion_); } // ------------ method fills 'descriptions' with the allowed parameters for the module ------------ From 0c32060e85783640324132fec170d1405b7f9ff7 Mon Sep 17 00:00:00 2001 From: Cesar Bernardes Date: Mon, 29 Jun 2020 21:42:06 +0200 Subject: [PATCH 11/18] Simplify code in MicroEventContent_cff , modify other configs accordingly with modifications in .cc module and few clang modifications --- .../plugins/PATTracksToPackedCandidates.cc | 25 ++++++++----------- .../python/slimming/MicroEventContent_cff.py | 15 ++++++----- .../python/slimming/hiPixelTracks_cfi.py | 2 +- .../PatAlgos/python/slimming/slimming_cff.py | 4 +-- 4 files changed, 21 insertions(+), 25 deletions(-) diff --git a/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc b/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc index d92e128563f3c..3977bfe141f3d 100644 --- a/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc +++ b/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc @@ -85,7 +85,6 @@ PATTracksToPackedCandidates::PATTracksToPackedCandidates(const edm::ParameterSet produces>(); } - // // member functions // @@ -115,7 +114,7 @@ void PATTracksToPackedCandidates::produce(edm::Event& iEvent, const edm::EventSe bestvzError = vtx.zError(); bestvxError = vtx.xError(); bestvyError = vtx.yError(); - math::XYZPoint bestvtx(vtx.position()); + const math::XYZPoint& bestvtx(vtx.position()); math::Error<3>::type vtx_cov = vtx.covariance(); std::vector mapping(tracks->size(), -1); @@ -128,15 +127,15 @@ void PATTracksToPackedCandidates::produce(edm::Event& iEvent, const edm::EventSe double dzerror = std::hypot(trk.dzError(), bestvzError); double dxyerror = sqrt(trk.dxyError(bestvtx, vtx_cov) * trk.dxyError(bestvtx, vtx_cov) + bestvxError * bestvyError); - if (dzvtx >= dzSigCut_*dzerror) + if (dzvtx >= dzSigCut_ * dzerror) continue; - if (dxyvtx >= dxySigCut_*dxyerror) + if (dxyvtx >= dxySigCut_ * dxyerror) continue; if (trk.pt() >= ptMax_ || trk.pt() <= ptMin_) continue; bool passSelection = false; - if (dzvtx < dzSigHP_*dzerror && dxyvtx < dxySigHP_*dxyerror) + if (dzvtx < dzSigHP_ * dzerror && dxyvtx < dxySigHP_ * dxyerror) passSelection = true; addPackedCandidate(*outPtrTrksAsCands, trk, pv, pvRefProd, passSelection); @@ -153,12 +152,11 @@ void PATTracksToPackedCandidates::produce(edm::Event& iEvent, const edm::EventSe iEvent.put(std::move(tk2pc)); } - void PATTracksToPackedCandidates::addPackedCandidate(std::vector& cands, - const reco::Track trk, - const reco::VertexRef& pvSlimmed, - const reco::VertexRefProd& pvSlimmedColl, - bool passPixelTrackSel) const { + const reco::Track trk, + const reco::VertexRef& pvSlimmed, + const reco::VertexRefProd& pvSlimmedColl, + bool passPixelTrackSel) const { const float mass = 0.13957018; int id = 211 * trk.charge(); @@ -167,17 +165,16 @@ void PATTracksToPackedCandidates::addPackedCandidate(std::vector Date: Mon, 29 Jun 2020 22:02:07 +0200 Subject: [PATCH 12/18] Remove older files and add 2 comments to describe parameters --- .../python/patTracksToPackedCandidates_cfi.py | 4 +- RecoHI/HiTracking/plugins/BuildFile.xml | 1 - .../plugins/HIPixelTracksSlimmer_miniAOD.cc | 256 ------------------ .../python/hipixeltracks_miniAOD_cfi.py | 17 -- 4 files changed, 2 insertions(+), 276 deletions(-) delete mode 100644 RecoHI/HiTracking/plugins/HIPixelTracksSlimmer_miniAOD.cc delete mode 100644 RecoHI/HiTracking/python/hipixeltracks_miniAOD_cfi.py diff --git a/PhysicsTools/PatAlgos/python/patTracksToPackedCandidates_cfi.py b/PhysicsTools/PatAlgos/python/patTracksToPackedCandidates_cfi.py index ca3666329f10e..8b502c99631f1 100644 --- a/PhysicsTools/PatAlgos/python/patTracksToPackedCandidates_cfi.py +++ b/PhysicsTools/PatAlgos/python/patTracksToPackedCandidates_cfi.py @@ -10,7 +10,7 @@ ptMax = cms.double(1), #max pT for pixel tracks - above this use general tracks instead ptMin = cms.double(0.3), #min pT for pixel tracks resetHP = cms.bool(True), #pixel tracks do not have HP flag set. Use False if does not want to reset HP flag - covarianceVersion = cms.int32(0), - covarianceSchema = cms.int32(520), + covarianceVersion = cms.int32(0), #so far: 0 is Phase0, 1 is Phase1 + covarianceSchema = cms.int32(520), #use less accurate schema - reduce size of collection mightGet = cms.optional.untracked.vstring ) diff --git a/RecoHI/HiTracking/plugins/BuildFile.xml b/RecoHI/HiTracking/plugins/BuildFile.xml index 58b4b858bf36f..afd8eee1e5bb5 100644 --- a/RecoHI/HiTracking/plugins/BuildFile.xml +++ b/RecoHI/HiTracking/plugins/BuildFile.xml @@ -1,6 +1,5 @@ - diff --git a/RecoHI/HiTracking/plugins/HIPixelTracksSlimmer_miniAOD.cc b/RecoHI/HiTracking/plugins/HIPixelTracksSlimmer_miniAOD.cc deleted file mode 100644 index b0c76afc58cc3..0000000000000 --- a/RecoHI/HiTracking/plugins/HIPixelTracksSlimmer_miniAOD.cc +++ /dev/null @@ -1,256 +0,0 @@ -//Based on: PhysicsTools/PatAlgos/plugins/PATLostTracks.cc - -// system include files -#include - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/stream/EDProducer.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Utilities/interface/StreamID.h" - -#include "DataFormats/TrackReco/interface/Track.h" -#include "DataFormats/TrackReco/interface/TrackFwd.h" -#include "DataFormats/VertexReco/interface/Vertex.h" -#include "DataFormats/VertexReco/interface/VertexFwd.h" - -#include "DataFormats/Candidate/interface/Candidate.h" -#include "DataFormats/RecoCandidate/interface/RecoChargedCandidate.h" -#include "DataFormats/PatCandidates/interface/PackedCandidate.h" -#include "DataFormats/Common/interface/Association.h" - -#include - -// -// class declaration -// - -class HIPixelTracksSlimmer_miniAOD : public edm::stream::EDProducer<> { -public: - explicit HIPixelTracksSlimmer_miniAOD(const edm::ParameterSet&); - ~HIPixelTracksSlimmer_miniAOD() override; - - static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); - - void addPackedCandidate(std::vector& cands, - const reco::TrackRef& trk, - const reco::VertexRef& pvSlimmed, - const reco::VertexRefProd& pvSlimmedColl, - bool passPixelTrackSel) const; - -private: - void beginStream(edm::StreamID) override; - void produce(edm::Event&, const edm::EventSetup&) override; - void endStream() override; - - //virtual void beginRun(edm::Run const&, edm::EventSetup const&) override; - //virtual void endRun(edm::Run const&, edm::EventSetup const&) override; - //virtual void beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; - //virtual void endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; - - // ----------member data --------------------------- - const edm::EDGetTokenT srcTracks_; - const edm::EDGetTokenT srcVertices_; - const edm::EDGetTokenT srcPrimaryVertices_; - const double dzSigCut_; - const double dxySigCut_; - const double dzSigHP_; - const double dxySigHP_; - const double ptMax_; - const int covarianceVersion_; - const int covarianceSchema_; -}; - -// -// constants, enums and typedefs -// - -// -// static data member definitions -// - -// -// constructors and destructor -// -HIPixelTracksSlimmer_miniAOD::HIPixelTracksSlimmer_miniAOD(const edm::ParameterSet& iConfig) - : srcTracks_(consumes(iConfig.getParameter("srcTracks"))), - srcVertices_(consumes(iConfig.getParameter("srcVertices"))), - srcPrimaryVertices_(consumes(iConfig.getParameter("srcPrimaryVertices"))), - dzSigCut_(iConfig.getParameter("dzSigCut")), - dxySigCut_(iConfig.getParameter("dxySigCut")), - dzSigHP_(iConfig.getParameter("dzSigHP")), - dxySigHP_(iConfig.getParameter("dxySigHP")), - ptMax_(iConfig.getParameter("ptMax")), - covarianceVersion_(iConfig.getParameter("covarianceVersion")), - covarianceSchema_(iConfig.getParameter("covarianceSchema")) { - produces>(); - produces>(); - produces>(); -} - -HIPixelTracksSlimmer_miniAOD::~HIPixelTracksSlimmer_miniAOD() { - // do anything here that needs to be done at destruction time - // (e.g. close files, deallocate resources etc.) -} - -// -// member functions -// - -// ------------ method called to produce the data ------------ -void HIPixelTracksSlimmer_miniAOD::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { - using namespace edm; - using namespace std; - - //track collection - edm::Handle tracks; - iEvent.getByToken(srcTracks_, tracks); - - auto outPtrTrks = std::make_unique>(); - auto outPtrTrksAsCands = std::make_unique>(); - - //vtx collections - edm::Handle vertices; - iEvent.getByToken(srcVertices_, vertices); - - edm::Handle pvs; - iEvent.getByToken(srcPrimaryVertices_, pvs); - reco::VertexRef pv(pvs.id()); - reco::VertexRefProd pvRefProd(pvs); - if (!pvs->empty()) { - pv = reco::VertexRef(pvs, 0); - } - - //best vertex - double bestvz = -999.9, bestvx = -999.9, bestvy = -999.9; - double bestvzError = -999.9, bestvxError = -999.9, bestvyError = -999.9; - const reco::Vertex& vtx = (*vertices)[0]; - bestvz = vtx.z(); - bestvx = vtx.x(); - bestvy = vtx.y(); - bestvzError = vtx.zError(); - bestvxError = vtx.xError(); - bestvyError = vtx.yError(); - math::XYZPoint bestvtx(bestvx, bestvy, bestvz); - - std::vector mapping(tracks->size(), -1); - int pixelTrkIndx = 0; - for (unsigned int trkIndx = 0; trkIndx < tracks->size(); trkIndx++) { - reco::TrackRef trk(tracks, trkIndx); - - double dzvtx = trk->dz(bestvtx); - double dxyvtx = trk->dxy(bestvtx); - double dzerror = sqrt(trk->dzError() * trk->dzError() + bestvzError * bestvzError); - double dxyerror = sqrt(trk->d0Error() * trk->d0Error() + bestvxError * bestvyError); - - if (fabs(dzvtx / dzerror) >= dzSigCut_) - continue; - if (fabs(dxyvtx / dxyerror) >= dxySigCut_) - continue; - if (trk->pt() >= ptMax_) - continue; - - bool passSelection = false; - if (fabs(dzvtx / dzerror) < dzSigHP_ && fabs(dxyvtx / dxyerror) < dxySigHP_) - passSelection = true; - - outPtrTrks->emplace_back(*trk); - - addPackedCandidate(*outPtrTrksAsCands, trk, pv, pvRefProd, passSelection); - - //for creating the reco::Track -> pat::PackedCandidate map - mapping[trkIndx] = pixelTrkIndx; - pixelTrkIndx++; - } - iEvent.put(std::move(outPtrTrks)); - edm::OrphanHandle oh = iEvent.put(std::move(outPtrTrksAsCands)); - auto tk2pc = std::make_unique>(oh); - edm::Association::Filler tk2pcFiller(*tk2pc); - tk2pcFiller.insert(tracks, mapping.begin(), mapping.end()); - tk2pcFiller.fill(); - iEvent.put(std::move(tk2pc)); -} - -// ------------ method called once each stream before processing any runs, lumis or events ------------ -void HIPixelTracksSlimmer_miniAOD::beginStream(edm::StreamID) {} - -// ------------ method called once each stream after processing all runs, lumis and events ------------ -void HIPixelTracksSlimmer_miniAOD::endStream() {} - -// ------------ method called when starting to processes a run ------------ -/* -void -HIPixelTracksSlimmer_miniAOD::beginRun(edm::Run const&, edm::EventSetup const&) -{ -} -*/ - -// ------------ method called when ending the processing of a run ------------ -/* -void -HIPixelTracksSlimmer_miniAOD::endRun(edm::Run const&, edm::EventSetup const&) -{ -} -*/ - -// ------------ method called when starting to processes a luminosity block ------------ -/* -void -HIPixelTracksSlimmer_miniAOD::beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) -{ -} -*/ - -// ------------ method called when ending the processing of a luminosity block ------------ -/* -void -HIPixelTracksSlimmer_miniAOD::endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) -{ -} -*/ - -void HIPixelTracksSlimmer_miniAOD::addPackedCandidate(std::vector& cands, - const reco::TrackRef& trk, - const reco::VertexRef& pvSlimmed, - const reco::VertexRefProd& pvSlimmedColl, - bool passPixelTrackSel) const { - const float mass = 0.13957018; - - int id = 211 * trk->charge(); - - reco::Candidate::PolarLorentzVector p4(trk->pt(), trk->eta(), trk->phi(), mass); - cands.emplace_back( - pat::PackedCandidate(p4, trk->vertex(), trk->pt(), trk->eta(), trk->phi(), id, pvSlimmedColl, pvSlimmed.key())); - - if (passPixelTrackSel) - cands.back().setTrackHighPurity(true); - else - cands.back().setTrackHighPurity(false); - - cands.back().setTrackProperties(*trk, covarianceSchema_, covarianceVersion_); -} - -// ------------ method fills 'descriptions' with the allowed parameters for the module ------------ -void HIPixelTracksSlimmer_miniAOD::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { - //The following says we do not know what parameters are allowed so do no validation - // Please change this to state exactly what you do use, even if it is no parameters - edm::ParameterSetDescription desc; - desc.add("srcTracks", edm::InputTag("hiConformalPixelTracks")); - desc.add("srcVertices", edm::InputTag("offlinePrimaryVertices")); - desc.add("srcPrimaryVertices", edm::InputTag("offlineSlimmedPrimaryVertices")); - desc.add("dzSigCut", double(100.0)); - desc.add("dxySigCut", double(100.0)); - desc.add("dzSigHP", double(100.0)); - desc.add("dxySigHP", double(100.0)); - desc.add("ptMax", double(1.0)); - desc.add("covarianceVersion", int(1)); - desc.add("covarianceSchema", int(0)); - descriptions.add("HIPixelTracksSlimmer_miniAOD", desc); -} - -//define this as a plug-in -DEFINE_FWK_MODULE(HIPixelTracksSlimmer_miniAOD); diff --git a/RecoHI/HiTracking/python/hipixeltracks_miniAOD_cfi.py b/RecoHI/HiTracking/python/hipixeltracks_miniAOD_cfi.py deleted file mode 100644 index 51cae45826371..0000000000000 --- a/RecoHI/HiTracking/python/hipixeltracks_miniAOD_cfi.py +++ /dev/null @@ -1,17 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -hipixeltracks = cms.EDProducer("HIPixelTracksSlimmer_miniAOD", - srcTracks = cms.InputTag("hiConformalPixelTracks"), - srcVertices = cms.InputTag("offlinePrimaryVertices"), - srcPrimaryVertices = cms.InputTag("offlineSlimmedPrimaryVertices"), - dzSigCut = cms.double(10.0), - dxySigCut = cms.double(25.0), - dzSigHP = cms.double(7.0), #to set HighPurity flag for pixel tracks - dxySigHP = cms.double(20.0), #to set HighPurity flag for pixel tracks - ptMax = cms.double(1.0), #max pT for pixel tracks - above this use general tracks instead - covarianceVersion = cms.int32(0), #so far: 0 is Phase0, 1 is Phase1 - covarianceSchema = cms.int32(520) #use less accurate schema - reduce size of collection by around 20% -) - -from Configuration.Eras.Modifier_phase1Pixel_cff import phase1Pixel -phase1Pixel.toModify(hipixeltracks, covarianceVersion=1) From 6e7159380e61d7f6bf7342a1f71162fbcace502a Mon Sep 17 00:00:00 2001 From: Cesar Bernardes Date: Fri, 3 Jul 2020 04:50:42 +0200 Subject: [PATCH 13/18] Remove unnecessary includes and simplify code --- .../PatAlgos/plugins/PATTracksToPackedCandidates.cc | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc b/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc index 3977bfe141f3d..365be0728399a 100644 --- a/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc +++ b/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc @@ -19,7 +19,6 @@ #include "DataFormats/VertexReco/interface/VertexFwd.h" #include "DataFormats/Candidate/interface/Candidate.h" -#include "DataFormats/RecoCandidate/interface/RecoChargedCandidate.h" #include "DataFormats/PatCandidates/interface/PackedCandidate.h" #include "DataFormats/Common/interface/Association.h" @@ -100,8 +99,7 @@ void PATTracksToPackedCandidates::produce(edm::Event& iEvent, const edm::EventSe auto outPtrTrksAsCands = std::make_unique>(); //vtx collection - edm::Handle pvs; - iEvent.getByToken(srcPrimaryVertices_, pvs); + auto pvs = iEvent.getHandle(srcPrimaryVertices_); reco::VertexRef pv(pvs.id()); reco::VertexRefProd pvRefProd(pvs); if (!pvs->empty()) { @@ -134,9 +132,7 @@ void PATTracksToPackedCandidates::produce(edm::Event& iEvent, const edm::EventSe if (trk.pt() >= ptMax_ || trk.pt() <= ptMin_) continue; - bool passSelection = false; - if (dzvtx < dzSigHP_ * dzerror && dxyvtx < dxySigHP_ * dxyerror) - passSelection = true; + bool passSelection = (dzvtx < dzSigHP_ * dzerror && dxyvtx < dxySigHP_ * dxyerror); addPackedCandidate(*outPtrTrksAsCands, trk, pv, pvRefProd, passSelection); @@ -162,8 +158,7 @@ void PATTracksToPackedCandidates::addPackedCandidate(std::vector Date: Fri, 3 Jul 2020 05:15:02 +0200 Subject: [PATCH 14/18] Make this EDProducer global --- .../PatAlgos/plugins/PATTracksToPackedCandidates.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc b/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc index 365be0728399a..4aaab1a04574c 100644 --- a/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc +++ b/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc @@ -5,7 +5,7 @@ // user include files #include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/Framework/interface/global/EDProducer.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/MakerMacros.h" @@ -28,7 +28,7 @@ // class declaration // -class PATTracksToPackedCandidates : public edm::stream::EDProducer<> { +class PATTracksToPackedCandidates : public edm::global::EDProducer<> { public: explicit PATTracksToPackedCandidates(const edm::ParameterSet&); @@ -41,7 +41,7 @@ class PATTracksToPackedCandidates : public edm::stream::EDProducer<> { bool passPixelTrackSel) const; private: - void produce(edm::Event&, const edm::EventSetup&) override; + void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override; // ----------member data --------------------------- const edm::EDGetTokenT srcTracks_; @@ -89,7 +89,7 @@ PATTracksToPackedCandidates::PATTracksToPackedCandidates(const edm::ParameterSet // // ------------ method called to produce the data ------------ -void PATTracksToPackedCandidates::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { +void PATTracksToPackedCandidates::produce(edm::StreamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const { using namespace edm; using namespace std; From 7af9308247a1f43eab7529feab92d3720c1f3bbe Mon Sep 17 00:00:00 2001 From: Cesar Bernardes Date: Fri, 3 Jul 2020 18:05:22 +0200 Subject: [PATCH 15/18] Fix dxyError --- .../PatAlgos/plugins/PATTracksToPackedCandidates.cc | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc b/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc index 4aaab1a04574c..e0bd421026cfc 100644 --- a/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc +++ b/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc @@ -107,11 +107,8 @@ void PATTracksToPackedCandidates::produce(edm::StreamID, edm::Event& iEvent, con } //best vertex - double bestvzError = -999.9, bestvxError = -999.9, bestvyError = -999.9; const reco::Vertex& vtx = (*pvs)[0]; - bestvzError = vtx.zError(); - bestvxError = vtx.xError(); - bestvyError = vtx.yError(); + double bestvzError = vtx.zError(); const math::XYZPoint& bestvtx(vtx.position()); math::Error<3>::type vtx_cov = vtx.covariance(); @@ -123,7 +120,7 @@ void PATTracksToPackedCandidates::produce(edm::StreamID, edm::Event& iEvent, con double dzvtx = std::abs(trk.dz(bestvtx)); double dxyvtx = std::abs(trk.dxy(bestvtx)); double dzerror = std::hypot(trk.dzError(), bestvzError); - double dxyerror = sqrt(trk.dxyError(bestvtx, vtx_cov) * trk.dxyError(bestvtx, vtx_cov) + bestvxError * bestvyError); + double dxyerror = trk.dxyError(bestvtx, vtx_cov); if (dzvtx >= dzSigCut_ * dzerror) continue; From 77cb1baaa80d6d11618e631ff10c2582072bf804 Mon Sep 17 00:00:00 2001 From: Cesar Bernardes Date: Fri, 3 Jul 2020 19:37:27 +0200 Subject: [PATCH 16/18] Add empty vertex protection --- .../plugins/PATTracksToPackedCandidates.cc | 25 ++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc b/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc index e0bd421026cfc..13e0eaea640ee 100644 --- a/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc +++ b/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc @@ -17,6 +17,7 @@ #include "DataFormats/TrackReco/interface/TrackFwd.h" #include "DataFormats/VertexReco/interface/Vertex.h" #include "DataFormats/VertexReco/interface/VertexFwd.h" +#include "DataFormats/BeamSpot/interface/BeamSpot.h" #include "DataFormats/Candidate/interface/Candidate.h" #include "DataFormats/PatCandidates/interface/PackedCandidate.h" @@ -46,6 +47,7 @@ class PATTracksToPackedCandidates : public edm::global::EDProducer<> { // ----------member data --------------------------- const edm::EDGetTokenT srcTracks_; const edm::EDGetTokenT srcPrimaryVertices_; + const edm::EDGetTokenT srcOfflineBeamSpot_; const double dzSigCut_; const double dxySigCut_; const double dzSigHP_; @@ -71,6 +73,7 @@ class PATTracksToPackedCandidates : public edm::global::EDProducer<> { PATTracksToPackedCandidates::PATTracksToPackedCandidates(const edm::ParameterSet& iConfig) : srcTracks_(consumes(iConfig.getParameter("srcTracks"))), srcPrimaryVertices_(consumes(iConfig.getParameter("srcPrimaryVertices"))), + srcOfflineBeamSpot_(consumes(iConfig.getParameter("srcOfflineBeamSpot"))), dzSigCut_(iConfig.getParameter("dzSigCut")), dxySigCut_(iConfig.getParameter("dxySigCut")), dzSigHP_(iConfig.getParameter("dzSigHP")), @@ -102,16 +105,25 @@ void PATTracksToPackedCandidates::produce(edm::StreamID, edm::Event& iEvent, con auto pvs = iEvent.getHandle(srcPrimaryVertices_); reco::VertexRef pv(pvs.id()); reco::VertexRefProd pvRefProd(pvs); + + //best vertex + double bestvzError; + math::XYZPoint bestvtx; + math::Error<3>::type vtx_cov; if (!pvs->empty()) { pv = reco::VertexRef(pvs, 0); + const reco::Vertex& vtx = (*pvs)[0]; + bestvzError = vtx.zError(); + bestvtx = vtx.position(); + vtx_cov = vtx.covariance(); + } else { + auto offlineBS = iEvent.getHandle(srcOfflineBeamSpot_); + reco::BeamSpot bs = *offlineBS; + bestvzError = bs.z0Error(); + bestvtx = bs.position(); + vtx_cov = bs.covariance3D(); } - //best vertex - const reco::Vertex& vtx = (*pvs)[0]; - double bestvzError = vtx.zError(); - const math::XYZPoint& bestvtx(vtx.position()); - math::Error<3>::type vtx_cov = vtx.covariance(); - std::vector mapping(tracks->size(), -1); int savedCandIndx = 0; int trkIndx = -1; @@ -179,6 +191,7 @@ void PATTracksToPackedCandidates::fillDescriptions(edm::ConfigurationDescription edm::ParameterSetDescription desc; desc.add("srcTracks", {"hiConformalPixelTracks"}); desc.add("srcPrimaryVertices", {"offlineSlimmedPrimaryVertices"}); + desc.add("srcOfflineBeamSpot", {"offlineBeamSpot"}); desc.add("dzSigCut", 10.0); desc.add("dxySigCut", 25.0); desc.add("dzSigHP", 7.0); From 73d82c08c6f959cb9762d7e040eefb75bffe6950 Mon Sep 17 00:00:00 2001 From: Cesar Bernardes Date: Fri, 3 Jul 2020 20:07:13 +0200 Subject: [PATCH 17/18] Remove cfi file, use auto-generated file, and add comments to .cc module --- .../plugins/PATTracksToPackedCandidates.cc | 18 ++++++++++-------- .../python/patTracksToPackedCandidates_cfi.py | 16 ---------------- 2 files changed, 10 insertions(+), 24 deletions(-) delete mode 100644 PhysicsTools/PatAlgos/python/patTracksToPackedCandidates_cfi.py diff --git a/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc b/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc index 13e0eaea640ee..98641353c5c82 100644 --- a/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc +++ b/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc @@ -191,16 +191,18 @@ void PATTracksToPackedCandidates::fillDescriptions(edm::ConfigurationDescription edm::ParameterSetDescription desc; desc.add("srcTracks", {"hiConformalPixelTracks"}); desc.add("srcPrimaryVertices", {"offlineSlimmedPrimaryVertices"}); - desc.add("srcOfflineBeamSpot", {"offlineBeamSpot"}); + desc.add("srcOfflineBeamSpot", {"offlineBeamSpot"}) + ->setComment("use BeamSpot if empty vtx collection"); desc.add("dzSigCut", 10.0); desc.add("dxySigCut", 25.0); - desc.add("dzSigHP", 7.0); - desc.add("dxySigHP", 20.0); - desc.add("ptMax", 1.0); - desc.add("ptMin", 0.3); - desc.add("resetHP", true); - desc.add("covarianceVersion", 0); - desc.add("covarianceSchema", 520); + desc.add("dzSigHP", 7.0)->setComment("to set HighPurity flag for pixel tracks"); + desc.add("dxySigHP", 20.0)->setComment("to set HighPurity flag for pixel tracks"); + desc.add("ptMax", 1.0)->setComment("max pT for pixel tracks - above this will use general tracks"); + desc.add("ptMin", 0.3)->setComment("min pT for pixel tracks"); + desc.add("resetHP", true) + ->setComment("pixel tracks do not have HP flag set. Use False if does not want to reset HP flag"); + desc.add("covarianceVersion", 0)->setComment("so far: 0 is Phase0, 1 is Phase1"); + desc.add("covarianceSchema", 520)->setComment("use less accurate schema - reduce size of collection"); descriptions.addWithDefaultLabel(desc); } diff --git a/PhysicsTools/PatAlgos/python/patTracksToPackedCandidates_cfi.py b/PhysicsTools/PatAlgos/python/patTracksToPackedCandidates_cfi.py deleted file mode 100644 index 8b502c99631f1..0000000000000 --- a/PhysicsTools/PatAlgos/python/patTracksToPackedCandidates_cfi.py +++ /dev/null @@ -1,16 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -patTracksToPackedCandidates = cms.EDProducer('PATTracksToPackedCandidates', - srcTracks = cms.InputTag('hiConformalPixelTracks'), - srcPrimaryVertices = cms.InputTag('offlineSlimmedPrimaryVertices'), - dzSigCut = cms.double(10), - dxySigCut = cms.double(25), - dzSigHP = cms.double(7), #to set HighPurity flag for pixel tracks - dxySigHP = cms.double(20), #to set HighPurity flag for pixel tracks - ptMax = cms.double(1), #max pT for pixel tracks - above this use general tracks instead - ptMin = cms.double(0.3), #min pT for pixel tracks - resetHP = cms.bool(True), #pixel tracks do not have HP flag set. Use False if does not want to reset HP flag - covarianceVersion = cms.int32(0), #so far: 0 is Phase0, 1 is Phase1 - covarianceSchema = cms.int32(520), #use less accurate schema - reduce size of collection - mightGet = cms.optional.untracked.vstring -) From eaafc669cfe93d96463ff1aefd7dba7fb62907d9 Mon Sep 17 00:00:00 2001 From: Cesar Bernardes Date: Tue, 7 Jul 2020 20:24:06 +0200 Subject: [PATCH 18/18] Shorten BS definition --- PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc b/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc index 98641353c5c82..9db915b894ce7 100644 --- a/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc +++ b/PhysicsTools/PatAlgos/plugins/PATTracksToPackedCandidates.cc @@ -117,8 +117,7 @@ void PATTracksToPackedCandidates::produce(edm::StreamID, edm::Event& iEvent, con bestvtx = vtx.position(); vtx_cov = vtx.covariance(); } else { - auto offlineBS = iEvent.getHandle(srcOfflineBeamSpot_); - reco::BeamSpot bs = *offlineBS; + const auto& bs = iEvent.get(srcOfflineBeamSpot_); bestvzError = bs.z0Error(); bestvtx = bs.position(); vtx_cov = bs.covariance3D();