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 "MagneticField/Engine/interface/MagneticField.h"
0021 #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
0022 #include "RecoParticleFlow/PFTracking/interface/PFDisplacedVertexCandidateFinder.h"
0023
0024 class PFDisplacedVertexCandidateProducer : public edm::stream::EDProducer<> {
0025 public:
0026 explicit PFDisplacedVertexCandidateProducer(const edm::ParameterSet&);
0027
0028 ~PFDisplacedVertexCandidateProducer() override;
0029
0030 void produce(edm::Event&, const edm::EventSetup&) override;
0031
0032 private:
0033
0034 edm::EDGetTokenT<reco::TrackCollection> inputTagTracks_;
0035
0036
0037 edm::EDGetTokenT<reco::VertexCollection> inputTagMainVertex_;
0038 edm::EDGetTokenT<reco::BeamSpot> inputTagBeamSpot_;
0039
0040 const edm::ESGetToken<MagneticField, IdealMagneticFieldRecord> magneticFieldToken_;
0041
0042
0043 bool verbose_;
0044
0045
0046 PFDisplacedVertexCandidateFinder pfDisplacedVertexCandidateFinder_;
0047 };
0048
0049 #include "FWCore/Framework/interface/MakerMacros.h"
0050 DEFINE_FWK_MODULE(PFDisplacedVertexCandidateProducer);
0051
0052 using namespace std;
0053 using namespace edm;
0054
0055 PFDisplacedVertexCandidateProducer::PFDisplacedVertexCandidateProducer(const edm::ParameterSet& iConfig)
0056 : magneticFieldToken_(esConsumes()) {
0057
0058 inputTagTracks_ = consumes<reco::TrackCollection>(iConfig.getParameter<InputTag>("trackCollection"));
0059
0060 inputTagMainVertex_ = consumes<reco::VertexCollection>(iConfig.getParameter<InputTag>("mainVertexLabel"));
0061
0062 inputTagBeamSpot_ = consumes<reco::BeamSpot>(iConfig.getParameter<InputTag>("offlineBeamSpotLabel"));
0063
0064 verbose_ = iConfig.getUntrackedParameter<bool>("verbose");
0065
0066 bool debug = iConfig.getUntrackedParameter<bool>("debug");
0067
0068
0069
0070
0071
0072 double dcaCut = iConfig.getParameter<double>("dcaCut");
0073
0074
0075
0076 double primaryVertexCut = iConfig.getParameter<double>("primaryVertexCut");
0077
0078
0079 double dcaPInnerHitCut = iConfig.getParameter<double>("dcaPInnerHitCut");
0080
0081 edm::ParameterSet ps_trk = iConfig.getParameter<edm::ParameterSet>("tracksSelectorParameters");
0082
0083
0084 produces<reco::PFDisplacedVertexCandidateCollection>();
0085
0086
0087 pfDisplacedVertexCandidateFinder_.setDebug(debug);
0088 pfDisplacedVertexCandidateFinder_.setParameters(dcaCut, primaryVertexCut, dcaPInnerHitCut, ps_trk);
0089 }
0090
0091 PFDisplacedVertexCandidateProducer::~PFDisplacedVertexCandidateProducer() {}
0092
0093 void PFDisplacedVertexCandidateProducer::produce(Event& iEvent, const EventSetup& iSetup) {
0094 LogDebug("PFDisplacedVertexCandidateProducer")
0095 << "START event: " << iEvent.id().event() << " in run " << iEvent.id().run() << endl;
0096
0097
0098 auto const& theMagField = &iSetup.getData(magneticFieldToken_);
0099
0100 Handle<reco::TrackCollection> trackCollection;
0101 iEvent.getByToken(inputTagTracks_, trackCollection);
0102
0103 Handle<reco::VertexCollection> mainVertexHandle;
0104 iEvent.getByToken(inputTagMainVertex_, mainVertexHandle);
0105
0106 Handle<reco::BeamSpot> beamSpotHandle;
0107 iEvent.getByToken(inputTagBeamSpot_, beamSpotHandle);
0108
0109 pfDisplacedVertexCandidateFinder_.setPrimaryVertex(mainVertexHandle, beamSpotHandle);
0110 pfDisplacedVertexCandidateFinder_.setInput(trackCollection, theMagField);
0111
0112
0113 pfDisplacedVertexCandidateFinder_.findDisplacedVertexCandidates();
0114
0115 if (verbose_) {
0116 ostringstream str;
0117 str << pfDisplacedVertexCandidateFinder_ << endl;
0118 cout << pfDisplacedVertexCandidateFinder_ << endl;
0119 LogInfo("PFDisplacedVertexCandidateProducer") << str.str() << endl;
0120 }
0121
0122 std::unique_ptr<reco::PFDisplacedVertexCandidateCollection> pOutputDisplacedVertexCandidateCollection(
0123 pfDisplacedVertexCandidateFinder_.transferVertexCandidates());
0124
0125 iEvent.put(std::move(pOutputDisplacedVertexCandidateCollection));
0126
0127 LogDebug("PFDisplacedVertexCandidateProducer")
0128 << "STOP event: " << iEvent.id().event() << " in run " << iEvent.id().run() << endl;
0129 }