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

#include <TGeoGlobalMagField.h>
#include <TH1.h>
#include <TH2.h>
#include <TString.h>
#include "AliITSU.h"
#include "AliITSUDigitPix.h"
#include "AliITSUHit.h"
#include "AliITSUChip.h"
#include "AliITSUSensMap.h"
#include "AliITSUCalibrationPix.h"
#include "AliITSUSegmentationPix.h"
#include "AliITSUSimulationPix.h"
#include "AliLog.h"
#include "AliRun.h"
#include "AliMagF.h"
#include "AliMathBase.h"
#include "AliITSUSimuParam.h"
#include "AliITSUSDigit.h"
#include "AliITSUParamList.h"

using std::cout;
using std::endl;
using namespace TMath;

ClassImp(AliITSUSimulationPix)
////////////////////////////////////////////////////////////////////////
//  Version: 1
//  Modified by D. Elia, G.E. Bruno, H. Tydesjo
//  Fast diffusion code by Bjorn S. Nilsen
//  March-April 2006
//  October     2007: GetCalibrationObjects() removed
//
//  Version: 0
//  Written by Boris Batyunya
//  December 20 1999
//
//  Adapted for pixels of ITS upgrade July 2012, ruben.shahoyan@cern.ch
//
//  AliITSUSimulationPix is to do the simulation of pixels
//
//  2013 Feb: Added MonoPix response and nois calculation al la MIMOSA32 (levente.molnar@cern.ch)
//
////////////////////////////////////////////////////////////////////////

//______________________________________________________________________
AliITSUSimulationPix::AliITSUSimulationPix()
:  fTanLorAng(0)
,fGlobalChargeScale(1.0)
,fSpread2DHisto(0)
,fSpreadFun(0)
,fROTimeFun(0)
{
    // Default constructor.
    SetUniqueID(AliITSUGeomTGeo::kChipTypePix);
}

//______________________________________________________________________
AliITSUSimulationPix::AliITSUSimulationPix(AliITSUSimuParam* sim,AliITSUSensMap* map)
:AliITSUSimulation(sim,map)
,fTanLorAng(0)
,fGlobalChargeScale(1.0)
,fSpread2DHisto(0)
,fSpreadFun(0)
,fROTimeFun(0)
{
    // standard constructor
    SetUniqueID(AliITSUGeomTGeo::kChipTypePix);
    Init();
}

//______________________________________________________________________
AliITSUSimulationPix::AliITSUSimulationPix(const AliITSUSimulationPix &s)
:AliITSUSimulation(s)
,fTanLorAng(s.fTanLorAng)
,fGlobalChargeScale(s.fGlobalChargeScale)
,fSpread2DHisto(s.fSpread2DHisto)
,fSpreadFun(s.fSpreadFun)
,fROTimeFun(s.fROTimeFun)
{
    //     Copy Constructor
}


//______________________________________________________________________
AliITSUSimulationPix::~AliITSUSimulationPix()
{
    // destructor
    // only the sens map is owned and it is deleted by ~AliITSUSimulation
}

//______________________________________________________________________
AliITSUSimulationPix& AliITSUSimulationPix::operator=(const AliITSUSimulationPix &s)
{
    //    Assignment operator
    if (&s == this) return *this;
    AliITSUSimulation::operator=(s);
    fSpread2DHisto = s.fSpread2DHisto;
    //
    fGlobalChargeScale = s.fGlobalChargeScale;
    fSpreadFun    = s.fSpreadFun;
    fROTimeFun    = s.fROTimeFun;
    //
    return *this;
}

//______________________________________________________________________
void AliITSUSimulationPix::Init()
{
    // Initilization
    if (fSimuParam->GetPixLorentzDrift()) SetTanLorAngle(fSimuParam->GetPixLorentzHoleWeight());
}

//______________________________________________________________________
Bool_t AliITSUSimulationPix::SetTanLorAngle(Double_t weightHole)
{
    // This function set the Tangent of the Lorentz angle.
    // A weighted average is used for electrons and holes
    // Input: Double_t weightHole: wheight for hole: it should be in the range [0,1]
    // output: Bool_t : kTRUE in case of success
    //
    if (weightHole<0) {
        weightHole=0.;
        AliWarning("You have asked for negative Hole weight");
        AliWarning("I'm going to use only electrons");
    }
    if (weightHole>1) {
        weightHole=1.;
        AliWarning("You have asked for weight > 1");
        AliWarning("I'm going to use only holes");
    }
    Double_t weightEle=1.-weightHole;
    AliMagF* fld = (AliMagF*)TGeoGlobalMagField::Instance()->GetField();
    if (!fld) AliFatal("The field is not initialized");
    Double_t bz = fld->SolenoidField();
    fTanLorAng = Tan(weightHole*fSimuParam->LorentzAngleHole(bz) +
                     weightEle*fSimuParam->LorentzAngleElectron(bz));
    return kTRUE;
}

//_____________________________________________________________________
void AliITSUSimulationPix::SDigitiseChip()
{
    //  This function begins the work of creating S-Digits.
    
    AliDebug(10,Form("In event %d chip %d there are %d hits", fEvent, fChip->GetIndex(),fChip->GetNHits()));
    if (fChip->GetNHits()) {
        if(fResponseParam->GetParameter(kDigitalSim) == 0 ) Hits2SDigitsFast(); // analogue chip response simulation
        else Hits2SDigitsFastDigital();                                         // digital chip response
    }
    if (!fSensMap->GetEntries()) return;
    WriteSDigits();
    ClearMap();
    //
}

//______________________________________________________________________
void AliITSUSimulationPix::WriteSDigits()
{
    //  This function adds each S-Digit to pList
    static AliITSU *aliITS = (AliITSU*)gAlice->GetModule("ITS");
    int nsd = fSensMap->GetEntries();
    
    
    for (int i=0;i<nsd;i++) {
        AliITSUSDigit* sd = (AliITSUSDigit*)fSensMap->At(i); // ordered in index
        if (!sd->GetSumSignal()>0 || fSensMap->IsDisabled(sd)) continue;
        aliITS->AddSumDigit(*sd);
    }
    return;
}

//______________________________________________________________________
void AliITSUSimulationPix::FinishSDigitiseChip()
{
    //  This function calls SDigitsToDigits which creates Digits from SDigits
    FrompListToDigits();
    ClearMap();
    return;
}

//______________________________________________________________________
void AliITSUSimulationPix::DigitiseChip()
{
    //  This function creates Digits straight from the hits and then adds
    //  electronic noise to the digits before adding them to pList
    //  Each of the input variables is passed along to Hits2SDigits
    //
    if(fResponseParam->GetParameter(kDigitalSim) == 0 ) Hits2SDigitsFast(); // analogue chip response simulation
    else Hits2SDigitsFastDigital();                                         // digital chip response
    FinishSDigitiseChip();
}

//______________________________________________________________________
void AliITSUSimulationPix::Hits2SDigits()
{
    // Does the charge distributions using Gaussian diffusion charge charing.
    Int_t nhits = fChip->GetNHits();
    if (!nhits) return;
    //
    Int_t h,ix,iz,i;
    Int_t idtrack;
    Float_t x,y,z;  // keep coordinates float (required by AliSegmentation)
    Double_t tof,x0=0.0,x1=0.0,y0=0.0,y1=0.0,z0=0.0,z1=0.0,de=0.0;
    Double_t t,tp,st,dt=0.2,el;
    Double_t thick = 0.5*fSeg->Dy();  // Half Thickness
    
    //
    for (h=0;h<nhits;h++) {
        //
        if (!fChip->LineSegmentL(h,x0,x1,y0,y1,z0,z1,de,tof,idtrack)) continue;
        st = Sqrt(x1*x1+y1*y1+z1*z1);
        if (st>0.0) {
            st = (Double_t)((Int_t)(st*1e4)); // number of microns
            if (st<=1.0) st = 1.0;
            dt = 1.0/st;               // RS TODO: do we need 1 micron steps?
            double dy = dt*thick;
            y = -0.5*dy;
            for (t=0.0;t<1.0;t+=dt) { // Integrate over t
                tp  = t+0.5*dt;
                x   = x0+x1*tp;
                y  += dy;
                z   = z0+z1*tp;
                if (!(fSeg->LocalToDet(x,z,ix,iz))) continue; // outside
                el  = fGlobalChargeScale * dt * de / fSimuParam->GetGeVToCharge();
                //
                if (fSimuParam->GetPixLorentzDrift()) x += y*fTanLorAng;
                SpreadCharge2D(x,z,y,ix,iz,el,tof,idtrack,h);
            } // end for t
        } else { // st == 0.0 deposit it at this point
            x   = x0;
            y   = y0 + 0.5*thick;
            z   = z0;
            if (!(fSeg->LocalToDet(x,z,ix,iz))) continue; // outside
            el  = fGlobalChargeScale * de / fSimuParam->GetGeVToCharge();
            if (fSimuParam->GetPixLorentzDrift()) x += y*fTanLorAng;
            SpreadCharge2D(x,z,y,ix,iz,el,tof,idtrack,h);
        } // end if st>0.0
    } // Loop over all hits h
    //
    // Coupling
    int nd = fSensMap->GetEntriesUnsorted(); // use unsorted access when possible, since it is faster
    AliITSUSDigit* dg = 0;
    switch (fSimuParam->GetPixCouplingOption()) {
        case AliITSUSimuParam::kNoCouplingPix :
            break;
        case AliITSUSimuParam::kNewCouplingPix :
            for (i=nd;i--;) {
                dg = (AliITSUSDigit*)fSensMap->AtUnsorted(i);
                if (fSensMap->IsDisabled(dg)) continue;
                SetCoupling(dg);
            }
            break;
        case AliITSUSimuParam::kOldCouplingPix:
            for (i=nd;i--;) {
                dg = (AliITSUSDigit*)fSensMap->AtUnsorted(i);
                if (fSensMap->IsDisabled(dg)) continue;
                SetCouplingOld(dg);
            }
            break;
        default:
            break;
            
    } // end switch
    if (GetDebug(2)) AliInfo(Form("Finished fCoupling=%d",fSimuParam->GetPixCouplingOption()));
}

//______________________________________________________________________
void AliITSUSimulationPix::Hits2SDigitsFast()
{
    // Does the charge distributions using Gaussian diffusion charge charing.    // Inputs:
    //    AliITSUChip *mod  Pointer to this chip
    //
    TObjArray *hits = fChip->GetHits();
    Int_t nhits = hits->GetEntriesFast();
    if (nhits<=0) return;
    //
    Int_t h,ix,iz,i;
    Int_t idtrack;
    Float_t x,y,z; // keep coordinates float (required by AliSegmentation)
    Double_t tof,x0=0.0,x1=0.0,y0=0.0,y1=0.0,z0=0.0,z1=0.0;
    Double_t step,st,el,de=0.0;
    Double_t minDim = Min(fSeg->Dpx(1),fSeg->Dpz(1)); // RStmp: smallest pitch
    Double_t thick = fSeg->Dy();
    //
    for (h=0;h<nhits;h++) {
        //
        if (!fChip->LineSegmentL(h,x0,x1,y0,y1,z0,z1,de,tof,idtrack)) continue;
        //
        st = Sqrt(x1*x1+y1*y1+z1*z1);
        if (st>0.0) {
            int np = int(1.5*st/minDim);  //RStmp: inject the points in such a way that there is ~1.5 point per cell
            np = TMath::Max(1.0*np,fResponseParam->GetParameter(kSpreadFunMinSteps));
            AliDebug(10,Form(" Number of charge injection steps is set to %d ",np));
            double dstep = 1./np;
            double dy = dstep*thick;
            y = -0.5*dy;
            step = -0.5*dstep;
            for (i=0;i<np;i++) {          //RStmp Integrate over t
                //      for (i=0;i<kn10;i++) { // Integrate over t
                step  += dstep;  // RStmp kti[i];
                x   = x0+x1*step;
                y  += dy;
                z   = z0+z1*step;
                if (!(fSeg->LocalToDet(x,z,ix,iz))) continue; // outside
                el  = fGlobalChargeScale * dstep * de/fSimuParam->GetGeVToCharge();
                if (fSimuParam->GetPixLorentzDrift()) x += y*fTanLorAng;
                SpreadCharge2D(x,z,y,ix,iz,el,tof,idtrack,h);
            } // end for i // End Integrate over t
        }
        else { // st == 0.0 deposit it at this point
            x   = x0;
            y   = y0+0.5*thick;
            z   = z0;
            if (!(fSeg->LocalToDet(x,z,ix,iz))) continue; // outside
            el  = fGlobalChargeScale * de / fSimuParam->GetGeVToCharge();
            if (fSimuParam->GetPixLorentzDrift()) x += y*fTanLorAng;
            SpreadCharge2D(x,z,y,ix,iz,el,tof,idtrack,h);
        } // end if st>0.0
        
    } // Loop over all hits h
    
    // Coupling
    int nd = fSensMap->GetEntriesUnsorted(); // use unsorted access when possible, since it is faster
    AliITSUSDigit* dg = 0;
    switch (fSimuParam->GetPixCouplingOption()) {
        case AliITSUSimuParam::kNoCouplingPix :
            break;
        case AliITSUSimuParam::kNewCouplingPix :
            for (i=nd;i--;) {
                dg = (AliITSUSDigit*)fSensMap->AtUnsorted(i);
                if (fSensMap->IsDisabled(dg)) continue;
                SetCoupling(dg);
            }
        case AliITSUSimuParam::kOldCouplingPix:
            for (i=nd;i--;) {
                dg = (AliITSUSDigit*)fSensMap->AtUnsorted(i);
                if (fSensMap->IsDisabled(dg)) continue;
                SetCouplingOld(dg);
            }
            break;
        default:
            break;
    } // end switch
    if (GetDebug(2)) AliInfo(Form("Finished fCoupling=%d",fSimuParam->GetPixCouplingOption()));
}

//______________________________________________________________________
void AliITSUSimulationPix::SpreadCharge2D(Double_t x0,Double_t z0, Double_t dy, Int_t ix0,Int_t iz0,
                                          Double_t el, Double_t tof, Int_t tID, Int_t hID)
{
    // Spreads the charge over neighboring cells. Assume charge is distributed
    // as charge(x,z) = (el/2*pi*sigx*sigz)*exp(-arg)
    // arg=((x-x0)*(x-x0)/2*sigx*sigx)+((z-z0*z-z0)/2*sigz*sigz)
    // Defined this way, the integral over all x and z is el.
    // Inputs:
    //    Double_t x0   x position of point where charge is liberated (local)
    //    Double_t z0   z position of point where charge is liberated (local)
    //    Double_t dy   distance from the entrance surface (diffusion sigma may depend on it)
    //    Int_t    ix0  row of cell corresponding to point x0
    //    Int_t    iz0  columb of cell corresponding to point z0
    //    Double_t el   number of electrons liberated in this step
    //    Double_t sigx Sigma difusion along x for this step (y0 dependent)
    //    Double_t sigz Sigma difusion along z for this step (z0 dependent)
    //    Int_t    tID  track number
    //    Int_t    hID  hit "hit" index number
    //
    Int_t ix,iz,ixs,ixe,izs,ize;
    Float_t x,z;   // keep coordinates float (required by AliSegmentation)
    Float_t xdioshift = 0 , zdioshift = 0 ;
    Double_t s,dtIn[kNDtSpread]; // data transfered to spread function for integral calculation
    //
    if (GetDebug(2)) AliInfo(Form("(x0=%e,z0=%e,dy=%e, ix0=%d,iz0=%d,el=%e,tID=%d,hID=%d)",x0,z0,dy,ix0,iz0,el,tID,hID));
    //
    Double_t &x1 = dtIn[kCellX1];
    Double_t &x2 = dtIn[kCellX2];
    Double_t &z1 = dtIn[kCellZ1];
    Double_t &z2 = dtIn[kCellZ2];
    //
    int nx = GetResponseParam()->GetParameter(kSpreadFunParamNXoffs);
    int nz = GetResponseParam()->GetParameter(kSpreadFunParamNZoffs);
    //
    dtIn[kCellYDepth]  = dy;
    ixs = Max(-nx+ix0,0);
    ixe = Min( nx+ix0,fSeg->Npx()-1);
    izs = Max(-nz+iz0,0);
    ize = Min( nz+iz0,fSeg->Npz()-1);
    for (ix=ixs;ix<=ixe;ix++)
        for (iz=izs;iz<=ize;iz++) {
            //
            // Check if the hit is inside readout window
            int cycleRO = (((AliITSUSimulationPix*)this)->*AliITSUSimulationPix::fROTimeFun)(ix,iz,tof);
            if (Abs(cycleRO)>kMaxROCycleAccept) continue;
            //
            fSeg->DetToLocal(ix,iz,x,z); // pixel center
            xdioshift = zdioshift = 0;
            double dxi = fSeg->Dpx(ix);
            double dzi = fSeg->Dpz(iz);
            CalcDiodeShiftInPixel(ix,iz,xdioshift,zdioshift);    // Check and apply diode shift if needed
            xdioshift *= dxi;
            zdioshift *= dzi;
            dxi *= 0.5;
            dzi *= 0.5;
            //      printf("DShift: %d %d -> %.4f %.4f\n",ix,iz,xdioshift,zdioshift);
            x1  = (x + xdioshift) - x0;   // calculate distance of cell boundaries from injection center
            z1  = (z + zdioshift) - z0;
            x2  = x1 + dxi; // Upper
            x1 -= dxi;      // Lower
            z2  = z1 + dzi; // Upper
            z1 -= dzi;      // Lower
            s   = el* (((AliITSUSimulationPix*)this)->*AliITSUSimulationPix::fSpreadFun)(dtIn);
            if (s>fSimuParam->GetPixMinElToAdd()) UpdateMapSignal(iz,ix,tID,hID,s,cycleRO);
        } // end for ix, iz
    //
}

//______________________________________________________________________
Double_t AliITSUSimulationPix::SpreadFunDoubleGauss2D(const Double_t *dtIn)
{
    // calculate integral of charge in the cell with boundaries at X=dtIn[kCellX1]:dtIn[kCellX2]
    // and Z=dtIn[kCellZ1]:dtIn[kCellZ2]
    // The spread function is assumed to be double gaussian in 2D
    // Parameters should be: mean0,sigma0, mean1,sigma1, relative strenght of 2nd gaussian wrt 1st one
    //
    // 1st gaussian
    double intg1 = GausInt2D(fResponseParam->GetParameter(kG2SigX0),  // sigX
                             dtIn[kCellX1]-fResponseParam->GetParameter(kG2MeanX0),      // x1-xmean
                             dtIn[kCellX2]-fResponseParam->GetParameter(kG2MeanX0),      // x2-xmean
                             fResponseParam->GetParameter(kG2SigZ0),  // sigZ
                             dtIn[kCellZ1]-fResponseParam->GetParameter(kG2MeanZ0),    // z1-zmean
                             dtIn[kCellZ2]-fResponseParam->GetParameter(kG2MeanZ0));   // z2-zmean
    // 2nd gaussian
    double intg2 = GausInt2D(fResponseParam->GetParameter(kG2SigX1),  // sigX
                             dtIn[kCellX1]-fResponseParam->GetParameter(kG2MeanX1),      // x1-xmean
                             dtIn[kCellX2]-fResponseParam->GetParameter(kG2MeanX1),      // x2-xmean
                             fResponseParam->GetParameter(kG2SigZ1),  // sigZ
                             dtIn[kCellZ1]-fResponseParam->GetParameter(kG2MeanZ1),    // z1-zmean
                             dtIn[kCellZ2]-fResponseParam->GetParameter(kG2MeanZ1));   // z2-zmean
    double scl = fResponseParam->GetParameter(kG2ScaleG2);
    return (intg1+intg2*scl)/(1+scl);
    //
}


//______________________________________________________________________
Double_t AliITSUSimulationPix::SpreadFrom2DHisto(const Double_t *dtIn)
{
    // calculate integral of charge in the cell with boundaries at X=dtIn[kCellX1]:dtIn[kCellX2]
    // and Z=dtIn[kCellZ1]:dtIn[kCellZ2]
    // The spread function integral is taken from fSpread2DHisto extracted from the sensor response parameters
    // list in the method SetResponseParam. The histo must return the fraction of charge integrates in the
    // cell whose center is on the distance X=(dtIn[kCellX1]+dtIn[kCellX2])/2 and Z=(dtIn[kCellZ1]+dtIn[kCellZ2])/2
    // from the injection point.
    //
    Double_t qpixfrac = 0;
    Double_t xintp = 1e4*(dtIn[kCellX1]+dtIn[kCellX2])/2.0;
    Double_t zintp = 1e4*(dtIn[kCellZ1]+dtIn[kCellZ2])/2.0;
    //
    qpixfrac =  fSpread2DHisto->Interpolate(xintp,zintp); //the PSF map is given in um but the dtIn is in cm so we need to convert it
    //
    return qpixfrac;
}

//______________________________________________________________________
Double_t AliITSUSimulationPix::SpreadFunGauss2D(const Double_t *dtIn)
{
    // calculate integral of charge in the cell with boundaries at X=dtIn[kCellX1]:dtIn[kCellX2]
    // and Z=dtIn[kCellZ1]:dtIn[kCellZ2]
    // The spread function is assumed to be gaussian in 2D
    // Parameters should be: mean0,sigma0
    return GausInt2D(fResponseParam->GetParameter(kG1SigX),  // sigX
                     dtIn[kCellX1]-fResponseParam->GetParameter(kG1MeanX),    // x1-xmean
                     dtIn[kCellX2]-fResponseParam->GetParameter(kG1MeanX),    // x2-xmean
                     fResponseParam->GetParameter(kG1SigZ),  // sigZ
                     dtIn[kCellZ1]-fResponseParam->GetParameter(kG1MeanZ),    // z1-zmean
                     dtIn[kCellZ2]-fResponseParam->GetParameter(kG1MeanZ));   // z2-zmean
    //
}

//______________________________________________________________________
void AliITSUSimulationPix::RemoveDeadPixels()
{
    // Removes dead pixels on each chip (ladder)
    // This should be called before going from sdigits to digits (i.e. from FrompListToDigits)
    
    AliITSUCalibrationPix* calObj = (AliITSUCalibrationPix*) GetCalibDead();
    if (!calObj) return;
    //
    if (calObj->IsBad()) {ClearMap(); return;} // whole chip is masked
    //
    // prepare the list of r/o cycles seen
    Char_t cyclesSeen[2*kMaxROCycleAccept+1];
    int ncycles = 0;
    for (int i=(2*kMaxROCycleAccept+1);i--;) if (fCyclesID[i]) cyclesSeen[ncycles++]=i-kMaxROCycleAccept;
    
    // remove single bad pixels one by one
    int nsingle = calObj->GetNrBadSingle();
    UInt_t col,row;
    Int_t cycle;
    for (int i=nsingle;i--;) {
        calObj->GetBadPixelSingle(i,row,col);
        for (int icl=ncycles;icl--;) fSensMap->DeleteItem(col,row,cyclesSeen[icl]);
    }
    int nsd = fSensMap->GetEntriesUnsorted();
    for (int isd=nsd;isd--;) {
        AliITSUSDigit* sd = (AliITSUSDigit*)fSensMap->AtUnsorted(isd);
        if (fSensMap->IsDisabled(sd)) continue;
        fSensMap->GetMapIndex(sd->GetUniqueID(),col,row,cycle);
        int chip = fSeg->GetChipFromChannel(0,col);
        //    if (calObj->IsChipMarkedBad(chip)) fSensMap->Disable(sd); // this will simple mark the hit as bad
        if (calObj->IsChipMarkedBad(chip)) fSensMap->DeleteItem(sd); // this will suppress hit in the sorted list
    }
    //
}

//______________________________________________________________________
void AliITSUSimulationPix::AddNoisyPixels()
{
    // Adds noisy pixels on each chip (ladder)
    // This should be called before going from sdigits to digits (i.e. FrompListToDigits)
    AliITSUCalibrationPix* calObj = (AliITSUCalibrationPix*) GetCalibNoisy();
    if (!calObj) { AliDebug(10,Form("  No Calib Object for Noise!!! ")); return;}
    for (Int_t i=calObj->GetNrBad(); i--;)
    {
        if ( fResponseParam->GetParameter(kDigitalSim) < 1.0 )
            UpdateMapNoise(calObj->GetBadColAt(i), calObj->GetBadRowAt(i),10*fSimuParam->GetPixThreshold(fChip->GetIndex()));
        else
            UpdateMapNoise(calObj->GetBadColAt(i), calObj->GetBadRowAt(i),kNoisyPixOCDB );
    }
    //
}

//______________________________________________________________________
void AliITSUSimulationPix::FrompListToDigits()
{
    // add noise and electronics, perform the zero suppression and add the digits to the list
    //
    // RS may use for ordered random sample generation dl.acm.org/ft_gateway.cfm?id=356313&type=pdf
    //
    int nsd = fSensMap->GetEntriesUnsorted();  // sdigits added from the signal
    //
    // add different kinds of noise.
    Bool_t addNoisy = fSimuParam->GetPixAddNoisyFlag() && (nsd>0 || fSimuParam->GetPixNoiseInAllMod()); // do we generate noise?
    if (addNoisy) {
        AddNoisyPixels();       // constantly noisy channels
        AddRandomNoisePixels(0.0); // random noise: at the moment generate noise only for instance 0
        nsd = fSensMap->GetEntriesUnsorted();
    }
    //
    if (nsd && fSimuParam->GetPixRemoveDeadFlag()) {
        RemoveDeadPixels();
        // note that here we shall use GetEntries instead of GetEntriesUnsorted since the
        // later operates on the array where the elements are not removed by flagged
        nsd = fSensMap->GetEntries();
    }
    if (!nsd) return; // nothing to digitize
    //
    UInt_t row,col;
    Int_t iCycle,modId = fChip->GetIndex();
    Double_t sig;
    const Int_t    knmaxtrk=AliITSdigit::GetNTracks();
    static AliITSU *aliITS = (AliITSU*)gAlice->GetModule("ITS");
    static AliITSUDigitPix dig;
    //
    for (int i=0;i<nsd;i++) {
        AliITSUSDigit* sd = (AliITSUSDigit*)fSensMap->At(i); // ordered in index
        if (fSensMap->IsDisabled(sd)) continue;
        //
	sig=sd->GetSumSignal();
        if ( fResponseParam->GetParameter(kDigitalSim) < 1.0 &&
	     sig<=fSimuParam->GetPixThreshold(modId)) continue;   //Threshold only applies in analogue simulation
        //
        if (Abs(sig)>2147483647.0) { //RS?
            //PH 2147483647 is the max. integer
            //PH This apparently is a problem which needs investigation
            AliWarning(Form("Too big or too small signal value %f",sig));
        }
        fSensMap->GetMapIndex(sd->GetUniqueID(),col,row,iCycle);
        dig.SetCoord1(col);
        dig.SetCoord2(row);
        dig.SetROCycle(iCycle);
        dig.SetSignal((Int_t)sig);
        dig.SetSignalPix((Int_t)sig);
        int ntr = sd->GetNTracks();
        for (int j=0;j<ntr;j++) {
            dig.SetTrack(j,sd->GetTrack(j));
            dig.SetHit(j,sd->GetHit(j));
        }
        for (int j=ntr;j<knmaxtrk;j++) {
            dig.SetTrack(j,-3);
            dig.SetHit(j,-1);
        }
        aliITS->AddSimDigit(AliITSUGeomTGeo::kChipTypePix, &dig);
    }
    //
}

//______________________________________________________________________
Int_t AliITSUSimulationPix::AddRandomNoisePixels(Double_t tof)
{
  // create random noisy sdigits above threshold
  //
  int modId = fChip->GetIndex();
  int npix = fSeg->GetNPads();
  int ncand = gRandom->Poisson( npix*fSimuParam->GetPixFakeRate() );
  if (ncand<1) return 0;
  //
  double probNoisy,noiseSig,noiseMean,thresh;
  //
  UInt_t row,col;
  Int_t iCycle;
  static TArrayI ordSampleInd(100),ordSample(100); //RS!!! static is not thread-safe!!!
  ncand = GenOrderedSample(npix,ncand,ordSample,ordSampleInd);
  int* ordV = ordSample.GetArray();
  int* ordI = ordSampleInd.GetArray();
  //
  if ( fResponseParam->GetParameter(kDigitalSim) < 1.0 ) {
    thresh = fSimuParam->GetPixThreshold(modId);
    fSimuParam->GetPixNoise(modId, noiseSig, noiseMean);
    probNoisy = AliITSUSimuParam::CalcProbNoiseOverThreshold(noiseMean,noiseSig,thresh); // prob. to have noise above threshold
    //
    for (int j=0;j<ncand;j++) {
      fSensMap->GetMapIndex((UInt_t)ordV[ordI[j]],col,row,iCycle);   // create noisy digit
      iCycle = (((AliITSUSimulationPix*)this)->*AliITSUSimulationPix::fROTimeFun)(row,col,tof);
      UpdateMapNoise(col,row,AliITSUSimuParam::GenerateNoiseQFunction(probNoisy,noiseMean,noiseSig),  iCycle);
    }
  }
  else {
    for (int j=0;j<ncand;j++) {
      fSensMap->GetMapIndex((UInt_t)ordV[ordI[j]],col,row,iCycle);   // create noisy digit
      iCycle = (((AliITSUSimulationPix*)this)->*AliITSUSimulationPix::fROTimeFun)(row,col,tof);
      UpdateMapNoise(col,row,kNoisyPixRnd, iCycle);
    }
  }
  return ncand;
}


//______________________________________________________________________
void AliITSUSimulationPix::SetCoupling(AliITSUSDigit* old)
{
    //  Take into account the coupling between adiacent pixels.
    //  The parameters probcol and probrow are the probability of the
    //  signal in one pixel shared in the two adjacent pixels along
    //  the column and row direction, respectively.
    //  Note pList is goten via GetMap() and chip is not need any more.
    //  Otherwise it is identical to that coded by Tiziano Virgili (BSN).
    UInt_t col,row;
    Int_t iCycle;
    Double_t pulse1,pulse2;
    Double_t couplR=0.0,couplC=0.0;
    Double_t xr=0.;
    //
    fSensMap->GetMapIndex(old->GetUniqueID(),col,row,iCycle);
    int cycle = iCycle;
    fSimuParam->GetPixCouplingParam(couplC,couplR);
    if (GetDebug(2)) AliInfo(Form("(col=%d,row=%d,couplC=%e couplR=%e",
                                  col,row,couplC,couplR));
    pulse2 = pulse1 = old->GetSignal();
    if (pulse1<fSimuParam->GetPixMinElToAdd()) return; // too small signal
    for (Int_t isign=-1;isign<=1;isign+=2) {
        //
        // loop in col direction
        int j1 = int(col) + isign;
        xr = gRandom->Rndm();
        if ( !((j1<0) || (j1>fSeg->Npz()-1) || (xr>couplC)) ) UpdateMapSignal(UInt_t(j1),row,old->GetTrack(0),old->GetHit(0),pulse1,cycle);
        //
        // loop in row direction
        int j2 = int(row) + isign;
        xr = gRandom->Rndm();
        if ( !((j2<0) || (j2>fSeg->Npx()-1) || (xr>couplR)) ) UpdateMapSignal(col,UInt_t(j2),old->GetTrack(0),old->GetHit(0),pulse2,cycle);
    }
    //
}

//______________________________________________________________________
void AliITSUSimulationPix::SetCouplingOld(AliITSUSDigit* old)
{
    //  Take into account the coupling between adiacent pixels.
    //  The parameters probcol and probrow are the fractions of the
    //  signal in one pixel shared in the two adjacent pixels along
    //  the column and row direction, respectively.
    // Inputs:
    // old            existing AliITSUSDigit
    // ntrack         track incex number
    // idhit          hit index number
    // chip         chip number
    //
    UInt_t col,row;
    Int_t cycle;
    Int_t modId = fChip->GetIndex();
    Double_t pulse1,pulse2;
    Double_t couplR=0.0,couplC=0.0;
    //
    fSensMap->GetMapIndex(old->GetUniqueID(),col,row,cycle);
    fSimuParam->GetPixCouplingParam(couplC,couplR);
    if (GetDebug(3)) AliInfo(Form("(col=%d,row=%d,roCycle=%d)  couplC=%e couplR=%e",col,row,cycle,couplC,couplR));
    //
    if (old->GetSignal()<fSimuParam->GetPixMinElToAdd()) return; // too small signal
    for (Int_t isign=-1;isign<=1;isign+=2) {// loop in col direction
        pulse2 = pulse1 = old->GetSignal();
        //
        int j1 = int(col)+isign;
        pulse1 *= couplC;
        if ((j1<0)||(j1>fSeg->Npz()-1)||(pulse1<fSimuParam->GetPixThreshold(modId))) pulse1 = old->GetSignal();
        else UpdateMapSignal(UInt_t(j1),row,old->GetTrack(0),old->GetHit(0),pulse1,cycle);
        
        // loop in row direction
        int j2 = int(row) + isign;
        pulse2 *= couplR;
        if ((j2<0)||(j2>(fSeg->Npx()-1))||(pulse2<fSimuParam->GetPixThreshold(modId))) pulse2 = old->GetSignal();
        else UpdateMapSignal(col,UInt_t(j2),old->GetTrack(0),old->GetHit(0),pulse2,cycle);
    } // for isign
}

//______________________________________________________________________
void AliITSUSimulationPix::SetResponseParam(AliITSUParamList* resp)
{
    // attach response parameterisation data
    fResponseParam = resp;
    //
    int spreadID = Nint(fResponseParam->GetParameter(AliITSUSimulationPix::kChargeSpreadType));
    const char* hname = 0;
    fSpread2DHisto = 0;
    //
    switch (spreadID) {
            //
        case kSpreadFunHisto:
            fSpreadFun = &AliITSUSimulationPix::SpreadFrom2DHisto;
            hname = fResponseParam->GetParName(AliITSUSimulationPix::kChargeSpreadType);
            if (!(fSpread2DHisto=(TH2*)fResponseParam->GetParamObject(hname)))
                AliFatal(Form("Did not find 2D histo %s for charge spread parameterization",hname));
            break;
            //
        case kSpreadFunDoubleGauss2D:
            fSpreadFun = &AliITSUSimulationPix::SpreadFunDoubleGauss2D;
            break;
            //
        case kSpreadFunGauss2D:
            fSpreadFun = &AliITSUSimulationPix::SpreadFunGauss2D;
            break;
            //
        default: AliFatal(Form("Did not find requested spread function id=%d",spreadID));
    }
    //
    int readoutType = Nint(fResponseParam->GetParameter(kReadOutSchemeType));
    switch (readoutType) {
        case kReadOutStrobe:
            fROTimeFun = &AliITSUSimulationPix::GetReadOutCycle;
            break;
        case kReadOutRollingShutter:
            fROTimeFun = &AliITSUSimulationPix::GetReadOutCycleRollingShutter;
            break;
        default: AliFatal(Form("Did not find requested readout time type id=%d",readoutType));
    }
    
    //___ Set the Rolling Shutter read-out window
    fReadOutCycleLength = fResponseParam->GetParameter(kReadOutCycleLength);
    //___ Pixel discrimination threshold, and the S/N cut
    fSimuParam->SetPixThreshold(fResponseParam->GetParameter(kPixNoiseMPV) *fResponseParam->GetParameter(kPixSNDisrcCut) , fResponseParam->GetParameter(kPixSNDisrcCut),-1); //for all chips
    //___ Minimum number of electrons to add
    fSimuParam->SetPixMinElToAdd(fResponseParam->GetParameter(kPixMinElToAdd));
    //___ Set the Pixel Noise MPV and Sigma (the noise distribution is Landau not Gauss due to RTN)
    fSimuParam->SetPixNoise( fResponseParam->GetParameter(kPixNoiseMPV), fResponseParam->GetParameter(kPixNoiseSigma), -1); //for all chips
    //___ Pixel fake hit rate
    fSimuParam->SetPixFakeRate( fResponseParam->GetParameter(kPixFakeRate) );
    //___ To apply the noise or not
    if (  fResponseParam->GetParameter(kPixNoiseIsOn) > 0.01)  fSimuParam->SetPixAddNoisyFlag(kTRUE);
    else fSimuParam->SetPixAddNoisyFlag(kFALSE);
    //
    if(fResponseParam->GetParameter(kPixNoiseInAllMod) > 0.01 ) fSimuParam->SetPixNoiseInAllMod(kTRUE);
    else fSimuParam->SetPixNoiseInAllMod(kFALSE);
    //
    //  Double_t vGeVToQ = fSimuParam->GetGeVToCharge();
    fGlobalChargeScale = fResponseParam->GetParameter(kSpreadFunGlobalQScale);
    
    AliDebug(10,Form("=============== Setting the response start ============================"));
    AliDebug(10,Form("=============== Digital (1) / Analogue (0) simu: %f",fResponseParam->GetParameter(kDigitalSim)));
    AliDebug(10,Form("=============== RO type: %d",readoutType));
    AliDebug(10,Form("=============== RO cycle lenght: %lf",fReadOutCycleLength));
    AliDebug(10,Form("=============== Noise MPV: %lf",fResponseParam->GetParameter(kPixNoiseMPV)));
    AliDebug(10,Form("=============== Noise Sigma: %lf",fResponseParam->GetParameter(kPixNoiseSigma)));
    AliDebug(10,Form("=============== Fake rate: %lf",fResponseParam->GetParameter(kPixFakeRate)));
    AliDebug(10,Form("=============== Noise On/Off: %d",fSimuParam->GetPixAddNoisyFlag()));
    AliDebug(10,Form("=============== Noise in all mod on/off: %d",fSimuParam->GetPixNoiseInAllMod()));
    AliDebug(10,Form("=============== Global Charge scale: %lf",fGlobalChargeScale));
    AliDebug(10,Form("=============== Setting the response done  ============================"));
    
}

//______________________________________________________________________
Int_t AliITSUSimulationPix::GetReadOutCycleRollingShutter(Int_t row, Int_t col, Double_t hitTime)
{
    //
    // Get the read-out cycle of the hit in the given column/row of the sensor.
    // hitTime is the time of the subhit (hit is divided to nstep charge deposit) in seconds
    // globalPhaseShift gives the start of the RO for the cycle in pixel wrt the LHC clock
    // GetRollingShutterWindow give the with of the rolling shutter read out window
    //
    double tmin = fReadOutCycleOffset + fReadOutCycleLength*(double(row)/fSeg->Npx()-1.);
    int cycle = Nint( (hitTime-tmin)/fReadOutCycleLength - 0.5 );
    AliDebug(3,Form("Rolling shutter at row%d/col%d: particle time: %e, tmin: %e : tmax %e -> cycle:%d",row,col,hitTime,tmin,
                    tmin+fReadOutCycleLength,cycle));
    return cycle;
    //
}

//______________________________________________________________________
Int_t AliITSUSimulationPix::GetReadOutCycle(Int_t row, Int_t col, Double_t hitTime)
{
    //
    // Check whether the hit is in the read out window of the given column/row of the sensor
    //
    AliDebug(3,Form("Strobe readout: row%d/col%d: particle time: %e, tmin: %e, tmax %e",
                    row,col,hitTime,fReadOutCycleOffset,fReadOutCycleOffset+fReadOutCycleLength));
    hitTime -= fReadOutCycleOffset+0.5*fReadOutCycleLength;
    return (hitTime<0 || hitTime>fReadOutCycleLength) ? kMaxROCycleAccept+1 : 0;
    //
}

//_______________________________________________________________________
void AliITSUSimulationPix::CalcDiodeShiftInPixel(Int_t xrow, Int_t zcol, Float_t &x, Float_t &z)
{
    //
    // Calculates the shift of the diode wrt the geometric center of the pixel.
    // It is needed for staggerred pixel layout or double diode pixels with assymetric center
    // The shift can depend on the column or line or both...
    // The x and z are passed in cm
    //
    ((AliITSUSegmentationPix*)fSeg)->GetDiodShift(xrow,zcol,x,z);
    //
}

//______________________________________________________________________
void AliITSUSimulationPix::Hits2SDigitsFastDigital()
{
    // Does the digital chip response simulation
    //    AliITSUChip *mod  Pointer to this chip
    //
    
    
    TObjArray *hits = fChip->GetHits();
    Int_t nhits = hits->GetEntriesFast();
    if (nhits<=0) return;
    //
    Int_t h,ix,iz;
    Int_t idtrack;
    Double_t tof,x0=0.0,x1=0.0,y0=0.0,y1=0.0,z0=0.0,z1=0.0;
    Double_t el,de=0.0;
    
    //
    for (h=0;h<nhits;h++) {
        //
        if (!fChip->LineSegmentL(h,x0,x1,y0,y1,z0,z1,de,tof,idtrack)) continue;
        //
	//double st = Sqrt(x1*x1+y1*y1+z1*z1);
        
        //___ place hit to the middle of the path segment - CHANGE LATER !
	// keep coordinates float (required by AliSegmentation)
        float x   = (x0+x1)/2.0;
        //float y   = (y0+y1)/2.0;
        float z   = (z0+z1)/2.0;
        //
        if (!(fSeg->LocalToDet(x,z,ix,iz))) continue; // outside
        //
        // Check if the hit is inside readout window
        int cycleRO = (((AliITSUSimulationPix*)this)->*AliITSUSimulationPix::fROTimeFun)(ix,iz,tof);
        if (Abs(cycleRO)>kMaxROCycleAccept) continue;
        //
        //
        el  = de / fSimuParam->GetGeVToCharge();
        //
        PlaceDigitalPixels(x,z,el,tof,idtrack,h);
        //
    } // Loop over all hits h
    
}
//______________________________________________________________________
void AliITSUSimulationPix::PlaceDigitalPixels(Double_t x0hit,Double_t z0hit, Double_t el, Double_t tof, Int_t tID, Int_t hID)
{
    // Place the digital pixel positions on the sensor
    // Inputs:
    //    Double_t x0hit   x position of point where charge is liberated (local) - hit
    //    Double_t z0hit   z position of point where charge is liberated (local) - hit
    //    Double_t el   number of electrons liberated in this step
    //    Double_t sigx Sigma difusion along x for this step (y0 dependent)
    //    Double_t sigz Sigma difusion along z for this step (z0 dependent)
    //    Int_t    tID  track number
    //    Int_t    hID  hit "hit" index number
    //
    
    
    Int_t ix,iz,nx,nz;
    Float_t x,z;   // keep coordinates float (required by AliSegmentation)
    Float_t distX = 0, distZ = 0;
    
    //___ TEMPORARY - place a fixed pattern cluster COG to a distance d(x,z) away from hit - TEMPORARY
    // Pattern used (not realistic ebye but averaging over events yes):
    //  -+-
    //  +++
    //  -+-
    //
    //___ This list should come from a look up table based on CluTypeID as well as COG coord
    
    //
    TRandom3 rnd;
    distX = rnd.Uniform(-5.0*1e-4, 5.0*1e-4); //in um
    distZ = rnd.Uniform(-5.0*1e-4, 5.0*1e-4); //in um
    //
    x = x0hit + distX;
    z = z0hit + distZ;
    //
    if(!fSeg->LocalToDet(x,z,ix,iz)) return; // if clu CoG is outside of the chip skipp the cluster -> refine later
    //
    const Int_t nCluPixels = 5;
    Int_t aPixListX[nCluPixels] = { 0, -1, 0, 1,  0};
    Int_t aPixListZ[nCluPixels] = { 1,  0, 0, 0, -1};
    //
    Double_t s = el / 1.0 / nCluPixels;
    //
    int cycleRO;
    //
    for (Int_t ipix = 0 ; ipix < nCluPixels; ipix++)
    {
        nx = ix + aPixListX[ipix];
        nz = iz + aPixListZ[ipix];
        cycleRO = (((AliITSUSimulationPix*)this)->*AliITSUSimulationPix::fROTimeFun)(ix,iz,tof);
        if ( nx >= 0 && nx <= fSeg -> Npx() && nz >= 0 && nz <= fSeg -> Npz() ) UpdateMapSignal(nz,nx,tID,hID,s,cycleRO); //if the pixel is in the detector
    }
   

    
}



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