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

/* $Id$ */
////////////////////////////////////////////////
//  Manager class for TPC   hits                   //
////////////////////////////////////////////////
//

#include "TObject.h"
#include "TClonesArray.h"


class AliTPChit;
class AliTPCTempHitInfoV2;
class AliTPCCurrentHitV2;
class AliHit;

class AliTrackHitsParamV2 : public TObject {


public:
  AliTrackHitsParamV2();

   AliTrackHitsParamV2(const AliTrackHitsParamV2 &hit):  TObject(hit),
   fTrackID(0), 
   fVolumeID(0),
   fR(0.),  
   fZ(0.),  
   fFi(0.), 
   fAn(0.), 
   fAd(0.), 
   fTheta(0.), 
   fThetaD(0.), 
   fNHits(0), 
   fHitDistance(0), 
   fCharge(0),
   fTime(0) 
    {hit.Copy(*this);}
  AliTrackHitsParamV2& operator = (const AliTrackHitsParamV2 &hit)
     {hit.Copy(*this); return (*this);}
  ~AliTrackHitsParamV2();

  Int_t   GetTrackID()            const {return fTrackID;}
  Int_t   GetVolumeID()           const {return fVolumeID;}
  Float_t GetR()                  const {return fR;}
  Float_t GetZ()                  const {return fZ;}
  Float_t GetFi()                 const {return fFi;}
  Float_t GetAn()                 const {return fAn;}
  Float_t GetAd()                 const {return fAd;}
  Float_t GetTheta()              const {return fTheta;}
  Float_t GetThetaD()             const {return fThetaD;}
  Int_t   GetNHits()              const {return fNHits;}

  Short_t HitDistance(Int_t i) const {return fHitDistance[i];}
  Short_t Charge(Int_t i)      const {return fCharge[i];}
  Short_t Time(Int_t i)        const {return fTime[i];}

  Short_t& HitDistance(Int_t i) {return fHitDistance[i];}
  Short_t& Charge(Int_t i)      {return fCharge[i];}
  Short_t& Time(Int_t i)        {return fTime[i];}

  void SetHitDistance(Int_t i)
    {Short_t *s=new Short_t[i];
    delete [] fHitDistance; fHitDistance=s;}

  void SetCharge(Int_t i)
    {Short_t *s=new Short_t[i];
    delete [] fCharge; fCharge=s;}

  void SetTime(Int_t i)
    {Short_t *s=new Short_t[i];
    delete [] fTime; fTime=s;}

  void ResizeHitDistance(Int_t i)
    {Short_t *s=new Short_t[i];
    memcpy(s, fHitDistance, sizeof(Short_t)*i); 
    delete [] fHitDistance; fHitDistance=s;}

  void ResizeCharge(Int_t i)
    {Short_t *s=new Short_t[i];
    memcpy(s, fCharge, sizeof(Short_t)*i); 
    delete [] fCharge; fCharge=s;}

  void ResizeTime(Int_t i)
    {Short_t *s=new Short_t[i];
    memcpy(s, fTime, sizeof(Short_t)*i); 
    delete [] fTime; fTime=s;}

  void SetTrackID(Int_t id)    {fTrackID=id;}
  void SetVolumeID(Short_t id) {fVolumeID=id;}
  void SetR(Float_t r)         {fR=r;}
  void SetZ(Float_t z)         {fZ=z;}
  void SetFi(Float_t fi)       {fFi=fi;}
  void SetAn(Float_t an)       {fAn=an;}
  void SetAd(Float_t ad)       {fAd=ad;}
  void SetTheta(Float_t t)     {fTheta=t;}
  void SetThetaD(Float_t t)    {fThetaD=t;}
  void SetNHits(Int_t n)       {fNHits=n;}

  Float_t Eta() const;

 private:
  Int_t fTrackID; // ID of the tracİk
  Short_t fVolumeID;// volume ID
  Float_t fR;  //radius
  Float_t fZ;  //z position
  Float_t fFi; //radial angle
  Float_t fAn; //angle with  the radial vector
  Float_t fAd; //derivation of angle
  Float_t fTheta; //theta angle
  Float_t fThetaD; //theta angle derivation
  Int_t   fNHits; //nuber of thits
  Short_t * fHitDistance; //[fNHits] array of hits distances
  Short_t * fCharge; //[fNHits] array of charges
  Short_t * fTime; //[fNHits] array of hits time
  static Int_t fgCounter1; //First internal counter
  static Int_t fgCounter2; // Second internal counter

  void Copy(TObject &) const
  {Error("Copy","Not Implemented");}

  ClassDef(AliTrackHitsParamV2,2)  
};


class AliTPCTrackHitsV2 : public TObject {

public:
  AliTPCTrackHitsV2();
  ~AliTPCTrackHitsV2();
  AliTPCTrackHitsV2(const AliTPCTrackHitsV2 &hit):  TObject(hit), 
  fArray(0), 
  fSize(hit.fSize),           
  fPrecision(hit.fPrecision),  
  fStep(hit.fStep),       
  fMaxDistance(hit.fMaxDistance),   
  fNVolumes(hit.fNVolumes), 
  fVolumes(0),         
  fTempInfo(hit.fTempInfo), 
  fCurrentHit(hit.fCurrentHit),  
  fHit(hit.fHit) 
    { //
      //copy constructor
      //
        
      (*fArray) = (*hit.fArray);
	//
        delete [] fVolumes;
        fVolumes = new Int_t[fNVolumes];
        memcpy(fVolumes,hit.fVolumes,fNVolumes*sizeof(Int_t));
    }
  AliTPCTrackHitsV2& operator = (const AliTPCTrackHitsV2 &hit)
    {
      if(this!=&hit){
        TObject::operator=(hit);
        fSize=hit.fSize;           
        fPrecision=hit.fPrecision;  
        fStep=hit.fStep;       
        fMaxDistance=hit.fMaxDistance;   
        fNVolumes=hit.fNVolumes;                   
        fTempInfo=hit.fTempInfo; 
        fCurrentHit=hit.fCurrentHit;  
        fHit=hit.fHit;
	//
        //delete fArray;
        fArray->Clear();
        (*fArray)=(*hit.fArray);  
	//
        delete [] fVolumes;
        fVolumes = new Int_t[fNVolumes];
        memcpy(fVolumes,hit.fVolumes,fNVolumes*sizeof(Int_t));
	//
      }
     
     return *this;
    }


  void Clear(Option_t * /*option*/ ="");
  void AddHitKartez(Int_t volumeID, Int_t trackID, Double_t x, 
		    Double_t y, Double_t z,Int_t q,Float_t time);
  void AddHit(Int_t volumeID, Int_t trackID, Double_t r, 
	      Double_t z, Double_t fi,Int_t q,Float_t time);
 
  Bool_t First(); //set current hit to first hit 
  Bool_t Next();  //set current hit to next
  AliHit * GetHit() const;
  AliTrackHitsParamV2 * GetParam();

  TClonesArray * GetArray(){return fArray;}
  Int_t  GetEntriesFast() const { return fSize;}
  void SetHitPrecision(Double_t prec) {fPrecision=prec;}
  void SetStepPrecision(Double_t prec) {fStep=prec;}
  void SetMaxDistance(UInt_t distance) {fMaxDistance = distance;}
  Bool_t  FlushHitStack(Bool_t force=kTRUE);    //
  Int_t *  GetVolumes(){ return fVolumes;}
  Int_t GetNVolumes() const {return fNVolumes;}
  static Double_t GetKPrecision()  {return fgkPrecision;}
  static Double_t GetKPrecision2() {return fgkPrecision2;}

public:
  void AddVolume(Int_t volume); //add volumes to tthe list of volumes
  void FlushHitStack2(Int_t index1, Int_t index2);   //

protected:
  TClonesArray * fArray;  //array of compressed hits
  Int_t fSize;            //total number of hits in track
  Double_t fPrecision;  // required precision
  Double_t fStep;       //unit step size
  UInt_t fMaxDistance;   //maximal distance between two connected hits 
  Int_t fNVolumes;      //number of volumes in track  
  Int_t *  fVolumes;    //[fNVolumes] list of volumes
  AliTPCTempHitInfoV2 * fTempInfo; //!information about track
  AliTPCCurrentHitV2  * fCurrentHit; //!information about current hit 
  AliHit * fHit;                     //! current hit information
  static const Double_t fgkPrecision;  //precision 
  static const Double_t fgkPrecision2;  //precision
  static const Double_t fgkTimePrecision;  //hit time precision 
  static Int_t fgCounter1; // First internal counter
  static Int_t fgCounter2; // Second internal counter

private:
  void Copy(TObject &) const
  {Error("Copy","Not Implemented");}


  ClassDef(AliTPCTrackHitsV2,2) 
};

class AliTPCCurrentHitV2 {
public:
  Int_t    GetStackIndex() const {return fStackIndex;}
  void     SetStackIndex(Int_t i) {fStackIndex=i;}
  Int_t    GetParamIndex() const {return fParamIndex;}
  void     SetParamIndex(Int_t i) {fParamIndex=i;}
  Double_t GetR() const {return fR;}
  void     SetR(Double_t r) {fR=r;}
  Bool_t   GetStatus() const {return fStatus;}
  void     SetStatus(Bool_t s) {fStatus=s;}
private:
  Int_t   fParamIndex;//  - current param pointer
  Int_t   fStackIndex; // - current hit stack index
  Double_t fR;   //current Radius
  Bool_t  fStatus; //current status    
};   



#endif //ALITPCTRACKHITSV2_H
 AliTPCTrackHitsV2.h:1
 AliTPCTrackHitsV2.h:2
 AliTPCTrackHitsV2.h:3
 AliTPCTrackHitsV2.h:4
 AliTPCTrackHitsV2.h:5
 AliTPCTrackHitsV2.h:6
 AliTPCTrackHitsV2.h:7
 AliTPCTrackHitsV2.h:8
 AliTPCTrackHitsV2.h:9
 AliTPCTrackHitsV2.h:10
 AliTPCTrackHitsV2.h:11
 AliTPCTrackHitsV2.h:12
 AliTPCTrackHitsV2.h:13
 AliTPCTrackHitsV2.h:14
 AliTPCTrackHitsV2.h:15
 AliTPCTrackHitsV2.h:16
 AliTPCTrackHitsV2.h:17
 AliTPCTrackHitsV2.h:18
 AliTPCTrackHitsV2.h:19
 AliTPCTrackHitsV2.h:20
 AliTPCTrackHitsV2.h:21
 AliTPCTrackHitsV2.h:22
 AliTPCTrackHitsV2.h:23
 AliTPCTrackHitsV2.h:24
 AliTPCTrackHitsV2.h:25
 AliTPCTrackHitsV2.h:26
 AliTPCTrackHitsV2.h:27
 AliTPCTrackHitsV2.h:28
 AliTPCTrackHitsV2.h:29
 AliTPCTrackHitsV2.h:30
 AliTPCTrackHitsV2.h:31
 AliTPCTrackHitsV2.h:32
 AliTPCTrackHitsV2.h:33
 AliTPCTrackHitsV2.h:34
 AliTPCTrackHitsV2.h:35
 AliTPCTrackHitsV2.h:36
 AliTPCTrackHitsV2.h:37
 AliTPCTrackHitsV2.h:38
 AliTPCTrackHitsV2.h:39
 AliTPCTrackHitsV2.h:40
 AliTPCTrackHitsV2.h:41
 AliTPCTrackHitsV2.h:42
 AliTPCTrackHitsV2.h:43
 AliTPCTrackHitsV2.h:44
 AliTPCTrackHitsV2.h:45
 AliTPCTrackHitsV2.h:46
 AliTPCTrackHitsV2.h:47
 AliTPCTrackHitsV2.h:48
 AliTPCTrackHitsV2.h:49
 AliTPCTrackHitsV2.h:50
 AliTPCTrackHitsV2.h:51
 AliTPCTrackHitsV2.h:52
 AliTPCTrackHitsV2.h:53
 AliTPCTrackHitsV2.h:54
 AliTPCTrackHitsV2.h:55
 AliTPCTrackHitsV2.h:56
 AliTPCTrackHitsV2.h:57
 AliTPCTrackHitsV2.h:58
 AliTPCTrackHitsV2.h:59
 AliTPCTrackHitsV2.h:60
 AliTPCTrackHitsV2.h:61
 AliTPCTrackHitsV2.h:62
 AliTPCTrackHitsV2.h:63
 AliTPCTrackHitsV2.h:64
 AliTPCTrackHitsV2.h:65
 AliTPCTrackHitsV2.h:66
 AliTPCTrackHitsV2.h:67
 AliTPCTrackHitsV2.h:68
 AliTPCTrackHitsV2.h:69
 AliTPCTrackHitsV2.h:70
 AliTPCTrackHitsV2.h:71
 AliTPCTrackHitsV2.h:72
 AliTPCTrackHitsV2.h:73
 AliTPCTrackHitsV2.h:74
 AliTPCTrackHitsV2.h:75
 AliTPCTrackHitsV2.h:76
 AliTPCTrackHitsV2.h:77
 AliTPCTrackHitsV2.h:78
 AliTPCTrackHitsV2.h:79
 AliTPCTrackHitsV2.h:80
 AliTPCTrackHitsV2.h:81
 AliTPCTrackHitsV2.h:82
 AliTPCTrackHitsV2.h:83
 AliTPCTrackHitsV2.h:84
 AliTPCTrackHitsV2.h:85
 AliTPCTrackHitsV2.h:86
 AliTPCTrackHitsV2.h:87
 AliTPCTrackHitsV2.h:88
 AliTPCTrackHitsV2.h:89
 AliTPCTrackHitsV2.h:90
 AliTPCTrackHitsV2.h:91
 AliTPCTrackHitsV2.h:92
 AliTPCTrackHitsV2.h:93
 AliTPCTrackHitsV2.h:94
 AliTPCTrackHitsV2.h:95
 AliTPCTrackHitsV2.h:96
 AliTPCTrackHitsV2.h:97
 AliTPCTrackHitsV2.h:98
 AliTPCTrackHitsV2.h:99
 AliTPCTrackHitsV2.h:100
 AliTPCTrackHitsV2.h:101
 AliTPCTrackHitsV2.h:102
 AliTPCTrackHitsV2.h:103
 AliTPCTrackHitsV2.h:104
 AliTPCTrackHitsV2.h:105
 AliTPCTrackHitsV2.h:106
 AliTPCTrackHitsV2.h:107
 AliTPCTrackHitsV2.h:108
 AliTPCTrackHitsV2.h:109
 AliTPCTrackHitsV2.h:110
 AliTPCTrackHitsV2.h:111
 AliTPCTrackHitsV2.h:112
 AliTPCTrackHitsV2.h:113
 AliTPCTrackHitsV2.h:114
 AliTPCTrackHitsV2.h:115
 AliTPCTrackHitsV2.h:116
 AliTPCTrackHitsV2.h:117
 AliTPCTrackHitsV2.h:118
 AliTPCTrackHitsV2.h:119
 AliTPCTrackHitsV2.h:120
 AliTPCTrackHitsV2.h:121
 AliTPCTrackHitsV2.h:122
 AliTPCTrackHitsV2.h:123
 AliTPCTrackHitsV2.h:124
 AliTPCTrackHitsV2.h:125
 AliTPCTrackHitsV2.h:126
 AliTPCTrackHitsV2.h:127
 AliTPCTrackHitsV2.h:128
 AliTPCTrackHitsV2.h:129
 AliTPCTrackHitsV2.h:130
 AliTPCTrackHitsV2.h:131
 AliTPCTrackHitsV2.h:132
 AliTPCTrackHitsV2.h:133
 AliTPCTrackHitsV2.h:134
 AliTPCTrackHitsV2.h:135
 AliTPCTrackHitsV2.h:136
 AliTPCTrackHitsV2.h:137
 AliTPCTrackHitsV2.h:138
 AliTPCTrackHitsV2.h:139
 AliTPCTrackHitsV2.h:140
 AliTPCTrackHitsV2.h:141
 AliTPCTrackHitsV2.h:142
 AliTPCTrackHitsV2.h:143
 AliTPCTrackHitsV2.h:144
 AliTPCTrackHitsV2.h:145
 AliTPCTrackHitsV2.h:146
 AliTPCTrackHitsV2.h:147
 AliTPCTrackHitsV2.h:148
 AliTPCTrackHitsV2.h:149
 AliTPCTrackHitsV2.h:150
 AliTPCTrackHitsV2.h:151
 AliTPCTrackHitsV2.h:152
 AliTPCTrackHitsV2.h:153
 AliTPCTrackHitsV2.h:154
 AliTPCTrackHitsV2.h:155
 AliTPCTrackHitsV2.h:156
 AliTPCTrackHitsV2.h:157
 AliTPCTrackHitsV2.h:158
 AliTPCTrackHitsV2.h:159
 AliTPCTrackHitsV2.h:160
 AliTPCTrackHitsV2.h:161
 AliTPCTrackHitsV2.h:162
 AliTPCTrackHitsV2.h:163
 AliTPCTrackHitsV2.h:164
 AliTPCTrackHitsV2.h:165
 AliTPCTrackHitsV2.h:166
 AliTPCTrackHitsV2.h:167
 AliTPCTrackHitsV2.h:168
 AliTPCTrackHitsV2.h:169
 AliTPCTrackHitsV2.h:170
 AliTPCTrackHitsV2.h:171
 AliTPCTrackHitsV2.h:172
 AliTPCTrackHitsV2.h:173
 AliTPCTrackHitsV2.h:174
 AliTPCTrackHitsV2.h:175
 AliTPCTrackHitsV2.h:176
 AliTPCTrackHitsV2.h:177
 AliTPCTrackHitsV2.h:178
 AliTPCTrackHitsV2.h:179
 AliTPCTrackHitsV2.h:180
 AliTPCTrackHitsV2.h:181
 AliTPCTrackHitsV2.h:182
 AliTPCTrackHitsV2.h:183
 AliTPCTrackHitsV2.h:184
 AliTPCTrackHitsV2.h:185
 AliTPCTrackHitsV2.h:186
 AliTPCTrackHitsV2.h:187
 AliTPCTrackHitsV2.h:188
 AliTPCTrackHitsV2.h:189
 AliTPCTrackHitsV2.h:190
 AliTPCTrackHitsV2.h:191
 AliTPCTrackHitsV2.h:192
 AliTPCTrackHitsV2.h:193
 AliTPCTrackHitsV2.h:194
 AliTPCTrackHitsV2.h:195
 AliTPCTrackHitsV2.h:196
 AliTPCTrackHitsV2.h:197
 AliTPCTrackHitsV2.h:198
 AliTPCTrackHitsV2.h:199
 AliTPCTrackHitsV2.h:200
 AliTPCTrackHitsV2.h:201
 AliTPCTrackHitsV2.h:202
 AliTPCTrackHitsV2.h:203
 AliTPCTrackHitsV2.h:204
 AliTPCTrackHitsV2.h:205
 AliTPCTrackHitsV2.h:206
 AliTPCTrackHitsV2.h:207
 AliTPCTrackHitsV2.h:208
 AliTPCTrackHitsV2.h:209
 AliTPCTrackHitsV2.h:210
 AliTPCTrackHitsV2.h:211
 AliTPCTrackHitsV2.h:212
 AliTPCTrackHitsV2.h:213
 AliTPCTrackHitsV2.h:214
 AliTPCTrackHitsV2.h:215
 AliTPCTrackHitsV2.h:216
 AliTPCTrackHitsV2.h:217
 AliTPCTrackHitsV2.h:218
 AliTPCTrackHitsV2.h:219
 AliTPCTrackHitsV2.h:220
 AliTPCTrackHitsV2.h:221
 AliTPCTrackHitsV2.h:222
 AliTPCTrackHitsV2.h:223
 AliTPCTrackHitsV2.h:224
 AliTPCTrackHitsV2.h:225
 AliTPCTrackHitsV2.h:226
 AliTPCTrackHitsV2.h:227
 AliTPCTrackHitsV2.h:228
 AliTPCTrackHitsV2.h:229
 AliTPCTrackHitsV2.h:230
 AliTPCTrackHitsV2.h:231
 AliTPCTrackHitsV2.h:232
 AliTPCTrackHitsV2.h:233
 AliTPCTrackHitsV2.h:234
 AliTPCTrackHitsV2.h:235
 AliTPCTrackHitsV2.h:236
 AliTPCTrackHitsV2.h:237
 AliTPCTrackHitsV2.h:238
 AliTPCTrackHitsV2.h:239
 AliTPCTrackHitsV2.h:240
 AliTPCTrackHitsV2.h:241
 AliTPCTrackHitsV2.h:242
 AliTPCTrackHitsV2.h:243
 AliTPCTrackHitsV2.h:244
 AliTPCTrackHitsV2.h:245
 AliTPCTrackHitsV2.h:246
 AliTPCTrackHitsV2.h:247
 AliTPCTrackHitsV2.h:248
 AliTPCTrackHitsV2.h:249
 AliTPCTrackHitsV2.h:250
 AliTPCTrackHitsV2.h:251
 AliTPCTrackHitsV2.h:252