#include "AliGeometry.h"
+class AliRunLoader;
+class AliTRDparameter;
+
class AliTRDgeometry : public AliGeometry {
public:
virtual void CreateGeometry(Int_t *idtmed);
virtual Int_t IsVersion() const = 0;
virtual void Init();
- virtual Bool_t Local2Global(Int_t d, Float_t *local, Float_t *global) const;
- virtual Bool_t Local2Global(Int_t p, Int_t c, Int_t s, Float_t *local, Float_t *global) const;
- virtual Bool_t Rotate(Int_t d, Float_t *pos, Float_t *rot) const;
- virtual Bool_t RotateBack(Int_t d, Float_t *rot, Float_t *pos) const;
+ virtual Bool_t Impact(const TParticle* ) const { return kTRUE; };
+ virtual Bool_t Local2Global(Int_t d, Double_t *local, Double_t *global) const;
+ virtual Bool_t Local2Global(Int_t p, Int_t c, Int_t s
+ , Double_t *local, Double_t *global) const;
+
+ virtual Bool_t Global2Local(Int_t mode, Double_t *local, Double_t *global
+ , Int_t* index, AliTRDparameter *par) const;
+ virtual Bool_t Global2Detector(Double_t global[3], Int_t index[3]);
+
+ virtual Bool_t Rotate(Int_t d, Double_t *pos, Double_t *rot) const;
+ virtual Bool_t RotateBack(Int_t d, Double_t *rot, Double_t *pos) const;
static Int_t Nsect() { return fgkNsect; };
static Int_t Nplan() { return fgkNplan; };
static Float_t CdrHght() { return fgkCdrH; };
static Float_t CamHght() { return fgkCamH; };
static Float_t CroHght() { return fgkCroH; };
+ static Float_t CroWid() { return fgkCroW; };
static Float_t MyThick() { return fgkMyThick; };
static Float_t DrThick() { return fgkDrThick; };
static Float_t AmThick() { return fgkAmThick; };
virtual void SetPHOShole() = 0;
virtual void SetRICHhole() = 0;
- virtual void SetNRowPad();
- virtual void SetNRowPad(const Int_t p, const Int_t c, const Int_t npad);
- virtual void SetColPadSize(const Int_t p, const Float_t s);
- virtual void SetNTimeBin(const Int_t nbin);
- virtual void SetExpandTimeBin(const Int_t nbefore, const Int_t nafter)
- { fTimeBefore = nbefore;
- fTimeAfter = nafter; };
-
virtual Bool_t GetPHOShole() const = 0;
virtual Bool_t GetRICHhole() const = 0;
-
- virtual Int_t GetDetectorSec(const Int_t p, const Int_t c) const;
- virtual Int_t GetDetector(const Int_t p, const Int_t c, const Int_t s) const;
- virtual Int_t GetPlane(const Int_t d) const;
- virtual Int_t GetChamber(const Int_t d) const;
- virtual Int_t GetSector(const Int_t d) const;
-
- Float_t GetChamberWidth(const Int_t p) const { return fCwidth[p]; };
- Float_t GetChamberLength(const Int_t p, const Int_t c) const { return fClength[p][c]; };
-
-
- Int_t GetRowMax(const Int_t p, const Int_t c, const Int_t s)
- const { return fRowMax[p][c][s]; };
- Int_t GetColMax(const Int_t p) const { return fColMax[p]; };
- Int_t GetTimeMax() const { return fTimeMax; };
- Int_t GetTimeBefore() const { return fTimeBefore; };
- Int_t GetTimeAfter() const { return fTimeAfter; };
- Int_t GetTimeTotal() const { return fTimeMax
- + fTimeBefore
- + fTimeAfter; };
-
- Float_t GetRow0(const Int_t p, const Int_t c, const Int_t s)
- const { return fRow0[p][c][s]; };
- Float_t GetCol0(const Int_t p) const { return fCol0[p]; };
- Float_t GetTime0(const Int_t p) const { return fTime0[p]; };
-
- Float_t GetRowPadSize(const Int_t p, const Int_t c, const Int_t s)
- const { return fRowPadSize[p][c][s]; };
- Float_t GetColPadSize(const Int_t p) const { return fColPadSize[p]; };
- Float_t GetTimeBinSize() const { return fTimeBinSize; };
-
- virtual void GetGlobal(const AliRecPoint *p, TVector3 &pos, TMatrix &mat) const;
- virtual void GetGlobal(const AliRecPoint *p, TVector3 &pos) const;
-
+ virtual Bool_t IsHole(Int_t /*iplan*/, Int_t /*icham*/, Int_t /*isect*/) const {return kFALSE;}
+ static Int_t GetDetectorSec(Int_t p, Int_t c);
+ static Int_t GetDetector(Int_t p, Int_t c, Int_t s);
+ virtual Int_t GetPlane(Int_t d) const;
+ virtual Int_t GetChamber(Int_t d) const;
+ virtual Int_t GetSector(Int_t d) const;
+
+ Float_t GetChamberWidth(Int_t p) const { return fCwidth[p]; };
+ Float_t GetChamberLength(Int_t p, Int_t c) const { return fClength[p][c]; };
+
+ virtual void GetGlobal(const AliRecPoint* , TVector3& , TMatrixF& ) const { };
+ virtual void GetGlobal(const AliRecPoint* , TVector3& ) const { };
+
static Double_t GetAlpha() { return 2 * 3.14159265358979323846 / fgkNsect; };
- protected:
+ static AliTRDgeometry* GetGeometry(AliRunLoader* runLoader = NULL);
+
+ static Float_t GetTime0(Int_t p) { return fgkTime0[p]; };
+ protected:
+
static const Int_t fgkNsect; // Number of sectors in the full detector (18)
static const Int_t fgkNplan; // Number of planes of the TRD (6)
static const Int_t fgkNcham; // Number of chambers in z-direction (5)
static const Float_t fgkSlenTR2; // Length of the TRD-volume in spaceframe (BTR2)
static const Float_t fgkSlenTR3; // Length of the TRD-volume in spaceframe (BTR3)
+ static const Float_t fgkSMpltT; // Thickness of the super module side plates
+ static const Float_t fgkSMgapT; // Thickness of the gap between side plates and space frame
+
static const Float_t fgkCraH; // Height of the radiator part of the chambers
static const Float_t fgkCdrH; // Height of the drift region of the chambers
static const Float_t fgkCamH; // Height of the amplification region of the chambers
static const Float_t fgkCoZpos; // Position of the PE of the cooling device
static const Float_t fgkWaZpos; // Position of the colling water
- Int_t fRowMax[kNplan][kNcham][kNsect]; // Number of pad-rows
- Int_t fColMax[kNplan]; // Number of pad-columns
- Int_t fTimeMax; // Number of timebins in the drift region
- Int_t fTimeBefore; // Number of timebins before the drift region
- Int_t fTimeAfter; // Number of timebins after the drift region
-
Float_t fCwidth[kNplan]; // Outer widths of the chambers
Float_t fClength[kNplan][kNcham]; // Outer lengths of the chambers
Float_t fClengthPH[kNplan][kNcham]; // For sectors with holes for the PHOS
Float_t fClengthRH[kNplan][kNcham]; // For sectors with holes for the RICH
- Float_t fRow0[kNplan][kNcham][kNsect]; // Row-position of pad 0
- Float_t fCol0[kNplan]; // Column-position of pad 0
- Float_t fTime0[kNplan]; // Time-position of pad 0
-
- Float_t fRowPadSize[kNplan][kNcham][kNsect]; // Pad size in z-direction
- Float_t fColPadSize[kNplan]; // Pad size in rphi-direction
- Float_t fTimeBinSize; // Size of the time buckets
-
Float_t fRotA11[kNsect]; // Matrix elements for the rotation
Float_t fRotA12[kNsect]; // Matrix elements for the rotation
Float_t fRotA21[kNsect]; // Matrix elements for the rotation
Float_t fRotB21[kNsect]; // Matrix elements for the backward rotation
Float_t fRotB22[kNsect]; // Matrix elements for the backward rotation
- ClassDef(AliTRDgeometry,4) // TRD geometry base class
+ static const Double_t fgkTime0Base; // Base value for calculation of Time-position of pad 0
+ static const Float_t fgkTime0[kNplan]; // Time-position of pad 0
+
+ ClassDef(AliTRDgeometry,6) // TRD geometry base class
};