ROOT logo
#ifndef ALIEMCALSHISHKEBABTRD1MODULE_H
#define ALIEMCALSHISHKEBABTRD1MODULE_H

/* Copyright(c) 1998-2010, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

/* $Id$ */
//_________________________________________________________________________
// Main class for TRD1 geometry of Shish-Kebab case.
// Author: Alexei Pavlinov(WSU).
// Nov 2004; Feb 2006; Apr 2010; Oct 23, 2010

#include <TNamed.h>
#include <TMath.h>
#include <TVector2.h>

class AliEMCALEMCGeometry;

class AliEMCALShishKebabTrd1Module : public TNamed {
 public:
  AliEMCALShishKebabTrd1Module(Double_t theta=0.0, AliEMCALEMCGeometry *g=0);
  AliEMCALShishKebabTrd1Module(AliEMCALShishKebabTrd1Module &leftNeighbor);
  void Init(Double_t A, Double_t B);
  void DefineAllStaff();
  AliEMCALShishKebabTrd1Module(const AliEMCALShishKebabTrd1Module& mod);

  AliEMCALShishKebabTrd1Module & operator = (const AliEMCALShishKebabTrd1Module& /*rvalue*/)  {
    Fatal("operator =", "not implemented") ;  
    return *this ; 
  }

  virtual ~AliEMCALShishKebabTrd1Module(void) {}
  Bool_t GetParameters();
  void DefineName(Double_t theta);
  void DefineFirstModule(const Int_t key=0); // key=0-zero tilt of first module

  Double_t GetTheta() const {return fTheta;}
  TVector2& GetCenterOfModule() {return fOK;}

  Double_t  GetPosX() const {return fOK.Y();}
  Double_t  GetPosZ() const {return fOK.X();}
  Double_t  GetPosXfromR() const {return fOK.Y() - fgr;}
  Double_t  GetA() const {return fA;}
  Double_t  GetB() const {return fB;}
  Double_t  GetRadius() const {return fgr;}
  TVector2  GetORB() const {return fORB;}
  TVector2  GetORT() const {return fORT;}
  //  Additional offline staff 
  //  ieta=0 or 1 - Jun 02, 2006
  TVector2& GetCenterOfCellInLocalCoordinateofSM(Int_t ieta)
  { 
    if(ieta<=0) return fOK2;
    else        return fOK1;
  }
  void GetCenterOfCellInLocalCoordinateofSM(Int_t ieta, Double_t &xr, Double_t &zr, Int_t pri=0) const
  { 
    if(ieta<=0) {xr = fOK2.Y(); zr = fOK2.X();
    } else      {xr = fOK1.Y(); zr = fOK1.X();
    }
    if(pri>0) printf(" %s ieta %2.2i xr %8.4f  zr %8.4f \n", GetName(), ieta, xr, zr);  
  }
  void GetCenterOfCellInLocalCoordinateofSM3X3(Int_t ieta, Double_t &xr, Double_t &zr) const
  { // 3X3 case - Nov 9,2006
    if(ieta < 0) ieta = 0; //ieta = ieta<0? ieta=0 : ieta; // check index
    if(ieta > 2) ieta = 2; //ieta = ieta>2? ieta=2 : ieta;
    xr   = fOK3X3[2-ieta].Y(); zr   = fOK3X3[2-ieta].X();
  }
  void GetCenterOfCellInLocalCoordinateofSM1X1(Double_t &xr, Double_t &zr) const
  { // 1X1 case - Nov 27,2006 // Center of cell is center of module
    xr   = fOK.Y() - fgr;
    zr   = fOK.X();
  }
  // 15-may-06
  TVector2& GetCenterOfModuleFace() {return fOB;}  
  TVector2& GetCenterOfModuleFace(Int_t ieta) {
    if(ieta<=0) return fOB2;
    else        return fOB1;
  }  
  // Jul 30, 2007
  void GetPositionAtCenterCellLine(Int_t ieta, Double_t dist, TVector2 &v);
  // 
  Double_t GetTanBetta() const {return fgtanBetta;}
  Double_t Getb()        const {return fgb;}
  // service methods
  void PrintShish(Int_t pri=1) const;  // *MENU*
  Double_t  GetThetaInDegree() const;
  Double_t  GetEtaOfCenterOfModule() const;
  Double_t  GetMaxEtaOfModule(int pri=0) const;
  static Double_t ThetaToEta(Double_t theta) 
  {return -TMath::Log(TMath::Tan(theta/2.));}

 protected:
  // geometry info
  AliEMCALEMCGeometry *fGeometry; //!
  static Double_t fga;        // 2*dx1=2*dy1
  static Double_t fga2;       // 2*dx2
  static Double_t fgb;        // 2*dz1
  static Double_t fgangle;    // in rad (1.5 degree)
  static Double_t fgtanBetta; // tan(fgangle/2.)
  static Double_t fgr;        // radius to IP

  TVector2 fOK;     // position the module center in ALICE system; x->y; z->x;
  Double_t fA;      // parameters of right line : y = A*z + B
  Double_t fB;      // system where zero point is IP.
  Double_t fThetaA; // angle coresponding fA - for convinience
  Double_t fTheta;  // theta angle of perpendicular to SK module
  // position of towers(cells) with differents ieta (1 or 2) in local coordinate of SM
  // Nov 04,2004; Feb 19,2006 
  TVector2 fOK1; // ieta=1
  TVector2 fOK2; // ieta=0
  // May 13, 2006; local position of module (cells) center face  
  TVector2 fOB;   // module
  TVector2 fOB1;  // ieta=1
  TVector2 fOB2;  // ieta=0
  // Jul 30, 2007
  Double_t fThetaOB1; // theta of cell center line (go through OB1)
  Double_t fThetaOB2;  // theta of cell center line (go through OB2)
  // 3X3 case - Nov 9,2006
  TVector2 fOK3X3[3];
  // Apr 14, 2010 - checking of geometry
  TVector2 fORB; // position of right/bottom point of module
  TVector2 fORT; // position of right/top    point of module
  // public:
  ClassDef(AliEMCALShishKebabTrd1Module, 5) // TRD1 Shish-Kebab module 
};

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