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$ */

//_________________________________________________________________________
// Geometry class  for PHOS : singleton  
// PHOS consists of the electromagnetic calorimeter (EMCA)
// and a charged particle veto either in the Subatech's version (PPSD)
// or in the IHEP's one (CPV).
// The EMCA/PPSD/CPV modules are parametrized so that any configuration
// can be easily implemented 
// The title is used to identify the version of CPV used.
//                  
// -- Author: Yves Schutz (SUBATECH) & Dmitri Peressounko (RRC "KI" & SUBATECH)

// --- ROOT system ---

#include "TVector3.h"
#include "TRotation.h" 
#include "TParticle.h"
#include <TGeoManager.h>
#include <TGeoMatrix.h>

// --- Standard library ---

// --- AliRoot header files ---
#include "AliLog.h"
#include "AliPHOSGeometry.h"
#include "AliPHOSEMCAGeometry.h" 
#include "AliPHOSRecPoint.h"

ClassImp(AliPHOSGeometry)

// these initialisations are needed for a singleton
AliPHOSGeometry  * AliPHOSGeometry::fgGeom = 0 ;
Bool_t             AliPHOSGeometry::fgInit = kFALSE ;

//____________________________________________________________________________
AliPHOSGeometry::AliPHOSGeometry() : 
                    AliPHOSGeoUtils(),
	            fAngle(0.f),
	            fPHOSAngle(0),
	            fIPtoUpperCPVsurface(0),
		    fCrystalShift(0),
		    fCryCellShift(0),
	            fRotMatrixArray(0)
{
    // default ctor 
    // must be kept public for root persistency purposes, but should never be called by the outside world
    fgGeom          = 0 ;

    fPHOSParams[0] = 0.;
    fPHOSParams[1] = 0.;
    fPHOSParams[2] = 0.;
    fPHOSParams[3] = 0.;
}  

//____________________________________________________________________________
AliPHOSGeometry::AliPHOSGeometry(const AliPHOSGeometry & rhs)
		    : AliPHOSGeoUtils(rhs),
		      fAngle(rhs.fAngle),
		      fPHOSAngle(0),
		      fIPtoUpperCPVsurface(rhs.fIPtoUpperCPVsurface),
		      fCrystalShift(rhs.fCrystalShift),
		      fCryCellShift(rhs.fCryCellShift),
		      fRotMatrixArray(0)
{
  Fatal("cpy ctor", "not implemented") ; 
}

//____________________________________________________________________________
AliPHOSGeometry::AliPHOSGeometry(const Text_t* name, const Text_t* title) 
	          : AliPHOSGeoUtils(name, title),
	            fAngle(0.f),
	            fPHOSAngle(0),
	            fIPtoUpperCPVsurface(0),
		    fCrystalShift(0),
		    fCryCellShift(0),
	            fRotMatrixArray(0)
{ 
  // ctor only for internal usage (singleton)
  Init() ; 
  fgGeom = this;
}

//____________________________________________________________________________
AliPHOSGeometry::~AliPHOSGeometry(void)
{
  // dtor

  if (fRotMatrixArray) fRotMatrixArray->Delete() ; 
  if (fRotMatrixArray) delete fRotMatrixArray ; 
  if (fPHOSAngle     ) delete[] fPHOSAngle ; 
}

//____________________________________________________________________________
void AliPHOSGeometry::Init(void)
{
  // Initializes the PHOS parameters :
  //  IHEP is the Protvino CPV (cathode pad chambers)
  
  fgInit     = kTRUE ; 

  fAngle        = 20;

  
  fPHOSAngle = new Float_t[fNModules] ;
  
  const Float_t * emcParams = fGeometryEMCA->GetEMCParams() ;
  
  fPHOSParams[0] =  TMath::Max((Double_t)fGeometryCPV->GetCPVBoxSize(0)/2., 
 			       (Double_t)(emcParams[0] - (emcParams[1]-emcParams[0])*
					  fGeometryCPV->GetCPVBoxSize(1)/2/emcParams[3]));
  fPHOSParams[1] = emcParams[1] ;
  fPHOSParams[2] = TMath::Max((Double_t)emcParams[2], (Double_t)fGeometryCPV->GetCPVBoxSize(2)/2.);
  fPHOSParams[3] = emcParams[3] + fGeometryCPV->GetCPVBoxSize(1)/2. ;
  
  fIPtoUpperCPVsurface = fGeometryEMCA->GetIPtoOuterCoverDistance() - fGeometryCPV->GetCPVBoxSize(1) ;

  //calculate offset to crystal surface
  const Float_t * inthermo = fGeometryEMCA->GetInnerThermoHalfSize() ;
  const Float_t * strip = fGeometryEMCA->GetStripHalfSize() ;
  const Float_t * splate = fGeometryEMCA->GetSupportPlateHalfSize();
  const Float_t * crystal = fGeometryEMCA->GetCrystalHalfSize() ;
  const Float_t * pin = fGeometryEMCA->GetAPDHalfSize() ;
  const Float_t * preamp = fGeometryEMCA->GetPreampHalfSize() ;
  fCrystalShift=-inthermo[1]+strip[1]+splate[1]+crystal[1]-fGeometryEMCA->GetAirGapLed()/2.+pin[1]+preamp[1] ;
  fCryCellShift=crystal[1]-(fGeometryEMCA->GetAirGapLed()-2*pin[1]-2*preamp[1])/2;
 
  Int_t index ;
  for ( index = 0; index < fNModules; index++ )
    fPHOSAngle[index] = 0.0 ; // Module position angles are set in CreateGeometry()
  
  fRotMatrixArray = new TObjArray(fNModules) ; 

  // Geometry parameters are calculated

  SetPHOSAngles();
  Double_t const kRADDEG = 180.0 / TMath::Pi() ;
  Float_t r = GetIPtoOuterCoverDistance() + fPHOSParams[3] - GetCPVBoxSize(1) ;
  for (Int_t iModule=0; iModule<fNModules; iModule++) {
    fModuleCenter[iModule][0] = r * TMath::Sin(fPHOSAngle[iModule] / kRADDEG );
    fModuleCenter[iModule][1] =-r * TMath::Cos(fPHOSAngle[iModule] / kRADDEG );
    fModuleCenter[iModule][2] = 0.;
    
    fModuleAngle[iModule][0][0] =  90;
    fModuleAngle[iModule][0][1] =   fPHOSAngle[iModule];
    fModuleAngle[iModule][1][0] =   0;
    fModuleAngle[iModule][1][1] =   0;
    fModuleAngle[iModule][2][0] =  90;
    fModuleAngle[iModule][2][1] = 270 + fPHOSAngle[iModule];
  }

}

//____________________________________________________________________________
AliPHOSGeometry *  AliPHOSGeometry::GetInstance() 
{ 
  // Returns the pointer of the unique instance; singleton specific
  
  return static_cast<AliPHOSGeometry *>( fgGeom ) ; 
}

//____________________________________________________________________________
AliPHOSGeometry *  AliPHOSGeometry::GetInstance(const Text_t* name, const Text_t* title) 
{
  // Returns the pointer of the unique instance
  // Creates it with the specified options (name, title) if it does not exist yet

  AliPHOSGeometry * rv = 0  ; 
  if ( fgGeom == 0 ) {
    if ( strcmp(name,"") == 0 ) 
      rv = 0 ;
    else {    
      fgGeom = new AliPHOSGeometry(name, title) ;
      if ( fgInit )
	rv = (AliPHOSGeometry * ) fgGeom ;
      else {
	rv = 0 ; 
	delete fgGeom ; 
	fgGeom = 0 ; 
      }
    }
  }
  else {
    if ( strcmp(fgGeom->GetName(), name) != 0 ) 
      ::Error("GetInstance", "Current geometry is %s. You cannot call %s", 
		      fgGeom->GetName(), name) ; 
    else
      rv = (AliPHOSGeometry *) fgGeom ; 
  } 
  return rv ; 
}

//____________________________________________________________________________
void AliPHOSGeometry::SetPHOSAngles() 
{ 
  // Calculates the position of the PHOS modules in ALICE global coordinate system
  // in ideal geometry
  
  Double_t const kRADDEG = 180.0 / TMath::Pi() ;
  Float_t pphi =  2 * TMath::ATan( GetOuterBoxSize(0)  / ( 2.0 * GetIPtoUpperCPVsurface() ) ) ;
  pphi *= kRADDEG ;
  if (pphi > fAngle){ 
    AliError(Form("PHOS modules overlap!\n pphi = %f fAngle = %f", 
		  pphi, fAngle));

  }
  pphi = fAngle;
  
  for( Int_t i = 1; i <= fNModules ; i++ ) {
    Float_t angle = pphi * ( i - fNModules / 2.0 - 0.5 ) ;
    fPHOSAngle[i-1] = -  angle ;
  } 
}
//____________________________________________________________________________
void AliPHOSGeometry::GetGlobal(const AliRecPoint* , TVector3 & ) const
{
  AliFatal(Form("Please use GetGlobalPHOS(recPoint,gpos) instead of GetGlobal!"));
}

//____________________________________________________________________________
void AliPHOSGeometry::GetGlobalPHOS(const AliPHOSRecPoint* recPoint, TVector3 & gpos) const
{
  // Calculates the coordinates of a RecPoint and the error matrix in the ALICE global coordinate system
 
  const AliPHOSRecPoint * tmpPHOS = recPoint ;  
  TVector3 localposition ;

  tmpPHOS->GetLocalPosition(gpos) ;

  if (!gGeoManager){
    AliFatal("Geo manager not initialized\n");
  }
  //construct module name
  char path[100] ; 
  Double_t dy ;
  if(tmpPHOS->IsEmc()){
    TString spath="/ALIC_1/PHOS_%d/PEMC_1/PCOL_1/PTIO_1/PCOR_1/PAGA_1/PTII_1";
    snprintf(path,spath.Length(),spath.Data(),tmpPHOS->GetPHOSMod()) ;
//    sprintf(path,"/ALIC_1/PHOS_%d",tmpPHOS->GetPHOSMod()) ;
    dy=fCrystalShift ;
  }
  else{
    TString spath="/ALIC_1/PHOS_%d/PCPV_1";
    snprintf(path,spath.Length(),spath.Data(),tmpPHOS->GetPHOSMod()) ;
    dy= GetCPVBoxSize(1)/2. ; //center of CPV module 
  }
  Double_t pos[3]={gpos.X(),gpos.Y()-dy,gpos.Z()} ;
  if(tmpPHOS->IsEmc())
    pos[2]=-pos[2] ; //Opposite z directions in EMC matrix and local frame!!!
  Double_t posC[3] = {};
  //now apply possible shifts and rotations
  if (!gGeoManager->cd(path)){
    AliFatal("Geo manager can not find path \n");
  }
  TGeoHMatrix *m = gGeoManager->GetCurrentMatrix();
  if (m){
     m->LocalToMaster(pos,posC);
  }
  else{
    AliFatal("Geo matrixes are not loaded \n") ;
  }
  gpos.SetXYZ(posC[0],posC[1],posC[2]) ;

}
//____________________________________________________________________________

void AliPHOSGeometry::GetModuleCenter(TVector3& center, 
				      const char *det,
				      Int_t module) const
{
  // Returns a position of the center of the CPV or EMC module
  // in ideal (not misaligned) geometry
  Float_t rDet = 0.;
  if      (strcmp(det,"CPV") == 0) rDet  = GetIPtoCPVDistance   ();
  else if (strcmp(det,"EMC") == 0) rDet  = GetIPtoCrystalSurface();
  else 
    AliFatal(Form("Wrong detector name %s",det));

  Float_t angle = GetPHOSAngle(module); // (40,20,0,-20,-40) degrees
  angle *= TMath::Pi()/180;
  angle += 3*TMath::Pi()/2.;
  center.SetXYZ(rDet*TMath::Cos(angle), rDet*TMath::Sin(angle), 0.);
}

 AliPHOSGeometry.cxx:1
 AliPHOSGeometry.cxx:2
 AliPHOSGeometry.cxx:3
 AliPHOSGeometry.cxx:4
 AliPHOSGeometry.cxx:5
 AliPHOSGeometry.cxx:6
 AliPHOSGeometry.cxx:7
 AliPHOSGeometry.cxx:8
 AliPHOSGeometry.cxx:9
 AliPHOSGeometry.cxx:10
 AliPHOSGeometry.cxx:11
 AliPHOSGeometry.cxx:12
 AliPHOSGeometry.cxx:13
 AliPHOSGeometry.cxx:14
 AliPHOSGeometry.cxx:15
 AliPHOSGeometry.cxx:16
 AliPHOSGeometry.cxx:17
 AliPHOSGeometry.cxx:18
 AliPHOSGeometry.cxx:19
 AliPHOSGeometry.cxx:20
 AliPHOSGeometry.cxx:21
 AliPHOSGeometry.cxx:22
 AliPHOSGeometry.cxx:23
 AliPHOSGeometry.cxx:24
 AliPHOSGeometry.cxx:25
 AliPHOSGeometry.cxx:26
 AliPHOSGeometry.cxx:27
 AliPHOSGeometry.cxx:28
 AliPHOSGeometry.cxx:29
 AliPHOSGeometry.cxx:30
 AliPHOSGeometry.cxx:31
 AliPHOSGeometry.cxx:32
 AliPHOSGeometry.cxx:33
 AliPHOSGeometry.cxx:34
 AliPHOSGeometry.cxx:35
 AliPHOSGeometry.cxx:36
 AliPHOSGeometry.cxx:37
 AliPHOSGeometry.cxx:38
 AliPHOSGeometry.cxx:39
 AliPHOSGeometry.cxx:40
 AliPHOSGeometry.cxx:41
 AliPHOSGeometry.cxx:42
 AliPHOSGeometry.cxx:43
 AliPHOSGeometry.cxx:44
 AliPHOSGeometry.cxx:45
 AliPHOSGeometry.cxx:46
 AliPHOSGeometry.cxx:47
 AliPHOSGeometry.cxx:48
 AliPHOSGeometry.cxx:49
 AliPHOSGeometry.cxx:50
 AliPHOSGeometry.cxx:51
 AliPHOSGeometry.cxx:52
 AliPHOSGeometry.cxx:53
 AliPHOSGeometry.cxx:54
 AliPHOSGeometry.cxx:55
 AliPHOSGeometry.cxx:56
 AliPHOSGeometry.cxx:57
 AliPHOSGeometry.cxx:58
 AliPHOSGeometry.cxx:59
 AliPHOSGeometry.cxx:60
 AliPHOSGeometry.cxx:61
 AliPHOSGeometry.cxx:62
 AliPHOSGeometry.cxx:63
 AliPHOSGeometry.cxx:64
 AliPHOSGeometry.cxx:65
 AliPHOSGeometry.cxx:66
 AliPHOSGeometry.cxx:67
 AliPHOSGeometry.cxx:68
 AliPHOSGeometry.cxx:69
 AliPHOSGeometry.cxx:70
 AliPHOSGeometry.cxx:71
 AliPHOSGeometry.cxx:72
 AliPHOSGeometry.cxx:73
 AliPHOSGeometry.cxx:74
 AliPHOSGeometry.cxx:75
 AliPHOSGeometry.cxx:76
 AliPHOSGeometry.cxx:77
 AliPHOSGeometry.cxx:78
 AliPHOSGeometry.cxx:79
 AliPHOSGeometry.cxx:80
 AliPHOSGeometry.cxx:81
 AliPHOSGeometry.cxx:82
 AliPHOSGeometry.cxx:83
 AliPHOSGeometry.cxx:84
 AliPHOSGeometry.cxx:85
 AliPHOSGeometry.cxx:86
 AliPHOSGeometry.cxx:87
 AliPHOSGeometry.cxx:88
 AliPHOSGeometry.cxx:89
 AliPHOSGeometry.cxx:90
 AliPHOSGeometry.cxx:91
 AliPHOSGeometry.cxx:92
 AliPHOSGeometry.cxx:93
 AliPHOSGeometry.cxx:94
 AliPHOSGeometry.cxx:95
 AliPHOSGeometry.cxx:96
 AliPHOSGeometry.cxx:97
 AliPHOSGeometry.cxx:98
 AliPHOSGeometry.cxx:99
 AliPHOSGeometry.cxx:100
 AliPHOSGeometry.cxx:101
 AliPHOSGeometry.cxx:102
 AliPHOSGeometry.cxx:103
 AliPHOSGeometry.cxx:104
 AliPHOSGeometry.cxx:105
 AliPHOSGeometry.cxx:106
 AliPHOSGeometry.cxx:107
 AliPHOSGeometry.cxx:108
 AliPHOSGeometry.cxx:109
 AliPHOSGeometry.cxx:110
 AliPHOSGeometry.cxx:111
 AliPHOSGeometry.cxx:112
 AliPHOSGeometry.cxx:113
 AliPHOSGeometry.cxx:114
 AliPHOSGeometry.cxx:115
 AliPHOSGeometry.cxx:116
 AliPHOSGeometry.cxx:117
 AliPHOSGeometry.cxx:118
 AliPHOSGeometry.cxx:119
 AliPHOSGeometry.cxx:120
 AliPHOSGeometry.cxx:121
 AliPHOSGeometry.cxx:122
 AliPHOSGeometry.cxx:123
 AliPHOSGeometry.cxx:124
 AliPHOSGeometry.cxx:125
 AliPHOSGeometry.cxx:126
 AliPHOSGeometry.cxx:127
 AliPHOSGeometry.cxx:128
 AliPHOSGeometry.cxx:129
 AliPHOSGeometry.cxx:130
 AliPHOSGeometry.cxx:131
 AliPHOSGeometry.cxx:132
 AliPHOSGeometry.cxx:133
 AliPHOSGeometry.cxx:134
 AliPHOSGeometry.cxx:135
 AliPHOSGeometry.cxx:136
 AliPHOSGeometry.cxx:137
 AliPHOSGeometry.cxx:138
 AliPHOSGeometry.cxx:139
 AliPHOSGeometry.cxx:140
 AliPHOSGeometry.cxx:141
 AliPHOSGeometry.cxx:142
 AliPHOSGeometry.cxx:143
 AliPHOSGeometry.cxx:144
 AliPHOSGeometry.cxx:145
 AliPHOSGeometry.cxx:146
 AliPHOSGeometry.cxx:147
 AliPHOSGeometry.cxx:148
 AliPHOSGeometry.cxx:149
 AliPHOSGeometry.cxx:150
 AliPHOSGeometry.cxx:151
 AliPHOSGeometry.cxx:152
 AliPHOSGeometry.cxx:153
 AliPHOSGeometry.cxx:154
 AliPHOSGeometry.cxx:155
 AliPHOSGeometry.cxx:156
 AliPHOSGeometry.cxx:157
 AliPHOSGeometry.cxx:158
 AliPHOSGeometry.cxx:159
 AliPHOSGeometry.cxx:160
 AliPHOSGeometry.cxx:161
 AliPHOSGeometry.cxx:162
 AliPHOSGeometry.cxx:163
 AliPHOSGeometry.cxx:164
 AliPHOSGeometry.cxx:165
 AliPHOSGeometry.cxx:166
 AliPHOSGeometry.cxx:167
 AliPHOSGeometry.cxx:168
 AliPHOSGeometry.cxx:169
 AliPHOSGeometry.cxx:170
 AliPHOSGeometry.cxx:171
 AliPHOSGeometry.cxx:172
 AliPHOSGeometry.cxx:173
 AliPHOSGeometry.cxx:174
 AliPHOSGeometry.cxx:175
 AliPHOSGeometry.cxx:176
 AliPHOSGeometry.cxx:177
 AliPHOSGeometry.cxx:178
 AliPHOSGeometry.cxx:179
 AliPHOSGeometry.cxx:180
 AliPHOSGeometry.cxx:181
 AliPHOSGeometry.cxx:182
 AliPHOSGeometry.cxx:183
 AliPHOSGeometry.cxx:184
 AliPHOSGeometry.cxx:185
 AliPHOSGeometry.cxx:186
 AliPHOSGeometry.cxx:187
 AliPHOSGeometry.cxx:188
 AliPHOSGeometry.cxx:189
 AliPHOSGeometry.cxx:190
 AliPHOSGeometry.cxx:191
 AliPHOSGeometry.cxx:192
 AliPHOSGeometry.cxx:193
 AliPHOSGeometry.cxx:194
 AliPHOSGeometry.cxx:195
 AliPHOSGeometry.cxx:196
 AliPHOSGeometry.cxx:197
 AliPHOSGeometry.cxx:198
 AliPHOSGeometry.cxx:199
 AliPHOSGeometry.cxx:200
 AliPHOSGeometry.cxx:201
 AliPHOSGeometry.cxx:202
 AliPHOSGeometry.cxx:203
 AliPHOSGeometry.cxx:204
 AliPHOSGeometry.cxx:205
 AliPHOSGeometry.cxx:206
 AliPHOSGeometry.cxx:207
 AliPHOSGeometry.cxx:208
 AliPHOSGeometry.cxx:209
 AliPHOSGeometry.cxx:210
 AliPHOSGeometry.cxx:211
 AliPHOSGeometry.cxx:212
 AliPHOSGeometry.cxx:213
 AliPHOSGeometry.cxx:214
 AliPHOSGeometry.cxx:215
 AliPHOSGeometry.cxx:216
 AliPHOSGeometry.cxx:217
 AliPHOSGeometry.cxx:218
 AliPHOSGeometry.cxx:219
 AliPHOSGeometry.cxx:220
 AliPHOSGeometry.cxx:221
 AliPHOSGeometry.cxx:222
 AliPHOSGeometry.cxx:223
 AliPHOSGeometry.cxx:224
 AliPHOSGeometry.cxx:225
 AliPHOSGeometry.cxx:226
 AliPHOSGeometry.cxx:227
 AliPHOSGeometry.cxx:228
 AliPHOSGeometry.cxx:229
 AliPHOSGeometry.cxx:230
 AliPHOSGeometry.cxx:231
 AliPHOSGeometry.cxx:232
 AliPHOSGeometry.cxx:233
 AliPHOSGeometry.cxx:234
 AliPHOSGeometry.cxx:235
 AliPHOSGeometry.cxx:236
 AliPHOSGeometry.cxx:237
 AliPHOSGeometry.cxx:238
 AliPHOSGeometry.cxx:239
 AliPHOSGeometry.cxx:240
 AliPHOSGeometry.cxx:241
 AliPHOSGeometry.cxx:242
 AliPHOSGeometry.cxx:243
 AliPHOSGeometry.cxx:244
 AliPHOSGeometry.cxx:245
 AliPHOSGeometry.cxx:246
 AliPHOSGeometry.cxx:247
 AliPHOSGeometry.cxx:248
 AliPHOSGeometry.cxx:249
 AliPHOSGeometry.cxx:250
 AliPHOSGeometry.cxx:251
 AliPHOSGeometry.cxx:252
 AliPHOSGeometry.cxx:253
 AliPHOSGeometry.cxx:254
 AliPHOSGeometry.cxx:255
 AliPHOSGeometry.cxx:256
 AliPHOSGeometry.cxx:257
 AliPHOSGeometry.cxx:258
 AliPHOSGeometry.cxx:259
 AliPHOSGeometry.cxx:260
 AliPHOSGeometry.cxx:261
 AliPHOSGeometry.cxx:262
 AliPHOSGeometry.cxx:263
 AliPHOSGeometry.cxx:264
 AliPHOSGeometry.cxx:265
 AliPHOSGeometry.cxx:266
 AliPHOSGeometry.cxx:267
 AliPHOSGeometry.cxx:268
 AliPHOSGeometry.cxx:269
 AliPHOSGeometry.cxx:270
 AliPHOSGeometry.cxx:271
 AliPHOSGeometry.cxx:272
 AliPHOSGeometry.cxx:273
 AliPHOSGeometry.cxx:274
 AliPHOSGeometry.cxx:275
 AliPHOSGeometry.cxx:276
 AliPHOSGeometry.cxx:277
 AliPHOSGeometry.cxx:278
 AliPHOSGeometry.cxx:279
 AliPHOSGeometry.cxx:280
 AliPHOSGeometry.cxx:281
 AliPHOSGeometry.cxx:282
 AliPHOSGeometry.cxx:283
 AliPHOSGeometry.cxx:284
 AliPHOSGeometry.cxx:285
 AliPHOSGeometry.cxx:286
 AliPHOSGeometry.cxx:287
 AliPHOSGeometry.cxx:288
 AliPHOSGeometry.cxx:289
 AliPHOSGeometry.cxx:290
 AliPHOSGeometry.cxx:291
 AliPHOSGeometry.cxx:292
 AliPHOSGeometry.cxx:293
 AliPHOSGeometry.cxx:294
 AliPHOSGeometry.cxx:295
 AliPHOSGeometry.cxx:296
 AliPHOSGeometry.cxx:297
 AliPHOSGeometry.cxx:298
 AliPHOSGeometry.cxx:299