CMS 3D CMS Logo

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

#include <AdaptiveVertexReconstructor.h>

Inheritance diagram for AdaptiveVertexReconstructor:
VertexReconstructor

Public Member Functions

 AdaptiveVertexReconstructor (float primcut=2.0, float seccut=6.0, float minweight=0.5, bool smoothing=false)
 
 AdaptiveVertexReconstructor (const edm::ParameterSet &s)
 
virtual
AdaptiveVertexReconstructor
clone () const
 
std::vector< TransientVertexvertices (const std::vector< reco::TransientTrack > &v) const
 
std::vector< TransientVertexvertices (const std::vector< reco::TransientTrack > &, const reco::BeamSpot &) const
 
std::vector< TransientVertexvertices (const std::vector< reco::TransientTrack > &primaries, const std::vector< reco::TransientTrack > &tracks, const reco::BeamSpot &) const
 
 ~AdaptiveVertexReconstructor ()
 
- Public Member Functions inherited from VertexReconstructor
 VertexReconstructor ()
 
virtual ~VertexReconstructor ()
 

Private Member Functions

TransientVertex cleanUp (const TransientVertex &old) const
 
std::vector< TransientVertexcleanUpVertices (const std::vector< TransientVertex > &) const
 
void erase (const TransientVertex &newvtx, std::set< reco::TransientTrack > &remainingtrks, float w) const
 
void setupFitters (float primcut, float primT, float primr, float seccut, float secT, float secr, bool smoothing)
 
std::vector< TransientVertexvertices (const std::vector< reco::TransientTrack > &primaries, const std::vector< reco::TransientTrack > &trks, const reco::BeamSpot &, bool has_primaries, bool usespot) const
 

Private Attributes

float theMinWeight
 
AdaptiveVertexFitterthePrimaryFitter
 
AdaptiveVertexFittertheSecondaryFitter
 
float theWeightThreshold
 

Detailed Description

Definition at line 9 of file AdaptiveVertexReconstructor.h.

Constructor & Destructor Documentation

AdaptiveVertexReconstructor::AdaptiveVertexReconstructor ( float  primcut = 2.0,
float  seccut = 6.0,
float  minweight = 0.5,
bool  smoothing = false 
)

Definition at line 89 of file AdaptiveVertexReconstructor.cc.

References setupFitters().

Referenced by clone().

90  :
92  theMinWeight( min_weight ), theWeightThreshold ( 0.001 )
93 {
94  setupFitters ( primcut, 256., 0.25, seccut, 256., 0.25, smoothing );
95 }
void setupFitters(float primcut, float primT, float primr, float seccut, float secT, float secr, bool smoothing)
AdaptiveVertexFitter * theSecondaryFitter
AdaptiveVertexReconstructor::~AdaptiveVertexReconstructor ( )

Definition at line 97 of file AdaptiveVertexReconstructor.cc.

References thePrimaryFitter, and theSecondaryFitter.

98 {
99  if ( thePrimaryFitter ) delete thePrimaryFitter;
101 }
AdaptiveVertexFitter * theSecondaryFitter
AdaptiveVertexReconstructor::AdaptiveVertexReconstructor ( const edm::ParameterSet s)

The ParameterSet should have the following defined: double primcut double seccut double minweight for descriptions see

Definition at line 136 of file AdaptiveVertexReconstructor.cc.

References edm::ParameterSet::getParameter(), setupFitters(), theMinWeight, theWeightThreshold, and cms::Exception::what().

138 {
139  float primcut = 2.0;
140  float seccut = 6.0;
141  bool smoothing=false;
142  // float primT = 4096.;
143  // float primr = 0.125;
144  float primT = 256.;
145  float primr = 0.25;
146  float secT = 256.;
147  float secr = 0.25;
148 
149  try {
150  primcut = m.getParameter<double>("primcut");
151  primT = m.getParameter<double>("primT");
152  primr = m.getParameter<double>("primr");
153  seccut = m.getParameter<double>("seccut");
154  secT = m.getParameter<double>("secT");
155  secr = m.getParameter<double>("secr");
156  theMinWeight = m.getParameter<double>("minweight");
157  theWeightThreshold = m.getParameter<double>("weightthreshold");
158  smoothing = m.getParameter<bool>("smoothing");
159  } catch ( edm::Exception & e ) {
160  edm::LogError ("AdaptiveVertexReconstructor") << e.what();
161  }
162 
163  setupFitters ( primcut, primT, primr, seccut, secT, secr, smoothing );
164 }
virtual char const * what() const
Definition: Exception.cc:97
void setupFitters(float primcut, float primT, float primr, float seccut, float secT, float secr, bool smoothing)
AdaptiveVertexFitter * theSecondaryFitter

Member Function Documentation

TransientVertex AdaptiveVertexReconstructor::cleanUp ( const TransientVertex old) const
private

Definition at line 11 of file AdaptiveVertexReconstructor.cc.

References TransientVertex::degreesOfFreedom(), TransientVertex::hasPrior(), TransientVertex::hasRefittedTracks(), i, TransientVertex::originalTracks(), TransientVertex::priorError(), TransientVertex::priorPosition(), TransientVertex::refittedTracks(), runTheMatrix::ret, TransientVertex::totalChiSquared(), TransientVertex::trackWeight(), TransientVertex::vertexState(), and TransientVertex::weightMap().

Referenced by vertices().

12 {
13  vector < reco::TransientTrack > trks = old.originalTracks();
14  vector < reco::TransientTrack > newtrks;
16  static const float minweight = 1.e-8; // discard all tracks with lower weight
17  for ( vector< reco::TransientTrack >::const_iterator i=trks.begin();
18  i!=trks.end() ; ++i )
19  {
20  if ( old.trackWeight ( *i ) > minweight )
21  {
22  newtrks.push_back ( *i );
23  mp[*i]=old.trackWeight ( *i );
24  }
25  }
26 
28 
29  if ( old.hasPrior() )
30  {
31  VertexState priorstate ( old.priorPosition(), old.priorError() );
32  ret=TransientVertex ( priorstate, old.vertexState(), newtrks,
33  old.totalChiSquared(), old.degreesOfFreedom() );
34  } else {
35  ret=TransientVertex ( old.vertexState(), newtrks,
36  old.totalChiSquared(), old.degreesOfFreedom() );
37  }
38  ret.weightMap ( mp ); // set weight map
39 
40  if ( old.hasRefittedTracks() )
41  {
42  // we have refitted tracks -- copy them!
43  vector < reco::TransientTrack > newrfs;
44  vector < reco::TransientTrack > oldrfs=old.refittedTracks();
45  vector < reco::TransientTrack >::const_iterator origtrkiter=trks.begin();
46  for ( vector< reco::TransientTrack >::const_iterator i=oldrfs.begin(); i!=oldrfs.end() ; ++i )
47  {
48  if ( old.trackWeight ( *origtrkiter ) > minweight )
49  {
50  newrfs.push_back ( *i );
51  }
52  origtrkiter++;
53  }
54  if ( newrfs.size() ) ret.refittedTracks ( newrfs ); // copy refitted tracks
55  }
56 
57  if ( ret.refittedTracks().size() > ret.originalTracks().size() )
58  {
59  edm::LogError("AdaptiveVertexReconstructor" )
60  << "More refitted tracks than original tracks!";
61  }
62 
63  return ret;
64 }
int i
Definition: DBlmapReader.cc:9
GlobalError priorError() const
float totalChiSquared() const
std::map< reco::TransientTrack, float > TransientTrackToFloatMap
bool hasRefittedTracks() const
std::vector< reco::TransientTrack > originalTracks() const
float degreesOfFreedom() const
bool hasPrior() const
VertexState vertexState() const
float trackWeight(const reco::TransientTrack &track) const
std::vector< reco::TransientTrack > refittedTracks() const
GlobalPoint priorPosition() const
TransientTrackToFloatMap weightMap() const
vector< TransientVertex > AdaptiveVertexReconstructor::cleanUpVertices ( const std::vector< TransientVertex > &  old) const
private

cleanup reconstructed vertices. discard all with too few significant tracks.

Definition at line 268 of file AdaptiveVertexReconstructor.cc.

References i, runTheMatrix::ret, and theWeightThreshold.

Referenced by vertices().

270 {
271  vector < TransientVertex > ret;
272  for ( vector< TransientVertex >::const_iterator i=old.begin(); i!=old.end() ; ++i )
273  {
274  if (!(i->hasTrackWeight()))
275  { // if we dont have track weights, we take the vtx
276  ret.push_back ( *i );
277  continue;
278  }
279 
280  // maybe this should be replaced with asking for the ndf ...
281  // e.g. if ( ndf > - 1. )
282  int nsig=0; // number of significant tracks.
284  for ( TransientVertex::TransientTrackToFloatMap::const_iterator w=wm.begin(); w!=wm.end() ; ++w )
285  {
286  if (w->second > theWeightThreshold) nsig++;
287  }
288  if ( nsig > 1 ) ret.push_back ( *i );
289  }
290 
291  return ret;
292 }
int i
Definition: DBlmapReader.cc:9
std::map< reco::TransientTrack, float > TransientTrackToFloatMap
virtual AdaptiveVertexReconstructor* AdaptiveVertexReconstructor::clone ( void  ) const
inlinevirtual

Implements VertexReconstructor.

Definition at line 45 of file AdaptiveVertexReconstructor.h.

References AdaptiveVertexReconstructor().

45  {
46  return new AdaptiveVertexReconstructor( * this );
47  }
AdaptiveVertexReconstructor(float primcut=2.0, float seccut=6.0, float minweight=0.5, bool smoothing=false)
void AdaptiveVertexReconstructor::erase ( const TransientVertex newvtx,
std::set< reco::TransientTrack > &  remainingtrks,
float  w 
) const
private

contrary to what its name has you believe, ::erase removes all newvtx.originalTracks() above theMinWeight from remainingtrks.

Definition at line 66 of file AdaptiveVertexReconstructor.cc.

References i, TransientVertex::originalTracks(), TransientVertex::trackWeight(), and CommonMethods::weight().

Referenced by vertices().

70 {
71  /*
72  * Erase tracks that are in newvtx from remainingtrks
73  * But erase only if trackweight > w
74  */
75  const vector < reco::TransientTrack > & origtrks = newvtx.originalTracks();
76  bool erased=false;
77  for ( vector< reco::TransientTrack >::const_iterator i=origtrks.begin();
78  i!=origtrks.end(); ++i )
79  {
80  double weight = newvtx.trackWeight ( *i );
81  if ( weight > w )
82  {
83  remainingtrks.erase ( *i );
84  erased=true;
85  };
86  };
87 }
int i
Definition: DBlmapReader.cc:9
std::vector< reco::TransientTrack > originalTracks() const
float trackWeight(const reco::TransientTrack &track) const
void AdaptiveVertexReconstructor::setupFitters ( float  primcut,
float  primT,
float  primr,
float  seccut,
float  secT,
float  secr,
bool  smoothing 
)
private

setup the vertex fitters.

Definition at line 103 of file AdaptiveVertexReconstructor.cc.

References AdaptiveVertexFitter::setWeightThreshold(), thePrimaryFitter, theSecondaryFitter, and theWeightThreshold.

Referenced by AdaptiveVertexReconstructor().

106 {
107  VertexSmoother<5> * smoother ;
108  if ( smoothing )
109  {
110  smoother = new KalmanVertexSmoother();
111  } else {
112  smoother = new DummyVertexSmoother<5>();
113  }
114 
115  if ( thePrimaryFitter ) delete thePrimaryFitter;
117 
118  /*
119  edm::LogError ("AdaptiveVertexReconstructor" )
120  << "Tini and r are hardcoded now!";
121  */
125  // if the primary fails, sth is wrong, so here we set a threshold on the weight.
130  // need to set it or else we have
131  // unwanted exceptions to deal with.
132  // cleanup can come later!
133  delete smoother;
134 }
AdaptiveVertexFitter * theSecondaryFitter
vector< TransientVertex > AdaptiveVertexReconstructor::vertices ( const std::vector< reco::TransientTrack > &  ) const
virtual

Reconstruct vertices

Implements VertexReconstructor.

Definition at line 181 of file AdaptiveVertexReconstructor.cc.

Referenced by vertices().

183 {
184  return vertices ( vector<reco::TransientTrack>(), tracks, reco::BeamSpot(),
185  false, false );
186 }
std::vector< TransientVertex > vertices(const std::vector< reco::TransientTrack > &v) const
tuple tracks
Definition: testEve_cfg.py:39
vector< TransientVertex > AdaptiveVertexReconstructor::vertices ( const std::vector< reco::TransientTrack > &  t,
const reco::BeamSpot  
) const
virtual

Reconstruct vertices, exploiting the beamspot constraint for the primary vertex

Reimplemented from VertexReconstructor.

Definition at line 167 of file AdaptiveVertexReconstructor.cc.

References vertices().

169 {
170  return vertices ( vector<reco::TransientTrack>(), t, s, false, true );
171 }
std::vector< TransientVertex > vertices(const std::vector< reco::TransientTrack > &v) const
string s
Definition: asciidump.py:422
vector< TransientVertex > AdaptiveVertexReconstructor::vertices ( const std::vector< reco::TransientTrack > &  primaries,
const std::vector< reco::TransientTrack > &  tracks,
const reco::BeamSpot spot 
) const
virtual

Reconstruct vertices, but exploit the fact that you know that some tracks cannot come from a secondary vertex. primaries Tracks that cannot come from a secondary vertex (but can, in principle, be non-primaries, also). tracks These are the tracks that are of unknown origin. These tracks are subjected to pattern recognition. spot A beamspot constraint is mandatory in this method.

Reimplemented from VertexReconstructor.

Definition at line 174 of file AdaptiveVertexReconstructor.cc.

References vertices().

176 {
177  return vertices ( primaries, tracks, s, true, true );
178 }
std::vector< TransientVertex > vertices(const std::vector< reco::TransientTrack > &v) const
tuple tracks
Definition: testEve_cfg.py:39
string s
Definition: asciidump.py:422
vector< TransientVertex > AdaptiveVertexReconstructor::vertices ( const std::vector< reco::TransientTrack > &  primaries,
const std::vector< reco::TransientTrack > &  trks,
const reco::BeamSpot s,
bool  has_primaries,
bool  usespot 
) const
private

the actual fit to avoid code duplication

Definition at line 188 of file AdaptiveVertexReconstructor.cc.

References cleanUp(), cleanUpVertices(), filterCSVwithJSON::copy, erase(), LogDebug, runTheMatrix::ret, theMinWeight, thePrimaryFitter, theSecondaryFitter, v, and AdaptiveVertexFitter::vertex().

192 {
193  vector < TransientVertex > ret;
194  set < reco::TransientTrack > remainingtrks;
195 
196  copy(tracks.begin(), tracks.end(),
197  inserter(remainingtrks, remainingtrks.begin()));
198 
199  int ctr=0;
200  unsigned int n_tracks = remainingtrks.size();
201 
202  // cout << "[AdaptiveVertexReconstructor] DEBUG ::vertices!!" << endl;
203  try {
204  while ( remainingtrks.size() > 1 )
205  {
206  /*
207  cout << "[AdaptiveVertexReconstructor] next round: "
208  << remainingtrks.size() << endl;
209  */
210  ctr++;
211  const AdaptiveVertexFitter * fitter = theSecondaryFitter;
212  if ( ret.size() == 0 )
213  {
214  fitter = thePrimaryFitter;
215  };
216  vector < reco::TransientTrack > fittrks;
217  fittrks.reserve ( remainingtrks.size() );
218 
219  copy(remainingtrks.begin(), remainingtrks.end(), back_inserter(fittrks));
220 
221  TransientVertex tmpvtx;
222  if ( (ret.size() == 0) && has_primaries )
223  {
224  // add the primaries to the fitted tracks.
225  copy ( primaries.begin(), primaries.end(), back_inserter(fittrks) );
226  }
227  if ( (ret.size() == 0) && usespot )
228  {
229  tmpvtx=fitter->vertex ( fittrks, s );
230  } else {
231  tmpvtx=fitter->vertex ( fittrks );
232  }
233  TransientVertex newvtx = cleanUp ( tmpvtx );
234  ret.push_back ( newvtx );
235  erase ( newvtx, remainingtrks, theMinWeight );
236  if ( n_tracks == remainingtrks.size() )
237  {
238  if ( usespot )
239  {
240  // try once more without beamspot constraint!
241  usespot=false;
242  LogDebug("AdaptiveVertexReconstructor")
243  << "no tracks in vertex. trying again without beamspot constraint!";
244  continue;
245  }
246  LogDebug("AdaptiveVertexReconstructor") << "all tracks (" << n_tracks
247  << ") would be recycled for next fit. Trying with low threshold!";
248  erase ( newvtx, remainingtrks, 1.e-5 );
249  if ( n_tracks == remainingtrks.size() )
250  {
251  LogDebug("AdaptiveVertexReconstructor") << "low threshold didnt help! "
252  << "Discontinue procedure!";
253  break;
254  }
255  };
256 
257  // cout << "[AdaptiveVertexReconstructor] erased" << endl;
258  n_tracks = remainingtrks.size();
259  };
260  } catch ( VertexException & v ) {
261  // Will catch all (not enough significant tracks exceptions.
262  // in this case, the iteration can safely terminate.
263  };
264 
265  return cleanUpVertices ( ret );
266 }
#define LogDebug(id)
TransientVertex cleanUp(const TransientVertex &old) const
Common base class.
virtual CachingVertex< 5 > vertex(const std::vector< reco::TransientTrack > &) const
std::vector< TransientVertex > cleanUpVertices(const std::vector< TransientVertex > &) const
AdaptiveVertexFitter * theSecondaryFitter
tuple tracks
Definition: testEve_cfg.py:39
void erase(const TransientVertex &newvtx, std::set< reco::TransientTrack > &remainingtrks, float w) const
mathSSE::Vec4< T > v

Member Data Documentation

float AdaptiveVertexReconstructor::theMinWeight
private

Definition at line 84 of file AdaptiveVertexReconstructor.h.

Referenced by AdaptiveVertexReconstructor(), and vertices().

AdaptiveVertexFitter* AdaptiveVertexReconstructor::thePrimaryFitter
private
AdaptiveVertexFitter* AdaptiveVertexReconstructor::theSecondaryFitter
private
float AdaptiveVertexReconstructor::theWeightThreshold
private