ROOT logo
//-*- Mode: C++ -*-
// ************************************************************************
// This file is property of and copyright by the ALICE ITSU Project       *
// ALICE Experiment at CERN, All rights reserved.                         *
// See cxx source for full Copyright notice                               *
//                                                                        *
//*************************************************************************

#ifndef ALIITSUCATRACKER_H
#define ALIITSUCATRACKER_H

#define _TUNING_

#include <vector>

#include <TClonesArray.h>
#include "AliITSUCACell.h"
#include "AliITSUCATrackingStation.h"
typedef struct AliITSUCATrackingStation::ClsInfo ClsInfo_t;

#include "AliITSUTrackerGlo.h"

class AliITSUReconstructor;
class AliITSURecoDet;
class AliITSURecoLayer;
class AliITSUTrackCooked;

class TTree;
class AliCluster;
class AliESDEvent;

#ifdef _TUNING_
#include <TH1F.h>
#endif

using std::vector;

//__________________________________________________________________________________________________
class Doublets {
public:
  Doublets(int xx = 0, int yy = 0, float tL = 0.f, float ph = 0.f)
  : x((unsigned short)xx)
  , y((unsigned short)yy)
  , tanL(tL)
  , phi(ph) {}
  unsigned short x,y;
  float tanL, phi;
};

//__________________________________________________________________________________________________
class AliITSUCATracker : public AliITSUTrackerGlo {
public:
  AliITSUCATracker(AliITSUReconstructor* rec=0);
  virtual ~AliITSUCATracker();

  // 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();
  AliCluster *GetCluster(Int_t index) const;

  // Possibly, other public functions
  Double_t GetMaterialBudget(const double* p0, const double* p1, double& x2x0, double& rhol) const;
  Bool_t   GetSAonly() const { return fSAonly; }
  void     SetChi2Cut(float cut) { fChi2Cut = cut; }
  void     SetPhiCut(float cut) { fPhiCut = cut; }
  void     SetSAonly(Bool_t sa=kTRUE) { fSAonly=sa; }
  void     SetZCut(float cut) { fZCut = cut; }

#ifdef _TUNING_
  bool                            fGood;
  TH1F *                          fGoodCombChi2[5];
  TH1F *                          fFakeCombChi2[5];
  TH1F *                          fGoodCombN[4];
  TH1F *                          fFakeCombN[4];
  TH1F *                          fGDZ[6];
  TH1F *                          fGDXY[6];
  TH1F *                          fFDZ[6];
  TH1F *                          fFDXY[6];
  TH1F *                          fGDCAZ[5];
  TH1F *                          fGDCAXY[5];
  TH1F *                          fFDCAZ[5];
  TH1F *                          fFDCAXY[5];
  TH1F *                          fTan;
  TH1F *                          fTanF;
  TH1F *                          fPhi;
  TH1F *                          fPhiF;
  TH1F *                          fNEntries;
  void ResetHistos();
#endif
  //
protected:
  bool   CellParams(int l, ClsInfo_t* c1, ClsInfo_t* c2, ClsInfo_t* c3, float &curv, float np[3]);
  void   CellsTreeTraversal(vector<AliITSUCARoad> &roads, const int &iD, const int &doubl);
  void   FindTracksCA(int iteration);
  void   MakeCells(int iteration);
  Bool_t RefitAt(Double_t xx, AliITSUTrackCooked *t, const AliITSUTrackCooked *c);
  void   SetCuts(int it);
  void   SetLabel(AliITSUTrackCooked &t, Float_t wrong);
  
private:
  AliITSUCATracker(const AliITSUCATracker&);
  AliITSUCATracker &operator=(const AliITSUCATracker &tr);

  // Data members

  // classes for interfacing the geometry, materials etc
  // Internal tracker arrays, layers, modules, etc
  AliITSUCATrackingStation        fLayer[7];
  vector<bool>                    fUsedClusters[7];
  Float_t                         fChi2Cut;
  Float_t                         fPhiCut;
  Float_t                         fZCut;
  vector<Doublets>                fDoublets[6];
  vector<AliITSUCACell>           fCells[5];
  TClonesArray                   *fCandidates[4];
  Bool_t                          fSAonly;             // kTRUE if the standalone tracking only

  
  // Cuts
  float fCPhi;
  float fCDTanL;
  float fCDPhi;
  float fCZ;
  float fCDCAz[5];
  float fCDCAxy[5];
  float fCDN[4];
  float fCDP[4];
  float fCDZ[6];

  static const Double_t           fgkChi2Cut;      // chi2 cut during track merging
  static const int                fgkNumberOfIterations;
  static const float              fgkR[7];
  //
  ClassDef(AliITSUCATracker,2)   //ITSU stand-alone tracker
};

#endif // ALIITSUCATRACKER_H
 AliITSUCATracker.h:1
 AliITSUCATracker.h:2
 AliITSUCATracker.h:3
 AliITSUCATracker.h:4
 AliITSUCATracker.h:5
 AliITSUCATracker.h:6
 AliITSUCATracker.h:7
 AliITSUCATracker.h:8
 AliITSUCATracker.h:9
 AliITSUCATracker.h:10
 AliITSUCATracker.h:11
 AliITSUCATracker.h:12
 AliITSUCATracker.h:13
 AliITSUCATracker.h:14
 AliITSUCATracker.h:15
 AliITSUCATracker.h:16
 AliITSUCATracker.h:17
 AliITSUCATracker.h:18
 AliITSUCATracker.h:19
 AliITSUCATracker.h:20
 AliITSUCATracker.h:21
 AliITSUCATracker.h:22
 AliITSUCATracker.h:23
 AliITSUCATracker.h:24
 AliITSUCATracker.h:25
 AliITSUCATracker.h:26
 AliITSUCATracker.h:27
 AliITSUCATracker.h:28
 AliITSUCATracker.h:29
 AliITSUCATracker.h:30
 AliITSUCATracker.h:31
 AliITSUCATracker.h:32
 AliITSUCATracker.h:33
 AliITSUCATracker.h:34
 AliITSUCATracker.h:35
 AliITSUCATracker.h:36
 AliITSUCATracker.h:37
 AliITSUCATracker.h:38
 AliITSUCATracker.h:39
 AliITSUCATracker.h:40
 AliITSUCATracker.h:41
 AliITSUCATracker.h:42
 AliITSUCATracker.h:43
 AliITSUCATracker.h:44
 AliITSUCATracker.h:45
 AliITSUCATracker.h:46
 AliITSUCATracker.h:47
 AliITSUCATracker.h:48
 AliITSUCATracker.h:49
 AliITSUCATracker.h:50
 AliITSUCATracker.h:51
 AliITSUCATracker.h:52
 AliITSUCATracker.h:53
 AliITSUCATracker.h:54
 AliITSUCATracker.h:55
 AliITSUCATracker.h:56
 AliITSUCATracker.h:57
 AliITSUCATracker.h:58
 AliITSUCATracker.h:59
 AliITSUCATracker.h:60
 AliITSUCATracker.h:61
 AliITSUCATracker.h:62
 AliITSUCATracker.h:63
 AliITSUCATracker.h:64
 AliITSUCATracker.h:65
 AliITSUCATracker.h:66
 AliITSUCATracker.h:67
 AliITSUCATracker.h:68
 AliITSUCATracker.h:69
 AliITSUCATracker.h:70
 AliITSUCATracker.h:71
 AliITSUCATracker.h:72
 AliITSUCATracker.h:73
 AliITSUCATracker.h:74
 AliITSUCATracker.h:75
 AliITSUCATracker.h:76
 AliITSUCATracker.h:77
 AliITSUCATracker.h:78
 AliITSUCATracker.h:79
 AliITSUCATracker.h:80
 AliITSUCATracker.h:81
 AliITSUCATracker.h:82
 AliITSUCATracker.h:83
 AliITSUCATracker.h:84
 AliITSUCATracker.h:85
 AliITSUCATracker.h:86
 AliITSUCATracker.h:87
 AliITSUCATracker.h:88
 AliITSUCATracker.h:89
 AliITSUCATracker.h:90
 AliITSUCATracker.h:91
 AliITSUCATracker.h:92
 AliITSUCATracker.h:93
 AliITSUCATracker.h:94
 AliITSUCATracker.h:95
 AliITSUCATracker.h:96
 AliITSUCATracker.h:97
 AliITSUCATracker.h:98
 AliITSUCATracker.h:99
 AliITSUCATracker.h:100
 AliITSUCATracker.h:101
 AliITSUCATracker.h:102
 AliITSUCATracker.h:103
 AliITSUCATracker.h:104
 AliITSUCATracker.h:105
 AliITSUCATracker.h:106
 AliITSUCATracker.h:107
 AliITSUCATracker.h:108
 AliITSUCATracker.h:109
 AliITSUCATracker.h:110
 AliITSUCATracker.h:111
 AliITSUCATracker.h:112
 AliITSUCATracker.h:113
 AliITSUCATracker.h:114
 AliITSUCATracker.h:115
 AliITSUCATracker.h:116
 AliITSUCATracker.h:117
 AliITSUCATracker.h:118
 AliITSUCATracker.h:119
 AliITSUCATracker.h:120
 AliITSUCATracker.h:121
 AliITSUCATracker.h:122
 AliITSUCATracker.h:123
 AliITSUCATracker.h:124
 AliITSUCATracker.h:125
 AliITSUCATracker.h:126
 AliITSUCATracker.h:127
 AliITSUCATracker.h:128
 AliITSUCATracker.h:129
 AliITSUCATracker.h:130
 AliITSUCATracker.h:131
 AliITSUCATracker.h:132
 AliITSUCATracker.h:133
 AliITSUCATracker.h:134
 AliITSUCATracker.h:135
 AliITSUCATracker.h:136
 AliITSUCATracker.h:137
 AliITSUCATracker.h:138
 AliITSUCATracker.h:139
 AliITSUCATracker.h:140