CMS 3D CMS Logo

MultiVertexFitter Class Reference

fits n vertices in parallel, associating weights for every track-vertex std::pair. More...

#include <RecoVertex/MultiVertexFit/interface/MultiVertexFitter.h>

List of all members.

Public Types

typedef std::map< int, double > SeedToWeightMap
typedef std::map
< reco::TransientTrack,
SeedToWeightMap
TrackAndSeedToWeightMap
typedef std::pair
< reco::TransientTrack, float > 
TrackAndWeight

Public Member Functions

 MultiVertexFitter (const MultiVertexFitter &)
 MultiVertexFitter (const AnnealingSchedule &sched=DefaultMVFAnnealing(), const LinearizationPointFinder &seeder=DefaultLinearizationPointFinder(), float revive_below=-1.)
std::vector< CachingVertex< 5 > > vertices (const std::vector< TransientVertex > &, const std::vector< reco::TransientTrack > &primaries=std::vector< reco::TransientTrack >())
 Same as above.
std::vector< CachingVertex< 5 > > vertices (const std::vector< CachingVertex< 5 > > &, const std::vector< reco::TransientTrack > &primaries=std::vector< reco::TransientTrack >())
 Supply full CachingVertices; CachingVertices are the first seeds.
std::vector< CachingVertex< 5 > > vertices (const std::vector< std::vector< TrackAndWeight > > &, const std::vector< reco::TransientTrack > &primaries=std::vector< reco::TransientTrack >())
 Supply clusters of tracks with weights, association weights of the other vertices is considered zero.
std::vector< CachingVertex< 5 > > vertices (const std::vector< std::vector< reco::TransientTrack > > &, const std::vector< reco::TransientTrack > &primaries=std::vector< reco::TransientTrack >())
 Supply simple clusters of reco::TransientTracks.
 ~MultiVertexFitter ()

Private Types

typedef
ReferenceCountingPointer
< LinearizedTrackState< 5 > > 
RefCountedLinearizedTrackState
typedef CachingVertex
< 5 >::RefCountedVertexTrack 
RefCountedVertexTrack

Private Member Functions

void clear ()
void createPrimaries (const std::vector< reco::TransientTrack > tracks)
void createSeed (const std::vector< TrackAndWeight > &tracks)
void createSeed (const std::vector< reco::TransientTrack > &tracks)
std::vector< CachingVertex< 5 > > fit ()
void lostVertexClaimer ()
void printSeeds () const
void printWeights (const reco::TransientTrack &) const
void printWeights () const
void resetSeedNr ()
int seedNr ()
bool updateSeeds ()
void updateWeights ()

Private Attributes

AnnealingScheduletheAssComp
LinTrackCache theCache
std::set< reco::TransientTrackthePrimaries
float theReviveBelow
LinearizationPointFindertheSeeder
std::vector< reco::TransientTracktheTracks
int theVertexStateNr
std::vector< std::pair< int,
CachingVertex< 5 > > > 
theVertexStates
TrackAndSeedToWeightMap theWeights


Detailed Description

fits n vertices in parallel, associating weights for every track-vertex std::pair.

The special constructor's arguments take precedence over the SimpleConfigurables.

SimpleConfigurables:

MultiVertexFitter:Debug = 0 MultiVertexFitter:DisplacementLimit = 0.00001 MultiVertexFitter:MaxIterations = 30 MultiVertexFitter:ClaimLostVertices = true MultiVertexFitter:MinimumWeightFraction = 1e-6 MultiVertexFitter:ReviveBelow = 0.3 MultiVertexFitter:DiscardLightWeights = true

Definition at line 15 of file MultiVertexFitter.h.


Member Typedef Documentation

typedef ReferenceCountingPointer<LinearizedTrackState<5> > MultiVertexFitter::RefCountedLinearizedTrackState [private]

Definition at line 106 of file MultiVertexFitter.h.

typedef CachingVertex<5>::RefCountedVertexTrack MultiVertexFitter::RefCountedVertexTrack [private]

Definition at line 105 of file MultiVertexFitter.h.

typedef std::map< int , double > MultiVertexFitter::SeedToWeightMap

Definition at line 44 of file MultiVertexFitter.h.

typedef std::map< reco::TransientTrack, SeedToWeightMap > MultiVertexFitter::TrackAndSeedToWeightMap

Definition at line 45 of file MultiVertexFitter.h.

typedef std::pair< reco::TransientTrack, float > MultiVertexFitter::TrackAndWeight

Definition at line 43 of file MultiVertexFitter.h.


Constructor & Destructor Documentation

MultiVertexFitter::MultiVertexFitter ( const AnnealingSchedule sched = DefaultMVFAnnealing(),
const LinearizationPointFinder seeder = DefaultLinearizationPointFinder(),
float  revive_below = -1. 
)

Definition at line 335 of file MultiVertexFitter.cc.

00337                                                            :
00338     theVertexStateNr ( 0 ), theReviveBelow ( revive_below ),
00339     theAssComp ( ann.clone() ), theSeeder ( seeder.clone() )
00340 {}

MultiVertexFitter::MultiVertexFitter ( const MultiVertexFitter o  ) 

Definition at line 342 of file MultiVertexFitter.cc.

00342                                                                   :
00343     theVertexStateNr ( o.theVertexStateNr ), theReviveBelow ( o.theReviveBelow ),
00344     theAssComp ( o.theAssComp->clone() ), theSeeder ( o.theSeeder->clone() )
00345 {}

MultiVertexFitter::~MultiVertexFitter (  ) 

Definition at line 347 of file MultiVertexFitter.cc.

References theAssComp, and theSeeder.

00348 {
00349   delete theAssComp;
00350   delete theSeeder;
00351 }


Member Function Documentation

void MultiVertexFitter::clear ( void   )  [private]

Definition at line 89 of file MultiVertexFitter.cc.

References LinTrackCache::clear(), AnnealingSchedule::resetAnnealing(), theAssComp, theCache, thePrimaries, theTracks, theVertexStates, and theWeights.

00090 {
00091   theAssComp->resetAnnealing();
00092   theTracks.clear();
00093   thePrimaries.clear();
00094   theVertexStates.clear();
00095   theWeights.clear();
00096   theCache.clear();
00097 }

void MultiVertexFitter::createPrimaries ( const std::vector< reco::TransientTrack tracks  )  [private]

void MultiVertexFitter::createSeed ( const std::vector< TrackAndWeight > &  tracks  )  [private]

void MultiVertexFitter::createSeed ( const std::vector< reco::TransientTrack > &  tracks  )  [private]

vector< CachingVertex< 5 > > MultiVertexFitter::fit (  )  [private]

Definition at line 581 of file MultiVertexFitter.cc.

References AnnealingSchedule::anneal(), GenMuonPlsPt100GeV_cfg::cout, lat::endl(), i, AnnealingSchedule::isAnnealed(), printWeights(), resetSeedNr(), theAssComp, theVertexStates, updateSeeds(), and verbose.

00582 {
00583   if ( verbose() & 2 ) printWeights();
00584   int ctr=1;
00585   static const int ctr_max = 50; /* SimpleConfigurable<int>(100,
00586       "MultiVertexFitter:MaxIterations").value(); */
00587   while ( updateSeeds() || !(theAssComp->isAnnealed()) )
00588   {
00589     if ( ++ctr >= ctr_max ) break;
00590     theAssComp->anneal();
00591     // lostVertexClaimer(); // was a silly(?) idea to "revive" vertex candidates.
00592     resetSeedNr();
00593   };
00594 
00595   if ( verbose() )
00596   {
00597     cout << "[MultiVertexFitter] number of iterations: " << ctr << endl;
00598     cout << "[MultiVertexFitter] remaining seeds: "
00599          << theVertexStates.size() << endl;
00600     printWeights();
00601   };
00602 
00603   vector < CachingVertex<5> > ret;
00604   for ( vector< pair < int, CachingVertex<5> > >::const_iterator 
00605         i=theVertexStates.begin(); i!=theVertexStates.end() ; ++i )
00606   {
00607     ret.push_back ( i->second );
00608   };
00609 
00610   return ret;
00611 }

void MultiVertexFitter::lostVertexClaimer (  )  [private]

Definition at line 652 of file MultiVertexFitter.cc.

References GenMuonPlsPt100GeV_cfg::cout, lat::endl(), i, printWeights(), theReviveBelow, theTracks, theVertexStates, theWeights, and verbose.

00653 {
00654   if ( !theReviveBelow < 0. ) return;
00655   // this experimental method is used to get almost lost vertices
00656   // back into the play by upweighting vertices with very low total weights
00657 
00658   bool has_revived = false;
00659   // find out about total weight
00660   for ( vector< pair < int, CachingVertex<5> > >::const_iterator i=theVertexStates.begin();
00661         i!=theVertexStates.end() ; ++i )
00662   {
00663     double totweight=0.;
00664     for ( vector< TransientTrack >::const_iterator trk=theTracks.begin();
00665           trk!=theTracks.end() ; ++trk )
00666     {
00667       totweight+=theWeights[*trk][i->first];
00668     };
00669 
00670     /*
00671     cout << "[MultiVertexFitter] vertex seed " << TransientVertexNamer().name(*i)
00672          << " total weight=" << totweight << endl;*/
00673 
00674     if ( totweight < theReviveBelow && totweight > 0.0 )
00675     {
00676       cout << "[MultiVertexFitter] now trying to revive vertex"
00677            << " revive_below=" << theReviveBelow << endl;
00678       has_revived=true;
00679       for ( vector< TransientTrack >::const_iterator trk=theTracks.begin();
00680             trk!=theTracks.end() ; ++trk )
00681       {
00682         theWeights[*trk][i->first]/=totweight;
00683       };
00684     };
00685   };
00686   if ( has_revived && verbose() ) printWeights();
00687 }

void MultiVertexFitter::printSeeds (  )  const [private]

Definition at line 640 of file MultiVertexFitter.cc.

References GenMuonPlsPt100GeV_cfg::cout, and lat::endl().

Referenced by updateSeeds().

00641 {
00642   cout << endl << "Seed table: " << endl << "=====================" << endl;
00643   /*
00644   for ( vector < pair < int, CachingVertex<5> > >::const_iterator seed=theVertexStates.begin();
00645         seed!=theVertexStates.end(); ++seed )
00646   {
00647     cout << "  Vertex[" << TransientVertexNamer().name(seed->second) << "] at "
00648          << seed->second.position() << endl;
00649   };*/
00650 }

void MultiVertexFitter::printWeights ( const reco::TransientTrack t  )  const [private]

Definition at line 613 of file MultiVertexFitter.cc.

References GenMuonPlsPt100GeV_cfg::cout, lat::endl(), theVertexStates, and theWeights.

00614 {
00615     // cout << "Trk " << t.id();
00616     for ( vector < pair < int, CachingVertex<5> > >::const_iterator seed=theVertexStates.begin();
00617           seed!=theVertexStates.end(); ++seed )
00618     {
00619       cout << "  -- Vertex[" << seed->first << "] with " << setw(12)
00620            << setprecision(3) << theWeights[t][seed->first];
00621     };
00622     cout << endl;
00623 }

void MultiVertexFitter::printWeights (  )  const [private]

Definition at line 625 of file MultiVertexFitter.cc.

References GenMuonPlsPt100GeV_cfg::cout, lat::endl(), thePrimaries, and theTracks.

Referenced by fit(), lostVertexClaimer(), and updateWeights().

00626 {
00627   cout << endl << "Weight table: " << endl << "=================" << endl;
00628   for ( set < TransientTrack >::const_iterator trk=thePrimaries.begin();
00629         trk!=thePrimaries.end() ; ++trk )
00630   {
00631     printWeights ( *trk );
00632   };
00633   for ( vector< TransientTrack >::const_iterator trk=theTracks.begin();
00634         trk!=theTracks.end() ; ++trk )
00635   {
00636     printWeights ( *trk );
00637   };
00638 }

void MultiVertexFitter::resetSeedNr (  )  [private]

Definition at line 136 of file MultiVertexFitter.cc.

References theVertexStateNr.

Referenced by fit().

00137 {
00138   theVertexStateNr=0;
00139 }

int MultiVertexFitter::seedNr (  )  [private]

Definition at line 131 of file MultiVertexFitter.cc.

References theVertexStateNr.

Referenced by updateSeeds().

00132 {
00133   return theVertexStateNr++;
00134 }

bool MultiVertexFitter::updateSeeds (  )  [private]

Definition at line 436 of file MultiVertexFitter.cc.

References GenMuonPlsPt100GeV_cfg::cout, discardLightWeights(), e, lat::endl(), exception, file, i, LinTrackCache::linTrack(), muonGeometry::mag(), minWeightFraction(), CachingVertex< N >::position(), printSeeds(), seedNr(), theCache, thePrimaries, theTracks, theVertexStates, theWeights, track, updateWeights(), validWeight(), verbose, KalmanVertexFitter::vertex(), and VertexTrackFactory< N >::vertexTrack().

Referenced by fit().

00437 {
00438   double max_disp=0.;
00439   // need to fit with the right weights.
00440   // also trigger an updateWeights.
00441   // if the seeds dont move much we return true
00442 
00443   vector < pair < int, CachingVertex<5> > > newSeeds;
00444 
00445   for ( vector< pair < int, CachingVertex<5> > >::const_iterator seed=theVertexStates.begin();
00446         seed!=theVertexStates.end() ; ++seed )
00447   {
00448     // for each seed get the tracks with the right weights.
00449     // TransientVertex rv = seed->second;
00450     // const GlobalPoint & seedpos = seed->second.position();
00451     int snr = seed->first;
00452     VertexState realseed ( seed->second.position(), seed->second.error() );
00453 
00454     double totweight=0.;
00455     for ( vector< TransientTrack >::const_iterator track=theTracks.begin();
00456           track!=theTracks.end() ; ++track )
00457     {
00458       totweight+=theWeights[*track][snr];
00459     };
00460 
00461 
00462     int nr_good_trks=0; // how many tracks above weight limit
00463     // we count those tracks, because that way
00464     // we can discard lightweights if there are enough tracks
00465     // and not discard the lightweights if that would give us
00466     // fewer than two tracks ( we would loose a seed, then ).
00467     if ( discardLightWeights() )
00468     {
00469       for ( vector< TransientTrack >::const_iterator track=theTracks.begin();
00470             track!=theTracks.end() ; ++track )
00471       {
00472         if ( theWeights[*track][snr] > totweight * minWeightFraction() )
00473         {
00474           nr_good_trks++;
00475         };
00476       };
00477     };
00478 
00479     vector<RefCountedVertexTrack> newTracks;
00480     for ( vector< TransientTrack >::const_iterator track=theTracks.begin();
00481           track!=theTracks.end() ; ++track )
00482     {
00483       double weight = validWeight ( theWeights[*track][snr] );
00484       // Now we add a track, if
00485       // a. we consider all tracks or
00486       // b. we discard the lightweights but the track's weight is high enough or
00487       // c. we discard the lightweights but there arent enough good tracks,
00488       //    so we add all lightweights again (too expensive to figure out
00489       //    which lightweights are the most important)
00490       if ( !discardLightWeights() || weight > minWeightFraction() * totweight
00491            || nr_good_trks < 2 )
00492       {
00493         // if the linearization point didnt move too much,
00494         // we take the old LinTrackState.
00495         // Otherwise we relinearize.
00496 
00497         RefCountedLinearizedTrackState lTrData =
00498           theCache.linTrack ( seed->second.position(), *track );
00499 
00500         VertexTrackFactory<5> vTrackFactory;
00501         RefCountedVertexTrack vTrData = vTrackFactory.vertexTrack(
00502           lTrData, realseed, weight );
00503         newTracks.push_back ( vTrData );
00504       };
00505     };
00506 
00507     for ( set< TransientTrack >::const_iterator track=thePrimaries.begin();
00508           track!=thePrimaries.end() ; ++track )
00509     {
00510       double weight = validWeight ( theWeights[*track][snr] );
00511 
00512       RefCountedLinearizedTrackState lTrData =
00513         theCache.linTrack ( seed->second.position(), *track );
00514 
00515       VertexTrackFactory<5> vTrackFactory;
00516       RefCountedVertexTrack vTrData = vTrackFactory.vertexTrack(
00517         lTrData, realseed, weight );
00518       newTracks.push_back ( vTrData );
00519 
00520     };
00521 
00522     try {
00523       if ( newTracks.size() < 2 )
00524       {
00525         throw VertexException("less than two tracks in vector" );
00526       };
00527 
00528       if ( verbose() )
00529       {
00530         cout << "[MultiVertexFitter] now fitting with Kalman: ";
00531         for ( vector< RefCountedVertexTrack >::const_iterator i=newTracks.begin(); 
00532               i!=newTracks.end() ; ++i )
00533         {
00534           cout << (**i).weight() << " ";
00535         };
00536         cout << endl;
00537       };
00538 
00539       if ( newTracks.size() > 1 )
00540       {
00541         KalmanVertexFitter fitter;
00542         // warning! first track determines lin pt!
00543         CachingVertex<5> newVertex = fitter.vertex ( newTracks );
00544         int snr = seedNr();
00545         double disp = ( newVertex.position() - seed->second.position() ).mag();
00546         if ( disp > max_disp ) max_disp = disp;
00547         newSeeds.push_back ( 
00548             pair < int, CachingVertex<5> > ( snr, newVertex ) );
00549       };
00550     } catch ( exception & e )
00551     {
00552       cout << "[MultiVertexFitter] exception: " << e.what() << endl;
00553     }
00554   };
00555 
00556   // now discard all old seeds and weights, compute new ones.
00557   theVertexStates.clear();
00558   theWeights.clear();
00559   theVertexStates=newSeeds;
00560   #ifdef MVFHarvestingDebug
00561   for ( vector< CachingVertex<5> >::const_iterator i=theVertexStates.begin();
00562         i!=theVertexStates.end() ; ++i )
00563     PrimitivesHarvester::file()->save(*i);
00564   #endif
00565   updateWeights();
00566 
00567   static const double disp_limit = 1e-4; /* SimpleConfigurable<double>
00568     (0.0001, "MultiVertexFitter:DisplacementLimit" ).value(); */
00569 
00570   if ( verbose() & 2 )
00571   {
00572     printSeeds();
00573     cout << "[MultiVertexFitter] max displacement in this iteration: "
00574          << max_disp << endl;
00575   };
00576   if ( max_disp < disp_limit ) return false;
00577   return true;
00578 }

void MultiVertexFitter::updateWeights (  )  [private]

add the primary only tracks to primary vertex only.

now add "free tracks" to all vertices

Definition at line 353 of file MultiVertexFitter.cc.

References GenMuonPlsPt100GeV_cfg::cout, AnnealingSchedule::cutoff(), lat::endl(), KalmanVertexTrackCompatibilityEstimator< N >::estimate(), LinTrackCache::linTrack(), AnnealingSchedule::phi(), CachingVertex< N >::position(), printWeights(), theAssComp, theCache, thePrimaries, theTracks, theVertexStates, theWeights, and verbose.

Referenced by updateSeeds().

00354 {
00355   theWeights.clear();
00356   if ( verbose() & 4 )
00357   {
00358     cout << "[MultiVertexFitter] Start weight update." << endl;
00359   };
00360 
00361   KalmanVertexTrackCompatibilityEstimator<5> theComp;
00362   
00366   for ( set < TransientTrack >::const_iterator trk=thePrimaries.begin();
00367         trk!=thePrimaries.end() ; ++trk )
00368   {
00369     int seednr = theVertexStates[0].first;
00370     CachingVertex<5> seed = theVertexStates[0].second;
00371     double chi2 = theComp.estimate ( seed, theCache.linTrack ( seed.position(), *trk ) );     
00372     double weight = theAssComp->phi ( chi2 );
00373     theWeights[*trk][seednr]= weight; // FIXME maybe "hard" 1.0 or "soft" weight?
00374   }
00375 
00379   for ( vector< TransientTrack >::const_iterator trk=theTracks.begin();
00380         trk!=theTracks.end() ; ++trk )
00381   {
00382     double tot_weight=theAssComp->phi ( theAssComp->cutoff() * theAssComp->cutoff() );
00383 
00384     for ( vector < pair < int, CachingVertex<5> > >::const_iterator 
00385           seed=theVertexStates.begin(); seed!=theVertexStates.end(); ++seed )
00386     {
00387       
00388       double chi2 = theComp.estimate ( seed->second, theCache.linTrack ( seed->second.position(),
00389            *trk ) );
00390       double weight = theAssComp->phi ( chi2 );
00391       tot_weight+=weight;
00392       theWeights[*trk][seed->first]=weight;
00393       /* cout << "[MultiVertexFitter] w[" << TransientTrackNamer().name(*trk)
00394            << "," << seed->position() << "] = " << weight << endl;*/
00395     };
00396 
00397     // normalize to sum of all weights of one track equals 1.
00398     // (if we include the "cutoff", as well)
00399     if ( tot_weight > 0.0 )
00400     {
00401       for ( vector < pair < int, CachingVertex<5> > >::const_iterator 
00402             seed=theVertexStates.begin();
00403             seed!=theVertexStates.end(); ++seed )
00404       {
00405         double normedweight=theWeights[*trk][seed->first]/tot_weight;
00406         if ( normedweight > 1.0 )
00407         {
00408           cout << "[MultiVertexFitter] he? w[" // << TransientTrackNamer().name(*trk)
00409                << "," << seed->second.position() << "] = " << normedweight
00410                << " totw=" << tot_weight << endl;
00411           normedweight=1.0;
00412         };
00413         if ( normedweight < 0.0 )
00414         {
00415           cout << "[MultiVertexFitter] he? weight=" << normedweight
00416                << " totw=" << tot_weight << endl;
00417           normedweight=0.0;
00418         };
00419         theWeights[*trk][seed->first]=normedweight;
00420       };
00421     } else {
00422       // total weight equals zero? restart, with uniform distribution!
00423       cout << "[MultiVertexFitter] track found with no assignment - ";
00424       cout << "will assign uniformly." << endl;
00425       float w = .5 / (float) theVertexStates.size();
00426       for ( vector < pair < int, CachingVertex<5> > >::const_iterator seed=theVertexStates.begin();
00427             seed!=theVertexStates.end(); ++seed )
00428       {
00429         theWeights[*trk][seed->first]=w;
00430       };
00431     };
00432   };
00433   if ( verbose() & 2 ) printWeights();
00434 }

std::vector< CachingVertex<5> > MultiVertexFitter::vertices ( const std::vector< TransientVertex > &  ,
const std::vector< reco::TransientTrack > &  primaries = std::vector< reco::TransientTrack >() 
)

Same as above.

std::vector< CachingVertex<5> > MultiVertexFitter::vertices ( const std::vector< CachingVertex< 5 > > &  ,
const std::vector< reco::TransientTrack > &  primaries = std::vector< reco::TransientTrack >() 
)

Supply full CachingVertices; CachingVertices are the first seeds.

primaries: supply tracks which are hard coded to the primary vertex.

std::vector< CachingVertex<5> > MultiVertexFitter::vertices ( const std::vector< std::vector< TrackAndWeight > > &  ,
const std::vector< reco::TransientTrack > &  primaries = std::vector< reco::TransientTrack >() 
)

Supply clusters of tracks with weights, association weights of the other vertices is considered zero.

FIXME weights are currently ignored. primaries: supply tracks which are hard coded to the primary vertex.

std::vector< CachingVertex<5> > MultiVertexFitter::vertices ( const std::vector< std::vector< reco::TransientTrack > > &  ,
const std::vector< reco::TransientTrack > &  primaries = std::vector< reco::TransientTrack >() 
)

Supply simple clusters of reco::TransientTracks.

primaries: supply tracks which are hard coded to the primary vertex.


Member Data Documentation

AnnealingSchedule* MultiVertexFitter::theAssComp [private]

Definition at line 116 of file MultiVertexFitter.h.

Referenced by clear(), fit(), updateWeights(), and ~MultiVertexFitter().

LinTrackCache MultiVertexFitter::theCache [private]

Definition at line 119 of file MultiVertexFitter.h.

Referenced by clear(), updateSeeds(), and updateWeights().

std::set< reco::TransientTrack > MultiVertexFitter::thePrimaries [private]

Definition at line 115 of file MultiVertexFitter.h.

Referenced by clear(), printWeights(), updateSeeds(), and updateWeights().

float MultiVertexFitter::theReviveBelow [private]

Definition at line 113 of file MultiVertexFitter.h.

Referenced by lostVertexClaimer().

LinearizationPointFinder* MultiVertexFitter::theSeeder [private]

Definition at line 117 of file MultiVertexFitter.h.

Referenced by ~MultiVertexFitter().

std::vector< reco::TransientTrack > MultiVertexFitter::theTracks [private]

Definition at line 114 of file MultiVertexFitter.h.

Referenced by clear(), lostVertexClaimer(), printWeights(), updateSeeds(), and updateWeights().

int MultiVertexFitter::theVertexStateNr [private]

Definition at line 112 of file MultiVertexFitter.h.

Referenced by resetSeedNr(), and seedNr().

std::vector< std::pair < int, CachingVertex<5> > > MultiVertexFitter::theVertexStates [private]

Definition at line 111 of file MultiVertexFitter.h.

Referenced by clear(), fit(), lostVertexClaimer(), printWeights(), updateSeeds(), and updateWeights().

TrackAndSeedToWeightMap MultiVertexFitter::theWeights [mutable, private]

Definition at line 118 of file MultiVertexFitter.h.

Referenced by clear(), lostVertexClaimer(), printWeights(), updateSeeds(), and updateWeights().


The documentation for this class was generated from the following files:
Generated on Tue Jun 9 18:28:36 2009 for CMSSW by  doxygen 1.5.4