]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/AliTRDgeometry.h
Calibration class and Preprocessor updated
[u/mrichter/AliRoot.git] / TRD / AliTRDgeometry.h
index 541beeefdc1474de8d6b7b8517d72a3aa73f130a..ca7920c97e50f4768193132421142f21b037b923 100644 (file)
 ///////////////////////////////////////////////////////////////////////////////
 
 #include "AliGeometry.h"
+#include "TObjArray.h"
+class AliRunLoader;
+class TGeoHMatrix;
 
 class AliTRDgeometry : public AliGeometry {
 
  public:
 
-  enum { kNplan = 6, kNcham = 5, kNsect = 18, kNdet = 540 };
+  enum { kNplan = 6, kNcham = 5, kNsect = 18, kNdet = 540, kNdets = 30 };
 
   AliTRDgeometry();
   virtual ~AliTRDgeometry();
 
   virtual void     CreateGeometry(Int_t *idtmed);
-  virtual Int_t    IsVersion() const = 0;
+  virtual Int_t    IsVersion() { return 1; };
   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) 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;
+
+          void     GroupChamber(Int_t iplan, Int_t icham, Int_t *idtmed);
+          void     CreateFrame(Int_t *idtmed);
+          void     CreateServices(Int_t *idtmed);
+
+          Bool_t   ReadGeoMatrices();  
+  TGeoHMatrix *    GetGeoMatrix(Int_t det)       { return (TGeoHMatrix *) fMatrixGeo->At(det);             }
+  TGeoHMatrix *    GetMatrix(Int_t det)          { return (TGeoHMatrix *) fMatrixArray->At(det);           }
+  TGeoHMatrix *    GetCorrectionMatrix(Int_t det){ return (TGeoHMatrix *) fMatrixCorrectionArray->At(det); }
 
   static  Int_t    Nsect()   { return fgkNsect; };
   static  Int_t    Nplan()   { return fgkNplan; };
@@ -48,6 +66,7 @@ class AliTRDgeometry : public AliGeometry {
   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; };
@@ -55,57 +74,34 @@ class AliTRDgeometry : public AliGeometry {
   static  Float_t  RpadW()   { return fgkRpadW;   };
   static  Float_t  CpadW()   { return fgkCpadW;   };
 
-  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   Impact(const TParticle * particle) const {return kTRUE;}
+  //void     SetSMstatus(Int_t sm, Char_t status)     { sm += 5; if (sm > 17) sm -= 18;
+  //                                                          fSMstatus[sm] = status; };
+          void     SetSMstatus(Int_t sm, Char_t status)     { fSMstatus[sm] = status; };
+
+  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;
+
+  //Char_t   GetSMstatus(Int_t sm) const              { sm += 5; if (sm > 17) sm -= 18;
+  //                                                          return fSMstatus[sm];  };
+          Char_t   GetSMstatus(Int_t sm) const              { return fSMstatus[sm];  };
+          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)
@@ -124,6 +120,9 @@ class AliTRDgeometry : public AliGeometry {
   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
@@ -132,7 +131,7 @@ class AliTRDgeometry : public AliGeometry {
 
   static const Float_t fgkVspace;                           // Vertical spacing of the chambers
   static const Float_t fgkHspace;                           // Horizontal spacing of the chambers
-
+  static const Float_t fgkVrocsm;                           // Radial distance of the first ROC to the outer plates of the SM
   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
@@ -154,6 +153,8 @@ class AliTRDgeometry : public AliGeometry {
   static const Float_t fgkFeThick;                          // Thickness of the FEE + signal lines
   static const Float_t fgkCoThick;                          // Thickness of the PE of the cooling device
   static const Float_t fgkWaThick;                          // Thickness of the cooling water
+  static const Float_t fgkRpThick;                          // Thickness of the PCB readout boards
+  static const Float_t fgkRcThick;                          // Thickness of the PCB copper layers
 
   static const Float_t fgkRaZpos;                           // Position of the radiator
   static const Float_t fgkMyZpos;                           // Position of the mylar-layer
@@ -163,26 +164,14 @@ class AliTRDgeometry : public AliGeometry {
   static const Float_t fgkSuZpos;                           // Position of the HEXCEL+G10 support structure
   static const Float_t fgkFeZpos;                           // Position of the FEE + signal lines
   static const Float_t fgkCoZpos;                           // Position of the PE of the cooling device
-  static const Float_t fgkWaZpos;                           // Position of the colling water
+  static const Float_t fgkWaZpos;                           // Position of the cooling water
+  static const Float_t fgkRpZpos;                           // Position of the PCB readout boards
+  static const Float_t fgkRcZpos;                           // Position of the PCB copper layers
 
-  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
+  Char_t               fSMstatus[kNsect];                   // Super module status byte
 
   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
@@ -194,7 +183,24 @@ class AliTRDgeometry : public AliGeometry {
   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
+  
+  Float_t              fChamberUAorig[3*kNdets][3];         // Volumes origin in
+  Float_t              fChamberUDorig[3*kNdets][3];         // the chamber
+  Float_t              fChamberUForig[3*kNdets][3];         // [3] = x, y, z
+  Float_t              fChamberUUorig[3*kNdets][3];         //
+
+  Float_t              fChamberUAboxd[3*kNdets][3];         // Volumes box
+  Float_t              fChamberUDboxd[3*kNdets][3];         // dimensions (half)
+  Float_t              fChamberUFboxd[3*kNdets][3];         // [3] = x, y, z
+  Float_t              fChamberUUboxd[3*kNdets][3];         // 
+
+  TObjArray *          fMatrixArray;                        //! array of matrix - Transformation Global to Local
+  TObjArray *          fMatrixCorrectionArray;              //! array of Matrix - Transformation Cluster to  Tracking systerm
+  TObjArray *          fMatrixGeo;                          //! geo matrices
+
+  ClassDef(AliTRDgeometry,10)                               // TRD geometry class
 
 };