ROOT logo
#ifndef ALIITSUTRACKERSA_H
#define ALIITSUTRACKERSA_H

//-------------------------------------------------------------------------
//                   The stand-alone ITSU tracker
//     It reads AliITSUClusterPix clusters and writes the tracks to the ESD
//-------------------------------------------------------------------------

#include "AliTracker.h"
#include "AliITSUGeomTGeo.h"
#include <TClonesArray.h>
#include <vector>
#include "AliITSUTrackerSAaux.h"   // Structs and other stuff
#include "AliITSUMatLUT.h"
#include "AliITSUAux.h"
#include "AliExternalTrackParam.h"

class AliITSUReconstructor;
class AliITSURecoDet;
class AliITSURecoLayer;

class TTree;
class AliCluster;
class AliESDEvent;

using std::vector;

//-------------------------------------------------------------------------
class AliITSUTrackerSA : public AliTracker {
public:
  AliITSUTrackerSA(AliITSUReconstructor* rec=0);
  virtual ~AliITSUTrackerSA();

  // These functions must be implemented
  Int_t Clusters2Tracks(AliESDEvent *event);
  Int_t PropagateBack(AliESDEvent *event);
  Int_t RefitInward(AliESDEvent *event);
  Int_t LoadClusters(TTree *ct);
  void UnloadClusters();
  
  inline AliCluster *GetCluster(Int_t index) const {
    const Int_t l=(index & 0xf0000000) >> 28;
    const Int_t c=(index & 0x0fffffff);
    return (AliCluster*)fClustersTC[l]->At(c) ;
  }

  // Possibly, other public functions
  void     Init(AliITSUReconstructor* rec);
  Double_t RefitTrack(AliExternalTrackParam* trc, Int_t clInfo[2*AliITSUAux::kMaxLayers], Double_t rDest, Int_t stopCond);
  Bool_t   PropagateSeed(AliExternalTrackParam *seed, Double_t xToGo, Double_t mass, Double_t maxStep=1.0, Bool_t matCorr=kTRUE);
  Double_t GetMaterialBudget(const double* pnt0, const double* pnt1, double& x2x0, double& rhol) const;
  Bool_t   GoToEntranceToLayer(AliExternalTrackParam* seed, AliITSURecoLayer* lr, Int_t dir, Bool_t check=kFALSE);
  Bool_t   GoToExitFromLayer(AliExternalTrackParam* seed, AliITSURecoLayer* lr, Int_t dir, Bool_t check=kTRUE);
  Bool_t   TransportToLayerX(AliExternalTrackParam* seed, Int_t lFrom, Int_t lTo, Double_t xStop);
  Bool_t   TransportToLayer(AliExternalTrackParam* seed, Int_t lFrom, Int_t lTo, Double_t rLim=-1);
  
  void SetChi2Cut(float cut) { fChi2Cut=cut; }
  void SetRPhiCut(float cut) { fRPhiCut=cut; }
  void SetPhiCut(float cut) { fPhiCut=cut; }
  void SetZCut(float cut) { fZCut=cut; }


  //
protected:
  AliITSUTrackerSA(const AliITSUTrackerSA&);

  void CellsCreation(const int &cutLevel);
  void CellularAutomaton(AliESDEvent *ev);
  //  void MakeTriplets();
  void CandidatesTreeTraversal( vector<Road> &vec, const int &iD, const int &doubl);
  Bool_t InitTrackParams(AliITSUTrackCooked &track, int points[]);
  void GlobalFit();
  void ChiSquareSelection();
  void MergeTracks( vector<AliITSUTrackCooked> &vec, bool flags[] );
  // Other protected functions
  // (Sorting, labeling, calculations of "roads", etc)
  static Double_t Curvature(Double_t x1,Double_t y1,Double_t x2,Double_t y2,Double_t x3,Double_t y3);



private:
  AliITSUTrackerSA &operator=(const AliITSUTrackerSA &tr);
  void SetLabel(AliITSUTrackCooked &t, Float_t wrong);

  // Data members

  // classes for interfacing the geometry, materials etc.
  AliITSUReconstructor*           fReconstructor;  // ITS global reconstructor
  AliITSURecoDet*                 fITS;            // interface to ITS, borrowed from reconstructor
  AliITSUMatLUT*                  fMatLUT;         // material lookup table
  Bool_t                          fUseMatLUT;      //! use material lookup table rather than TGeo
  Double_t                        fCurrMass;       // assumption about particle mass


  // Internal tracker arrays, layers, modules, etc
  Layer fLayer[7];
  TClonesArray *fClustersTC[7];
  vector<Cell> fCells[5];
  Float_t fChi2Cut;
  Float_t fPhiCut;
  Float_t fRPhiCut;
  Float_t fZCut;

  //
  static const Double_t           fgkToler;        // tracking tolerance
  static const Double_t           fgkChi2Cut; // chi2 cut during track merging
  //
  ClassDef(AliITSUTrackerSA,1)   //ITSU stand-alone tracker
};

#endif
 AliITSUTrackerSA.h:1
 AliITSUTrackerSA.h:2
 AliITSUTrackerSA.h:3
 AliITSUTrackerSA.h:4
 AliITSUTrackerSA.h:5
 AliITSUTrackerSA.h:6
 AliITSUTrackerSA.h:7
 AliITSUTrackerSA.h:8
 AliITSUTrackerSA.h:9
 AliITSUTrackerSA.h:10
 AliITSUTrackerSA.h:11
 AliITSUTrackerSA.h:12
 AliITSUTrackerSA.h:13
 AliITSUTrackerSA.h:14
 AliITSUTrackerSA.h:15
 AliITSUTrackerSA.h:16
 AliITSUTrackerSA.h:17
 AliITSUTrackerSA.h:18
 AliITSUTrackerSA.h:19
 AliITSUTrackerSA.h:20
 AliITSUTrackerSA.h:21
 AliITSUTrackerSA.h:22
 AliITSUTrackerSA.h:23
 AliITSUTrackerSA.h:24
 AliITSUTrackerSA.h:25
 AliITSUTrackerSA.h:26
 AliITSUTrackerSA.h:27
 AliITSUTrackerSA.h:28
 AliITSUTrackerSA.h:29
 AliITSUTrackerSA.h:30
 AliITSUTrackerSA.h:31
 AliITSUTrackerSA.h:32
 AliITSUTrackerSA.h:33
 AliITSUTrackerSA.h:34
 AliITSUTrackerSA.h:35
 AliITSUTrackerSA.h:36
 AliITSUTrackerSA.h:37
 AliITSUTrackerSA.h:38
 AliITSUTrackerSA.h:39
 AliITSUTrackerSA.h:40
 AliITSUTrackerSA.h:41
 AliITSUTrackerSA.h:42
 AliITSUTrackerSA.h:43
 AliITSUTrackerSA.h:44
 AliITSUTrackerSA.h:45
 AliITSUTrackerSA.h:46
 AliITSUTrackerSA.h:47
 AliITSUTrackerSA.h:48
 AliITSUTrackerSA.h:49
 AliITSUTrackerSA.h:50
 AliITSUTrackerSA.h:51
 AliITSUTrackerSA.h:52
 AliITSUTrackerSA.h:53
 AliITSUTrackerSA.h:54
 AliITSUTrackerSA.h:55
 AliITSUTrackerSA.h:56
 AliITSUTrackerSA.h:57
 AliITSUTrackerSA.h:58
 AliITSUTrackerSA.h:59
 AliITSUTrackerSA.h:60
 AliITSUTrackerSA.h:61
 AliITSUTrackerSA.h:62
 AliITSUTrackerSA.h:63
 AliITSUTrackerSA.h:64
 AliITSUTrackerSA.h:65
 AliITSUTrackerSA.h:66
 AliITSUTrackerSA.h:67
 AliITSUTrackerSA.h:68
 AliITSUTrackerSA.h:69
 AliITSUTrackerSA.h:70
 AliITSUTrackerSA.h:71
 AliITSUTrackerSA.h:72
 AliITSUTrackerSA.h:73
 AliITSUTrackerSA.h:74
 AliITSUTrackerSA.h:75
 AliITSUTrackerSA.h:76
 AliITSUTrackerSA.h:77
 AliITSUTrackerSA.h:78
 AliITSUTrackerSA.h:79
 AliITSUTrackerSA.h:80
 AliITSUTrackerSA.h:81
 AliITSUTrackerSA.h:82
 AliITSUTrackerSA.h:83
 AliITSUTrackerSA.h:84
 AliITSUTrackerSA.h:85
 AliITSUTrackerSA.h:86
 AliITSUTrackerSA.h:87
 AliITSUTrackerSA.h:88
 AliITSUTrackerSA.h:89
 AliITSUTrackerSA.h:90
 AliITSUTrackerSA.h:91
 AliITSUTrackerSA.h:92
 AliITSUTrackerSA.h:93
 AliITSUTrackerSA.h:94
 AliITSUTrackerSA.h:95
 AliITSUTrackerSA.h:96
 AliITSUTrackerSA.h:97
 AliITSUTrackerSA.h:98
 AliITSUTrackerSA.h:99
 AliITSUTrackerSA.h:100
 AliITSUTrackerSA.h:101
 AliITSUTrackerSA.h:102
 AliITSUTrackerSA.h:103
 AliITSUTrackerSA.h:104
 AliITSUTrackerSA.h:105
 AliITSUTrackerSA.h:106
 AliITSUTrackerSA.h:107
 AliITSUTrackerSA.h:108
 AliITSUTrackerSA.h:109
 AliITSUTrackerSA.h:110
 AliITSUTrackerSA.h:111