CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Types | Public Member Functions | Private Member Functions | Private Attributes | Friends
PFDisplacedVertexFinder Class Reference

#include <PFDisplacedVertexFinder.h>

Public Types

enum  FitterType { F_NOTDEFINED, F_DONOTREFIT, F_KALMAN, F_ADAPTIVE }
 Fitter Type. More...
 
typedef
reco::PFDisplacedVertexCollection::iterator 
IDV
 
typedef
reco::PFDisplacedVertexCandidateCollection::iterator 
IDVC
 
typedef
reco::PFDisplacedVertexSeedCollection::iterator 
IDVS
 
typedef std::set
< reco::TrackBaseRef >
::iterator 
IEset
 -----— Useful Types -----— /// More...
 
typedef std::pair
< PFTrackHitInfo,
PFTrackHitInfo
PFTrackHitFullInfo
 
typedef std::pair< unsigned
int, unsigned int > 
PFTrackHitInfo
 

Public Member Functions

const std::auto_ptr
< reco::PFDisplacedVertexCollection > & 
displacedVertices () const
 
void findDisplacedVertices ()
 -----— Main function which find vertices -----— /// More...
 
 PFDisplacedVertexFinder ()
 
void setAVFParameters (const edm::ParameterSet &ps)
 
void setDebug (bool debug)
 Sets debug printout flag. More...
 
void setEdmParameters (const MagneticField *magField, edm::ESHandle< GlobalTrackingGeometry > globTkGeomHandle, edm::ESHandle< TrackerGeometry > tkerGeomHandle)
 Sets parameters for track extrapolation and hits study. More...
 
void setInput (const edm::Handle< reco::PFDisplacedVertexCandidateCollection > &)
 Set input collections of tracks. More...
 
void setParameters (double transvSize, double longSize, double primaryVertexCut, double tobCut, double tecCut, double minAdaptWeight, bool switchOff2TrackVertex)
 --—— Set different algo parameters --—— /// More...
 
void setPrimaryVertex (edm::Handle< reco::VertexCollection > mainVertexHandle, edm::Handle< reco::BeamSpot > beamSpotHandle)
 
void setTracksSelector (const edm::ParameterSet &ps)
 
void setVertexIdentifier (const edm::ParameterSet &ps)
 
std::auto_ptr
< reco::PFDisplacedVertexCollection
transferDisplacedVertices ()
 
 ~PFDisplacedVertexFinder ()
 

Private Member Functions

unsigned commonTracks (const reco::PFDisplacedVertex &, const reco::PFDisplacedVertex &) const
 
void findSeedsFromCandidate (reco::PFDisplacedVertexCandidate &, reco::PFDisplacedVertexSeedCollection &)
 --—— Different steps of the finder algorithm --—— /// More...
 
bool fitVertexFromSeed (reco::PFDisplacedVertexSeed &, reco::PFDisplacedVertex &)
 Fit one by one the vertex points with associated tracks to get displaced vertices. More...
 
double getLongDiff (const GlobalPoint &, const GlobalPoint &) const
 
double getLongProj (const GlobalPoint &, const GlobalVector &) const
 
double getTransvDiff (const GlobalPoint &, const GlobalPoint &) const
 
reco::PFDisplacedVertex::VertexTrackType getVertexTrackType (PFTrackHitFullInfo &) const
 
bool isCloseTo (const reco::PFDisplacedVertexSeed &, const reco::PFDisplacedVertexSeed &) const
 -----— Tools -----— /// More...
 
void mergeSeeds (reco::PFDisplacedVertexSeedCollection &, std::vector< bool > &bLocked)
 Sometimes two vertex candidates can be quite close and coming from the same vertex. More...
 
bool rejectAndLabelVertex (reco::PFDisplacedVertex &dv)
 
void selectAndLabelVertices (reco::PFDisplacedVertexCollection &, std::vector< bool > &)
 Remove potentially fakes displaced vertices. More...
 

Private Attributes

bool debug_
 If true, debug printouts activated. More...
 
std::auto_ptr
< reco::PFDisplacedVertexCandidateCollection
displacedVertexCandidates_
 -----— Members -----— /// More...
 
std::auto_ptr
< reco::PFDisplacedVertexCollection
displacedVertices_
 
edm::ESHandle
< GlobalTrackingGeometry
globTkGeomHandle_
 Tracker geometry for discerning hit positions. More...
 
PFDisplacedVertexHelper helper_
 
PFCheckHitPattern hitPattern_
 
double longSize_
 
const MagneticFieldmagField_
 to be able to extrapolate tracks f More...
 
double minAdaptWeight_
 
double primaryVertexCut_
 
double ratio_
 
double sigmacut_
 Adaptive Vertex Fitter parameters. More...
 
bool switchOff2TrackVertex_
 
double t_ini_
 
double tecCut_
 
edm::ESHandle< TrackerGeometrytkerGeomHandle_
 doc? More...
 
double tobCut_
 
double transvSize_
 --—— Parameters --—— /// More...
 

Friends

std::ostream & operator<< (std::ostream &, const PFDisplacedVertexFinder &)
 

Detailed Description

Definition at line 32 of file PFDisplacedVertexFinder.h.

Member Typedef Documentation

typedef reco::PFDisplacedVertexCollection::iterator PFDisplacedVertexFinder::IDV

Definition at line 45 of file PFDisplacedVertexFinder.h.

typedef reco::PFDisplacedVertexCandidateCollection::iterator PFDisplacedVertexFinder::IDVC

Definition at line 43 of file PFDisplacedVertexFinder.h.

typedef reco::PFDisplacedVertexSeedCollection::iterator PFDisplacedVertexFinder::IDVS

Definition at line 44 of file PFDisplacedVertexFinder.h.

typedef std::set< reco::TrackBaseRef >::iterator PFDisplacedVertexFinder::IEset

-----— Useful Types -----— ///

Definition at line 42 of file PFDisplacedVertexFinder.h.

Definition at line 48 of file PFDisplacedVertexFinder.h.

typedef std::pair<unsigned int, unsigned int> PFDisplacedVertexFinder::PFTrackHitInfo

Definition at line 47 of file PFDisplacedVertexFinder.h.

Member Enumeration Documentation

Constructor & Destructor Documentation

PFDisplacedVertexFinder::PFDisplacedVertexFinder ( )

Definition at line 27 of file PFDisplacedVertexFinder.cc.

27  :
30  transvSize_(0.0),
31  longSize_(0.0),
32  primaryVertexCut_(0.0),
33  tobCut_(0.0),
34  tecCut_(0.0),
35  minAdaptWeight_(2.0),
36  debug_(false) {}
std::vector< PFDisplacedVertex > PFDisplacedVertexCollection
collection of PFDisplacedVertex objects
std::vector< PFDisplacedVertexCandidate > PFDisplacedVertexCandidateCollection
collection of PFDisplacedVertexCandidate objects
std::auto_ptr< reco::PFDisplacedVertexCollection > displacedVertices_
bool debug_
If true, debug printouts activated.
std::auto_ptr< reco::PFDisplacedVertexCandidateCollection > displacedVertexCandidates_
-----— Members -----— ///
double transvSize_
--—— Parameters --—— ///
PFDisplacedVertexFinder::~PFDisplacedVertexFinder ( )

Definition at line 39 of file PFDisplacedVertexFinder.cc.

39 {}

Member Function Documentation

unsigned PFDisplacedVertexFinder::commonTracks ( const reco::PFDisplacedVertex v1,
const reco::PFDisplacedVertex v2 
) const
private

Definition at line 777 of file PFDisplacedVertexFinder.cc.

References edm::RefToBase< T >::key(), reco::Vertex::originalTrack(), and reco::Vertex::refittedTracks().

Referenced by selectAndLabelVertices().

777  {
778 
779  vector<Track> vt1 = v1.refittedTracks();
780  vector<Track> vt2 = v2.refittedTracks();
781 
782  unsigned commonTracks = 0;
783 
784  for ( unsigned il1 = 0; il1 < vt1.size(); il1++){
785  unsigned il1_idx = v1.originalTrack(vt1[il1]).key();
786 
787  for ( unsigned il2 = 0; il2 < vt2.size(); il2++)
788  if (il1_idx == v2.originalTrack(vt2[il2]).key()) {commonTracks++; break;}
789 
790  }
791 
792  return commonTracks;
793 
794 }
TrackBaseRef originalTrack(const Track &refTrack) const
Definition: Vertex.cc:86
const std::vector< Track > & refittedTracks() const
Returns the container of refitted tracks.
Definition: Vertex.h:149
unsigned commonTracks(const reco::PFDisplacedVertex &, const reco::PFDisplacedVertex &) const
size_t key() const
Definition: RefToBase.h:241
const std::auto_ptr< reco::PFDisplacedVertexCollection >& PFDisplacedVertexFinder::displacedVertices ( ) const
inline

Definition at line 112 of file PFDisplacedVertexFinder.h.

References displacedVertices_.

Referenced by operator<<().

112 {return displacedVertices_;}
std::auto_ptr< reco::PFDisplacedVertexCollection > displacedVertices_
void PFDisplacedVertexFinder::findDisplacedVertices ( )

-----— Main function which find vertices -----— ///

Definition at line 65 of file PFDisplacedVertexFinder.cc.

References gather_cfg::cout, debug_, displacedVertexCandidates_, displacedVertices_, findSeedsFromCandidate(), fitVertexFromSeed(), i, mergeSeeds(), and selectAndLabelVertices().

65  {
66 
67  if (debug_) cout << "========= Start Find Displaced Vertices =========" << endl;
68 
69  // The vertexCandidates have not been passed to the event
70  // So they need to be cleared is they are not empty
71  if( displacedVertices_.get() ) displacedVertices_->clear();
72  else
74 
75 
76  // Prepare the collections
77  PFDisplacedVertexSeedCollection tempDisplacedVertexSeeds;
78  tempDisplacedVertexSeeds.reserve(4*displacedVertexCandidates_->size());
79  PFDisplacedVertexCollection tempDisplacedVertices;
80  tempDisplacedVertices.reserve(4*displacedVertexCandidates_->size());
81 
82  if (debug_)
83  cout << "1) Parsing displacedVertexCandidates into displacedVertexSeeds" << endl;
84 
85  // 1) Parsing displacedVertexCandidates into displacedVertexSeeds which would
86  // be later used for vertex fitting
87 
88  int i = -1;
89 
90  for(IDVC idvc = displacedVertexCandidates_->begin();
91  idvc != displacedVertexCandidates_->end(); idvc++) {
92 
93  i++;
94  if (debug_) {
95  cout << "Analyse Vertex Candidate " << i << endl;
96  }
97 
98  findSeedsFromCandidate(*idvc, tempDisplacedVertexSeeds);
99 
100  }
101 
102  if (debug_) cout << "2) Merging Vertex Seeds" << endl;
103 
104  // 2) Some displacedVertexSeeds coming from different displacedVertexCandidates
105  // may be closed enough to be merged together. bLocked is an array which keeps the
106  // information about the seeds which are desabled.
107  vector<bool> bLockedSeeds;
108  bLockedSeeds.resize(tempDisplacedVertexSeeds.size());
109  mergeSeeds(tempDisplacedVertexSeeds, bLockedSeeds);
110 
111  if (debug_) cout << "3) Fitting Vertices From Seeds" << endl;
112 
113  // 3) Fit displacedVertices from displacedVertexSeeds
114  for(unsigned idv = 0; idv < tempDisplacedVertexSeeds.size(); idv++){
115 
116  if (!tempDisplacedVertexSeeds[idv].isEmpty() && !bLockedSeeds[idv]) {
117  PFDisplacedVertex displacedVertex;
118  bLockedSeeds[idv] = fitVertexFromSeed(tempDisplacedVertexSeeds[idv], displacedVertex);
119  if (!bLockedSeeds[idv]) tempDisplacedVertices.push_back(displacedVertex);
120  }
121  }
122 
123  if (debug_) cout << "4) Rejecting Bad Vertices and label them" << endl;
124 
125  // 4) Reject displaced vertices which may be considered as fakes
126  vector<bool> bLocked;
127  bLocked.resize(tempDisplacedVertices.size());
128  selectAndLabelVertices(tempDisplacedVertices, bLocked);
129 
130  if (debug_) cout << "5) Fill the Displaced Vertices" << endl;
131 
132  // 5) Fill the displacedVertex_ which would be transfered to the producer
133  displacedVertices_->reserve(tempDisplacedVertices.size());
134 
135  for(unsigned idv = 0; idv < tempDisplacedVertices.size(); idv++)
136  if (!bLocked[idv]) displacedVertices_->push_back(tempDisplacedVertices[idv]);
137 
138  if (debug_) cout << "========= End Find Displaced Vertices =========" << endl;
139 
140 
141 }
int i
Definition: DBlmapReader.cc:9
std::vector< PFDisplacedVertex > PFDisplacedVertexCollection
collection of PFDisplacedVertex objects
std::auto_ptr< reco::PFDisplacedVertexCollection > displacedVertices_
bool debug_
If true, debug printouts activated.
bool fitVertexFromSeed(reco::PFDisplacedVertexSeed &, reco::PFDisplacedVertex &)
Fit one by one the vertex points with associated tracks to get displaced vertices.
void mergeSeeds(reco::PFDisplacedVertexSeedCollection &, std::vector< bool > &bLocked)
Sometimes two vertex candidates can be quite close and coming from the same vertex.
std::auto_ptr< reco::PFDisplacedVertexCandidateCollection > displacedVertexCandidates_
-----— Members -----— ///
std::vector< PFDisplacedVertexSeed > PFDisplacedVertexSeedCollection
collection of PFDisplacedVertexSeed objects
void selectAndLabelVertices(reco::PFDisplacedVertexCollection &, std::vector< bool > &)
Remove potentially fakes displaced vertices.
reco::PFDisplacedVertexCandidateCollection::iterator IDVC
void findSeedsFromCandidate(reco::PFDisplacedVertexCandidate &, reco::PFDisplacedVertexSeedCollection &)
--—— Different steps of the finder algorithm --—— ///
Block of elements.
tuple cout
Definition: gather_cfg.py:121
void PFDisplacedVertexFinder::findSeedsFromCandidate ( reco::PFDisplacedVertexCandidate vertexCandidate,
reco::PFDisplacedVertexSeedCollection tempDisplacedVertexSeeds 
)
private

--—— Different steps of the finder algorithm --—— ///

Analyse a vertex candidate and select potential vertex point(s)

Definition at line 147 of file PFDisplacedVertexFinder.cc.

References gather_cfg::cout, reco::PFDisplacedVertexCandidate::dcaPoint(), debug_, getLongDiff(), getTransvDiff(), longSize_, reco::PFDisplacedVertexCandidate::r2Map(), mathSSE::sqrt(), transvSize_, reco::PFDisplacedVertexCandidate::tref(), and PV3DBase< T, PVType, FrameType >::x().

Referenced by findDisplacedVertices().

147  {
148 
149  const PFDisplacedVertexCandidate::DistMap r2Map = vertexCandidate.r2Map();
150  bool bNeedNewCandidate = false;
151 
152  tempDisplacedVertexSeeds.push_back( PFDisplacedVertexSeed() );
153 
154  IDVS idvc_current;
155 
156  for (PFDisplacedVertexCandidate::DistMap::const_iterator imap = r2Map.begin();
157  imap != r2Map.end(); imap++){
158 
159  unsigned ie1 = (*imap).second.first;
160  unsigned ie2 = (*imap).second.second;
161 
162  if (debug_) cout << "ie1 = " << ie1 << " ie2 = " << ie2 << " radius = " << sqrt((*imap).first) << endl;
163 
164  GlobalPoint dcaPoint = vertexCandidate.dcaPoint(ie1, ie2);
165  if (fabs(dcaPoint.x()) > 1e9) continue;
166 
167  bNeedNewCandidate = true;
168  for (idvc_current = tempDisplacedVertexSeeds.begin(); idvc_current != tempDisplacedVertexSeeds.end(); idvc_current++){
169  if ((*idvc_current).isEmpty()) {
170  bNeedNewCandidate = false;
171  break;
172  }
173  const GlobalPoint vertexPoint = (*idvc_current).seedPoint();
174  double Delta_Long = getLongDiff(vertexPoint, dcaPoint);
175  double Delta_Transv = getTransvDiff(vertexPoint, dcaPoint);
176  if (Delta_Long > longSize_) continue;
177  if (Delta_Transv > transvSize_) continue;
178  bNeedNewCandidate = false;
179  break;
180  }
181  if (bNeedNewCandidate) {
182  if (debug_) cout << "create new displaced vertex" << endl;
183  tempDisplacedVertexSeeds.push_back( PFDisplacedVertexSeed() );
184  idvc_current = tempDisplacedVertexSeeds.end();
185  idvc_current--;
186  bNeedNewCandidate = false;
187  }
188 
189 
190 
191  (*idvc_current).updateSeedPoint(dcaPoint, vertexCandidate.tref(ie1), vertexCandidate.tref(ie2));
192 
193 
194 
195  }
196 
197 
198 }
double getTransvDiff(const GlobalPoint &, const GlobalPoint &) const
reco::PFDisplacedVertexSeedCollection::iterator IDVS
std::map< float, std::pair< int, int > > DistMap
bool debug_
If true, debug printouts activated.
const TrackBaseRef & tref(unsigned ie) const
const GlobalPoint dcaPoint(unsigned ie1, unsigned ie2) const
T sqrt(T t)
Definition: SSEVec.h:48
DistMap r2Map() const
--—— Provide useful information --—— ///
double transvSize_
--—— Parameters --—— ///
tuple cout
Definition: gather_cfg.py:121
double getLongDiff(const GlobalPoint &, const GlobalPoint &) const
T x() const
Definition: PV3DBase.h:62
bool PFDisplacedVertexFinder::fitVertexFromSeed ( reco::PFDisplacedVertexSeed displacedVertexSeed,
reco::PFDisplacedVertex displacedVertex 
)
private

Fit one by one the vertex points with associated tracks to get displaced vertices.

This prefit procedure allow to reduce the Warning rate from Adaptive Vertex fitter It reject also many fake tracks

Definition at line 235 of file PFDisplacedVertexFinder.cc.

References reco::PFDisplacedVertex::addElement(), PFCheckHitPattern::analyze(), reco::PFDisplacedVertex::calcKinematics(), reco::Vertex::chi2(), reco::TrackBase::cosmics, gather_cfg::cout, reco::TrackBase::ctf, debug_, reco::TrackBase::detachedTripletStep, reco::PFDisplacedVertexSeed::Dump(), reco::PFDisplacedVertexSeed::elements(), cppFunctionSkipper::exception, F_ADAPTIVE, F_DONOTREFIT, F_KALMAN, F_NOTDEFINED, getVertexTrackType(), globTkGeomHandle_, helper_, hitPattern_, i, reco::TrackBase::initialStep, PFDisplacedVertexHelper::isTrackSelected(), TransientVertex::isValid(), reco::TrackBase::lowPtTripletStep, magField_, minAdaptWeight_, reco::TrackBase::mixedTripletStep, reco::Vertex::ndof(), chain::pattern, reco::TrackBase::pixelLessStep, reco::TrackBase::pixelPairStep, reco::Vertex::position(), TransientVertex::position(), PFDisplacedVertexHelper::primaryVertex(), primaryVertexCut_, ratio_, TransientVertex::refittedTrack(), reco::Vertex::removeTracks(), rho, reco::TrackBase::rs, reco::PFDisplacedVertexSeed::seedPoint(), reco::PFDisplacedVertex::setPrimaryDirection(), sigmacut_, mathSSE::sqrt(), switchOff2TrackVertex_, t_ini_, tecCut_, tkerGeomHandle_, tobCut_, TransientVertex::totalChiSquared(), reco::TransientTrack::track(), TransientVertex::trackWeight(), reco::TrackBase::undefAlgorithm, KalmanVertexFitter::vertex(), AdaptiveVertexFitter::vertex(), histoStyle::weight, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), z, and PV3DBase< T, PVType, FrameType >::z().

Referenced by findDisplacedVertices().

235  {
236 
237 
238  if (debug_) cout << "== Start vertexing procedure ==" << endl;
239 
240 
241  // ---- Prepare transient track list ----
242 
243  set < TrackBaseRef, PFDisplacedVertexSeed::Compare > tracksToFit = displacedVertexSeed.elements();
244  GlobalPoint seedPoint = displacedVertexSeed.seedPoint();
245 
246  vector<TransientTrack> transTracks;
247  vector<TransientTrack> transTracksRaw;
248  vector<TrackBaseRef> transTracksRef;
249  vector<TrackBaseRef> transTracksRefRaw;
250 
251  transTracks.reserve(tracksToFit.size());
252  transTracksRaw.reserve(tracksToFit.size());
253  transTracksRef.reserve(tracksToFit.size());
254  transTracksRefRaw.reserve(tracksToFit.size());
255 
256 
257 
258  TransientVertex theVertexAdaptiveRaw;
259  TransientVertex theRecoVertex;
260 
261 
262  // ---- 1) Clean for potentially poor seeds ------- //
263  // --------------------------------------------- //
264 
265  if (tracksToFit.size() < 2) {
266  if (debug_) cout << "Only one to Fit Track" << endl;
267  return true;
268  }
269 
270  double rho = sqrt(seedPoint.x()*seedPoint.x()+seedPoint.y()*seedPoint.y());
271  double z = seedPoint.z();
272 
273  if (rho > tobCut_ || fabs(z) > tecCut_) {
274  if (debug_) cout << "Seed Point out of the tracker rho = " << rho << " z = "<< z << " nTracks = " << tracksToFit.size() << endl;
275  return true;
276  }
277 
278  if (debug_) displacedVertexSeed.Dump();
279 
280  int nStep45 = 0;
281  int nNotIterative = 0;
282 
283  // Fill vectors of TransientTracks and TrackRefs after applying preselection cuts.
284  for(IEset ie = tracksToFit.begin(); ie != tracksToFit.end(); ie++){
285  TransientTrack tmpTk( *((*ie).get()), magField_, globTkGeomHandle_);
286  transTracksRaw.push_back( tmpTk );
287  transTracksRefRaw.push_back( *ie );
288  switch((*ie)->algo()) {
291  case reco::TrackBase::rs:
293  nNotIterative++;
294  break;
299  break;
302  nStep45++;
303  break;
304  default:
305  nNotIterative++;
306  nStep45++; // why this should be increased for these cases?
307  break;
308  };
309 
310  }
311 
312  if (rho > 25 && nStep45 + nNotIterative < 1){
313  if (debug_) cout << "Seed point at rho > 25 cm but no step 4-5 tracks" << endl;
314  return true;
315  }
316 
317  // ----------------------------------------------- //
318  // ---- PRESELECT GOOD TRACKS FOR FINAL VERTEX --- //
319  // ----------------------------------------------- //
320 
321 
322 
323  // 1)If only two track are found do not prefit
324 
325 
326  if ( transTracksRaw.size() == 2 ){
327 
328  if (debug_) cout << "No raw fit done" << endl;
330  if (debug_)
331  cout << "Due to probably high pile-up conditions 2 track vertices switched off" << endl;
332  return true;
333 
334  }
335  GlobalError globalError;
336 
337  theVertexAdaptiveRaw = TransientVertex(seedPoint, globalError, transTracksRaw, 1.);
338 
339 
340 
341  } else {
342 
343 
344 
345  if (debug_) cout << "Raw fit done." << endl;
346 
352 
355 
356 
357  if ( transTracksRaw.size() < 1000 && transTracksRaw.size() > 3){
358 
359  if (debug_) cout << "First test with KFT" << endl;
360 
361  KalmanVertexFitter theKalmanFitter(true);
362  theVertexAdaptiveRaw = theKalmanFitter.vertex(transTracksRaw, seedPoint);
363 
364  if( !theVertexAdaptiveRaw.isValid() || theVertexAdaptiveRaw.totalChiSquared() < 0. ) {
365  if(debug_) cout << "Prefit failed : valid? " << theVertexAdaptiveRaw.isValid()
366  << " totalChi2 = " << theVertexAdaptiveRaw.totalChiSquared() << endl;
367  return true;
368  }
369 
370  if (debug_) cout << "We use KFT instead of seed point to set up a point for AVF "
371  << " x = " << theVertexAdaptiveRaw.position().x()
372  << " y = " << theVertexAdaptiveRaw.position().y()
373  << " z = " << theVertexAdaptiveRaw.position().z()
374  << endl;
375 
376  // To save time: reject the Displaced vertex if it is too close to the beam pipe.
377  // Frequently it is very big vertices, with some dosens of tracks
378 
379  Vertex vtx = theVertexAdaptiveRaw;
380  rho = vtx.position().rho();
381 
382  // cout << "primary vertex cut = " << primaryVertexCut_ << endl;
383 
384  if (rho < primaryVertexCut_ || rho > 100) {
385  if (debug_) cout << "KFT Vertex geometrically rejected with tracks #rho = " << rho << endl;
386  return true;
387  }
388 
389  // cout << "primary vertex cut = " << primaryVertexCut_ << " rho = " << rho << endl;
390 
391  theVertexAdaptiveRaw = theAdaptiveFitterRaw.vertex(transTracksRaw, theVertexAdaptiveRaw.position());
392 
393 
394  } else {
395 
396 
397  theVertexAdaptiveRaw = theAdaptiveFitterRaw.vertex(transTracksRaw, seedPoint);
398 
399  }
400 
401  if( !theVertexAdaptiveRaw.isValid() || theVertexAdaptiveRaw.totalChiSquared() < 0. ) {
402  if(debug_) cout << "Fit failed : valid? " << theVertexAdaptiveRaw.isValid()
403  << " totalChi2 = " << theVertexAdaptiveRaw.totalChiSquared() << endl;
404  return true;
405  }
406 
407  // To save time: reject the Displaced vertex if it is too close to the beam pipe.
408  // Frequently it is very big vertices, with some dosens of tracks
409 
410  Vertex vtx = theVertexAdaptiveRaw;
411  rho = vtx.position().rho();
412 
413  if (rho < primaryVertexCut_) {
414  if (debug_) cout << "Vertex " << " geometrically rejected with " << transTracksRaw.size() << " tracks #rho = " << rho << endl;
415  return true;
416  }
417 
418 
419  }
420 
421 
422 
423  // ---- Remove tracks with small weight or
424  // big first (last) hit_to_vertex distance
425  // and then refit ---- //
426 
427 
428 
429  for (unsigned i = 0; i < transTracksRaw.size(); i++) {
430 
431  if (debug_) cout << "Raw Weight track " << i << " = " << theVertexAdaptiveRaw.trackWeight(transTracksRaw[i]) << endl;
432 
433  if (theVertexAdaptiveRaw.trackWeight(transTracksRaw[i]) > minAdaptWeight_){
434 
435  PFTrackHitFullInfo pattern = hitPattern_.analyze(tkerGeomHandle_, transTracksRefRaw[i], theVertexAdaptiveRaw);
436 
437  PFDisplacedVertex::VertexTrackType vertexTrackType = getVertexTrackType(pattern);
438 
439  if (vertexTrackType != PFDisplacedVertex::T_NOT_FROM_VERTEX){
440 
441  bool bGoodTrack = helper_.isTrackSelected(transTracksRaw[i].track(), vertexTrackType);
442 
443  if (bGoodTrack){
444  transTracks.push_back(transTracksRaw[i]);
445  transTracksRef.push_back(transTracksRefRaw[i]);
446  } else {
447  if (debug_)
448  cout << "Track rejected nChi2 = " << transTracksRaw[i].track().normalizedChi2()
449  << " pt = " << transTracksRaw[i].track().pt()
450  << " dxy (wrt (0,0,0)) = " << transTracksRaw[i].track().dxy()
451  << " nHits = " << transTracksRaw[i].track().numberOfValidHits()
452  << " nOuterHits = " << transTracksRaw[i].track().hitPattern().numberOfHits(HitPattern::MISSING_OUTER_HITS) << endl;
453  }
454  } else {
455 
456  if (debug_){
457  cout << "Remove track because too far away from the vertex:" << endl;
458  }
459 
460  }
461 
462  }
463 
464  }
465 
466 
467 
468  if (debug_) cout << "All Tracks " << transTracksRaw.size()
469  << " with good weight " << transTracks.size() << endl;
470 
471 
472  // ---- Refit ---- //
473  FitterType vtxFitter = F_NOTDEFINED;
474 
475  if (transTracks.size() < 2) return true;
476  else if (transTracks.size() == 2){
477 
479  if (debug_)
480  cout << "Due to probably high pile-up conditions 2 track vertices switched off" << endl;
481  return true;
482  }
483  vtxFitter = F_KALMAN;
484  }
485  else if (transTracks.size() > 2 && transTracksRaw.size() > transTracks.size())
486  vtxFitter = F_ADAPTIVE;
487  else if (transTracks.size() > 2 && transTracksRaw.size() == transTracks.size())
488  vtxFitter = F_DONOTREFIT;
489  else return true;
490 
491  if (debug_) cout << "Vertex Fitter " << vtxFitter << endl;
492 
493  if(vtxFitter == F_KALMAN){
494 
495  KalmanVertexFitter theKalmanFitter(true);
496  theRecoVertex = theKalmanFitter.vertex(transTracks, seedPoint);
497 
498  } else if(vtxFitter == F_ADAPTIVE){
499 
500  AdaptiveVertexFitter theAdaptiveFitter(
506 
507  theRecoVertex = theAdaptiveFitter.vertex(transTracks, seedPoint);
508 
509  } else if (vtxFitter == F_DONOTREFIT) {
510  theRecoVertex = theVertexAdaptiveRaw;
511  } else {
512  return true;
513  }
514 
515 
516  // ---- Check if the fitted vertex is valid ---- //
517 
518  if( !theRecoVertex.isValid() || theRecoVertex.totalChiSquared() < 0. ) {
519  if (debug_) cout << "Refit failed : valid? " << theRecoVertex.isValid()
520  << " totalChi2 = " << theRecoVertex.totalChiSquared() << endl;
521  return true;
522  }
523 
524  // ---- Create vertex ---- //
525 
526  Vertex theRecoVtx = theRecoVertex;
527 
528  double chi2 = theRecoVtx.chi2();
529  double ndf = theRecoVtx.ndof();
530 
531 
532  if (chi2 > TMath::ChisquareQuantile(0.95, ndf)) {
533  if (debug_)
534  cout << "Rejected because of chi2 = " << chi2 << " ndf = " << ndf << " confid. level: " << TMath::ChisquareQuantile(0.95, ndf) << endl;
535  return true;
536  }
537 
538 
539 
540  // ---- Create and fill vector of refitted TransientTracks ---- //
541 
542  // -----------------------------------------------//
543  // ---- Prepare and Fill the Displaced Vertex ----//
544  // -----------------------------------------------//
545 
546 
547  displacedVertex = (PFDisplacedVertex) theRecoVtx;
548  displacedVertex.removeTracks();
549 
550  for(unsigned i = 0; i < transTracks.size();i++) {
551 
552  PFTrackHitFullInfo pattern = hitPattern_.analyze(tkerGeomHandle_, transTracksRef[i], theRecoVertex);
553 
554  PFDisplacedVertex::VertexTrackType vertexTrackType = getVertexTrackType(pattern);
555 
556  Track refittedTrack;
557  float weight = theRecoVertex.trackWeight(transTracks[i]);
558 
559 
560  if (weight < minAdaptWeight_) continue;
561 
562  try{
563  refittedTrack = theRecoVertex.refittedTrack(transTracks[i]).track();
564  }catch( cms::Exception& exception ){
565  continue;
566  }
567 
568  if (debug_){
569  cout << "Vertex Track Type = " << vertexTrackType << endl;
570 
571  cout << "nHitBeforeVertex = " << pattern.first.first
572  << " nHitAfterVertex = " << pattern.second.first
573  << " nMissHitBeforeVertex = " << pattern.first.second
574  << " nMissHitAfterVertex = " << pattern.second.second
575  << " Weight = " << weight << endl;
576  }
577 
578  displacedVertex.addElement(transTracksRef[i],
579  refittedTrack,
580  pattern, vertexTrackType, weight);
581 
582  }
583 
584  displacedVertex.setPrimaryDirection(helper_.primaryVertex());
585  displacedVertex.calcKinematics();
586 
587 
588 
589  if (debug_) cout << "== End vertexing procedure ==" << endl;
590 
591  return false;
592 
593 }
int i
Definition: DBlmapReader.cc:9
void setPrimaryDirection(const math::XYZPoint &pvtx)
edm::ESHandle< GlobalTrackingGeometry > globTkGeomHandle_
Tracker geometry for discerning hit positions.
float totalChiSquared() const
T y() const
Definition: PV3DBase.h:63
list pattern
Definition: chain.py:104
bool debug_
If true, debug printouts activated.
const Point & position() const
position
Definition: Vertex.h:106
const std::set< TrackBaseRef, Compare > & elements() const
std::pair< PFTrackHitInfo, PFTrackHitInfo > PFTrackHitFullInfo
std::set< reco::TrackBaseRef >::iterator IEset
-----— Useful Types -----— ///
PFTrackHitFullInfo analyze(edm::ESHandle< TrackerGeometry >, const reco::TrackBaseRef track, const TransientVertex &vert)
reco::TransientTrack refittedTrack(const reco::TransientTrack &track) const
void Dump(std::ostream &out=std::cout) const
cout function
void addElement(const TrackBaseRef &r, const Track &refTrack, const PFTrackHitFullInfo &hitInfo, VertexTrackType trackType=T_NOT_FROM_VERTEX, float w=1.0)
Add a new track to the vertex.
bool isTrackSelected(const reco::Track &trk, const reco::PFDisplacedVertex::VertexTrackType vertexTrackType) const
Select tracks tool.
edm::ESHandle< TrackerGeometry > tkerGeomHandle_
doc?
T sqrt(T t)
Definition: SSEVec.h:48
GlobalPoint position() const
T z() const
Definition: PV3DBase.h:64
const MagneticField * magField_
to be able to extrapolate tracks f
double chi2() const
chi-squares
Definition: Vertex.h:95
float trackWeight(const reco::TransientTrack &track) const
double ndof() const
Definition: Vertex.h:102
const GlobalPoint & seedPoint() const
Block of elements.
const Track & track() const
double sigmacut_
Adaptive Vertex Fitter parameters.
math::XYZPoint primaryVertex() const
Set Vertex direction using the primary vertex.
tuple cout
Definition: gather_cfg.py:121
void removeTracks()
Definition: Vertex.cc:64
int weight
Definition: histoStyle.py:50
T x() const
Definition: PV3DBase.h:62
bool isValid() const
reco::PFDisplacedVertex::VertexTrackType getVertexTrackType(PFTrackHitFullInfo &) const
PFDisplacedVertexHelper helper_
double PFDisplacedVertexFinder::getLongDiff ( const GlobalPoint Ref,
const GlobalPoint ToProject 
) const
private

Definition at line 724 of file PFDisplacedVertexFinder.cc.

References Basic3DVector< T >::dot(), Basic3DVector< T >::mag(), and Basic3DVector< T >::mag2().

Referenced by findSeedsFromCandidate(), and isCloseTo().

724  {
725 
726  Basic3DVector<double>vRef(Ref);
727  Basic3DVector<double>vToProject(ToProject);
728  return fabs((vRef.dot(vToProject)-vRef.mag2())/vRef.mag());
729 
730 }
double PFDisplacedVertexFinder::getLongProj ( const GlobalPoint Ref,
const GlobalVector ToProject 
) const
private

Definition at line 733 of file PFDisplacedVertexFinder.cc.

References Basic3DVector< T >::dot(), and Basic3DVector< T >::mag().

733  {
734 
735  Basic3DVector<double>vRef(Ref);
736  Basic3DVector<double>vToProject(ToProject);
737  return (vRef.dot(vToProject))/vRef.mag();
738 
739 
740 }
double PFDisplacedVertexFinder::getTransvDiff ( const GlobalPoint Ref,
const GlobalPoint ToProject 
) const
private

Definition at line 744 of file PFDisplacedVertexFinder.cc.

References Basic3DVector< T >::cross(), and Basic3DVector< T >::mag().

Referenced by findSeedsFromCandidate(), and isCloseTo().

744  {
745 
746  Basic3DVector<double>vRef(Ref);
747  Basic3DVector<double>vToProject(ToProject);
748  return fabs(vRef.cross(vToProject).mag()/vRef.mag());
749 
750 }
reco::PFDisplacedVertex::VertexTrackType PFDisplacedVertexFinder::getVertexTrackType ( PFTrackHitFullInfo pairTrackHitInfo) const
private

Definition at line 754 of file PFDisplacedVertexFinder.cc.

Referenced by fitVertexFromSeed().

754  {
755 
756  unsigned int nHitBeforeVertex = pairTrackHitInfo.first.first;
757  unsigned int nHitAfterVertex = pairTrackHitInfo.second.first;
758 
759  unsigned int nMissHitBeforeVertex = pairTrackHitInfo.first.second;
760  unsigned int nMissHitAfterVertex = pairTrackHitInfo.second.second;
761 
762  // For the moment those definitions are given apriori a more general study would be useful to refine those criteria
763 
764  if (nHitBeforeVertex <= 1 && nHitAfterVertex >= 3 && nMissHitAfterVertex <= 1)
765  return PFDisplacedVertex::T_FROM_VERTEX;
766  else if (nHitBeforeVertex >= 3 && nHitAfterVertex <= 1 && nMissHitBeforeVertex <= 1)
767  return PFDisplacedVertex::T_TO_VERTEX;
768  else if ((nHitBeforeVertex >= 2 && nHitAfterVertex >= 3)
769  ||
770  (nHitBeforeVertex >= 3 && nHitAfterVertex >= 2))
771  return PFDisplacedVertex::T_MERGED;
772  else
773  return PFDisplacedVertex::T_NOT_FROM_VERTEX;
774 }
bool PFDisplacedVertexFinder::isCloseTo ( const reco::PFDisplacedVertexSeed dv1,
const reco::PFDisplacedVertexSeed dv2 
) const
private

-----— Tools -----— ///

Definition at line 707 of file PFDisplacedVertexFinder.cc.

References getLongDiff(), getTransvDiff(), longSize_, reco::PFDisplacedVertexSeed::seedPoint(), and transvSize_.

Referenced by mergeSeeds().

707  {
708 
709  const GlobalPoint vP1 = dv1.seedPoint();
710  const GlobalPoint vP2 = dv2.seedPoint();
711 
712  double Delta_Long = getLongDiff(vP1, vP2);
713  if (Delta_Long > longSize_) return false;
714  double Delta_Transv = getTransvDiff(vP1, vP2);
715  if (Delta_Transv > transvSize_) return false;
716  // if (Delta_Long < longSize_ && Delta_Transv < transvSize_) isCloseTo = true;
717 
718  return true;
719 
720 }
double getTransvDiff(const GlobalPoint &, const GlobalPoint &) const
const GlobalPoint & seedPoint() const
double transvSize_
--—— Parameters --—— ///
double getLongDiff(const GlobalPoint &, const GlobalPoint &) const
void PFDisplacedVertexFinder::mergeSeeds ( reco::PFDisplacedVertexSeedCollection tempDisplacedVertexSeeds,
std::vector< bool > &  bLocked 
)
private

Sometimes two vertex candidates can be quite close and coming from the same vertex.

Definition at line 204 of file PFDisplacedVertexFinder.cc.

References gather_cfg::cout, debug_, and isCloseTo().

Referenced by findDisplacedVertices().

204  {
205 
206  // loop over displaced vertex candidates
207  // and merge them if they are close to each other
208  for(unsigned idv_mother = 0;idv_mother < tempDisplacedVertexSeeds.size(); idv_mother++){
209  if (!bLocked[idv_mother]){
210 
211  for (unsigned idv_daughter = idv_mother+1;idv_daughter < tempDisplacedVertexSeeds.size(); idv_daughter++){
212 
213  if (!bLocked[idv_daughter]){
214  if (isCloseTo(tempDisplacedVertexSeeds[idv_mother], tempDisplacedVertexSeeds[idv_daughter])) {
215 
216  tempDisplacedVertexSeeds[idv_mother].mergeWith(tempDisplacedVertexSeeds[idv_daughter]);
217  bLocked[idv_daughter] = true;
218  if (debug_) cout << "Seeds " << idv_mother << " and " << idv_daughter << " merged" << endl;
219  }
220  }
221  }
222  }
223  }
224 
225 }
bool debug_
If true, debug printouts activated.
tuple cout
Definition: gather_cfg.py:121
bool isCloseTo(const reco::PFDisplacedVertexSeed &, const reco::PFDisplacedVertexSeed &) const
-----— Tools -----— ///
bool PFDisplacedVertexFinder::rejectAndLabelVertex ( reco::PFDisplacedVertex dv)
private

Definition at line 694 of file PFDisplacedVertexFinder.cc.

References helper_, PFDisplacedVertexHelper::identifyVertex(), reco::PFDisplacedVertex::isFake(), and reco::PFDisplacedVertex::setVertexType().

Referenced by selectAndLabelVertices().

694  {
695 
697  dv.setVertexType(vertexType);
698 
699  return dv.isFake();
700 
701 }
void setVertexType(VertexType vertexType)
Set the type of this vertex.
reco::PFDisplacedVertex::VertexType identifyVertex(const reco::PFDisplacedVertex &v) const
Vertex identification tool.
PFDisplacedVertexHelper helper_
void PFDisplacedVertexFinder::selectAndLabelVertices ( reco::PFDisplacedVertexCollection tempDisplacedVertices,
std::vector< bool > &  bLocked 
)
private

Remove potentially fakes displaced vertices.

Definition at line 601 of file PFDisplacedVertexFinder.cc.

References commonTracks(), gather_cfg::cout, debug_, primaryVertexCut_, rejectAndLabelVertex(), rho, tecCut_, tobCut_, and z.

Referenced by findDisplacedVertices().

601  {
602 
603  if (debug_) cout << " 4.1) Reject vertices " << endl;
604 
605  for(unsigned idv = 0; idv < tempDisplacedVertices.size(); idv++){
606 
607 
608  // ---- We accept a vertex only if it is not in TOB in the barrel
609  // and not in TEC in the end caps
610  // and not too much before the first pixel layer ---- //
611 
612  const float rho = tempDisplacedVertices[idv].position().rho();
613  const float z = tempDisplacedVertices[idv].position().z();
614 
615  if (rho > tobCut_ || rho < primaryVertexCut_ || fabs(z) > tecCut_) {
616  if (debug_) cout << "Vertex " << idv
617  << " geometrically rejected #rho = " << rho
618  << " z = " << z << endl;
619 
620  bLocked[idv] = true;
621 
622  continue;
623  }
624 
625  unsigned nPrimary = tempDisplacedVertices[idv].nPrimaryTracks();
626  unsigned nMerged = tempDisplacedVertices[idv].nMergedTracks();
627  unsigned nSecondary = tempDisplacedVertices[idv].nSecondaryTracks();
628 
629  if (nPrimary + nMerged > 1) {
630  bLocked[idv] = true;
631  if (debug_) cout << "Vertex " << idv
632  << " rejected because two primary or merged tracks" << endl;
633 
634 
635  }
636 
637  if (nPrimary + nMerged + nSecondary < 2){
638  bLocked[idv] = true;
639  if (debug_) cout << "Vertex " << idv
640  << " rejected because only one track related to the vertex" << endl;
641  }
642 
643 
644  }
645 
646 
647  if (debug_) cout << " 4.2) Check for common vertices" << endl;
648 
649  // ---- Among the remaining vertex we shall remove one
650  // of those which have two common tracks ---- //
651 
652  for(unsigned idv_mother = 0; idv_mother < tempDisplacedVertices.size(); idv_mother++){
653  for(unsigned idv_daughter = idv_mother+1;
654  idv_daughter < tempDisplacedVertices.size(); idv_daughter++){
655 
656  if(!bLocked[idv_daughter] && !bLocked[idv_mother]){
657 
658  const unsigned commonTrks = commonTracks(tempDisplacedVertices[idv_daughter], tempDisplacedVertices[idv_mother]);
659 
660  if (commonTrks > 1) {
661 
662  if (debug_) cout << "Vertices " << idv_daughter << " and " << idv_mother
663  << " has many common tracks" << endl;
664 
665  // We keep the vertex vertex which contains the most of the tracks
666 
667  const int mother_size = tempDisplacedVertices[idv_mother].nTracks();
668  const int daughter_size = tempDisplacedVertices[idv_daughter].nTracks();
669 
670  if (mother_size > daughter_size) bLocked[idv_daughter] = true;
671  else if (mother_size < daughter_size) bLocked[idv_mother] = true;
672  else {
673 
674  // If they have the same size we keep the vertex with the best normalised chi2
675 
676  const float mother_normChi2 = tempDisplacedVertices[idv_mother].normalizedChi2();
677  const float daughter_normChi2 = tempDisplacedVertices[idv_daughter].normalizedChi2();
678  if (mother_normChi2 < daughter_normChi2) bLocked[idv_daughter] = true;
679  else bLocked[idv_mother] = true;
680  }
681 
682  }
683  }
684  }
685  }
686 
687  for(unsigned idv = 0; idv < tempDisplacedVertices.size(); idv++)
688  if ( !bLocked[idv] ) bLocked[idv] = rejectAndLabelVertex(tempDisplacedVertices[idv]);
689 
690 
691 }
bool rejectAndLabelVertex(reco::PFDisplacedVertex &dv)
bool debug_
If true, debug printouts activated.
unsigned commonTracks(const reco::PFDisplacedVertex &, const reco::PFDisplacedVertex &) const
tuple cout
Definition: gather_cfg.py:121
void PFDisplacedVertexFinder::setAVFParameters ( const edm::ParameterSet ps)
inline

Definition at line 99 of file PFDisplacedVertexFinder.h.

References edm::ParameterSet::getParameter(), ratio_, sigmacut_, and t_ini_.

99  {
100  sigmacut_ = ps.getParameter<double>("sigmacut");
101  t_ini_ = ps.getParameter<double>("Tini");
102  ratio_ = ps.getParameter<double>("ratio");
103  }
T getParameter(std::string const &) const
double sigmacut_
Adaptive Vertex Fitter parameters.
void PFDisplacedVertexFinder::setDebug ( bool  debug)
inline

Sets debug printout flag.

Definition at line 75 of file PFDisplacedVertexFinder.h.

References debug, and debug_.

75 {debug_ = debug;}
bool debug_
If true, debug printouts activated.
#define debug
Definition: HDRShower.cc:19
void PFDisplacedVertexFinder::setEdmParameters ( const MagneticField magField,
edm::ESHandle< GlobalTrackingGeometry globTkGeomHandle,
edm::ESHandle< TrackerGeometry tkerGeomHandle 
)
inline

Sets parameters for track extrapolation and hits study.

Definition at line 78 of file PFDisplacedVertexFinder.h.

References globTkGeomHandle_, magField_, and tkerGeomHandle_.

80  {
81  magField_ = magField;
82  globTkGeomHandle_ = globTkGeomHandle;
83  tkerGeomHandle_ = tkerGeomHandle;
84  }
edm::ESHandle< GlobalTrackingGeometry > globTkGeomHandle_
Tracker geometry for discerning hit positions.
edm::ESHandle< TrackerGeometry > tkerGeomHandle_
doc?
const MagneticField * magField_
to be able to extrapolate tracks f
void PFDisplacedVertexFinder::setInput ( const edm::Handle< reco::PFDisplacedVertexCandidateCollection > &  displacedVertexCandidates)

Set input collections of tracks.

Definition at line 42 of file PFDisplacedVertexFinder.cc.

References displacedVertexCandidates_, i, and edm::HandleBase::isValid().

43  {
44 
45  if( displacedVertexCandidates_.get() ) {
47  }
48  else
50 
51 
52  if(displacedVertexCandidates.isValid()) {
53  for(unsigned i=0;i<displacedVertexCandidates->size(); i++) {
54  PFDisplacedVertexCandidateRef dvcref( displacedVertexCandidates, i);
55  displacedVertexCandidates_->push_back( (*dvcref));
56  }
57  }
58 
59 }
int i
Definition: DBlmapReader.cc:9
std::vector< PFDisplacedVertexCandidate > PFDisplacedVertexCandidateCollection
collection of PFDisplacedVertexCandidate objects
std::auto_ptr< reco::PFDisplacedVertexCandidateCollection > displacedVertexCandidates_
-----— Members -----— ///
bool isValid() const
Definition: HandleBase.h:75
void PFDisplacedVertexFinder::setParameters ( double  transvSize,
double  longSize,
double  primaryVertexCut,
double  tobCut,
double  tecCut,
double  minAdaptWeight,
bool  switchOff2TrackVertex 
)
inline

--—— Set different algo parameters --—— ///

Sets algo parameters for the vertex finder

Definition at line 62 of file PFDisplacedVertexFinder.h.

References longSize_, minAdaptWeight_, primaryVertexCut_, switchOff2TrackVertex_, tecCut_, tobCut_, and transvSize_.

64  {
65  transvSize_ = transvSize;
66  longSize_ = longSize;
67  primaryVertexCut_ = primaryVertexCut;
68  tobCut_ = tobCut;
69  tecCut_ = tecCut;
70  minAdaptWeight_ = minAdaptWeight;
71  switchOff2TrackVertex_ = switchOff2TrackVertex;
72  }
double transvSize_
--—— Parameters --—— ///
void PFDisplacedVertexFinder::setPrimaryVertex ( edm::Handle< reco::VertexCollection mainVertexHandle,
edm::Handle< reco::BeamSpot beamSpotHandle 
)
inline

Definition at line 94 of file PFDisplacedVertexFinder.h.

References helper_, and PFDisplacedVertexHelper::setPrimaryVertex().

95  {
96  helper_.setPrimaryVertex(mainVertexHandle, beamSpotHandle);
97  }
void setPrimaryVertex(edm::Handle< reco::VertexCollection > mainVertexHandle, edm::Handle< reco::BeamSpot > beamSpotHandle)
Update the primary vertex information.
PFDisplacedVertexHelper helper_
void PFDisplacedVertexFinder::setTracksSelector ( const edm::ParameterSet ps)
inline

Definition at line 86 of file PFDisplacedVertexFinder.h.

References helper_, and PFDisplacedVertexHelper::setTracksSelector().

86  {
88  }
void setTracksSelector(const edm::ParameterSet &ps)
Set Tracks selector parameters.
PFDisplacedVertexHelper helper_
void PFDisplacedVertexFinder::setVertexIdentifier ( const edm::ParameterSet ps)
inline

Definition at line 90 of file PFDisplacedVertexFinder.h.

References helper_, and PFDisplacedVertexHelper::setVertexIdentifier().

90  {
92  }
void setVertexIdentifier(const edm::ParameterSet &ps)
Set Vertex identifier parameters.
PFDisplacedVertexHelper helper_
std::auto_ptr< reco::PFDisplacedVertexCollection > PFDisplacedVertexFinder::transferDisplacedVertices ( )
inline
Returns
auto_ptr to collection of DisplacedVertices

Definition at line 110 of file PFDisplacedVertexFinder.h.

References displacedVertices_.

110 {return displacedVertices_;}
std::auto_ptr< reco::PFDisplacedVertexCollection > displacedVertices_

Friends And Related Function Documentation

std::ostream& operator<< ( std::ostream &  out,
const PFDisplacedVertexFinder a 
)
friend

Definition at line 796 of file PFDisplacedVertexFinder.cc.

796  {
797 
798  if(! out) return out;
799  out << setprecision(3) << setw(5) << endl;
800  out << "" << endl;
801  out << " ====================================== " << endl;
802  out << " ====== Displaced Vertex Finder ======= " << endl;
803  out << " ====================================== " << endl;
804  out << " " << endl;
805 
806  a.helper_.Dump();
807  out << "" << endl
808  << " Adaptive Vertex Fitter parameters are :"<< endl
809  << " sigmacut = " << a.sigmacut_ << " T_ini = "
810  << a.t_ini_ << " ratio = " << a.ratio_ << endl << endl;
811 
812  const std::auto_ptr< reco::PFDisplacedVertexCollection >& displacedVertices_
813  = a.displacedVertices();
814 
815 
816  if(!displacedVertices_.get() ) {
817  out<<"displacedVertex already transfered"<<endl;
818  }
819  else{
820 
821  out<<"Number of displacedVertices found : "<< displacedVertices_->size()<<endl<<endl;
822 
823  int i = -1;
824 
825  for(PFDisplacedVertexFinder::IDV idv = displacedVertices_->begin();
826  idv != displacedVertices_->end(); idv++){
827  i++;
828  out << i << " "; idv->Dump(); out << "" << endl;
829  }
830  }
831 
832  return out;
833 }
int i
Definition: DBlmapReader.cc:9
std::auto_ptr< reco::PFDisplacedVertexCollection > displacedVertices_
void Dump(std::ostream &out=std::cout) const
const std::auto_ptr< reco::PFDisplacedVertexCollection > & displacedVertices() const
tuple out
Definition: dbtoconf.py:99
double sigmacut_
Adaptive Vertex Fitter parameters.
reco::PFDisplacedVertexCollection::iterator IDV
PFDisplacedVertexHelper helper_

Member Data Documentation

bool PFDisplacedVertexFinder::debug_
private

If true, debug printouts activated.

Definition at line 180 of file PFDisplacedVertexFinder.h.

Referenced by findDisplacedVertices(), findSeedsFromCandidate(), fitVertexFromSeed(), mergeSeeds(), selectAndLabelVertices(), and setDebug().

std::auto_ptr< reco::PFDisplacedVertexCandidateCollection > PFDisplacedVertexFinder::displacedVertexCandidates_
private

-----— Members -----— ///

Definition at line 156 of file PFDisplacedVertexFinder.h.

Referenced by findDisplacedVertices(), and setInput().

std::auto_ptr< reco::PFDisplacedVertexCollection > PFDisplacedVertexFinder::displacedVertices_
private
edm::ESHandle<GlobalTrackingGeometry> PFDisplacedVertexFinder::globTkGeomHandle_
private

Tracker geometry for discerning hit positions.

Definition at line 183 of file PFDisplacedVertexFinder.h.

Referenced by fitVertexFromSeed(), and setEdmParameters().

PFDisplacedVertexHelper PFDisplacedVertexFinder::helper_
private
PFCheckHitPattern PFDisplacedVertexFinder::hitPattern_
private

Definition at line 192 of file PFDisplacedVertexFinder.h.

Referenced by fitVertexFromSeed().

double PFDisplacedVertexFinder::longSize_
private

Definition at line 164 of file PFDisplacedVertexFinder.h.

Referenced by findSeedsFromCandidate(), isCloseTo(), and setParameters().

const MagneticField* PFDisplacedVertexFinder::magField_
private

to be able to extrapolate tracks f

Definition at line 189 of file PFDisplacedVertexFinder.h.

Referenced by fitVertexFromSeed(), and setEdmParameters().

double PFDisplacedVertexFinder::minAdaptWeight_
private

Definition at line 168 of file PFDisplacedVertexFinder.h.

Referenced by fitVertexFromSeed(), and setParameters().

double PFDisplacedVertexFinder::primaryVertexCut_
private
double PFDisplacedVertexFinder::ratio_
private

Definition at line 176 of file PFDisplacedVertexFinder.h.

Referenced by fitVertexFromSeed(), operator<<(), and setAVFParameters().

double PFDisplacedVertexFinder::sigmacut_
private

Adaptive Vertex Fitter parameters.

Definition at line 174 of file PFDisplacedVertexFinder.h.

Referenced by fitVertexFromSeed(), operator<<(), and setAVFParameters().

bool PFDisplacedVertexFinder::switchOff2TrackVertex_
private

Definition at line 170 of file PFDisplacedVertexFinder.h.

Referenced by fitVertexFromSeed(), and setParameters().

double PFDisplacedVertexFinder::t_ini_
private

Definition at line 175 of file PFDisplacedVertexFinder.h.

Referenced by fitVertexFromSeed(), operator<<(), and setAVFParameters().

double PFDisplacedVertexFinder::tecCut_
private
edm::ESHandle<TrackerGeometry> PFDisplacedVertexFinder::tkerGeomHandle_
private

doc?

Definition at line 186 of file PFDisplacedVertexFinder.h.

Referenced by fitVertexFromSeed(), and setEdmParameters().

double PFDisplacedVertexFinder::tobCut_
private
double PFDisplacedVertexFinder::transvSize_
private

--—— Parameters --—— ///

Algo parameters for the vertex finder

Definition at line 163 of file PFDisplacedVertexFinder.h.

Referenced by findSeedsFromCandidate(), isCloseTo(), and setParameters().