#include <RecoVertex/MultiVertexFit/interface/MultiVertexFitter.h>
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 | |
AnnealingSchedule * | theAssComp |
LinTrackCache | theCache |
std::set< reco::TransientTrack > | thePrimaries |
float | theReviveBelow |
LinearizationPointFinder * | theSeeder |
std::vector< reco::TransientTrack > | theTracks |
int | theVertexStateNr |
std::vector< std::pair< int, CachingVertex< 5 > > > | theVertexStates |
TrackAndSeedToWeightMap | theWeights |
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.
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.
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 }
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.
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] |
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] |
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().