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 757 of file PFDisplacedVertexFinder.cc.

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

Referenced by selectAndLabelVertices().

757  {
758 
759  vector<Track> vt1 = v1.refittedTracks();
760  vector<Track> vt2 = v2.refittedTracks();
761 
762  unsigned commonTracks = 0;
763 
764  for ( unsigned il1 = 0; il1 < vt1.size(); il1++){
765  unsigned il1_idx = v1.originalTrack(vt1[il1]).key();
766 
767  for ( unsigned il2 = 0; il2 < vt2.size(); il2++)
768  if (il1_idx == v2.originalTrack(vt2[il2]).key()) {commonTracks++; break;}
769 
770  }
771 
772  return commonTracks;
773 
774 }
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:229
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(), gather_cfg::cout, debug_, reco::PFDisplacedVertexSeed::Dump(), reco::PFDisplacedVertexSeed::elements(), cppFunctionSkipper::exception, F_ADAPTIVE, F_DONOTREFIT, F_KALMAN, F_NOTDEFINED, getVertexTrackType(), globTkGeomHandle_, helper_, hitPattern_, i, PFDisplacedVertexHelper::isTrackSelected(), TransientVertex::isValid(), magField_, minAdaptWeight_, reco::Vertex::ndof(), chain::pattern, reco::Vertex::position(), TransientVertex::position(), PFDisplacedVertexHelper::primaryVertex(), primaryVertexCut_, ratio_, TransientVertex::refittedTrack(), reco::Vertex::removeTracks(), rho, reco::PFDisplacedVertexSeed::seedPoint(), reco::PFDisplacedVertex::setPrimaryDirection(), sigmacut_, mathSSE::sqrt(), switchOff2TrackVertex_, t_ini_, tecCut_, tkerGeomHandle_, tobCut_, TransientVertex::totalChiSquared(), reco::TransientTrack::track(), TransientVertex::trackWeight(), KalmanVertexFitter::vertex(), AdaptiveVertexFitter::vertex(), histoStyle::weight, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), detailsBasic3DVector::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  if ( (*ie)->algo()-4 > 3 ) nStep45++;
289  if ( (*ie)->algo()-4 < 0 ||(*ie)->algo()-4 > 5 ) nNotIterative++;
290  }
291 
292  if (rho > 25 && nStep45 + nNotIterative < 1){
293  if (debug_) cout << "Seed point at rho > 25 cm but no step 4-5 tracks" << endl;
294  return true;
295  }
296 
297  // ----------------------------------------------- //
298  // ---- PRESELECT GOOD TRACKS FOR FINAL VERTEX --- //
299  // ----------------------------------------------- //
300 
301 
302 
303  // 1)If only two track are found do not prefit
304 
305 
306  if ( transTracksRaw.size() == 2 ){
307 
308  if (debug_) cout << "No raw fit done" << endl;
310  if (debug_)
311  cout << "Due to probably high pile-up conditions 2 track vertices switched off" << endl;
312  return true;
313 
314  }
315  GlobalError globalError;
316 
317  theVertexAdaptiveRaw = TransientVertex(seedPoint, globalError, transTracksRaw, 1.);
318 
319 
320 
321  } else {
322 
323 
324 
325  if (debug_) cout << "Raw fit done." << endl;
326 
332 
335 
336 
337  if ( transTracksRaw.size() < 1000 && transTracksRaw.size() > 3){
338 
339  if (debug_) cout << "First test with KFT" << endl;
340 
341  KalmanVertexFitter theKalmanFitter(true);
342  theVertexAdaptiveRaw = theKalmanFitter.vertex(transTracksRaw, seedPoint);
343 
344  if( !theVertexAdaptiveRaw.isValid() || theVertexAdaptiveRaw.totalChiSquared() < 0. ) {
345  if(debug_) cout << "Prefit failed : valid? " << theVertexAdaptiveRaw.isValid()
346  << " totalChi2 = " << theVertexAdaptiveRaw.totalChiSquared() << endl;
347  return true;
348  }
349 
350  if (debug_) cout << "We use KFT instead of seed point to set up a point for AVF "
351  << " x = " << theVertexAdaptiveRaw.position().x()
352  << " y = " << theVertexAdaptiveRaw.position().y()
353  << " z = " << theVertexAdaptiveRaw.position().z()
354  << endl;
355 
356  // To save time: reject the Displaced vertex if it is too close to the beam pipe.
357  // Frequently it is very big vertices, with some dosens of tracks
358 
359  Vertex vtx = theVertexAdaptiveRaw;
360  rho = vtx.position().rho();
361 
362  // cout << "primary vertex cut = " << primaryVertexCut_ << endl;
363 
364  if (rho < primaryVertexCut_ || rho > 100) {
365  if (debug_) cout << "KFT Vertex geometrically rejected with tracks #rho = " << rho << endl;
366  return true;
367  }
368 
369  // cout << "primary vertex cut = " << primaryVertexCut_ << " rho = " << rho << endl;
370 
371  theVertexAdaptiveRaw = theAdaptiveFitterRaw.vertex(transTracksRaw, theVertexAdaptiveRaw.position());
372 
373 
374  } else {
375 
376 
377  theVertexAdaptiveRaw = theAdaptiveFitterRaw.vertex(transTracksRaw, seedPoint);
378 
379  }
380 
381  if( !theVertexAdaptiveRaw.isValid() || theVertexAdaptiveRaw.totalChiSquared() < 0. ) {
382  if(debug_) cout << "Fit failed : valid? " << theVertexAdaptiveRaw.isValid()
383  << " totalChi2 = " << theVertexAdaptiveRaw.totalChiSquared() << endl;
384  return true;
385  }
386 
387  // To save time: reject the Displaced vertex if it is too close to the beam pipe.
388  // Frequently it is very big vertices, with some dosens of tracks
389 
390  Vertex vtx = theVertexAdaptiveRaw;
391  rho = vtx.position().rho();
392 
393  if (rho < primaryVertexCut_) {
394  if (debug_) cout << "Vertex " << " geometrically rejected with " << transTracksRaw.size() << " tracks #rho = " << rho << endl;
395  return true;
396  }
397 
398 
399  }
400 
401 
402 
403  // ---- Remove tracks with small weight or
404  // big first (last) hit_to_vertex distance
405  // and then refit ---- //
406 
407 
408 
409  for (unsigned i = 0; i < transTracksRaw.size(); i++) {
410 
411  if (debug_) cout << "Raw Weight track " << i << " = " << theVertexAdaptiveRaw.trackWeight(transTracksRaw[i]) << endl;
412 
413  if (theVertexAdaptiveRaw.trackWeight(transTracksRaw[i]) > minAdaptWeight_){
414 
415  PFTrackHitFullInfo pattern = hitPattern_.analyze(tkerGeomHandle_, transTracksRefRaw[i], theVertexAdaptiveRaw);
416 
417  PFDisplacedVertex::VertexTrackType vertexTrackType = getVertexTrackType(pattern);
418 
419  if (vertexTrackType != PFDisplacedVertex::T_NOT_FROM_VERTEX){
420 
421  bool bGoodTrack = helper_.isTrackSelected(transTracksRaw[i].track(), vertexTrackType);
422 
423  if (bGoodTrack){
424  transTracks.push_back(transTracksRaw[i]);
425  transTracksRef.push_back(transTracksRefRaw[i]);
426  } else {
427  if (debug_)
428  cout << "Track rejected nChi2 = " << transTracksRaw[i].track().normalizedChi2()
429  << " pt = " << transTracksRaw[i].track().pt()
430  << " dxy (wrt (0,0,0)) = " << transTracksRaw[i].track().dxy()
431  << " nHits = " << transTracksRaw[i].track().numberOfValidHits()
432  << " nOuterHits = " << transTracksRaw[i].track().hitPattern().numberOfHits(HitPattern::MISSING_OUTER_HITS) << endl;
433  }
434  } else {
435 
436  if (debug_){
437  cout << "Remove track because too far away from the vertex:" << endl;
438  }
439 
440  }
441 
442  }
443 
444  }
445 
446 
447 
448  if (debug_) cout << "All Tracks " << transTracksRaw.size()
449  << " with good weight " << transTracks.size() << endl;
450 
451 
452  // ---- Refit ---- //
453  FitterType vtxFitter = F_NOTDEFINED;
454 
455  if (transTracks.size() < 2) return true;
456  else if (transTracks.size() == 2){
457 
459  if (debug_)
460  cout << "Due to probably high pile-up conditions 2 track vertices switched off" << endl;
461  return true;
462  }
463  vtxFitter = F_KALMAN;
464  }
465  else if (transTracks.size() > 2 && transTracksRaw.size() > transTracks.size())
466  vtxFitter = F_ADAPTIVE;
467  else if (transTracks.size() > 2 && transTracksRaw.size() == transTracks.size())
468  vtxFitter = F_DONOTREFIT;
469  else return true;
470 
471  if (debug_) cout << "Vertex Fitter " << vtxFitter << endl;
472 
473  if(vtxFitter == F_KALMAN){
474 
475  KalmanVertexFitter theKalmanFitter(true);
476  theRecoVertex = theKalmanFitter.vertex(transTracks, seedPoint);
477 
478  } else if(vtxFitter == F_ADAPTIVE){
479 
480  AdaptiveVertexFitter theAdaptiveFitter(
486 
487  theRecoVertex = theAdaptiveFitter.vertex(transTracks, seedPoint);
488 
489  } else if (vtxFitter == F_DONOTREFIT) {
490  theRecoVertex = theVertexAdaptiveRaw;
491  } else {
492  return true;
493  }
494 
495 
496  // ---- Check if the fitted vertex is valid ---- //
497 
498  if( !theRecoVertex.isValid() || theRecoVertex.totalChiSquared() < 0. ) {
499  if (debug_) cout << "Refit failed : valid? " << theRecoVertex.isValid()
500  << " totalChi2 = " << theRecoVertex.totalChiSquared() << endl;
501  return true;
502  }
503 
504  // ---- Create vertex ---- //
505 
506  Vertex theRecoVtx = theRecoVertex;
507 
508  double chi2 = theRecoVtx.chi2();
509  double ndf = theRecoVtx.ndof();
510 
511 
512  if (chi2 > TMath::ChisquareQuantile(0.95, ndf)) {
513  if (debug_)
514  cout << "Rejected because of chi2 = " << chi2 << " ndf = " << ndf << " confid. level: " << TMath::ChisquareQuantile(0.95, ndf) << endl;
515  return true;
516  }
517 
518 
519 
520  // ---- Create and fill vector of refitted TransientTracks ---- //
521 
522  // -----------------------------------------------//
523  // ---- Prepare and Fill the Displaced Vertex ----//
524  // -----------------------------------------------//
525 
526 
527  displacedVertex = (PFDisplacedVertex) theRecoVtx;
528  displacedVertex.removeTracks();
529 
530  for(unsigned i = 0; i < transTracks.size();i++) {
531 
532  PFTrackHitFullInfo pattern = hitPattern_.analyze(tkerGeomHandle_, transTracksRef[i], theRecoVertex);
533 
534  PFDisplacedVertex::VertexTrackType vertexTrackType = getVertexTrackType(pattern);
535 
536  Track refittedTrack;
537  float weight = theRecoVertex.trackWeight(transTracks[i]);
538 
539 
540  if (weight < minAdaptWeight_) continue;
541 
542  try{
543  refittedTrack = theRecoVertex.refittedTrack(transTracks[i]).track();
544  }catch( cms::Exception& exception ){
545  continue;
546  }
547 
548  if (debug_){
549  cout << "Vertex Track Type = " << vertexTrackType << endl;
550 
551  cout << "nHitBeforeVertex = " << pattern.first.first
552  << " nHitAfterVertex = " << pattern.second.first
553  << " nMissHitBeforeVertex = " << pattern.first.second
554  << " nMissHitAfterVertex = " << pattern.second.second
555  << " Weight = " << weight << endl;
556  }
557 
558  displacedVertex.addElement(transTracksRef[i],
559  refittedTrack,
560  pattern, vertexTrackType, weight);
561 
562  }
563 
564  displacedVertex.setPrimaryDirection(helper_.primaryVertex());
565  displacedVertex.calcKinematics();
566 
567 
568 
569  if (debug_) cout << "== End vertexing procedure ==" << endl;
570 
571  return false;
572 
573 }
int i
Definition: DBlmapReader.cc:9
void setPrimaryDirection(const math::XYZPoint &pvtx)
edm::ESHandle< GlobalTrackingGeometry > globTkGeomHandle_
Tracker geometry for discerning hit positions.
Definition: DDAxes.h:10
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
float float float z
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 704 of file PFDisplacedVertexFinder.cc.

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

Referenced by findSeedsFromCandidate(), and isCloseTo().

704  {
705 
706  Basic3DVector<double>vRef(Ref);
707  Basic3DVector<double>vToProject(ToProject);
708  return fabs((vRef.dot(vToProject)-vRef.mag2())/vRef.mag());
709 
710 }
double PFDisplacedVertexFinder::getLongProj ( const GlobalPoint Ref,
const GlobalVector ToProject 
) const
private

Definition at line 713 of file PFDisplacedVertexFinder.cc.

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

713  {
714 
715  Basic3DVector<double>vRef(Ref);
716  Basic3DVector<double>vToProject(ToProject);
717  return (vRef.dot(vToProject))/vRef.mag();
718 
719 
720 }
double PFDisplacedVertexFinder::getTransvDiff ( const GlobalPoint Ref,
const GlobalPoint ToProject 
) const
private

Definition at line 724 of file PFDisplacedVertexFinder.cc.

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

Referenced by findSeedsFromCandidate(), and isCloseTo().

724  {
725 
726  Basic3DVector<double>vRef(Ref);
727  Basic3DVector<double>vToProject(ToProject);
728  return fabs(vRef.cross(vToProject).mag()/vRef.mag());
729 
730 }
reco::PFDisplacedVertex::VertexTrackType PFDisplacedVertexFinder::getVertexTrackType ( PFTrackHitFullInfo pairTrackHitInfo) const
private

Definition at line 734 of file PFDisplacedVertexFinder.cc.

Referenced by fitVertexFromSeed().

734  {
735 
736  unsigned int nHitBeforeVertex = pairTrackHitInfo.first.first;
737  unsigned int nHitAfterVertex = pairTrackHitInfo.second.first;
738 
739  unsigned int nMissHitBeforeVertex = pairTrackHitInfo.first.second;
740  unsigned int nMissHitAfterVertex = pairTrackHitInfo.second.second;
741 
742  // For the moment those definitions are given apriori a more general study would be useful to refine those criteria
743 
744  if (nHitBeforeVertex <= 1 && nHitAfterVertex >= 3 && nMissHitAfterVertex <= 1)
745  return PFDisplacedVertex::T_FROM_VERTEX;
746  else if (nHitBeforeVertex >= 3 && nHitAfterVertex <= 1 && nMissHitBeforeVertex <= 1)
747  return PFDisplacedVertex::T_TO_VERTEX;
748  else if ((nHitBeforeVertex >= 2 && nHitAfterVertex >= 3)
749  ||
750  (nHitBeforeVertex >= 3 && nHitAfterVertex >= 2))
751  return PFDisplacedVertex::T_MERGED;
752  else
753  return PFDisplacedVertex::T_NOT_FROM_VERTEX;
754 }
bool PFDisplacedVertexFinder::isCloseTo ( const reco::PFDisplacedVertexSeed dv1,
const reco::PFDisplacedVertexSeed dv2 
) const
private

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

Definition at line 687 of file PFDisplacedVertexFinder.cc.

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

Referenced by mergeSeeds().

687  {
688 
689  const GlobalPoint vP1 = dv1.seedPoint();
690  const GlobalPoint vP2 = dv2.seedPoint();
691 
692  double Delta_Long = getLongDiff(vP1, vP2);
693  if (Delta_Long > longSize_) return false;
694  double Delta_Transv = getTransvDiff(vP1, vP2);
695  if (Delta_Transv > transvSize_) return false;
696  // if (Delta_Long < longSize_ && Delta_Transv < transvSize_) isCloseTo = true;
697 
698  return true;
699 
700 }
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 674 of file PFDisplacedVertexFinder.cc.

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

Referenced by selectAndLabelVertices().

674  {
675 
677  dv.setVertexType(vertexType);
678 
679  return dv.isFake();
680 
681 }
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 581 of file PFDisplacedVertexFinder.cc.

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

Referenced by findDisplacedVertices().

581  {
582 
583  if (debug_) cout << " 4.1) Reject vertices " << endl;
584 
585  for(unsigned idv = 0; idv < tempDisplacedVertices.size(); idv++){
586 
587 
588  // ---- We accept a vertex only if it is not in TOB in the barrel
589  // and not in TEC in the end caps
590  // and not too much before the first pixel layer ---- //
591 
592  const float rho = tempDisplacedVertices[idv].position().rho();
593  const float z = tempDisplacedVertices[idv].position().z();
594 
595  if (rho > tobCut_ || rho < primaryVertexCut_ || fabs(z) > tecCut_) {
596  if (debug_) cout << "Vertex " << idv
597  << " geometrically rejected #rho = " << rho
598  << " z = " << z << endl;
599 
600  bLocked[idv] = true;
601 
602  continue;
603  }
604 
605  unsigned nPrimary = tempDisplacedVertices[idv].nPrimaryTracks();
606  unsigned nMerged = tempDisplacedVertices[idv].nMergedTracks();
607  unsigned nSecondary = tempDisplacedVertices[idv].nSecondaryTracks();
608 
609  if (nPrimary + nMerged > 1) {
610  bLocked[idv] = true;
611  if (debug_) cout << "Vertex " << idv
612  << " rejected because two primary or merged tracks" << endl;
613 
614 
615  }
616 
617  if (nPrimary + nMerged + nSecondary < 2){
618  bLocked[idv] = true;
619  if (debug_) cout << "Vertex " << idv
620  << " rejected because only one track related to the vertex" << endl;
621  }
622 
623 
624  }
625 
626 
627  if (debug_) cout << " 4.2) Check for common vertices" << endl;
628 
629  // ---- Among the remaining vertex we shall remove one
630  // of those which have two common tracks ---- //
631 
632  for(unsigned idv_mother = 0; idv_mother < tempDisplacedVertices.size(); idv_mother++){
633  for(unsigned idv_daughter = idv_mother+1;
634  idv_daughter < tempDisplacedVertices.size(); idv_daughter++){
635 
636  if(!bLocked[idv_daughter] && !bLocked[idv_mother]){
637 
638  const unsigned commonTrks = commonTracks(tempDisplacedVertices[idv_daughter], tempDisplacedVertices[idv_mother]);
639 
640  if (commonTrks > 1) {
641 
642  if (debug_) cout << "Vertices " << idv_daughter << " and " << idv_mother
643  << " has many common tracks" << endl;
644 
645  // We keep the vertex vertex which contains the most of the tracks
646 
647  const int mother_size = tempDisplacedVertices[idv_mother].nTracks();
648  const int daughter_size = tempDisplacedVertices[idv_daughter].nTracks();
649 
650  if (mother_size > daughter_size) bLocked[idv_daughter] = true;
651  else if (mother_size < daughter_size) bLocked[idv_mother] = true;
652  else {
653 
654  // If they have the same size we keep the vertex with the best normalised chi2
655 
656  const float mother_normChi2 = tempDisplacedVertices[idv_mother].normalizedChi2();
657  const float daughter_normChi2 = tempDisplacedVertices[idv_daughter].normalizedChi2();
658  if (mother_normChi2 < daughter_normChi2) bLocked[idv_daughter] = true;
659  else bLocked[idv_mother] = true;
660  }
661 
662  }
663  }
664  }
665  }
666 
667  for(unsigned idv = 0; idv < tempDisplacedVertices.size(); idv++)
668  if ( !bLocked[idv] ) bLocked[idv] = rejectAndLabelVertex(tempDisplacedVertices[idv]);
669 
670 
671 }
Definition: DDAxes.h:10
bool rejectAndLabelVertex(reco::PFDisplacedVertex &dv)
bool debug_
If true, debug printouts activated.
float float float z
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:76
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 776 of file PFDisplacedVertexFinder.cc.

776  {
777 
778  if(! out) return out;
779  out << setprecision(3) << setw(5) << endl;
780  out << "" << endl;
781  out << " ====================================== " << endl;
782  out << " ====== Displaced Vertex Finder ======= " << endl;
783  out << " ====================================== " << endl;
784  out << " " << endl;
785 
786  a.helper_.Dump();
787  out << "" << endl
788  << " Adaptive Vertex Fitter parameters are :"<< endl
789  << " sigmacut = " << a.sigmacut_ << " T_ini = "
790  << a.t_ini_ << " ratio = " << a.ratio_ << endl << endl;
791 
792  const std::auto_ptr< reco::PFDisplacedVertexCollection >& displacedVertices_
793  = a.displacedVertices();
794 
795 
796  if(!displacedVertices_.get() ) {
797  out<<"displacedVertex already transfered"<<endl;
798  }
799  else{
800 
801  out<<"Number of displacedVertices found : "<< displacedVertices_->size()<<endl<<endl;
802 
803  int i = -1;
804 
805  for(PFDisplacedVertexFinder::IDV idv = displacedVertices_->begin();
806  idv != displacedVertices_->end(); idv++){
807  i++;
808  out << i << " "; idv->Dump(); out << "" << endl;
809  }
810  }
811 
812  return out;
813 }
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().