Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

AlgFitTrackSR.h

Go to the documentation of this file.
00001 
00002 // $Id: AlgFitTrackSR.h,v 1.21 2007/11/11 08:44:45 rhatcher Exp $
00003 //
00004 // AlgFitTrackSR.h
00005 //
00006 // AlgFitTrackSR is a concrete FitTrackSR Algorithm class.
00007 //
00008 // Author:  R. Lee 2001.03.30
00009 // Revised: B. Rebel 2003.06.27
00010 //
00012 
00013 #ifndef ALGFITTRACKSR_H
00014 #define ALGFITTRACKSR_H
00015 
00016 #include<map>
00017 #include "Algorithm/AlgBase.h"
00018 #include "RecoBase/AlgReco.h"
00019 #include "RecoBase/AlgTrack.h"
00020 #include "Validity/VldContext.h"
00021 
00022 class TrackClusterSRItr;
00023 class TrackClusterSR;
00024 class CandFitTrackSRHandle;
00025 class CandStripHandleItr;
00026 class KalmanPlaneSR;
00027 class TObjArray;
00028 class UgliGeomHandle;
00029 
00030 class AlgFitTrackSR : public AlgBase, public AlgReco, public AlgTrack
00031 {
00032 
00033 public:
00034    AlgFitTrackSR();
00035    virtual ~AlgFitTrackSR();
00036    virtual void RunAlg(AlgConfig &ac, CandHandle &ch, CandContext &cx);
00037    virtual void Trace(const char *c) const;
00038 
00039 private:
00040 
00041    VldContext fVldContext; // context of the rec set currently being processed
00042    Detector::Detector_t fDetector;
00043    Int_t pRev,pRev2,pFor;
00044    Int_t fParmMaxIterate;
00045    Int_t fParmMaxIterate2;
00046    Double_t fParmQPDiff;
00047    Double_t fParmMinPlanePE;
00048    Int_t fParmLastPlane;
00049    Int_t fParmIsCosmic;
00050    Double_t fParmMaxLocalChi2;
00051    Double_t fParmMaxLocalPreChi2;
00052    Double_t fParmMaxAngleCovariance;
00053    Double_t fParmMaxImpactParameter;
00054    Int_t fParmNSkipActive;
00055    Int_t fParmNSkipView;
00056    
00057    Double_t fParmPassReducedChi2;
00058    Double_t fParmPassPlaneAsymmetry;
00059    Int_t fParmPassMinPlaneAsymmetry;
00060    
00061    Double_t fParmMinClusterCharge;
00062    Int_t fParmMaxClusterNStrip;
00063 
00064    Double_t fParmDeltaChi2;
00065    Double_t fParmDeltaCovariance;
00066    Double_t fParmMisalignmentError; //misalignment in strip tpos
00067 
00068   Double_t fParmDState[5]; 
00069   Double_t fParmdedx; 
00070   Double_t fParmPlnRadLen; 
00071   Int_t    fParmQPRangeCheck; 
00072   Double_t fParmMaxQP; 
00073   Double_t fParmMaxQPFrac; 
00074   Int_t    fSwimmer; 
00075   Double_t fParmMaxAngle; 
00076 
00077   Double_t fParmTPosError2;          
00078   Double_t fParmInitialPositionError2; 
00079   Double_t fParmInitialSlopeError2;    
00080   Double_t fParmInitialQPError2;     
00081   Double_t fParmCovarianceScale;     
00082     
00083 // fCov stores the most recent filtered covariance matrix
00084   Double_t fCov[5][5]; 
00085 
00086   Int_t Predict(KalmanPlaneSR *prevkp, KalmanPlaneSR *currentkp, Int_t idir);
00087 
00088  Int_t Filter(KalmanPlaneSR *currentkp, Int_t idir);
00089  
00090  Int_t FitFrom(KalmanPlaneSR *prevkp, KalmanPlaneSR *currentkp, Int_t idir, Int_t iterate);
00091  
00092  Int_t CalculatePropagator(KalmanPlaneSR *prevkp, KalmanPlaneSR *currentkp, Int_t idir);
00093   void CalculateNoise(KalmanPlaneSR *prevkp, KalmanPlaneSR *currentkp, Int_t idir, 
00094                       Int_t befaft=0);
00095   void CalculatePreCovariance(KalmanPlaneSR *prevkp, KalmanPlaneSR *currentkp, Int_t idir);
00096   Int_t CalculatePreState(KalmanPlaneSR *prevkp, KalmanPlaneSR *currentkp, Int_t idir);
00097   void CalculatePreChi2(KalmanPlaneSR *currentkp, Int_t idir, Double_t = 0.0119);
00098   void CalculateGain(KalmanPlaneSR *currentkp, Int_t idir, Double_t = 0.0119);
00099   void CalculateFilState(KalmanPlaneSR *currentkp, Int_t idir);
00100   void CalculateFilCovariance(KalmanPlaneSR *currentkp, Int_t idir);
00101   void CalculateFilChi2(KalmanPlaneSR *currentkp, Int_t idir, Double_t = 0.0119);
00102 
00103   Bool_t Swim(Double_t *swimstate, Double_t *state,
00104               Double_t zPos, Double_t finalZ, Int_t idir,
00105               const VldContext*);
00106 
00107 
00108   void InitKalmanFitParameters(AlgConfig &ac);
00109 
00110   void InitializeFit(CandFitTrackSRHandle & cfh,Int_t, Int_t);
00111 
00112   void MakeSliceClusterList(TObjArray *trackClusterList, 
00113                             const TObjArray *tclist,
00114                             CandStripHandleItr &stripItr, 
00115                             CandFitTrackSRHandle &cfh);
00116 
00117    void MakeTrackClusterList(TObjArray *trackClusterList, CandStripHandleItr &stripItr,
00118                              CandFitTrackSRHandle &cfh, Int_t direction);
00119    void SetTrackParameters(const CandTrackHandle *track0, CandFitTrackSRHandle &cfh,
00120                            Int_t direction);
00121    Int_t FindNumSkippedPlanes(Int_t currentPlane, Int_t prevPlane,
00122                               KalmanPlaneSR *oldkp, 
00123                               Int_t direction);
00124    Int_t FindTimingDirection(TrackClusterSRItr  &clusterItr);
00125    Bool_t MarkTrackClusters(const CandTrackHandle *track0, 
00126                             TObjArray  &planeClusterList, 
00127                             CandStripHandleItr &stripItr, CandFitTrackSRHandle &cfh, 
00128                             Int_t &begPlane, Int_t &endPlane);
00129    void SetTrackEndParameters(Int_t begPlane, Int_t endPlane, 
00130                               CandFitTrackSRHandle &cfh,
00131                               const CandTrackHandle *track0);
00132    void ResetTrackClusterList(TObjArray &planeClusterList);
00133    void ResetTrackClusterList(TObjArray &planeClusterList, 
00134                               CandFitTrackSRHandle &cfh);
00135    Int_t DoKalmanFit(TObjArray  &planeClusterList, CandFitTrackSRHandle &cfh,
00136                      Int_t &istatus, Int_t direction, Int_t dosearch);
00137 
00138    Int_t ReverseFit(TObjArray  &planeClusterList,CandFitTrackSRHandle &cfh, Int_t,Bool_t = kFALSE);
00139 
00140    Int_t AddClustersToFit(TObjArray &planeClusterList, CandFitTrackSRHandle &cfh,
00141                           Int_t iterate, Int_t &nu, Int_t &nv, Int_t direction);
00142    Int_t RemoveBadPointsFromFit(CandFitTrackSRHandle &cfh, 
00143                                 TObjArray &planeClusterList,
00144                                 std::map<Int_t,Int_t>& uFitPlanes,
00145                                 std::map<Int_t,Int_t>& vFitPlanes, Int_t &nfitu, 
00146                                 Int_t &nfitv, Int_t direction);
00147    Int_t FindDownstreamPlanes(TObjArray &planeClusterList, 
00148                               CandFitTrackSRHandle &cfh, 
00149                               Int_t direction);
00150    Int_t FindUpstreamPlanes(TObjArray &planeClusterList, CandFitTrackSRHandle &cfh,
00151                             TObjArray *newkplist, Int_t direction);
00152    Int_t FindNumSkippedPlanesInView(std::map<Int_t,Int_t>& fitPlanes,
00153                                     std::map<Int_t,Int_t>::iterator& fitIter,
00154                                     Int_t currentPlane, Int_t prevPlane,
00155                                     Int_t lastPlane, Int_t direction);
00156    Int_t AddForwardBestKPToFit(KalmanPlaneSR *bestkp, 
00157                                CandFitTrackSRHandle &cfh,       
00158                                Int_t &nswimfail);
00159 
00160    Int_t AddToFit(CandFitTrackSRHandle & cfh, TrackClusterSR *, Int_t);
00161 
00162    Int_t AddToFit(CandFitTrackSRHandle & cfh, KalmanPlaneSR *, Int_t,Bool_t);
00163 
00164    Int_t AddReverseBestKPToFit(KalmanPlaneSR *bestkp, KalmanPlaneSR *oldkp,
00165                                CandFitTrackSRHandle &cfh, TObjArray *newkplist,
00166                                Int_t &nswimfail, Int_t direction);
00167    void SetPlaneParameters(CandFitTrackSRHandle &cfh, const KalmanPlaneSR *kpu0, 
00168                            const KalmanPlaneSR *kpu1, const KalmanPlaneSR *kpv0,
00169                            const KalmanPlaneSR *kpv1);
00170    void MakeDaughterStripList(CandFitTrackSRHandle &cfh);
00171    void SwimVertexAndEndPoints(CandFitTrackSRHandle &cfh, KalmanPlaneSR *kp0,
00172                                KalmanPlaneSR *kp1, const KalmanPlaneSR *kpu0,
00173                                const KalmanPlaneSR *kpu1, const KalmanPlaneSR *kpv0,
00174                                const KalmanPlaneSR *kpv1, Double_t *planepe,
00175                                Int_t plane0, Int_t plane1, Double_t &vtxqp, 
00176                                Int_t direction);
00177    Int_t IterateKalmanFit(TObjArray &planeClusterList, CandFitTrackSRHandle &cfh,
00178                           Int_t &nu, Int_t &nv, Int_t direction, Int_t dosearch);
00179    
00180 
00181    Int_t FindTimingDirection(CandFitTrackSRHandle &cfh, 
00182                              Double_t *fitparm,
00183                              Double_t &timefitchi2);
00184    
00185 ClassDef(AlgFitTrackSR,8) // FitTrackSR Algorithm Class
00186 
00187 };
00188 
00189 #endif // ALGFITTRACKSR_H

Generated on Mon Feb 15 11:06:19 2010 for loon by  doxygen 1.3.9.1