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

#include <TString.h>

#include "AliExternalTrackParam.h"
#include "TVectorD.h"

class TObjArray;



class AliTPCLaserTrack : public AliExternalTrackParam {
public:
  AliTPCLaserTrack();
  ~AliTPCLaserTrack();
  AliTPCLaserTrack(const AliTPCLaserTrack &ltr);
  AliTPCLaserTrack(const Int_t id, const Int_t side, const Int_t rod,
                   const Int_t bundle, const Int_t beam,
                   Double_t x, Double_t alpha,
                   const Double_t param[5],
                   const Double_t covar[15], const Float_t rayLength=0);
  
  AliTPCLaserTrack& operator = (const  AliTPCLaserTrack &source);
  void UpdatePoints();   // update track points
  static void LoadTracks();
  static TObjArray* GetTracks() {return fgArrLaserTracks;}
  
  static Int_t IdentifyTrack(AliExternalTrackParam *track, Int_t side=-1);
  
  Int_t GetId()     const {return fId;     }
  Int_t GetSide()   const {return fSide;   }
  Int_t GetRod()    const {return fRod;    }
  Int_t GetBundle() const {return fBundle; }
  Int_t GetBeam()   const {return fBeam;   }

  Float_t GetRayLength() const {return fRayLength;}
  
  
  
  static Int_t GetNLaserTracks() { return fgkNLaserTracks; }
  static Int_t GetNLaserRodsPerSide() { return fgkNRodsPerSide; }
  static Int_t GetNMirrorBundlesPerRod() { return fgkNBundlePerRod; }
  static Int_t GetNLaserRaysPerMirrorBundle() { return fgkNBeamsPerBundle; }
  
  
  void SetId    (Int_t id)    {fId     = id;    }
  void SetSide  (Int_t side)  {fSide   = side;  }
  void SetRod   (Int_t rod)   {fRod    = rod;   }
  void SetBundle(Int_t bundle){fBundle = bundle;}
  void SetBeam  (Int_t beam)  {fBeam   = beam;  }
  void SetRayLength (Float_t len) {fRayLength = len;}
  
  const TVectorD* GetVecSec() const { return fVecSec; }
  const TVectorD* GetVecP2()  const { return fVecP2;  }
  const TVectorD* GetVecPhi() const { return fVecPhi; }
  const TVectorD* GetVecGX()  const { return fVecGX;  }
  const TVectorD* GetVecGY()  const { return fVecGY;  }
  const TVectorD* GetVecGZ()  const { return fVecGZ;  }
  const TVectorD* GetVecLX()  const { return fVecLX;  }
  const TVectorD* GetVecLY()  const { return fVecLY;  }
  const TVectorD* GetVecLZ()  const { return fVecLZ;  }
  
private:
  Int_t fId;              //Laser beam id            (0-335)
  Int_t fSide;            //TPC side; 0:Shaft Side (A) -- 1:Muon Side (C)
  Int_t fRod;             //Laser Rod                (0-5)
  Int_t fBundle;          //Mirror bundle in the Rod (0-3)
  Int_t fBeam;            //Laser Beam in the bundle (0-6)
  
  Float_t fRayLength;     //distance from the last common point of the laser Rays
                          //(Splitter box on the A-Side at the bottom of the TPC)
                          //to each mirror [cm](needed for an exact drift velocity estimation)
public:
  TVectorD *fVecSec;      //                - sector numbers
  TVectorD *fVecP2;       //                - P2  
  TVectorD *fVecPhi;       //               - global phi
  TVectorD *fVecGX;       // points vectors - globalX
  TVectorD *fVecGY;       // points vectors - globalY
  TVectorD *fVecGZ;       // points vectors - globalZ
  TVectorD *fVecLX;       // points vectors - localX
  TVectorD *fVecLY;       // points vectors - localY
  TVectorD *fVecLZ;       // points vectors - localZ
private:  
  static TObjArray* fgArrLaserTracks; //! Array of all Laser Tracks,
                                        //  keeps instances of this class;
  
  static const Int_t fgkNLaserTracks    = 336; //Number of laser tracks
  static const Int_t fgkNRodsPerSide    = 6;   //Number of laser rods on each readout side
  static const Int_t fgkNBundlePerRod   = 4;   //Number of mirror bundles per rod
  static const Int_t fgkNBeamsPerBundle = 7;   //Number of laser rays per bundle
  
//    static const char* fgkDataFileName = "$ALIC_ROOT/TPC/Calib/LaserTracks.root";  //Path to the Data File
  
  ClassDef(AliTPCLaserTrack,3)        // Laser Track positions and track identification
};

#endif

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