00001 #ifndef StiTrackNodeHelper_H
00002 #define StiTrackNodeHelper_H 1
00003
00004
00005 #include "StiKalmanTrackNode.h"
00006 class StiDetector;
00007 class StiMcsErrs {
00008 public:
00009 void reset() {memset(this,0,sizeof(*this));}
00010 public:
00011 double _cEE ;
00012 double _cPP;
00013 double _cTP;
00014 double _cTT;
00015 double _ptinCorr;
00016 };
00017
00018
00019 class QaFit
00020 {
00021 public:
00022 QaFit() {reset();}
00023 void reset() {memset(this,0,sizeof(*this));}
00024 void add(double val);
00025 void finish();
00026 int getTally() const {return mTally;}
00027 double getAccu(int kValCorr);
00028 double getMaxi(int kValCorr) {return mMaxi[kValCorr];}
00029 double getNStd(int kValCorr);
00030 double getNSgn(int kValCorr);
00031 void getInfo(double *info);
00032 private:
00033 double mPrev;
00034 double mAver[2];
00035 double mErrr[2];
00036 double mMaxi[2];
00037 int mNega[2];
00038
00039 int mEnded;
00040 int mTally;
00041 };
00042
00043
00044 class StiTrackNodeHelper
00045 {
00046 public:
00047
00048 StiTrackNodeHelper(){}
00049 void set(double chi2max,double chi2vtx,double errConfidence,int iter);
00050 void set(StiKalmanTrackNode *pNode,StiKalmanTrackNode *sNode);
00051 int makeFit(int smooth);
00052 StiKalmanTrackNode *getWorst() const {return mWorstNode;}
00053 StiKalmanTrackNode *getFlipFlop() const {return mFlipFlopNode;}
00054 StiKalmanTrackNode *getVertexNode() const {return mVertexNode;}
00055 int getUsed() const {return mUsed;}
00056
00057 static int isCutStep() {return mgCutStep;}
00058 private:
00059 void reset();
00060 int propagatePars(const StiNodePars &parPars
00061 , StiNodePars &rotPars
00062 , StiNodePars &proPars);
00063 int propagateFitd();
00064 int propagateMtx();
00065 int propagateError();
00066 int setHitErrs();
00067 int propagateMCS();
00068 double evalChi2();
00069 double joinChi2();
00070 double recvChi2();
00071 int updateNode();
00072 void resetError(double fk=0.);
00073 int nudge();
00074 int join();
00075 int save();
00076 int cutStep(StiNodePars *pars,StiNodePars *base);
00077 double pathIn(const StiDetector *det,StiNodePars *pars);
00078
00079 public:
00080 static double joinTwo(int nP1,const double *P1 ,const double *E1
00081 ,int nP2,const double *P2 ,const double *E2
00082 , double *PJ=0, double *EJ=0);
00083
00084 #if 0
00085 static double joinVtx( const double *P1 ,const double *E1
00086 ,const double *P2 ,const double *E2
00087 , double *PJ=0, double *EJ=0);
00088 #endif
00089 double joinVtx(const double *Y,const StiHitErrs &B
00090 ,const StiNodePars &X,const StiNodeErrs &A
00091 , StiNodePars *M=0, StiNodeErrs *C=0);
00092 static int getHitErrors(const StiHit *hit,const StiNodePars *pars, StiHitErrs *hrr);
00093 static Int_t debug() {return _debug;}
00094 static void setDebug(Int_t m) {_debug = m;}
00095
00096 private:
00097 double mChi2Max;
00098 double mChi2Vtx;
00099 double mNodeErrFactor;
00100 double mHitsErrFactor;
00101 double mParentHz;
00102 double mTargetHz;
00103 int mIter;
00104 StiKalmanTrackNode *mWorstNode;
00105 StiKalmanTrackNode *mFlipFlopNode;
00106 StiKalmanTrackNode *mVertexNode;
00107 char mBeg[1];
00108 StiKalmanTrackNode *mParentNode;
00109 StiKalmanTrackNode *mTargetNode;
00110 const StiDetector *mDetector;
00111 const StiHit *mHit;
00112 StiNodePars mBestParentPars;
00113 StiNodePars mBestParentRotPars;
00114 StiNodePars mBestPars;
00115 double mBestDelta;
00116
00117 StiNodePars mFitdParentPars;
00118 StiNodePars mPredPars;
00119 StiNodePars mFitdPars;
00120 StiNodePars mJoinPars;
00121
00122 StiNodePars mSavdParentPars;
00123 double mSavdDelta;
00124
00125 StiNodeErrs mFitdParentErrs;
00126 StiNodeErrs mPredErrs;
00127 StiNodeErrs mFitdErrs;
00128 StiNodeErrs mJoinErrs;
00129 StiNodeErrs mBestParentErrs;
00130
00131 StiNodeMtx mMtx;
00132 StiMcsErrs mMcs;
00133 double mHitPars[3];
00134 StiHitErrs mHrr;
00135 StiNode2Pars mUnTouch;
00136
00137 double alpha,ca,sa;
00138 double x1;
00139 double x2;
00140 double dx;
00141 double rho;
00142 double dsin;
00143 double sinCA2;
00144 double cosCA2;
00145 double sumSin;
00146 double sumCos;
00147 double dy;
00148 double y2;
00149 double dl0;
00150 double sind;
00151 double dl;
00152
00153 double mDetm;
00154 double mChi2;
00155 int mState;
00156 int mUsed;
00157 char mEnd[1];
00158 static int _debug;
00159 public:
00160 QaFit mCurvQa;
00161 QaFit mTanlQa;
00162 static int mgCutStep;
00163 };
00164
00165
00166
00167 #endif
00168
00169
00170