File indexing completed on 2023-03-17 11:21:20
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #include "FWCore/Framework/interface/ESHandle.h"
0013 #include "FWCore/Framework/interface/Event.h"
0014 #include "FWCore/Framework/interface/EventSetup.h"
0015 #include "FWCore/Framework/interface/stream/EDProducer.h"
0016 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0017 #include "FWCore/ParameterSet/interface/FileInPath.h"
0018 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0019 #include "FWCore/Utilities/interface/Exception.h"
0020 #include "Geometry/CommonDetUnit/interface/GlobalTrackingGeometry.h"
0021 #include "Geometry/CommonDetUnit/interface/TrackingGeometry.h"
0022 #include "Geometry/Records/interface/GlobalTrackingGeometryRecord.h"
0023 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
0024 #include "MagneticField/Engine/interface/MagneticField.h"
0025 #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
0026 #include "RecoParticleFlow/PFTracking/interface/PFDisplacedVertexFinder.h"
0027
0028 class PFDisplacedVertexProducer : public edm::stream::EDProducer<> {
0029 public:
0030 explicit PFDisplacedVertexProducer(const edm::ParameterSet&);
0031
0032 ~PFDisplacedVertexProducer() override;
0033
0034 void produce(edm::Event&, const edm::EventSetup&) override;
0035
0036 private:
0037
0038
0039 const edm::EDGetTokenT<reco::PFDisplacedVertexCandidateCollection> inputTagVertexCandidates_;
0040
0041
0042
0043 const edm::EDGetTokenT<reco::VertexCollection> inputTagMainVertex_;
0044 const edm::EDGetTokenT<reco::BeamSpot> inputTagBeamSpot_;
0045
0046 const edm::ESGetToken<MagneticField, IdealMagneticFieldRecord> magFieldToken_;
0047 const edm::ESGetToken<GlobalTrackingGeometry, GlobalTrackingGeometryRecord> globTkGeomToken_;
0048 const edm::ESGetToken<TrackerTopology, TrackerTopologyRcd> tkerTopoToken_;
0049 const edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> tkerGeomToken_;
0050
0051
0052 bool verbose_;
0053
0054
0055 PFDisplacedVertexFinder pfDisplacedVertexFinder_;
0056 };
0057
0058 #include "FWCore/Framework/interface/MakerMacros.h"
0059 DEFINE_FWK_MODULE(PFDisplacedVertexProducer);
0060
0061 using namespace std;
0062 using namespace edm;
0063
0064 PFDisplacedVertexProducer::PFDisplacedVertexProducer(const edm::ParameterSet& iConfig)
0065 : inputTagVertexCandidates_(consumes<reco::PFDisplacedVertexCandidateCollection>(
0066 iConfig.getParameter<InputTag>("vertexCandidatesLabel"))),
0067 inputTagMainVertex_(consumes<reco::VertexCollection>(iConfig.getParameter<InputTag>("mainVertexLabel"))),
0068 inputTagBeamSpot_(consumes<reco::BeamSpot>(iConfig.getParameter<InputTag>("offlineBeamSpotLabel"))),
0069 magFieldToken_(esConsumes()),
0070 globTkGeomToken_(esConsumes()),
0071 tkerTopoToken_(esConsumes()),
0072 tkerGeomToken_(esConsumes()) {
0073
0074
0075 verbose_ = iConfig.getUntrackedParameter<bool>("verbose");
0076
0077 bool debug = iConfig.getUntrackedParameter<bool>("debug");
0078
0079
0080
0081
0082
0083 double transvSize = iConfig.getParameter<double>("transvSize");
0084
0085
0086
0087 double longSize = iConfig.getParameter<double>("longSize");
0088
0089
0090
0091 double primaryVertexCut = iConfig.getParameter<double>("primaryVertexCut");
0092
0093
0094
0095
0096
0097 double tobCut = iConfig.getParameter<double>("tobCut");
0098
0099
0100
0101 double tecCut = iConfig.getParameter<double>("tecCut");
0102
0103
0104
0105 double minAdaptWeight = iConfig.getParameter<double>("minAdaptWeight");
0106
0107 bool switchOff2TrackVertex = iConfig.getUntrackedParameter<bool>("switchOff2TrackVertex");
0108
0109 edm::ParameterSet ps_trk = iConfig.getParameter<edm::ParameterSet>("tracksSelectorParameters");
0110 edm::ParameterSet ps_vtx = iConfig.getParameter<edm::ParameterSet>("vertexIdentifierParameters");
0111 edm::ParameterSet ps_avf = iConfig.getParameter<edm::ParameterSet>("avfParameters");
0112
0113 produces<reco::PFDisplacedVertexCollection>();
0114
0115
0116 pfDisplacedVertexFinder_.setDebug(debug);
0117 pfDisplacedVertexFinder_.setParameters(
0118 transvSize, longSize, primaryVertexCut, tobCut, tecCut, minAdaptWeight, switchOff2TrackVertex);
0119 pfDisplacedVertexFinder_.setAVFParameters(ps_avf);
0120 pfDisplacedVertexFinder_.setTracksSelector(ps_trk);
0121 pfDisplacedVertexFinder_.setVertexIdentifier(ps_vtx);
0122 }
0123
0124 PFDisplacedVertexProducer::~PFDisplacedVertexProducer() {}
0125
0126 void PFDisplacedVertexProducer::produce(Event& iEvent, const EventSetup& iSetup) {
0127 LogDebug("PFDisplacedVertexProducer") << "START event: " << iEvent.id().event() << " in run " << iEvent.id().run();
0128
0129
0130
0131 auto const& theMagField = &iSetup.getData(magFieldToken_);
0132 auto const& globTkGeom = &iSetup.getData(globTkGeomToken_);
0133 auto const& tkerTopo = &iSetup.getData(tkerTopoToken_);
0134 auto const& tkerGeom = &iSetup.getData(tkerGeomToken_);
0135
0136 auto const& vertexCandidates = iEvent.getHandle(inputTagVertexCandidates_);
0137 auto const& mainVertexHandle = iEvent.getHandle(inputTagMainVertex_);
0138 auto const& beamSpotHandle = iEvent.getHandle(inputTagBeamSpot_);
0139
0140
0141 pfDisplacedVertexFinder_.setEdmParameters(theMagField, globTkGeom, tkerTopo, tkerGeom);
0142 pfDisplacedVertexFinder_.setPrimaryVertex(mainVertexHandle, beamSpotHandle);
0143 pfDisplacedVertexFinder_.setInput(vertexCandidates);
0144
0145
0146 pfDisplacedVertexFinder_.findDisplacedVertices();
0147
0148 if (verbose_) {
0149 ostringstream str;
0150 str << pfDisplacedVertexFinder_;
0151 edm::LogInfo("PFDisplacedVertexProducer") << str.str();
0152 }
0153
0154 std::unique_ptr<reco::PFDisplacedVertexCollection> pOutputDisplacedVertexCollection(
0155 pfDisplacedVertexFinder_.transferDisplacedVertices());
0156
0157 iEvent.put(std::move(pOutputDisplacedVertexCollection));
0158
0159 LogDebug("PFDisplacedVertexProducer") << "STOP event: " << iEvent.id().event() << " in run " << iEvent.id().run();
0160 }