00001
00002
00003
00004
00005
00006
00007
00008
00010
00011 #ifndef ALGFITTRACKMS_H
00012 #define ALGFITTRACKMS_H
00013
00014 #include "Algorithm/AlgBase.h"
00015 #include "RecoBase/AlgReco.h"
00016 #include "RecoBase/AlgTrack.h"
00017 #include "CandFitTrackMS/CandFitTrackMSHandle.h"
00018 #include "Conventions/Detector.h"
00019 #include "TMatrixD.h"
00020 #include "TVectorD.h"
00021
00022 class CandTrackHandle;
00023
00024 class AlgFitTrackMS : public AlgBase, public AlgTrack, public AlgReco
00025 {
00026
00027 public:
00028 AlgFitTrackMS();
00029 virtual ~AlgFitTrackMS();
00030 virtual void InitFitHandle(CandContext &cx);
00031 virtual void RunAlg(AlgConfig &ac, CandHandle &ch, CandContext &cx);
00032 virtual void Trace(const char *c) const;
00033
00034 private:
00035
00036 Double_t ChiSquared(TMatrixD &ErrorMatrix);
00037
00038 void DetermineQ();
00039
00040 Int_t DoFitAlg(Double_t pInit, Double_t& pFit, Double_t& LFit);
00041
00042 void FitTrack(Double_t p0, Double_t &LogCovMDeterminant,
00043 Double_t &chiSquared);
00044
00045 Double_t GetSigmaMS(Double_t peloss);
00046
00047 void InitArrays();
00048
00049 void InvertCovMatrix(TMatrixD &CovMatrix, TMatrixD &ErrorMatrix,
00050 Double_t &LogDet);
00051
00052 void MakeCovarianceMatrix(TMatrixD &CovMatrix, Double_t p0);
00053
00054 void MakeStraightTrack();
00055
00056 void MakePPlanes(Double_t p0);
00057
00058 void MakeSolnMatrices(TMatrixD& VariableCoefMatrix,
00059 TMatrixD &ConstantCoefMatrix, TMatrixD &ErrorMatrix);
00060
00061 void SetupAlg(AlgConfig &ac);
00062
00063 void WriteFit(Double_t ChiSquared, Double_t p0);
00064
00065 CandFitTrackMSHandle* fCfh;
00066
00067 Detector::Detector_t fDetector;
00068
00069 Double_t fQ;
00070 Double_t fFlag;
00071
00072 Double_t fLTolerance;
00073 Double_t fPTolerance;
00074 Double_t fPosErr;
00075 Double_t fXZero;
00076 Double_t fDedx;
00077 Double_t fSuperModGapSize;
00078 Double_t fSteelPlnWidth;
00079 Double_t fScintPlnWidth;
00080 Double_t fTotalPlnWidth;
00081
00082 Int_t fNofit;
00083 Int_t fNoBField;
00084 Int_t fNoMS;
00085 Int_t fBothFit;
00086 Int_t fFullAna;
00087
00088 Int_t fMaxHits;
00089 Int_t fMinHits;
00090 Double_t fMaxP;
00091 Double_t fMinP;
00092 Int_t fMaxIter;
00093 Int_t fInShower;
00094
00095 Int_t fBFisFlipped;
00096 Int_t fSuperModSkippedPlane;
00097
00098 Int_t fNHits;
00099 Int_t fNPlanes;
00100
00101 TMatrixD fSolnMatrix;
00102
00103 TVectorD fXHits;
00104 TVectorD fYHits;
00105 TVectorD fStraightXHits;
00106 TVectorD fStraightYHits;
00107 TVectorD fZHits;
00108 TVectorD fZPlanes;
00109 TVectorD fPPlanes;
00110
00111 ClassDef(AlgFitTrackMS,0)
00112
00113 };
00114
00115 #endif