00001
00020 #ifndef __StableChargedParticle_H
00021 #define __StableChargedParticle_H
00022
00023 #include"FitParticle.h"
00024
00025
00026
00028
00034 class StableChargedParticle : public FitParticle {
00035 public:
00036 StableChargedParticle();
00037 virtual ~StableChargedParticle();
00038
00039
00040
00041
00042 virtual void addToDerivatives (double der[],
00043 int idim,
00044 double pxfact=0,
00045 double pyfact=0,
00046 double pzfact=0,
00047 double efact=0) const;
00048
00049
00050
00051 virtual void addTo2ndDerivatives (double der2[],
00052 int idim,
00053 double pxfact,
00054 double pyfact,
00055 double pzfact,
00056 double efact) const;
00057
00058 virtual void setCovMatrix(double values[NMEAS*(NMEAS+1)/2]);
00059
00060 virtual double getChi2() const;
00061 virtual double getDChi2DParam(int ilocal) const;
00062 virtual double getD2Chi2DParam2(int ilocal1, int ilocal2) const;
00063
00064 virtual void addToGlobalChi2DerMatrix (int idim, double *M) const;
00065 virtual void addToGlobalDerMatrix (int idim, double c, double *M) const;
00066
00067 virtual void addToGlobCov(double *cov, int idim) const;
00068
00069
00070 virtual void invalidateCache() const;
00071
00072 protected:
00073 void updateCache() const;
00074
00075
00076 void setVertex (FitThreeVector& v, FitThreeVector dv[NPAR],
00077 int n, double s) const;
00078
00079 enum {NPAR = 6};
00080 enum {NMEAS = 5};
00081
00082 double mass;
00083 double bfield;
00084
00085 mutable bool cachevalid;
00086
00087 mutable double chi2;
00088 mutable double r, sphi0, cphi0, dcamir, cottheta, cos2theta;
00089 mutable double resid[NMEAS];
00090 double cov[NMEAS][NMEAS];
00091 double covinv[NMEAS][NMEAS];
00092 mutable FitThreeVector v1;
00093 mutable FitThreeVector dv1[NPAR];
00094
00095 };
00096
00097
00098
00099 #endif // __StableChargedParticle_H
00100