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

/* History of cvs commits:
 *
 * $Log$
 * Revision 1.94  2007/10/18 08:40:02  kharlov
 * Misalignment-related bug fixed
 *
 * Revision 1.93  2007/10/06 22:24:40  kharlov
 * Bug in strip unit geometry is corrected
 *
 * Revision 1.92  2007/07/04 16:38:19  policheh
 * Tracking2LocalCS matrices corrected for CPV.
 *
 * Revision 1.91  2007/07/02 14:50:49  policheh
 * Tracking2LocalCS matrices corrected.
 *
 * Revision 1.90  2007/05/24 13:04:05  policheh
 * AddAlignableVolumes: local to tracking CS transformation matrices creates for each
 * PHOS supermodule
 *
 * Revision 1.89  2007/04/24 14:34:39  hristov
 * Additional protection: do not search for alignable object if the CPV is not in the geometry
 *
 * Revision 1.88  2007/04/19 15:28:30  kharlov
 * Modify strip unit geometry according to the final drawings (Timur)
 *
 * Revision 1.87  2007/04/01 07:37:10  kharlov
 * TGeo RS to Local RS transf matr added
 *
 * Revision 1.86  2007/03/06 06:55:46  kharlov
 * DP:Misalignment of CPV added
 *
 * Revision 1.85  2007/03/01 11:37:37  kharlov
 * Strip units changed from 8x1 to 8x2 (T.Pocheptsov)
 *
 * Revision 1.84  2006/12/20 16:56:43  kharlov
 * Optional geometry without CPV
 *
 * Revision 1.83  2006/11/14 17:11:15  hristov
 * Removing inheritances from TAttLine, TAttMarker and AliRndm in AliModule. The copy constructor and assignment operators are moved to the private part of the class and not implemented. The corresponding changes are propagated to the detectors
 *
 * Revision 1.82  2006/09/27 19:55:57  kharlov
 * Alignment object with symbolic volume names are introduced
 *
 * Revision 1.81  2006/03/04 20:25:56  kharlov
 * Set geom parameters from CDB
 *
 * Revision 1.80  2005/06/17 07:39:07  hristov
 * Removing GetDebug and SetDebug from AliRun and AliModule. Using AliLog for the messages
 *
 * Revision 1.79  2005/05/28 14:19:05  schutz
 * Compilation warnings fixed by T.P.
 *
 */

//_________________________________________________________________________
// Implementation version v0 of PHOS Manager class 
// An object of this class does not produce hits nor digits
// It is the one to use if you do not want to produce outputs in TREEH or TREED
//                  
//*-- Author: Yves Schutz (SUBATECH) & Dmitri Peressounko (RRC KI & SUBATECH)


// --- ROOT system ---

#include <TFolder.h>
#include <TGeometry.h>
#include <TROOT.h>
#include <TRandom.h>
#include <TTree.h>
#include <TVirtualMC.h>
#include <TGeoPhysicalNode.h>
#include <TGeoManager.h>
#include <TGeoMatrix.h>
#include <TVector3.h>

// --- Standard library ---

#include <string.h>
#include <stdlib.h>

// --- AliRoot header files ---

#include "AliConst.h"
#include "AliPHOSGeometry.h"
#include "AliPHOSLoader.h"
#include "AliPHOSv0.h"
#include "AliRun.h"
#include "AliLog.h"
#include "AliGeomManager.h"

ClassImp(AliPHOSv0)

//____________________________________________________________________________
AliPHOSv0::AliPHOSv0(const char *name, const char *title):
  AliPHOS(name,title)
{
  // ctor : title is used to identify the layout
  GetGeometry() ; 
}

//____________________________________________________________________________
void AliPHOSv0::CreateGeometry()
{
  // Create the PHOS geometry for Geant

  AliPHOSv0 *phostmp = dynamic_cast<AliPHOSv0*>(gAlice->GetModule("PHOS")) ;

  if ( phostmp == NULL ) {
    
    fprintf(stderr, "PHOS detector not found!\n") ;
    return;
    
  }

  AliPHOSGeometry * geom = GetGeometry() ; 

  // Get pointer to the array containing media indeces
  Int_t *idtmed = fIdtmed->GetArray() - 699 ;

  // Create a PHOS module.
  
  TVirtualMC::GetMC()->Gsvolu("PHOS", "TRD1", idtmed[798], geom->GetPHOSParams(), 4) ;        
  
  this->CreateGeometryforEMC() ; 

  if (strstr(fTitle.Data(),"noCPV") == 0) 
    this->CreateGeometryforCPV() ;
  
  this->CreateGeometryforSupport() ; 
  
  // --- Position  PHOS mdules in ALICE setup ---
  Int_t idrotm[99] ;
  Int_t iXYZ,iAngle;
  char im[5] ;
  Bool_t anyModuleCreated=0 ;
  for (Int_t iModule = 0; iModule < 5 ; iModule++ ) {
    snprintf(im,5,"%d",iModule+1) ;
    if(strstr(GetTitle(),im)==0 && strcmp(GetTitle(),"IHEP")!=0 && strcmp(GetTitle(),"noCPV")!=0)
      continue ;
    anyModuleCreated=1 ;
    Float_t angle[3][2];
    for (iXYZ=0; iXYZ<3; iXYZ++)
      for (iAngle=0; iAngle<2; iAngle++)
	angle[iXYZ][iAngle] = geom->GetModuleAngle(iModule,iXYZ, iAngle);
    AliMatrix(idrotm[iModule],
	      angle[0][0],angle[0][1],
	      angle[1][0],angle[1][1],
	      angle[2][0],angle[2][1]) ;
    
    Float_t pos[3];
    for (iXYZ=0; iXYZ<3; iXYZ++)
      pos[iXYZ] = geom->GetModuleCenter(iModule,iXYZ);
    TVirtualMC::GetMC()->Gspos("PHOS", iModule+1, "ALIC", pos[0], pos[1], pos[2],
	       idrotm[iModule], "ONLY") ;
  }
  if(!anyModuleCreated)
    AliError("No one PHOS module was created") ;
}

//____________________________________________________________________________
void AliPHOSv0::CreateGeometryforEMC()
{
  // Create the PHOS-EMC geometry for GEANT
  // Author: Dmitri Peressounko August 2001
  // The used coordinate system: 
  //   1. in Module: X along longer side, Y out of beam, Z along shorter side (along beam)
  //   2. In Strip the same: X along longer side, Y out of beam, Z along shorter side (along beam)


    //BEGIN_HTML
  /*
    <H2>
    Geant3 geometry tree of PHOS-EMC in ALICE
    </H2>
    <P><CENTER>
    <IMG Align=BOTTOM ALT="EMC geant tree" SRC="../../images/EMCinAlice.gif"> 
    </CENTER><P>
  */
  //END_HTML  
  
  // Get pointer to the array containing media indexes
  Int_t *idtmed = fIdtmed->GetArray() - 699 ;

  AliPHOSGeometry * geom = GetGeometry() ; 
  AliPHOSEMCAGeometry * emcg = geom->GetEMCAGeometry() ;
  Float_t par[4];
  Int_t  ipar;

  // ======= Define the strip ===============

  for (ipar=0; ipar<3; ipar++) par[ipar] = *(emcg->GetStripHalfSize() + ipar);
  TVirtualMC::GetMC()->Gsvolu("PSTR", "BOX ", idtmed[716], par, 3) ;  //Made of steel
   
  // --- define steel volume (cell of the strip unit)
  for (ipar=0; ipar<3; ipar++) par[ipar] = *(emcg->GetAirCellHalfSize() + ipar);
  TVirtualMC::GetMC()->Gsvolu("PCEL", "BOX ", idtmed[798], par, 3);

  // --- define wrapped crystal and put it into steel cell

  for (ipar=0; ipar<3; ipar++) par[ipar] = *(emcg->GetWrappedHalfSize() + ipar);
  TVirtualMC::GetMC()->Gsvolu("PWRA", "BOX ", idtmed[702], par, 3);
  const Float_t * pin    = emcg->GetAPDHalfSize() ; 
  const Float_t * preamp = emcg->GetPreampHalfSize() ;
  Float_t y = (emcg->GetAirGapLed()-2*pin[1]-2*preamp[1])/2;
  TVirtualMC::GetMC()->Gspos("PWRA", 1, "PCEL", 0.0, y, 0.0, 0, "ONLY") ;
    
  // --- Define crystal and put it into wrapped crystall ---
  for (ipar=0; ipar<3; ipar++) par[ipar] = *(emcg->GetCrystalHalfSize() + ipar);
  TVirtualMC::GetMC()->Gsvolu("PXTL", "BOX ", idtmed[699], par, 3) ;
  TVirtualMC::GetMC()->Gspos("PXTL", 1, "PWRA", 0.0, 0.0, 0.0, 0, "ONLY") ;
      
  // --- define APD/PIN preamp and put it into AirCell
 
  for (ipar=0; ipar<3; ipar++) par[ipar] = *(emcg->GetAPDHalfSize() + ipar);
  TVirtualMC::GetMC()->Gsvolu("PPIN", "BOX ", idtmed[705], par, 3) ;
  const Float_t * crystal = emcg->GetCrystalHalfSize() ;
  y = crystal[1] + emcg->GetAirGapLed() /2 - preamp[1]; 
  TVirtualMC::GetMC()->Gspos("PPIN", 1, "PCEL", 0.0, y, 0.0, 0, "ONLY") ;
  for (ipar=0; ipar<3; ipar++) par[ipar] = *(emcg->GetPreampHalfSize() + ipar);
  TVirtualMC::GetMC()->Gsvolu("PREA", "BOX ", idtmed[711], par, 3) ;   // Here I assumed preamp as a printed Circuit
  y = crystal[1] + emcg->GetAirGapLed() /2 + pin[1]  ;    // May it should be changed
  TVirtualMC::GetMC()->Gspos("PREA", 1, "PCEL", 0.0, y, 0.0, 0, "ONLY") ; // to ceramics?
  
  
  // --- Fill strip with wrapped cristals in steel cells
  
  const Float_t* splate = emcg->GetSupportPlateHalfSize();  
  y = -splate[1] ;
  const Float_t* acel = emcg->GetAirCellHalfSize() ;
  
  for(Int_t lev = 2, icel = 1; 
      icel <= emcg->GetNCellsXInStrip()*emcg->GetNCellsZInStrip(); 
      icel += 2, lev += 2) {
    Float_t x = (2*(lev / 2) - 1 - emcg->GetNCellsXInStrip())* acel[0] ;
    Float_t z = acel[2];
    TVirtualMC::GetMC()->Gspos("PCEL", icel, "PSTR", x, y, +z, 0, "ONLY") ;
    TVirtualMC::GetMC()->Gspos("PCEL", icel + 1, "PSTR", x, y, -z, 0, "ONLY") ;
  }

  // --- define the support plate, hole in it and position it in strip ----
  for (ipar=0; ipar<3; ipar++) par[ipar] = *(emcg->GetSupportPlateHalfSize() + ipar);
  TVirtualMC::GetMC()->Gsvolu("PSUP", "BOX ", idtmed[701], par, 3) ;
  
  for (ipar=0; ipar<3; ipar++) par[ipar] = *(emcg->GetSupportPlateInHalfSize() + ipar);
  TVirtualMC::GetMC()->Gsvolu("PSHO", "BOX ", idtmed[798], par, 3) ;
  Float_t z = emcg->GetSupportPlateThickness()/2 ;
  TVirtualMC::GetMC()->Gspos("PSHO", 1, "PSUP", 0.0, 0.0, z, 0, "ONLY") ;

  y = acel[1] ;
  TVirtualMC::GetMC()->Gspos("PSUP", 1, "PSTR", 0.0, y, 0.0, 0, "ONLY") ;

  
  // ========== Fill module with strips and put them into inner thermoinsulation=============
  for (ipar=0; ipar<3; ipar++) par[ipar] = *(emcg->GetInnerThermoHalfSize() + ipar);
  TVirtualMC::GetMC()->Gsvolu("PTII", "BOX ", idtmed[706], par, 3) ;     
  
  const Float_t * inthermo = emcg->GetInnerThermoHalfSize() ;
  const Float_t * strip    = emcg->GetStripHalfSize() ;
  y = inthermo[1] - strip[1] ;
  Int_t irow;
  Int_t nr = 1 ;
  Int_t icol ;
  
  for(irow = 0; irow < emcg->GetNStripX(); irow ++){
    Float_t x = (2*irow + 1 - emcg->GetNStripX())* strip[0] ;
    for(icol = 0; icol < emcg->GetNStripZ(); icol ++){
      z = (2*icol + 1 - emcg->GetNStripZ()) * strip[2] ;
      TVirtualMC::GetMC()->Gspos("PSTR", nr, "PTII", x, y, z, 0, "ONLY") ;
      nr++ ;
    }
  }
  
  
  // ------- define the air gap between thermoinsulation and cooler
  for (ipar=0; ipar<3; ipar++) par[ipar] = *(emcg->GetAirGapHalfSize() + ipar);
  TVirtualMC::GetMC()->Gsvolu("PAGA", "BOX ", idtmed[798], par, 3) ;   
  const Float_t * agap = emcg->GetAirGapHalfSize() ;
  y = agap[1] - inthermo[1]  ;
  
  TVirtualMC::GetMC()->Gspos("PTII", 1, "PAGA", 0.0, y, 0.0, 0, "ONLY") ;


  // ------- define the Al passive cooler 
  for (ipar=0; ipar<3; ipar++) par[ipar] = *(emcg->GetCoolerHalfSize() + ipar);
  TVirtualMC::GetMC()->Gsvolu("PCOR", "BOX ", idtmed[701], par, 3) ;   
  const Float_t * cooler = emcg->GetCoolerHalfSize() ;
  y = cooler[1] - agap[1]  ;
  
  TVirtualMC::GetMC()->Gspos("PAGA", 1, "PCOR", 0.0, y, 0.0, 0, "ONLY") ;
  
  // ------- define the outer thermoinsulating cover
  for (ipar=0; ipar<4; ipar++) par[ipar] = *(emcg->GetOuterThermoParams() + ipar);
  TVirtualMC::GetMC()->Gsvolu("PTIO", "TRD1", idtmed[706], par, 4) ;        
  const Float_t * outparams = emcg->GetOuterThermoParams() ; 
  
  Int_t idrotm[99] ;
  AliMatrix(idrotm[1], 90.0, 0.0, 0.0, 0.0, 90.0, 270.0) ;
  // Frame in outer thermoinsulation and so on: z out of beam, y along beam, x across beam
  
  z = outparams[3] - cooler[1] ;
  TVirtualMC::GetMC()->Gspos("PCOR", 1, "PTIO", 0., 0.0, z, idrotm[1], "ONLY") ;
  
  // -------- Define the outer Aluminium cover -----
  for (ipar=0; ipar<4; ipar++) par[ipar] = *(emcg->GetAlCoverParams() + ipar);
  TVirtualMC::GetMC()->Gsvolu("PCOL", "TRD1", idtmed[701], par, 4) ;        
  const Float_t * covparams = emcg->GetAlCoverParams() ; 
  z = covparams[3] - outparams[3] ;
  TVirtualMC::GetMC()->Gspos("PTIO", 1, "PCOL", 0., 0.0, z, 0, "ONLY") ;

  // --------- Define front fiberglass cover -----------
  for (ipar=0; ipar<3; ipar++) par[ipar] = *(emcg->GetFiberGlassHalfSize() + ipar);
  TVirtualMC::GetMC()->Gsvolu("PFGC", "BOX ", idtmed[717], par, 3) ;  
  z = - outparams[3] ;
  TVirtualMC::GetMC()->Gspos("PFGC", 1, "PCOL", 0., 0.0, z, 0, "ONLY") ;

  //=============This is all with cold section==============
  

  //------ Warm Section --------------
  for (ipar=0; ipar<3; ipar++) par[ipar] = *(emcg->GetWarmAlCoverHalfSize() + ipar);
  TVirtualMC::GetMC()->Gsvolu("PWAR", "BOX ", idtmed[701], par, 3) ; 
  const Float_t * warmcov = emcg->GetWarmAlCoverHalfSize() ;
  
  // --- Define the outer thermoinsulation ---
  for (ipar=0; ipar<3; ipar++) par[ipar] = *(emcg->GetWarmThermoHalfSize() + ipar);
  TVirtualMC::GetMC()->Gsvolu("PWTI", "BOX ", idtmed[706], par, 3) ; 
  const Float_t * warmthermo = emcg->GetWarmThermoHalfSize() ;
  z = -warmcov[2] + warmthermo[2] ;
  
  TVirtualMC::GetMC()->Gspos("PWTI", 1, "PWAR", 0., 0.0, z, 0, "ONLY") ;     
  
  // --- Define cables area and put in it T-supports ---- 
  for (ipar=0; ipar<3; ipar++) par[ipar] = *(emcg->GetTCables1HalfSize() + ipar);
  TVirtualMC::GetMC()->Gsvolu("PCA1", "BOX ", idtmed[718], par, 3) ; 
  const Float_t * cbox = emcg->GetTCables1HalfSize() ;
  
  for (ipar=0; ipar<3; ipar++) par[ipar] = *(emcg->GetTSupport1HalfSize() + ipar);
  TVirtualMC::GetMC()->Gsvolu("PBE1", "BOX ", idtmed[701], par, 3) ;
  const Float_t * beams = emcg->GetTSupport1HalfSize() ;
  Int_t isup ;
  for(isup = 0; isup < emcg->GetNTSuppots(); isup++){
    Float_t x = -cbox[0] + beams[0] + (2*beams[0]+emcg->GetTSupportDist())*isup ;
    TVirtualMC::GetMC()->Gspos("PBE1", isup, "PCA1", x, 0.0, 0.0, 0, "ONLY") ;
  }
  
  z = -warmthermo[2] + cbox[2];
  TVirtualMC::GetMC()->Gspos("PCA1", 1, "PWTI", 0.0, 0.0, z, 0, "ONLY") ;     
  
  for (ipar=0; ipar<3; ipar++) par[ipar] = *(emcg->GetTCables2HalfSize() + ipar);
  TVirtualMC::GetMC()->Gsvolu("PCA2", "BOX ", idtmed[718], par, 3) ; 
  const Float_t * cbox2 = emcg->GetTCables2HalfSize() ;
  
  for (ipar=0; ipar<3; ipar++) par[ipar] = *(emcg->GetTSupport2HalfSize() + ipar);
  TVirtualMC::GetMC()->Gsvolu("PBE2", "BOX ", idtmed[701], par, 3) ;
  for(isup = 0; isup < emcg->GetNTSuppots(); isup++){
    Float_t x = -cbox[0] + beams[0] + (2*beams[0]+emcg->GetTSupportDist())*isup ;
    TVirtualMC::GetMC()->Gspos("PBE2", isup, "PCA2", x, 0.0, 0.0, 0, "ONLY") ;
  }
  
  z = -warmthermo[2] + 2*cbox[2] + cbox2[2];
  TVirtualMC::GetMC()->Gspos("PCA2", 1, "PWTI", 0.0, 0.0, z, 0, "ONLY") ;     
  
  
  // --- Define frame ---
  for (ipar=0; ipar<3; ipar++) par[ipar] = *(emcg->GetFrameXHalfSize() + ipar);
  TVirtualMC::GetMC()->Gsvolu("PFRX", "BOX ", idtmed[716], par, 3) ; 
  const Float_t * posit1 = emcg->GetFrameXPosition() ;
  TVirtualMC::GetMC()->Gspos("PFRX", 1, "PWTI", posit1[0],  posit1[1], posit1[2], 0, "ONLY") ;
  TVirtualMC::GetMC()->Gspos("PFRX", 2, "PWTI", posit1[0], -posit1[1], posit1[2], 0, "ONLY") ;
  
  for (ipar=0; ipar<3; ipar++) par[ipar] = *(emcg->GetFrameZHalfSize() + ipar);
  TVirtualMC::GetMC()->Gsvolu("PFRZ", "BOX ", idtmed[716], par, 3) ; 
  const Float_t * posit2 = emcg->GetFrameZPosition() ;
  TVirtualMC::GetMC()->Gspos("PFRZ", 1, "PWTI",  posit2[0], posit2[1], posit2[2], 0, "ONLY") ;
  TVirtualMC::GetMC()->Gspos("PFRZ", 2, "PWTI", -posit2[0], posit2[1], posit2[2], 0, "ONLY") ;

 // --- Define Fiber Glass support ---
  for (ipar=0; ipar<3; ipar++) par[ipar] = *(emcg->GetFGupXHalfSize() + ipar);
  TVirtualMC::GetMC()->Gsvolu("PFG1", "BOX ", idtmed[717], par, 3) ; 
  const Float_t * posit3 = emcg->GetFGupXPosition() ;
  TVirtualMC::GetMC()->Gspos("PFG1", 1, "PWTI", posit3[0],  posit3[1], posit3[2], 0, "ONLY") ;
  TVirtualMC::GetMC()->Gspos("PFG1", 2, "PWTI", posit3[0], -posit3[1], posit3[2], 0, "ONLY") ;

  for (ipar=0; ipar<3; ipar++) par[ipar] = *(emcg->GetFGupZHalfSize() + ipar);
  TVirtualMC::GetMC()->Gsvolu("PFG2", "BOX ", idtmed[717], par, 3) ; 
  const Float_t * posit4 = emcg->GetFGupZPosition();
  TVirtualMC::GetMC()->Gspos("PFG2", 1, "PWTI",  posit4[0], posit4[1], posit4[2], 0, "ONLY") ;
  TVirtualMC::GetMC()->Gspos("PFG2", 2, "PWTI", -posit4[0], posit4[1], posit4[2], 0, "ONLY") ;

  for (ipar=0; ipar<3; ipar++) par[ipar] = *(emcg->GetFGlowXHalfSize() + ipar);
  TVirtualMC::GetMC()->Gsvolu("PFG3", "BOX ", idtmed[717], par, 3) ; 
  const Float_t * posit5 = emcg->GetFGlowXPosition() ;
  TVirtualMC::GetMC()->Gspos("PFG3", 1, "PWTI", posit5[0],  posit5[1], posit5[2], 0, "ONLY") ;
  TVirtualMC::GetMC()->Gspos("PFG3", 2, "PWTI", posit5[0], -posit5[1], posit5[2], 0, "ONLY") ;

  for (ipar=0; ipar<3; ipar++) par[ipar] = *(emcg->GetFGlowZHalfSize() + ipar);
  TVirtualMC::GetMC()->Gsvolu("PFG4", "BOX ", idtmed[717], par, 3) ; 
  const Float_t * posit6 = emcg->GetFGlowZPosition() ;
  TVirtualMC::GetMC()->Gspos("PFG4", 1, "PWTI",  posit6[0], posit6[1], posit6[2], 0, "ONLY") ;
  TVirtualMC::GetMC()->Gspos("PFG4", 2, "PWTI", -posit6[0], posit6[1], posit6[2], 0, "ONLY") ;

  // --- Define Air Gap for FEE electronics ----- 
  
  for (ipar=0; ipar<3; ipar++) par[ipar] = *(emcg->GetFEEAirHalfSize() + ipar);
  TVirtualMC::GetMC()->Gsvolu("PAFE", "BOX ", idtmed[798], par, 3) ; 
  const Float_t * posit7 = emcg->GetFEEAirPosition() ;
  TVirtualMC::GetMC()->Gspos("PAFE", 1, "PWTI",  posit7[0], posit7[1], posit7[2], 0, "ONLY") ;
  
  // Define the EMC module volume and combine Cool and Warm sections
  
  for (ipar=0; ipar<4; ipar++) par[ipar] = *(emcg->GetEMCParams() + ipar);
  TVirtualMC::GetMC()->Gsvolu("PEMC", "TRD1", idtmed[798], par, 4) ;        
  z =  - warmcov[2] ;
  TVirtualMC::GetMC()->Gspos("PCOL", 1, "PEMC",  0., 0., z, 0, "ONLY") ;
  z = covparams[3] ;
  TVirtualMC::GetMC()->Gspos("PWAR", 1, "PEMC",  0., 0., z, 0, "ONLY") ;
  
  
  // Put created EMC geometry into PHOS volume
  
  z = geom->GetCPVBoxSize(1) / 2. ;
  TVirtualMC::GetMC()->Gspos("PEMC", 1, "PHOS", 0., 0., z, 0, "ONLY") ; 
  
}

//____________________________________________________________________________
void AliPHOSv0::CreateGeometryforCPV()
{
  // Create the PHOS-CPV geometry for GEANT
  // Author: Yuri Kharlov 11 September 2000
  //BEGIN_HTML
  /*
    <H2>
    Geant3 geometry of PHOS-CPV in ALICE
    </H2>
    <table width=700>

    <tr>
         <td>CPV perspective view</td>
         <td>CPV front view      </td>
    </tr>

    <tr>
         <td> <img height=300 width=290 src="../../images/CPVallPersp.gif"> </td>
         <td> <img height=300 width=290 src="../../images/CPVallFront.gif"> </td>
    </tr>

    <tr>
         <td>One CPV module, perspective view                            </td>
         <td>One CPV module, front view (extended in vertical direction) </td>
    </tr>

    <tr>
         <td><img height=300 width=290 src="../../images/CPVmodulePers.gif"></td>
         <td><img height=300 width=290 src="../../images/CPVmoduleSide.gif"></td>
    </tr>

    </table>

    <H2>
    Geant3 geometry tree of PHOS-CPV in ALICE
    </H2>
    <center>
    <img height=300 width=290 src="../../images/CPVtree.gif">
    </center>
  */
  //END_HTML  

  Float_t par[3], x,y,z;

  // Get pointer to the array containing media indexes
  Int_t *idtmed = fIdtmed->GetArray() - 699 ;

  AliPHOSGeometry * geom = GetGeometry() ; 

  // The box containing all CPV for one PHOS module filled with air 
  par[0] = geom->GetCPVBoxSize(0) / 2.0 ;  
  par[1] = geom->GetCPVBoxSize(1) / 2.0 ; 
  par[2] = geom->GetCPVBoxSize(2) / 2.0 ;
  TVirtualMC::GetMC()->Gsvolu("PCPV", "BOX ", idtmed[798], par, 3) ;

  const Float_t * emcParams = geom->GetEMCAGeometry()->GetEMCParams() ;
  z = - emcParams[3] ;
  Int_t rotm ;
  AliMatrix(rotm, 90.,0., 0., 0., 90., 90.) ;

  TVirtualMC::GetMC()->Gspos("PCPV", 1, "PHOS", 0.0, 0.0, z, rotm, "ONLY") ; 
  
  // Gassiplex board
  
  par[0] = geom->GetGassiplexChipSize(0)/2.;
  par[1] = geom->GetGassiplexChipSize(1)/2.;
  par[2] = geom->GetGassiplexChipSize(2)/2.;
  TVirtualMC::GetMC()->Gsvolu("PCPC","BOX ",idtmed[707],par,3);
  
  // Cu+Ni foil covers Gassiplex board

  par[1] = geom->GetCPVCuNiFoilThickness()/2;
  TVirtualMC::GetMC()->Gsvolu("PCPD","BOX ",idtmed[710],par,3);
  y      = -(geom->GetGassiplexChipSize(1)/2 - par[1]);
  TVirtualMC::GetMC()->Gspos("PCPD",1,"PCPC",0,y,0,0,"ONLY");

  // Position of the chip inside CPV

  Float_t xStep = geom->GetCPVActiveSize(0) / (geom->GetNumberOfCPVChipsPhi() + 1);
  Float_t zStep = geom->GetCPVActiveSize(1) / (geom->GetNumberOfCPVChipsZ()   + 1);
  Int_t   copy  = 0;
  y = geom->GetCPVFrameSize(1)/2           - geom->GetFTPosition(0) +
    geom->GetCPVTextoliteThickness() / 2 + geom->GetGassiplexChipSize(1) / 2 + 0.1;
  for (Int_t ix=0; ix<geom->GetNumberOfCPVChipsPhi(); ix++) {
    x = xStep * (ix+1) - geom->GetCPVActiveSize(0)/2;
    for (Int_t iz=0; iz<geom->GetNumberOfCPVChipsZ(); iz++) {
      copy++;
      z = zStep * (iz+1) - geom->GetCPVActiveSize(1)/2;
      TVirtualMC::GetMC()->Gspos("PCPC",copy,"PCPV",x,y,z,0,"ONLY");
    }
  }

  // Foiled textolite (1 mm of textolite + 50 mkm of Cu + 6 mkm of Ni)
  
  par[0] = geom->GetCPVActiveSize(0)        / 2;
  par[1] = geom->GetCPVTextoliteThickness() / 2;
  par[2] = geom->GetCPVActiveSize(1)        / 2;
  TVirtualMC::GetMC()->Gsvolu("PCPF","BOX ",idtmed[707],par,3);

  // Argon gas volume

  par[1] = (geom->GetFTPosition(2) - geom->GetFTPosition(1) - geom->GetCPVTextoliteThickness()) / 2;
  TVirtualMC::GetMC()->Gsvolu("PCPG","BOX ",idtmed[715],par,3);

  for (Int_t i=0; i<4; i++) {
    y = geom->GetCPVFrameSize(1) / 2 - geom->GetFTPosition(i) + geom->GetCPVTextoliteThickness()/2;
    TVirtualMC::GetMC()->Gspos("PCPF",i+1,"PCPV",0,y,0,0,"ONLY");
    if(i==1){
      y-= (geom->GetFTPosition(2) - geom->GetFTPosition(1)) / 2;
      TVirtualMC::GetMC()->Gspos("PCPG",1,"PCPV ",0,y,0,0,"ONLY");
    }
  }

  // Dummy sensitive plane in the middle of argone gas volume

  par[1]=0.001;
  TVirtualMC::GetMC()->Gsvolu("PCPQ","BOX ",idtmed[715],par,3);
  TVirtualMC::GetMC()->Gspos ("PCPQ",1,"PCPG",0,0,0,0,"ONLY");

  // Cu+Ni foil covers textolite

  par[1] = geom->GetCPVCuNiFoilThickness() / 2;
  TVirtualMC::GetMC()->Gsvolu("PCP1","BOX ",idtmed[710],par,3);
  y = geom->GetCPVTextoliteThickness()/2 - par[1];
  TVirtualMC::GetMC()->Gspos ("PCP1",1,"PCPF",0,y,0,0,"ONLY");

  // Aluminum frame around CPV

  par[0] = geom->GetCPVFrameSize(0)/2;
  par[1] = geom->GetCPVFrameSize(1)/2;
  par[2] = geom->GetCPVBoxSize(2)  /2;
  TVirtualMC::GetMC()->Gsvolu("PCF1","BOX ",idtmed[701],par,3);

  par[0] = geom->GetCPVBoxSize(0)/2 - geom->GetCPVFrameSize(0);
  par[1] = geom->GetCPVFrameSize(1)/2;
  par[2] = geom->GetCPVFrameSize(2)/2;
  TVirtualMC::GetMC()->Gsvolu("PCF2","BOX ",idtmed[701],par,3);

  for (Int_t j=0; j<=1; j++) {
    x = TMath::Sign(1,2*j-1) * (geom->GetCPVBoxSize(0) - geom->GetCPVFrameSize(0)) / 2;
    TVirtualMC::GetMC()->Gspos("PCF1",j+1,"PCPV", x,0,0,0,"ONLY");
    z = TMath::Sign(1,2*j-1) * (geom->GetCPVBoxSize(2) - geom->GetCPVFrameSize(2)) / 2;
    TVirtualMC::GetMC()->Gspos("PCF2",j+1,"PCPV",0, 0,z,0,"ONLY");
  }

}


//____________________________________________________________________________
void AliPHOSv0::CreateGeometryforSupport()
{
  // Create the PHOS' support geometry for GEANT
    //BEGIN_HTML
  /*
    <H2>
    Geant3 geometry of the PHOS's support
    </H2>
    <P><CENTER>
    <IMG Align=BOTTOM ALT="EMC geant tree" SRC="../../images/PHOS_support.gif"> 
    </CENTER><P>
  */
  //END_HTML  
  
  Float_t par[5], x0,y0,z0 ; 
  Int_t   i,j,copy;

  // Get pointer to the array containing media indexes
  Int_t *idtmed = fIdtmed->GetArray() - 699 ;

  AliPHOSGeometry * geom = GetGeometry() ; 

  // --- Dummy box containing two rails on which PHOS support moves
  // --- Put these rails to the bottom of the L3 magnet

  par[0] =  geom->GetRailRoadSize(0) / 2.0 ;
  par[1] =  geom->GetRailRoadSize(1) / 2.0 ;
  par[2] =  geom->GetRailRoadSize(2) / 2.0 ;
  TVirtualMC::GetMC()->Gsvolu("PRRD", "BOX ", idtmed[798], par, 3) ;

  y0     = -(geom->GetRailsDistanceFromIP() - geom->GetRailRoadSize(1) / 2.0) ;
  TVirtualMC::GetMC()->Gspos("PRRD", 1, "ALIC", 0.0, y0, 0.0, 0, "ONLY") ; 

  // --- Dummy box containing one rail

  par[0] =  geom->GetRailOuterSize(0) / 2.0 ;
  par[1] =  geom->GetRailOuterSize(1) / 2.0 ;
  par[2] =  geom->GetRailOuterSize(2) / 2.0 ;
  TVirtualMC::GetMC()->Gsvolu("PRAI", "BOX ", idtmed[798], par, 3) ;

  for (i=0; i<2; i++) {
    x0     = (2*i-1) * geom->GetDistanceBetwRails()  / 2.0 ;
    TVirtualMC::GetMC()->Gspos("PRAI", i, "PRRD", x0, 0.0, 0.0, 0, "ONLY") ; 
  }

  // --- Upper and bottom steel parts of the rail

  par[0] =  geom->GetRailPart1(0) / 2.0 ;
  par[1] =  geom->GetRailPart1(1) / 2.0 ;
  par[2] =  geom->GetRailPart1(2) / 2.0 ;
  TVirtualMC::GetMC()->Gsvolu("PRP1", "BOX ", idtmed[716], par, 3) ;

  y0     = - (geom->GetRailOuterSize(1) - geom->GetRailPart1(1))  / 2.0 ;
  TVirtualMC::GetMC()->Gspos("PRP1", 1, "PRAI", 0.0, y0, 0.0, 0, "ONLY") ;
  y0     =   (geom->GetRailOuterSize(1) - geom->GetRailPart1(1))  / 2.0 - geom->GetRailPart3(1);
  TVirtualMC::GetMC()->Gspos("PRP1", 2, "PRAI", 0.0, y0, 0.0, 0, "ONLY") ;

  // --- The middle vertical steel parts of the rail

  par[0] =  geom->GetRailPart2(0) / 2.0 ;
  par[1] =  geom->GetRailPart2(1) / 2.0 ;
  par[2] =  geom->GetRailPart2(2) / 2.0 ;
  TVirtualMC::GetMC()->Gsvolu("PRP2", "BOX ", idtmed[716], par, 3) ;

  y0     =   - geom->GetRailPart3(1) / 2.0 ;
  TVirtualMC::GetMC()->Gspos("PRP2", 1, "PRAI", 0.0, y0, 0.0, 0, "ONLY") ; 

  // --- The most upper steel parts of the rail

  par[0] =  geom->GetRailPart3(0) / 2.0 ;
  par[1] =  geom->GetRailPart3(1) / 2.0 ;
  par[2] =  geom->GetRailPart3(2) / 2.0 ;
  TVirtualMC::GetMC()->Gsvolu("PRP3", "BOX ", idtmed[716], par, 3) ;

  y0     =   (geom->GetRailOuterSize(1) - geom->GetRailPart3(1))  / 2.0 ;
  TVirtualMC::GetMC()->Gspos("PRP3", 1, "PRAI", 0.0, y0, 0.0, 0, "ONLY") ; 

  // --- The wall of the cradle
  // --- The wall is empty: steel thin walls and air inside

  par[1] =  TMath::Sqrt(TMath::Power((geom->GetIPtoCPVDistance() + geom->GetOuterBoxSize(3)),2) +
			TMath::Power((geom->GetOuterBoxSize(1)/2),2))+10. ;
  par[0] =  par[1] - geom->GetCradleWall(1) ;
  par[2] =  geom->GetCradleWall(2) / 2.0 ;
  par[3] =  geom->GetCradleWall(3) ;
  par[4] =  geom->GetCradleWall(4) ;
  TVirtualMC::GetMC()->Gsvolu("PCRA", "TUBS", idtmed[716], par, 5) ;

  par[0] +=  geom->GetCradleWallThickness() ;
  par[1] -=  geom->GetCradleWallThickness() ;
  par[2] -=  geom->GetCradleWallThickness() ;
  TVirtualMC::GetMC()->Gsvolu("PCRE", "TUBS", idtmed[798], par, 5) ;
  TVirtualMC::GetMC()->Gspos ("PCRE", 1, "PCRA", 0.0, 0.0, 0.0, 0, "ONLY") ; 

  for (i=0; i<2; i++) {
    z0 = (2*i-1) * (geom->GetOuterBoxSize(2) + geom->GetCradleWall(2) )/ 2.0  ;
        TVirtualMC::GetMC()->Gspos("PCRA", i, "ALIC", 0.0, 0.0, z0, 0, "ONLY") ; 
  }

  // --- The "wheels" of the cradle
  
  par[0] = geom->GetCradleWheel(0) / 2;
  par[1] = geom->GetCradleWheel(1) / 2;
  par[2] = geom->GetCradleWheel(2) / 2;
  TVirtualMC::GetMC()->Gsvolu("PWHE", "BOX ", idtmed[716], par, 3) ;

  y0 = -(geom->GetRailsDistanceFromIP() - geom->GetRailRoadSize(1) -
	 geom->GetCradleWheel(1)/2) ;
  for (i=0; i<2; i++) {
    z0 = (2*i-1) * ((geom->GetOuterBoxSize(2) + geom->GetCradleWheel(2))/ 2.0 +
                    geom->GetCradleWall(2));
    for (j=0; j<2; j++) {
      copy = 2*i + j;
      x0 = (2*j-1) * geom->GetDistanceBetwRails()  / 2.0 ;
      TVirtualMC::GetMC()->Gspos("PWHE", copy, "ALIC", x0, y0, z0, 0, "ONLY") ; 
    }
  }

}

//_____________________________________________________________________________
void AliPHOSv0::AddAlignableVolumes() const
{
  //
  // Create entries for alignable volumes associating the symbolic volume
  // name with the corresponding volume path. Needs to be syncronized with
  // eventual changes in the geometry
  // Alignable volumes are:
  // 1) PHOS modules as a whole
  // 2) Cradle
  // 3) Cradle wheels
  // 4) Strip units (group of 2x8 crystals)

  TString volpath, symname;

  // Alignable modules
  // Volume path /ALIC_1/PHOS_<i> => symbolic name /PHOS/Module<i>, <i>=1,2,3,4,5
  
  AliGeomManager::ELayerID idPHOS1 = AliGeomManager::kPHOS1;
  AliGeomManager::ELayerID idPHOS2 = AliGeomManager::kPHOS2;
  Int_t modUID, modnum = 0;
  TString physModulePath="/ALIC_1/PHOS_";
  TString symbModuleName="PHOS/Module";
  Int_t nModules = GetGeometry()->GetNModules();
  
  char im[5] ;
  for(Int_t iModule=1; iModule<=nModules; iModule++){
    snprintf(im,5,"%d",iModule) ;
    modUID = AliGeomManager::LayerToVolUID(idPHOS1,modnum++);
    if(strstr(GetTitle(),im)==0 && strcmp(GetTitle(),"IHEP")!=0 && strcmp(GetTitle(),"noCPV")!=0)
      continue ;
    volpath = physModulePath;
    volpath += iModule;
    //    volpath += "/PEMC_1/PCOL_1/PTIO_1/PCOR_1/PAGA_1/PTII_1";
 
   // Check the volume path if not all 5 modules exist
    if (!gGeoManager->CheckPath(volpath.Data())) {                                                                                         
      AliError(Form("Volume path %s not valid!",volpath.Data()));                                                                          
      continue;                                                                                                                            
    }                                                                                                                                      
 
    symname = symbModuleName;
    symname += iModule;
    if(!gGeoManager->SetAlignableEntry(symname.Data(),volpath.Data(),modUID))
      continue ;
//      AliFatal(Form("Alignable entry %s not created. Volume path %s not valid", symname.Data(),volpath.Data()));

    // Creates the Tracking to Local transformation matrix for PHOS modules
    TGeoPNEntry *alignableEntry = gGeoManager->GetAlignableEntryByUID(modUID) ;

    Float_t angle = GetGeometry()->GetPHOSAngle(iModule);
    TGeoHMatrix* globMatrix = alignableEntry->GetGlobalOrig();

    TGeoHMatrix *matTtoL = new TGeoHMatrix;
    matTtoL->RotateZ(-90.+angle);
    matTtoL->MultiplyLeft(&(globMatrix->Inverse()));
    alignableEntry->SetMatrix(matTtoL);
  }

  //Aligning of CPV should be done for volume PCPV_1
  symbModuleName="PHOS/Module";
  modnum=0;
  for(Int_t iModule=1; iModule<=nModules; iModule++){
    if(strstr(GetTitle(),"noCPV"))
      continue ;
    snprintf(im,5,"%d",iModule) ;
    modUID = AliGeomManager::LayerToVolUID(idPHOS2,modnum++);
    if(strstr(GetTitle(),im)==0 && strcmp(GetTitle(),"IHEP")!=0)
      continue ;
    volpath = physModulePath;
    volpath += iModule;
    volpath += "/PCPV_1";
    // Check the volume path
    if (!gGeoManager->CheckPath(volpath.Data())) {
      AliError(Form("Volume path %s not valid!",volpath.Data()));
      continue;
    }

    symname = symbModuleName;
    symname += iModule;
    symname += "/CPV";
    if(!gGeoManager->SetAlignableEntry(symname.Data(),volpath.Data(),modUID))
      AliFatal(Form("Alignable entry %s not created. Volume path %s not valid", symname.Data(),volpath.Data()));
          
    // Creates the TGeo Local to Tracking transformation matrix ...
    TGeoPNEntry *alignableEntry = gGeoManager->GetAlignableEntryByUID(modUID) ;

    Float_t angle = GetGeometry()->GetPHOSAngle(iModule);
    TGeoHMatrix* globMatrix = alignableEntry->GetGlobalOrig();

    TGeoHMatrix *matTtoL = new TGeoHMatrix;
    matTtoL->RotateZ(-90.+angle);
    matTtoL->MultiplyLeft(&(globMatrix->Inverse()));
    alignableEntry->SetMatrix(matTtoL);
    
  }
 

  // Alignable cradle walls
  // Volume path /ALIC_1/PCRA_<i> => symbolic name /PHOS/Cradle<i>, <i>=0,1

  TString physCradlePath="/ALIC_1/PCRA_";
  TString symbCradleName="PHOS/Cradle";
  Int_t nCradles = 2;

  for(Int_t iCradle=0; iCradle<nCradles; iCradle++){
    volpath = physCradlePath;
    volpath += iCradle;
    symname = symbCradleName;
    symname += iCradle;
    gGeoManager->SetAlignableEntry(symname.Data(),volpath.Data());
  }

  // Alignable wheels
  // Volume path /ALIC_1/PWHE_<i> => symbolic name /PHOS/Wheel<i>, i=0,1,2,3

  TString physWheelPath="/ALIC_1/PWHE_";
  TString symbWheelName="PHOS/Wheel";
  Int_t nWheels = 4;

  for(Int_t iWheel=0; iWheel<nWheels; iWheel++){
    volpath = physWheelPath;
    volpath += iWheel;
    symname = symbWheelName;
    symname += iWheel;
    gGeoManager->SetAlignableEntry(symname.Data(),volpath.Data());
  }

  //Physical strip path is a combination of: physModulePath + module number + 
  //physStripPath + strip number == ALIC_1/PHOS_N/..../PSTR_M
  const Int_t nStripsX = GetGeometry()->GetEMCAGeometry()->GetNStripX();
  const Int_t nStripsZ = GetGeometry()->GetEMCAGeometry()->GetNStripZ();
  TString partialPhysStripName(100);
  TString fullPhysStripName(100);
  TString partialSymbStripName(100);
  TString fullSymbStripName(100);

  for(Int_t module = 1; module <= nModules; ++module){

    snprintf(im,5,"%d",module) ;
    if(strstr(GetTitle(),im)==0 && strcmp(GetTitle(),"IHEP")!=0 && strcmp(GetTitle(),"noCPV")!=0)
      continue ;

    volpath = physModulePath;
    volpath += module;
    // Check the volume path if not all 5 modules exist
    if (!gGeoManager->CheckPath(volpath.Data())) {
      AliError(Form("Volume path %s does not exist",volpath.Data())) ;
      continue;
    }

    partialPhysStripName  = physModulePath;
    partialPhysStripName += module;
    partialPhysStripName += "/PEMC_1/PCOL_1/PTIO_1/PCOR_1/PAGA_1/PTII_1/PSTR_";

    partialSymbStripName  = symbModuleName;
    partialSymbStripName += module;
    partialSymbStripName += "/Strip_";

    for(Int_t i = 0, ind1D = 1; i < nStripsX; ++i){//ind1D starts from 1 (PSTR_1...PSTR_224...)
      for(Int_t j = 0; j < nStripsZ; ++j, ++ind1D){
         fullPhysStripName = partialPhysStripName;
         fullPhysStripName += ind1D;
         
         fullSymbStripName  = partialSymbStripName;
         fullSymbStripName += i;//ind1D;
         fullSymbStripName += '_';
         fullSymbStripName += j;

         gGeoManager->SetAlignableEntry(fullSymbStripName.Data(), fullPhysStripName.Data());

         // Creates the TGeo Local to Tracking transformation matrix ...
         TGeoPNEntry *alignableEntry = gGeoManager->GetAlignableEntry(fullSymbStripName.Data()) ;
         const char *path = alignableEntry->GetTitle();
         if (!gGeoManager->cd(path))
           AliFatal(Form("Volume path %s not valid!",path));
         TGeoHMatrix matLtoT = *gGeoManager->GetCurrentMatrix() ;
         Double_t refl[3]={-1.,-1.,-1.} ;
         matLtoT.SetScale(refl) ;
         TGeoHMatrix *matTtoL = new TGeoHMatrix(matLtoT.Inverse());
 
         char phosPath[50] ;
         snprintf(phosPath,50,"/ALIC_1/PHOS_%d",module) ;
         if (!gGeoManager->cd(phosPath)){
            AliFatal("Geo manager can not find path \n");
         }
         TGeoHMatrix *mPHOS = gGeoManager->GetCurrentMatrix();
         if (mPHOS) 
           matTtoL->Multiply(mPHOS);
         else{
           AliFatal("Geo matrixes are not loaded \n") ;
         }
         //Switch y<->z
         Double_t rot[9]={1.,0.,0.,  0.,1.,0., 0.,0.,1.} ;
         matTtoL->SetRotation(rot) ;
         alignableEntry->SetMatrix(matTtoL);

/*
  //Check poisition of corner cell of the strip
  AliPHOSGeometry * geom = AliPHOSGeometry::GetInstance() ;
  Int_t relid[4] ; 
  relid[0] = module ;
  relid[1] = 0 ;
  Int_t iStrip=ind1D ;
  Int_t icell=1 ;
  Int_t raw = geom->GetEMCAGeometry()->GetNCellsXInStrip()*((iStrip-1)/geom->GetEMCAGeometry()->GetNStripZ()) +
                1 + (icell-1)/geom->GetEMCAGeometry()->GetNCellsZInStrip() ;
  Int_t col = geom->GetEMCAGeometry()->GetNCellsZInStrip()*(1+(iStrip-1)%geom->GetEMCAGeometry()->GetNStripZ()) - 
                (icell-1)%geom->GetEMCAGeometry()->GetNCellsZInStrip() ;
  if(col==0) col=geom->GetNZ() ;
  relid[2] = raw ;
  relid[3] = col ;
  Float_t xG,zG ; 
  geom->RelPosInModule(relid, xG, zG) ;
printf("============\n") ;
printf("Geometry: x=%f, z=%f \n",xG,zG) ;
  Int_t absid ; 
  geom->RelToAbsNumbering(relid,absid) ;
  Double_t pos[3]= {-2.2*3.5,0.0,1.1}; //Position incide the strip (Y coordinalte is not important)
  Double_t posC[3]={0.0,0.0,0.}; //Global position
 
  matTtoL->MasterToLocal(pos,posC);
printf("Matrix:   x=%f, z=%f, y=%f \n",posC[0],posC[2],posC[1]) ;
*/
      }
    }
  }
}

//____________________________________________________________________________
Float_t AliPHOSv0::ZMin(void) const
{
  // Overall dimension of the PHOS (min)

  AliPHOSGeometry * geom = GetGeometry() ; 

  return -geom->GetOuterBoxSize(2)/2.;
}

//____________________________________________________________________________
Float_t AliPHOSv0::ZMax(void) const
{
  // Overall dimension of the PHOS (max)

  AliPHOSGeometry * geom = GetGeometry() ; 

  return  geom->GetOuterBoxSize(2)/2.;
}

//____________________________________________________________________________
void AliPHOSv0::Init(void)
{
  // Just prints an information message
  
  Int_t i;

  if(AliLog::GetGlobalDebugLevel()>0) {
    TString st ; 
    for(i=0;i<35;i++) 
      st += "*";
    Info("Init", "%s", st.Data()) ;  
    // Here the PHOS initialisation code (if any!)
    
    AliPHOSGeometry * geom = GetGeometry() ; 

    if (geom!=0)  
      Info("Init", "AliPHOS%s: PHOS geometry intialized for %s", Version().Data(), geom->GetName()) ;
    else
      Info("Init", "AliPHOS%s: PHOS geometry initialization failed !", Version().Data()) ;       

    Info("Init", "%s", st.Data()) ;  
  }
}
 AliPHOSv0.cxx:1
 AliPHOSv0.cxx:2
 AliPHOSv0.cxx:3
 AliPHOSv0.cxx:4
 AliPHOSv0.cxx:5
 AliPHOSv0.cxx:6
 AliPHOSv0.cxx:7
 AliPHOSv0.cxx:8
 AliPHOSv0.cxx:9
 AliPHOSv0.cxx:10
 AliPHOSv0.cxx:11
 AliPHOSv0.cxx:12
 AliPHOSv0.cxx:13
 AliPHOSv0.cxx:14
 AliPHOSv0.cxx:15
 AliPHOSv0.cxx:16
 AliPHOSv0.cxx:17
 AliPHOSv0.cxx:18
 AliPHOSv0.cxx:19
 AliPHOSv0.cxx:20
 AliPHOSv0.cxx:21
 AliPHOSv0.cxx:22
 AliPHOSv0.cxx:23
 AliPHOSv0.cxx:24
 AliPHOSv0.cxx:25
 AliPHOSv0.cxx:26
 AliPHOSv0.cxx:27
 AliPHOSv0.cxx:28
 AliPHOSv0.cxx:29
 AliPHOSv0.cxx:30
 AliPHOSv0.cxx:31
 AliPHOSv0.cxx:32
 AliPHOSv0.cxx:33
 AliPHOSv0.cxx:34
 AliPHOSv0.cxx:35
 AliPHOSv0.cxx:36
 AliPHOSv0.cxx:37
 AliPHOSv0.cxx:38
 AliPHOSv0.cxx:39
 AliPHOSv0.cxx:40
 AliPHOSv0.cxx:41
 AliPHOSv0.cxx:42
 AliPHOSv0.cxx:43
 AliPHOSv0.cxx:44
 AliPHOSv0.cxx:45
 AliPHOSv0.cxx:46
 AliPHOSv0.cxx:47
 AliPHOSv0.cxx:48
 AliPHOSv0.cxx:49
 AliPHOSv0.cxx:50
 AliPHOSv0.cxx:51
 AliPHOSv0.cxx:52
 AliPHOSv0.cxx:53
 AliPHOSv0.cxx:54
 AliPHOSv0.cxx:55
 AliPHOSv0.cxx:56
 AliPHOSv0.cxx:57
 AliPHOSv0.cxx:58
 AliPHOSv0.cxx:59
 AliPHOSv0.cxx:60
 AliPHOSv0.cxx:61
 AliPHOSv0.cxx:62
 AliPHOSv0.cxx:63
 AliPHOSv0.cxx:64
 AliPHOSv0.cxx:65
 AliPHOSv0.cxx:66
 AliPHOSv0.cxx:67
 AliPHOSv0.cxx:68
 AliPHOSv0.cxx:69
 AliPHOSv0.cxx:70
 AliPHOSv0.cxx:71
 AliPHOSv0.cxx:72
 AliPHOSv0.cxx:73
 AliPHOSv0.cxx:74
 AliPHOSv0.cxx:75
 AliPHOSv0.cxx:76
 AliPHOSv0.cxx:77
 AliPHOSv0.cxx:78
 AliPHOSv0.cxx:79
 AliPHOSv0.cxx:80
 AliPHOSv0.cxx:81
 AliPHOSv0.cxx:82
 AliPHOSv0.cxx:83
 AliPHOSv0.cxx:84
 AliPHOSv0.cxx:85
 AliPHOSv0.cxx:86
 AliPHOSv0.cxx:87
 AliPHOSv0.cxx:88
 AliPHOSv0.cxx:89
 AliPHOSv0.cxx:90
 AliPHOSv0.cxx:91
 AliPHOSv0.cxx:92
 AliPHOSv0.cxx:93
 AliPHOSv0.cxx:94
 AliPHOSv0.cxx:95
 AliPHOSv0.cxx:96
 AliPHOSv0.cxx:97
 AliPHOSv0.cxx:98
 AliPHOSv0.cxx:99
 AliPHOSv0.cxx:100
 AliPHOSv0.cxx:101
 AliPHOSv0.cxx:102
 AliPHOSv0.cxx:103
 AliPHOSv0.cxx:104
 AliPHOSv0.cxx:105
 AliPHOSv0.cxx:106
 AliPHOSv0.cxx:107
 AliPHOSv0.cxx:108
 AliPHOSv0.cxx:109
 AliPHOSv0.cxx:110
 AliPHOSv0.cxx:111
 AliPHOSv0.cxx:112
 AliPHOSv0.cxx:113
 AliPHOSv0.cxx:114
 AliPHOSv0.cxx:115
 AliPHOSv0.cxx:116
 AliPHOSv0.cxx:117
 AliPHOSv0.cxx:118
 AliPHOSv0.cxx:119
 AliPHOSv0.cxx:120
 AliPHOSv0.cxx:121
 AliPHOSv0.cxx:122
 AliPHOSv0.cxx:123
 AliPHOSv0.cxx:124
 AliPHOSv0.cxx:125
 AliPHOSv0.cxx:126
 AliPHOSv0.cxx:127
 AliPHOSv0.cxx:128
 AliPHOSv0.cxx:129
 AliPHOSv0.cxx:130
 AliPHOSv0.cxx:131
 AliPHOSv0.cxx:132
 AliPHOSv0.cxx:133
 AliPHOSv0.cxx:134
 AliPHOSv0.cxx:135
 AliPHOSv0.cxx:136
 AliPHOSv0.cxx:137
 AliPHOSv0.cxx:138
 AliPHOSv0.cxx:139
 AliPHOSv0.cxx:140
 AliPHOSv0.cxx:141
 AliPHOSv0.cxx:142
 AliPHOSv0.cxx:143
 AliPHOSv0.cxx:144
 AliPHOSv0.cxx:145
 AliPHOSv0.cxx:146
 AliPHOSv0.cxx:147
 AliPHOSv0.cxx:148
 AliPHOSv0.cxx:149
 AliPHOSv0.cxx:150
 AliPHOSv0.cxx:151
 AliPHOSv0.cxx:152
 AliPHOSv0.cxx:153
 AliPHOSv0.cxx:154
 AliPHOSv0.cxx:155
 AliPHOSv0.cxx:156
 AliPHOSv0.cxx:157
 AliPHOSv0.cxx:158
 AliPHOSv0.cxx:159
 AliPHOSv0.cxx:160
 AliPHOSv0.cxx:161
 AliPHOSv0.cxx:162
 AliPHOSv0.cxx:163
 AliPHOSv0.cxx:164
 AliPHOSv0.cxx:165
 AliPHOSv0.cxx:166
 AliPHOSv0.cxx:167
 AliPHOSv0.cxx:168
 AliPHOSv0.cxx:169
 AliPHOSv0.cxx:170
 AliPHOSv0.cxx:171
 AliPHOSv0.cxx:172
 AliPHOSv0.cxx:173
 AliPHOSv0.cxx:174
 AliPHOSv0.cxx:175
 AliPHOSv0.cxx:176
 AliPHOSv0.cxx:177
 AliPHOSv0.cxx:178
 AliPHOSv0.cxx:179
 AliPHOSv0.cxx:180
 AliPHOSv0.cxx:181
 AliPHOSv0.cxx:182
 AliPHOSv0.cxx:183
 AliPHOSv0.cxx:184
 AliPHOSv0.cxx:185
 AliPHOSv0.cxx:186
 AliPHOSv0.cxx:187
 AliPHOSv0.cxx:188
 AliPHOSv0.cxx:189
 AliPHOSv0.cxx:190
 AliPHOSv0.cxx:191
 AliPHOSv0.cxx:192
 AliPHOSv0.cxx:193
 AliPHOSv0.cxx:194
 AliPHOSv0.cxx:195
 AliPHOSv0.cxx:196
 AliPHOSv0.cxx:197
 AliPHOSv0.cxx:198
 AliPHOSv0.cxx:199
 AliPHOSv0.cxx:200
 AliPHOSv0.cxx:201
 AliPHOSv0.cxx:202
 AliPHOSv0.cxx:203
 AliPHOSv0.cxx:204
 AliPHOSv0.cxx:205
 AliPHOSv0.cxx:206
 AliPHOSv0.cxx:207
 AliPHOSv0.cxx:208
 AliPHOSv0.cxx:209
 AliPHOSv0.cxx:210
 AliPHOSv0.cxx:211
 AliPHOSv0.cxx:212
 AliPHOSv0.cxx:213
 AliPHOSv0.cxx:214
 AliPHOSv0.cxx:215
 AliPHOSv0.cxx:216
 AliPHOSv0.cxx:217
 AliPHOSv0.cxx:218
 AliPHOSv0.cxx:219
 AliPHOSv0.cxx:220
 AliPHOSv0.cxx:221
 AliPHOSv0.cxx:222
 AliPHOSv0.cxx:223
 AliPHOSv0.cxx:224
 AliPHOSv0.cxx:225
 AliPHOSv0.cxx:226
 AliPHOSv0.cxx:227
 AliPHOSv0.cxx:228
 AliPHOSv0.cxx:229
 AliPHOSv0.cxx:230
 AliPHOSv0.cxx:231
 AliPHOSv0.cxx:232
 AliPHOSv0.cxx:233
 AliPHOSv0.cxx:234
 AliPHOSv0.cxx:235
 AliPHOSv0.cxx:236
 AliPHOSv0.cxx:237
 AliPHOSv0.cxx:238
 AliPHOSv0.cxx:239
 AliPHOSv0.cxx:240
 AliPHOSv0.cxx:241
 AliPHOSv0.cxx:242
 AliPHOSv0.cxx:243
 AliPHOSv0.cxx:244
 AliPHOSv0.cxx:245
 AliPHOSv0.cxx:246
 AliPHOSv0.cxx:247
 AliPHOSv0.cxx:248
 AliPHOSv0.cxx:249
 AliPHOSv0.cxx:250
 AliPHOSv0.cxx:251
 AliPHOSv0.cxx:252
 AliPHOSv0.cxx:253
 AliPHOSv0.cxx:254
 AliPHOSv0.cxx:255
 AliPHOSv0.cxx:256
 AliPHOSv0.cxx:257
 AliPHOSv0.cxx:258
 AliPHOSv0.cxx:259
 AliPHOSv0.cxx:260
 AliPHOSv0.cxx:261
 AliPHOSv0.cxx:262
 AliPHOSv0.cxx:263
 AliPHOSv0.cxx:264
 AliPHOSv0.cxx:265
 AliPHOSv0.cxx:266
 AliPHOSv0.cxx:267
 AliPHOSv0.cxx:268
 AliPHOSv0.cxx:269
 AliPHOSv0.cxx:270
 AliPHOSv0.cxx:271
 AliPHOSv0.cxx:272
 AliPHOSv0.cxx:273
 AliPHOSv0.cxx:274
 AliPHOSv0.cxx:275
 AliPHOSv0.cxx:276
 AliPHOSv0.cxx:277
 AliPHOSv0.cxx:278
 AliPHOSv0.cxx:279
 AliPHOSv0.cxx:280
 AliPHOSv0.cxx:281
 AliPHOSv0.cxx:282
 AliPHOSv0.cxx:283
 AliPHOSv0.cxx:284
 AliPHOSv0.cxx:285
 AliPHOSv0.cxx:286
 AliPHOSv0.cxx:287
 AliPHOSv0.cxx:288
 AliPHOSv0.cxx:289
 AliPHOSv0.cxx:290
 AliPHOSv0.cxx:291
 AliPHOSv0.cxx:292
 AliPHOSv0.cxx:293
 AliPHOSv0.cxx:294
 AliPHOSv0.cxx:295
 AliPHOSv0.cxx:296
 AliPHOSv0.cxx:297
 AliPHOSv0.cxx:298
 AliPHOSv0.cxx:299
 AliPHOSv0.cxx:300
 AliPHOSv0.cxx:301
 AliPHOSv0.cxx:302
 AliPHOSv0.cxx:303
 AliPHOSv0.cxx:304
 AliPHOSv0.cxx:305
 AliPHOSv0.cxx:306
 AliPHOSv0.cxx:307
 AliPHOSv0.cxx:308
 AliPHOSv0.cxx:309
 AliPHOSv0.cxx:310
 AliPHOSv0.cxx:311
 AliPHOSv0.cxx:312
 AliPHOSv0.cxx:313
 AliPHOSv0.cxx:314
 AliPHOSv0.cxx:315
 AliPHOSv0.cxx:316
 AliPHOSv0.cxx:317
 AliPHOSv0.cxx:318
 AliPHOSv0.cxx:319
 AliPHOSv0.cxx:320
 AliPHOSv0.cxx:321
 AliPHOSv0.cxx:322
 AliPHOSv0.cxx:323
 AliPHOSv0.cxx:324
 AliPHOSv0.cxx:325
 AliPHOSv0.cxx:326
 AliPHOSv0.cxx:327
 AliPHOSv0.cxx:328
 AliPHOSv0.cxx:329
 AliPHOSv0.cxx:330
 AliPHOSv0.cxx:331
 AliPHOSv0.cxx:332
 AliPHOSv0.cxx:333
 AliPHOSv0.cxx:334
 AliPHOSv0.cxx:335
 AliPHOSv0.cxx:336
 AliPHOSv0.cxx:337
 AliPHOSv0.cxx:338
 AliPHOSv0.cxx:339
 AliPHOSv0.cxx:340
 AliPHOSv0.cxx:341
 AliPHOSv0.cxx:342
 AliPHOSv0.cxx:343
 AliPHOSv0.cxx:344
 AliPHOSv0.cxx:345
 AliPHOSv0.cxx:346
 AliPHOSv0.cxx:347
 AliPHOSv0.cxx:348
 AliPHOSv0.cxx:349
 AliPHOSv0.cxx:350
 AliPHOSv0.cxx:351
 AliPHOSv0.cxx:352
 AliPHOSv0.cxx:353
 AliPHOSv0.cxx:354
 AliPHOSv0.cxx:355
 AliPHOSv0.cxx:356
 AliPHOSv0.cxx:357
 AliPHOSv0.cxx:358
 AliPHOSv0.cxx:359
 AliPHOSv0.cxx:360
 AliPHOSv0.cxx:361
 AliPHOSv0.cxx:362
 AliPHOSv0.cxx:363
 AliPHOSv0.cxx:364
 AliPHOSv0.cxx:365
 AliPHOSv0.cxx:366
 AliPHOSv0.cxx:367
 AliPHOSv0.cxx:368
 AliPHOSv0.cxx:369
 AliPHOSv0.cxx:370
 AliPHOSv0.cxx:371
 AliPHOSv0.cxx:372
 AliPHOSv0.cxx:373
 AliPHOSv0.cxx:374
 AliPHOSv0.cxx:375
 AliPHOSv0.cxx:376
 AliPHOSv0.cxx:377
 AliPHOSv0.cxx:378
 AliPHOSv0.cxx:379
 AliPHOSv0.cxx:380
 AliPHOSv0.cxx:381
 AliPHOSv0.cxx:382
 AliPHOSv0.cxx:383
 AliPHOSv0.cxx:384
 AliPHOSv0.cxx:385
 AliPHOSv0.cxx:386
 AliPHOSv0.cxx:387
 AliPHOSv0.cxx:388
 AliPHOSv0.cxx:389
 AliPHOSv0.cxx:390
 AliPHOSv0.cxx:391
 AliPHOSv0.cxx:392
 AliPHOSv0.cxx:393
 AliPHOSv0.cxx:394
 AliPHOSv0.cxx:395
 AliPHOSv0.cxx:396
 AliPHOSv0.cxx:397
 AliPHOSv0.cxx:398
 AliPHOSv0.cxx:399
 AliPHOSv0.cxx:400
 AliPHOSv0.cxx:401
 AliPHOSv0.cxx:402
 AliPHOSv0.cxx:403
 AliPHOSv0.cxx:404
 AliPHOSv0.cxx:405
 AliPHOSv0.cxx:406
 AliPHOSv0.cxx:407
 AliPHOSv0.cxx:408
 AliPHOSv0.cxx:409
 AliPHOSv0.cxx:410
 AliPHOSv0.cxx:411
 AliPHOSv0.cxx:412
 AliPHOSv0.cxx:413
 AliPHOSv0.cxx:414
 AliPHOSv0.cxx:415
 AliPHOSv0.cxx:416
 AliPHOSv0.cxx:417
 AliPHOSv0.cxx:418
 AliPHOSv0.cxx:419
 AliPHOSv0.cxx:420
 AliPHOSv0.cxx:421
 AliPHOSv0.cxx:422
 AliPHOSv0.cxx:423
 AliPHOSv0.cxx:424
 AliPHOSv0.cxx:425
 AliPHOSv0.cxx:426
 AliPHOSv0.cxx:427
 AliPHOSv0.cxx:428
 AliPHOSv0.cxx:429
 AliPHOSv0.cxx:430
 AliPHOSv0.cxx:431
 AliPHOSv0.cxx:432
 AliPHOSv0.cxx:433
 AliPHOSv0.cxx:434
 AliPHOSv0.cxx:435
 AliPHOSv0.cxx:436
 AliPHOSv0.cxx:437
 AliPHOSv0.cxx:438
 AliPHOSv0.cxx:439
 AliPHOSv0.cxx:440
 AliPHOSv0.cxx:441
 AliPHOSv0.cxx:442
 AliPHOSv0.cxx:443
 AliPHOSv0.cxx:444
 AliPHOSv0.cxx:445
 AliPHOSv0.cxx:446
 AliPHOSv0.cxx:447
 AliPHOSv0.cxx:448
 AliPHOSv0.cxx:449
 AliPHOSv0.cxx:450
 AliPHOSv0.cxx:451
 AliPHOSv0.cxx:452
 AliPHOSv0.cxx:453
 AliPHOSv0.cxx:454
 AliPHOSv0.cxx:455
 AliPHOSv0.cxx:456
 AliPHOSv0.cxx:457
 AliPHOSv0.cxx:458
 AliPHOSv0.cxx:459
 AliPHOSv0.cxx:460
 AliPHOSv0.cxx:461
 AliPHOSv0.cxx:462
 AliPHOSv0.cxx:463
 AliPHOSv0.cxx:464
 AliPHOSv0.cxx:465
 AliPHOSv0.cxx:466
 AliPHOSv0.cxx:467
 AliPHOSv0.cxx:468
 AliPHOSv0.cxx:469
 AliPHOSv0.cxx:470
 AliPHOSv0.cxx:471
 AliPHOSv0.cxx:472
 AliPHOSv0.cxx:473
 AliPHOSv0.cxx:474
 AliPHOSv0.cxx:475
 AliPHOSv0.cxx:476
 AliPHOSv0.cxx:477
 AliPHOSv0.cxx:478
 AliPHOSv0.cxx:479
 AliPHOSv0.cxx:480
 AliPHOSv0.cxx:481
 AliPHOSv0.cxx:482
 AliPHOSv0.cxx:483
 AliPHOSv0.cxx:484
 AliPHOSv0.cxx:485
 AliPHOSv0.cxx:486
 AliPHOSv0.cxx:487
 AliPHOSv0.cxx:488
 AliPHOSv0.cxx:489
 AliPHOSv0.cxx:490
 AliPHOSv0.cxx:491
 AliPHOSv0.cxx:492
 AliPHOSv0.cxx:493
 AliPHOSv0.cxx:494
 AliPHOSv0.cxx:495
 AliPHOSv0.cxx:496
 AliPHOSv0.cxx:497
 AliPHOSv0.cxx:498
 AliPHOSv0.cxx:499
 AliPHOSv0.cxx:500
 AliPHOSv0.cxx:501
 AliPHOSv0.cxx:502
 AliPHOSv0.cxx:503
 AliPHOSv0.cxx:504
 AliPHOSv0.cxx:505
 AliPHOSv0.cxx:506
 AliPHOSv0.cxx:507
 AliPHOSv0.cxx:508
 AliPHOSv0.cxx:509
 AliPHOSv0.cxx:510
 AliPHOSv0.cxx:511
 AliPHOSv0.cxx:512
 AliPHOSv0.cxx:513
 AliPHOSv0.cxx:514
 AliPHOSv0.cxx:515
 AliPHOSv0.cxx:516
 AliPHOSv0.cxx:517
 AliPHOSv0.cxx:518
 AliPHOSv0.cxx:519
 AliPHOSv0.cxx:520
 AliPHOSv0.cxx:521
 AliPHOSv0.cxx:522
 AliPHOSv0.cxx:523
 AliPHOSv0.cxx:524
 AliPHOSv0.cxx:525
 AliPHOSv0.cxx:526
 AliPHOSv0.cxx:527
 AliPHOSv0.cxx:528
 AliPHOSv0.cxx:529
 AliPHOSv0.cxx:530
 AliPHOSv0.cxx:531
 AliPHOSv0.cxx:532
 AliPHOSv0.cxx:533
 AliPHOSv0.cxx:534
 AliPHOSv0.cxx:535
 AliPHOSv0.cxx:536
 AliPHOSv0.cxx:537
 AliPHOSv0.cxx:538
 AliPHOSv0.cxx:539
 AliPHOSv0.cxx:540
 AliPHOSv0.cxx:541
 AliPHOSv0.cxx:542
 AliPHOSv0.cxx:543
 AliPHOSv0.cxx:544
 AliPHOSv0.cxx:545
 AliPHOSv0.cxx:546
 AliPHOSv0.cxx:547
 AliPHOSv0.cxx:548
 AliPHOSv0.cxx:549
 AliPHOSv0.cxx:550
 AliPHOSv0.cxx:551
 AliPHOSv0.cxx:552
 AliPHOSv0.cxx:553
 AliPHOSv0.cxx:554
 AliPHOSv0.cxx:555
 AliPHOSv0.cxx:556
 AliPHOSv0.cxx:557
 AliPHOSv0.cxx:558
 AliPHOSv0.cxx:559
 AliPHOSv0.cxx:560
 AliPHOSv0.cxx:561
 AliPHOSv0.cxx:562
 AliPHOSv0.cxx:563
 AliPHOSv0.cxx:564
 AliPHOSv0.cxx:565
 AliPHOSv0.cxx:566
 AliPHOSv0.cxx:567
 AliPHOSv0.cxx:568
 AliPHOSv0.cxx:569
 AliPHOSv0.cxx:570
 AliPHOSv0.cxx:571
 AliPHOSv0.cxx:572
 AliPHOSv0.cxx:573
 AliPHOSv0.cxx:574
 AliPHOSv0.cxx:575
 AliPHOSv0.cxx:576
 AliPHOSv0.cxx:577
 AliPHOSv0.cxx:578
 AliPHOSv0.cxx:579
 AliPHOSv0.cxx:580
 AliPHOSv0.cxx:581
 AliPHOSv0.cxx:582
 AliPHOSv0.cxx:583
 AliPHOSv0.cxx:584
 AliPHOSv0.cxx:585
 AliPHOSv0.cxx:586
 AliPHOSv0.cxx:587
 AliPHOSv0.cxx:588
 AliPHOSv0.cxx:589
 AliPHOSv0.cxx:590
 AliPHOSv0.cxx:591
 AliPHOSv0.cxx:592
 AliPHOSv0.cxx:593
 AliPHOSv0.cxx:594
 AliPHOSv0.cxx:595
 AliPHOSv0.cxx:596
 AliPHOSv0.cxx:597
 AliPHOSv0.cxx:598
 AliPHOSv0.cxx:599
 AliPHOSv0.cxx:600
 AliPHOSv0.cxx:601
 AliPHOSv0.cxx:602
 AliPHOSv0.cxx:603
 AliPHOSv0.cxx:604
 AliPHOSv0.cxx:605
 AliPHOSv0.cxx:606
 AliPHOSv0.cxx:607
 AliPHOSv0.cxx:608
 AliPHOSv0.cxx:609
 AliPHOSv0.cxx:610
 AliPHOSv0.cxx:611
 AliPHOSv0.cxx:612
 AliPHOSv0.cxx:613
 AliPHOSv0.cxx:614
 AliPHOSv0.cxx:615
 AliPHOSv0.cxx:616
 AliPHOSv0.cxx:617
 AliPHOSv0.cxx:618
 AliPHOSv0.cxx:619
 AliPHOSv0.cxx:620
 AliPHOSv0.cxx:621
 AliPHOSv0.cxx:622
 AliPHOSv0.cxx:623
 AliPHOSv0.cxx:624
 AliPHOSv0.cxx:625
 AliPHOSv0.cxx:626
 AliPHOSv0.cxx:627
 AliPHOSv0.cxx:628
 AliPHOSv0.cxx:629
 AliPHOSv0.cxx:630
 AliPHOSv0.cxx:631
 AliPHOSv0.cxx:632
 AliPHOSv0.cxx:633
 AliPHOSv0.cxx:634
 AliPHOSv0.cxx:635
 AliPHOSv0.cxx:636
 AliPHOSv0.cxx:637
 AliPHOSv0.cxx:638
 AliPHOSv0.cxx:639
 AliPHOSv0.cxx:640
 AliPHOSv0.cxx:641
 AliPHOSv0.cxx:642
 AliPHOSv0.cxx:643
 AliPHOSv0.cxx:644
 AliPHOSv0.cxx:645
 AliPHOSv0.cxx:646
 AliPHOSv0.cxx:647
 AliPHOSv0.cxx:648
 AliPHOSv0.cxx:649
 AliPHOSv0.cxx:650
 AliPHOSv0.cxx:651
 AliPHOSv0.cxx:652
 AliPHOSv0.cxx:653
 AliPHOSv0.cxx:654
 AliPHOSv0.cxx:655
 AliPHOSv0.cxx:656
 AliPHOSv0.cxx:657
 AliPHOSv0.cxx:658
 AliPHOSv0.cxx:659
 AliPHOSv0.cxx:660
 AliPHOSv0.cxx:661
 AliPHOSv0.cxx:662
 AliPHOSv0.cxx:663
 AliPHOSv0.cxx:664
 AliPHOSv0.cxx:665
 AliPHOSv0.cxx:666
 AliPHOSv0.cxx:667
 AliPHOSv0.cxx:668
 AliPHOSv0.cxx:669
 AliPHOSv0.cxx:670
 AliPHOSv0.cxx:671
 AliPHOSv0.cxx:672
 AliPHOSv0.cxx:673
 AliPHOSv0.cxx:674
 AliPHOSv0.cxx:675
 AliPHOSv0.cxx:676
 AliPHOSv0.cxx:677
 AliPHOSv0.cxx:678
 AliPHOSv0.cxx:679
 AliPHOSv0.cxx:680
 AliPHOSv0.cxx:681
 AliPHOSv0.cxx:682
 AliPHOSv0.cxx:683
 AliPHOSv0.cxx:684
 AliPHOSv0.cxx:685
 AliPHOSv0.cxx:686
 AliPHOSv0.cxx:687
 AliPHOSv0.cxx:688
 AliPHOSv0.cxx:689
 AliPHOSv0.cxx:690
 AliPHOSv0.cxx:691
 AliPHOSv0.cxx:692
 AliPHOSv0.cxx:693
 AliPHOSv0.cxx:694
 AliPHOSv0.cxx:695
 AliPHOSv0.cxx:696
 AliPHOSv0.cxx:697
 AliPHOSv0.cxx:698
 AliPHOSv0.cxx:699
 AliPHOSv0.cxx:700
 AliPHOSv0.cxx:701
 AliPHOSv0.cxx:702
 AliPHOSv0.cxx:703
 AliPHOSv0.cxx:704
 AliPHOSv0.cxx:705
 AliPHOSv0.cxx:706
 AliPHOSv0.cxx:707
 AliPHOSv0.cxx:708
 AliPHOSv0.cxx:709
 AliPHOSv0.cxx:710
 AliPHOSv0.cxx:711
 AliPHOSv0.cxx:712
 AliPHOSv0.cxx:713
 AliPHOSv0.cxx:714
 AliPHOSv0.cxx:715
 AliPHOSv0.cxx:716
 AliPHOSv0.cxx:717
 AliPHOSv0.cxx:718
 AliPHOSv0.cxx:719
 AliPHOSv0.cxx:720
 AliPHOSv0.cxx:721
 AliPHOSv0.cxx:722
 AliPHOSv0.cxx:723
 AliPHOSv0.cxx:724
 AliPHOSv0.cxx:725
 AliPHOSv0.cxx:726
 AliPHOSv0.cxx:727
 AliPHOSv0.cxx:728
 AliPHOSv0.cxx:729
 AliPHOSv0.cxx:730
 AliPHOSv0.cxx:731
 AliPHOSv0.cxx:732
 AliPHOSv0.cxx:733
 AliPHOSv0.cxx:734
 AliPHOSv0.cxx:735
 AliPHOSv0.cxx:736
 AliPHOSv0.cxx:737
 AliPHOSv0.cxx:738
 AliPHOSv0.cxx:739
 AliPHOSv0.cxx:740
 AliPHOSv0.cxx:741
 AliPHOSv0.cxx:742
 AliPHOSv0.cxx:743
 AliPHOSv0.cxx:744
 AliPHOSv0.cxx:745
 AliPHOSv0.cxx:746
 AliPHOSv0.cxx:747
 AliPHOSv0.cxx:748
 AliPHOSv0.cxx:749
 AliPHOSv0.cxx:750
 AliPHOSv0.cxx:751
 AliPHOSv0.cxx:752
 AliPHOSv0.cxx:753
 AliPHOSv0.cxx:754
 AliPHOSv0.cxx:755
 AliPHOSv0.cxx:756
 AliPHOSv0.cxx:757
 AliPHOSv0.cxx:758
 AliPHOSv0.cxx:759
 AliPHOSv0.cxx:760
 AliPHOSv0.cxx:761
 AliPHOSv0.cxx:762
 AliPHOSv0.cxx:763
 AliPHOSv0.cxx:764
 AliPHOSv0.cxx:765
 AliPHOSv0.cxx:766
 AliPHOSv0.cxx:767
 AliPHOSv0.cxx:768
 AliPHOSv0.cxx:769
 AliPHOSv0.cxx:770
 AliPHOSv0.cxx:771
 AliPHOSv0.cxx:772
 AliPHOSv0.cxx:773
 AliPHOSv0.cxx:774
 AliPHOSv0.cxx:775
 AliPHOSv0.cxx:776
 AliPHOSv0.cxx:777
 AliPHOSv0.cxx:778
 AliPHOSv0.cxx:779
 AliPHOSv0.cxx:780
 AliPHOSv0.cxx:781
 AliPHOSv0.cxx:782
 AliPHOSv0.cxx:783
 AliPHOSv0.cxx:784
 AliPHOSv0.cxx:785
 AliPHOSv0.cxx:786
 AliPHOSv0.cxx:787
 AliPHOSv0.cxx:788
 AliPHOSv0.cxx:789
 AliPHOSv0.cxx:790
 AliPHOSv0.cxx:791
 AliPHOSv0.cxx:792
 AliPHOSv0.cxx:793
 AliPHOSv0.cxx:794
 AliPHOSv0.cxx:795
 AliPHOSv0.cxx:796
 AliPHOSv0.cxx:797
 AliPHOSv0.cxx:798
 AliPHOSv0.cxx:799
 AliPHOSv0.cxx:800
 AliPHOSv0.cxx:801
 AliPHOSv0.cxx:802
 AliPHOSv0.cxx:803
 AliPHOSv0.cxx:804
 AliPHOSv0.cxx:805
 AliPHOSv0.cxx:806
 AliPHOSv0.cxx:807
 AliPHOSv0.cxx:808
 AliPHOSv0.cxx:809
 AliPHOSv0.cxx:810
 AliPHOSv0.cxx:811
 AliPHOSv0.cxx:812
 AliPHOSv0.cxx:813
 AliPHOSv0.cxx:814
 AliPHOSv0.cxx:815
 AliPHOSv0.cxx:816
 AliPHOSv0.cxx:817
 AliPHOSv0.cxx:818
 AliPHOSv0.cxx:819
 AliPHOSv0.cxx:820
 AliPHOSv0.cxx:821
 AliPHOSv0.cxx:822
 AliPHOSv0.cxx:823
 AliPHOSv0.cxx:824
 AliPHOSv0.cxx:825
 AliPHOSv0.cxx:826
 AliPHOSv0.cxx:827
 AliPHOSv0.cxx:828
 AliPHOSv0.cxx:829
 AliPHOSv0.cxx:830
 AliPHOSv0.cxx:831
 AliPHOSv0.cxx:832
 AliPHOSv0.cxx:833
 AliPHOSv0.cxx:834
 AliPHOSv0.cxx:835
 AliPHOSv0.cxx:836
 AliPHOSv0.cxx:837
 AliPHOSv0.cxx:838
 AliPHOSv0.cxx:839
 AliPHOSv0.cxx:840
 AliPHOSv0.cxx:841
 AliPHOSv0.cxx:842
 AliPHOSv0.cxx:843
 AliPHOSv0.cxx:844
 AliPHOSv0.cxx:845
 AliPHOSv0.cxx:846
 AliPHOSv0.cxx:847
 AliPHOSv0.cxx:848
 AliPHOSv0.cxx:849
 AliPHOSv0.cxx:850
 AliPHOSv0.cxx:851
 AliPHOSv0.cxx:852
 AliPHOSv0.cxx:853
 AliPHOSv0.cxx:854
 AliPHOSv0.cxx:855
 AliPHOSv0.cxx:856
 AliPHOSv0.cxx:857
 AliPHOSv0.cxx:858
 AliPHOSv0.cxx:859
 AliPHOSv0.cxx:860
 AliPHOSv0.cxx:861
 AliPHOSv0.cxx:862
 AliPHOSv0.cxx:863
 AliPHOSv0.cxx:864
 AliPHOSv0.cxx:865
 AliPHOSv0.cxx:866
 AliPHOSv0.cxx:867
 AliPHOSv0.cxx:868
 AliPHOSv0.cxx:869
 AliPHOSv0.cxx:870
 AliPHOSv0.cxx:871
 AliPHOSv0.cxx:872
 AliPHOSv0.cxx:873
 AliPHOSv0.cxx:874
 AliPHOSv0.cxx:875
 AliPHOSv0.cxx:876
 AliPHOSv0.cxx:877
 AliPHOSv0.cxx:878
 AliPHOSv0.cxx:879
 AliPHOSv0.cxx:880
 AliPHOSv0.cxx:881
 AliPHOSv0.cxx:882
 AliPHOSv0.cxx:883
 AliPHOSv0.cxx:884
 AliPHOSv0.cxx:885
 AliPHOSv0.cxx:886
 AliPHOSv0.cxx:887
 AliPHOSv0.cxx:888
 AliPHOSv0.cxx:889
 AliPHOSv0.cxx:890
 AliPHOSv0.cxx:891
 AliPHOSv0.cxx:892
 AliPHOSv0.cxx:893
 AliPHOSv0.cxx:894
 AliPHOSv0.cxx:895
 AliPHOSv0.cxx:896
 AliPHOSv0.cxx:897
 AliPHOSv0.cxx:898
 AliPHOSv0.cxx:899
 AliPHOSv0.cxx:900
 AliPHOSv0.cxx:901
 AliPHOSv0.cxx:902
 AliPHOSv0.cxx:903
 AliPHOSv0.cxx:904
 AliPHOSv0.cxx:905
 AliPHOSv0.cxx:906
 AliPHOSv0.cxx:907
 AliPHOSv0.cxx:908
 AliPHOSv0.cxx:909
 AliPHOSv0.cxx:910
 AliPHOSv0.cxx:911
 AliPHOSv0.cxx:912
 AliPHOSv0.cxx:913
 AliPHOSv0.cxx:914
 AliPHOSv0.cxx:915
 AliPHOSv0.cxx:916
 AliPHOSv0.cxx:917
 AliPHOSv0.cxx:918
 AliPHOSv0.cxx:919
 AliPHOSv0.cxx:920
 AliPHOSv0.cxx:921
 AliPHOSv0.cxx:922
 AliPHOSv0.cxx:923
 AliPHOSv0.cxx:924
 AliPHOSv0.cxx:925
 AliPHOSv0.cxx:926
 AliPHOSv0.cxx:927
 AliPHOSv0.cxx:928
 AliPHOSv0.cxx:929
 AliPHOSv0.cxx:930
 AliPHOSv0.cxx:931
 AliPHOSv0.cxx:932
 AliPHOSv0.cxx:933
 AliPHOSv0.cxx:934
 AliPHOSv0.cxx:935
 AliPHOSv0.cxx:936
 AliPHOSv0.cxx:937
 AliPHOSv0.cxx:938
 AliPHOSv0.cxx:939
 AliPHOSv0.cxx:940
 AliPHOSv0.cxx:941
 AliPHOSv0.cxx:942
 AliPHOSv0.cxx:943
 AliPHOSv0.cxx:944
 AliPHOSv0.cxx:945
 AliPHOSv0.cxx:946
 AliPHOSv0.cxx:947
 AliPHOSv0.cxx:948
 AliPHOSv0.cxx:949
 AliPHOSv0.cxx:950
 AliPHOSv0.cxx:951
 AliPHOSv0.cxx:952
 AliPHOSv0.cxx:953
 AliPHOSv0.cxx:954
 AliPHOSv0.cxx:955
 AliPHOSv0.cxx:956
 AliPHOSv0.cxx:957
 AliPHOSv0.cxx:958
 AliPHOSv0.cxx:959
 AliPHOSv0.cxx:960
 AliPHOSv0.cxx:961
 AliPHOSv0.cxx:962
 AliPHOSv0.cxx:963
 AliPHOSv0.cxx:964
 AliPHOSv0.cxx:965
 AliPHOSv0.cxx:966
 AliPHOSv0.cxx:967
 AliPHOSv0.cxx:968
 AliPHOSv0.cxx:969
 AliPHOSv0.cxx:970
 AliPHOSv0.cxx:971
 AliPHOSv0.cxx:972
 AliPHOSv0.cxx:973
 AliPHOSv0.cxx:974
 AliPHOSv0.cxx:975
 AliPHOSv0.cxx:976
 AliPHOSv0.cxx:977
 AliPHOSv0.cxx:978
 AliPHOSv0.cxx:979
 AliPHOSv0.cxx:980
 AliPHOSv0.cxx:981
 AliPHOSv0.cxx:982
 AliPHOSv0.cxx:983
 AliPHOSv0.cxx:984