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: AliITSUSegmentationPix.cxx 47180 2011-02-08 09:42:29Z masera $ */
#include <TGeoManager.h>
#include <TGeoVolume.h>
#include <TGeoBBox.h>
#include <TObjArray.h>
#include <TString.h>
#include <TSystem.h>
#include <TFile.h>
#include "AliITSUGeomTGeo.h"
#include "AliITSUSegmentationPix.h"
using namespace TMath;

////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Segmentation class for pixels                                                                          //
// Questions to solve: are guardrings needed and do they belong to the sensor or to the chip in TGeo    //
//                     At the moment assume that the local coord syst. is located at bottom left corner   //
//                     of the ACTIVE matrix. If the guardring to be accounted in the local coords, in     //
//                     the Z and X conversions one needs to first subtract the  fGuardLft and fGuardBot   //
//                     from the local Z,X coordinates                                                     //
//                                                                                                        //
////////////////////////////////////////////////////////////////////////////////////////////////////////////

ClassImp(AliITSUSegmentationPix)

const char* AliITSUSegmentationPix::fgkSegmListName = "ITSUSegmentations";

//_____________________________________________________________________________RS
AliITSUSegmentationPix::AliITSUSegmentationPix(UInt_t id, int nchips,int ncol,int nrow,
						   float pitchX,float pitchZ,
						   float thickness,
						   float pitchLftC,float pitchRgtC,
						   float edgL,float edgR,float edgT,float edgB)
: AliITSsegmentation()
  ,fGuardLft(edgL)
  ,fGuardRgt(edgR)
  ,fGuardTop(edgT)
  ,fGuardBot(edgB)
  ,fShiftXLoc(0.5*(edgT-edgB))
  ,fShiftZLoc(0.5*(edgR-edgL))
  ,fDxActive(0)
  ,fDzActive(0)
  ,fPitchX(pitchX)
  ,fPitchZ(pitchZ)
  ,fPitchZLftCol(pitchLftC<0 ? pitchZ:pitchLftC)
  ,fPitchZRgtCol(pitchRgtC<0 ? pitchZ:pitchRgtC)
  ,fChipDZ(0)
  ,fNChips(nchips)
  ,fNColPerChip(nchips>0 ? ncol/nchips:0)
  ,fNRow(nrow)
  ,fNCol(ncol)
  ,fDiodShiftMatNCol(0)
  ,fDiodShiftMatNRow(0)
  ,fDiodShiftMatDim(0)
  ,fDiodShidtMatX(0)
  ,fDiodShidtMatZ(0)
{
  // Default constructor, sizes in cm
  if (nchips) SetUniqueID( AliITSUGeomTGeo::ComposeChipTypeID(id) );
  fChipDZ = (fNColPerChip-2)*fPitchZ + fPitchZLftCol + fPitchZRgtCol;;
  fDxActive = fNRow*fPitchX;
  fDzActive = fNChips*fChipDZ;
  SetDetSize( fDxActive + fGuardTop+fGuardBot,
	      fDzActive + fGuardLft+fGuardRgt,
	      thickness);
  //
}

//_____________________________________________________________________________RS
AliITSUSegmentationPix::~AliITSUSegmentationPix()
{
  // d-tor
  delete[] fDiodShidtMatX;
  delete[] fDiodShidtMatZ;
}


//_____________________________________________________________________________RS
void AliITSUSegmentationPix::GetPadIxz(Float_t x,Float_t z,Int_t &ix,Int_t &iz) const 
{
  //  Returns pixel coordinates (ix,iz) for given coordinates (x,z counted from corner of col/row 0:0)
  //  expects x, z in cm.
  ix = int(x/fPitchX);     
  iz = int(Z2Col(z));
  //  
  if      (iz<0)        { AliWarning(Form("Z=%f gives col=%d ouside [%d:%d)",z,iz,0,fNCol)); iz=0; }
  else if (iz >= fNCol) { AliWarning(Form("Z=%f gives col=%d ouside [%d:%d)",z,iz,0,fNCol)); iz= fNCol-1;}
  if      (ix<0)        { AliWarning(Form("X=%f gives row=%d ouside [%d:%d)",x,ix,0,fNRow)); ix=0; }
  else if (ix >= fNRow) { AliWarning(Form("X=%f gives row=%d ouside [%d:%d)",x,ix,0,fNRow)); ix= fNRow-1;}
  //
}

//_____________________________________________________________________________RS
void AliITSUSegmentationPix::GetPadTxz(Float_t &x,Float_t &z) const
{
  //  local transformation of real local coordinates (x,z)
  //  expects x, z in cm (wrt corner of col/row 0:0
  x /= fPitchX;
  z = Z2Col(z);
  //
}

//_____________________________________________________________________________RS
void AliITSUSegmentationPix::GetPadCxz(Int_t ix,Int_t iz,Float_t &x,Float_t&z) const
{
  // Transform from pixel to real local coordinates
  // returns x, z in cm. wrt corner of col/row 0:0
  x = Float_t((ix+0.5)*fPitchX);
  z = Col2Z(iz);
  //
}

//_____________________________________________________________________________RS
Float_t AliITSUSegmentationPix::Z2Col(Float_t z) const 
{
  // get column number (from 0) from local Z (wrt bottom left corner of the active matrix)
  int chip = int(z/fChipDZ);
  float col = chip*fNColPerChip;
  z -= chip*fChipDZ;
  if (z>fPitchZLftCol) col += 1+(z-fPitchZLftCol)/fPitchZ;
  return col;
}

//_____________________________________________________________________________RS
Float_t AliITSUSegmentationPix::Col2Z(Int_t col) const 
{
  // convert column number (from 0) to Z coordinate wrt bottom left corner of the active matrix
  int nchip = col/fNColPerChip;
  col %= fNColPerChip;
  float z = nchip*fChipDZ;
  if (col>0) {
    if (col<fNColPerChip-1) z += fPitchZLftCol + (col-0.5)*fPitchZ;
    else                    z += fChipDZ - fPitchZRgtCol/2;
  }
  else z += fPitchZLftCol/2;
  return z;
  //
}

//______________________________________________________________________RS
AliITSUSegmentationPix& AliITSUSegmentationPix::operator=(const AliITSUSegmentationPix &src)
{
  // = operator
  if(this==&src) return *this;
  AliITSsegmentation::operator=(src);
  fNCol  = src.fNCol;
  fNRow  = src.fNRow;
  fNColPerChip  = src.fNColPerChip;
  fNChips = src.fNChips;
  fChipDZ = src.fChipDZ;
  fPitchZRgtCol = src.fPitchZRgtCol;
  fPitchZLftCol = src.fPitchZLftCol;
  fPitchZ = src.fPitchZ;
  fPitchX = src.fPitchX;
  fShiftXLoc = src.fShiftXLoc;
  fShiftZLoc = src.fShiftZLoc;
  fDxActive = src.fDxActive;
  fDzActive = src.fDzActive;
  //
  fGuardBot = src.fGuardBot;
  fGuardTop = src.fGuardTop;
  fGuardRgt = src.fGuardRgt;
  fGuardLft = src.fGuardLft;
  //
  fDiodShiftMatNCol = src.fDiodShiftMatNCol;
  fDiodShiftMatNRow = src.fDiodShiftMatNRow;
  fDiodShiftMatDim  = src.fDiodShiftMatDim;
  delete fDiodShidtMatX; fDiodShidtMatX = 0;
  delete fDiodShidtMatZ; fDiodShidtMatZ = 0;
  if (fDiodShiftMatDim) {
    fDiodShidtMatX = new Float_t[fDiodShiftMatDim];
    fDiodShidtMatZ = new Float_t[fDiodShiftMatDim];
    for (int i=fDiodShiftMatDim;i--;) {
      fDiodShidtMatX[i] = src.fDiodShidtMatX[i];
      fDiodShidtMatZ[i] = src.fDiodShidtMatZ[i];
    }
  }
  //
  return *this;
}

//____________________________________________________________________________RS
AliITSUSegmentationPix::AliITSUSegmentationPix(const AliITSUSegmentationPix &src) :
  AliITSsegmentation(src)
  ,fGuardLft(src.fGuardLft)
  ,fGuardRgt(src.fGuardRgt)
  ,fGuardTop(src.fGuardTop)
  ,fGuardBot(src.fGuardBot)
  ,fShiftXLoc(src.fShiftXLoc)
  ,fShiftZLoc(src.fShiftZLoc)
  ,fDxActive(src.fDxActive)
  ,fDzActive(src.fDzActive)
  ,fPitchX(src.fPitchX)
  ,fPitchZ(src.fPitchZ)
  ,fPitchZLftCol(src.fPitchZLftCol)
  ,fPitchZRgtCol(src.fPitchZRgtCol)
  ,fChipDZ(src.fChipDZ)
  ,fNChips(src.fNChips)
  ,fNColPerChip(src.fNColPerChip)
  ,fNRow(src.fNRow)
  ,fNCol(src.fNCol)  
  ,fDiodShiftMatNCol(src.fDiodShiftMatNCol)
  ,fDiodShiftMatNRow(src.fDiodShiftMatNRow)
  ,fDiodShiftMatDim(src.fDiodShiftMatDim)
  ,fDiodShidtMatX(0)
  ,fDiodShidtMatZ(0)
{
  // copy constructor
  if (fDiodShiftMatDim) {
    fDiodShidtMatX = new Float_t[fDiodShiftMatDim];
    fDiodShidtMatZ = new Float_t[fDiodShiftMatDim];
    for (int i=fDiodShiftMatDim;i--;) {
      fDiodShidtMatX[i] = src.fDiodShidtMatX[i];
      fDiodShidtMatZ[i] = src.fDiodShidtMatZ[i];
    }
  }
}

//____________________________________________________________________________RS
Float_t AliITSUSegmentationPix::Dpx(Int_t ) const 
{
  //returs x pixel pitch for a give pixel
  return fPitchX;
}

//____________________________________________________________________________RS
Float_t AliITSUSegmentationPix::Dpz(Int_t col) const 
{
  // returns z pixel pitch for a given pixel (cols starts from 0)
  col %= fNColPerChip;
  if (!col) return fPitchZLftCol;
  if (col==fNColPerChip-1) return fPitchZRgtCol;
  return fPitchZ;
  //
}

//------------------------------
void AliITSUSegmentationPix::Neighbours(Int_t iX, Int_t iZ, Int_t* nlist, Int_t xlist[8], Int_t zlist[8]) const 
{
  // returns the neighbouring pixels for use in Cluster Finders and the like.
  //
  *nlist=8;
  xlist[0]=xlist[1]=iX;
  xlist[2]=iX-1;
  xlist[3]=iX+1;
  zlist[0]=iZ-1;
  zlist[1]=iZ+1;
  zlist[2]=zlist[3]=iZ;
  // Diagonal elements
  xlist[4]=iX+1;
  zlist[4]=iZ+1;
  //  
  xlist[5]=iX-1;
  zlist[5]=iZ-1;
  //
  xlist[6]=iX-1;
  zlist[6]=iZ+1;
  //
  xlist[7]=iX+1;
  zlist[7]=iZ-1;
  //
}

//______________________________________________________________________
Bool_t AliITSUSegmentationPix::LocalToDet(Float_t x,Float_t z,Int_t &ix,Int_t &iz) const 
{
  // Transformation from Geant detector centered local coordinates (cm) to
  // Pixel cell numbers ix and iz.
  // Input:
  //    Float_t   x        detector local coordinate x in cm with respect to
  //                       the center of the sensitive volume.
  //    Float_t   z        detector local coordinate z in cm with respect to
  //                       the center of the sensitive volulme.
  // Output:
  //    Int_t    ix        detector x cell coordinate. Has the range 
  //                       0<=ix<fNRow.
  //    Int_t    iz        detector z cell coordinate. Has the range 
  //                       0<=iz<fNCol.
  // Return:
  //   kTRUE if point x,z is inside sensitive volume, kFALSE otherwise.
  //   A value of -1 for ix or iz indecates that this point is outside of the
  //   detector segmentation as defined.
  x += 0.5*DxActive() + fShiftXLoc; // get X,Z wrt bottom/left corner
  z += 0.5*DzActive() + fShiftZLoc;
  ix = iz = -1;
  if(x<0 || x>DxActive()) return kFALSE; // outside x range.
  if(z<0 || z>DzActive()) return kFALSE; // outside z range.
  ix = int(x/fPitchX);
  iz = Z2Col(z);
  return kTRUE; // Found ix and iz, return.
}

//______________________________________________________________________
void AliITSUSegmentationPix::DetToLocal(Int_t ix,Int_t iz,Float_t &x,Float_t &z) const
{
// Transformation from Detector cell coordiantes to Geant detector centered 
// local coordinates (cm).
// Input:
// Int_t    ix        detector x cell coordinate. Has the range 0<=ix<fNRow.
// Int_t    iz        detector z cell coordinate. Has the range 0<=iz<fNCol.
// Output:
// Float_t   x        detector local coordinate x in cm with respect to the
//                    center of the sensitive volume.
// Float_t   z        detector local coordinate z in cm with respect to the
//                    center of the sensitive volulme.
// If ix and or iz is outside of the segmentation range a value of -0.5*Dx()
// or -0.5*Dz() is returned.
  //
  x = -0.5*DxActive(); // default value.
  z = -0.5*DzActive(); // default value.
  if(ix<0 || ix>=fNRow) {AliWarning(Form("Obtained row %d is not in range [%d:%d)",ix,0,fNRow)); return;} // outside of detector 
  if(iz<0 || iz>=fNCol) {AliWarning(Form("Obtained col %d is not in range [%d:%d)",ix,0,fNCol)); return;} // outside of detector 
  x += (ix+0.5)*fPitchX - fShiftXLoc;       // RS: we go to the center of the pad, i.e. + pitch/2, not to the boundary as in SPD
  z += Col2Z(iz)        - fShiftZLoc; 
  return; // Found x and z, return.
}

//______________________________________________________________________
void AliITSUSegmentationPix::CellBoundries(Int_t ix,Int_t iz,Double_t &xl,Double_t &xu,Double_t &zl,Double_t &zu) const
{
  // Transformation from Detector cell coordiantes to Geant detector centerd 
  // local coordinates (cm).
  // Input:
  // Int_t    ix        detector x cell coordinate. Has the range 0<=ix<fNRow.
  // Int_t    iz        detector z cell coordinate. Has the range 0<=iz<fNCol.
  // Output:
  // Double_t   xl       detector local coordinate cell lower bounds x in cm
  //                    with respect to the center of the sensitive volume.
  // Double_t   xu       detector local coordinate cell upper bounds x in cm 
  //                    with respect to the center of the sensitive volume.
  // Double_t   zl       detector local coordinate lower bounds z in cm with
  //                    respect to the center of the sensitive volulme.
  // Double_t   zu       detector local coordinate upper bounds z in cm with 
  //                    respect to the center of the sensitive volulme.
  // If ix and or iz is outside of the segmentation range a value of -0.5*DxActive()
  // and -0.5*DxActive() or -0.5*DzActive() and -0.5*DzActive() are returned.
  Float_t x,z;
  DetToLocal(ix,iz,x,z);
  //
  if( ix<0 || ix>=fNRow || iz<0 || iz>=fNCol) {
    xl = xu = -0.5*Dx(); // default value.
    zl = zu = -0.5*Dz(); // default value.
    return; // outside of detctor
  }
  float zpitchH = Dpz(iz)*0.5;
  float xpitchH = fPitchX*0.5;
  xl -= xpitchH;
  xu += xpitchH;
  zl -= zpitchH;
  zu += zpitchH;
  return; // Found x and z, return.
}

//______________________________________________________________________
Int_t AliITSUSegmentationPix::GetChipFromChannel(Int_t, Int_t iz) const 
{
  // returns chip number (in range 0-4) starting from channel number
  if(iz>=fNCol  || iz<0 ){
    AliWarning("Bad cell number");
    return -1;
  }
  return iz/fNColPerChip;
}

//______________________________________________________________________
Int_t AliITSUSegmentationPix::GetChipFromLocal(Float_t, Float_t zloc) const 
{
  // returns chip number (in range 0-4) starting from local Geant coordinates
  Int_t ix0,iz;
  if (!LocalToDet(0,zloc,ix0,iz)) {
    AliWarning("Bad local coordinate");
    return -1;
  } 
  return GetChipFromChannel(ix0,iz);
}

//______________________________________________________________________
Int_t AliITSUSegmentationPix::GetChipsInLocalWindow(Int_t* array, Float_t zmin, Float_t zmax, Float_t, Float_t) const 
{
  // returns the number of chips containing a road defined by given local Geant coordinate limits
  //
  if (zmin>zmax) {
    AliWarning("Bad coordinate limits: zmin>zmax!");
    return -1;
  } 
  //
  Int_t nChipInW = 0;
  //
  Float_t zminDet = -0.5*DzActive()-fShiftZLoc;
  Float_t zmaxDet =  0.5*DzActive()-fShiftZLoc;
  if(zmin<zminDet) zmin=zminDet;
  if(zmax>zmaxDet) zmax=zmaxDet;

  Int_t n1 = GetChipFromLocal(0,zmin);
  array[nChipInW] = n1;
  nChipInW++;

  Int_t n2 = GetChipFromLocal(0,zmax);

  if(n2!=n1){
    Int_t imin=Min(n1,n2);
    Int_t imax=Max(n1,n2);
    for(Int_t ichip=imin; ichip<=imax; ichip++){
      if(ichip==n1) continue;
      array[nChipInW]=ichip;
      nChipInW++;
    }
  }
  //
  return nChipInW;
}

//______________________________________________________________________
void AliITSUSegmentationPix::Init()
{
  // init settings
}

//______________________________________________________________________
Bool_t AliITSUSegmentationPix::Store(const char* outf)
{
  // store in the special list under given ID
  TString fns = outf;
  gSystem->ExpandPathName(fns);
  if (fns.IsNull()) {AliFatal("No file name provided"); return kFALSE;}
  TFile* fout = TFile::Open(fns.Data(),"update");
  if (!fout) {AliFatal(Form("Failed to open output file %s",outf)); return kFALSE;}
  TObjArray* arr = (TObjArray*)fout->Get(fgkSegmListName);
  int id = GetUniqueID();
  if (!arr) arr = new TObjArray();
  else if (arr->At(id)) {AliFatal(Form("Segmenation %d already exists in file %s",id,outf));return kFALSE;}
  //
  arr->AddAtAndExpand(this,id);
  arr->SetOwner(kTRUE);
  fout->WriteObject(arr,fgkSegmListName,"kSingleKey");
  fout->Close();
  delete fout;
  arr->RemoveAt(id);
  delete arr;
  AliInfo(Form("Stored segmentation %d in %s",id,outf));
  return kTRUE;
  //
}

//______________________________________________________________________
AliITSUSegmentationPix* AliITSUSegmentationPix::LoadWithID(UInt_t id, const char* inpf)
{
  // store in the special list under given ID
  TString fns = inpf;
  gSystem->ExpandPathName(fns);
  if (fns.IsNull()) {AliFatalGeneral("LoadWithID","No file name provided"); return 0;}
  TFile* finp = TFile::Open(fns.Data());
  if (!finp) {AliFatalGeneral("LoadWithID",Form("Failed to open file %s",inpf)); return 0;}
  TObjArray* arr = (TObjArray*)finp->Get(fgkSegmListName);
  if (!arr) {
    AliFatalGeneral("LoadWithID",Form("Failed to find segmenation array %s in %s",fgkSegmListName,inpf)); 
    return 0;
  }
  AliITSUSegmentationPix* segm = dynamic_cast<AliITSUSegmentationPix*>(arr->At(id));
  if (!segm || segm->GetUniqueID()!=id) {AliFatalGeneral("LoadWithID",Form("Failed to find segmenation %d in %s",id,inpf)); return 0;}
  //
  arr->RemoveAt(id);
  arr->SetOwner(kTRUE); // to not leave in memory other segmenations
  finp->Close();
  delete finp;
  delete arr;
  //
  return segm;
}

//______________________________________________________________________
void AliITSUSegmentationPix::LoadSegmentations(TObjArray* dest, const char* inpf)
{
  // store in the special list under given ID
  if (!dest) return;
  TString fns = inpf;
  gSystem->ExpandPathName(fns);
  if (fns.IsNull()) AliFatalGeneral("LoadWithID","No file name provided");
  TFile* finp = TFile::Open(fns.Data());
  if (!finp) AliFatalGeneral("LoadWithID",Form("Failed to open file %s",inpf));
  TObjArray* arr = (TObjArray*)finp->Get(fgkSegmListName);
  if (!arr) AliFatalGeneral("LoadWithID",Form("Failed to find segmenation array %s in %s",fgkSegmListName,inpf)); 
  int nent = arr->GetEntriesFast();
  TObject *segm = 0;
  for (int i=nent;i--;) if ((segm=arr->At(i))) dest->AddAtAndExpand(segm,segm->GetUniqueID());
  AliInfoGeneral("LoadSegmentations",Form("Loaded %d segmantions from %s",arr->GetEntries(),inpf));
  arr->SetOwner(kFALSE);
  arr->Clear();
  finp->Close();
  delete finp;
  delete arr;
  //
}

//______________________________________________________________________
void AliITSUSegmentationPix::SetDiodShiftMatrix(Int_t nrow,Int_t ncol, const Float_t *shiftX, const Float_t *shiftZ)
{
  // set matrix of periodic shifts of diod center. provided arrays must be in the format shift[nrow][ncol]
  if (fDiodShiftMatDim) {
    delete fDiodShidtMatX;
    delete fDiodShidtMatZ;
    fDiodShidtMatX = fDiodShidtMatZ = 0;
  }
  //
  fDiodShiftMatNCol = ncol;
  fDiodShiftMatNRow = nrow;
  fDiodShiftMatDim = fDiodShiftMatNCol*fDiodShiftMatNRow;
  if (fDiodShiftMatDim) {
    fDiodShidtMatX = new Float_t[fDiodShiftMatDim];
    fDiodShidtMatZ = new Float_t[fDiodShiftMatDim];    
    for (int ir=0;ir<fDiodShiftMatNRow;ir++) {
      for (int ic=0;ic<fDiodShiftMatNCol;ic++) {
	int cnt = ic+ir*fDiodShiftMatNCol;
	fDiodShidtMatX[cnt] = shiftX ? shiftX[cnt] : 0.;
	fDiodShidtMatZ[cnt] = shiftZ ? shiftZ[cnt] : 0.;
      }
    }
  }
  
}
//______________________________________________________________________
void AliITSUSegmentationPix::SetDiodShiftMatrix(Int_t nrow,Int_t ncol, const Double_t *shiftX, const Double_t *shiftZ)
{
  // set matrix of periodic shifts of diod center. provided arrays must be in the format shift[nrow][ncol]
  if (fDiodShiftMatDim) {
    delete fDiodShidtMatX;
    delete fDiodShidtMatZ;
    fDiodShidtMatX = fDiodShidtMatZ = 0;
  }
  //
  fDiodShiftMatNCol = ncol;
  fDiodShiftMatNRow = nrow;
  fDiodShiftMatDim = fDiodShiftMatNCol*fDiodShiftMatNRow;
  if (fDiodShiftMatDim) {
    fDiodShidtMatX = new Float_t[fDiodShiftMatDim];
    fDiodShidtMatZ = new Float_t[fDiodShiftMatDim];    
    for (int ir=0;ir<fDiodShiftMatNRow;ir++) {
      for (int ic=0;ic<fDiodShiftMatNCol;ic++) {
	int cnt = ic+ir*fDiodShiftMatNCol;
	fDiodShidtMatX[cnt] = shiftX ? shiftX[cnt] : 0.;
	fDiodShidtMatZ[cnt] = shiftZ ? shiftZ[cnt] : 0.;
      }
    }
  }
}

//______________________________________________________________________
void AliITSUSegmentationPix::Print(Option_t* /*option*/) const
{
  // print itself
  const double kmc=1e4;
  printf("Segmentation %d: Active Size: DX: %.1f DY: %.1f DZ: %.1f | Pitch: X:%.1f Z:%.1f\n",
	 GetUniqueID(),kmc*DxActive(),kmc*Dy(),kmc*DzActive(),kmc*Dpx(1),kmc*Dpz(1));
  printf("Passive Edges: Bottom: %.1f Right: %.1f Top: %.1f Left: %.1f -> DX: %.1f DZ: %.1f Shift: x:%.1f z:%.1f\n",
	 kmc*fGuardBot,kmc*fGuardRgt,kmc*fGuardTop,kmc*fGuardLft,kmc*Dx(),kmc*Dz(),kmc*fShiftXLoc,kmc*fShiftZLoc);
  printf("%d chips along Z: chip Ncol=%d Nrow=%d\n",fNChips, fNColPerChip,fNRow);
  if (Abs(fPitchZLftCol-fPitchZ)>1e-5) printf("Special left  column pitch: %.1f\n",fPitchZLftCol*kmc);
  if (Abs(fPitchZRgtCol-fPitchZ)>1e-5) printf("Special right column pitch: %.1f\n",fPitchZRgtCol*kmc);
  //
  if (fDiodShiftMatDim) {
    double dx,dz=0;
    printf("Diod shift (fraction of pitch) periodicity pattern (X,Z[row][col])\n");
    for (int irow=0;irow<fDiodShiftMatNRow;irow++) {
      for (int icol=0;icol<fDiodShiftMatNCol;icol++) {	
	GetDiodShift(irow,icol,dx,dz);
	printf("%.1f/%.1f |",dx,dz);
      }
      printf("\n");
    }
  }
}

//______________________________________________________________________
void AliITSUSegmentationPix::GetDiodShift(Int_t row,Int_t col, Float_t &dx,Float_t &dz) const
{
  // obtain optional diod shift
  if (!fDiodShiftMatDim) {dx=dz=0; return;}
  int cnt = (col%fDiodShiftMatNCol) + (row%fDiodShiftMatNRow)*fDiodShiftMatNCol;
  dx = fDiodShidtMatX[cnt];
  dz = fDiodShidtMatZ[cnt];  
  //
}
 AliITSUSegmentationPix.cxx:1
 AliITSUSegmentationPix.cxx:2
 AliITSUSegmentationPix.cxx:3
 AliITSUSegmentationPix.cxx:4
 AliITSUSegmentationPix.cxx:5
 AliITSUSegmentationPix.cxx:6
 AliITSUSegmentationPix.cxx:7
 AliITSUSegmentationPix.cxx:8
 AliITSUSegmentationPix.cxx:9
 AliITSUSegmentationPix.cxx:10
 AliITSUSegmentationPix.cxx:11
 AliITSUSegmentationPix.cxx:12
 AliITSUSegmentationPix.cxx:13
 AliITSUSegmentationPix.cxx:14
 AliITSUSegmentationPix.cxx:15
 AliITSUSegmentationPix.cxx:16
 AliITSUSegmentationPix.cxx:17
 AliITSUSegmentationPix.cxx:18
 AliITSUSegmentationPix.cxx:19
 AliITSUSegmentationPix.cxx:20
 AliITSUSegmentationPix.cxx:21
 AliITSUSegmentationPix.cxx:22
 AliITSUSegmentationPix.cxx:23
 AliITSUSegmentationPix.cxx:24
 AliITSUSegmentationPix.cxx:25
 AliITSUSegmentationPix.cxx:26
 AliITSUSegmentationPix.cxx:27
 AliITSUSegmentationPix.cxx:28
 AliITSUSegmentationPix.cxx:29
 AliITSUSegmentationPix.cxx:30
 AliITSUSegmentationPix.cxx:31
 AliITSUSegmentationPix.cxx:32
 AliITSUSegmentationPix.cxx:33
 AliITSUSegmentationPix.cxx:34
 AliITSUSegmentationPix.cxx:35
 AliITSUSegmentationPix.cxx:36
 AliITSUSegmentationPix.cxx:37
 AliITSUSegmentationPix.cxx:38
 AliITSUSegmentationPix.cxx:39
 AliITSUSegmentationPix.cxx:40
 AliITSUSegmentationPix.cxx:41
 AliITSUSegmentationPix.cxx:42
 AliITSUSegmentationPix.cxx:43
 AliITSUSegmentationPix.cxx:44
 AliITSUSegmentationPix.cxx:45
 AliITSUSegmentationPix.cxx:46
 AliITSUSegmentationPix.cxx:47
 AliITSUSegmentationPix.cxx:48
 AliITSUSegmentationPix.cxx:49
 AliITSUSegmentationPix.cxx:50
 AliITSUSegmentationPix.cxx:51
 AliITSUSegmentationPix.cxx:52
 AliITSUSegmentationPix.cxx:53
 AliITSUSegmentationPix.cxx:54
 AliITSUSegmentationPix.cxx:55
 AliITSUSegmentationPix.cxx:56
 AliITSUSegmentationPix.cxx:57
 AliITSUSegmentationPix.cxx:58
 AliITSUSegmentationPix.cxx:59
 AliITSUSegmentationPix.cxx:60
 AliITSUSegmentationPix.cxx:61
 AliITSUSegmentationPix.cxx:62
 AliITSUSegmentationPix.cxx:63
 AliITSUSegmentationPix.cxx:64
 AliITSUSegmentationPix.cxx:65
 AliITSUSegmentationPix.cxx:66
 AliITSUSegmentationPix.cxx:67
 AliITSUSegmentationPix.cxx:68
 AliITSUSegmentationPix.cxx:69
 AliITSUSegmentationPix.cxx:70
 AliITSUSegmentationPix.cxx:71
 AliITSUSegmentationPix.cxx:72
 AliITSUSegmentationPix.cxx:73
 AliITSUSegmentationPix.cxx:74
 AliITSUSegmentationPix.cxx:75
 AliITSUSegmentationPix.cxx:76
 AliITSUSegmentationPix.cxx:77
 AliITSUSegmentationPix.cxx:78
 AliITSUSegmentationPix.cxx:79
 AliITSUSegmentationPix.cxx:80
 AliITSUSegmentationPix.cxx:81
 AliITSUSegmentationPix.cxx:82
 AliITSUSegmentationPix.cxx:83
 AliITSUSegmentationPix.cxx:84
 AliITSUSegmentationPix.cxx:85
 AliITSUSegmentationPix.cxx:86
 AliITSUSegmentationPix.cxx:87
 AliITSUSegmentationPix.cxx:88
 AliITSUSegmentationPix.cxx:89
 AliITSUSegmentationPix.cxx:90
 AliITSUSegmentationPix.cxx:91
 AliITSUSegmentationPix.cxx:92
 AliITSUSegmentationPix.cxx:93
 AliITSUSegmentationPix.cxx:94
 AliITSUSegmentationPix.cxx:95
 AliITSUSegmentationPix.cxx:96
 AliITSUSegmentationPix.cxx:97
 AliITSUSegmentationPix.cxx:98
 AliITSUSegmentationPix.cxx:99
 AliITSUSegmentationPix.cxx:100
 AliITSUSegmentationPix.cxx:101
 AliITSUSegmentationPix.cxx:102
 AliITSUSegmentationPix.cxx:103
 AliITSUSegmentationPix.cxx:104
 AliITSUSegmentationPix.cxx:105
 AliITSUSegmentationPix.cxx:106
 AliITSUSegmentationPix.cxx:107
 AliITSUSegmentationPix.cxx:108
 AliITSUSegmentationPix.cxx:109
 AliITSUSegmentationPix.cxx:110
 AliITSUSegmentationPix.cxx:111
 AliITSUSegmentationPix.cxx:112
 AliITSUSegmentationPix.cxx:113
 AliITSUSegmentationPix.cxx:114
 AliITSUSegmentationPix.cxx:115
 AliITSUSegmentationPix.cxx:116
 AliITSUSegmentationPix.cxx:117
 AliITSUSegmentationPix.cxx:118
 AliITSUSegmentationPix.cxx:119
 AliITSUSegmentationPix.cxx:120
 AliITSUSegmentationPix.cxx:121
 AliITSUSegmentationPix.cxx:122
 AliITSUSegmentationPix.cxx:123
 AliITSUSegmentationPix.cxx:124
 AliITSUSegmentationPix.cxx:125
 AliITSUSegmentationPix.cxx:126
 AliITSUSegmentationPix.cxx:127
 AliITSUSegmentationPix.cxx:128
 AliITSUSegmentationPix.cxx:129
 AliITSUSegmentationPix.cxx:130
 AliITSUSegmentationPix.cxx:131
 AliITSUSegmentationPix.cxx:132
 AliITSUSegmentationPix.cxx:133
 AliITSUSegmentationPix.cxx:134
 AliITSUSegmentationPix.cxx:135
 AliITSUSegmentationPix.cxx:136
 AliITSUSegmentationPix.cxx:137
 AliITSUSegmentationPix.cxx:138
 AliITSUSegmentationPix.cxx:139
 AliITSUSegmentationPix.cxx:140
 AliITSUSegmentationPix.cxx:141
 AliITSUSegmentationPix.cxx:142
 AliITSUSegmentationPix.cxx:143
 AliITSUSegmentationPix.cxx:144
 AliITSUSegmentationPix.cxx:145
 AliITSUSegmentationPix.cxx:146
 AliITSUSegmentationPix.cxx:147
 AliITSUSegmentationPix.cxx:148
 AliITSUSegmentationPix.cxx:149
 AliITSUSegmentationPix.cxx:150
 AliITSUSegmentationPix.cxx:151
 AliITSUSegmentationPix.cxx:152
 AliITSUSegmentationPix.cxx:153
 AliITSUSegmentationPix.cxx:154
 AliITSUSegmentationPix.cxx:155
 AliITSUSegmentationPix.cxx:156
 AliITSUSegmentationPix.cxx:157
 AliITSUSegmentationPix.cxx:158
 AliITSUSegmentationPix.cxx:159
 AliITSUSegmentationPix.cxx:160
 AliITSUSegmentationPix.cxx:161
 AliITSUSegmentationPix.cxx:162
 AliITSUSegmentationPix.cxx:163
 AliITSUSegmentationPix.cxx:164
 AliITSUSegmentationPix.cxx:165
 AliITSUSegmentationPix.cxx:166
 AliITSUSegmentationPix.cxx:167
 AliITSUSegmentationPix.cxx:168
 AliITSUSegmentationPix.cxx:169
 AliITSUSegmentationPix.cxx:170
 AliITSUSegmentationPix.cxx:171
 AliITSUSegmentationPix.cxx:172
 AliITSUSegmentationPix.cxx:173
 AliITSUSegmentationPix.cxx:174
 AliITSUSegmentationPix.cxx:175
 AliITSUSegmentationPix.cxx:176
 AliITSUSegmentationPix.cxx:177
 AliITSUSegmentationPix.cxx:178
 AliITSUSegmentationPix.cxx:179
 AliITSUSegmentationPix.cxx:180
 AliITSUSegmentationPix.cxx:181
 AliITSUSegmentationPix.cxx:182
 AliITSUSegmentationPix.cxx:183
 AliITSUSegmentationPix.cxx:184
 AliITSUSegmentationPix.cxx:185
 AliITSUSegmentationPix.cxx:186
 AliITSUSegmentationPix.cxx:187
 AliITSUSegmentationPix.cxx:188
 AliITSUSegmentationPix.cxx:189
 AliITSUSegmentationPix.cxx:190
 AliITSUSegmentationPix.cxx:191
 AliITSUSegmentationPix.cxx:192
 AliITSUSegmentationPix.cxx:193
 AliITSUSegmentationPix.cxx:194
 AliITSUSegmentationPix.cxx:195
 AliITSUSegmentationPix.cxx:196
 AliITSUSegmentationPix.cxx:197
 AliITSUSegmentationPix.cxx:198
 AliITSUSegmentationPix.cxx:199
 AliITSUSegmentationPix.cxx:200
 AliITSUSegmentationPix.cxx:201
 AliITSUSegmentationPix.cxx:202
 AliITSUSegmentationPix.cxx:203
 AliITSUSegmentationPix.cxx:204
 AliITSUSegmentationPix.cxx:205
 AliITSUSegmentationPix.cxx:206
 AliITSUSegmentationPix.cxx:207
 AliITSUSegmentationPix.cxx:208
 AliITSUSegmentationPix.cxx:209
 AliITSUSegmentationPix.cxx:210
 AliITSUSegmentationPix.cxx:211
 AliITSUSegmentationPix.cxx:212
 AliITSUSegmentationPix.cxx:213
 AliITSUSegmentationPix.cxx:214
 AliITSUSegmentationPix.cxx:215
 AliITSUSegmentationPix.cxx:216
 AliITSUSegmentationPix.cxx:217
 AliITSUSegmentationPix.cxx:218
 AliITSUSegmentationPix.cxx:219
 AliITSUSegmentationPix.cxx:220
 AliITSUSegmentationPix.cxx:221
 AliITSUSegmentationPix.cxx:222
 AliITSUSegmentationPix.cxx:223
 AliITSUSegmentationPix.cxx:224
 AliITSUSegmentationPix.cxx:225
 AliITSUSegmentationPix.cxx:226
 AliITSUSegmentationPix.cxx:227
 AliITSUSegmentationPix.cxx:228
 AliITSUSegmentationPix.cxx:229
 AliITSUSegmentationPix.cxx:230
 AliITSUSegmentationPix.cxx:231
 AliITSUSegmentationPix.cxx:232
 AliITSUSegmentationPix.cxx:233
 AliITSUSegmentationPix.cxx:234
 AliITSUSegmentationPix.cxx:235
 AliITSUSegmentationPix.cxx:236
 AliITSUSegmentationPix.cxx:237
 AliITSUSegmentationPix.cxx:238
 AliITSUSegmentationPix.cxx:239
 AliITSUSegmentationPix.cxx:240
 AliITSUSegmentationPix.cxx:241
 AliITSUSegmentationPix.cxx:242
 AliITSUSegmentationPix.cxx:243
 AliITSUSegmentationPix.cxx:244
 AliITSUSegmentationPix.cxx:245
 AliITSUSegmentationPix.cxx:246
 AliITSUSegmentationPix.cxx:247
 AliITSUSegmentationPix.cxx:248
 AliITSUSegmentationPix.cxx:249
 AliITSUSegmentationPix.cxx:250
 AliITSUSegmentationPix.cxx:251
 AliITSUSegmentationPix.cxx:252
 AliITSUSegmentationPix.cxx:253
 AliITSUSegmentationPix.cxx:254
 AliITSUSegmentationPix.cxx:255
 AliITSUSegmentationPix.cxx:256
 AliITSUSegmentationPix.cxx:257
 AliITSUSegmentationPix.cxx:258
 AliITSUSegmentationPix.cxx:259
 AliITSUSegmentationPix.cxx:260
 AliITSUSegmentationPix.cxx:261
 AliITSUSegmentationPix.cxx:262
 AliITSUSegmentationPix.cxx:263
 AliITSUSegmentationPix.cxx:264
 AliITSUSegmentationPix.cxx:265
 AliITSUSegmentationPix.cxx:266
 AliITSUSegmentationPix.cxx:267
 AliITSUSegmentationPix.cxx:268
 AliITSUSegmentationPix.cxx:269
 AliITSUSegmentationPix.cxx:270
 AliITSUSegmentationPix.cxx:271
 AliITSUSegmentationPix.cxx:272
 AliITSUSegmentationPix.cxx:273
 AliITSUSegmentationPix.cxx:274
 AliITSUSegmentationPix.cxx:275
 AliITSUSegmentationPix.cxx:276
 AliITSUSegmentationPix.cxx:277
 AliITSUSegmentationPix.cxx:278
 AliITSUSegmentationPix.cxx:279
 AliITSUSegmentationPix.cxx:280
 AliITSUSegmentationPix.cxx:281
 AliITSUSegmentationPix.cxx:282
 AliITSUSegmentationPix.cxx:283
 AliITSUSegmentationPix.cxx:284
 AliITSUSegmentationPix.cxx:285
 AliITSUSegmentationPix.cxx:286
 AliITSUSegmentationPix.cxx:287
 AliITSUSegmentationPix.cxx:288
 AliITSUSegmentationPix.cxx:289
 AliITSUSegmentationPix.cxx:290
 AliITSUSegmentationPix.cxx:291
 AliITSUSegmentationPix.cxx:292
 AliITSUSegmentationPix.cxx:293
 AliITSUSegmentationPix.cxx:294
 AliITSUSegmentationPix.cxx:295
 AliITSUSegmentationPix.cxx:296
 AliITSUSegmentationPix.cxx:297
 AliITSUSegmentationPix.cxx:298
 AliITSUSegmentationPix.cxx:299
 AliITSUSegmentationPix.cxx:300
 AliITSUSegmentationPix.cxx:301
 AliITSUSegmentationPix.cxx:302
 AliITSUSegmentationPix.cxx:303
 AliITSUSegmentationPix.cxx:304
 AliITSUSegmentationPix.cxx:305
 AliITSUSegmentationPix.cxx:306
 AliITSUSegmentationPix.cxx:307
 AliITSUSegmentationPix.cxx:308
 AliITSUSegmentationPix.cxx:309
 AliITSUSegmentationPix.cxx:310
 AliITSUSegmentationPix.cxx:311
 AliITSUSegmentationPix.cxx:312
 AliITSUSegmentationPix.cxx:313
 AliITSUSegmentationPix.cxx:314
 AliITSUSegmentationPix.cxx:315
 AliITSUSegmentationPix.cxx:316
 AliITSUSegmentationPix.cxx:317
 AliITSUSegmentationPix.cxx:318
 AliITSUSegmentationPix.cxx:319
 AliITSUSegmentationPix.cxx:320
 AliITSUSegmentationPix.cxx:321
 AliITSUSegmentationPix.cxx:322
 AliITSUSegmentationPix.cxx:323
 AliITSUSegmentationPix.cxx:324
 AliITSUSegmentationPix.cxx:325
 AliITSUSegmentationPix.cxx:326
 AliITSUSegmentationPix.cxx:327
 AliITSUSegmentationPix.cxx:328
 AliITSUSegmentationPix.cxx:329
 AliITSUSegmentationPix.cxx:330
 AliITSUSegmentationPix.cxx:331
 AliITSUSegmentationPix.cxx:332
 AliITSUSegmentationPix.cxx:333
 AliITSUSegmentationPix.cxx:334
 AliITSUSegmentationPix.cxx:335
 AliITSUSegmentationPix.cxx:336
 AliITSUSegmentationPix.cxx:337
 AliITSUSegmentationPix.cxx:338
 AliITSUSegmentationPix.cxx:339
 AliITSUSegmentationPix.cxx:340
 AliITSUSegmentationPix.cxx:341
 AliITSUSegmentationPix.cxx:342
 AliITSUSegmentationPix.cxx:343
 AliITSUSegmentationPix.cxx:344
 AliITSUSegmentationPix.cxx:345
 AliITSUSegmentationPix.cxx:346
 AliITSUSegmentationPix.cxx:347
 AliITSUSegmentationPix.cxx:348
 AliITSUSegmentationPix.cxx:349
 AliITSUSegmentationPix.cxx:350
 AliITSUSegmentationPix.cxx:351
 AliITSUSegmentationPix.cxx:352
 AliITSUSegmentationPix.cxx:353
 AliITSUSegmentationPix.cxx:354
 AliITSUSegmentationPix.cxx:355
 AliITSUSegmentationPix.cxx:356
 AliITSUSegmentationPix.cxx:357
 AliITSUSegmentationPix.cxx:358
 AliITSUSegmentationPix.cxx:359
 AliITSUSegmentationPix.cxx:360
 AliITSUSegmentationPix.cxx:361
 AliITSUSegmentationPix.cxx:362
 AliITSUSegmentationPix.cxx:363
 AliITSUSegmentationPix.cxx:364
 AliITSUSegmentationPix.cxx:365
 AliITSUSegmentationPix.cxx:366
 AliITSUSegmentationPix.cxx:367
 AliITSUSegmentationPix.cxx:368
 AliITSUSegmentationPix.cxx:369
 AliITSUSegmentationPix.cxx:370
 AliITSUSegmentationPix.cxx:371
 AliITSUSegmentationPix.cxx:372
 AliITSUSegmentationPix.cxx:373
 AliITSUSegmentationPix.cxx:374
 AliITSUSegmentationPix.cxx:375
 AliITSUSegmentationPix.cxx:376
 AliITSUSegmentationPix.cxx:377
 AliITSUSegmentationPix.cxx:378
 AliITSUSegmentationPix.cxx:379
 AliITSUSegmentationPix.cxx:380
 AliITSUSegmentationPix.cxx:381
 AliITSUSegmentationPix.cxx:382
 AliITSUSegmentationPix.cxx:383
 AliITSUSegmentationPix.cxx:384
 AliITSUSegmentationPix.cxx:385
 AliITSUSegmentationPix.cxx:386
 AliITSUSegmentationPix.cxx:387
 AliITSUSegmentationPix.cxx:388
 AliITSUSegmentationPix.cxx:389
 AliITSUSegmentationPix.cxx:390
 AliITSUSegmentationPix.cxx:391
 AliITSUSegmentationPix.cxx:392
 AliITSUSegmentationPix.cxx:393
 AliITSUSegmentationPix.cxx:394
 AliITSUSegmentationPix.cxx:395
 AliITSUSegmentationPix.cxx:396
 AliITSUSegmentationPix.cxx:397
 AliITSUSegmentationPix.cxx:398
 AliITSUSegmentationPix.cxx:399
 AliITSUSegmentationPix.cxx:400
 AliITSUSegmentationPix.cxx:401
 AliITSUSegmentationPix.cxx:402
 AliITSUSegmentationPix.cxx:403
 AliITSUSegmentationPix.cxx:404
 AliITSUSegmentationPix.cxx:405
 AliITSUSegmentationPix.cxx:406
 AliITSUSegmentationPix.cxx:407
 AliITSUSegmentationPix.cxx:408
 AliITSUSegmentationPix.cxx:409
 AliITSUSegmentationPix.cxx:410
 AliITSUSegmentationPix.cxx:411
 AliITSUSegmentationPix.cxx:412
 AliITSUSegmentationPix.cxx:413
 AliITSUSegmentationPix.cxx:414
 AliITSUSegmentationPix.cxx:415
 AliITSUSegmentationPix.cxx:416
 AliITSUSegmentationPix.cxx:417
 AliITSUSegmentationPix.cxx:418
 AliITSUSegmentationPix.cxx:419
 AliITSUSegmentationPix.cxx:420
 AliITSUSegmentationPix.cxx:421
 AliITSUSegmentationPix.cxx:422
 AliITSUSegmentationPix.cxx:423
 AliITSUSegmentationPix.cxx:424
 AliITSUSegmentationPix.cxx:425
 AliITSUSegmentationPix.cxx:426
 AliITSUSegmentationPix.cxx:427
 AliITSUSegmentationPix.cxx:428
 AliITSUSegmentationPix.cxx:429
 AliITSUSegmentationPix.cxx:430
 AliITSUSegmentationPix.cxx:431
 AliITSUSegmentationPix.cxx:432
 AliITSUSegmentationPix.cxx:433
 AliITSUSegmentationPix.cxx:434
 AliITSUSegmentationPix.cxx:435
 AliITSUSegmentationPix.cxx:436
 AliITSUSegmentationPix.cxx:437
 AliITSUSegmentationPix.cxx:438
 AliITSUSegmentationPix.cxx:439
 AliITSUSegmentationPix.cxx:440
 AliITSUSegmentationPix.cxx:441
 AliITSUSegmentationPix.cxx:442
 AliITSUSegmentationPix.cxx:443
 AliITSUSegmentationPix.cxx:444
 AliITSUSegmentationPix.cxx:445
 AliITSUSegmentationPix.cxx:446
 AliITSUSegmentationPix.cxx:447
 AliITSUSegmentationPix.cxx:448
 AliITSUSegmentationPix.cxx:449
 AliITSUSegmentationPix.cxx:450
 AliITSUSegmentationPix.cxx:451
 AliITSUSegmentationPix.cxx:452
 AliITSUSegmentationPix.cxx:453
 AliITSUSegmentationPix.cxx:454
 AliITSUSegmentationPix.cxx:455
 AliITSUSegmentationPix.cxx:456
 AliITSUSegmentationPix.cxx:457
 AliITSUSegmentationPix.cxx:458
 AliITSUSegmentationPix.cxx:459
 AliITSUSegmentationPix.cxx:460
 AliITSUSegmentationPix.cxx:461
 AliITSUSegmentationPix.cxx:462
 AliITSUSegmentationPix.cxx:463
 AliITSUSegmentationPix.cxx:464
 AliITSUSegmentationPix.cxx:465
 AliITSUSegmentationPix.cxx:466
 AliITSUSegmentationPix.cxx:467
 AliITSUSegmentationPix.cxx:468
 AliITSUSegmentationPix.cxx:469
 AliITSUSegmentationPix.cxx:470
 AliITSUSegmentationPix.cxx:471
 AliITSUSegmentationPix.cxx:472
 AliITSUSegmentationPix.cxx:473
 AliITSUSegmentationPix.cxx:474
 AliITSUSegmentationPix.cxx:475
 AliITSUSegmentationPix.cxx:476
 AliITSUSegmentationPix.cxx:477
 AliITSUSegmentationPix.cxx:478
 AliITSUSegmentationPix.cxx:479
 AliITSUSegmentationPix.cxx:480
 AliITSUSegmentationPix.cxx:481
 AliITSUSegmentationPix.cxx:482
 AliITSUSegmentationPix.cxx:483
 AliITSUSegmentationPix.cxx:484
 AliITSUSegmentationPix.cxx:485
 AliITSUSegmentationPix.cxx:486
 AliITSUSegmentationPix.cxx:487
 AliITSUSegmentationPix.cxx:488
 AliITSUSegmentationPix.cxx:489
 AliITSUSegmentationPix.cxx:490
 AliITSUSegmentationPix.cxx:491
 AliITSUSegmentationPix.cxx:492
 AliITSUSegmentationPix.cxx:493
 AliITSUSegmentationPix.cxx:494
 AliITSUSegmentationPix.cxx:495
 AliITSUSegmentationPix.cxx:496
 AliITSUSegmentationPix.cxx:497
 AliITSUSegmentationPix.cxx:498
 AliITSUSegmentationPix.cxx:499
 AliITSUSegmentationPix.cxx:500
 AliITSUSegmentationPix.cxx:501
 AliITSUSegmentationPix.cxx:502
 AliITSUSegmentationPix.cxx:503
 AliITSUSegmentationPix.cxx:504
 AliITSUSegmentationPix.cxx:505
 AliITSUSegmentationPix.cxx:506
 AliITSUSegmentationPix.cxx:507
 AliITSUSegmentationPix.cxx:508
 AliITSUSegmentationPix.cxx:509
 AliITSUSegmentationPix.cxx:510
 AliITSUSegmentationPix.cxx:511
 AliITSUSegmentationPix.cxx:512
 AliITSUSegmentationPix.cxx:513
 AliITSUSegmentationPix.cxx:514
 AliITSUSegmentationPix.cxx:515
 AliITSUSegmentationPix.cxx:516
 AliITSUSegmentationPix.cxx:517
 AliITSUSegmentationPix.cxx:518
 AliITSUSegmentationPix.cxx:519
 AliITSUSegmentationPix.cxx:520
 AliITSUSegmentationPix.cxx:521
 AliITSUSegmentationPix.cxx:522
 AliITSUSegmentationPix.cxx:523
 AliITSUSegmentationPix.cxx:524
 AliITSUSegmentationPix.cxx:525
 AliITSUSegmentationPix.cxx:526
 AliITSUSegmentationPix.cxx:527
 AliITSUSegmentationPix.cxx:528
 AliITSUSegmentationPix.cxx:529
 AliITSUSegmentationPix.cxx:530
 AliITSUSegmentationPix.cxx:531
 AliITSUSegmentationPix.cxx:532
 AliITSUSegmentationPix.cxx:533
 AliITSUSegmentationPix.cxx:534
 AliITSUSegmentationPix.cxx:535
 AliITSUSegmentationPix.cxx:536
 AliITSUSegmentationPix.cxx:537
 AliITSUSegmentationPix.cxx:538
 AliITSUSegmentationPix.cxx:539
 AliITSUSegmentationPix.cxx:540
 AliITSUSegmentationPix.cxx:541
 AliITSUSegmentationPix.cxx:542
 AliITSUSegmentationPix.cxx:543
 AliITSUSegmentationPix.cxx:544
 AliITSUSegmentationPix.cxx:545
 AliITSUSegmentationPix.cxx:546
 AliITSUSegmentationPix.cxx:547
 AliITSUSegmentationPix.cxx:548
 AliITSUSegmentationPix.cxx:549
 AliITSUSegmentationPix.cxx:550
 AliITSUSegmentationPix.cxx:551
 AliITSUSegmentationPix.cxx:552
 AliITSUSegmentationPix.cxx:553
 AliITSUSegmentationPix.cxx:554
 AliITSUSegmentationPix.cxx:555
 AliITSUSegmentationPix.cxx:556
 AliITSUSegmentationPix.cxx:557
 AliITSUSegmentationPix.cxx:558
 AliITSUSegmentationPix.cxx:559
 AliITSUSegmentationPix.cxx:560
 AliITSUSegmentationPix.cxx:561
 AliITSUSegmentationPix.cxx:562
 AliITSUSegmentationPix.cxx:563
 AliITSUSegmentationPix.cxx:564
 AliITSUSegmentationPix.cxx:565
 AliITSUSegmentationPix.cxx:566
 AliITSUSegmentationPix.cxx:567
 AliITSUSegmentationPix.cxx:568
 AliITSUSegmentationPix.cxx:569
 AliITSUSegmentationPix.cxx:570
 AliITSUSegmentationPix.cxx:571
 AliITSUSegmentationPix.cxx:572
 AliITSUSegmentationPix.cxx:573
 AliITSUSegmentationPix.cxx:574
 AliITSUSegmentationPix.cxx:575
 AliITSUSegmentationPix.cxx:576
 AliITSUSegmentationPix.cxx:577
 AliITSUSegmentationPix.cxx:578
 AliITSUSegmentationPix.cxx:579
 AliITSUSegmentationPix.cxx:580
 AliITSUSegmentationPix.cxx:581
 AliITSUSegmentationPix.cxx:582
 AliITSUSegmentationPix.cxx:583
 AliITSUSegmentationPix.cxx:584
 AliITSUSegmentationPix.cxx:585
 AliITSUSegmentationPix.cxx:586
 AliITSUSegmentationPix.cxx:587
 AliITSUSegmentationPix.cxx:588
 AliITSUSegmentationPix.cxx:589
 AliITSUSegmentationPix.cxx:590
 AliITSUSegmentationPix.cxx:591
 AliITSUSegmentationPix.cxx:592
 AliITSUSegmentationPix.cxx:593
 AliITSUSegmentationPix.cxx:594
 AliITSUSegmentationPix.cxx:595
 AliITSUSegmentationPix.cxx:596