ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/
/* $Id$ */
/** 
 * @file    AliFMDGeometry.cxx
 * @author  Christian Holm Christensen <cholm@nbi.dk>
 * @date    Mon Mar 27 12:40:37 2006
 * @brief   Geometry mananger for the FMD
 */
//____________________________________________________________________
//                                                                          
// Forward Multiplicity Detector based on Silicon wafers. 
//
// This class is a singleton that handles the geometry parameters of
// the FMD detectors.  
//                                                       
// The actual code is done by various separate classes.   Below is
// diagram showing the relationship between the various FMD classes
// that handles the geometry 
//
//                               +------------+ 
//                            +- | AliFMDRing |
// 			   2  |  +------------+
//      +----------------+<>--+        |				
//      | AliFMDGeometry |             ^                       	
//      +----------------+<>--+        V 1..2                     	
//           		   3  | +----------------+ 		
//            		      +-| AliFMDDetector | 		
//             		        +----------------+		
//                                     ^
//                                     |
//                       +-------------+-------------+
//                       |             |             |	      
//                  +---------+   +---------+   +---------+
//                  | AliFMD1 |   | AliFMD2 |   | AliFMD3 |
//                  +---------+   +---------+   +---------+
//      
//
// *  AliFMDRing 
//    This class contains all stuff needed to do with a ring.  It's
//    used by the AliFMDDetector objects to instantise inner and
//    outer rings.  The AliFMDRing objects are shared by the
//    AliFMDDetector objects, and owned by the AliFMDv1 object. 
//
// *  AliFMD1, AliFMD2, and AliFMD3 
//    These are specialisation of AliFMDDetector, that contains the
//    particularities of each of the sub-detector system.  It is
//    envisioned that the classes should also define the support
//    volumes and material for each of the detectors.                          
//                                                                          
//
#include "AliFMDGeometry.h"	// ALIFMDGEOMETRY_H
#include "AliFMDRing.h"		// ALIFMDRING_H
#include "AliFMD1.h"		// ALIFMD1_H
#include "AliFMD2.h"		// ALIFMD2_H
#include "AliFMD3.h"		// ALIFMD2_H
#include "AliRecPoint.h"	// ALIRECPOINT_H
#include "AliFMDDebug.h"		   // ALILOG_H
#include <TVector3.h>           // ROOT_TVector3
// #include <TMatrix.h>            // ROOT_TMatrix
// #include <TParticle.h>          // ROOT_TParticle
#include <Riostream.h>
#include "AliFMDGeometryBuilder.h"
// #include <TArrayI.h>
#include <TGeoManager.h>
#include <TGeoVolume.h>
#include <TGeoNode.h>
#include <TMath.h>
static Int_t FindNodeDepth(const char* name, const char* volname);


//====================================================================
ClassImp(AliFMDGeometry)
#if 0
  ; // This is here to keep Emacs for indenting the next line
#endif

//____________________________________________________________________
AliFMDGeometry* AliFMDGeometry::fgInstance = 0;

//____________________________________________________________________
AliFMDGeometry* 
AliFMDGeometry::Instance() 
{
  // 
  // singleton access 
  //
  // Return:
  //    Singleton 
  //
  if (!fgInstance) fgInstance = new AliFMDGeometry("FMD");
  return fgInstance;
}

//____________________________________________________________________
AliFMDGeometry::AliFMDGeometry() 
  : AliGeometry(),
    fIsInitialized(kFALSE), 
    fInner(0),
    fOuter(0),
    fFMD1(0),
    fFMD2(0),
    fFMD3(0),
    fUseFMD1(kTRUE),
    fUseFMD2(kTRUE),
    fUseFMD3(kTRUE),
    fIsInitTrans(kFALSE),
    fBuilder(0),
    fDetectorOff(0),
    fModuleOff(0),  
    fRingOff(0),
    fSectorOff(0),
    fActive(2),
    fDetailed(kTRUE),       
    fUseAssembly(kTRUE)
{
  // PROTECTED
  // 
  // CTOR 
  //
}

//____________________________________________________________________
AliFMDGeometry::AliFMDGeometry(const char* ) 
  : AliGeometry("FMD", "Forward multiplicity"), 
    fIsInitialized(kFALSE), 
    fInner(0),
    fOuter(0),
    fFMD1(0),
    fFMD2(0),
    fFMD3(0),
    fUseFMD1(kTRUE),
    fUseFMD2(kTRUE),
    fUseFMD3(kTRUE),
    fIsInitTrans(kFALSE),
    fBuilder(0),
    fDetectorOff(0),
    fModuleOff(0),  
    fRingOff(0),
    fSectorOff(0),
    fActive(2),
    fDetailed(kTRUE),       
    fUseAssembly(kTRUE)
{
  // PROTECTED
  // 
  // CTOR 
  // 
  // Parameters:
  //    name Not used
  //
  fInner = new AliFMDRing('I');
  fOuter = new AliFMDRing('O');
  fFMD1  = new AliFMD1(fInner);
  fFMD2  = new AliFMD2(fInner, fOuter);
  fFMD3  = new AliFMD3(fInner, fOuter);
  fIsInitialized = kFALSE;
  fActive.Reset(-1);
}

//____________________________________________________________________
AliFMDGeometry::AliFMDGeometry(const AliFMDGeometry& other) 
  : AliGeometry(other),
    fIsInitialized(other.fIsInitialized),
    fInner(other.fInner), 
    fOuter(other.fOuter), 
    fFMD1(other.fFMD1), 
    fFMD2(other.fFMD2), 
    fFMD3(other.fFMD3), 
    fUseFMD1(other.fUseFMD1), 
    fUseFMD2(other.fUseFMD2), 
    fUseFMD3(other.fUseFMD3), 
    fIsInitTrans(other.fIsInitTrans),
    fBuilder(other.fBuilder),
    fDetectorOff(other.fDetectorOff),
    fModuleOff(other.fModuleOff),  
    fRingOff(other.fRingOff),
    fSectorOff(other.fSectorOff),
    fActive(other.fActive),
    fDetailed(other.fDetailed),
    fUseAssembly(other.fUseAssembly)
{
  // PROTECTED
  // 
  // Copy CTOR
  // 
  // Parameters:
  //    other To copy from  
  //
}



//____________________________________________________________________
AliFMDGeometry&
AliFMDGeometry::operator=(const AliFMDGeometry& other) 
{
  // PROTECTED
  // 
  // Assignment operator 
  // 
  // Parameters:
  //    other To assig from
  // Return:
  //    reference to this.  
  //
  if (&other == this) return *this; 
  fUseFMD1		= other.fUseFMD1; 
  fUseFMD2		= other.fUseFMD2; 
  fUseFMD3		= other.fUseFMD3; 
  fFMD1			= other.fFMD1; 
  fFMD2			= other.fFMD2; 
  fFMD3			= other.fFMD3; 
  fInner		= other.fInner; 
  fOuter		= other.fOuter; 
  fIsInitialized	= other.fIsInitialized;
  return *this;
}

//____________________________________________________________________
void
AliFMDGeometry::Init()
{
  // 
  // Initialize the the singleton if not done so already 
  //
  if (fIsInitialized) return;
  fInner->Init();
  fOuter->Init();
  fFMD1->Init();
  fFMD2->Init();
  fFMD3->Init();
}

//____________________________________________________________________
void
AliFMDGeometry::InitTransformations(Bool_t force)
{
  // 
  // Find all local <-> global transforms 
  //
  if (force) fIsInitTrans = kFALSE;
  if (fIsInitTrans) return; 
  if (!gGeoManager) {
    AliError("No TGeoManager defined");
    return;
  }
  AliFMDDebug(1, ("Initialising transforms for FMD geometry"));
  if (fFMD1) fFMD1->InitTransformations();
  if (fFMD2) fFMD2->InitTransformations();
  if (fFMD3) fFMD3->InitTransformations();
  fIsInitTrans = kTRUE;
}

//____________________________________________________________________
void
AliFMDGeometry::Build()
{
  // 
  // Make the geometry.  This delegates to AliFMDGeometryBuilder 
  //
  if (!fBuilder) fBuilder = new AliFMDGeometryBuilder(fDetailed);
  fBuilder->SetDetailed(fDetailed);
  fBuilder->UseAssembly(fUseAssembly);
  fBuilder->Exec();
}

//____________________________________________________________________
void
AliFMDGeometry::SetActive(Int_t* active, Int_t n) 
{
  // 
  // Set active volumes 
  // 
  // Parameters:
  //    active Active volume id array 
  //    n elements of @a active 
  //
  fActive.Set(n);
  for (Int_t i = 0; i < n; i++) { 
    AliFMDDebug(1, ("Active vol id # %d: %d", i, active[i]));
    fActive[i] = active[i];
  }
}

//____________________________________________________________________
void
AliFMDGeometry::AddActive(Int_t active)
{
  //
  // Add an active volume 
  // 
  // Parameters:
  //    id Register volume @a id to be active 
  //
  // 
  Int_t n = fActive.fN;
  fActive.Set(n+1);
  fActive[n] = active;
}

//____________________________________________________________________
Bool_t
AliFMDGeometry::IsActive(Int_t vol) const
{
  // 
  // Check if volume @a vol is marked as active 
  // 
  // Parameters:
  //    vol Volume ID
  // Return:
  //     @c true if @a vol is declared active 
  //
  for (Int_t i = 0; i < fActive.fN; i++) 
    if (fActive[i] == vol) return kTRUE;
  return kFALSE;
}
  
//____________________________________________________________________
AliFMDDetector*
AliFMDGeometry::GetDetector(Int_t i) const
{
  // 
  // Get description of a sub-detector
  // 
  // Parameters:
  //    i Sub-detector #
  // Return:
  //    Description of sub-detector, or 0 
  //
  switch (i) {
  case 1: return fUseFMD1 ? static_cast<AliFMDDetector*>(fFMD1) : 0;
  case 2: return fUseFMD2 ? static_cast<AliFMDDetector*>(fFMD2) : 0;
  case 3: return fUseFMD3 ? static_cast<AliFMDDetector*>(fFMD3) : 0;
  }
  return 0;
}

//____________________________________________________________________
AliFMDRing*
AliFMDGeometry::GetRing(Char_t i) const
{
  // 
  // Get description of a ring, i should be one of 'I' or 'O' (case
  // insensitive).  If an invalid parameter is passed, 0 (NULL) is
  // returned.
  // 
  // Parameters:
  //    i Ring id
  // Return:
  //    Description of ring, or 0 
  //
  switch (i) {
  case 'I':
  case 'i': return fInner;
  case 'O':
  case 'o': return fOuter;
  }
  return 0;
}

//____________________________________________________________________
void
AliFMDGeometry::Enable(Int_t i)
{
  // 
  // Enable the ith detector
  // 
  // Parameters:
  //    i IF true, enable sub-detector @a i 
  //
  switch (i) {
  case 1: fUseFMD1 = kTRUE; break;
  case 2: fUseFMD2 = kTRUE; break;
  case 3: fUseFMD3 = kTRUE; break;
  }
}

//____________________________________________________________________
void
AliFMDGeometry::Disable(Int_t i)
{
  // 
  // Disable the ith detector
  // 
  // Parameters:
  //    i IF true, disable sub-detector @a i 
  //
  switch (i) {
  case 1: fUseFMD1 = kFALSE; break;
  case 2: fUseFMD2 = kFALSE; break;
  case 3: fUseFMD3 = kFALSE; break;
  }
}

//____________________________________________________________________
void
AliFMDGeometry::Detector2XYZ(UShort_t  detector, 
			     Char_t    ring, 
			     UShort_t  sector, 
			     UShort_t  strip, 
			     Double_t& x, 
			     Double_t& y, 
			     Double_t& z) const
{
  // 
  // Translate detector coordinates (detector, ring, sector, strip)
  // to spatial coordinates (x, y, z) in the master reference frame
  // of ALICE.  The member function uses the transformations
  // previously obtained from the TGeoManager.
  // 
  // Parameters:
  //    detector Detector number
  //    ring     Ring id
  //    sector   Sector number
  //    strip    Strip number
  //    x        On return, X coordinate 
  //    y        On return, Y coordinate 
  //    z        On return, Z coordinate  
  //
  AliFMDDetector* det = GetDetector(detector);
  if (!det) { 
    AliWarning(Form("Unknown detector %d", detector));
    return;
  }
  det->Detector2XYZ(ring, sector, strip, x, y, z);
}

//____________________________________________________________________
Bool_t
AliFMDGeometry::XYZ2Detector(Double_t  x, 
			     Double_t  y, 
			     Double_t  z,
			     UShort_t& detector, 
			     Char_t&   ring, 
			     UShort_t& sector, 
			     UShort_t& strip) const
{
  // 
  // Translate spatial coordinates (x,y,z) in the master reference
  // frame of ALICE to the detector coordinates (detector, ring,
  // sector, strip).  Note, that if this method is to be used in
  // reconstruction or the like, then the input z-coordinate should
  //  be corrected for the events interactions points z-coordinate,
  // like  
  // @code 
  // geom->XYZ2Detector(x,y,z-ipz,d,r,s,t);
  // @endcode
  // 
  // Parameters:
  //    x        X coordinate
  //    y 	      Y coordinate
  //    z 	      Z coordinate
  //    detector On return, Detector number
  //    ring     On return, Ring id		   
  //    sector   On return, Sector number	   
  //    strip    On return, Strip number	   
  // Return:
  //    @c  false of (@a x, @a y, @a z) is not within this
  // detector.  
  //
  AliFMDDetector* det = 0;
  detector = 0;
  for (int i = 1; i <= 3; i++) {
    det = GetDetector(i);
    if (!det) continue;
    if (det->XYZ2Detector(x, y, z, ring, sector, strip)) {
      detector = det->GetId();
      return kTRUE;
    }
  }
  return kFALSE;
}

//____________________________________________________________________
Bool_t
AliFMDGeometry::XYZ2REtaPhiTheta(Double_t  x,   Double_t y, 
				 Double_t  z, 
				 Double_t& r,   Double_t& eta, 
				 Double_t& phi, Double_t& theta)
{
  
  // 
  // Service function to convert Cartisean XYZ to r, eta, phi, and theta.   
  //
  // Note, that the z input should be corrected for the vertex location 
  // if needed.
  // 
  // Parameters:
  //    x      Cartisean X coordinate
  //    y      Cartisean Y coordinate 
  //    z      Cartisean Z coordinate 
  //    r      On return, the radius
  //    eta    On return, the pseudo-rapidity
  //    phi    On return, the azimuthal angle
  //    theta  On return, the polar angle;
  //
  // Return:
  //    kTRUE on success, kFALSE in case of problems
  //     
  if (x == 0 && y == 0 && z == 0) return kFALSE;
  
  // Correct for vertex offset. 
  phi   =  TMath::ATan2(y, x);
  r     =  TMath::Sqrt(y * y + x * x);
  theta =  TMath::ATan2(r, z);
  eta   = -TMath::Log(TMath::Tan(theta / 2));

  return kTRUE;
}


//____________________________________________________________________
void
AliFMDGeometry::GetGlobal(const AliRecPoint* p, 
			  TVector3& pos, 
			  TMatrixF& /* mat */) const 
{
  // 
  // Get global coordinates cooresponding to a rec point. 
  // 
  // Parameters:
  //    p   Reconstructed point.
  //    pos On return, the position
  //    mat On return, the material at @a post 
  //
  GetGlobal(p, pos);
}

//____________________________________________________________________
void
AliFMDGeometry::GetGlobal(const AliRecPoint* p, TVector3& pos) const 
{
  // 
  // Get global coordinates cooresponding to a rec point. 
  // 
  // Parameters:
  //    p   Reconstructed point.
  //    pos On return, the position 
  //
  // FIXME: Implement this function to work with outer rings too. 
  Double_t x, y, z;
  TVector3 local;
  p->GetLocalPosition(local);
  UShort_t detector = UShort_t(local.X());
  UShort_t sector   = UShort_t(local.Y());
  UShort_t strip    = UShort_t(local.Z());
  Detector2XYZ(detector, 'I', sector, strip, x, y, z);
  pos.SetXYZ(x, y, z);
}

//____________________________________________________________________
Bool_t
AliFMDGeometry::Impact(const TParticle* /* particle */) const 
{ 
  // 
  // Check if particle will hit an active detector element.  
  // 
  // @todo implement this function 
  // 
  // Parameters:
  //    particle Track 
  // Return:
  //    @c true if @a particle will hit this detector 
  //
  return kFALSE; 
}

//____________________________________________________________________	
void  
AliFMDGeometry::SetAlignableVolumes() const
{
  // 
  // Declare alignable volumes 
  //
  for (Int_t d = 1; d <= 3; d++) 
    if (GetDetector(d)) GetDetector(d)->SetAlignableVolumes();
}


//____________________________________________________________________	
void  
AliFMDGeometry::ExtractGeomInfo()
{
  // Check the volume depth of some nodes, get the active volume
  // numbers, and so forth. 
  // 
  // TODO: Here, we should actually also get the parameters of the
  // shapes, like the verticies of the polygon shape that makes up the
  // silicon sensor, the strip pitch, the ring radii, the z-positions,
  // and so on - that is, all the geometric information we need for
  // futher processing, such as simulation, digitization,
  // reconstruction, etc. 
  Int_t detectorDepth = FindNodeDepth("F1MT_1", "ALIC");
  Int_t ringDepth     = FindNodeDepth(Form("FITV_%d", int('I')), "ALIC");
  Int_t moduleDepth   = FindNodeDepth("FIBH_0", "ALIC");
  Int_t sectorDepth   = FindNodeDepth("FISC_1", "ALIC");
  fActive.Set(0);
  fActive.Reset(-1);
  AliFMDDebug(1, ("Geometry depths:\n"
		   "   Sector:     %d\n"
		   "   Module:     %d\n"
		   "   Ring:       %d\n"
		   "   Detector:   %d", 
		   sectorDepth, moduleDepth, ringDepth, detectorDepth));
  if (sectorDepth < 0 && moduleDepth < 0) {
    fDetailed    = kFALSE;
    fSectorOff   = -1;
    fModuleOff   = -1;
    fRingOff     = 0;
    fDetectorOff = (ringDepth - detectorDepth);
    TGeoVolume* actiVol = gGeoManager->GetVolume("FIAC");
    TGeoVolume* actoVol = gGeoManager->GetVolume("FOAC");
    if (actiVol) AddActive(actiVol->GetNumber());
    if (actiVol) AddActive(actoVol->GetNumber());
  }
  else if (sectorDepth < 0) {
    fDetailed    = kFALSE;
    fSectorOff   = -1;
    fModuleOff   = 1;
    fRingOff     = (moduleDepth - ringDepth) + 1;
    fDetectorOff = (moduleDepth - detectorDepth) + 1;
    TGeoVolume* modiVol = gGeoManager->GetVolume("FIMO");
    TGeoVolume* modoVol = gGeoManager->GetVolume("FOMO");
    if (modiVol) AddActive(modiVol->GetNumber());
    if (modoVol) AddActive(modoVol->GetNumber());
  }
  else {
    Int_t stripDepth    = FindNodeDepth("FIST_1", "ALIC");
    fDetailed    = kTRUE;
    fSectorOff   = (stripDepth - sectorDepth);
    fModuleOff   = (moduleDepth >= 0 ? (stripDepth - moduleDepth) : -1);
    fRingOff     = (stripDepth - ringDepth);
    fDetectorOff = (stripDepth - detectorDepth );
    TGeoVolume* striVol = gGeoManager->GetVolume("FIST");
    TGeoVolume* stroVol = gGeoManager->GetVolume("FOST");
    if (striVol) AddActive(striVol->GetNumber());
    if (stroVol) AddActive(stroVol->GetNumber());
  }    
  AliFMDDebug(1, ("Geometry offsets:\n"
		   "   Sector:     %d\n"
		   "   Module:     %d\n"
		   "   Ring:       %d\n"
		   "   Detector:   %d", 
		   fSectorOff, fModuleOff, fRingOff, fDetectorOff));
}

#if 0  
//____________________________________________________________________	
static Int_t 
CheckNodes(TGeoNode* node, const char* name, Int_t& lvl)
{
  // If there's no node here. 
  if (!node) return -1;
  // Check if it this one 
  TString sname(name);
  if (sname == node->GetName()) return lvl;

  // Check if the node is an immediate daugther 
  TObjArray* nodes = node->GetNodes();
  if (!nodes) return -1;
  // Increase the level, and search immediate sub nodes. 
  lvl++;
  TGeoNode*  found = static_cast<TGeoNode*>(nodes->FindObject(name));
  if (found) return lvl;

  // Check the sub node, if any of their sub-nodes match.
  for (Int_t i = 0; i < nodes->GetEntries(); i++) {
    TGeoNode* sub = static_cast<TGeoNode*>(nodes->At(i));
    if (!sub) continue;
    // Recurive check 
    if (CheckNodes(sub, name, lvl) >= 0) return lvl;
  }
  // If not found, decrease the level 
  lvl--;
  return -1;
}
#endif

//____________________________________________________________________	
Int_t 
FindNodeDepth(const char* name, const char* volname) 
{
  // Find the depth of a node 
  TGeoVolume* vol  = gGeoManager->GetVolume(volname);
  if (!vol) {
    std::cerr << "No top volume defined" << std::endl;
    return -1;
  }

  TGeoIterator next(vol);
  TGeoNode*    node = 0;
  TString      sName(name);
  while ((node = next())) { 
    if (sName == node->GetName()) { 
      //std::cout << "Found node " << node->GetName() << " at level " 
      //		<< next.GetLevel() << std::endl;
      return next.GetLevel();
    }
  }
  return -1;
#if 0
  TObjArray* nodes = vol->GetNodes();
  if (!nodes) { 
    std::cerr << "No nodes in top volume" << std::endl;
    return -1;
  }
  TIter next(nodes);
  TGeoNode* node = 0;
  Int_t lvl = 0;
  while ((node = static_cast<TGeoNode*>(next()))) 
    if (CheckNodes(node, name, lvl) >= 0) return lvl;
  return -1;
#endif
}

//____________________________________________________________________
//
// EOF
//
 AliFMDGeometry.cxx:1
 AliFMDGeometry.cxx:2
 AliFMDGeometry.cxx:3
 AliFMDGeometry.cxx:4
 AliFMDGeometry.cxx:5
 AliFMDGeometry.cxx:6
 AliFMDGeometry.cxx:7
 AliFMDGeometry.cxx:8
 AliFMDGeometry.cxx:9
 AliFMDGeometry.cxx:10
 AliFMDGeometry.cxx:11
 AliFMDGeometry.cxx:12
 AliFMDGeometry.cxx:13
 AliFMDGeometry.cxx:14
 AliFMDGeometry.cxx:15
 AliFMDGeometry.cxx:16
 AliFMDGeometry.cxx:17
 AliFMDGeometry.cxx:18
 AliFMDGeometry.cxx:19
 AliFMDGeometry.cxx:20
 AliFMDGeometry.cxx:21
 AliFMDGeometry.cxx:22
 AliFMDGeometry.cxx:23
 AliFMDGeometry.cxx:24
 AliFMDGeometry.cxx:25
 AliFMDGeometry.cxx:26
 AliFMDGeometry.cxx:27
 AliFMDGeometry.cxx:28
 AliFMDGeometry.cxx:29
 AliFMDGeometry.cxx:30
 AliFMDGeometry.cxx:31
 AliFMDGeometry.cxx:32
 AliFMDGeometry.cxx:33
 AliFMDGeometry.cxx:34
 AliFMDGeometry.cxx:35
 AliFMDGeometry.cxx:36
 AliFMDGeometry.cxx:37
 AliFMDGeometry.cxx:38
 AliFMDGeometry.cxx:39
 AliFMDGeometry.cxx:40
 AliFMDGeometry.cxx:41
 AliFMDGeometry.cxx:42
 AliFMDGeometry.cxx:43
 AliFMDGeometry.cxx:44
 AliFMDGeometry.cxx:45
 AliFMDGeometry.cxx:46
 AliFMDGeometry.cxx:47
 AliFMDGeometry.cxx:48
 AliFMDGeometry.cxx:49
 AliFMDGeometry.cxx:50
 AliFMDGeometry.cxx:51
 AliFMDGeometry.cxx:52
 AliFMDGeometry.cxx:53
 AliFMDGeometry.cxx:54
 AliFMDGeometry.cxx:55
 AliFMDGeometry.cxx:56
 AliFMDGeometry.cxx:57
 AliFMDGeometry.cxx:58
 AliFMDGeometry.cxx:59
 AliFMDGeometry.cxx:60
 AliFMDGeometry.cxx:61
 AliFMDGeometry.cxx:62
 AliFMDGeometry.cxx:63
 AliFMDGeometry.cxx:64
 AliFMDGeometry.cxx:65
 AliFMDGeometry.cxx:66
 AliFMDGeometry.cxx:67
 AliFMDGeometry.cxx:68
 AliFMDGeometry.cxx:69
 AliFMDGeometry.cxx:70
 AliFMDGeometry.cxx:71
 AliFMDGeometry.cxx:72
 AliFMDGeometry.cxx:73
 AliFMDGeometry.cxx:74
 AliFMDGeometry.cxx:75
 AliFMDGeometry.cxx:76
 AliFMDGeometry.cxx:77
 AliFMDGeometry.cxx:78
 AliFMDGeometry.cxx:79
 AliFMDGeometry.cxx:80
 AliFMDGeometry.cxx:81
 AliFMDGeometry.cxx:82
 AliFMDGeometry.cxx:83
 AliFMDGeometry.cxx:84
 AliFMDGeometry.cxx:85
 AliFMDGeometry.cxx:86
 AliFMDGeometry.cxx:87
 AliFMDGeometry.cxx:88
 AliFMDGeometry.cxx:89
 AliFMDGeometry.cxx:90
 AliFMDGeometry.cxx:91
 AliFMDGeometry.cxx:92
 AliFMDGeometry.cxx:93
 AliFMDGeometry.cxx:94
 AliFMDGeometry.cxx:95
 AliFMDGeometry.cxx:96
 AliFMDGeometry.cxx:97
 AliFMDGeometry.cxx:98
 AliFMDGeometry.cxx:99
 AliFMDGeometry.cxx:100
 AliFMDGeometry.cxx:101
 AliFMDGeometry.cxx:102
 AliFMDGeometry.cxx:103
 AliFMDGeometry.cxx:104
 AliFMDGeometry.cxx:105
 AliFMDGeometry.cxx:106
 AliFMDGeometry.cxx:107
 AliFMDGeometry.cxx:108
 AliFMDGeometry.cxx:109
 AliFMDGeometry.cxx:110
 AliFMDGeometry.cxx:111
 AliFMDGeometry.cxx:112
 AliFMDGeometry.cxx:113
 AliFMDGeometry.cxx:114
 AliFMDGeometry.cxx:115
 AliFMDGeometry.cxx:116
 AliFMDGeometry.cxx:117
 AliFMDGeometry.cxx:118
 AliFMDGeometry.cxx:119
 AliFMDGeometry.cxx:120
 AliFMDGeometry.cxx:121
 AliFMDGeometry.cxx:122
 AliFMDGeometry.cxx:123
 AliFMDGeometry.cxx:124
 AliFMDGeometry.cxx:125
 AliFMDGeometry.cxx:126
 AliFMDGeometry.cxx:127
 AliFMDGeometry.cxx:128
 AliFMDGeometry.cxx:129
 AliFMDGeometry.cxx:130
 AliFMDGeometry.cxx:131
 AliFMDGeometry.cxx:132
 AliFMDGeometry.cxx:133
 AliFMDGeometry.cxx:134
 AliFMDGeometry.cxx:135
 AliFMDGeometry.cxx:136
 AliFMDGeometry.cxx:137
 AliFMDGeometry.cxx:138
 AliFMDGeometry.cxx:139
 AliFMDGeometry.cxx:140
 AliFMDGeometry.cxx:141
 AliFMDGeometry.cxx:142
 AliFMDGeometry.cxx:143
 AliFMDGeometry.cxx:144
 AliFMDGeometry.cxx:145
 AliFMDGeometry.cxx:146
 AliFMDGeometry.cxx:147
 AliFMDGeometry.cxx:148
 AliFMDGeometry.cxx:149
 AliFMDGeometry.cxx:150
 AliFMDGeometry.cxx:151
 AliFMDGeometry.cxx:152
 AliFMDGeometry.cxx:153
 AliFMDGeometry.cxx:154
 AliFMDGeometry.cxx:155
 AliFMDGeometry.cxx:156
 AliFMDGeometry.cxx:157
 AliFMDGeometry.cxx:158
 AliFMDGeometry.cxx:159
 AliFMDGeometry.cxx:160
 AliFMDGeometry.cxx:161
 AliFMDGeometry.cxx:162
 AliFMDGeometry.cxx:163
 AliFMDGeometry.cxx:164
 AliFMDGeometry.cxx:165
 AliFMDGeometry.cxx:166
 AliFMDGeometry.cxx:167
 AliFMDGeometry.cxx:168
 AliFMDGeometry.cxx:169
 AliFMDGeometry.cxx:170
 AliFMDGeometry.cxx:171
 AliFMDGeometry.cxx:172
 AliFMDGeometry.cxx:173
 AliFMDGeometry.cxx:174
 AliFMDGeometry.cxx:175
 AliFMDGeometry.cxx:176
 AliFMDGeometry.cxx:177
 AliFMDGeometry.cxx:178
 AliFMDGeometry.cxx:179
 AliFMDGeometry.cxx:180
 AliFMDGeometry.cxx:181
 AliFMDGeometry.cxx:182
 AliFMDGeometry.cxx:183
 AliFMDGeometry.cxx:184
 AliFMDGeometry.cxx:185
 AliFMDGeometry.cxx:186
 AliFMDGeometry.cxx:187
 AliFMDGeometry.cxx:188
 AliFMDGeometry.cxx:189
 AliFMDGeometry.cxx:190
 AliFMDGeometry.cxx:191
 AliFMDGeometry.cxx:192
 AliFMDGeometry.cxx:193
 AliFMDGeometry.cxx:194
 AliFMDGeometry.cxx:195
 AliFMDGeometry.cxx:196
 AliFMDGeometry.cxx:197
 AliFMDGeometry.cxx:198
 AliFMDGeometry.cxx:199
 AliFMDGeometry.cxx:200
 AliFMDGeometry.cxx:201
 AliFMDGeometry.cxx:202
 AliFMDGeometry.cxx:203
 AliFMDGeometry.cxx:204
 AliFMDGeometry.cxx:205
 AliFMDGeometry.cxx:206
 AliFMDGeometry.cxx:207
 AliFMDGeometry.cxx:208
 AliFMDGeometry.cxx:209
 AliFMDGeometry.cxx:210
 AliFMDGeometry.cxx:211
 AliFMDGeometry.cxx:212
 AliFMDGeometry.cxx:213
 AliFMDGeometry.cxx:214
 AliFMDGeometry.cxx:215
 AliFMDGeometry.cxx:216
 AliFMDGeometry.cxx:217
 AliFMDGeometry.cxx:218
 AliFMDGeometry.cxx:219
 AliFMDGeometry.cxx:220
 AliFMDGeometry.cxx:221
 AliFMDGeometry.cxx:222
 AliFMDGeometry.cxx:223
 AliFMDGeometry.cxx:224
 AliFMDGeometry.cxx:225
 AliFMDGeometry.cxx:226
 AliFMDGeometry.cxx:227
 AliFMDGeometry.cxx:228
 AliFMDGeometry.cxx:229
 AliFMDGeometry.cxx:230
 AliFMDGeometry.cxx:231
 AliFMDGeometry.cxx:232
 AliFMDGeometry.cxx:233
 AliFMDGeometry.cxx:234
 AliFMDGeometry.cxx:235
 AliFMDGeometry.cxx:236
 AliFMDGeometry.cxx:237
 AliFMDGeometry.cxx:238
 AliFMDGeometry.cxx:239
 AliFMDGeometry.cxx:240
 AliFMDGeometry.cxx:241
 AliFMDGeometry.cxx:242
 AliFMDGeometry.cxx:243
 AliFMDGeometry.cxx:244
 AliFMDGeometry.cxx:245
 AliFMDGeometry.cxx:246
 AliFMDGeometry.cxx:247
 AliFMDGeometry.cxx:248
 AliFMDGeometry.cxx:249
 AliFMDGeometry.cxx:250
 AliFMDGeometry.cxx:251
 AliFMDGeometry.cxx:252
 AliFMDGeometry.cxx:253
 AliFMDGeometry.cxx:254
 AliFMDGeometry.cxx:255
 AliFMDGeometry.cxx:256
 AliFMDGeometry.cxx:257
 AliFMDGeometry.cxx:258
 AliFMDGeometry.cxx:259
 AliFMDGeometry.cxx:260
 AliFMDGeometry.cxx:261
 AliFMDGeometry.cxx:262
 AliFMDGeometry.cxx:263
 AliFMDGeometry.cxx:264
 AliFMDGeometry.cxx:265
 AliFMDGeometry.cxx:266
 AliFMDGeometry.cxx:267
 AliFMDGeometry.cxx:268
 AliFMDGeometry.cxx:269
 AliFMDGeometry.cxx:270
 AliFMDGeometry.cxx:271
 AliFMDGeometry.cxx:272
 AliFMDGeometry.cxx:273
 AliFMDGeometry.cxx:274
 AliFMDGeometry.cxx:275
 AliFMDGeometry.cxx:276
 AliFMDGeometry.cxx:277
 AliFMDGeometry.cxx:278
 AliFMDGeometry.cxx:279
 AliFMDGeometry.cxx:280
 AliFMDGeometry.cxx:281
 AliFMDGeometry.cxx:282
 AliFMDGeometry.cxx:283
 AliFMDGeometry.cxx:284
 AliFMDGeometry.cxx:285
 AliFMDGeometry.cxx:286
 AliFMDGeometry.cxx:287
 AliFMDGeometry.cxx:288
 AliFMDGeometry.cxx:289
 AliFMDGeometry.cxx:290
 AliFMDGeometry.cxx:291
 AliFMDGeometry.cxx:292
 AliFMDGeometry.cxx:293
 AliFMDGeometry.cxx:294
 AliFMDGeometry.cxx:295
 AliFMDGeometry.cxx:296
 AliFMDGeometry.cxx:297
 AliFMDGeometry.cxx:298
 AliFMDGeometry.cxx:299
 AliFMDGeometry.cxx:300
 AliFMDGeometry.cxx:301
 AliFMDGeometry.cxx:302
 AliFMDGeometry.cxx:303
 AliFMDGeometry.cxx:304
 AliFMDGeometry.cxx:305
 AliFMDGeometry.cxx:306
 AliFMDGeometry.cxx:307
 AliFMDGeometry.cxx:308
 AliFMDGeometry.cxx:309
 AliFMDGeometry.cxx:310
 AliFMDGeometry.cxx:311
 AliFMDGeometry.cxx:312
 AliFMDGeometry.cxx:313
 AliFMDGeometry.cxx:314
 AliFMDGeometry.cxx:315
 AliFMDGeometry.cxx:316
 AliFMDGeometry.cxx:317
 AliFMDGeometry.cxx:318
 AliFMDGeometry.cxx:319
 AliFMDGeometry.cxx:320
 AliFMDGeometry.cxx:321
 AliFMDGeometry.cxx:322
 AliFMDGeometry.cxx:323
 AliFMDGeometry.cxx:324
 AliFMDGeometry.cxx:325
 AliFMDGeometry.cxx:326
 AliFMDGeometry.cxx:327
 AliFMDGeometry.cxx:328
 AliFMDGeometry.cxx:329
 AliFMDGeometry.cxx:330
 AliFMDGeometry.cxx:331
 AliFMDGeometry.cxx:332
 AliFMDGeometry.cxx:333
 AliFMDGeometry.cxx:334
 AliFMDGeometry.cxx:335
 AliFMDGeometry.cxx:336
 AliFMDGeometry.cxx:337
 AliFMDGeometry.cxx:338
 AliFMDGeometry.cxx:339
 AliFMDGeometry.cxx:340
 AliFMDGeometry.cxx:341
 AliFMDGeometry.cxx:342
 AliFMDGeometry.cxx:343
 AliFMDGeometry.cxx:344
 AliFMDGeometry.cxx:345
 AliFMDGeometry.cxx:346
 AliFMDGeometry.cxx:347
 AliFMDGeometry.cxx:348
 AliFMDGeometry.cxx:349
 AliFMDGeometry.cxx:350
 AliFMDGeometry.cxx:351
 AliFMDGeometry.cxx:352
 AliFMDGeometry.cxx:353
 AliFMDGeometry.cxx:354
 AliFMDGeometry.cxx:355
 AliFMDGeometry.cxx:356
 AliFMDGeometry.cxx:357
 AliFMDGeometry.cxx:358
 AliFMDGeometry.cxx:359
 AliFMDGeometry.cxx:360
 AliFMDGeometry.cxx:361
 AliFMDGeometry.cxx:362
 AliFMDGeometry.cxx:363
 AliFMDGeometry.cxx:364
 AliFMDGeometry.cxx:365
 AliFMDGeometry.cxx:366
 AliFMDGeometry.cxx:367
 AliFMDGeometry.cxx:368
 AliFMDGeometry.cxx:369
 AliFMDGeometry.cxx:370
 AliFMDGeometry.cxx:371
 AliFMDGeometry.cxx:372
 AliFMDGeometry.cxx:373
 AliFMDGeometry.cxx:374
 AliFMDGeometry.cxx:375
 AliFMDGeometry.cxx:376
 AliFMDGeometry.cxx:377
 AliFMDGeometry.cxx:378
 AliFMDGeometry.cxx:379
 AliFMDGeometry.cxx:380
 AliFMDGeometry.cxx:381
 AliFMDGeometry.cxx:382
 AliFMDGeometry.cxx:383
 AliFMDGeometry.cxx:384
 AliFMDGeometry.cxx:385
 AliFMDGeometry.cxx:386
 AliFMDGeometry.cxx:387
 AliFMDGeometry.cxx:388
 AliFMDGeometry.cxx:389
 AliFMDGeometry.cxx:390
 AliFMDGeometry.cxx:391
 AliFMDGeometry.cxx:392
 AliFMDGeometry.cxx:393
 AliFMDGeometry.cxx:394
 AliFMDGeometry.cxx:395
 AliFMDGeometry.cxx:396
 AliFMDGeometry.cxx:397
 AliFMDGeometry.cxx:398
 AliFMDGeometry.cxx:399
 AliFMDGeometry.cxx:400
 AliFMDGeometry.cxx:401
 AliFMDGeometry.cxx:402
 AliFMDGeometry.cxx:403
 AliFMDGeometry.cxx:404
 AliFMDGeometry.cxx:405
 AliFMDGeometry.cxx:406
 AliFMDGeometry.cxx:407
 AliFMDGeometry.cxx:408
 AliFMDGeometry.cxx:409
 AliFMDGeometry.cxx:410
 AliFMDGeometry.cxx:411
 AliFMDGeometry.cxx:412
 AliFMDGeometry.cxx:413
 AliFMDGeometry.cxx:414
 AliFMDGeometry.cxx:415
 AliFMDGeometry.cxx:416
 AliFMDGeometry.cxx:417
 AliFMDGeometry.cxx:418
 AliFMDGeometry.cxx:419
 AliFMDGeometry.cxx:420
 AliFMDGeometry.cxx:421
 AliFMDGeometry.cxx:422
 AliFMDGeometry.cxx:423
 AliFMDGeometry.cxx:424
 AliFMDGeometry.cxx:425
 AliFMDGeometry.cxx:426
 AliFMDGeometry.cxx:427
 AliFMDGeometry.cxx:428
 AliFMDGeometry.cxx:429
 AliFMDGeometry.cxx:430
 AliFMDGeometry.cxx:431
 AliFMDGeometry.cxx:432
 AliFMDGeometry.cxx:433
 AliFMDGeometry.cxx:434
 AliFMDGeometry.cxx:435
 AliFMDGeometry.cxx:436
 AliFMDGeometry.cxx:437
 AliFMDGeometry.cxx:438
 AliFMDGeometry.cxx:439
 AliFMDGeometry.cxx:440
 AliFMDGeometry.cxx:441
 AliFMDGeometry.cxx:442
 AliFMDGeometry.cxx:443
 AliFMDGeometry.cxx:444
 AliFMDGeometry.cxx:445
 AliFMDGeometry.cxx:446
 AliFMDGeometry.cxx:447
 AliFMDGeometry.cxx:448
 AliFMDGeometry.cxx:449
 AliFMDGeometry.cxx:450
 AliFMDGeometry.cxx:451
 AliFMDGeometry.cxx:452
 AliFMDGeometry.cxx:453
 AliFMDGeometry.cxx:454
 AliFMDGeometry.cxx:455
 AliFMDGeometry.cxx:456
 AliFMDGeometry.cxx:457
 AliFMDGeometry.cxx:458
 AliFMDGeometry.cxx:459
 AliFMDGeometry.cxx:460
 AliFMDGeometry.cxx:461
 AliFMDGeometry.cxx:462
 AliFMDGeometry.cxx:463
 AliFMDGeometry.cxx:464
 AliFMDGeometry.cxx:465
 AliFMDGeometry.cxx:466
 AliFMDGeometry.cxx:467
 AliFMDGeometry.cxx:468
 AliFMDGeometry.cxx:469
 AliFMDGeometry.cxx:470
 AliFMDGeometry.cxx:471
 AliFMDGeometry.cxx:472
 AliFMDGeometry.cxx:473
 AliFMDGeometry.cxx:474
 AliFMDGeometry.cxx:475
 AliFMDGeometry.cxx:476
 AliFMDGeometry.cxx:477
 AliFMDGeometry.cxx:478
 AliFMDGeometry.cxx:479
 AliFMDGeometry.cxx:480
 AliFMDGeometry.cxx:481
 AliFMDGeometry.cxx:482
 AliFMDGeometry.cxx:483
 AliFMDGeometry.cxx:484
 AliFMDGeometry.cxx:485
 AliFMDGeometry.cxx:486
 AliFMDGeometry.cxx:487
 AliFMDGeometry.cxx:488
 AliFMDGeometry.cxx:489
 AliFMDGeometry.cxx:490
 AliFMDGeometry.cxx:491
 AliFMDGeometry.cxx:492
 AliFMDGeometry.cxx:493
 AliFMDGeometry.cxx:494
 AliFMDGeometry.cxx:495
 AliFMDGeometry.cxx:496
 AliFMDGeometry.cxx:497
 AliFMDGeometry.cxx:498
 AliFMDGeometry.cxx:499
 AliFMDGeometry.cxx:500
 AliFMDGeometry.cxx:501
 AliFMDGeometry.cxx:502
 AliFMDGeometry.cxx:503
 AliFMDGeometry.cxx:504
 AliFMDGeometry.cxx:505
 AliFMDGeometry.cxx:506
 AliFMDGeometry.cxx:507
 AliFMDGeometry.cxx:508
 AliFMDGeometry.cxx:509
 AliFMDGeometry.cxx:510
 AliFMDGeometry.cxx:511
 AliFMDGeometry.cxx:512
 AliFMDGeometry.cxx:513
 AliFMDGeometry.cxx:514
 AliFMDGeometry.cxx:515
 AliFMDGeometry.cxx:516
 AliFMDGeometry.cxx:517
 AliFMDGeometry.cxx:518
 AliFMDGeometry.cxx:519
 AliFMDGeometry.cxx:520
 AliFMDGeometry.cxx:521
 AliFMDGeometry.cxx:522
 AliFMDGeometry.cxx:523
 AliFMDGeometry.cxx:524
 AliFMDGeometry.cxx:525
 AliFMDGeometry.cxx:526
 AliFMDGeometry.cxx:527
 AliFMDGeometry.cxx:528
 AliFMDGeometry.cxx:529
 AliFMDGeometry.cxx:530
 AliFMDGeometry.cxx:531
 AliFMDGeometry.cxx:532
 AliFMDGeometry.cxx:533
 AliFMDGeometry.cxx:534
 AliFMDGeometry.cxx:535
 AliFMDGeometry.cxx:536
 AliFMDGeometry.cxx:537
 AliFMDGeometry.cxx:538
 AliFMDGeometry.cxx:539
 AliFMDGeometry.cxx:540
 AliFMDGeometry.cxx:541
 AliFMDGeometry.cxx:542
 AliFMDGeometry.cxx:543
 AliFMDGeometry.cxx:544
 AliFMDGeometry.cxx:545
 AliFMDGeometry.cxx:546
 AliFMDGeometry.cxx:547
 AliFMDGeometry.cxx:548
 AliFMDGeometry.cxx:549
 AliFMDGeometry.cxx:550
 AliFMDGeometry.cxx:551
 AliFMDGeometry.cxx:552
 AliFMDGeometry.cxx:553
 AliFMDGeometry.cxx:554
 AliFMDGeometry.cxx:555
 AliFMDGeometry.cxx:556
 AliFMDGeometry.cxx:557
 AliFMDGeometry.cxx:558
 AliFMDGeometry.cxx:559
 AliFMDGeometry.cxx:560
 AliFMDGeometry.cxx:561
 AliFMDGeometry.cxx:562
 AliFMDGeometry.cxx:563
 AliFMDGeometry.cxx:564
 AliFMDGeometry.cxx:565
 AliFMDGeometry.cxx:566
 AliFMDGeometry.cxx:567
 AliFMDGeometry.cxx:568
 AliFMDGeometry.cxx:569
 AliFMDGeometry.cxx:570
 AliFMDGeometry.cxx:571
 AliFMDGeometry.cxx:572
 AliFMDGeometry.cxx:573
 AliFMDGeometry.cxx:574
 AliFMDGeometry.cxx:575
 AliFMDGeometry.cxx:576
 AliFMDGeometry.cxx:577
 AliFMDGeometry.cxx:578
 AliFMDGeometry.cxx:579
 AliFMDGeometry.cxx:580
 AliFMDGeometry.cxx:581
 AliFMDGeometry.cxx:582
 AliFMDGeometry.cxx:583
 AliFMDGeometry.cxx:584
 AliFMDGeometry.cxx:585
 AliFMDGeometry.cxx:586
 AliFMDGeometry.cxx:587
 AliFMDGeometry.cxx:588
 AliFMDGeometry.cxx:589
 AliFMDGeometry.cxx:590
 AliFMDGeometry.cxx:591
 AliFMDGeometry.cxx:592
 AliFMDGeometry.cxx:593
 AliFMDGeometry.cxx:594
 AliFMDGeometry.cxx:595
 AliFMDGeometry.cxx:596
 AliFMDGeometry.cxx:597
 AliFMDGeometry.cxx:598
 AliFMDGeometry.cxx:599
 AliFMDGeometry.cxx:600
 AliFMDGeometry.cxx:601
 AliFMDGeometry.cxx:602
 AliFMDGeometry.cxx:603
 AliFMDGeometry.cxx:604
 AliFMDGeometry.cxx:605
 AliFMDGeometry.cxx:606
 AliFMDGeometry.cxx:607
 AliFMDGeometry.cxx:608
 AliFMDGeometry.cxx:609
 AliFMDGeometry.cxx:610
 AliFMDGeometry.cxx:611
 AliFMDGeometry.cxx:612
 AliFMDGeometry.cxx:613
 AliFMDGeometry.cxx:614
 AliFMDGeometry.cxx:615
 AliFMDGeometry.cxx:616
 AliFMDGeometry.cxx:617
 AliFMDGeometry.cxx:618
 AliFMDGeometry.cxx:619
 AliFMDGeometry.cxx:620
 AliFMDGeometry.cxx:621
 AliFMDGeometry.cxx:622
 AliFMDGeometry.cxx:623
 AliFMDGeometry.cxx:624
 AliFMDGeometry.cxx:625
 AliFMDGeometry.cxx:626
 AliFMDGeometry.cxx:627
 AliFMDGeometry.cxx:628
 AliFMDGeometry.cxx:629
 AliFMDGeometry.cxx:630
 AliFMDGeometry.cxx:631
 AliFMDGeometry.cxx:632
 AliFMDGeometry.cxx:633
 AliFMDGeometry.cxx:634
 AliFMDGeometry.cxx:635
 AliFMDGeometry.cxx:636
 AliFMDGeometry.cxx:637
 AliFMDGeometry.cxx:638
 AliFMDGeometry.cxx:639
 AliFMDGeometry.cxx:640
 AliFMDGeometry.cxx:641
 AliFMDGeometry.cxx:642
 AliFMDGeometry.cxx:643
 AliFMDGeometry.cxx:644
 AliFMDGeometry.cxx:645
 AliFMDGeometry.cxx:646
 AliFMDGeometry.cxx:647
 AliFMDGeometry.cxx:648
 AliFMDGeometry.cxx:649
 AliFMDGeometry.cxx:650
 AliFMDGeometry.cxx:651
 AliFMDGeometry.cxx:652
 AliFMDGeometry.cxx:653
 AliFMDGeometry.cxx:654
 AliFMDGeometry.cxx:655
 AliFMDGeometry.cxx:656
 AliFMDGeometry.cxx:657
 AliFMDGeometry.cxx:658
 AliFMDGeometry.cxx:659
 AliFMDGeometry.cxx:660
 AliFMDGeometry.cxx:661
 AliFMDGeometry.cxx:662
 AliFMDGeometry.cxx:663
 AliFMDGeometry.cxx:664
 AliFMDGeometry.cxx:665
 AliFMDGeometry.cxx:666
 AliFMDGeometry.cxx:667
 AliFMDGeometry.cxx:668
 AliFMDGeometry.cxx:669
 AliFMDGeometry.cxx:670
 AliFMDGeometry.cxx:671
 AliFMDGeometry.cxx:672
 AliFMDGeometry.cxx:673
 AliFMDGeometry.cxx:674
 AliFMDGeometry.cxx:675
 AliFMDGeometry.cxx:676
 AliFMDGeometry.cxx:677
 AliFMDGeometry.cxx:678
 AliFMDGeometry.cxx:679
 AliFMDGeometry.cxx:680
 AliFMDGeometry.cxx:681
 AliFMDGeometry.cxx:682
 AliFMDGeometry.cxx:683
 AliFMDGeometry.cxx:684
 AliFMDGeometry.cxx:685
 AliFMDGeometry.cxx:686
 AliFMDGeometry.cxx:687
 AliFMDGeometry.cxx:688
 AliFMDGeometry.cxx:689
 AliFMDGeometry.cxx:690
 AliFMDGeometry.cxx:691
 AliFMDGeometry.cxx:692
 AliFMDGeometry.cxx:693
 AliFMDGeometry.cxx:694
 AliFMDGeometry.cxx:695
 AliFMDGeometry.cxx:696
 AliFMDGeometry.cxx:697
 AliFMDGeometry.cxx:698
 AliFMDGeometry.cxx:699
 AliFMDGeometry.cxx:700
 AliFMDGeometry.cxx:701
 AliFMDGeometry.cxx:702
 AliFMDGeometry.cxx:703
 AliFMDGeometry.cxx:704
 AliFMDGeometry.cxx:705
 AliFMDGeometry.cxx:706
 AliFMDGeometry.cxx:707
 AliFMDGeometry.cxx:708
 AliFMDGeometry.cxx:709
 AliFMDGeometry.cxx:710
 AliFMDGeometry.cxx:711
 AliFMDGeometry.cxx:712
 AliFMDGeometry.cxx:713
 AliFMDGeometry.cxx:714
 AliFMDGeometry.cxx:715
 AliFMDGeometry.cxx:716
 AliFMDGeometry.cxx:717
 AliFMDGeometry.cxx:718
 AliFMDGeometry.cxx:719
 AliFMDGeometry.cxx:720
 AliFMDGeometry.cxx:721
 AliFMDGeometry.cxx:722
 AliFMDGeometry.cxx:723
 AliFMDGeometry.cxx:724
 AliFMDGeometry.cxx:725
 AliFMDGeometry.cxx:726
 AliFMDGeometry.cxx:727
 AliFMDGeometry.cxx:728
 AliFMDGeometry.cxx:729
 AliFMDGeometry.cxx:730
 AliFMDGeometry.cxx:731
 AliFMDGeometry.cxx:732