]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/AliTRDtrackerV1.h
Small update (number of bins)
[u/mrichter/AliRoot.git] / TRD / AliTRDtrackerV1.h
index 042362d42a20863b8139a59c13753e776a83d174..d8a9069604ddd6e5a5893b6285c1f1f90c919a4b 100644 (file)
@@ -2,8 +2,7 @@
 #define ALITRDTRACKERV1_H
 
 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- * See cxx source for full Copyright notice                               */ 
-
+* See cxx source for full Copyright notice                               */ 
 /* $Id$ */
 
 ////////////////////////////////////////////////////////////////////////////
@@ -27,9 +26,9 @@
 #endif
 
 /**************************************************************************
- * Class Status see source file                                           *
- **************************************************************************/
+* Class Status see source file                                           *
+**************************************************************************/
+
 class TFile;
 class TTreeSRedirector;
 class TClonesArray;
@@ -38,6 +37,7 @@ class TLinearFitter;
 class AliRieman;
 class AliESDEvent;
 class AliCluster;
+class AliTrackPoint;
 
 class AliTRDcluster;
 class AliTRDseedV1;
@@ -45,10 +45,14 @@ class AliTRDtrackingChamber;
 class AliTRDchamberTimeBin;
 class AliTRDtrackerFitter;
 class AliTRDtrackV1;
-class AliTrackPoint;
+class AliTRDReconstructor;
 class AliTRDtrackerV1 : public AliTracker
 {
 public:
+  enum{
+    kOwner            = BIT(14) // owner of clusters
+   ,kRemoveContainers = BIT(15) // delete containers after usage
+  };
   enum{
     kMaxLayersPerSector   = 1000
     , kMaxTimeBinIndex    = 216
@@ -59,21 +63,20 @@ public:
     , kMaxTracksStack     = 100
     , kNConfigs           = 15
   };
-  AliTRDtrackerV1();
+  AliTRDtrackerV1(AliTRDReconstructor *rec = 0x0);
   virtual ~AliTRDtrackerV1();
   
   //temporary
   AliTRDtrackingSector* GetTrackingSector(Int_t sec) {return &fTrSec[sec];}
   
   Int_t           Clusters2Tracks(AliESDEvent *esd);
-  static TTreeSRedirector* DebugStreamer() {return fgDebugStreamer;}
   AliCluster*     GetCluster(Int_t index) const;
   AliTRDseedV1*   GetTracklet(Int_t index) const;
   AliKalmanTrack* GetTrack(Int_t index) const;
-  TClonesArray*   GetListOfClusters() {return fClusters;}
-  TClonesArray*   GetListOfTracklets() {return fTracklets;}
-  TClonesArray*   GetListOfTracks() {return fTracks;}
-  static const Int_t     GetNTimeBins() {return fgNTimeBins;}
+  TClonesArray*   GetListOfClusters() const  { return fClusters;}
+  TClonesArray*   GetListOfTracklets() const { return fTracklets;}
+  TClonesArray*   GetListOfTracks() const    { return fTracks;}
+  static Int_t    GetNTimeBins()             { return fgNTimeBins;}
   static void     GetExtrapolationConfig(Int_t iconfig, Int_t planes[2]);
   static void     GetSeedingConfig(Int_t iconfig, Int_t planes[4]);
   static TLinearFitter*  GetTiltedRiemanFitter();
@@ -84,20 +87,26 @@ public:
   static Float_t  FitTiltedRiemanConstraint(AliTRDseedV1 *tracklets, Double_t zVertex);
   static Float_t  FitTiltedRieman(AliTRDseedV1 *tracklets, Bool_t sigError);
   
-       static Double_t FitRiemanTilt(AliTRDtrackV1 *trk, AliTRDseedV1 *tracklets = 0x0, Bool_t err=0, Int_t np = 0, AliTrackPoint *points = 0x0);
-       static Double_t FitLine(AliTRDtrackV1 *trk, AliTRDseedV1 *tracklets = 0x0, Bool_t err=0, Int_t np = 0, AliTrackPoint *points = 0x0);
-       //static Double_t FitKalman(AliTRDtrackV1 *trk, AliTRDseedV1 *tracklets = 0x0, Bool_t up=0, Int_t np = 0, AliTrackPoint *points = 0x0);
+  static Double_t FitRiemanTilt(const AliTRDtrackV1 *trk, AliTRDseedV1 *tracklets = 0x0, Bool_t err=0, Int_t np = 0, AliTrackPoint *points = 0x0);
+  static Double_t FitLine(const AliTRDtrackV1 *trk, AliTRDseedV1 *tracklets = 0x0, Bool_t err=0, Int_t np = 0, AliTrackPoint *points = 0x0);
+  static Double_t FitKalman(AliTRDtrackV1 *trk, AliTRDseedV1 *tracklets = 0x0, Bool_t up=0, Int_t np = 0, AliTrackPoint *points = 0x0);
+
+  Bool_t          IsClustersOwner() const    { return TestBit(kOwner);}
+  Bool_t          HasRemoveContainers() const    { return TestBit(kRemoveContainers);}
+  void            SetClustersOwner(Bool_t own=kTRUE) {SetBit(kOwner, own); if(!own) fClusters = 0x0;}
+  void            SetRemoveContainers(Bool_t rm=kTRUE) {SetBit(kRemoveContainers, rm);}
 
   Int_t           FollowBackProlongation(AliTRDtrackV1 &t);
   Int_t           FollowProlongation(AliTRDtrackV1 &t);
   Int_t           LoadClusters(TTree *cTree);
+  Int_t           LoadClusters(TClonesArray *clusters);
   Int_t           PropagateBack(AliESDEvent *event);
+  static Int_t    PropagateToX(AliTRDtrackV1 &t, Double_t xToGo, Double_t maxStep);
   Int_t           ReadClusters(TClonesArray* &array, TTree *in) const;
   Int_t           RefitInward(AliESDEvent *event);
   static void     SetNTimeBins(Int_t nTimeBins){fgNTimeBins = nTimeBins; }
+  void            SetReconstructor(const AliTRDReconstructor *rec){ fReconstructor = rec; }
   void            UnloadClusters();
-  
-  static Int_t    Freq(Int_t n, const Int_t *inlist, Int_t *outlist, Bool_t down); // to be removed 
 
   class AliTRDLeastSquare{
   public:
@@ -122,56 +131,59 @@ public:
 protected:
   static Bool_t  AdjustSector(AliTRDtrackV1 *track); 
   Double_t       BuildSeedingConfigs(AliTRDtrackingChamber **stack, Int_t *configs);
+  Int_t          BuildTrackingContainers();
   static Float_t CalculateChi2Z(AliTRDseedV1 *tracklets, Double_t offset, Double_t slope, Double_t xref);
   Int_t          Clusters2TracksSM(Int_t sector, AliESDEvent *esd);
   Int_t          Clusters2TracksStack(AliTRDtrackingChamber **stack, TClonesArray *esdTrackList);
   AliTRDseedV1*  GetTracklet(AliTRDtrackV1 *trk, Int_t plane, Int_t &idx);
   Bool_t         GetTrackPoint(Int_t index, AliTrackPoint &p) const;   
+  Float_t        GetR4Layer(Int_t ly) const { return fR[ly];}
   Int_t          MakeSeeds(AliTRDtrackingChamber **stack, AliTRDseedV1 *sseed, Int_t *ipar);
   AliTRDtrackV1* MakeTrack(AliTRDseedV1 *seeds, Double_t *params);
-  static Int_t   PropagateToX(AliTRDtrackV1 &t, Double_t xToGo, Double_t maxStep);
+  AliTRDtrackV1* SetTrack(AliTRDtrackV1 *track);
   AliTRDseedV1*  SetTracklet(AliTRDseedV1 *tracklet);
 
 private:
-       AliTRDtrackerV1(const AliTRDtrackerV1 &tracker);
-       AliTRDtrackerV1 &operator=(const AliTRDtrackerV1 &tracker);
-       Double_t        CookLikelihood(AliTRDseedV1 *cseed, Int_t planes[4], Double_t *chi2);
-       Double_t        CalculateTrackLikelihood(AliTRDseedV1 *tracklets, Double_t *chi2);
-       Int_t           ImproveSeedQuality(AliTRDtrackingChamber **stack, AliTRDseedV1 *tracklet);
-       static Float_t  CalculateReferenceX(AliTRDseedV1 *tracklets);
-       
-       Float_t     GetChi2Y(AliTRDseedV1 *tracklets) const;
-       Float_t     GetChi2Z(AliTRDseedV1 *tracklets) const;
+  AliTRDtrackerV1(const AliTRDtrackerV1 &tracker);
+  AliTRDtrackerV1 &operator=(const AliTRDtrackerV1 &tracker);
+  Double_t             CookLikelihood(AliTRDseedV1 *cseed, Int_t planes[4]);
+  Double_t             CalculateTrackLikelihood(AliTRDseedV1 *tracklets, Double_t *chi2);
+  Int_t                ImproveSeedQuality(AliTRDtrackingChamber **stack, AliTRDseedV1 *tracklet);
+  static Float_t       CalculateReferenceX(AliTRDseedV1 *tracklets);
+  void        ResetSeedTB();
+  Float_t     GetChi2Y(AliTRDseedV1 *tracklets) const;
+  Float_t     GetChi2Z(AliTRDseedV1 *tracklets) const;
 
 private:
-  AliTRDgeometry          *fGeom;                          // Pointer to TRD geometry
-  AliTRDtrackingSector    fTrSec[kTrackingSectors];       // Array of tracking sectors;    
-
+  const AliTRDReconstructor *fReconstructor;            // reconstructor manager
+  AliTRDgeometry      *fGeom;                           // Pointer to TRD geometry
+  AliTRDtrackingSector fTrSec[kTrackingSectors];        // Array of tracking sectors;    
   TClonesArray        *fClusters;                       // List of clusters
   TClonesArray        *fTracklets;                      // List of tracklets
   TClonesArray        *fTracks;                         // List of tracks
-  
+  Float_t              fR[kNPlanes];                    //! rough radial position of each TRD layer
+
   // should go to the recoParam
-  static const Double_t    fgkMaxChi2;                     // Max increment in track chi2 
-  static const Float_t     fgkMinClustersInTrack;          // Min number of clusters in track
-  static const Float_t     fgkLabelFraction;               // Min fraction of same label
-  static const Double_t    fgkMaxSnp;                      // Maximal snp for tracking
-  static const Double_t    fgkMaxStep;                     // Maximal step for tracking  
-       
-       // stand alone tracking
-       static Double_t      fgTopologicQA[kNConfigs];        //  Topologic quality
-       Double_t             fTrackQuality[kMaxTracksStack];  //  Track quality 
-       Int_t                fSeedLayer[kMaxTracksStack];     //  Seed layer
-       Int_t                fSieveSeeding;                   //! Seeding iterator
-       
+  static const Double_t    fgkMaxChi2;                  // Max increment in track chi2 
+  static const Float_t     fgkMinClustersInTrack;       // Min number of clusters in track
+  static const Float_t     fgkLabelFraction;            // Min fraction of same label
+  static const Double_t    fgkMaxSnp;                   // Maximal snp for tracking
+  static const Double_t    fgkMaxStep;                  // Maximal step for tracking  
+  
+  // stand alone tracking
+  static Double_t      fgTopologicQA[kNConfigs];        //  Topologic quality
+  Double_t             fTrackQuality[kMaxTracksStack];  //  Track quality 
+  Int_t                fSeedLayer[kMaxTracksStack];     //  Seed layer
+  AliTRDchamberTimeBin *fSeedTB[kNSeedPlanes]; // seeding time bin planes
+  Int_t                fSieveSeeding;                   //! Seeding iterator
+  
+  static const Double_t fgkX0[kNPlanes];                // default values for the position of anode wire
   static Int_t         fgNTimeBins;                     // Timebins per plane in track prolongation 
-       static TLinearFitter *fgTiltedRieman;                 //  Fitter for the tilted Rieman fit without vertex constriant
-       static TLinearFitter *fgTiltedRiemanConstrained;      //  Fitter for the tilted Rieman fit with vertex constraint       
-       static AliRieman     *fgRieman;                       //  Fitter for the untilted Rieman fit
+  static TLinearFitter *fgTiltedRieman;                 //  Fitter for the tilted Rieman fit without vertex constriant
+  static TLinearFitter *fgTiltedRiemanConstrained;      //  Fitter for the tilted Rieman fit with vertex constraint    
+  static AliRieman     *fgRieman;                       //  Fitter for the untilted Rieman fit
   
-       static TTreeSRedirector *fgDebugStreamer;             //!Debug streamer
-       
-       ClassDef(AliTRDtrackerV1, 2)                          //  TRD tracker development class
+  ClassDef(AliTRDtrackerV1, 3)                          //  TRD tracker - tracklet based tracking
 
 };
 #endif