3 #ifndef VertexFinderTearDown_h
4 #define VertexFinderTearDown_h 1
20 bool operator() (
const pair<const Track*, double>& p1,
const pair<const Track*, double>& p2) {
21 return p1.second > p2.second;
33 template<
template<
class T,
class Allocator=allocator<T> >
class Container = std::vector,
template<
class Iterator>
class VertexFitter =
VertexFitterLCFI >
36 Vertex* operator () (
const Container<const Track*>& tracks,
const Container<const Track*>* fixedTracks = 0,
37 double chiSquareThreshold = 9.0, Container<const Track*>* residual = 0,
Vertex* pointConstraint = 0) {
39 list<const Track*>trackList;
40 trackList.resize(tracks.size() + (fixedTracks ? fixedTracks->size() : 0));
41 list<const Track*>::iterator listIt = copy(tracks.begin(), tracks.end(), trackList.begin());
43 copy(fixedTracks->begin(), fixedTracks->end(), listIt);
48 while (trackList.size() >= 2) {
49 resultVertex = VertexFitter<list<const Track*>::iterator>() (trackList.begin(), trackList.end(), pointConstraint);
51 if (fixedTracks && find(fixedTracks->begin(), fixedTracks->end(), worstTrack) != fixedTracks->end()) {
53 vector<pair<const Track*, double> > vpair;
55 vpair.resize(mpair.size());
56 partial_sort_copy(mpair.begin(), mpair.end(), vpair.begin(), vpair.end(),
SortTracksByChi2());
58 unsigned int nworst = 1;
60 worstTrack = vpair[nworst++].first;
61 }
while (nworst < vpair.size() && find(fixedTracks->begin(), fixedTracks->end(), worstTrack) != fixedTracks->end());
63 cout <<
"The worst track is fixed, " << nworst <<
"th track will be removed." << endl;
67 if (worstChi2 > chiSquareThreshold) {
68 trackList.remove(worstTrack);
70 residual->push_back(worstTrack);
Definition: lcfiplus.h:771
Definition: lcfiplus.h:384
Definition: VertexFinderTearDown.h:34
const map< const lcfiplus::Track *, double > & getTracksChi2Map() const
Definition: lcfiplus.h:826
double getChi2Track(const Track *tr) const
Definition: lcfiplus.h:829
vector< lcfiplus::Vertex * > * findTearDownVertices(const Event &evt, const Jet &jet)
Definition: VertexFinderTearDown.cc:11
lcfiplus::Vertex * findPrimaryVertex(TrackVec &tracks, double chi2=9.0, bool beamspotConstraint=true, bool smearBeamspot=true)
Definition: VertexFinderTearDown.cc:48
Definition: VertexFitterLCFI.h:19
Definition: VertexFinderTearDown.h:18
Definition: lcfiplus.h:980
const Track * getWorstTrack() const
Definition: lcfiplus.cc:835
const vector< const Track * > TrackVec
Definition: lcfiplus.h:72
Definition: lcfiplus.h:291