ROOT logo
/**************************************************************************
 * Copyright(c) 2007-2009, 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: AliITSUv1.cxx */


//========================================================================
//
//        Geometry for the Upgrade of the Inner Tracking System
//
// Mario Sitta (sitta@to.infn.it)
// Chinorat Kobdaj (kobdaj@g.sut.ac.th)
//
//========================================================================



// $Log: AliITSUv1.cxx,v $

#include <TClonesArray.h>
#include <TGeoGlobalMagField.h>
#include <TGeoManager.h>
#include <TGeoMatrix.h>
#include <TGeoPhysicalNode.h>
#include <TGeoVolume.h>
#include <TGeoTube.h>
#include <TGeoXtru.h>
#include <TLorentzVector.h>
#include <TString.h>
#include <TVirtualMC.h>

#include "AliITSU.h"
#include "AliITSUHit.h"
#include "AliLog.h"
#include "AliMC.h"
#include "AliMagF.h"
#include "AliRun.h"
#include "AliTrackReference.h"
#include "AliITSv11Geometry.h"
#include "AliITSUv1Layer.h"
#include "AliITSUv1.h"
#include "AliITSUGeomTGeo.h"
#include "AliGeomManager.h"
using namespace TMath;


ClassImp(AliITSUv1)

//______________________________________________________________________
AliITSUv1::AliITSUv1()
:  fNWrapVol(0)
  ,fWrapRMin(0)
  ,fWrapRMax(0)
  ,fWrapZSpan(0)
  ,fLay2WrapV(0)
  ,fLayTurbo(0)
  ,fLayPhi0(0)
  ,fLayRadii(0)
  ,fLayZLength(0)
  ,fStavPerLay(0)
  ,fUnitPerStave(0)
  ,fChipThick(0)
  ,fStaveWidth(0)
  ,fStaveTilt(0)
  ,fSensThick(0)
  ,fChipTypeID(0)
  ,fBuildLevel(0)
  ,fUpGeom(0)
  ,fStaveModelIB(kIBModel0)
  ,fStaveModelOB(kOBModel0)
{
  //    Standard default constructor
  // Inputs:
  //   none.
  // Outputs:
  //   none.
  // Return:
  //   none.
}

//______________________________________________________________________
AliITSUv1::AliITSUv1(const char *title, Int_t nlay)
  :AliITSU(title,nlay)
  ,fNWrapVol(0)
  ,fWrapRMin(0)
  ,fWrapRMax(0)
  ,fWrapZSpan(0)
  ,fLay2WrapV(0)
  ,fLayTurbo(0)
  ,fLayPhi0(0)
  ,fLayRadii(0)
  ,fLayZLength(0)
  ,fStavPerLay(0)
  ,fUnitPerStave(0)
  ,fChipThick(0)
  ,fStaveWidth(0)
  ,fStaveTilt(0)
  ,fSensThick(0)
  ,fChipTypeID(0)
  ,fBuildLevel(0)
  ,fUpGeom(0)
  ,fStaveModelIB(kIBModel0)
  ,fStaveModelOB(kOBModel0)
{
  //    Standard constructor for the Upgrade geometry.
  // Inputs:
  //   const char * name   Ignored, set to "ITS"
  //   const char * title  Arbitrary title
  //   const Int_t nlay    Number of layers
  //
  fLayerName = new TString[fNLayers];
  //
  for (Int_t j=0; j<fNLayers; j++)
    fLayerName[j].Form("%s%d",AliITSUGeomTGeo::GetITSSensorPattern(),j); // See AliITSUv1Layer
  //
  fLayTurbo     = new Bool_t[fNLayers];
  fLayPhi0      = new Double_t[fNLayers];
  fLayRadii     = new Double_t[fNLayers];
  fLayZLength   = new Double_t[fNLayers];
  fStavPerLay   = new Int_t[fNLayers];
  fUnitPerStave = new Int_t[fNLayers];
  fChipThick    = new Double_t[fNLayers];
  fStaveWidth   = new Double_t[fNLayers];
  fStaveTilt    = new Double_t[fNLayers];
  fSensThick    = new Double_t[fNLayers];
  fChipTypeID   = new UInt_t[fNLayers];
  fBuildLevel   = new Int_t[fNLayers];


  fUpGeom = new AliITSUv1Layer*[fNLayers];
  
  if (fNLayers > 0) { // if not, we'll Fatal-ize in CreateGeometry
    for (Int_t j=0; j<fNLayers; j++) {
      fLayPhi0[j]      = 0;
      fLayRadii[j]     = 0.;
      fLayZLength[j]   = 0.;
      fStavPerLay[j]   = 0;
      fUnitPerStave[j] = 0;
      fStaveWidth[j]   = 0.;
      fSensThick[j]    = 0.;
      fChipTypeID[j]   = 0;
      fBuildLevel[j]   = 0;
      fUpGeom[j]       = 0;
    }
  }
}

//______________________________________________________________________
AliITSUv1::~AliITSUv1() {
  //    Standard destructor
  // Inputs:
  //   none.
  // Outputs:
  //   none.
  // Return:
  //   none.
  delete [] fLayTurbo;
  delete [] fLayPhi0;
  delete [] fLayRadii;
  delete [] fLayZLength;
  delete [] fStavPerLay;
  delete [] fUnitPerStave;
  delete [] fChipThick;
  delete [] fStaveWidth;
  delete [] fStaveTilt;
  delete [] fSensThick;
  delete [] fChipTypeID;
  delete [] fBuildLevel;
  delete [] fUpGeom;
  delete [] fWrapRMin;
  delete [] fWrapRMax;
  delete [] fWrapZSpan;
  delete [] fLay2WrapV;
}

//______________________________________________________________________
void AliITSUv1::AddAlignableVolumes() const
{
  // Creates entries for alignable volumes associating the symbolic volume
  // name with the corresponding volume path.
  // 
  // Records in the alignable entries the transformation matrices converting
  // TGeo local coordinates (in the RS of alignable volumes) to the tracking
  // system
  // For this, this function has to run before the misalignment because we
  // are using the ideal positions in the AliITSgeom object.
  AliInfo("Add ITS alignable volumes");

  if (!gGeoManager) { AliFatal("TGeoManager doesn't exist !"); return;  }
  //
  TString path = Form("ALIC_1/%s_2",AliITSUGeomTGeo::GetITSVolPattern());
  TString sname = AliITSUGeomTGeo::ComposeSymNameITS();
  //
  AliDebug(1,Form("%s <-> %s",sname.Data(),path.Data()));
  if( !gGeoManager->SetAlignableEntry(sname.Data(),path.Data()) )
    AliFatal(Form("Unable to set alignable entry ! %s %s",sname.Data(),path.Data()));    
  //
  int lastUID = 0;
  for (int lr=0; lr<fNLayers; lr++) AddAlignableVolumesLayer(lr,path,lastUID);
  //
}

//______________________________________________________________________
void AliITSUv1::AddAlignableVolumesLayer(int lr, TString& parent,Int_t &lastUID) const
{
  // add alignable volumes for layer and its daughters
  //
  TString wrpV = fLay2WrapV[lr]!=-1 ? Form("%s%d_1/",AliITSUGeomTGeo::GetITSWrapVolPattern(),fLay2WrapV[lr]) : "";
  TString path = Form("%s/%s%s%d_1",parent.Data(),wrpV.Data(),AliITSUGeomTGeo::GetITSLayerPattern(),lr);
  TString sname = AliITSUGeomTGeo::ComposeSymNameLayer(lr);
  AliDebug(1,Form("Add %s <-> %s", sname.Data(),path.Data()));
  if ( !gGeoManager->SetAlignableEntry(sname.Data(),path.Data()) ) 
    AliFatal(Form("Unable to set alignable entry ! %s : %s",sname.Data(),path.Data()));
  //
  const AliITSUv1Layer* lrobj = fUpGeom[lr];
  int nstaves = lrobj->GetNStavesPerParent();
  for (int st=0; st<nstaves; st++) AddAlignableVolumesStave(lr,st,path,lastUID);
  //
}
    
//______________________________________________________________________
void AliITSUv1::AddAlignableVolumesStave(int lr, int st, TString& parent, Int_t &lastUID) const
{
  // add alignable volumes for stave and its daughters
  //
  TString path = Form("%s/%s%d_%d",parent.Data(),AliITSUGeomTGeo::GetITSStavePattern(),lr,st);
  TString sname = AliITSUGeomTGeo::ComposeSymNameStave(lr,st);
  AliDebug(1,Form("Add %s <-> %s", sname.Data(),path.Data()));
  if ( !gGeoManager->SetAlignableEntry(sname.Data(),path.Data()) ) 
    AliFatal(Form("Unable to set alignable entry ! %s : %s",sname.Data(),path.Data()));
  //
  const AliITSUv1Layer* lrobj = fUpGeom[lr];
  int nsstave = lrobj->GetNHalfStavesPerParent();
  int start = nsstave>0 ? 0:-1;
  //
  for (int sst=start; sst<nsstave; sst++) AddAlignableVolumesHalfStave(lr,st,sst,path,lastUID);
}

//______________________________________________________________________
void AliITSUv1::AddAlignableVolumesHalfStave(int lr, int st, int sst, TString& parent, Int_t &lastUID) const
{
  // add alignable volumes for halfstave (if any) and its daughters
  //
  TString path = parent;
  if (sst>=0) {
    path = Form("%s/%s%d_%d",parent.Data(),AliITSUGeomTGeo::GetITSHalfStavePattern(),lr,sst);
    TString sname = AliITSUGeomTGeo::ComposeSymNameHalfStave(lr,st,sst);
    AliDebug(1,Form("Add %s <-> %s", sname.Data(),path.Data()));
    if ( !gGeoManager->SetAlignableEntry(sname.Data(),path.Data()) ) 
      AliFatal(Form("Unable to set alignable entry ! %s : %s",sname.Data(),path.Data()));
    //
  }
  const AliITSUv1Layer* lrobj = fUpGeom[lr];
  int nmodules = lrobj->GetNModulesPerParent();
  int start = nmodules>0 ? 0:-1;
  //
  for (int md=start; md<nmodules; md++) AddAlignableVolumesModule(lr,st,sst,md,path,lastUID);
}

//______________________________________________________________________
void AliITSUv1::AddAlignableVolumesModule(int lr, int st, int sst, int md, TString& parent, Int_t &lastUID) const
{
  // add alignable volumes for module (if any) and its daughters
  //
  TString path = parent;
  if (md>=0) {
    path = Form("%s/%s%d_%d",parent.Data(),AliITSUGeomTGeo::GetITSModulePattern(),lr,md);
    TString sname = AliITSUGeomTGeo::ComposeSymNameModule(lr,st,sst,md);
    AliDebug(1,Form("Add %s <-> %s", sname.Data(),path.Data()));
    if ( !gGeoManager->SetAlignableEntry(sname.Data(),path.Data()) ) 
      AliFatal(Form("Unable to set alignable entry ! %s : %s",sname.Data(),path.Data()));
    //
  }
  //
  const AliITSUv1Layer* lrobj = fUpGeom[lr];
  int nchips = lrobj->GetNChipsPerParent();
  //
  for (int ic=0; ic<nchips; ic++) AddAlignableVolumesChip(lr,st,sst,md,ic,path,lastUID);
}  

//______________________________________________________________________
void AliITSUv1::AddAlignableVolumesChip(int lr, int st, int sst, int md, int ch, TString& parent, Int_t &lastUID) const
{
  // add alignable volumes for chip
  //
  TString path = Form("%s/%s%d_%d",parent.Data(),AliITSUGeomTGeo::GetITSChipPattern(),lr,ch);
  TString sname = AliITSUGeomTGeo::ComposeSymNameChip(lr,st,sst,md,ch);
  int modUID = AliITSUGeomTGeo::ChipVolUID( lastUID++ );
  //
  AliDebug(1,Form("Add %s <-> %s : ID=%d", sname.Data(),path.Data(),modUID));
  if ( !gGeoManager->SetAlignableEntry(sname,path.Data(),modUID) )
    AliFatal(Form("Unable to set alignable entry ! %s : %s | %d",sname.Data(),path.Data(),modUID));
  //
}

//______________________________________________________________________
void AliITSUv1::SetNWrapVolumes(Int_t n)
{
  // book arrays for wrapper volumes
  if (fNWrapVol) AliFatal(Form("%d wrapper volumes already defined",fNWrapVol));
  if (n<1) return;
  fNWrapVol = n;
  fWrapRMin = new Double_t[fNWrapVol];
  fWrapRMax = new Double_t[fNWrapVol];
  fWrapZSpan= new Double_t[fNWrapVol];
  for (int i=fNWrapVol;i--;) fWrapRMin[i]=fWrapRMax[i]=fWrapZSpan[i]=-1;
  //
}

//______________________________________________________________________
void AliITSUv1::DefineWrapVolume(Int_t id, Double_t rmin,Double_t rmax, Double_t zspan)
{
  // set parameters of id-th wrapper volume
  if (id>=fNWrapVol||id<0) AliFatal(Form("id=%d of wrapper volume is not in 0-%d range",id,fNWrapVol-1));
  fWrapRMin[id] = rmin;
  fWrapRMax[id] = rmax;
  fWrapZSpan[id] = zspan;
}

//______________________________________________________________________
void AliITSUv1::CreateGeometry() {

  // Create the geometry and insert it in the mother volume ITSV
  TGeoManager *geoManager = gGeoManager;

  TGeoVolume *vALIC = geoManager->GetVolume("ALIC");

  new TGeoVolumeAssembly(AliITSUGeomTGeo::GetITSVolPattern());
  TGeoVolume *vITSV = geoManager->GetVolume(AliITSUGeomTGeo::GetITSVolPattern());
  vITSV->SetUniqueID(AliITSUGeomTGeo::GetUIDShift()); // store modID -> midUUID bitshift
  vALIC->AddNode(vITSV, 2, 0);  // Copy number is 2 to cheat AliGeoManager::CheckSymNamesLUT
  //
  const Int_t kLength=100;
  Char_t vstrng[kLength] = "xxxRS"; //?
  vITSV->SetTitle(vstrng);
  //
  // Check that we have all needed parameters
  if (fNLayers <= 0) AliFatal(Form("Wrong number of layers (%d)",fNLayers));
  //
  for (Int_t j=0; j<fNLayers; j++) {
    if (fLayRadii[j] <= 0)                   AliFatal(Form("Wrong layer radius for layer %d (%f)",j,fLayRadii[j]));
    if (fLayZLength[j] <= 0)                 AliFatal(Form("Wrong layer length for layer %d (%f)",j,fLayZLength[j]));
    if (fStavPerLay[j] <= 0)                 AliFatal(Form("Wrong number of staves for layer %d (%d)",j,fStavPerLay[j]));
    if (fUnitPerStave[j] <= 0)               AliFatal(Form("Wrong number of chips for layer %d (%d)",j,fUnitPerStave[j]));
    if (fChipThick[j] < 0)                   AliFatal(Form("Wrong chip thickness for layer %d (%f)",j,fChipThick[j]));
    if (fLayTurbo[j] && fStaveWidth[j] <= 0) AliFatal(Form("Wrong stave width for layer %d (%f)",j,fStaveWidth[j]));
    if (fSensThick[j] < 0)                   AliFatal(Form("Wrong sensor thickness for layer %d (%f)",j,fSensThick[j]));
    //
    if (j > 0) {
      if (fLayRadii[j]<=fLayRadii[j-1])      AliFatal(Form("Layer %d radius (%f) is smaller than layer %d radius (%f)",
			   j,fLayRadii[j],j-1,fLayRadii[j-1]));
    } // if (j > 0)

    if (fChipThick[j] == 0) AliInfo(Form("Chip thickness for layer %d not set, using default",j));
    if (fSensThick[j] == 0) AliInfo(Form("Sensor thickness for layer %d not set, using default",j));

  } // for (Int_t j=0; j<fNLayers; j++)

  // Create the wrapper volumes
  TGeoVolume **wrapVols = 0;
  if (fNWrapVol) {
    wrapVols = new TGeoVolume*[fNWrapVol];
    for (int id=0;id<fNWrapVol;id++) {
      wrapVols[id] = CreateWrapperVolume(id);
      vITSV->AddNode(wrapVols[id], 1, 0);
    }
  }
  //
  fLay2WrapV = new Int_t[fNLayers];

  // Now create the actual geometry
  for (Int_t j=0; j<fNLayers; j++) {
    TGeoVolume* dest = vITSV;
    fLay2WrapV[j] = -1;
    //
    if (fLayTurbo[j]) {
      fUpGeom[j] = new AliITSUv1Layer(j,kTRUE,kFALSE);
      fUpGeom[j]->SetStaveWidth(fStaveWidth[j]);
      fUpGeom[j]->SetStaveTilt(fStaveTilt[j]);
    }
    else fUpGeom[j] = new AliITSUv1Layer(j,kFALSE);
    //
    fUpGeom[j]->SetPhi0(fLayPhi0[j]);
    fUpGeom[j]->SetRadius(fLayRadii[j]);
    fUpGeom[j]->SetZLength(fLayZLength[j]);
    fUpGeom[j]->SetNStaves(fStavPerLay[j]);
    fUpGeom[j]->SetNUnits(fUnitPerStave[j]);
    fUpGeom[j]->SetChipType(fChipTypeID[j]);
    fUpGeom[j]->SetBuildLevel(fBuildLevel[j]);
    if (j < 3)
      fUpGeom[j]->SetStaveModel(fStaveModelIB);
    else
      fUpGeom[j]->SetStaveModel(fStaveModelOB);
    AliDebug(1,Form("fBuildLevel: %d\n",fBuildLevel[j]));
    //
    if (fChipThick[j] != 0) fUpGeom[j]->SetChipThick(fChipThick[j]);
    if (fSensThick[j] != 0) fUpGeom[j]->SetSensorThick(fSensThick[j]);
    //
    for (int iw=0;iw<fNWrapVol;iw++) {
      if (fLayRadii[j]>fWrapRMin[iw] && fLayRadii[j]<fWrapRMax[iw]) {
	AliInfo(Form("Will embed layer %d in wrapper volume %d",j,iw));
	if (fLayZLength[j]>=fWrapZSpan[iw]) AliFatal(Form("ZSpan %.3f of wrapper volume %d is less than ZSpan %.3f of layer %d",
							  fWrapZSpan[iw],iw,fLayZLength[j],j));
	dest = wrapVols[iw];
	fLay2WrapV[j] = iw;
	break; 
      }
    }
    fUpGeom[j]->CreateLayer(dest);
  }
  CreateSuppCyl(kTRUE,wrapVols[0]);
  CreateSuppCyl(kFALSE,wrapVols[2]);

  delete[] wrapVols; // delete pointer only, not the volumes
  //
}

//____________________________________________________________
//Service Barrel
void AliITSUv1::CreateSuppCyl(const Bool_t innerBarrel,TGeoVolume *dest,const TGeoManager *mgr){
  // Creates the Service Barrel (as a simple cylinder) for IB and OB
  // Inputs:
  //         innerBarrel : if true, build IB service barrel, otherwise for OB
  //         dest        : the mother volume holding the service barrel
  //         mgr         : the gGeoManager pointer (used to get the material)
  //

  Double_t rminIB =  4.7;
  Double_t rminOB = 43.4;
  Double_t zLenOB ;
  Double_t cInt	= 0.22; //dimensioni cilindro di supporto interno
  Double_t cExt	= 1.00; //dimensioni cilindro di supporto esterno
//  Double_t phi1   =  180;
//  Double_t phi2   =  360;


  TGeoMedium *medCarbonFleece = mgr->GetMedium("ITS_CarbonFleece$");

  if (innerBarrel){
    zLenOB=((TGeoTube*)(dest->GetShape()))->GetDz();
//    TGeoTube*ibSuppSh = new TGeoTubeSeg(rminIB,rminIB+cInt,zLenOB,phi1,phi2);
    TGeoTube*ibSuppSh = new TGeoTube(rminIB,rminIB+cInt,zLenOB);
    TGeoVolume *ibSupp = new TGeoVolume("ibSuppCyl",ibSuppSh,medCarbonFleece);
    dest->AddNode(ibSupp,1);
  }
  else {
    zLenOB=((TGeoTube*)(dest->GetShape()))->GetDz();
    TGeoTube*obSuppSh=new TGeoTube(rminOB,rminOB+cExt,zLenOB);
    TGeoVolume *obSupp=new TGeoVolume("obSuppCyl",obSuppSh,medCarbonFleece);
    dest->AddNode(obSupp,1);
  }

  return;
}

//______________________________________________________________________
void AliITSUv1::CreateMaterials() {
  // Create ITS materials
  //     This function defines the default materials used in the Geant
  // Monte Carlo simulations for the geometries AliITSv1, AliITSv3,
  // AliITSv11Hybrid.
  // In general it is automatically replaced by
  // the CreateMaterials routine defined in AliITSv?. Should the function
  // CreateMaterials not exist for the geometry version you are using this
  // one is used. See the definition found in AliITSv5 or the other routine
  // for a complete definition.
  // Inputs:
  //   none.
  // Outputs:
  //   none.
  // Return:
  //   none.

  Int_t   ifield = ((AliMagF*)TGeoGlobalMagField::Instance()->GetField())->Integ();
  Float_t fieldm = ((AliMagF*)TGeoGlobalMagField::Instance()->GetField())->Max();

  Float_t tmaxfd = 0.1; // 1.0; // Degree
  Float_t stemax = 1.0; // cm
  Float_t deemax = 0.1; // 30.0; // Fraction of particle's energy 0<deemax<=1
  Float_t epsil  = 1.0E-4; // 1.0; // cm
  Float_t stmin  = 0.0; // cm "Default value used"

  Float_t tmaxfdSi = 0.1; // .10000E+01; // Degree
  Float_t stemaxSi = 0.0075; //  .10000E+01; // cm
  Float_t deemaxSi = 0.1; // 0.30000E-02; // Fraction of particle's energy 0<deemax<=1
  Float_t epsilSi  = 1.0E-4;// .10000E+01;
  Float_t stminSi  = 0.0; // cm "Default value used"

  Float_t tmaxfdAir = 0.1; // .10000E+01; // Degree
  Float_t stemaxAir = .10000E+01; // cm
  Float_t deemaxAir = 0.1; // 0.30000E-02; // Fraction of particle's energy 0<deemax<=1
  Float_t epsilAir  = 1.0E-4;// .10000E+01;
  Float_t stminAir  = 0.0; // cm "Default value used"

  // AIR
  Float_t aAir[4]={12.0107,14.0067,15.9994,39.948};
  Float_t zAir[4]={6.,7.,8.,18.};
  Float_t wAir[4]={0.000124,0.755267,0.231781,0.012827};
  Float_t dAir = 1.20479E-3;

  // Water
  Float_t aWater[2]={1.00794,15.9994};
  Float_t zWater[2]={1.,8.};
  Float_t wWater[2]={0.111894,0.888106};
  Float_t dWater   = 1.0;


  // Kapton
  Float_t aKapton[4]={1.00794,12.0107, 14.010,15.9994};
  Float_t zKapton[4]={1.,6.,7.,8.};
  Float_t wKapton[4]={0.026362,0.69113,0.07327,0.209235};
  Float_t dKapton   = 1.42;
 
  AliMixture(1,"AIR$",aAir,zAir,dAir,4,wAir);
  AliMedium(1, "AIR$",1,0,ifield,fieldm,tmaxfdAir,stemaxAir,deemaxAir,epsilAir,stminAir);

  AliMixture(2,"WATER$",aWater,zWater,dWater,2,wWater);
  AliMedium(2, "WATER$",2,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);

  AliMaterial(3,"SI$",0.28086E+02,0.14000E+02,0.23300E+01,0.93600E+01,0.99900E+03);
  AliMedium(3,  "SI$",3,0,ifield,fieldm,tmaxfdSi,stemaxSi,deemaxSi,epsilSi,stminSi);

  AliMaterial(4,"BERILLIUM$",9.01, 4., 1.848, 35.3, 36.7);// From AliPIPEv3
  AliMedium(4,  "BERILLIUM$",4,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);

  AliMaterial(5,"COPPER$",0.63546E+02,0.29000E+02,0.89600E+01,0.14300E+01,0.99900E+03);
  AliMedium(5,  "COPPER$",5,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);

    
  // needed for STAVE , Carbon, kapton, Epoxy, flexcable

  //AliMaterial(6,"CARBON$",12.0107,6,2.210,999,999);
  AliMaterial(6,"CARBON$",12.0107,6,2.210/1.3,999,999);
  AliMedium(6,  "CARBON$",6,0,ifield,fieldm,tmaxfdSi,stemaxSi,deemaxSi,epsilSi,stminSi);

  AliMixture(7,"KAPTON(POLYCH2)$", aKapton, zKapton, dKapton, 4, wKapton);
  AliMedium(7, "KAPTON(POLYCH2)$",7,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);


 
  // values below modified as compared to source AliITSv11 !

  //AliMaterial(7,"GLUE$",0.12011E+02,0.60000E+01,0.1930E+01/2.015,999,999); // original
  AliMaterial(15,"GLUE$",12.011,6,1.93/2.015,999,999);  // conform with ATLAS, Corrado, Stefan
  AliMedium(15,  "GLUE$",15,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);

  // All types of carbon
  // Unidirectional prepreg
 AliMaterial(8,"K13D2U2k$",12.0107,6,1.643,999,999);
 AliMedium(8,  "K13D2U2k$",8,0,ifield,fieldm,tmaxfdSi,stemaxSi,deemaxSi,epsilSi,stminSi);
 AliMaterial(17,"K13D2U120$",12.0107,6,1.583,999,999);
 AliMedium(17,  "K13D2U120$",17,0,ifield,fieldm,tmaxfdSi,stemaxSi,deemaxSi,epsilSi,stminSi);
 //Impregnated thread
 AliMaterial(9,"M60J3K$",12.0107,6,2.12,999,999);
 AliMedium(9,  "M60J3K$",9,0,ifield,fieldm,tmaxfdSi,stemaxSi,deemaxSi,epsilSi,stminSi);
 //Impregnated thread
 AliMaterial(10,"M55J6K$",12.0107,6,1.63,999,999);
 AliMedium(10,  "M55J6K$",10,0,ifield,fieldm,tmaxfdSi,stemaxSi,deemaxSi,epsilSi,stminSi);
 // Fabric(0/90)
 AliMaterial(11,"T300$",12.0107,6,1.725,999,999);
 AliMedium(11,  "T300$",11,0,ifield,fieldm,tmaxfdSi,stemaxSi,deemaxSi,epsilSi,stminSi);
 //AMEC Thermasol
 AliMaterial(12,"FGS003$",12.0107,6,1.6,999,999);
 AliMedium(12,  "FGS003$",12,0,ifield,fieldm,tmaxfdSi,stemaxSi,deemaxSi,epsilSi,stminSi);
 // Carbon fleece
 AliMaterial(13,"CarbonFleece$",12.0107,6,0.4,999,999);
 AliMedium(13,  "CarbonFleece$",13,0,ifield,fieldm,tmaxfdSi,stemaxSi,deemaxSi,epsilSi,stminSi);

  // Flex cable
  Float_t aFCm[5]={12.0107,1.00794,14.0067,15.9994,26.981538};
  Float_t zFCm[5]={6.,1.,7.,8.,13.};
  Float_t wFCm[5]={0.520088819984,0.01983871336,0.0551367996,0.157399667056, 0.247536};
  //Float_t dFCm = 1.6087;  // original
  //Float_t dFCm = 2.55;   // conform with STAR
   Float_t dFCm = 2.595;   // conform with Corrado

  AliMixture(14,"FLEXCABLE$",aFCm,zFCm,dFCm,5,wFCm);
  AliMedium(14, "FLEXCABLE$",14,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);

  AliMaterial(16,"ALUMINUM$",0.26982E+02,0.13000E+02,0.26989E+01,0.89000E+01,0.99900E+03);
  AliMedium(16,"ALUMINUM$",16,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);

}

//______________________________________________________________________
void AliITSUv1::DefineLayer(Int_t nlay, double phi0, Double_t r,
			    Double_t zlen, Int_t nstav,
			    Int_t nunit, Double_t lthick,
			    Double_t dthick, UInt_t dettypeID,
			    Int_t buildLevel)
{
  //     Sets the layer parameters
  // Inputs:
  //          nlay    layer number
  //          phi0    layer phi0
  //          r       layer radius
  //          zlen    layer length
  //          nstav   number of staves
  //          nunit   IB: number of chips per stave
  //                  OB: number of modules per half stave
  //          lthick  chip thickness (if omitted, defaults to 0)
  //          dthick  sensor thickness (if omitted, defaults to 0)
  //          dettypeID  ??
  //          buildLevel (if 0, all geometry is build, used for material budget studies)
  // Outputs:
  //   none.
  // Return:
  //   none.

  AliInfo(Form("L# %d Phi:%+.3f R:%+7.3f DZ:%7.2f Nst:%2d Nunit:%2d Lthick:%.4f Dthick:%.4f DetID:%d B:%d",
	       nlay,phi0,r,zlen,nstav,nunit,lthick,dthick,dettypeID,buildLevel));

  if (nlay >= fNLayers || nlay < 0) {
    AliError(Form("Wrong layer number (%d)",nlay));
    return;
  }
  
  fLayTurbo[nlay] = kFALSE;
  fLayPhi0[nlay] = phi0;
  fLayRadii[nlay] = r;
  fLayZLength[nlay] = zlen;
  fStavPerLay[nlay] = nstav;
  fUnitPerStave[nlay] = nunit;
  fChipThick[nlay] = lthick;
  fSensThick[nlay] = dthick;
  fChipTypeID[nlay] = dettypeID;
  fBuildLevel[nlay] = buildLevel;
    
}

//______________________________________________________________________
void AliITSUv1::DefineLayerTurbo(Int_t nlay, Double_t phi0, Double_t r, Double_t zlen, Int_t nstav,
				 Int_t nunit, Double_t width, Double_t tilt,
				 Double_t lthick,Double_t dthick,
				 UInt_t dettypeID, Int_t buildLevel)
{
  //     Sets the layer parameters for a "turbo" layer
  //     (i.e. a layer whose staves overlap in phi)
  // Inputs:
  //          nlay    layer number
  //          phi0    phi of 1st stave
  //          r       layer radius
  //          zlen    layer length
  //          nstav   number of staves
  //          nunit   IB: number of chips per stave
  //                  OB: number of modules per half stave
  //          width   stave width
  //          tilt    layer tilt angle (degrees)
  //          lthick  chip thickness (if omitted, defaults to 0)
  //          dthick  sensor thickness (if omitted, defaults to 0)
  //          dettypeID  ??
  //          buildLevel (if 0, all geometry is build, used for material budget studies)
  // Outputs:
  //   none.
  // Return:
  //   none.

  AliInfo(Form("L# %d Phi:%+.3f R:%+7.3f DZ:%7.2f Nst:%2d Nunit:%2d W:%7.4f Tilt:%+.3f Lthick:%.4f Dthick:%.4f DetID:%d B:%d",
	       nlay,phi0,r,zlen,nstav,nunit,width,tilt,lthick,dthick,dettypeID,buildLevel));

  if (nlay >= fNLayers || nlay < 0) {
    AliError(Form("Wrong layer number (%d)",nlay));
    return;
  }

  fLayTurbo[nlay] = kTRUE;
  fLayPhi0[nlay] = phi0;
  fLayRadii[nlay] = r;
  fLayZLength[nlay] = zlen;
  fStavPerLay[nlay] = nstav;
  fUnitPerStave[nlay] = nunit;
  fChipThick[nlay] = lthick;
  fStaveWidth[nlay] = width;
  fStaveTilt[nlay] = tilt;
  fSensThick[nlay] = dthick;
  fChipTypeID[nlay] = dettypeID;
  fBuildLevel[nlay] = buildLevel;

}

//______________________________________________________________________
void AliITSUv1::GetLayerParameters(Int_t nlay, Double_t &phi0,
				   Double_t &r, Double_t &zlen,
				   Int_t &nstav, Int_t &nmod,
				   Double_t &width, Double_t &tilt,
				   Double_t &lthick, Double_t &dthick,
				   UInt_t &dettype) const
{
  //     Gets the layer parameters
  // Inputs:
  //          nlay    layer number
  // Outputs:
  //          phi0    phi of 1st stave
  //          r       layer radius
  //          zlen    layer length
  //          nstav   number of staves
  //          nmod    IB: number of chips per stave
  //                  OB: number of modules per half stave
  //          width   stave width
  //          tilt    stave tilt angle
  //          lthick  chip thickness
  //          dthick  sensor thickness
  //          dettype detector type
  // Return:
  //   none.

  if (nlay >= fNLayers || nlay < 0) {
    AliError(Form("Wrong layer number (%d)",nlay));
    return;
  }
  
  phi0   = fLayPhi0[nlay];
  r      = fLayRadii[nlay];
  zlen   = fLayZLength[nlay];
  nstav  = fStavPerLay[nlay];
  nmod   = fUnitPerStave[nlay];
  width  = fStaveWidth[nlay];
  tilt   = fStaveTilt[nlay];
  lthick = fChipThick[nlay];
  dthick = fSensThick[nlay];
  dettype= fChipTypeID[nlay];
}

//______________________________________________________________________
TGeoVolume* AliITSUv1::CreateWrapperVolume(Int_t id)
{
  //     Creates an air-filled wrapper cylindrical volume 
  // Inputs:
  //          volume id
  // Outputs:
  //          the wrapper volume

  if (fWrapRMin[id]<0 || fWrapRMax[id]<0 || fWrapZSpan[id]<0) AliFatal(Form("Wrapper volume %d was requested but not defined",id));
  // Now create the actual shape and volume
  //
  TGeoTube *tube = new TGeoTube(fWrapRMin[id], fWrapRMax[id], fWrapZSpan[id]/2.);

  TGeoMedium *medAir = gGeoManager->GetMedium("ITS_AIR$");

  char volnam[30];
  snprintf(volnam, 29, "%s%d", AliITSUGeomTGeo::GetITSWrapVolPattern(),id);

  TGeoVolume *wrapper = new TGeoVolume(volnam, tube, medAir);

  return wrapper;
}

//______________________________________________________________________
void AliITSUv1::Init()
{
  //     Initialise the ITS after it has been created.
  UpdateInternalGeometry();
  AliITSU::Init();
  //  
}

//______________________________________________________________________
Bool_t AliITSUv1::IsLayerTurbo(Int_t nlay)
{
  //     Returns true if the layer is a "turbo" layer
  if ( nlay < 0 || nlay > fNLayers ) {
    AliError(Form("Wrong layer number %d",nlay));
    return kFALSE;
  } 
  else return fUpGeom[nlay]->IsTurbo();
}

//______________________________________________________________________
void AliITSUv1::SetDefaults()
{
  // sets the default segmentation, response, digit and raw cluster classes
}

//______________________________________________________________________
void AliITSUv1::StepManager()
{
  //    Called for every step in the ITS, then calles the AliITSUHit class
  // creator with the information to be recoreded about that hit.
  //     The value of the macro ALIITSPRINTGEOM if set to 1 will allow the
  // printing of information to a file which can be used to create a .det
  // file read in by the routine CreateGeometry(). If set to 0 or any other
  // value except 1, the default behavior, then no such file is created nor
  // it the extra variables and the like used in the printing allocated.
  // Inputs:
  //   none.
  // Outputs:
  //   none.
  // Return:
  //   none.
  //
  if(!(this->IsActive())) return;
  if(!(TVirtualMC::GetMC()->TrackCharge())) return;
  //
  Int_t copy, lay = 0;
  Int_t id = TVirtualMC::GetMC()->CurrentVolID(copy);

  Bool_t notSens = kFALSE;
  while ((lay<fNLayers)  && (notSens = (id!=fIdSens[lay]))) ++lay;
  //printf("R: %.1f | Lay: %d  NotSens: %d\n",positionRS.Pt(), lay, notSens);
	   
  if (notSens) return;
  //
  if (lay < 0 || lay >= fNLayers) {
    AliError(Form("Invalid value: lay=%d. Not an ITS sensitive volume",lay));
    return; // not an ITS sensitive volume.
  } 
  //
  static TLorentzVector position, momentum; // Saves on calls to construtors
  static AliITSUHit hit;// Saves on calls to constructors
  //
  TClonesArray &lhits = *(Hits());
  Int_t chipID, status = 0;
  //
  // Track status
  if(TVirtualMC::GetMC()->IsTrackInside())      status +=  1;
  if(TVirtualMC::GetMC()->IsTrackEntering())    status +=  2;
  if(TVirtualMC::GetMC()->IsTrackExiting()) {
    AddTrackReference(gAlice->GetMCApp()->GetCurrentTrackNumber(), AliTrackReference::kITS);
    status +=  4;
  } // if Outer ITS mother Volume
  if(TVirtualMC::GetMC()->IsTrackOut())         status +=  8;
  if(TVirtualMC::GetMC()->IsTrackDisappeared()) status += 16;
  if(TVirtualMC::GetMC()->IsTrackStop())        status += 32;
  if(TVirtualMC::GetMC()->IsTrackAlive())       status += 64;
  //
  // retrieve the indices with the volume path
  //
  TVirtualMC::GetMC()->TrackPosition(position);
  int chip=-1,module=-1,sstave=-1,stave=-1,level=0; // volume copies on different levels
  TVirtualMC::GetMC()->CurrentVolOffID(++level,chip);
  if (fGeomTGeo->GetNModules(lay)>0)    TVirtualMC::GetMC()->CurrentVolOffID(++level,module);
  if (fGeomTGeo->GetNHalfStaves(lay)>0) TVirtualMC::GetMC()->CurrentVolOffID(++level,sstave);
  TVirtualMC::GetMC()->CurrentVolOffID(++level,stave);
  //
  chipID = fGeomTGeo->GetChipIndex(lay,stave,sstave,module,chip);
  // Fill hit structure.
  //
  hit.SetChip(chipID);
  hit.SetTrack(gAlice->GetMCApp()->GetCurrentTrackNumber());
  TVirtualMC::GetMC()->TrackPosition(position);
  TVirtualMC::GetMC()->TrackMomentum(momentum);
  hit.SetPosition(position);
  hit.SetTime(TVirtualMC::GetMC()->TrackTime());
  hit.SetMomentum(momentum);
  hit.SetStatus(status);
  hit.SetEdep(TVirtualMC::GetMC()->Edep());
  hit.SetShunt(GetIshunt());
  if(TVirtualMC::GetMC()->IsTrackEntering()){
    hit.SetStartPosition(position);
    hit.SetStartTime(TVirtualMC::GetMC()->TrackTime());
    hit.SetStartStatus(status);
    return; // don't save entering hit.
  } // end if IsEntering
    // Fill hit structure with this new hit.
    //Info("StepManager","Calling Copy Constructor");
  new(lhits[fNhits++]) AliITSUHit(hit); // Use Copy Construtor.
  // Save old position... for next hit.
  hit.SetStartPosition(position);
  hit.SetStartTime(TVirtualMC::GetMC()->TrackTime());
  hit.SetStartStatus(status);

  return;
}

//______________________________________________________________________
void AliITSUv1::SetLayerChipTypeID(Int_t lr, UInt_t id)
{
  // set det type
  if (!fChipTypeID || fNLayers<=lr) AliFatal(Form("Number of layers %d, %d is manipulated",fNLayers,lr));
  fChipTypeID[lr] = id;
}

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