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

//////////////////////////////////////////////////////////////////////////////
//                          Class AliTrackPoint                             //
//   This class represent a single track space-point.                       //
//   It is used to access the points array defined in AliTrackPointArray.   //
//   Note that the space point coordinates are given in the global frame.   //
//                                                                          //
//   cvetan.cheshkov@cern.ch 3/11/2005                                      //
//////////////////////////////////////////////////////////////////////////////

#include <TObject.h>
#include <TMatrixDSym.h>
#include "Rtypes.h"

class TGeoRotation;

class AliTrackPoint : public TObject {

 public:
  AliTrackPoint();
  AliTrackPoint(Float_t x, Float_t y, Float_t z, const Float_t *cov, UShort_t volid, Float_t charge = 0, Float_t drifttime = 0,Float_t chargeratio = 0, Int_t clutype = 0);
  AliTrackPoint(const Float_t *xyz, const Float_t *cov, UShort_t volid, Float_t charge = 0, Float_t drifttime = 0,Float_t chargeratio = 0, Int_t clutype=0);
  AliTrackPoint(const AliTrackPoint &p);
  AliTrackPoint& operator= (const AliTrackPoint& p);
  virtual ~AliTrackPoint() {}

  // Multiplication with TGeoMatrix and distance between points (chi2) to be implemented

  void     SetXYZ(Float_t x, Float_t y, Float_t z, const Float_t *cov = 0);
  void     SetXYZ(const Float_t *xyz, const Float_t *cov = 0);
  void     SetCov(const Float_t *cov);
  void     SetVolumeID(UShort_t volid) { fVolumeID = volid; }
  void     SetCharge(Float_t charge) { fCharge = charge; }
  void     SetDriftTime(Float_t time) { fDriftTime = time; }
  void     SetChargeRatio(Float_t ratio) {  fChargeRatio= ratio; }
  void     SetClusterType(Int_t clutype) {  fClusterType= clutype; }
  void     SetExtra(Bool_t flag=kTRUE) { fIsExtra = flag; }

  Float_t  GetX() const { return fX; }
  Float_t  GetY() const { return fY; }
  Float_t  GetZ() const { return fZ; }
  void     GetXYZ(Float_t *xyz, Float_t *cov = 0) const;
  const Float_t *GetCov() const { return &fCov[0]; }
  UShort_t GetVolumeID() const { return fVolumeID; }
  Float_t  GetCharge() const { return fCharge; }
  Float_t  GetDriftTime() const { return fDriftTime;}
  Float_t  GetChargeRatio() const { return fChargeRatio;}
  Int_t    GetClusterType() const { return fClusterType;}
  Bool_t   IsExtra() const { return fIsExtra;}

  Float_t  GetResidual(const AliTrackPoint &p, Bool_t weighted = kFALSE) const;
  Bool_t   GetPCA(const AliTrackPoint &p, AliTrackPoint &out) const;

  Float_t  GetAngle() const;
  Bool_t   GetRotMatrix(TGeoRotation& rot) const;
  void SetAlignCovMatrix(const TMatrixDSym& alignparmtrx);

  AliTrackPoint& Rotate(Float_t alpha) const;
  AliTrackPoint& MasterToLocal() const;

  void     Print(Option_t *) const;

 private:

  Float_t  fX;        // X coordinate
  Float_t  fY;        // Y coordinate
  Float_t  fZ;        // Z coordinate
  Float_t  fCharge;   // Cluster charge in arbitrary units
  Float_t  fDriftTime;// Drift time in SDD (in ns)
  Float_t  fChargeRatio; // Charge ratio in SSD 
  Int_t    fClusterType; // Cluster Type (encoded info on size and shape)
  Float_t  fCov[6];   // Cov matrix
  Bool_t   fIsExtra;  // attached by tracker but not used in fit
  UShort_t fVolumeID; // Volume ID

  ClassDef(AliTrackPoint,7)
};

//////////////////////////////////////////////////////////////////////////////
//                          Class AliTrackPointArray                        //
//   This class contains the ESD track space-points which are used during   //
//   the alignment procedures. Each space-point consist of 3 coordinates    //
//   (and their errors) and the index of the sub-detector which contains    //
//   the space-point.                                                       //
//   cvetan.cheshkov@cern.ch 3/11/2005                                      //
//////////////////////////////////////////////////////////////////////////////

class AliTrackPointArray : public TObject {

 public:

  AliTrackPointArray();
  AliTrackPointArray(Int_t npoints);
  AliTrackPointArray(const AliTrackPointArray &array);
  AliTrackPointArray& operator= (const AliTrackPointArray& array);
  virtual ~AliTrackPointArray();

  //  Bool_t    AddPoint(Int_t i, AliCluster *cl, UShort_t volid);
  Bool_t    AddPoint(Int_t i, const AliTrackPoint *p);

  Int_t     GetNPoints() const { return fNPoints; }
  Int_t     GetCovSize() const { return fSize; }
  Bool_t    GetPoint(AliTrackPoint &p, Int_t i) const;
  // Getters for fast access to the coordinate arrays
  const Float_t*  GetX() const { return &fX[0]; }
  const Float_t*  GetY() const { return &fY[0]; }
  const Float_t*  GetZ() const { return &fZ[0]; }
  const Float_t*  GetCharge() const { return &fCharge[0]; }
  const Float_t*  GetDriftTime() const { return &fDriftTime[0]; }
  const Float_t*  GetChargeRatio() const { return &fChargeRatio[0]; }
  const Int_t*    GetClusterType() const { return &fClusterType[0]; }
  const Bool_t*   GetExtra() const { return &fIsExtra[0]; }
  const Float_t*  GetCov() const { return &fCov[0]; }
  const UShort_t* GetVolumeID() const { return &fVolumeID[0]; }

  Bool_t    HasVolumeID(UShort_t volid) const;
  void      Print(Option_t *) const;

  void Sort(Bool_t down=kTRUE);

 private:
  Bool_t fSorted;        // Sorted flag

  Int_t     fNPoints;    // Number of space points
  Float_t   *fX;         //[fNPoints] Array with space point X coordinates
  Float_t   *fY;         //[fNPoints] Array with space point Y coordinates
  Float_t   *fZ;         //[fNPoints] Array with space point Z coordinates
  Float_t   *fCharge;    //[fNPoints] Array with clusters charge
  Float_t   *fDriftTime; //[fNPoints] Array with drift times
  Float_t   *fChargeRatio; //[fNPoints] Array with charge ratio
  Int_t     *fClusterType; //[fNPoints] Array with cluster type
  Bool_t    *fIsExtra;   //[fNPoints] Array with extra flags
  Int_t     fSize;       // Size of array with cov matrices = 6*N of points
  Float_t   *fCov;       //[fSize] Array with space point coordinates cov matrix
  UShort_t  *fVolumeID;  //[fNPoints] Array of space point volume IDs

  ClassDef(AliTrackPointArray,7)
};

#endif

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