LCOV - code coverage report
Current view: top level - TRD/TRDbase - AliTRDtrackerV1.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 7 19 36.8 %
Date: 2016-06-14 17:26:59 Functions: 9 24 37.5 %

          Line data    Source code
       1             : #ifndef ALITRDTRACKERV1_H
       2             : #define ALITRDTRACKERV1_H
       3             : 
       4             : /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
       5             : * See cxx source for full Copyright notice                               */ 
       6             : /* $Id$ */
       7             : 
       8             : ////////////////////////////////////////////////////////////////////////////
       9             : //                                                                        //
      10             : //  The TRD tracker                                                       //
      11             : //                                                                        //
      12             : //  Authors:                                                              //
      13             : //    Marian Ivanov <M.Ivanov@gsi.de>                                     //
      14             : //    Alex Bercuci <A.Bercuci@gsi.de>                                     //
      15             : //    Jouri Belikov <J.Belikov@cern.ch>                                   //
      16             : //    Markus Fasel <M.Fasel@gsi.de>                                       //
      17             : //                                                                        //
      18             : ////////////////////////////////////////////////////////////////////////////
      19             : 
      20             : //#ifndef ALITRACKER_H
      21             : #include "AliTracker.h"
      22             : //#endif
      23             : 
      24             : //#ifndef ALITRDTRACKINGSECTOR_H
      25             : #include "AliTRDtrackingSector.h"
      26             : //#endif
      27             : 
      28             : //#ifndef ROOT_TMatrixDfwd
      29             : #include <TMatrixDfwd.h>
      30             : //#endif
      31             : 
      32             : /**************************************************************************
      33             : * Class Status see source file                                           *
      34             : **************************************************************************/
      35             : 
      36             : class TFile;
      37             : class TTreeSRedirector;
      38             : class TClonesArray;
      39             : class TLinearFitter;
      40             : 
      41             : class AliRieman;
      42             : class AliESDEvent;
      43             : class AliCluster;
      44             : class AliTrackPoint;
      45             : 
      46             : class AliTRDcluster;
      47             : class AliTRDseedV1;
      48             : class AliTRDtrackingChamber;
      49             : class AliTRDchamberTimeBin;
      50             : class AliTRDtrackerFitter;
      51             : class AliTRDtrackV1;
      52             : class AliTRDReconstructor;
      53             : class AliTRDrecoParam;
      54             : class AliTRDtrackerV1 : public AliTracker
      55             : {
      56             : public:
      57             :   enum{
      58             :     kOwner            = BIT(14) // owner of clusters
      59             :    ,kRemoveContainers = BIT(15) // delete containers after usage
      60             :   };
      61             :   enum ETRDtrackerV1const {
      62             :     kMaxLayersPerSector   = 1000
      63             :     , kMaxTimeBinIndex    = 216
      64             :     , kTrackingSectors    = 18
      65             :     , kNTimeBins          = 35
      66             :     , kNPlanes            = 6
      67             :     , kNSeedPlanes        = 4
      68             :     , kMaxTracksStack     = 100
      69             :     , kNConfigs           = 15
      70             :   };
      71             :   enum ETRDtrackerV1BetheBloch {
      72             :      kGeant = 0
      73             :     ,kSolid
      74             :     ,kGas
      75             :   };
      76             :   AliTRDtrackerV1(const AliTRDReconstructor *rec = NULL);
      77             :   virtual ~AliTRDtrackerV1();
      78             :   
      79             :   //temporary
      80           0 :   AliTRDtrackingSector* GetTrackingSector(Int_t sec) {return &fTrSec[sec];}
      81             :   
      82             :   Int_t           Clusters2Tracks(AliESDEvent *esd);
      83             :   static ETRDtrackerV1BetheBloch
      84           0 :                   GetBetheBloch()            { return fgBB;}
      85             :   AliCluster*     GetCluster(Int_t index) const;
      86             :   AliTRDseedV1*   GetTracklet(Int_t index) const;
      87             :   AliKalmanTrack* GetTrack(Int_t index) const;
      88           0 :   TClonesArray*   GetListOfClusters() const  { return fClusters;}
      89           0 :   TClonesArray*   GetListOfTracklets() const { return fTracklets;}
      90           0 :   TClonesArray*   GetListOfTracks() const    { return fTracks;}
      91       13192 :   static Int_t    GetNTimeBins()             { return fgNTimeBins;}
      92             :   static void     GetExtrapolationConfig(Int_t iconfig, Int_t planes[2]);
      93             :   static void     GetSeedingConfig(Int_t iconfig, Int_t planes[4]);
      94             : 
      95             :   static TLinearFitter*  GetTiltedRiemanFitter();
      96             :   static TLinearFitter*  GetTiltedRiemanFitterConstraint();
      97             :   static AliRieman*      GetRiemanFitter();
      98             :   static void     FitRieman(AliTRDcluster **clusters, Double_t chi2[2]);
      99             :   static Float_t  FitRieman(AliTRDseedV1 *tracklets, Double_t *chi2, Int_t *const planes = NULL);
     100             :   static Float_t  FitTiltedRiemanConstraint(AliTRDseedV1 *tracklets, Double_t zVertex);
     101             :   static Float_t  FitTiltedRieman(AliTRDseedV1 *tracklets, Bool_t sigError);
     102             :   static Double_t FitTiltedRiemanV1(AliTRDseedV1 *tracklets);
     103             :   
     104             :   static Double_t FitRiemanTilt(const AliTRDtrackV1 *trk, AliTRDseedV1 *tracklets = NULL, Bool_t err=0, Int_t np = 0, AliTrackPoint *points = NULL);
     105             :   static Double_t FitLine(const AliTRDtrackV1 *trk, AliTRDseedV1 *tracklets = NULL, Bool_t err=0, Int_t np = 0, AliTrackPoint *points = NULL);
     106             :   static Double_t FitKalman(AliTRDtrackV1 *trk, AliTRDseedV1 * const tracklets = NULL, Bool_t up=0, Int_t np = 0, AliTrackPoint *points = NULL);
     107             : 
     108          20 :   Bool_t          IsClustersOwner() const    { return TestBit(kOwner);}
     109          16 :   Bool_t          HasRemoveContainers() const    { return TestBit(kRemoveContainers);}
     110             : 
     111           0 :   static void     SetBetheBloch(ETRDtrackerV1BetheBloch bb) {fgBB = bb;}
     112           0 :   void            SetClustersOwner(Bool_t own=kTRUE) {SetBit(kOwner, own); if(!own) fClusters = NULL;}
     113           0 :   void            SetRemoveContainers(Bool_t rm=kTRUE) {SetBit(kRemoveContainers, rm);}
     114             : 
     115             :   Int_t           FollowBackProlongation(AliTRDtrackV1 &t);
     116             :   Int_t           FollowProlongation(AliTRDtrackV1 &t);
     117             :   Int_t           LoadClusters(TTree *cTree);
     118             :   Int_t           LoadClusters(TClonesArray *const clusters);
     119             :   Int_t           PropagateBack(AliESDEvent *event);
     120             :   static Int_t    PropagateToX(AliTRDtrackV1 &t, Double_t xToGo, Double_t maxStep);
     121             :   Bool_t          ReadClusters(TTree *in);
     122             :   Int_t           RefitInward(AliESDEvent *event);
     123           0 :   static void     SetNTimeBins(Int_t nTimeBins){fgNTimeBins = nTimeBins; }
     124           8 :   void            SetReconstructor(const AliTRDReconstructor *rec) {fkReconstructor = rec;}
     125             :   void            UnloadClusters();
     126             : 
     127             :   class AliTRDLeastSquare{
     128             :   public:
     129             :     AliTRDLeastSquare();
     130           8 :     ~AliTRDLeastSquare(){};
     131             :     
     132             :     void          AddPoint(const Double_t * const x, Double_t y, Double_t sigmaY);
     133             :     void          RemovePoint(const Double_t * const x, Double_t y, Double_t sigmaY);
     134             :     Bool_t        Eval();
     135             :     void          Reset();
     136             :     
     137        6220 :     Double_t      GetFunctionParameter(Int_t ParNumber) const {return fParams[ParNumber];}
     138             :     Double_t      GetFunctionValue(const Double_t * const xpos) const;
     139             :     void          GetCovarianceMatrix(Double_t *storage) const;
     140             :   private:
     141             :     AliTRDLeastSquare(const AliTRDLeastSquare &);
     142             :     AliTRDLeastSquare& operator=(const AliTRDLeastSquare &);
     143             :     Double_t      fParams[2];           // Fitparameter 
     144             :     Double_t      fCovarianceMatrix[3]; // Covariance Matrix
     145             :     Double_t      fSums[6];             // Sums
     146             :   };
     147             : 
     148             :   class AliTRDtrackFitterRieman{
     149             :     public:
     150             :       AliTRDtrackFitterRieman();
     151             :       ~AliTRDtrackFitterRieman();
     152             : 
     153             :       Double_t Eval();
     154             :       void Reset();
     155             : 
     156             :       Double_t GetYat(Double_t x) const;
     157             :       Double_t GetDyDxAt(Double_t x) const;
     158             :       Double_t GetZat(Double_t x) const;
     159           0 :       Double_t GetDzDx() const { return fParameters[4]; };
     160             :       Double_t GetCurvature() const;
     161             :       void GetCovAt(Double_t x, Double_t *cov) const;
     162             : 
     163           0 :       void SetRiemanFitter(TLinearFitter *const fitter) { fTrackFitter = fitter; }
     164             :       void SetTracklet(Int_t il, AliTRDseedV1 * const tracklet);
     165           0 :       void SetSysClusterError(Double_t err) { fSysClusterError = err; };
     166             :     private:
     167             :       AliTRDtrackFitterRieman(const AliTRDtrackFitterRieman &);
     168             :       AliTRDtrackFitterRieman &operator=(const AliTRDtrackFitterRieman &);
     169             :       void UpdateFitters(const AliTRDseedV1 * const tracklet);
     170             :       Bool_t CheckAcceptable(Double_t offset, Double_t slope);
     171             :       Double_t CalculateReferenceX();
     172             : 
     173             :       TLinearFitter *fTrackFitter;        // Fitter for linearized track model
     174             :       AliTRDLeastSquare *fZfitter;        // Linear fitter in z-Direction
     175             :       AliTRDseedV1 *fTracklets[kNPlanes]; // Tracklet container
     176             :       TMatrixD *fCovarPolY;               // Polynomial Covariance Matrix Estimation (y-direction)
     177             :       TMatrixD *fCovarPolZ;               // Polynomial Covariance Matrix Estimation (z-direction)
     178             :       Double_t fXref;                     // Reference x position for fit in z-Direction
     179             :       Double_t fSysClusterError;          // Systematic cluster Error
     180             :       Double_t fParameters[5];            // Track Model Parameter
     181             :       Double_t fSumPolY[5];               // Sums for polynomial Covariance Matrix Estimation (y-direction)
     182             :       Double_t fSumPolZ[3];               // Sums for polynomial Covariance Matrix Estimation (z-direction)
     183             :   };
     184             : 
     185             : protected:
     186             :   static Bool_t  AdjustSector(AliTRDtrackV1 *const track); 
     187             :   Double_t       BuildSeedingConfigs(AliTRDtrackingChamber **stack, Int_t *configs);
     188             :   Int_t          BuildTrackingContainers();
     189             :   static Float_t CalculateChi2Z(const AliTRDseedV1 *tracklets, Double_t offset, Double_t slope, Double_t xref);
     190             :   Int_t          Clusters2TracksSM(Int_t sector, AliESDEvent *esd);
     191             :   Int_t          Clusters2TracksStack(AliTRDtrackingChamber **stack, TClonesArray * const esdTrackList);
     192             :   AliTRDseedV1*  GetTracklet(const AliTRDtrackV1 *const trk, Int_t plane, Int_t &idx);
     193             :   Bool_t         GetTrackPoint(Int_t index, AliTrackPoint &p) const;        
     194             :   Float_t        GetR4Layer(Int_t ly) const { return fR[ly];}
     195             :   Int_t          MakeSeeds(AliTRDtrackingChamber **stack, AliTRDseedV1 * const sseed, const Int_t * const ipar);
     196             :   AliTRDtrackV1* MakeTrack(AliTRDseedV1 * const tracklet);
     197             :   AliTRDtrackV1* SetTrack(const AliTRDtrackV1 * const track);
     198             :   AliTRDseedV1*  SetTracklet(const AliTRDseedV1 * const tracklet);
     199             :   void           UnsetTrackletsTrack(const AliTRDtrackV1 * const track);
     200             : 
     201             : private:
     202             :   AliTRDtrackerV1(const AliTRDtrackerV1 &tracker);
     203             :   AliTRDtrackerV1 &operator=(const AliTRDtrackerV1 &tracker);
     204             :   Double_t       CookLikelihood(AliTRDseedV1 *cseed, Int_t planes[4]);
     205             :   Double_t       CalculateTrackLikelihood(Double_t *chi2);
     206             :   Bool_t         ImproveSeedQuality(AliTRDtrackingChamber **stack, AliTRDseedV1 *tracklet, Double_t &chi2);
     207             :   static Float_t        CalculateReferenceX(const AliTRDseedV1 *const tracklets);
     208             :   void        ResetSeedTB();
     209             :   Float_t     GetChi2Y(const AliTRDseedV1 *const tracklets) const;
     210             :   Float_t     GetChi2Z(const AliTRDseedV1 *const tracklets) const;
     211             :   Float_t     GetChi2Phi(const AliTRDseedV1 *const tracklets) const;
     212             : 
     213             :   const AliTRDReconstructor *fkReconstructor;           // reconstructor manager
     214             :   const AliTRDrecoParam     *fkRecoParam;               // reco param for the current event
     215             :   AliTRDgeometry      *fGeom;                           // Pointer to TRD geometry
     216             :   AliTRDtrackingSector fTrSec[kTrackingSectors];        // Array of tracking sectors;    
     217             :   TClonesArray        *fClusters;                       // List of clusters
     218             :   TClonesArray        *fTracklets;                      // List of tracklets
     219             :   TClonesArray        *fTracks;                         // List of tracks
     220             :   TClonesArray        *fTracksESD;                      // List of ESD tracks in current SM
     221             :   Float_t              fR[kNPlanes];                    //! rough radial position of each TRD layer
     222             : 
     223             :   // stand alone tracking
     224             :   static Double_t      fgTopologicQA[kNConfigs];        //  Topologic quality
     225             :   Double_t             fTrackQuality[kMaxTracksStack];  //  Track quality 
     226             :   Int_t                fSeedLayer[kMaxTracksStack];     //  Seed layer
     227             :   AliTRDchamberTimeBin *fSeedTB[kNSeedPlanes]; // seeding time bin planes
     228             :   Int_t                fSieveSeeding;                   //! Seeding iterator
     229             :   Int_t                fEventInFile;                    //! event in file being tracked (debug purposes)
     230             : 
     231             :   static ETRDtrackerV1BetheBloch fgBB;                  // Bethe Bloch method
     232             :   static const Double_t fgkX0[kNPlanes];                // default values for the position of anode wire
     233             :   static Int_t         fgNTimeBins;                     // Timebins per plane in track prolongation 
     234             :   static TLinearFitter *fgTiltedRieman;                 //  Fitter for the tilted Rieman fit without vertex constriant
     235             :   static TLinearFitter *fgTiltedRiemanConstrained;      //  Fitter for the tilted Rieman fit with vertex constraint     
     236             :   static AliRieman     *fgRieman;                       //  Fitter for the untilted Rieman fit
     237             :   
     238        6444 :   ClassDef(AliTRDtrackerV1, 7)                          //  TRD tracker - tracklet based tracking
     239             : 
     240             : };
     241             : #endif

Generated by: LCOV version 1.11