AliRoot Core  ee782a0 (ee782a0)
AliEMCALGeometry.h
Go to the documentation of this file.
1 #ifndef ALIEMCALGEOMETRY_H
2 #define ALIEMCALGEOMETRY_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice */
5 
6 //_________________________________________________________________________
81 //_________________________________________________________________________
82 
83 // --- ROOT system ---
84 #include <TNamed.h>
85 #include <TMath.h>
86 #include <TArrayD.h>
87 #include <TVector3.h>
88 #include <TGeoMatrix.h>
89 class TBrowser ;
90 class TParticle ;
91 
92 // --- AliRoot header files ---
93 #include "AliEMCALEMCGeometry.h"
94 #include "AliEMCALGeoParams.h"
95 #include "AliEMCALTriggerMapping.h"
97 class AliLog;
98 
99 class AliEMCALGeometry : public TNamed {
100 
101 public:
102  enum fEMCSMType { kEMCAL_Standard = 0, kEMCAL_Half = 1, kEMCAL_3rd = 2, kDCAL_Standard = 3, kDCAL_Ext= 4 }; // possible SM Type
103 
105  AliEMCALGeometry(const Text_t* name, const Text_t* title="",
106  const Text_t* mcname="", const Text_t* mctitle="");
108 
109  virtual ~AliEMCALGeometry(void);
111 
112  static AliEMCALGeometry * GetInstance();
113 
114  static AliEMCALGeometry * GetInstance(const Text_t* name, const Text_t* title = "",
115  const Text_t* mcname = "TGeant3", const Text_t* mctitle = "" ) ;
116 
118  TString geoName = "",
119  const Text_t* mcname = "TGeant3",
120  const Text_t* mctitle = "" ) ;
121 
123  // General
124  //
125  static Bool_t IsInitialized(void) {return AliEMCALEMCGeometry::fgInit; }
127 
129  // TRD1 stuff
133 
134  void PrintGeometryGeoUtils(); // *MENU*
135  void PrintCellIndexes(Int_t absId=0, int pri=0, const char *tit="") const ; //*MENU*
136  void PrintLocalTrd1(Int_t pri=0) const; // *MENU*
137  virtual void Browse(TBrowser* b);
138  virtual Bool_t IsFolder() const;
139 
140  virtual Bool_t Impact(const TParticle *particle) const;
141  void ImpactOnEmcal(TVector3 vtx, Double_t theta, Double_t phi, Int_t & absId, TVector3 & vimpact) const;
142  Bool_t IsInEMCAL(Double_t x, Double_t y, Double_t z) const;
143  Bool_t IsInDCAL(Double_t x, Double_t y, Double_t z) const;
144  Int_t IsInEMCALOrDCAL(Double_t x, Double_t y, Double_t z) const;
145 
147  // Return EMCAL geometrical parameters
148  //
149 
151 
153 
154  //
155  const Char_t* GetNameOfEMCALEnvelope(void) const { return fEMCGeometry->GetNameOfEMCALEnvelope() ; }
156  Float_t GetArm1PhiMin(void) const { return fEMCGeometry->GetArm1PhiMin() ; }
157  Float_t GetArm1PhiMax(void) const { return fEMCGeometry->GetArm1PhiMax() ; }
158  Float_t GetArm1EtaMin(void) const { return fEMCGeometry->GetArm1EtaMin() ; }
159  Float_t GetArm1EtaMax(void) const { return fEMCGeometry->GetArm1EtaMax() ; }
160  Float_t GetIPDistance(void) const { return fEMCGeometry->GetIPDistance() ; }
161  Float_t GetEnvelop(Int_t index) const { return fEMCGeometry->GetEnvelop(index) ; }
162  Float_t GetShellThickness(void) const { return fEMCGeometry->GetShellThickness() ; }
163  Float_t GetZLength(void) const { return fEMCGeometry->GetZLength() ; }
164  Float_t GetDCALInnerEdge(void) const { return fEMCGeometry->GetDCALInnerEdge() ; }
165  Float_t GetDCALPhiMin(void) const { return fEMCGeometry->GetDCALPhiMin() ; }
166  Float_t GetDCALPhiMax(void) const { return fEMCGeometry->GetDCALPhiMax() ; }
167  Float_t GetEMCALPhiMax(void) const { return fEMCGeometry->GetEMCALPhiMax() ; }
168  Int_t GetNECLayers(void) const { return fEMCGeometry->GetNECLayers() ; }
170  Int_t GetNZ(void) const { return fEMCGeometry->GetNZ() ; }
171  Int_t GetNEta(void) const { return fEMCGeometry->GetNEta() ; }
172  Int_t GetNPhi(void) const { return fEMCGeometry->GetNPhi() ; }
173  Float_t GetECPbRadThick(void) const { return fEMCGeometry->GetECPbRadThick() ; }
174  Float_t GetECScintThick(void) const { return fEMCGeometry->GetECScintThick() ; }
175  Float_t GetSampling(void) const { return fEMCGeometry->GetSampling() ; }
178  Float_t GetPhiModuleSize(void) const { return fEMCGeometry->GetPhiModuleSize() ; }
179  Float_t GetEtaModuleSize(void) const { return fEMCGeometry->GetEtaModuleSize() ; }
180  Float_t GetFrontSteelStrip(void) const { return fEMCGeometry->GetFrontSteelStrip() ; }
181  Float_t GetLateralSteelStrip(void) const { return fEMCGeometry->GetLateralSteelStrip() ; }
182  Float_t GetPassiveScintThick(void) const { return fEMCGeometry->GetPassiveScintThick() ; }
183  Float_t GetPhiTileSize(void) const { return fEMCGeometry->GetPhiTileSize() ; }
184  Float_t GetEtaTileSize(void) const { return fEMCGeometry->GetEtaTileSize() ; }
185  Float_t GetPhiSuperModule(void) const { return fEMCGeometry->GetPhiSuperModule() ; }
186  Int_t GetNPhiSuperModule(void) const { return fEMCGeometry->GetNPhiSuperModule() ; }
187  Int_t GetNPHIdiv(void) const { return fEMCGeometry->GetNPHIdiv() ; }
188  Int_t GetNETAdiv(void) const { return fEMCGeometry->GetNETAdiv() ; }
189  Int_t GetNCells(void) const { return fEMCGeometry->GetNCells() ; }
190  Float_t GetLongModuleSize(void) const { return fEMCGeometry->GetLongModuleSize() ; }
191  Float_t GetTrd1Angle(void) const { return fEMCGeometry->GetTrd1Angle() ; }
192  Float_t Get2Trd1Dx2(void) const { return fEMCGeometry->Get2Trd1Dx2() ; }
193  Float_t GetTrd1AlFrontThick() const { return fEMCGeometry->GetTrd1AlFrontThick() ; }
195  // --
196  Int_t GetNCellsInSupMod(void) const { return fEMCGeometry->GetNCellsInSupMod() ; }
197  Int_t GetNCellsInModule(void) const { return fEMCGeometry->GetNCellsInModule() ; }
198  Int_t GetKey110DEG(void) const { return fEMCGeometry->GetKey110DEG() ; }
199  Int_t GetnSupModInDCAL(void) const { return fEMCGeometry->GetnSupModInDCAL() ; }
200  Int_t GetILOSS(void) const { return fEMCGeometry->GetILOSS() ; }
201  Int_t GetIHADR(void) const { return fEMCGeometry->GetIHADR() ; }
202  // --
203  Float_t GetDeltaEta(void) const { return fEMCGeometry->GetDeltaEta() ; }
204  Float_t GetDeltaPhi(void) const { return fEMCGeometry->GetDeltaPhi() ; }
205  Int_t GetNTowers(void) const { return fEMCGeometry->GetNTowers() ; }
206  //
207  Double_t GetPhiCenterOfSM(Int_t nsupmod) const { return fEMCGeometry->GetPhiCenterOfSM(nsupmod) ; }
208  Double_t GetPhiCenterOfSMSec(Int_t nsupmod) const { return fEMCGeometry->GetPhiCenterOfSMSec(nsupmod) ; }
209  Float_t GetSuperModulesPar(Int_t ipar) const { return fEMCGeometry->GetSuperModulesPar(ipar) ; }
210  //
211  Int_t GetSMType(Int_t nSupMod) const { if( nSupMod > fEMCGeometry->GetNumberOfSuperModules() ) return -1;
212  return fEMCGeometry->GetEMCSystem()[nSupMod] ; }
213  Bool_t IsDCALSM (Int_t nSupMod) const;
214  Bool_t IsDCALExtSM(Int_t nSupMod) const;
215 
216  // Methods needed for SM in extension, where center of SM != center of the SM-section.
217  // Used in AliEMCALv0 to calculate position.
218  Bool_t GetPhiBoundariesOfSM(Int_t nSupMod, Double_t &phiMin, Double_t &phiMax) const
219  { return fEMCGeometry->GetPhiBoundariesOfSM(nSupMod, phiMin, phiMax) ; }
220  Bool_t GetPhiBoundariesOfSMGap(Int_t nPhiSec, Double_t &phiMin, Double_t &phiMax) const
221  { return fEMCGeometry->GetPhiBoundariesOfSMGap(nPhiSec, phiMin, phiMax); }
222 
223  // Obsolete?
224  Float_t GetSteelFrontThickness(void) const { return fEMCGeometry->GetSteelFrontThickness() ; }
225 
227  //Geometry data member setters
228  //
229  void SetNZ(Int_t nz) { fEMCGeometry->SetNZ(nz) ; }
230  void SetNPhi(Int_t nphi) { fEMCGeometry->SetNPhi(nphi) ; }
231  //
232  void SetSampling(Float_t samp) { fEMCGeometry->SetSampling(samp) ; }
233  //
234  void PrintGeometry() { fEMCGeometry->PrintGeometry() ; } //*MENU*
235 
237  // Global geometry methods
238  //
239  void GetGlobal(const Double_t *loc, Double_t *glob, int ind) const;
240  void GetGlobal(const TVector3 &vloc, TVector3 &vglob, int ind) const;
241  void GetGlobal(Int_t absId, Double_t glob[3]) const;
242  void GetGlobal(Int_t absId, TVector3 &vglob) const;
243 
245  // May 31, 2006; ALICE numbering scheme:
246  // see ALICE-INT-2003-038: ALICE Coordinate System and Software Numbering Convention
247  // All indexes are stared from zero now.
248  //
249  // abs id <-> indexes; Shish-kebab case, only TRD1 now.
250  // EMCAL -> Super Module -> module -> tower(or cell) - logic tree of EMCAL
251  //
252  //** Usual name of variable - Dec 18,2006 **
253  // nSupMod - index of super module (SM)
254  // nModule - index of module in SM
255  // nIphi - phi index of tower(cell) in module
256  // nIeta - eta index of tower(cell) in module
257  //
258  // Inside SM
259  // iphim - phi index of module in SM
260  // ietam - eta index of module in SM
261  //
262  // iphi - phi index of tower(cell) in SM
263  // ieta - eta index of tower(cell) in SM
264  //
265  // for a given tower index absId returns eta and phi of gravity center of tower.
266  void EtaPhiFromIndex(Int_t absId, Double_t &eta, Double_t &phi) const;
267  void EtaPhiFromIndex(Int_t absId, Float_t &eta, Float_t &phi) const;
268 
269  Bool_t GetAbsCellIdFromEtaPhi(Double_t eta,Double_t phi, Int_t &absId) const;
270  Bool_t SuperModuleNumberFromEtaPhi(Double_t eta, Double_t phi, Int_t &nSupMod) const;
271  Int_t GetAbsCellId(Int_t nSupMod, Int_t nModule, Int_t nIphi, Int_t nIeta) const;
272  Bool_t CheckAbsCellId(Int_t absId) const;
273  Bool_t GetCellIndex(Int_t absId, Int_t &nSupMod, Int_t &nModule, Int_t &nIphi,
274  Int_t &nIeta) const;
275  // Local coordinate of Super Module
276  void GetModulePhiEtaIndexInSModule(Int_t nSupMod, Int_t nModule, Int_t &iphim,
277  Int_t &ietam) const;
278  void GetCellPhiEtaIndexInSModule(Int_t nSupMod, Int_t nModule, Int_t nIphi, Int_t nIeta,
279  Int_t &iphi, Int_t &ieta) const ;
280  Int_t GetSuperModuleNumber(Int_t absId) const;
281 
284  Int_t GetNumberOfModuleInPhiDirection(Int_t nSupMod) const
285  {
286  if( GetSMType(nSupMod) == kEMCAL_Half) return fNPhi/2;
287  else if(GetSMType(nSupMod) == kEMCAL_3rd) return fNPhi/3;
288  else if(GetSMType(nSupMod) == kDCAL_Ext) return fNPhi/3;
289  else return fNPhi;
290  }
291 
294  Int_t GetNumberOfCellsInPhiDirection(Int_t nSupMod) const
295  { return fNPHIdiv*GetNumberOfModuleInPhiDirection(nSupMod) ; }
296 
299  Int_t GetNumberOfModuleInEtaDirection(Int_t nSupMod) const
300  {
301  if ( GetSMType(nSupMod) == kDCAL_Standard ) return (fNZ*2)/3;
302  else return fNZ;
303  }
304 
307  Int_t GetNumberOfCellsInEtaDirection(Int_t nSupMod) const
308  { return fNETAdiv*GetNumberOfModuleInEtaDirection(nSupMod) ; }
309 
310  // From cell indexes to abs cell id
311  void GetModuleIndexesFromCellIndexesInSModule(Int_t nSupMod, Int_t iphi, Int_t ieta,
312  Int_t &iphim, Int_t &ietam, Int_t &nModule) const;
313  Int_t GetAbsCellIdFromCellIndexes(Int_t nSupMod, Int_t iphi, Int_t ieta) const;
314 
315  void ShiftOnlineToOfflineCellIndexes(Int_t sm, Int_t & iphi, Int_t & ieta) const ;
316  void ShiftOfflineToOnlineCellIndexes(Int_t sm, Int_t & iphi, Int_t & ieta) const ;
317 
318  // Methods for AliEMCALRecPoint - Feb 19, 2006
319  Bool_t RelPosCellInSModule(Int_t absId,
320  Double_t &xr, Double_t &yr, Double_t &zr) const;
321  Bool_t RelPosCellInSModule(Int_t absId, Double_t distEff,
322  Double_t &xr, Double_t &yr, Double_t &zr) const;
323  Bool_t RelPosCellInSModule(Int_t absId, Double_t loc[3]) const;
324  Bool_t RelPosCellInSModule(Int_t absId, TVector3 &vloc) const;
325 
326  Int_t * GetEMCSystem() const { return fEMCGeometry->GetEMCSystem() ; } //EMC System, SM type list
327  // Local Coordinates of SM
328  TArrayD GetCentersOfCellsEtaDir() const { return fCentersOfCellsEtaDir ; } // size fNZ*fNETAdiv (for TRD1 only) (eta or z in SM, in cm)
329  TArrayD GetCentersOfCellsXDir() const { return fCentersOfCellsXDir ; } // size fNZ*fNETAdiv (for TRD1 only) ( x in SM, in cm)
330  TArrayD GetCentersOfCellsPhiDir() const { return fCentersOfCellsPhiDir ; } // size fNPhi*fNPHIdiv (for TRD1 only) (phi or y in SM, in cm)
331  //
332  TArrayD GetEtaCentersOfCells() const { return fEtaCentersOfCells ; } // [fNZ*fNETAdiv*fNPhi*fNPHIdiv], positive direction (eta>0); eta depend from phi position;
333  TArrayD GetPhiCentersOfCells() const { return fPhiCentersOfCells ; } // [fNPhi*fNPHIdiv] from center of SM (-10. < phi < +10.)
334 
336  // useful utilities
337  //
338  Float_t AngleFromEta(Float_t eta) const { // returns theta in radians for a given pseudorapidity
339  return 2.0*TMath::ATan(TMath::Exp(-eta));
340  }
341  Float_t ZFromEtaR(Float_t r,Float_t eta) const { // returns z in for a given
342  // pseudorapidity and r=sqrt(x*x+y*y).
343  return r/TMath::Tan(AngleFromEta(eta));
344  }
345 
346  //Method to set shift-rotational matrixes from ESDHeader
347  void SetMisalMatrix(const TGeoHMatrix * m, Int_t smod) const;
348 
349  //Alternate geometry that allows to calculate tower position for different particles and different alignments
350  void RecalculateTowerPosition(Float_t drow, Float_t dcol, const Int_t sm, const Float_t depth,
351  const Float_t misaligTransShifts[15], const Float_t misaligRotShifts[15],Float_t global[3]) const;
352 
353  //Returns shift-rotational matrixes for different volumes
354  const TGeoHMatrix * GetMatrixForSuperModule(Int_t smod) const ;
355  const TGeoHMatrix * GetMatrixForSuperModuleFromGeoManager(Int_t smod) const ;
356  const TGeoHMatrix * GetMatrixForSuperModuleFromArray(Int_t smod) const ;
357 
358  Bool_t GetAbsFastORIndexFromTRU(const Int_t iTRU, const Int_t iADC, Int_t& id) const {
359  return fTriggerMapping->GetAbsFastORIndexFromTRU(iTRU, iADC, id);
360  }
361  Bool_t GetAbsFastORIndexFromPositionInTRU(const Int_t iTRU, const Int_t iEta, const Int_t iPhi, Int_t& id) const {
362  return fTriggerMapping->GetAbsFastORIndexFromPositionInTRU(iTRU, iEta, iPhi, id);
363  }
364  Bool_t GetAbsFastORIndexFromPositionInSM(const Int_t iSM, const Int_t iEta, const Int_t iPhi, Int_t& id) const {
365  return fTriggerMapping->GetAbsFastORIndexFromPositionInSM( iSM, iEta, iPhi, id);
366  }
367  Bool_t GetAbsFastORIndexFromPositionInEMCAL(const Int_t iEta, const Int_t iPhi, Int_t& id) const {
369  }
370  Bool_t GetAbsFastORIndexFromPHOSSubregion(const Int_t iPHOS, Int_t& id) const {
372  }
373  Bool_t GetTRUFromAbsFastORIndex(const Int_t id, Int_t& iTRU, Int_t& iADC) const {
374  return fTriggerMapping->GetTRUFromAbsFastORIndex(id, iTRU, iADC);
375  }
376  Bool_t GetPositionInTRUFromAbsFastORIndex(const Int_t id, Int_t& iTRU, Int_t& iEta, Int_t& iPhi) const {
377  return fTriggerMapping->GetPositionInTRUFromAbsFastORIndex(id, iTRU, iEta, iPhi);
378  }
379  Bool_t GetPositionInSMFromAbsFastORIndex(const Int_t id, Int_t& iSM, Int_t& iEta, Int_t& iPhi) const {
380  return fTriggerMapping->GetPositionInSMFromAbsFastORIndex(id, iSM, iEta, iPhi);
381  }
382  Bool_t GetPositionInEMCALFromAbsFastORIndex(const Int_t id, Int_t& iEta, Int_t& iPhi) const {
384  }
385  Bool_t GetFastORIndexFromCellIndex(const Int_t id, Int_t& idx) const {
387  }
388  Bool_t GetCellIndexFromFastORIndex(const Int_t id, Int_t idx[4]) const {
390  }
391  Bool_t GetTRUIndexFromSTUIndex(const Int_t id, Int_t& idx, Int_t detector) const {
392  return fTriggerMapping->GetTRUIndexFromSTUIndex(id, idx, detector);
393  }
394  Bool_t GetTRUIndexFromOnlineIndex(const Int_t id, Int_t& idx) const {
396  }
397  Bool_t GetOnlineIndexFromTRUIndex(const Int_t id, Int_t& idx) const {
399  }
400  Bool_t GetFastORIndexFromL0Index(const Int_t iTRU, const Int_t id, Int_t idx[], const Int_t size) const {
401  return fTriggerMapping->GetFastORIndexFromL0Index(iTRU, id, idx, size);
402  }
403  Int_t GetTRUIndexFromSTUIndex(const Int_t id, Int_t detector) const {
404  return fTriggerMapping->GetTRUIndexFromSTUIndex(id, detector);
405  }
406  Int_t GetTRUIndexFromOnlineIndex(const Int_t id) const {
408  }
409  Int_t GetOnlineIndexFromTRUIndex(const Int_t id) const {
411  }
412  Int_t GetNTotalTRU() const {
413  return fTriggerMapping->GetNTRU();
414  }
415  Int_t GetTRUIndexFromOnlineHwAdd(Int_t hwAdd, Int_t ddl, Int_t sm)const{
416  return fTriggerMapping->GetTRUIndexFromOnlineHwAdd(hwAdd, ddl, sm);
417  }
418  Bool_t GetSTUIndexFromTRUIndex( const Int_t id, Int_t& idx ) const {
419  return fTriggerMapping->GetSTUIndexFromTRUIndex(id, idx );
420  }
421  Int_t GetSTUIndexFromTRUIndex( const Int_t id ) const {
423  }
424  Bool_t GetTRUFromSTU(const Int_t iTRU, const Int_t iADC, Int_t& oTRU, Int_t& oADC, Int_t detector) const {
425  return fTriggerMapping->GetTRUFromSTU(iTRU, iADC, oTRU, oADC, detector);
426  }
427  Bool_t GetSTUFromTRU(const Int_t iTRU, const Int_t iADC, Int_t& oTRU, Int_t& oADC ) const {
428  return fTriggerMapping->GetSTUFromTRU(iTRU, iADC, oTRU, oADC );
429  }
430  Bool_t GetTRUFromSTU(const Int_t iTRU, const Int_t ieta, const Int_t iphi, Int_t& oTRU, Int_t& oeta, Int_t& ophi, Int_t detector) const {
431  return fTriggerMapping->GetTRUFromSTU(iTRU, ieta, iphi, oTRU, oeta, ophi, detector) ;
432  }
433  Bool_t GetSTUFromTRU(const Int_t iTRU, const Int_t ieta, const Int_t iphi, Int_t& oTRU, Int_t& oeta, Int_t& ophi ) const {
434  return fTriggerMapping->GetSTUFromTRU(iTRU, ieta, iphi, oTRU, oeta, ophi ) ;
435  }
436  Int_t GetTriggerMappingVersion() const {
437  return fTriggerMapping->GetUniqueID();
438  }
439 
440 protected:
441 
442  void Init(void); // initializes the parameters of EMCAL
443 
445 
447 
448  TString fGeoName;
449  //Int_t *fEMCSMSystem; ///< [fEMCGeometry.fNumberOfSuperModules] geometry structure
450  Int_t fKey110DEG;
453  Int_t fNETAdiv;
454  Int_t fNPHIdiv;
457  TArrayD fPhiCentersOfSM;
459 
460  // Local Coordinates of SM
465  Int_t fNCells;
466  Int_t fNPhi;
468  Float_t fEnvelop[3];
469  Float_t fArm1EtaMin;
470  Float_t fArm1EtaMax;
471  Float_t fArm1PhiMin;
472  Float_t fArm1PhiMax;
473  Float_t fEtaMaxOfTRD1;
474  Float_t fDCALPhiMin;
475  Float_t fDCALPhiMax;
476  Float_t fEMCALPhiMax;
480  Float_t fParSM[3];
481  Float_t fPhiModuleSize;
482  Float_t fEtaModuleSize;
483  Float_t fPhiTileSize;
484  Float_t fEtaTileSize;
485  Int_t fNZ;
486  Float_t fIPDistance;
487  Float_t fLongModuleSize;
488 
489  // Geometry Parameters
490  Float_t fShellThickness;
491  Float_t fZLength;
492  Float_t fSampling;
493 
495 
496 private:
497 
499  static Bool_t fgInit;
500  static const Char_t *fgkDefaultGeometryName;
501 
503  ClassDef(AliEMCALGeometry,18) ;
505 
506 } ;
507 
508 #endif // AliEMCALGEOUTILS_H
509 
Bool_t CheckAbsCellId(Int_t absId) const
AliEMCALGeometry & operator=(const AliEMCALGeometry &rvalue)
virtual Bool_t GetCellIndexFromFastORIndex(Int_t id, Int_t idx[4]) const =0
TBrowser b
Definition: RunAnaESD.C:12
Float_t GetDCALInnerEdge(void) const
Float_t fIPDistance
Radial Distance of the inner surface of the EMCAL.
Float_t GetSteelFrontThickness() const
Bool_t IsDCALExtSM(Int_t nSupMod) const
EMCal geometry SM base, singleton.
TArrayD fPhiCentersOfSMSec
Phi of centers of section where SM lies; size is fNumberOfSuperModules/2.
TArrayD fCentersOfCellsPhiDir
Size fNPhi*fNPHIdiv (for TRD1 only) (phi or y in SM, in cm)
virtual Bool_t GetAbsFastORIndexFromPositionInEMCAL(Int_t iEta, Int_t iPhi, Int_t &id) const =0
Bool_t GetAbsFastORIndexFromPositionInTRU(const Int_t iTRU, const Int_t iEta, const Int_t iPhi, Int_t &id) const
virtual Bool_t Impact(const TParticle *particle) const
Bool_t GetAbsFastORIndexFromPHOSSubregion(const Int_t iPHOS, Int_t &id) const
Int_t GetNCells(void) const
Float_t GetLongModuleSize(void) const
Float_t fParSM[3]
SM sizes as in GEANT (TRD1)
Float_t fSampling
Sampling factor.
Float_t GetLateralSteelStrip() const
Float_t Get2Trd1Dx2() const
TArrayD GetCentersOfCellsEtaDir() const
AliEMCALEMCGeometry * fEMCGeometry
Geometry object for Electromagnetic calorimeter.
Double_t GetPhiCenterOfSMSec(Int_t nsupmod) const
Bool_t GetTRUIndexFromSTUIndex(const Int_t id, Int_t &idx, Int_t detector) const
Float_t GetEtaModuleSize() const
Int_t GetNumberOfCellsInEtaDirection(Int_t nSupMod) const
Float_t GetEtaTileSize() const
Bool_t GetTRUFromSTU(const Int_t iTRU, const Int_t ieta, const Int_t iphi, Int_t &oTRU, Int_t &oeta, Int_t &ophi, Int_t detector) const
Int_t GetAbsCellIdFromCellIndexes(Int_t nSupMod, Int_t iphi, Int_t ieta) const
Bool_t GetSTUIndexFromTRUIndex(const Int_t id, Int_t &idx) const
void ShiftOnlineToOfflineCellIndexes(Int_t sm, Int_t &iphi, Int_t &ieta) const
Int_t fNPhi
Number of Towers in the PHI direction.
Float_t GetArm1PhiMax(void) const
const Int_t * GetEMCSystem() const
TArrayD GetPhiCentersOfCells() const
Float_t GetArm1EtaMin() const
Float_t GetArm1PhiMin(void) const
Float_t fDCALPhiMin
Minimum angular position of DCAL in Phi (degrees)
Int_t fNETAdiv
Number eta division of module.
const TGeoHMatrix * GetMatrixForSuperModuleFromArray(Int_t smod) const
virtual Bool_t GetSTUFromTRU(Int_t iTRU, Int_t iADC, Int_t &oTRU, Int_t &oADC) const =0
static const Char_t * GetDefaultGeometryName()
Bool_t IsInDCAL(Double_t x, Double_t y, Double_t z) const
Int_t GetNumberOfCellsInPhiDirection(Int_t nSupMod) const
Float_t fArm1EtaMin
Minimum pseudorapidity position of EMCAL in Eta.
void SetNPhi(Int_t nphi)
void SetMisalMatrix(const TGeoHMatrix *m, Int_t smod) const
virtual Bool_t GetFastORIndexFromCellIndex(Int_t id, Int_t &idx) const =0
Int_t GetNPhiSuperModule(void) const
Int_t GetNECLayers(void) const
void EtaPhiFromIndex(Int_t absId, Double_t &eta, Double_t &phi) const
Float_t fEMCALPhiMax
Maximum angular position of EMCAL in Phi (degrees)
Float_t GetShellThickness(void) const
Float_t GetDCALInnerExtandedEta() const
Int_t GetNCellsInModule() const
Float_t GetArm1EtaMax() const
Int_t GetNETAdiv(void) const
virtual Bool_t GetPositionInEMCALFromAbsFastORIndex(Int_t id, Int_t &iEta, Int_t &iPhi) const =0
static Bool_t fgInit
Tells if geometry has been succesfully set up.
Bool_t GetTRUIndexFromOnlineIndex(const Int_t id, Int_t &idx) const
virtual void Browse(TBrowser *b)
Float_t GetDCALPhiMin() const
virtual Bool_t GetTRUIndexFromSTUIndex(Int_t id, Int_t &idx, Int_t detector) const =0
Int_t GetnSupModInDCAL() const
Int_t GetNumberOfSuperModules(void) const
Float_t fArm1EtaMax
Maximum pseudorapidity position of EMCAL in Eta.
Float_t GetEtaTileSize(void) const
Bool_t GetSTUFromTRU(const Int_t iTRU, const Int_t ieta, const Int_t iphi, Int_t &oTRU, Int_t &oeta, Int_t &ophi) const
Bool_t GetPositionInTRUFromAbsFastORIndex(const Int_t id, Int_t &iTRU, Int_t &iEta, Int_t &iPhi) const
Float_t GetTrd1AlFrontThick() const
static AliEMCALGeometry * GetInstanceFromRunNumber(Int_t runNumber, TString geoName="", const Text_t *mcname="TGeant3", const Text_t *mctitle="")
Float_t GetEnvelop(Int_t index) const
Float_t GetIPDistance() const
TArrayD GetEtaCentersOfCells() const
Float_t GetPhiTileSize(void) const
Int_t GetIHADR(void) const
Float_t GetZLength() const
Bool_t GetAbsCellIdFromEtaPhi(Double_t eta, Double_t phi, Int_t &absId) const
Bool_t SuperModuleNumberFromEtaPhi(Double_t eta, Double_t phi, Int_t &nSupMod) const
Float_t fEtaModuleSize
Eta -> Y.
Bool_t GetPositionInSMFromAbsFastORIndex(const Int_t id, Int_t &iSM, Int_t &iEta, Int_t &iPhi) const
Float_t GetTrd1BondPaperThick() const
Int_t fKey110DEG
For calculation abs cell id; 19-oct-05.
Float_t GetDeltaEta() const
Bool_t GetPhiBoundariesOfSMGap(Int_t nPhiSec, Double_t &phiMin, Double_t &phiMax) const
Float_t GetPhiGapForSuperModules(void) const
Float_t GetPassiveScintThick() const
Double_t GetPhiCenterOfSM(Int_t nsupmod) const
Int_t GetNumberOfModuleInEtaDirection(Int_t nSupMod) const
Float_t GetSteelFrontThickness(void) const
Float_t GetIPDistance(void) const
Float_t AngleFromEta(Float_t eta) const
std::vector< std::string > glob(const std::string &pat)
Int_t GetNPhi(void) const
Float_t GetDeltaPhi(void) const
Float_t GetPhiGapForSuperModules() const
Float_t GetEMCALPhiMax() const
Float_t fLongModuleSize
Size of long module.
Float_t GetEnvelop(Int_t index) const
Float_t GetPhiModuleSize(void) const
Int_t GetNumberOfSuperModules() const
Bool_t GetTRUFromSTU(const Int_t iTRU, const Int_t iADC, Int_t &oTRU, Int_t &oADC, Int_t detector) const
Int_t GetNTowers(void) const
Int_t GetNTotalTRU() const
Int_t GetKey110DEG(void) const
Float_t GetEMCALPhiMax(void) const
Bool_t GetFastORIndexFromCellIndex(const Int_t id, Int_t &idx) const
Float_t GetZLength(void) const
void GetCellPhiEtaIndexInSModule(Int_t nSupMod, Int_t nModule, Int_t nIphi, Int_t nIeta, Int_t &iphi, Int_t &ieta) const
Float_t GetPassiveScintThick(void) const
const Char_t * GetNameOfEMCALEnvelope(void) const
Float_t fShellThickness
Total thickness in (x,y) direction.
virtual Bool_t GetTRUFromSTU(Int_t iTRU, Int_t iADC, Int_t &oTRU, Int_t &oADC, Int_t detector) const =0
virtual Bool_t GetAbsFastORIndexFromPHOSSubregion(Int_t iPHOS, Int_t &id) const =0
Float_t fArm1PhiMin
Minimum angular position of EMCAL in Phi (degrees)
virtual Bool_t GetPositionInSMFromAbsFastORIndex(Int_t id, Int_t &iSM, Int_t &iEta, Int_t &iPhi) const =0
Float_t fEtaTileSize
Size of eta tile.
virtual Bool_t GetOnlineIndexFromTRUIndex(Int_t id, Int_t &idx) const =0
Double_t GetPhiCenterOfSMSec(Int_t nsupmod) const
Float_t GetTrd1Angle(void) const
Int_t GetAbsCellId(Int_t nSupMod, Int_t nModule, Int_t nIphi, Int_t nIeta) const
Bool_t RelPosCellInSModule(Int_t absId, Double_t &xr, Double_t &yr, Double_t &zr) const
virtual Bool_t GetTRUFromAbsFastORIndex(Int_t id, Int_t &iTRU, Int_t &iADC) const =0
Float_t GetEtaModuleSize(void) const
void SetNPhi(Int_t nphi)
Float_t fArm1PhiMax
Maximum angular position of EMCAL in Phi (degrees)
Float_t fPhiModuleSize
Phi -> X.
TArrayD fCentersOfCellsXDir
Size fNZ*fNETAdiv (for TRD1 only) ( x in SM, in cm)
Float_t fDCALInnerExtandedEta
DCAL inner edge in Eta (with some extension)
void PrintLocalTrd1(Int_t pri=0) const
Float_t GetShellThickness() const
void GetModuleIndexesFromCellIndexesInSModule(Int_t nSupMod, Int_t iphi, Int_t ieta, Int_t &iphim, Int_t &ietam, Int_t &nModule) const
Transition from cell indexes (ieta,iphi) to module indexes (ietam, iphim, nModule) ...
Float_t fDCALStandardPhiMax
Special edge for the case that DCAL contian extension.
void ImpactOnEmcal(TVector3 vtx, Double_t theta, Double_t phi, Int_t &absId, TVector3 &vimpact) const
Int_t GetNECLayers() const
const TGeoHMatrix * fkSModuleMatrix[AliEMCALGeoParams::fgkEMCALModules]
Orientations of EMCAL super modules.
Bool_t GetCellIndex(Int_t absId, Int_t &nSupMod, Int_t &nModule, Int_t &nIphi, Int_t &nIeta) const
Int_t fNZ
Number of Towers in the Z direction.
TList * fShishKebabTrd1Modules
List of modules.
void SetSampling(Float_t samp)
Bool_t GetPhiBoundariesOfSM(Int_t nSupMod, Double_t &phiMin, Double_t &phiMax) const
Float_t GetECScintThick() const
Bool_t GetFastORIndexFromL0Index(const Int_t iTRU, const Int_t id, Int_t idx[], const Int_t size) const
virtual Bool_t GetAbsFastORIndexFromPositionInSM(Int_t iSM, Int_t iEta, Int_t iPhi, Int_t &id) const =0
Int_t fNPHIdiv
Number phi division of module.
Definition: AliLog.h:27
Int_t GetNPHIdiv(void) const
Float_t GetECScintThick(void) const
Double_t GetPhiCenterOfSM(Int_t nsupmod) const
virtual ~AliEMCALGeometry(void)
Float_t GetArm1PhiMin() const
Float_t GetDCALPhiMax() const
Float_t GetDeltaPhi() const
Float_t GetTrd1Angle() const
virtual Bool_t IsFolder() const
AliEMCALTriggerMapping * GetTriggerMapping() const
Int_t GetSMType(Int_t nSupMod) const
Float_t GetPhiSuperModule(void) const
Float_t fEtaMaxOfTRD1
Max eta in case of TRD1 geometry (see AliEMCALShishKebabTrd1Module)
Float_t GetTrd1AlFrontThick() const
Int_t GetNZ(void) const
void GetGlobal(const Double_t *loc, Double_t *glob, int ind) const
Float_t GetArm1EtaMax(void) const
Int_t GetNCellsInSupMod(void) const
Bool_t IsInEMCAL(Double_t x, Double_t y, Double_t z) const
Trigger mapping methods, base class.
Float_t GetPhiModuleSize() const
Float_t GetLateralSteelStrip(void) const
Int_t GetTRUIndexFromOnlineHwAdd(Int_t hwAdd, Int_t ddl, Int_t sm) const
Int_t GetSuperModuleNumber(Int_t absId) const
Float_t fZLength
Total length in z direction.
void SetSampling(Float_t samp)
Int_t GetSTUIndexFromTRUIndex(const Int_t id) const
virtual void GetNTRU(Int_t &n)
Float_t GetArm1EtaMin(void) const
Float_t GetTrd1BondPaperThick() const
const TGeoHMatrix * GetMatrixForSuperModule(Int_t smod) const
Int_t GetTRUIndexFromOnlineIndex(const Int_t id) const
Int_t GetnSupModInDCAL(void) const
Float_t GetSuperModulesPar(Int_t ipar) const
static AliEMCALGeometry * fgGeom
Pointer to the unique instance of the singleton.
Bool_t GetAbsFastORIndexFromPositionInSM(const Int_t iSM, const Int_t iEta, const Int_t iPhi, Int_t &id) const
virtual Bool_t GetPositionInTRUFromAbsFastORIndex(Int_t id, Int_t &iTRU, Int_t &iEta, Int_t &iPhi) const =0
Int_t GetTriggerMappingVersion() const
virtual Int_t GetTRUIndexFromOnlineHwAdd(Int_t hwAdd, Int_t ddl, Int_t sm) const =0
Float_t GetFrontSteelStrip(void) const
TArrayD GetCentersOfCellsXDir() const
TArrayD fPhiCentersOfCells
[fNPhi*fNPHIdiv] from center of SM (-10. < phi < +10.)
Float_t GetDeltaEta(void) const
Float_t GetSampling(void) const
TString fGeoName
Geometry name string.
void RecalculateTowerPosition(Float_t drow, Float_t dcol, const Int_t sm, const Float_t depth, const Float_t misaligTransShifts[15], const Float_t misaligRotShifts[15], Float_t global[3]) const
Int_t GetNEta(void) const
void Init(void)
Int_t GetNPhiSuperModule() const
virtual Bool_t GetAbsFastORIndexFromTRU(Int_t iTRU, Int_t iADC, Int_t &id) const =0
virtual Bool_t GetFastORIndexFromL0Index(Int_t iTRU, Int_t id, Int_t idx[], Int_t size) const =0
AliEMCALEMCGeometry * GetEMCGeometry() const
TArrayD fCentersOfCellsEtaDir
Size fNZ*fNETAdiv (for TRD1 only) (eta or z in SM, in cm)
Int_t fnSupModInDCAL
For calculation abs cell id; 06-nov-12.
static const int fgkEMCALModules
Number of modules, 12 for EMCal + 8 for DCAL.
Bool_t GetCellIndexFromFastORIndex(const Int_t id, Int_t idx[4]) const
Bool_t GetPhiBoundariesOfSM(Int_t nSupMod, Double_t &phiMin, Double_t &phiMax) const
Float_t GetDCALInnerEdge() const
Float_t GetDCALPhiMax(void) const
Float_t GetDCALPhiMin(void) const
AliEMCALShishKebabTrd1Module * GetShishKebabModule(Int_t neta) const
Int_t GetNCellsInSupMod() const
Int_t GetNCellsInModule(void) const
const Char_t * GetNameOfEMCALEnvelope() const
Float_t GetFrontSteelStrip() const
Float_t Get2Trd1Dx2(void) const
static Int_t runNumber
Definition: pdc06_config.C:126
Bool_t GetAbsFastORIndexFromTRU(const Int_t iTRU, const Int_t iADC, Int_t &id) const
Float_t GetDCALInnerExtandedEta(void) const
Int_t GetKey110DEG() const
Float_t GetArm1PhiMax() const
TArrayD fEtaCentersOfCells
[fNZ*fNETAdiv*fNPhi*fNPHIdiv], positive direction (eta>0); eta depend from phi position; ...
virtual Bool_t GetTRUIndexFromOnlineIndex(Int_t id, Int_t &idx) const =0
Int_t GetTRUIndexFromSTUIndex(const Int_t id, Int_t detector) const
Float_t GetECPbRadThick(void) const
Float_t GetPhiSuperModule() const
Bool_t GetAbsFastORIndexFromPositionInEMCAL(const Int_t iEta, const Int_t iPhi, Int_t &id) const
Bool_t IsDCALSM(Int_t nSupMod) const
Float_t GetSuperModulesPar(Int_t ipar) const
void SetNZ(Int_t nz)
Float_t GetECPbRadThick() const
TArrayD fPhiCentersOfSM
Phi of centers of SM; size is fNumberOfSuperModules/2.
Float_t fDCALPhiMax
Maximum angular position of DCAL in Phi (degrees)
TArrayD GetCentersOfCellsPhiDir() const
AliEMCALTriggerMapping * fTriggerMapping
Trigger mapping.
Int_t GetNumberOfModuleInPhiDirection(Int_t nSupMod) const
static AliEMCALGeometry * GetInstance()
Int_t * GetEMCSystem() const
Float_t GetLongModuleSize() const
static const Char_t * fgkDefaultGeometryName
Default name of geometry.
virtual Bool_t GetAbsFastORIndexFromPositionInTRU(Int_t iTRU, Int_t iEta, Int_t iPhi, Int_t &id) const =0
static const Char_t * fgkDefaultGeometryName
Default name of geometry.
Bool_t GetPositionInEMCALFromAbsFastORIndex(const Int_t id, Int_t &iEta, Int_t &iPhi) const
Float_t ZFromEtaR(Float_t r, Float_t eta) const
TEveGeoShape * geom
Definition: tpc_tracks.C:10
virtual Bool_t GetSTUIndexFromTRUIndex(Int_t id, Int_t &idx) const =0
Int_t GetILOSS(void) const
static Bool_t IsInitialized(void)
Bool_t GetTRUFromAbsFastORIndex(const Int_t id, Int_t &iTRU, Int_t &iADC) const
void ShiftOfflineToOnlineCellIndexes(Int_t sm, Int_t &iphi, Int_t &ieta) const
Float_t GetSampling() const
static Bool_t fgInit
Tells if geometry has been succesfully set up.
Float_t fPhiTileSize
Size of phi tile.
Float_t GetPhiTileSize() const
Float_t fEnvelop[3]
The GEANT TUB for the detector.
TList * GetShishKebabTrd1Modules() const
const TGeoHMatrix * GetMatrixForSuperModuleFromGeoManager(Int_t smod) const
void PrintCellIndexes(Int_t absId=0, int pri=0, const char *tit="") const
EMCal geometry, singleton.
Int_t fNCells
Number of cells in calo.
Bool_t GetPhiBoundariesOfSMGap(Int_t nPhiSec, Double_t &phiMin, Double_t &phiMax) const
Int_t IsInEMCALOrDCAL(Double_t x, Double_t y, Double_t z) const
Int_t GetOnlineIndexFromTRUIndex(const Int_t id) const
Main class for TRD1 geometry of Shish-Kebab case.
Int_t fNCellsInSupMod
Number cell in super module.
void GetModulePhiEtaIndexInSModule(Int_t nSupMod, Int_t nModule, Int_t &iphim, Int_t &ietam) const
Bool_t GetOnlineIndexFromTRUIndex(const Int_t id, Int_t &idx) const
Bool_t GetSTUFromTRU(const Int_t iTRU, const Int_t iADC, Int_t &oTRU, Int_t &oADC) const
Int_t fNCellsInModule
Number cell in module.
TArrayD fPhiBoundariesOfSM
Phi boundaries of SM in rad; size is fNumberOfSuperModules;.