CMS 3D CMS Logo

PFDisplacedVertexProducer.cc
Go to the documentation of this file.
2 
4 
8 
10 
13 
18 
21 
22 #include <set>
23 
24 using namespace std;
25 using namespace edm;
26 
28 
29  // --- Setup input collection names --- //
30 
31  inputTagVertexCandidates_= consumes<reco::PFDisplacedVertexCandidateCollection>(iConfig.getParameter<InputTag>("vertexCandidatesLabel"));
32 
33  inputTagMainVertex_ = consumes<reco::VertexCollection>(iConfig.getParameter<InputTag>("mainVertexLabel"));
34 
35 
36  inputTagBeamSpot_ =consumes<reco::BeamSpot> (iConfig.getParameter<InputTag>("offlineBeamSpotLabel"));
37 
38  verbose_ =
39  iConfig.getUntrackedParameter<bool>("verbose");
40 
41  bool debug =
42  iConfig.getUntrackedParameter<bool>("debug");
43 
44  // ------ Algo Parameters ------ //
45 
46  // Maximal transverse distance between two minimal
47  // approach points to be used together
48  double transvSize
49  = iConfig.getParameter< double >("transvSize");
50 
51  // Maximal longitudinal distance between two minimal
52  // approach points to be used together
53  double longSize
54  = iConfig.getParameter< double >("longSize");
55 
56  // Minimal radius below which we do not reconstruct interactions
57  // Typically the position of the first Pixel layer
58  double primaryVertexCut
59  = iConfig.getParameter< double >("primaryVertexCut");
60 
61  // Radius at which no secondary tracks are availables
62  // in the barrel.For the moment we exclude the TOB barrel
63  // since 5-th track step starts the latest at first TOB
64  // layer.
65  double tobCut
66  = iConfig.getParameter< double >("tobCut");
67 
68  // Radius at which no secondary tracks are availables
69  // in the endcaps.For the moment we exclude the TEC wheel.
70  double tecCut
71  = iConfig.getParameter< double >("tecCut");
72 
73  // The minimal accepted weight for the tracks calculated in the
74  // adaptive vertex fitter to be associated to the displaced vertex
75  double minAdaptWeight
76  = iConfig.getParameter< double >("minAdaptWeight");
77 
79  = iConfig.getUntrackedParameter< bool >("switchOff2TrackVertex");
80 
81  edm::ParameterSet ps_trk = iConfig.getParameter<edm::ParameterSet>("tracksSelectorParameters");
82  edm::ParameterSet ps_vtx = iConfig.getParameter<edm::ParameterSet>("vertexIdentifierParameters");
83  edm::ParameterSet ps_avf = iConfig.getParameter<edm::ParameterSet>("avfParameters");
84 
85  produces<reco::PFDisplacedVertexCollection>();
86 
87  // Vertex Finder parameters -----------------------------------
88  pfDisplacedVertexFinder_.setDebug(debug);
89  pfDisplacedVertexFinder_.setParameters(transvSize, longSize,
90  primaryVertexCut, tobCut,
91  tecCut, minAdaptWeight, switchOff2TrackVertex);
92  pfDisplacedVertexFinder_.setAVFParameters(ps_avf);
93  pfDisplacedVertexFinder_.setTracksSelector(ps_trk);
94  pfDisplacedVertexFinder_.setVertexIdentifier(ps_vtx);
95 
96 }
97 
98 
99 
101 
102 
103 
104 void
106  const EventSetup& iSetup) {
107 
108  LogDebug("PFDisplacedVertexProducer")<<"START event: "<<iEvent.id().event()
109  <<" in run "<<iEvent.id().run()<<endl;
110 
111  // Prepare useful information for the Finder
112 
113  ESHandle<MagneticField> magField;
114  iSetup.get<IdealMagneticFieldRecord>().get(magField);
115  const MagneticField* theMagField = magField.product();
116 
117  ESHandle<GlobalTrackingGeometry> globTkGeomHandle;
118  iSetup.get<GlobalTrackingGeometryRecord>().get(globTkGeomHandle);
119 
120  ESHandle<TrackerTopology> tkerTopoHandle;
121  iSetup.get<TrackerTopologyRcd>().get(tkerTopoHandle);
122 
123  ESHandle<TrackerGeometry> tkerGeomHandle;
124  iSetup.get<TrackerDigiGeometryRecord>().get(tkerGeomHandle);
125 
127  iEvent.getByToken(inputTagVertexCandidates_, vertexCandidates);
128 
129  Handle< reco::VertexCollection > mainVertexHandle;
130  iEvent.getByToken(inputTagMainVertex_, mainVertexHandle);
131 
132  Handle< reco::BeamSpot > beamSpotHandle;
133  iEvent.getByToken(inputTagBeamSpot_, beamSpotHandle);
134 
135  // Fill useful event information for the Finder
136  pfDisplacedVertexFinder_.setEdmParameters(theMagField, globTkGeomHandle, tkerTopoHandle.product(), tkerGeomHandle.product());
137  pfDisplacedVertexFinder_.setPrimaryVertex(mainVertexHandle, beamSpotHandle);
138  pfDisplacedVertexFinder_.setInput(vertexCandidates);
139 
140  // Run the finder
141  pfDisplacedVertexFinder_.findDisplacedVertices();
142 
143 
144  if(verbose_) {
145  ostringstream str;
146  //str<<pfDisplacedVertexFinder_<<endl;
147  cout << pfDisplacedVertexFinder_<<endl;
148  LogInfo("PFDisplacedVertexProducer") << str.str()<<endl;
149  }
150 
151 
152  std::unique_ptr<reco::PFDisplacedVertexCollection>
153  pOutputDisplacedVertexCollection(
154  pfDisplacedVertexFinder_.transferDisplacedVertices() );
155 
156 
157 
158  iEvent.put(std::move(pOutputDisplacedVertexCollection));
159 
160  LogDebug("PFDisplacedVertexProducer")<<"STOP event: "<<iEvent.id().event()
161  <<" in run "<<iEvent.id().run()<<endl;
162 
163 }
#define LogDebug(id)
RunNumber_t run() const
Definition: EventID.h:39
T getParameter(std::string const &) const
EventNumber_t event() const
Definition: EventID.h:41
T getUntrackedParameter(std::string const &, T const &) const
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:137
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:579
PFDisplacedVertexProducer(const edm::ParameterSet &)
int iEvent
Definition: GenABIO.cc:230
#define debug
Definition: HDRShower.cc:19
void produce(edm::Event &, const edm::EventSetup &) override
edm::EventID id() const
Definition: EventBase.h:60
HLT enums.
T get() const
Definition: EventSetup.h:68
#define str(s)
T const * product() const
Definition: ESHandle.h:84
def move(src, dest)
Definition: eostools.py:511