ROOT logo
#ifndef ALITOFTRACKER_H
#define ALITOFTRACKER_H

/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

/* $Id$ */

//----------------------------------------------------------------------//
//                                                                      //
// AliTOFtracker Class                                                  //
// Task: Perform association of the ESD tracks to TOF Clusters          //
// and Update ESD track with associated TOF Cluster parameters          //
//                                                                      //
// -- Authors : S. Arcelli, C. Zampolli (Bologna University and INFN)   //
// -- Contacts: Annalisa.De.Caro@cern.ch                                //
// --         : Chiara.Zampolli@bo.infn.it                              //
// --         : Silvia.Arcelli@bo.infn.it                               //
//                                                                      //

#include "AliTracker.h"

#include "TObject.h"
#include "AliESDTOFCluster.h"
#include "AliESDTOFHit.h"

class TClonesArray;
class TObjArray;

class TH1F;
class TH2F;

class AliESDEvent;
class AliESDpid;

class AliTOFcluster;
class AliTOFRecoParam;
class AliTOFGeometry;

class AliTOFtrackPoint : public TObject {

 public:

  AliTOFtrackPoint() :
    fIndex(0),fDistance(0),fDistanceZ(0),
    fDistanceY(0),fDistanceX(0),fPropRadius(0),fLength(0) { };
  AliTOFtrackPoint(Int_t index,Float_t dist,Float_t distZ,
		   Float_t distY,Float_t distX,Float_t radius,Float_t length) :
    TObject(),
    fIndex(index),fDistance(dist),fDistanceZ(distZ),
    fDistanceY(distY),fDistanceX(distX),fPropRadius(radius),fLength(length) { };
  AliTOFtrackPoint(const AliTOFtrackPoint & source) :
    TObject(source),
    fIndex(source.fIndex),
    fDistance(source.fDistance),
    fDistanceZ(source.fDistanceZ),
    fDistanceY(source.fDistanceY),
    fDistanceX(source.fDistanceX),
    fPropRadius(source.fPropRadius),
    fLength(source.fLength) { };
  AliTOFtrackPoint & operator=(const AliTOFtrackPoint & source)
    { if (this == &source) return *this;
      TObject::operator=(source);
      fDistance=source.fDistance;fDistanceZ=source.fDistanceZ;fDistanceY=source.fDistanceY;fDistanceX=source.fDistanceX;
      fPropRadius=source.fPropRadius;fLength=source.fLength;
      return *this; };

  Int_t Index()       const {return fIndex;} // cluster index
  Float_t Distance()  const {return fDistance;} // distance
  Float_t DistanceZ() const {return fDistanceZ;} // distance, Z component
  Float_t DistanceY() const {return fDistanceY;} // distance, Y  component
  Float_t DistanceX() const {return fDistanceX;} // distance, X  component
  Float_t PropRadius() const {return fPropRadius;} // propagation radius at TOF
  Float_t Length() const {return fLength;} // reconstructed track length at TOF

 private:

  Int_t fIndex; // cluster index 
  Float_t fDistance; // track-cluster distance
  Float_t fDistanceZ; //  Z component of track-cluster distance
  Float_t fDistanceY; //  Y component of track-cluster distance
  Float_t fDistanceX; //  X component of track-cluster distance
  Float_t fPropRadius; // track propagation radius
  Float_t fLength; // receonstructed track length

  //ClassDef(AliTOFtrackPoint, 2) // TOF matchable cluster

}; 

class AliTOFtracker : public AliTracker {

 public:

 AliTOFtracker(); 

 virtual ~AliTOFtracker();
 virtual void GetPidSettings(AliESDpid *esdPID);
 virtual Int_t Clusters2Tracks(AliESDEvent* /*event*/) {return -1;};
 virtual Int_t PropagateBack(AliESDEvent * const event);
 virtual Int_t RefitInward(AliESDEvent* /*event*/) {return -1;};
 virtual Int_t LoadClusters(TTree * cTree); // Load Clusters
 virtual void  UnloadClusters();// UnLoad Clusters
 virtual AliCluster *GetCluster(Int_t index) const
   {if (index==-1 || index >= fN) return NULL;
   return (AliCluster *) fClusters[index];};
 Bool_t GetTrackPoint(Int_t index, AliTrackPoint& p) const;
 Int_t GetNumberOfMatchedTOFtracks() const {return fnmatch;}
 void InitCheckHists();
 void SaveCheckHists();
 void FillClusterArray(TObjArray* arr) const;
 
 protected:
 AliESDTOFCluster* GetESDTOFCluster(int clID);

 private:

 enum {kMaxCluster=77777}; //maximal number of the TOF clusters

 AliTOFtracker(const AliTOFtracker &t); //Copy Ctor 
 AliTOFtracker& operator=(const AliTOFtracker &source); // ass. op.

 Int_t FindClusterIndex(Double_t z) const; // Returns cluster index 
 void  MatchTracks(Int_t mLastStep); // Matching Algorithm 
 void  CollectESD(); // Select starting Set for Matching 
 Float_t CorrectTimeWalk(Float_t dist,Float_t tof) const; // Time Walk correction

 const AliTOFRecoParam* fkRecoParam;    // Pointer to TOF Recon. Pars
 AliTOFGeometry*  fGeom;                // Pointer to TOF geometry
 AliTOFcluster *fClusters[kMaxCluster]; // pointers to the TOF clusters

 Int_t fN;              // Number of Clusters
 Int_t fNseeds;         // Number of track seeds  
 Int_t fNseedsTOF;      // TPC BP tracks
 Int_t fngoodmatch;     // Correctly matched  tracks
 Int_t fnbadmatch;      // Wrongly matched tracks
 Int_t fnunmatch;       // Unmatched tracks
 Int_t fnmatch;         // Total matched tracks

 AliESDEvent*  fESDEv;  //! pointer on the esd event
 
 TClonesArray* fTracks; //! pointer to the TClonesArray with TOF tracks
 TObjArray* fSeeds;  //! pointer to the TObjArray with ESD tracks
                     //Digits/Reco QA histos
 TObjArray* fTOFtrackPoints; //! pointer to TObjArray of matchable TOF
			     //track points

 TH2F * fHDigClusMap; //Digits QA, Cluster Map 
 TH1F * fHDigNClus;   //Digits QA, # of clusters on TOF/event
 TH1F * fHDigClusTime;//Digits QA, Cluster Time (ns)
 TH1F * fHDigClusToT; //Digits QA, Cluster ToT (ns)
 TH1F * fHRecNClus; //Reco QA, cluster occupancy in search window
 TH1F * fHRecDist;//Reco QA, track-TOF cluster closest distance (cm)
 TH2F * fHRecSigYVsP;//Reco QA, track error in Y at TOF inner surface (cm)
 TH2F * fHRecSigZVsP; //Reco QA, track error in Z at TOF inner surface (cm)
 TH2F * fHRecSigYVsPWin;//Reco QA, search window size in Y (cm)
 TH2F * fHRecSigZVsPWin;//Reco QA, search window size in X (cm)
 TTree * fCalTree; // Tree for on-the-fly offline Calibration
 // internal variables in tree for on-the-fly TOF Calibration

 Int_t   fIch; //TOF channel number
 Float_t fToT; // Time over Threshold, ns
 Float_t fTime; //TOF time, ps
 Float_t fExpTimePi; // exp time, Pions
 Float_t fExpTimeKa; // exp time, Kaons
 Float_t fExpTimePr; // exp time, Protons

 Int_t fNTOFmatched;                   // number of matched TOF cluster
 // AliESDTOFCluster *fClusterESD[20000]; // pointers to the TOF clusters for ESD
 // AliESDTOFHit *fHit[20000];            // pointers to the TOF hits for ESD

 ClassDef(AliTOFtracker, 9) // TOF tracker 
};

#endif
 AliTOFtracker.h:1
 AliTOFtracker.h:2
 AliTOFtracker.h:3
 AliTOFtracker.h:4
 AliTOFtracker.h:5
 AliTOFtracker.h:6
 AliTOFtracker.h:7
 AliTOFtracker.h:8
 AliTOFtracker.h:9
 AliTOFtracker.h:10
 AliTOFtracker.h:11
 AliTOFtracker.h:12
 AliTOFtracker.h:13
 AliTOFtracker.h:14
 AliTOFtracker.h:15
 AliTOFtracker.h:16
 AliTOFtracker.h:17
 AliTOFtracker.h:18
 AliTOFtracker.h:19
 AliTOFtracker.h:20
 AliTOFtracker.h:21
 AliTOFtracker.h:22
 AliTOFtracker.h:23
 AliTOFtracker.h:24
 AliTOFtracker.h:25
 AliTOFtracker.h:26
 AliTOFtracker.h:27
 AliTOFtracker.h:28
 AliTOFtracker.h:29
 AliTOFtracker.h:30
 AliTOFtracker.h:31
 AliTOFtracker.h:32
 AliTOFtracker.h:33
 AliTOFtracker.h:34
 AliTOFtracker.h:35
 AliTOFtracker.h:36
 AliTOFtracker.h:37
 AliTOFtracker.h:38
 AliTOFtracker.h:39
 AliTOFtracker.h:40
 AliTOFtracker.h:41
 AliTOFtracker.h:42
 AliTOFtracker.h:43
 AliTOFtracker.h:44
 AliTOFtracker.h:45
 AliTOFtracker.h:46
 AliTOFtracker.h:47
 AliTOFtracker.h:48
 AliTOFtracker.h:49
 AliTOFtracker.h:50
 AliTOFtracker.h:51
 AliTOFtracker.h:52
 AliTOFtracker.h:53
 AliTOFtracker.h:54
 AliTOFtracker.h:55
 AliTOFtracker.h:56
 AliTOFtracker.h:57
 AliTOFtracker.h:58
 AliTOFtracker.h:59
 AliTOFtracker.h:60
 AliTOFtracker.h:61
 AliTOFtracker.h:62
 AliTOFtracker.h:63
 AliTOFtracker.h:64
 AliTOFtracker.h:65
 AliTOFtracker.h:66
 AliTOFtracker.h:67
 AliTOFtracker.h:68
 AliTOFtracker.h:69
 AliTOFtracker.h:70
 AliTOFtracker.h:71
 AliTOFtracker.h:72
 AliTOFtracker.h:73
 AliTOFtracker.h:74
 AliTOFtracker.h:75
 AliTOFtracker.h:76
 AliTOFtracker.h:77
 AliTOFtracker.h:78
 AliTOFtracker.h:79
 AliTOFtracker.h:80
 AliTOFtracker.h:81
 AliTOFtracker.h:82
 AliTOFtracker.h:83
 AliTOFtracker.h:84
 AliTOFtracker.h:85
 AliTOFtracker.h:86
 AliTOFtracker.h:87
 AliTOFtracker.h:88
 AliTOFtracker.h:89
 AliTOFtracker.h:90
 AliTOFtracker.h:91
 AliTOFtracker.h:92
 AliTOFtracker.h:93
 AliTOFtracker.h:94
 AliTOFtracker.h:95
 AliTOFtracker.h:96
 AliTOFtracker.h:97
 AliTOFtracker.h:98
 AliTOFtracker.h:99
 AliTOFtracker.h:100
 AliTOFtracker.h:101
 AliTOFtracker.h:102
 AliTOFtracker.h:103
 AliTOFtracker.h:104
 AliTOFtracker.h:105
 AliTOFtracker.h:106
 AliTOFtracker.h:107
 AliTOFtracker.h:108
 AliTOFtracker.h:109
 AliTOFtracker.h:110
 AliTOFtracker.h:111
 AliTOFtracker.h:112
 AliTOFtracker.h:113
 AliTOFtracker.h:114
 AliTOFtracker.h:115
 AliTOFtracker.h:116
 AliTOFtracker.h:117
 AliTOFtracker.h:118
 AliTOFtracker.h:119
 AliTOFtracker.h:120
 AliTOFtracker.h:121
 AliTOFtracker.h:122
 AliTOFtracker.h:123
 AliTOFtracker.h:124
 AliTOFtracker.h:125
 AliTOFtracker.h:126
 AliTOFtracker.h:127
 AliTOFtracker.h:128
 AliTOFtracker.h:129
 AliTOFtracker.h:130
 AliTOFtracker.h:131
 AliTOFtracker.h:132
 AliTOFtracker.h:133
 AliTOFtracker.h:134
 AliTOFtracker.h:135
 AliTOFtracker.h:136
 AliTOFtracker.h:137
 AliTOFtracker.h:138
 AliTOFtracker.h:139
 AliTOFtracker.h:140
 AliTOFtracker.h:141
 AliTOFtracker.h:142
 AliTOFtracker.h:143
 AliTOFtracker.h:144
 AliTOFtracker.h:145
 AliTOFtracker.h:146
 AliTOFtracker.h:147
 AliTOFtracker.h:148
 AliTOFtracker.h:149
 AliTOFtracker.h:150
 AliTOFtracker.h:151
 AliTOFtracker.h:152
 AliTOFtracker.h:153
 AliTOFtracker.h:154
 AliTOFtracker.h:155
 AliTOFtracker.h:156
 AliTOFtracker.h:157
 AliTOFtracker.h:158
 AliTOFtracker.h:159
 AliTOFtracker.h:160
 AliTOFtracker.h:161
 AliTOFtracker.h:162
 AliTOFtracker.h:163
 AliTOFtracker.h:164
 AliTOFtracker.h:165
 AliTOFtracker.h:166
 AliTOFtracker.h:167
 AliTOFtracker.h:168
 AliTOFtracker.h:169
 AliTOFtracker.h:170
 AliTOFtracker.h:171
 AliTOFtracker.h:172
 AliTOFtracker.h:173
 AliTOFtracker.h:174