MarlinKinfit  0.4.0
TrackParticleFitObject.h
Go to the documentation of this file.
1 
7 #ifndef __TRACKPARTICLEFITOBJECT_H
8 #define __TRACKPARTICLEFITOBJECT_H
9 
10 #include "ParticleFitObject.h"
11 #include "TwoVector.h"
12 #include "JBLHelix.h"
13 
14 #undef NDEBUG
15 #include <cassert>
16 
17 #include "EVENT/TrackState.h"
18 #include "EVENT/Track.h"
19 
21  public:
22 
23  TrackParticleFitObject( const EVENT::Track* trk, double m);
24  TrackParticleFitObject( const EVENT::TrackState* trk, double m);
25  TrackParticleFitObject( const double* _ppars, const double* _cov, double m, const double* refPt_=0);
26 
27  virtual ~TrackParticleFitObject();
28 
30  );
31 
32  TrackParticleFitObject& operator= (const TrackParticleFitObject& rhs
33  );
34 
36  virtual TrackParticleFitObject *copy() const;
37 
39  virtual TrackParticleFitObject& assign (const BaseFitObject& source
40  );
41 
43  virtual const char *getParamName (int ilocal
44  ) const;
45 
47  virtual bool updateParams (double p[],
48  int idim
49  );
50 
51  // these depend on actual parametrisation!
52  virtual double getDPx(int ilocal) const;
53  virtual double getDPy(int ilocal) const;
54  virtual double getDPz(int ilocal) const;
55  virtual double getDE(int ilocal) const;
56 
57  virtual double getFirstDerivative_Meta_Local( int iMeta, int ilocal , int metaSet ) const; // derivative of intermediate variable iMeta wrt local parameter ilocal
58  virtual double getSecondDerivative_Meta_Local( int iMeta, int ilocal , int jlocal, int metaSet ) const; // derivative of intermediate variable iMeta wrt local parameter ilocal
59 
60  virtual double getChi2 () const;
61 
62  virtual int getNPar() const {return NPAR;}
63 
64  virtual ThreeVector getTrackPlaneNormal() const;
65  virtual ThreeVector getTrackPcaVector() const;
66 
67  virtual int getCharge() const;
68 
70  static double setBfield (double bfield_
71  );
72 
74  inline static double getBfield ();
75 
77  static double bfield;
78 
79  static const double omega_pt_conv;
80  static const double maxpt;
81 
82 
83 
84  //--------------------------------------------------
85  // extra methods needed by VertrexFitObject
86  //--------------------------------------------------
87 
89  virtual ThreeVector getVertex (int ivertex) const;
90 
92  virtual void setVertex (int ivertex,
93  const TwoVector& v
94  );
95 
97  virtual FourVector getMomentum (int ivertex) const;
98 
100  // only needed for unmeasured tracks, I think
101  virtual bool setParameters (int ivertex,
102  const ThreeVector& vertex,
103  const FourVector& momentum,
104  double charge_
105  ) {assert(0);}
106 
108  // virtual JBLHelix getTangentialHelix (double s ///< Arc length
109  // ) {assert(0);}
110 
112  virtual bool fixVertexParam (int ivertex,
113  bool fix=true
114  );
115 
117  virtual bool releaseVertexParam (int ivertex
118  );
119 
120 
122  virtual ThreeVector getVertexDerivative (int ivertex,
123  int ilocal
124  ) const;
125 
126  // this one probably useful
127 
129  virtual JBLHelix getJBLHelix (); // with respect to the reference point of the track
130  virtual JBLHelix getJBLHelix (const ThreeVector& newRefPoint); // wrt a general reference point
131 
132 
133  //---------------- end extra needed methods for vertexfitobject
134 
135  enum {iD0=0, iPhi0, iOmega, iZ0, iTanL, iStart, iEnd, NPAR};
136 
137  protected:
138 
139  static const double parfact[NPAR];
140 
141  virtual void initialise( const double* _pars, const double* _cov, double m);
142 
143  void updateCache() const;
144  void updateMomentumDerivatives() const;
145  void updateNormalDerivatives() const;
146  void updateTrajectoryDerivatives() const;
147 
148  mutable ThreeVector trackReferencePoint;
149  mutable ThreeVector trackPlaneNormal;
150  mutable ThreeVector trackPcaVector;
151 
152  mutable ThreeVector trajectoryPointAtPCA;
153  mutable ThreeVector trajectoryPointAtStart;
154  mutable ThreeVector trajectoryPointAtEnd;
155 
156  mutable ThreeVector momentumAtPCA;
157  mutable ThreeVector momentumAtStart;
158  mutable ThreeVector momentumAtEnd;
159 
160  mutable double momentumFirstDerivatives[4][NPAR];
161  mutable double momentumSecondDerivatives[4][NPAR][NPAR];
162 
163  mutable double normalFirstDerivatives[3][NPAR];
164  mutable double normalSecondDerivatives[3][NPAR][NPAR];
165 
166  mutable double trajectoryStartFirstDerivatives[3][NPAR];
167  mutable double trajectoryStartSecondDerivatives[3][NPAR][NPAR];
168 
169  mutable double trajectoryEndFirstDerivatives[3][NPAR];
170  mutable double trajectoryEndSecondDerivatives[3][NPAR][NPAR];
171 
172  mutable double phi0 ;
173  mutable double omega ;
174  mutable double tanl ;
175  mutable double d0 ;
176  mutable double z0 ;
177  mutable double s_start;
178  mutable double s_end ;
179 
180  mutable double chi2;
181 
182  void resetMomentumFirstDerivatives() const;
183  void resetMomentumSecondDerivatives() const;
184 
185  void resetNormalFirstDerivatives() const;
186  void resetNormalSecondDerivatives() const;
187 
188  void resetTrajectoryFirstDerivatives() const;
189  void resetTrajectorySecondDerivatives() const;
190 
191  void setMomentumFirstDerivatives (int iMeta, int jLocal, double x) const;
192  void setMomentumSecondDerivatives(int iMeta, int jLocal, int kLocal, double x) const;
193 
194  void setNormalFirstDerivatives (int iMeta, int jLocal, double x) const;
195  void setNormalSecondDerivatives(int iMeta, int jLocal, int kLocal, double x) const;
196 
197  void setTrajectoryStartFirstDerivatives (int iMeta, int jLocal, double x) const;
198  void setTrajectoryStartSecondDerivatives(int iMeta, int jLocal, int kLocal, double x) const;
199 
200  void setTrajectoryEndFirstDerivatives (int iMeta, int jLocal, double x) const;
201  void setTrajectoryEndSecondDerivatives(int iMeta, int jLocal, int kLocal, double x) const;
202 
203  virtual double getMomentumFirstDerivatives (int iMeta, int jLocal) const;
204  virtual double getMomentumSecondDerivatives(int iMeta, int jLocal, int kLocal) const;
205 
206  virtual double getNormalFirstDerivatives (int iMeta, int jLocal) const;
207  virtual double getNormalSecondDerivatives(int iMeta, int jLocal, int kLocal) const;
208 
209  virtual double getTrajectoryStartFirstDerivatives (int iMeta, int jLocal) const;
210  virtual double getTrajectoryStartSecondDerivatives(int iMeta, int jLocal, int kLocal) const;
211 
212  virtual double getTrajectoryEndFirstDerivatives (int iMeta, int jLocal) const;
213  virtual double getTrajectoryEndSecondDerivatives(int iMeta, int jLocal, int kLocal) const;
214 
215 };
216 
217 
218 
219 #endif // __TRACKPARTICLEFITOBJECT_H
220 
virtual double getDPx(int ilocal) const
Return d p_x / d par_ilocal (derivative of px w.r.t. local parameter ilocal)
Definition: TrackParticleFitObject.cc:275
virtual bool setParameters(int ivertex, const ThreeVector &vertex, const FourVector &momentum, double charge_)
Set parameters such that track passes through a vertex with a given 4-momentum; return=success.
Definition: TrackParticleFitObject.h:101
Declares class JBLHelix.
virtual ThreeVector getVertex(int ivertex) const
Get start (i=0) or stop (i=1) vertex.
Definition: TrackParticleFitObject.cc:1318
virtual bool fixVertexParam(int ivertex, bool fix=true)
Get helix that is tangential at a certain arc length s.
Definition: TrackParticleFitObject.cc:1479
static double bfield
Global B field in Tesla(!)
Definition: TrackParticleFitObject.h:77
virtual int getNPar() const
Get total number of parameters of this FitObject.
Definition: TrackParticleFitObject.h:62
virtual void setVertex(int ivertex, const TwoVector &v)
Set start (i=0) or stop (i=1) vertex to a point as close as possible to given point.
Definition: TrackParticleFitObject.cc:1398
virtual double getDPz(int ilocal) const
Return d p_z / d par_ilocal (derivative of pz w.r.t. local parameter ilocal)
Definition: TrackParticleFitObject.cc:289
virtual ThreeVector getVertexDerivative(int ivertex, int ilocal) const
Get derivative of vertex w.r.t. parameter ilocal.
Definition: TrackParticleFitObject.cc:1430
virtual FourVector getMomentum(int ivertex) const
Get momentum at vertex.
Definition: TrackParticleFitObject.cc:1454
virtual TrackParticleFitObject & assign(const BaseFitObject &source)
Assign from anther object, if of same type.
Definition: TrackParticleFitObject.cc:204
Abstract base class for particle objects of kinematic fits.
Definition: ParticleFitObject.h:63
virtual bool releaseVertexParam(int ivertex)
Release parameter(s) pertaining to a vertex.
Definition: TrackParticleFitObject.cc:1491
static double getBfield()
Get the B field for all tracks (in Tesla)
Definition: TrackParticleFitObject.cc:1309
Declares class ParticleFitObject.
virtual double getChi2() const
Get chi squared from measured and fitted parameters.
Definition: TrackParticleFitObject.cc:345
virtual double getDPy(int ilocal) const
Return d p_y / d par_ilocal (derivative of py w.r.t. local parameter ilocal)
Definition: TrackParticleFitObject.cc:282
virtual double getDE(int ilocal) const
Return d E / d par_ilocal (derivative of E w.r.t. local parameter ilocal)
Definition: TrackParticleFitObject.cc:296
Definition: TrackParticleFitObject.h:20
virtual JBLHelix getJBLHelix()
Get JBLhelix.
Definition: TrackParticleFitObject.cc:1324
Definition: TwoVector.h:18
static double setBfield(double bfield_)
Set the B field for all tracks.
Definition: TrackParticleFitObject.cc:1304
virtual bool updateParams(double p[], int idim)
Read values from global vector, readjust vector; return: significant change.
Definition: TrackParticleFitObject.cc:230
Abstract base class for particle objects of kinematic fits.
Definition: BaseFitObject.h:110
virtual const char * getParamName(int ilocal) const
Get name of parameter ilocal.
Definition: TrackParticleFitObject.cc:217
virtual TrackParticleFitObject * copy() const
Return a new copy of itself.
Definition: TrackParticleFitObject.cc:200
A helix, parametrized by (kappa, phi0, theta, dca, z0)
Definition: JBLHelix.h:33
Definition: ThreeVector.h:18