001 #ifndef VERTEXFITTER_HH
002 #define VERTEXFITTER_HH ($Id: VertexFitter.hh,v 1.26 2003/04/12 15:55:09 wgw Exp $)
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027 #include <math.h>
028 #include <vector>
029 #include <sstream>
030
031 #ifndef VERTEXALG_STANDALONE
032 #include "TrackingObjects/Tracks/CdfTrack.hh"
033 #include "TrackingObjects/Storable/CdfTrackColl.hh"
034 #include "TrackingObjects/Storable/CdfTrackView.hh"
035 #else
036 #include "Stntuple/obj/TStnTrack.hh"
037 #endif
038 #include "VertexAlg/ExpandedTrack.hh"
039 #include "CLHEP/Matrix/Matrix.h"
040 #include "CLHEP/Matrix/SymMatrix.h"
041 #include "CLHEP/Matrix/Vector.h"
042 #include "CLHEP/Geometry/Point3D.h"
043 #include "CLHEP/Vector/LorentzVector.h"
044
045 #ifndef VERTEXALG_STANDALONE
046 class MaterialIntegrator;
047 #endif
048
049
050
051
052
053 class VertexFitter
054 {
055
056
057
058 public:
059 enum ErrorCodes
060 {
061 NotEnoughTracksAtBegin = 1001,
062 NotEnoughTracksAfterExpansion,
063 NotEnoughTracksAfterPruning0
064 };
065
066 VertexFitter();
067 ~VertexFitter();
068
069 void setVertex(const HepVector& vertex);
070 void setVertexCovarianceMatrix(const HepSymMatrix& error);
071 void setCotScale(double cotscale);
072 void setSiScale(double siscale);
073 void setSiZ0Scale(double siz0scale);
074 #ifndef VERTEXALG_STANDALONE
075 void newTracks(int ntracks, CdfTrack_clnk *tracks);
076 void newTracks(int ntracks, CdfTrack_clnk *tracks, double *masses);
077 void newTracks(const CdfTrackView&);
078 void newTracksRefitSi(const CdfTrackView&);
079 void newTracks(CdfTrackView*);
080 void setMaterialIntegrator(MaterialIntegrator* integrator) { _integrator = integrator;}
081 #else
082 void newTracks(int,TStnTrack**);
083 #endif
084 void setTrackMasses(double*);
085 int useUnusedTracks(double zcut = -1);
086
087
088 #ifndef VERTEXALG_STANDALONE
089 CdfTrackView* usedTracks() const;
090 CdfTrackView* unusedTracks() const;
091 #endif
092 int ntracks() const;
093 HepPoint3D vertex() const;
094 HepSymMatrix vertexCovarianceMatrix() const;
095
096 double chi2() const;
097 HepLorentzVector momentum() const;
098
099 Hep3Vector threemomentum() const;
100 double mass() const;
101 int charge() const;
102 int ndof() const;
103
104
105 int diufit();
106 int diuvtx();
107 int vxgtpr(unsigned int minn = 5, bool combine = false , double maxtrackchi2 = 3.5 * 3.5,
108 double zcut = -1, bool dosteering = true);
109
110
111 #ifndef VERTEXALG_STANDALONE
112 double chi2wrtVertex(const CdfTrack_clnk &track, bool trackusedinfit = false);
113 #else
114 double chi2wrtVertex(TStnTrack *track, bool trackusedinfit = false);
115 #endif
116
117
118 void clear();
119 #if PRUNING_DEBUGTRACE
120 std::string getDebug() const {return _dbos.str();}
121 void resetDebug() { _dbos.str(""); return;}
122 protected:
123 std::ostringstream _dbos;
124 #endif
125
126
127
128 private:
129 static const int MAXCHI;
130 typedef std::vector<ExpandedTrack*> TrackVec;
131 typedef std::vector<ExpandedTrack*>::iterator TrackVecIter;
132 typedef std::vector<ExpandedTrack*>::const_iterator TrackVecConstIter;
133
134 HepVector _vertex;
135 HepSymMatrix _covout;
136 HepVector _xin;
137 HepSymMatrix _covxin;
138 int _ndof;
139
140 TrackVec _track;
141 TrackVecIter _endused;
142 int _idim;
143 double _radius;
144 int _iexp;
145 double _chi2;
146 int _mode;
147 bool _first;
148 double _cotscale;
149 double _siz0scale;
150 double _siscale;
151 int _errorCode;
152 #ifndef VERTEXALG_STANDALONE
153 MaterialIntegrator* _integrator;
154 #endif
155
156 int vxfit0(TrackVecIter begin,TrackVecIter end,bool);
157 int vxfit1(TrackVecIter begin,TrackVecIter end,bool);
158 double chi2wrtVertex(ExpandedTrack* t, bool trackusedinfit = false, bool dontexpand = false);
159 int prune0(int minn, double maxtrackchi2,bool combine);
160 int prune1(int minn, double maxtrackchi2,bool combine);
161
162 static bool trackLargerResid(const ExpandedTrack* t,const ExpandedTrack* s) { return t->_resid > s->_resid;}
163 static void trackDelete(ExpandedTrack* t) { delete t;}
164 class TrackZCut
165 {
166 private:
167 double _zcut;
168 double _x;
169 double _y;
170 double _z;
171 double _zerr2;
172 bool _offset;
173 public:
174 TrackZCut(double zcut, double zvertex, double zerr2);
175 TrackZCut(double zcut, double xvertex, double yvertex, double zvertex, double zerr2);
176 bool operator()(const ExpandedTrack* track);
177 };
178 class NotTrackZCut
179 {
180 private:
181 double _zcut;
182 double _x;
183 double _y;
184 double _z;
185 double _zerr2;
186 bool _offset;
187 public:
188 NotTrackZCut(double zcut, double zvertex, double zerr2);
189 NotTrackZCut(double zcut, double xvertex, double yvertex, double zvertex, double zerr2);
190 bool operator()(const ExpandedTrack* track);
191 };
192 class TrackResidCut
193 {
194 private:
195 double _maxresid;
196 public:
197 TrackResidCut(double maxresid);
198 bool operator()(const ExpandedTrack* track);
199 };
200
201
202 };
203
204 #include "VertexAlg/VertexFitter.icc"
205
206 #endif
Send problems or questions to cdfcode@fnal.gov