AliRoot Core  3dc7879 (3dc7879)
AliEMCALEMCGeometry.h
Go to the documentation of this file.
1 #ifndef ALIEMCALEMCGEOMETRY_H
2 #define ALIEMCALEMCGEOMETRY_H
3 /* Copyright(c) 1998-2004, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice */
5 
6 //_________________________________________________________________________
58 //_________________________________________________________________________
59 
60 // --- ROOT system ---
61 #include <TMath.h>
62 #include <TArrayD.h>
63 #include <TNamed.h>
64 class TString ;
65 class TObjArray;
66 class Riostream;
67 
68 // --- AliRoot header files ---
71 
72 class AliEMCALEMCGeometry : public TNamed
73 {
74 public:
75 
78 
79  AliEMCALEMCGeometry(); // default ctor only for internal usage (singleton)
80 
82 
83  AliEMCALEMCGeometry(const Text_t* name, const Text_t* title,
84  const Text_t* mcname="", const Text_t* mctitle="");
85 
86  virtual ~AliEMCALEMCGeometry(void);
87 
90  {
91  Fatal("operator =", "not implemented");
92  return *this;
93  };
94 
96  // General
97  //
98 
99  Bool_t IsInitialized(void) const { return fgInit ; }
100  static const Char_t* GetDefaultGeometryName() { return fgkDefaultGeometryName ; }
101  void PrintGeometry(); //*MENU*
102 
103  void Init(const Text_t* mcname="", const Text_t* mctitle="");
104  void CheckAdditionalOptions(); //
105  void DefineSamplingFraction(const Text_t* mcname="", const Text_t* mctitle="");
106 
108  // Return EMCAL geometrical parameters
109  //
110 
111  TString GetGeoName() const { return fGeoName;}
112 
113  const Int_t * GetEMCSystem() const { return fEMCSMSystem ; }
114  Int_t * GetEMCSystem() { return fEMCSMSystem ; } // Why? GCB
115 
116  const Char_t* GetNameOfEMCALEnvelope() const { const Char_t* env = "XEN1"; return env ;}
117 
118  Float_t GetArm1PhiMin() const { return fArm1PhiMin ; }
119  Float_t GetArm1PhiMax() const { return fArm1PhiMax ; }
120  Float_t GetArm1EtaMin() const { return fArm1EtaMin ; }
121  Float_t GetArm1EtaMax() const { return fArm1EtaMax ; }
122  Float_t GetIPDistance() const { return fIPDistance ; }
123 
124  Float_t GetEnvelop(Int_t index) const { return fEnvelop[index] ; }
125  Float_t GetShellThickness() const { return fShellThickness ; }
126  Float_t GetZLength() const { return fZLength ; }
127 
128  Float_t GetDCALInnerEdge() const { return fDCALInnerEdge ; }
129  Float_t GetDCALPhiMin() const { return fDCALPhiMin ; }
130  Float_t GetDCALPhiMax() const { return fDCALPhiMax ; }
131  Float_t GetDCALInnerExtandedEta() const { return fDCALInnerExtandedEta ; }
132  Float_t GetEMCALPhiMax() const { return fEMCALPhiMax ; }
133  Float_t GetDCALStandardPhiMax() const { return fDCALStandardPhiMax ; }
134 
135  Int_t GetNECLayers() const { return fNECLayers ; }
136  Int_t GetNZ() const { return fNZ ; }
137  Int_t GetNEta() const { return fNZ ; }
138  Int_t GetNPhi() const { return fNPhi ; }
139 
140  Float_t GetECPbRadThick() const { return fECPbRadThickness ; }
141  Float_t GetECScintThick() const { return fECScintThick ; }
142  Float_t GetSampling() const { return fSampling ; }
143 
145  Float_t GetPhiGapForSuperModules() const { return fPhiGapForSM ; }
146  Float_t GetPhiModuleSize() const { return fPhiModuleSize ; }
147  Float_t GetEtaModuleSize() const { return fEtaModuleSize ; }
148 
149  Float_t GetFrontSteelStrip() const { return fFrontSteelStrip ; }
150  Float_t GetLateralSteelStrip() const { return fLateralSteelStrip ; }
151  Float_t GetPassiveScintThick() const { return fPassiveScintThick ; }
152 
153  Float_t GetPhiTileSize() const { return fPhiTileSize ; }
154  Float_t GetEtaTileSize() const { return fEtaTileSize ; }
155 
156  Float_t GetPhiSuperModule() const { return fPhiSuperModule;}
157  Int_t GetNPhiSuperModule() const { return fNPhiSuperModule;}
158 
159  Int_t GetNPHIdiv() const { return fNPHIdiv ; }
160  Int_t GetNETAdiv() const { return fNETAdiv ; }
161  Int_t GetNCells() const { return fNCells ; }
162  Float_t GetLongModuleSize() const { return fLongModuleSize ; }
163 
164  Float_t GetTrd1Angle() const { return fTrd1Angle ; }
165  Float_t Get2Trd1Dx2() const { return f2Trd1Dx2 ; }
166  Float_t GetEtaMaxOfTRD1() const { return fEtaMaxOfTRD1 ; }
167  Float_t GetTrd1AlFrontThick() const { return fTrd1AlFrontThick ; }
168  Float_t GetTrd1BondPaperThick() const { return fTrd1BondPaperThick ; }
169  // --
170  Int_t GetNCellsInSupMod() const { return fNCellsInSupMod ; }
171  Int_t GetNCellsInModule() const { return fNCellsInModule ; }
172  Int_t GetKey110DEG() const { return fKey110DEG ; }
173  Int_t GetnSupModInDCAL() const { return fnSupModInDCAL ; }
174 
175  Int_t GetILOSS() const { return fILOSS ; }
176  Int_t GetIHADR() const { return fIHADR ; }
177 
178  // --
179  Float_t GetDeltaEta() const { return (fArm1EtaMax-fArm1EtaMin)/ ((Float_t)fNZ) ; }
180  Float_t GetDeltaPhi() const { return (fArm1PhiMax-fArm1PhiMin)/ ((Float_t)fNPhi) ; }
181  Int_t GetNTowers() const { return fNPhi * fNZ ; }
182  //
183  Double_t GetPhiCenterOfSM (Int_t nsupmod) const;
184  Double_t GetPhiCenterOfSMSec(Int_t nsupmod) const;
185  Float_t GetSuperModulesPar (Int_t ipar) const { return fParSM[ipar];}
186  Int_t GetSMType(Int_t nSupMod) const { if( nSupMod > GetNumberOfSuperModules() ) return kNotExistent;
187  return fEMCSMSystem[nSupMod]; }
188  //
189  Bool_t GetPhiBoundariesOfSM (Int_t nSupMod, Double_t &phiMin, Double_t &phiMax) const;
190  Bool_t GetPhiBoundariesOfSMGap(Int_t nPhiSec, Double_t &phiMin, Double_t &phiMax) const;
191 
192  //
193  static int ParseString(const TString &topt, TObjArray &Opt) ;
194 
196  //Geometry data member setters
197  //
198  void SetNZ(Int_t nz) { fNZ= nz;
199  printf("SetNZ: Number of modules in Z set to %d" , fNZ) ; }
200  void SetNPhi(Int_t nphi) { fNPhi= nphi;
201  printf("SetNPhi: Number of modules in Phi set to %d", fNPhi) ; }
202  void SetSampling(Float_t samp) { fSampling = samp;
203  printf("SetSampling: Sampling factor set to %f" , fSampling) ; }
204 
206  // useful utilities
207  //
209  Float_t AngleFromEta(Float_t eta) const {
210  return 2.0*TMath::ATan(TMath::Exp(-eta));
211  }
212 
214  Float_t ZFromEtaR(Float_t r,Float_t eta) const {
215  return r/TMath::Tan(AngleFromEta(eta));
216  }
217 
219  // Obsolete?
220  Float_t GetSteelFrontThickness() const { return fSteelFrontThick;}
222 
223  static const Char_t* fgkDefaultGeometryName;
224  static Bool_t fgInit;
225 
226 private:
227 
228  // Member data
229 
230  TString fGeoName;
231 
233  const char *fkAdditionalOpts[6];
235 
237  Float_t fECScintThick;
238  Int_t fNECLayers;
239 
240  Float_t fArm1PhiMin;
241  Float_t fArm1PhiMax;
242  Float_t fArm1EtaMin;
243  Float_t fArm1EtaMax;
244 
245  // Geometry Parameters
246  Float_t fEnvelop[3];
247  Float_t fIPDistance;
248  Float_t fShellThickness;
249  Float_t fZLength;
250  Float_t fDCALInnerEdge;
251  Float_t fDCALPhiMin;
252  Float_t fDCALPhiMax;
253  Float_t fEMCALPhiMax;
256  Int_t fNZ;
257  Int_t fNPhi;
258  Float_t fSampling;
259 
260  // Shish-kebab option - 23-aug-04 by PAI; COMPACT, TWIST, TRD1 and TRD2
262 
264  Int_t *fEMCSMSystem; //[fNumberOfSuperModules]
265 
269 
270  Float_t fPhiModuleSize;
271  Float_t fEtaModuleSize;
272  Float_t fPhiTileSize;
273  Float_t fEtaTileSize;
274 
275  Float_t fLongModuleSize;
276  Float_t fPhiSuperModule;
278 
279  Int_t fNPHIdiv;
280  Int_t fNETAdiv;
281  //
282  Int_t fNCells;
285 
286  // TRD1 options - 30-sep-04
287  Float_t fTrd1Angle;
288  Float_t f2Trd1Dx2;
289  Float_t fPhiGapForSM;
290  Int_t fKey110DEG;
293  TArrayD fPhiCentersOfSM;
295  Float_t fEtaMaxOfTRD1;
296 
297  // Oct 26,2010
300 
301  // Local Coordinates of SM
305  //
308 
309  // Move from AliEMCALv0 - Feb 19, 2006
311 
312  // Local coordinates of SM for TRD1
313  Float_t fParSM[3];
314 
315  Int_t fILOSS;
316  Int_t fIHADR;
317 
319 
321  ClassDef(AliEMCALEMCGeometry, 3) ;
323 
324 };
325 
326 #endif // AliEMCALEMCGEOMETRY_H
Float_t GetSteelFrontThickness() const
Int_t fNPhiSuperModule
9 - number supermodule in phi direction
EMCal geometry SM base, singleton.
fEMCSMType
possible SM Type
Float_t fSteelFrontThick
Thickness of the front stell face of the support box - 9-sep-04; obsolete?
printf("Chi2/npoints = %f\n", TMath::Sqrt(chi2/npoints))
Int_t fIHADR
Options for Geant (MIP business) - will call in AliEMCAL.
Float_t fTrd1Angle
angle in x-z plane (in degree)
Float_t GetLateralSteelStrip() const
Float_t fDCALInnerExtandedEta
DCAL inner edge in Eta (with some extension)
Float_t Get2Trd1Dx2() const
Float_t ZFromEtaR(Float_t r, Float_t eta) const
Float_t fDCALStandardPhiMax
special edge for the case that DCAL contian extension
Float_t fDCALInnerEdge
Inner edge for DCAL.
Double_t GetPhiCenterOfSMSec(Int_t nsupmod) const
Int_t * fEMCSMSystem
geometry structure
Float_t fECPbRadThickness
cm, Thickness of the Pb radiators
TArrayD fPhiCentersOfCells
[fNPhi*fNPHIdiv] from center of SM (-10. < phi < +10.)
TArrayD fCentersOfCellsEtaDir
size fNZ*fNETAdiv (for TRD1 only) (eta or z in SM, in cm)
Float_t fEtaTileSize
Size of eta tile.
Float_t GetEtaModuleSize() const
Int_t fNCellsInSupMod
number cell in super module
Float_t GetEtaTileSize() const
TArrayD fPhiCentersOfSMSec
phi of centers of section where SM lies; size is fNumberOfSuperModules/2
#define TObjArray
const Int_t * GetEMCSystem() const
Float_t GetArm1EtaMin() const
Float_t fFrontSteelStrip
13-may-05
Int_t fnSupModInDCAL
for calculation abs cell id;
Float_t fTrd1BondPaperThick
Thickness of the Bond Paper sheet.
Float_t fIPDistance
Radial Distance of the inner surface of the EMCAL.
Int_t fNumberOfSuperModules
default is 12 = 6 * 2
Float_t GetDCALInnerExtandedEta() const
Int_t GetNCellsInModule() const
Float_t GetArm1EtaMax() const
Float_t fShellThickness
Total thickness in (x,y) direction.
const char * fkAdditionalOpts[6]
! some additional options for the geometry type and name
TArrayD fCentersOfCellsPhiDir
size fNPhi*fNPHIdiv (for TRD1 only) (phi or y in SM, in cm)
AliEMCALEMCGeometry & operator=(const AliEMCALEMCGeometry &)
Assignement operator requested by coding convention but not needed.
Float_t fDCALPhiMax
Maximum angular position of DCAL in Phi (degrees)
Float_t GetDCALPhiMin() const
Int_t fNPhi
Number of Towers in the PHI direction.
Int_t GetnSupModInDCAL() const
Float_t fECScintThick
cm, Thickness of the scintillators
virtual ~AliEMCALEMCGeometry(void)
Float_t GetTrd1AlFrontThick() const
Float_t GetIPDistance() const
TArrayD fEtaCentersOfCells
[fNZ*fNETAdiv*fNPhi*fNPHIdiv], positive direction (eta>0); eta depend from phi position; ...
Float_t GetZLength() const
Float_t GetDeltaEta() const
Float_t GetPassiveScintThick() const
Int_t fNCells
number of cells in calo
TArrayD fCentersOfCellsXDir
size fNZ*fNETAdiv (for TRD1 only) ( x in SM, in cm)
Double_t GetPhiCenterOfSM(Int_t nsupmod) const
Float_t fTrd1AlFrontThick
Thickness of the Al front plate.
Float_t GetPhiGapForSuperModules() const
Float_t GetEMCALPhiMax() const
Float_t GetEnvelop(Int_t index) const
Float_t fSampling
Sampling factor.
Int_t GetNumberOfSuperModules() const
Float_t fEnvelop[3]
the GEANT TUB for the detector
Int_t GetSMType(Int_t nSupMod) const
Float_t fDCALPhiMin
Minimum angular position of DCAL in Phi (degrees)
Int_t fNETAdiv
number eta divizion of module
Float_t fEMCALPhiMax
Maximum angular position of EMCAL in Phi (degrees)
Int_t fNPHIdiv
number phi divizion of module
Float_t fLateralSteelStrip
13-may-05
Float_t fZLength
Total length in z direction.
void SetNPhi(Int_t nphi)
Float_t GetShellThickness() const
Float_t fPhiModuleSize
Phi -> X.
Float_t fLongModuleSize
Size of long module.
Int_t GetNECLayers() const
Bool_t GetPhiBoundariesOfSM(Int_t nSupMod, Double_t &phiMin, Double_t &phiMax) const
Int_t fNECLayers
number of scintillator layers
Float_t GetECScintThick() const
Float_t fPhiSuperModule
Phi of normal supermodule (20, in degree)
TString fGeoName
geometry name
Float_t fArm1EtaMin
Minimum pseudorapidity position of EMCAL in Eta.
Float_t GetArm1PhiMin() const
Float_t GetDCALPhiMax() const
Float_t GetDeltaPhi() const
Float_t GetTrd1Angle() const
TList * fShishKebabTrd1Modules
! list of modules
Float_t fParSM[3]
SM sizes as in GEANT (TRD1)
Float_t fPhiGapForSM
Gap betweeen supermodules in phi direction.
Float_t fArm1PhiMax
Maximum angular position of EMCAL in Phi (degrees)
Float_t AngleFromEta(Float_t eta) const
Float_t GetPhiModuleSize() const
Bool_t IsInitialized(void) const
void SetSampling(Float_t samp)
Float_t GetTrd1BondPaperThick() const
Float_t GetSuperModulesPar(Int_t ipar) const
Float_t fEtaModuleSize
Eta -> Y.
Int_t fNZ
Number of Towers in the Z direction.
Float_t fArm1EtaMax
Maximum pseudorapidity position of EMCAL in Eta.
Float_t fPhiTileSize
Size of phi tile.
Float_t fArm1PhiMin
Minimum angular position of EMCAL in Phi (degrees)
Int_t GetNPhiSuperModule() const
Float_t fPassiveScintThick
13-may-05
Float_t GetDCALInnerEdge() const
Float_t GetEtaMaxOfTRD1() const
Int_t GetNCellsInSupMod() const
const Char_t * GetNameOfEMCALEnvelope() const
Float_t GetFrontSteelStrip() const
TObjArray * fArrayOpts
! array of geometry options
Int_t GetKey110DEG() const
Float_t GetArm1PhiMax() const
Float_t f2Trd1Dx2
2*dx2 for TRD1
Float_t GetPhiSuperModule() const
void Init(const Text_t *mcname="", const Text_t *mctitle="")
Float_t GetECPbRadThick() const
int fNAdditionalOpts
! size of additional options parameter
Float_t GetLongModuleSize() const
static const Char_t * fgkDefaultGeometryName
Default name of geometry.
TEveGeoShape * geom
Definition: tpc_tracks.C:10
Int_t fNCellsInModule
number cell in module)
TArrayD fPhiBoundariesOfSM
phi boundaries of SM in rad; size is fNumberOfSuperModules;
static const Char_t * GetDefaultGeometryName()
Float_t GetSampling() const
static Bool_t fgInit
Tells if geometry has been succesfully set up.
Float_t GetPhiTileSize() const
static int ParseString(const TString &topt, TObjArray &Opt)
Int_t fKey110DEG
for calculation abs cell id; 19-oct-05
Float_t fEtaMaxOfTRD1
max eta in case of TRD1 geometry (see AliEMCALShishKebabTrd1Module)
Bool_t GetPhiBoundariesOfSMGap(Int_t nPhiSec, Double_t &phiMin, Double_t &phiMax) const
TArrayD fPhiCentersOfSM
phi of centers of SM; size is fNumberOfSuperModules/2
Int_t fILOSS
Options for Geant (MIP business) - will call in AliEMCAL.
Main class for TRD1 geometry of Shish-Kebab case.
void DefineSamplingFraction(const Text_t *mcname="", const Text_t *mctitle="")
Float_t GetDCALStandardPhiMax() const
TString GetGeoName() const