00001
00009 #ifndef __NeutralParticleTrack_H
00010 #define __NeutralParticleTrack_H
00011
00012 #include "jbltools/kinfit/TrackFitObject.h"
00013
00014 #include <cassert>
00015
00016
00018
00030 class NeutralParticleTrack: public TrackFitObject {
00031 public:
00033 NeutralParticleTrack (const char *name_,
00034 double pt,
00035 double phi0,
00036 double theta,
00037 double dca,
00038 double z0,
00039 double mass,
00040 double sstart,
00041 double sstop
00042 );
00044 NeutralParticleTrack (const char *name_,
00045 double pt,
00046 double phi0,
00047 double theta,
00048 double dca,
00049 double z0,
00050 double mass,
00051 double sstart
00052 );
00054 NeutralParticleTrack (const char *name_,
00055 const ThreeVector& vertex,
00056 const ThreeVector& momentum,
00057 double mass
00058 );
00060 virtual ~NeutralParticleTrack();
00061
00063 virtual int getNPar() const;
00064
00066 virtual bool setParam (int ilocal,
00067 double par_,
00068 bool measured_,
00069 bool fixed_ = false
00070 );
00072 virtual bool setParam (int ilocal,
00073 double par_
00074 );
00075
00077 virtual bool setParameters (int ivertex,
00078 const ThreeVector& vertex,
00079 const FourVector& momentum,
00080 double charge_
00081 );
00082
00084 virtual const char *getParamName (int ilocal
00085 ) const;
00086
00087
00089 virtual void getTrajectoryPointEx (double s,
00090 ThreeVector& p
00091 ) const;
00092
00094 virtual void getVertexEx (int ivertex,
00095 ThreeVector& p
00096 ) const;
00097
00099 virtual void setVertex (int ivertex,
00100 const TwoVector& p
00101 );
00102
00104 virtual void getTrajectoryDerivativeEx (double s,
00105 int ilocal,
00106 ThreeVector& p
00107 ) const;
00109 virtual void getVertexDerivativeEx (int ivertex,
00110 int ilocal,
00111 ThreeVector& p
00112 ) const;
00113
00115 virtual void getMomentumAtTrajectoryEx (double s,
00116 FourVector& p
00117 ) const;
00119 virtual void getMomentumEx (int ivertex,
00120 FourVector& p
00121 ) const;
00122
00124 virtual double getCharge () const;
00125
00127 virtual double getMass () const;
00128
00130 virtual void getMomentumDerivativeAtTrajectoryEx (double s,
00131 int ilocal,
00132 FourVector& p
00133 ) const;
00135 virtual void getMomentumDerivativeEx (int ivertex,
00136 int ilocal,
00137 FourVector& p
00138 ) const;
00140 virtual double getArcLength (int i
00141 ) const;
00142
00145 virtual void addToGlobCov(double *glcov, int idim) const;
00146
00148 virtual double getDChi2DParam(int ilocal) const {assert (0);};
00150 virtual double getD2Chi2DParam2(int ilocal1, int ilocal2) const {assert (0);};
00151
00153 virtual void addToGlobalChi2DerMatrix (int idim, double *M) const {assert (0);};
00155 virtual void addToGlobalDerMatrix (int idim, double c, double *M) const {assert (0);};
00156
00158 virtual JBLHelix getTangentialHelix (double s
00159 );
00160
00162 virtual bool fixVertexParam (int ivertex,
00163 bool fix=true
00164 ) { return fixParam (6+ivertex, fix); }
00165
00167 static const double parfact[NPARMAX];
00168
00169 protected:
00170
00172 virtual void initCov(const float cov_[15]);
00173
00175 void updateCache() const;
00176
00178 enum {NPAR = 8};
00179
00180
00181 mutable double pt;
00182 mutable double phi0;
00183 mutable double theta;
00184 mutable double dca;
00185 mutable double z0;
00186 mutable double mass;
00187
00188 mutable double sphi0;
00189 mutable double cphi0;
00190 mutable double px;
00191 mutable double py;
00192 mutable double x0;
00193 mutable double y0;
00194
00195 mutable double cottheta;
00196 mutable double sintheta;
00197 mutable double sin2theta;
00198 mutable double momentum;
00199 mutable double momderfact;
00200 mutable double energy;
00201 mutable double beta;
00202
00203 };
00204
00205 #endif // __NeutralParticleTrack_H