/* $Id$ */
+///////////////////////////////////////////////////////////////////////////////
+// //
+// TRD geometry class //
+// //
+///////////////////////////////////////////////////////////////////////////////
+
#include "AliGeometry.h"
+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 Impact(const TParticle* ) const { return kTRUE; };
+ virtual Bool_t Local2Global(Int_t d, Float_t *local, Float_t *global, AliTRDparameter *par) const;
+ virtual Bool_t Local2Global(Int_t p, Int_t c, Int_t s, Float_t *local, Float_t *global, AliTRDparameter *par) const;
+
+ virtual Bool_t Global2Local(Int_t mode, Float_t *local, Float_t *global, Int_t* index, AliTRDparameter *par) const;
+ virtual Bool_t Global2Detector(Float_t global[3], Int_t index[3], AliTRDparameter *par);
+
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;
static Float_t Zmax2() { return fgkZmax2; };
static Float_t Cwidcha() { return (fgkSwidth2 - fgkSwidth1)
- / fgkSheight * (fgkCheight + fgkCspace); };
- static Float_t Cheight() { return fgkCheight; };
- static Float_t Cspace() { return fgkCspace; };
- static Float_t Ccframe() { return fgkCcframe; };
+ / fgkSheight * (fgkCH + fgkVspace); };
+ static Float_t Cheight() { return fgkCH; };
+ static Float_t Cspace() { return fgkVspace; };
+ static Float_t CraHght() { return fgkCraH; };
+ static Float_t CdrHght() { return fgkCdrH; };
+ static Float_t CamHght() { return fgkCamH; };
+ static Float_t CroHght() { return fgkCroH; };
static Float_t MyThick() { return fgkMyThick; };
static Float_t DrThick() { return fgkDrThick; };
static Float_t AmThick() { return fgkAmThick; };
static Float_t DrZpos() { return fgkDrZpos; };
+ static Float_t RpadW() { return fgkRpadW; };
+ static Float_t CpadW() { return fgkCpadW; };
virtual void SetPHOShole() = 0;
virtual void SetRICHhole() = 0;
- virtual void SetNRowPad(const Int_t p, const Int_t c, const Int_t npad) {};
- virtual void SetNColPad(const Int_t npad);
- virtual void SetNTimeBin(const Int_t nbin);
- virtual void SetExpandTimeBin(const Int_t nbefore, const Int_t nafter)
- { fTimeBefore = nbefore;
- fTimeAfter = nafter; };
+ virtual void SetOldGeometry();
virtual Bool_t GetPHOShole() const = 0;
virtual Bool_t GetRICHhole() const = 0;
-
- 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]; };
-
- 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;}
+ virtual Int_t GetDetectorSec(Int_t p, Int_t c) const;
+ virtual Int_t GetDetector(Int_t p, Int_t c, Int_t s) const;
+ 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& , TMatrix& ) const { };
+ virtual void GetGlobal(const AliRecPoint* , TVector3& ) const { };
+
static Double_t GetAlpha() { return 2 * 3.14159265358979323846 / fgkNsect; };
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 fgkCheight; // Height of the chambers
- static const Float_t fgkCspace; // Vertical spacing of the chambers
- static const Float_t fgkCaframe; // Height of the aluminum frame
- static const Float_t fgkCcframe; // Height of the carbon frame
- static const Float_t fgkCathick; // Thickness of the aluminum frame
- static const Float_t fgkCcthick; // Thickness of the carbon frame
+ 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 fgkCroH; // Height of the readout of the chambers
+ static const Float_t fgkCH; // Total height of the chambers
+
+ static const Float_t fgkVspace; // Vertical spacing of the chambers
+ static const Float_t fgkHspace; // Horizontal spacing of the chambers
+
+ static const Float_t fgkCalT; // Thickness of the lower aluminum frame
+ static const Float_t fgkCclsT; // Thickness of the lower G10 frame sides
+ static const Float_t fgkCclfT; // Thickness of the lower G10 frame front
+ static const Float_t fgkCcuT; // Thickness of the upper G10 frame
+ static const Float_t fgkCauT; // Thickness of the upper aluminum frame
+
+ static const Float_t fgkCroW; // Additional width of the readout chamber frames
+
+ static const Float_t fgkCpadW; // Difference of outer chamber width and pad plane width
+ static const Float_t fgkRpadW; // Difference of outer chamber width and pad plane width
static const Float_t fgkRaThick; // Thickness of the radiator
static const Float_t fgkMyThick; // Thickness of the mylar-layer
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]; // Width of the chambers
-
- 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 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 fRotA11[kNsect]; // Matrix elements for the rotation
Float_t fRotA12[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,3) // TRD geometry base class
+ ClassDef(AliTRDgeometry,6) // TRD geometry base class
};