LCOV - code coverage report
Current view: top level - EMCAL/EMCALUtils - AliEMCALShishKebabTrd1Module.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 14 35 40.0 %
Date: 2016-06-14 17:26:59 Functions: 12 28 42.9 %

          Line data    Source code
       1             : #ifndef ALIEMCALSHISHKEBABTRD1MODULE_H
       2             : #define ALIEMCALSHISHKEBABTRD1MODULE_H
       3             : 
       4             : /* Copyright(c) 1998-2010, ALICE Experiment at CERN, All rights reserved. *
       5             :  * See cxx source for full Copyright notice                               */
       6             : 
       7             : /* $Id$ */
       8             : //_________________________________________________________________________
       9             : // Main class for TRD1 geometry of Shish-Kebab case.
      10             : // Author: Alexei Pavlinov(WSU).
      11             : // Nov 2004; Feb 2006; Apr 2010; Oct 23, 2010
      12             : 
      13             : #include <TNamed.h>
      14             : #include <TMath.h>
      15             : #include <TVector2.h>
      16             : 
      17             : class AliEMCALEMCGeometry;
      18             : 
      19             : class AliEMCALShishKebabTrd1Module : public TNamed {
      20             :  public:
      21             :   AliEMCALShishKebabTrd1Module(Double_t theta=0.0, AliEMCALEMCGeometry *g=0);
      22             :   AliEMCALShishKebabTrd1Module(AliEMCALShishKebabTrd1Module &leftNeighbor);
      23             :   void Init(Double_t A, Double_t B);
      24             :   void DefineAllStaff();
      25             :   AliEMCALShishKebabTrd1Module(const AliEMCALShishKebabTrd1Module& mod);
      26             : 
      27             :   AliEMCALShishKebabTrd1Module & operator = (const AliEMCALShishKebabTrd1Module& /*rvalue*/)  {
      28           0 :     Fatal("operator =", "not implemented") ;  
      29           0 :     return *this ; 
      30             :   }
      31             : 
      32           0 :   virtual ~AliEMCALShishKebabTrd1Module(void) {}
      33             :   Bool_t GetParameters();
      34             :   void DefineName(Double_t theta);
      35             :   void DefineFirstModule(const Int_t key=0); // key=0-zero tilt of first module
      36             : 
      37         230 :   Double_t GetTheta() const {return fTheta;}
      38         192 :   TVector2& GetCenterOfModule() {return fOK;}
      39             : 
      40           0 :   Double_t  GetPosX() const {return fOK.Y();}
      41         224 :   Double_t  GetPosZ() const {return fOK.X();}
      42         192 :   Double_t  GetPosXfromR() const {return fOK.Y() - fgr;}
      43         230 :   Double_t  GetA() const {return fA;}
      44         230 :   Double_t  GetB() const {return fB;}
      45       11520 :   Double_t  GetRadius() const {return fgr;}
      46           0 :   TVector2  GetORB() const {return fORB;}
      47           0 :   TVector2  GetORT() const {return fORT;}
      48             :   //  Additional offline staff 
      49             :   //  ieta=0 or 1 - Jun 02, 2006
      50             :   TVector2& GetCenterOfCellInLocalCoordinateofSM(Int_t ieta)
      51             :   { 
      52           0 :     if(ieta<=0) return fOK2;
      53           0 :     else        return fOK1;
      54           0 :   }
      55             :   void GetCenterOfCellInLocalCoordinateofSM(Int_t ieta, Double_t &xr, Double_t &zr, Int_t pri=0) const
      56             :   { 
      57         600 :     if(ieta<=0) {xr = fOK2.Y(); zr = fOK2.X();
      58         240 :     } else      {xr = fOK1.Y(); zr = fOK1.X();
      59             :     }
      60         240 :     if(pri>0) printf(" %s ieta %2.2i xr %8.4f  zr %8.4f \n", GetName(), ieta, xr, zr);  
      61         240 :   }
      62             :   void GetCenterOfCellInLocalCoordinateofSM3X3(Int_t ieta, Double_t &xr, Double_t &zr) const
      63             :   { // 3X3 case - Nov 9,2006
      64           0 :     if(ieta < 0) ieta = 0; //ieta = ieta<0? ieta=0 : ieta; // check index
      65           0 :     if(ieta > 2) ieta = 2; //ieta = ieta>2? ieta=2 : ieta;
      66           0 :     xr   = fOK3X3[2-ieta].Y(); zr   = fOK3X3[2-ieta].X();
      67           0 :   }
      68             :   void GetCenterOfCellInLocalCoordinateofSM1X1(Double_t &xr, Double_t &zr) const
      69             :   { // 1X1 case - Nov 27,2006 // Center of cell is center of module
      70           0 :     xr   = fOK.Y() - fgr;
      71           0 :     zr   = fOK.X();
      72           0 :   }
      73             :   // 15-may-06
      74           0 :   TVector2& GetCenterOfModuleFace() {return fOB;}  
      75             :   TVector2& GetCenterOfModuleFace(Int_t ieta) {
      76           0 :     if(ieta<=0) return fOB2;
      77           0 :     else        return fOB1;
      78           0 :   }  
      79             :   // Jul 30, 2007
      80             :   void GetPositionAtCenterCellLine(Int_t ieta, Double_t dist, TVector2 &v);
      81             :   // 
      82           2 :   Double_t GetTanBetta() const {return fgtanBetta;}
      83           0 :   Double_t Getb()        const {return fgb;}
      84             :   // service methods
      85             :   void PrintShish(Int_t pri=1) const;  // *MENU*
      86             :   Double_t  GetThetaInDegree() const;
      87             :   Double_t  GetEtaOfCenterOfModule() const;
      88             :   Double_t  GetMaxEtaOfModule(int pri=0) const;
      89             :   static Double_t ThetaToEta(Double_t theta) 
      90       11540 :   {return -TMath::Log(TMath::Tan(theta/2.));}
      91             : 
      92             :  protected:
      93             :   // geometry info
      94             :   AliEMCALEMCGeometry *fGeometry; //!
      95             :   static Double_t fga;        // 2*dx1=2*dy1
      96             :   static Double_t fga2;       // 2*dx2
      97             :   static Double_t fgb;        // 2*dz1
      98             :   static Double_t fgangle;    // in rad (1.5 degree)
      99             :   static Double_t fgtanBetta; // tan(fgangle/2.)
     100             :   static Double_t fgr;        // radius to IP
     101             : 
     102             :   TVector2 fOK;     // position the module center in ALICE system; x->y; z->x;
     103             :   Double_t fA;      // parameters of right line : y = A*z + B
     104             :   Double_t fB;      // system where zero point is IP.
     105             :   Double_t fThetaA; // angle coresponding fA - for convinience
     106             :   Double_t fTheta;  // theta angle of perpendicular to SK module
     107             :   // position of towers(cells) with differents ieta (1 or 2) in local coordinate of SM
     108             :   // Nov 04,2004; Feb 19,2006 
     109             :   TVector2 fOK1; // ieta=1
     110             :   TVector2 fOK2; // ieta=0
     111             :   // May 13, 2006; local position of module (cells) center face  
     112             :   TVector2 fOB;   // module
     113             :   TVector2 fOB1;  // ieta=1
     114             :   TVector2 fOB2;  // ieta=0
     115             :   // Jul 30, 2007
     116             :   Double_t fThetaOB1; // theta of cell center line (go through OB1)
     117             :   Double_t fThetaOB2;  // theta of cell center line (go through OB2)
     118             :   // 3X3 case - Nov 9,2006
     119             :   TVector2 fOK3X3[3];
     120             :   // Apr 14, 2010 - checking of geometry
     121             :   TVector2 fORB; // position of right/bottom point of module
     122             :   TVector2 fORT; // position of right/top    point of module
     123             :   // public:
     124          82 :   ClassDef(AliEMCALShishKebabTrd1Module, 5) // TRD1 Shish-Kebab module 
     125             : };
     126             : 
     127             : #endif

Generated by: LCOV version 1.11