14 vector < reco::TransientTrack > newtrks;
16 static const float minweight = 1.e-8;
17 for ( vector< reco::TransientTrack >::const_iterator
i=trks.begin();
22 newtrks.push_back ( *
i );
43 vector < reco::TransientTrack > newrfs;
45 vector < reco::TransientTrack >::const_iterator origtrkiter=trks.begin();
46 for ( vector< reco::TransientTrack >::const_iterator
i=oldrfs.begin();
i!=oldrfs.end() ; ++
i )
50 newrfs.push_back ( *
i );
60 <<
"More refitted tracks than original tracks!";
68 set < reco::TransientTrack > & remainingtrks,
75 const vector < reco::TransientTrack > & origtrks = newvtx.
originalTracks();
77 for ( vector< reco::TransientTrack >::const_iterator
i=origtrks.begin();
78 i!=origtrks.end(); ++
i )
83 remainingtrks.erase ( *
i );
90 float primcut,
float seccut,
float min_weight,
bool smoothing ) :
91 thePrimaryFitter ( 0 ), theSecondaryFitter ( 0 ),
92 theMinWeight( min_weight ), theWeightThreshold ( 0.001 )
94 setupFitters ( primcut, 256., 0.25, seccut, 256., 0.25, smoothing );
104 float primT,
float primr,
float seccut,
float secT,
105 float secr,
bool smoothing )
137 : thePrimaryFitter(0), theSecondaryFitter(0), theMinWeight(0.5), theWeightThreshold ( 0.001 )
141 bool smoothing=
false;
163 setupFitters ( primcut, primT, primr, seccut, secT, secr, smoothing );
166 vector<TransientVertex>
170 return vertices ( vector<reco::TransientTrack>(), t, s,
false,
true );
173 vector<TransientVertex>
177 return vertices ( primaries, tracks, s,
true,
true );
182 const vector<reco::TransientTrack> &
tracks )
const
189 const vector<reco::TransientTrack> & primaries,
190 const vector<reco::TransientTrack> &
tracks,
193 vector < TransientVertex >
ret;
194 set < reco::TransientTrack > remainingtrks;
196 copy(tracks.begin(), tracks.end(),
197 inserter(remainingtrks, remainingtrks.begin()));
200 unsigned int n_tracks = remainingtrks.size();
204 while ( remainingtrks.size() > 1 )
212 if ( ret.size() == 0 )
216 vector < reco::TransientTrack > fittrks;
217 fittrks.reserve ( remainingtrks.size() );
219 copy(remainingtrks.begin(), remainingtrks.end(), back_inserter(fittrks));
222 if ( (ret.size() == 0) && has_primaries )
225 copy ( primaries.begin(), primaries.end(), back_inserter(fittrks) );
227 if ( (ret.size() == 0) && usespot )
229 tmpvtx=fitter->
vertex ( fittrks, s );
231 tmpvtx=fitter->
vertex ( fittrks );
234 ret.push_back ( newvtx );
236 if ( n_tracks == remainingtrks.size() )
242 LogDebug(
"AdaptiveVertexReconstructor")
243 <<
"no tracks in vertex. trying again without beamspot constraint!";
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() )
251 LogDebug(
"AdaptiveVertexReconstructor") <<
"low threshold didnt help! "
252 <<
"Discontinue procedure!";
258 n_tracks = remainingtrks.size();
269 const vector < TransientVertex > & old )
const
271 vector < TransientVertex >
ret;
272 for ( vector< TransientVertex >::const_iterator
i=old.begin();
i!=old.end() ; ++
i )
274 if (!(
i->hasTrackWeight()))
276 ret.push_back ( *
i );
284 for ( TransientVertex::TransientTrackToFloatMap::const_iterator w=wm.begin(); w!=wm.end() ; ++w )
288 if ( nsig > 1 ) ret.push_back ( *
i );
virtual char const * what() const
AdaptiveVertexReconstructor(float primcut=2.0, float seccut=6.0, float minweight=0.5, bool smoothing=false)
T getParameter(std::string const &) const
GlobalError priorError() const
TransientVertex cleanUp(const TransientVertex &old) const
float totalChiSquared() const
std::map< reco::TransientTrack, float > TransientTrackToFloatMap
AdaptiveVertexFitter * thePrimaryFitter
bool hasRefittedTracks() const
~AdaptiveVertexReconstructor()
std::vector< reco::TransientTrack > originalTracks() const
void setupFitters(float primcut, float primT, float primr, float seccut, float secT, float secr, bool smoothing)
void setWeightThreshold(float w)
float degreesOfFreedom() const
std::vector< TransientVertex > vertices(const std::vector< reco::TransientTrack > &v) const
virtual CachingVertex< 5 > vertex(const std::vector< reco::TransientTrack > &) const
std::vector< TransientVertex > cleanUpVertices(const std::vector< TransientVertex > &) const
VertexState vertexState() const
AdaptiveVertexFitter * theSecondaryFitter
float trackWeight(const reco::TransientTrack &track) const
std::vector< reco::TransientTrack > refittedTracks() const
GlobalPoint priorPosition() const
void erase(const TransientVertex &newvtx, std::set< reco::TransientTrack > &remainingtrks, float w) const
TransientTrackToFloatMap weightMap() const