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

#include <stdio.h>
#include <stdlib.h>
#include <Riostream.h>
#include <TObjArray.h>
#include <TRandom.h>

#include <TGeoGlobalMagField.h>
#include "AliITSmodule.h"
#include "AliITSMapA2.h"
#include "AliITSpList.h"
#include "AliITSCalibrationSSD.h"
#include "AliITSsegmentationSSD.h"
//#include "AliITSdcsSSD.h"
#include "AliITS.h"
#include "AliITShit.h"
#include "AliITSdigitSSD.h"
#include "AliRun.h"
#include "AliMagF.h"
#include "AliITSgeom.h"
#include "AliITSsimulationSSD.h"
#include "AliITSTableSSD.h"
#include <TF1.h>
#include "AliMathBase.h"

using std::endl;
using std::cout;
ClassImp(AliITSsimulationSSD)
////////////////////////////////////////////////////////////////////////
//                                                                    //
// Author: Enrico Fragiacomo                                          //
//         enrico.fragiacomo@ts.infn.it                               //
// Last revised: june 2008                                            // 
//                                                                    //
// AliITSsimulationSSD is the simulation of SSD.                     //
////////////////////////////////////////////////////////////////////////

//----------------------------------------------------------------------
AliITSsimulationSSD::AliITSsimulationSSD():AliITSsimulation(),
					   //fDCS(0),
fMapA2(0),
fIonE(0.0),
fDifConst(),
fDriftVel(),
fTimeResponse(NULL),
fLorentz(kFALSE),
fTanLorAngP(0),
fTanLorAngN(0)
{
    //default Constructor
    //Inputs:
    // none.
    // Outputs:
    // none.
    // Return:
    //  A default construction AliITSsimulationSSD class
}
//----------------------------------------------------------------------
AliITSsimulationSSD::AliITSsimulationSSD(AliITSDetTypeSim* dettyp):
AliITSsimulation(dettyp),
//fDCS(0),
fMapA2(0),
fIonE(0.0),
fDifConst(),
fDriftVel(),
fTimeResponse(NULL),
fLorentz(kFALSE),
fTanLorAngP(0),
fTanLorAngN(0)
{
    // Constructor 
    // Input:
    //   AliITSDetTypeSim    Pointer to the SSD dettype to be used
    // Outputs:
    //   none.
    // Return
    //   A standard constructed AliITSsimulationSSD class

  fTimeResponse = new TF1("ftimeresponse",".5*x*exp(1.-.5*x)");
    Init();
}
//----------------------------------------------------------------------
void AliITSsimulationSSD::Init(){
  // Inilizer, Inilizes all of the variable as needed in a standard place.
  // Input:
  //   AliITSsegmentationSSD *seg  Pointer to the SSD segmentation to be used
  //   AliITSCalibrationSSD   *resp Pointer to the SSD responce class to be used
  // Outputs:
  //   none.
  // Return
  //   none.
  AliITSsegmentationSSD* seg = (AliITSsegmentationSSD*)GetSegmentationModel(2);
  AliITSSimuParam* simpar = fDetType->GetSimuParam();
  
  SetDriftVelocity(); // use default values in .h file
  SetIonizeE();       // use default values in .h file
  SetDiffConst();     // use default values in .h file
  fpList           = new AliITSpList(2,GetNStrips());
  fMapA2           = new AliITSMapA2(seg);
  SetLorentzDrift(simpar->GetSSDLorentzDrift());
  if (fLorentz) SetTanLorAngle();
}

//______________________________________________________________________
Bool_t AliITSsimulationSSD::SetTanLorAngle() {
    // This function set the Tangent of the Lorentz angles. 
    // output: Bool_t : kTRUE in case of success
    //

    if(!fDetType) {
      AliError("AliITSsimulationSPD::SetTanLorAngle: AliITSDetTypeSim* fDetType not set ");
      return kFALSE;}

    AliITSSimuParam* simpar = fDetType->GetSimuParam();
    AliMagF* fld = (AliMagF*)TGeoGlobalMagField::Instance()->GetField();
    if (!fld) AliFatal("The field is not initialized");
    Double_t bz = fld->SolenoidField();

    fTanLorAngN = TMath::Tan( simpar->LorentzAngleElectron(bz) );
    fTanLorAngP = TMath::Tan( simpar->LorentzAngleHole(bz) );

    return kTRUE;
}

//______________________________________________________________________
AliITSsimulationSSD& AliITSsimulationSSD::operator=(
                                         const AliITSsimulationSSD &s){
  // Operator =

  if(this==&s) return *this;

  //  this->fDCS         = new AliITSdcsSSD(*(s.fDCS));
  this->fMapA2       = s.fMapA2;
  this->fIonE        = s.fIonE;
  this->fDifConst[0] = s.fDifConst[0];
  this->fDifConst[1] = s.fDifConst[1];
  this->fDriftVel[0] = s.fDriftVel[0];
  this->fDriftVel[1] = s.fDriftVel[1];
  this->fTimeResponse = s.fTimeResponse;
  this->fLorentz   = s.fLorentz;
  this->fTanLorAngP = s.fTanLorAngP;
  this->fTanLorAngN = s.fTanLorAngN;
  return *this;
}
/*
//______________________________________________________________________
AliITSsimulation& AliITSsimulationSSD::operator=(
                                         const AliITSsimulation &s){
  // Operator =

  if(this==&s) return *this;
  Error("AliITSsimulationSSD","Not allowed to make a = with "
	"AliITSsimulationSSD Using default creater instead");
  
  return *this;
}
*/
//______________________________________________________________________
AliITSsimulationSSD::AliITSsimulationSSD(const AliITSsimulationSSD &source):
    AliITSsimulation(source),
fMapA2(source.fMapA2),
fIonE(source.fIonE),
fDifConst(),
fDriftVel(),
fTimeResponse(source.fTimeResponse),
fLorentz(source.fLorentz),
fTanLorAngP(source.fTanLorAngP),
fTanLorAngN(source.fTanLorAngN)
{
  // copy constructor
  fDifConst[0] = source.fDifConst[0];
  fDifConst[1] = source.fDifConst[1];
  fDriftVel[0] = source.fDriftVel[0];
  fDriftVel[1] = source.fDriftVel[1];
}
//______________________________________________________________________
AliITSsimulationSSD::~AliITSsimulationSSD() {
  // destructor
  delete fMapA2;
  delete fTimeResponse;
  //delete fDCS;
}
//______________________________________________________________________
void AliITSsimulationSSD::InitSimulationModule(Int_t module,Int_t event){
    // Creates maps to build the list of tracks for each sumable digit
    // Inputs:
    //   Int_t module    // Module number to be simulated
    //   Int_t event     // Event number to be simulated
    // Outputs:
    //   none.
    // Return
    //    none.

    SetModuleNumber(module);
    SetEventNumber(event);
    fMapA2->ClearMap();
    fpList->ClearMap();
}
//______________________________________________________________________
void AliITSsimulationSSD::FinishSDigitiseModule(){
    // Does the Sdigits to Digits work
    // Inputs:
    //   none.
    // Outputs:
    //   none.
    // Return:
    //   none.

  FillMapFrompList(fpList);  // need to check if needed here or not????
  SDigitToDigit(fModule,fpList);
  fpList->ClearMap();
  fMapA2->ClearMap();
}
//______________________________________________________________________
void AliITSsimulationSSD::DigitiseModule(AliITSmodule *mod,Int_t,Int_t) {
  // Digitizes hits for one SSD module
  SetModuleNumber(mod->GetIndex());
  
  HitsToAnalogDigits(mod,fpList);
  SDigitToDigit(GetModuleNumber(),fpList);
  
  fpList->ClearMap();
  fMapA2->ClearMap();
}
//______________________________________________________________________
void AliITSsimulationSSD::SDigitiseModule(AliITSmodule *mod,Int_t,Int_t) {
  // Produces Summable/Analog digits and writes them to the SDigit tree. 

    HitsToAnalogDigits(mod,fpList);

    WriteSDigits(fpList);
    
    fpList->ClearMap();
    fMapA2->ClearMap();
}
//______________________________________________________________________
void AliITSsimulationSSD::SDigitToDigit(Int_t module,AliITSpList *pList){
  // Takes the pList and finishes the digitization.
  
  ApplyNoise(pList,module);
  ApplyCoupling(pList,module);
  ApplyDeadChannels(module);
  
  ChargeToSignal(module,pList);
}
//______________________________________________________________________
void AliITSsimulationSSD::HitsToAnalogDigits(AliITSmodule *mod,
                                             AliITSpList *pList){
    // Loops over all hits to produce Analog/floating point digits. This
    // is also the first task in producing standard digits.
  Int_t lasttrack     = -2;
  Int_t idtrack       = -2;
  Double_t x0=0.0, y0=0.0, z0=0.0;
  Double_t x1=0.0, y1=0.0, z1=0.0;
  Double_t de=0.0;
  Int_t module = mod->GetIndex();
  Double_t tof = 0.;
  
  
  AliITSsegmentationSSD* seg = (AliITSsegmentationSSD*)GetSegmentationModel(2);
  
  TObjArray *hits = mod->GetHits();
  Int_t nhits     = hits->GetEntriesFast();
  if (nhits<=0) return;
  AliITSTableSSD * tav = new AliITSTableSSD(GetNStrips());
  module = mod->GetIndex();
  if ( mod->GetLayer() == 6 ) seg->SetLayer(6);
  if ( mod->GetLayer() == 5 ) seg->SetLayer(5);

  for(Int_t i=0; i<nhits; i++) {    
    // LineSegmentL returns 0 if the hit is entering
    // If hits is exiting returns positions of entering and exiting hits
    // Returns also energy loss
    if(GetDebug(4)){
      cout << i << " ";
      cout << mod->GetHit(i)->GetXL() << " "<<mod->GetHit(i)->GetYL();
      cout << " " << mod->GetHit(i)->GetZL();
      cout << endl;
    } // end if
    if (mod->LineSegmentL(i, x0, x1, y0, y1, z0, z1, de, idtrack)) {

      // Scale down dE/dx according to the hit's TOF wrt to the trigger
      // Necessary for pileup simulation
      // EF - 21/04/09
      tof = mod->GetHit(i)->GetTOF();
      tof *= 1.E+6; // convert time in microsecond
      if(tof<2.) de = de * fTimeResponse->Eval(-1.*tof+2.);
      else de = 0.;
      //

      HitToDigit(module, x0, y0, z0, x1, y1, z1, de,tav);
      if (lasttrack != idtrack || i==(nhits-1)) {
	GetList(idtrack,i,module,pList,tav);
      } // end if
      lasttrack=idtrack;
    } // end if
  }  // end loop over hits
  delete tav; tav=0;
  return;
}
//----------------------------------------------------------------------
void AliITSsimulationSSD::HitToDigit(Int_t module, Double_t x0, Double_t y0, 
                                     Double_t z0, Double_t x1, Double_t y1, 
                                     Double_t z1, Double_t de,
                                     AliITSTableSSD *tav) {
  
  // hit to digit conversion
  
  AliITSsegmentationSSD* seg = (AliITSsegmentationSSD*)GetSegmentationModel(2);
  // Turns hits in SSD module into one or more digits.
  //Float_t tang[2] = {0.0,0.0};
  //seg->Angles(tang[0], tang[1]);//stereo<<->tan(stereo)~=stereo
  Double_t x, y, z;
  Double_t dex=0.0, dey=0.0, dez=0.0; 
  Double_t pairs; // pair generation energy per step.
  Double_t sigma[2] = {0.,0.};// standard deviation of the diffusion gaussian
  Double_t tdrift[2] = {0.,0.}; // time of drift
  Double_t w;
  Double_t inf[2], sup[2], par0[2];                 
 
  // Set up corrections for Lorentz drift (ExB)
  Double_t tanLorAngP = fTanLorAngP;
  Double_t tanLorAngN = fTanLorAngN;
  if(seg->GetLayer()==6) {
    tanLorAngP = -1.*fTanLorAngP;
    tanLorAngN = -1.*fTanLorAngN;
  }

  // Steps in the module are determined "manually" (i.e. No Geant)
  // NumOfSteps divide path between entering and exiting hits in steps 
  Int_t numOfSteps = NumOfSteps(x1, y1, z1, dex, dey, dez);
  // Enery loss is equally distributed among steps
  de    = de/numOfSteps;
  pairs = de/GetIonizeE(); // e-h pairs generated

  //-----------------------------------------------------
  // stepping
  //-----------------------------------------------------
  for(Int_t j=0; j<numOfSteps; j++) {     // stepping

    x = x0 + (j+0.5)*dex;
    y = y0 + (j+0.5)*dey;
    if ( y > (seg->Dy()/2+10)*1.0E-4 ) {
      // check if particle is within the detector
      Warning("HitToDigit",
	      "hit out of detector y0=%e,y=%e,dey=%e,j =%d module=%d,  exceed=%e",
	      y0,y,dey,j,module, y-(seg->Dy()/2+10)*1.0E-4);
      return;
    } // end if
    z = z0 + (j+0.5)*dez;

    if(GetDebug(4)) cout <<"HitToDigit "<<x<<" "<<y<<" "<<z<< " "
			 <<dex<<" "<<dey<<" "<<dez<<endl;

    if(seg->GetLayer()==6) {
      y=-y; // Lay6 module has sensor up-side-down!!!
    }
    
    Int_t k;
    //---------------------------------------------------------
    // Pside
    //------------------------------------------------------------
    k=0;

    // w is the coord. perpendicular to the strips
    //    Float_t xp=x*1.e+4,zp=z*1.e+4; // microns    
    Float_t xp=x,zp=z; 

    // correction for the Lorentz's angle
    if(fLorentz) {
      Float_t deltaxp = (y+(seg->Dy()*1.0E-4)/2)*tanLorAngP;
      xp+=deltaxp;  
    }

    seg->GetPadTxz(xp,zp);
    
    // calculate drift time
    // y is the minimum path
    tdrift[0] = (y+(seg->Dy()*1.0E-4)/2)/GetDriftVelocity(0);
    
    w = xp; // P side strip number
    
    if((w<(-0.5)) || (w>(GetNStrips()-0.5))) {
      // this check rejects hits in regions not covered by strips
      // 0.5 takes into account boundaries 
      if(GetDebug(4)) cout << "Dead SSD region, x,z="<<x<<","<<z<<endl;
      return; // There are dead region on the SSD sensitive volume!!!
    } // end if
    // sigma is the standard deviation of the diffusion gaussian
    if(tdrift[k]<0) return;
    
    sigma[k] = TMath::Sqrt(2*GetDiffConst(k)*tdrift[k]);
    sigma[k] /= (GetStripPitch()*1.0E-4);  //units of Pitch
    
    if(sigma[k]==0.0) { 	
      Error("HitToDigit"," sigma[%d]=0",k);
      exit(0);
    } // end if
    
    par0[k] = pairs;
    // we integrate the diffusion gaussian from -3sigma to 3sigma 
    inf[k] = w - 3*sigma[k]; // 3 sigma from the gaussian average  
    sup[k] = w + 3*sigma[k]; // 3 sigma from the gaussian average
    // IntegrateGaussian does the actual
    // integration of diffusion gaussian
    IntegrateGaussian(k, par0[k], w, sigma[k], inf[k], sup[k],tav);
    
    //------------------------------------------------------
    // end Pside
    //-------------------------------------------------------
    
    //------------------------------------------------------
    // Nside
    //-------------------------------------------------------
    k=1;

    xp=x; zp=z; 

    // correction for the Lorentz's angle
    if(fLorentz) {
      Float_t deltaxn = ((seg->Dy()*1.0E-4)/2-y)*tanLorAngN;
      xp+=deltaxn;
    }
    

    seg->GetPadTxz(xp,zp);

    tdrift[1] = ((seg->Dy()*1.0E-4)/2-y)/GetDriftVelocity(1);
    
    //tang[k]=TMath::Tan(tang[k]);
    
    w = zp; // N side strip number
    
    if((w<(-0.5)) || (w>(GetNStrips()-0.5))) {
      // this check rejects hits in regions not covered by strips
      // 0.5 takes into account boundaries 
      if(GetDebug(4)) cout << "Dead SSD region, x,z="<<x<<","<<z<<endl;
      return; // There are dead region on the SSD sensitive volume.
    } // end if
    
      // sigma is the standard deviation of the diffusion gaussian
    if(tdrift[k]<0) return;
    
    sigma[k] = TMath::Sqrt(2*GetDiffConst(k)*tdrift[k]);
    sigma[k] /= (GetStripPitch()*1.0E-4);  //units of Pitch
    
    if(sigma[k]==0.0) { 	
      Error("HitToDigit"," sigma[%d]=0",k);
      exit(0);
    } // end if
    
    par0[k] = pairs;
    // we integrate the diffusion gaussian from -3sigma to 3sigma 
    inf[k] = w - 3*sigma[k]; // 3 sigma from the gaussian average  
    sup[k] = w + 3*sigma[k]; // 3 sigma from the gaussian average
    // IntegrateGaussian does the actual
    // integration of diffusion gaussian
    IntegrateGaussian(k, par0[k], w, sigma[k], inf[k], sup[k],tav);
    
    //-------------------------------------------------
    // end Nside
    //-------------------------------------------------
    
    
  } // end stepping
}

//______________________________________________________________________
void AliITSsimulationSSD::ApplyNoise(AliITSpList *pList,Int_t module){
  // Apply Noise.
  Int_t ix;
  Double_t signal,noise;
  AliITSCalibrationSSD* res =(AliITSCalibrationSSD*)GetCalibrationModel(module);
   
  // Pside
  for(ix=0;ix<GetNStrips();ix++){      // loop over strips
    
    // noise is gaussian
    noise  = (Double_t) gRandom->Gaus(0,res->GetNoiseP(ix));
    
    // need to calibrate noise 
    // NOTE. noise from the calibration database comes uncalibrated, 
    // it needs to be calibrated in order to be added
    // to the signal. It will be decalibrated later on together with the noise    
    noise *= (Double_t) res->GetGainP(ix); 
    
    // noise comes in ADC channels from the calibration database
    // It needs to be converted back to electronVolts
    noise /= res->GetSSDDEvToADC(1.);
    
    // Finally, noise is added to the signal
    signal = noise + fMapA2->GetSignal(0,ix);//get signal from map
    fMapA2->SetHit(0,ix,signal); // give back signal to map
    if(signal>0.0) pList->AddNoise(0,ix,module,noise);
  } // loop over strip 
  
    // Nside
  for(ix=0;ix<GetNStrips();ix++){      // loop over strips
    noise  = (Double_t) gRandom->Gaus(0,res->GetNoiseN(ix));// give noise to signal
    noise *= (Double_t) res->GetGainN(ix); 
    noise /= res->GetSSDDEvToADC(1.);
    signal = noise + fMapA2->GetSignal(1,ix);//get signal from map
    fMapA2->SetHit(1,ix,signal); // give back signal to map
    if(signal>0.0) pList->AddNoise(1,ix,module,noise);
  } // loop over strip 
  
}
//______________________________________________________________________
void AliITSsimulationSSD::ApplyCoupling(AliITSpList *pList,Int_t module) {
  // Apply the effect of electronic coupling between channels
  Int_t ix;
  Double_t signal=0;
  //AliITSCalibrationSSD* res =(AliITSCalibrationSSD*)GetCalibrationModel(module);
  AliITSSimuParam* res = fDetType->GetSimuParam();
    
  Double_t *contrLeft  = new Double_t[GetNStrips()];
  Double_t *contrRight = new Double_t[GetNStrips()];
  
  // P side coupling
  for(ix=0;ix<GetNStrips();ix++){
    if(ix>0) contrLeft[ix] = fMapA2->GetSignal(0,ix-1)*res->GetSSDCouplingPL();
    else contrLeft[ix] = 0.0;
    if(ix<(GetNStrips()-1)) contrRight[ix] = fMapA2->GetSignal(0,ix+1)*res->GetSSDCouplingPR();
    else contrRight[ix] = 0.0;
  } // loop over strips 
  
  for(ix=0;ix<GetNStrips();ix++){
    signal = contrLeft[ix] + contrRight[ix] - res->GetSSDCouplingPL() * fMapA2->GetSignal(0,ix)
      - res->GetSSDCouplingPR() * fMapA2->GetSignal(0,ix);
    fMapA2->AddSignal(0,ix,signal);
    if(signal>0.0) pList->AddNoise(0,ix,module,signal);
  } // loop over strips 
  
  // N side coupling
  for(ix=0;ix<GetNStrips();ix++){
    if(ix>0) contrLeft[ix] = fMapA2->GetSignal(1,ix-1)*res->GetSSDCouplingNL();
    else contrLeft[ix] = 0.0;
    if(ix<(GetNStrips()-1)) contrRight[ix] = fMapA2->GetSignal(1,ix+1)*res->GetSSDCouplingNR();
    else contrRight[ix] = 0.0;
  } // loop over strips 
  
  for(ix=0;ix<GetNStrips();ix++){
    signal = contrLeft[ix] + contrRight[ix] - res->GetSSDCouplingNL() * fMapA2->GetSignal(0,ix)
      - res->GetSSDCouplingNR() * fMapA2->GetSignal(0,ix);
    fMapA2->AddSignal(1,ix,signal);
    if(signal>0.0) pList->AddNoise(1,ix,module,signal);
  } // loop over strips 
  

  delete [] contrLeft;
  delete [] contrRight; 
}

//______________________________________________________________________
void AliITSsimulationSSD::ApplyDeadChannels(Int_t module) {
  // Kill dead channels setting gain to zero

  AliITSCalibrationSSD* res = (AliITSCalibrationSSD*)GetCalibrationModel(module);

  for(Int_t i=0;i<GetNStrips();i++){

    if(res->IsPChannelBad(i)) res->SetGainP(i,0.0);
    if(res->IsNChannelBad(i)) res->SetGainN(i,0.0);

  } // loop over strips 

}

//______________________________________________________________________
Float_t AliITSsimulationSSD::F(Float_t av, Float_t x, Float_t s) {
    // Computes the integral of a gaussian using Error Function
    Float_t sqrt2 = TMath::Sqrt(2.0);
    Float_t sigm2 = sqrt2*s;
    Float_t integral;

    integral = 0.5 * AliMathBase::ErfFast( (x - av) / sigm2);
    return integral;
}
//______________________________________________________________________
void AliITSsimulationSSD::IntegrateGaussian(Int_t k,Double_t par, Double_t w,
                                            Double_t sigma, 
                                            Double_t inf, Double_t sup,
                                            AliITSTableSSD *tav) {
    // integrate the diffusion gaussian
    // remind: inf and sup are w-3sigma and w+3sigma
    //         we could define them here instead of passing them
    //         this way we are free to introduce asimmetry

    Double_t a=0.0, b=0.0;
    Double_t dXCharge1 = 0.0, dXCharge2 = 0.0;
    // dXCharge1 and 2 are the charge to two neighbouring strips
    // Watch that we only involve at least two strips
    // Numbers greater than 2 of strips in a cluster depend on
    //  geometry of the track and delta rays, not charge diffusion!   

    Double_t strip = TMath::Floor(w);         // closest strip on the left

    if ( TMath::Abs((strip - w)) < 0.5) { 
        // gaussian mean is closer to strip on the left
        a = inf;                         // integration starting point
        if((strip+0.5)<=sup) {
            // this means that the tail of the gaussian goes beyond
            // the middle point between strips ---> part of the signal
            // is given to the strip on the right
            b = strip + 0.5;               // integration stopping point
            dXCharge1 = F( w, b, sigma) - F(w, a, sigma);
            dXCharge2 = F( w, sup, sigma) - F(w ,b, sigma); 
        }else { 
            // this means that all the charge is given to the strip on the left
            b = sup;
            dXCharge1 = 0.9973;   // gaussian integral at 3 sigmas
            dXCharge2 = 0.0;
        } // end if
        dXCharge1 = par * dXCharge1;// normalize by mean of number of carriers
        dXCharge2 = par * dXCharge2;

        // for the time being, signal is the charge
        // in ChargeToSignal signal is converted in ADC channel
        fMapA2->AddSignal(k,(Int_t)strip,dXCharge1);
        tav->Add(k,(Int_t)strip);
        if(((Int_t) strip) < (GetNStrips()-1)) {
            // strip doesn't have to be the last (remind: last=GetNStrips()-1)
            // otherwise part of the charge is lost
            fMapA2->AddSignal(k,((Int_t)strip+1),dXCharge2);
            tav->Add(k,((Int_t)(strip+1)));
        } // end if
    }else{
        // gaussian mean is closer to strip on the right
        strip++;     // move to strip on the rigth
        b = sup;     // now you know where to stop integrating
        if((strip-0.5)>=inf) { 
            // tail of diffusion gaussian on the left goes left of
            // middle point between strips
            a = strip - 0.5;        // integration starting point
            dXCharge1 = F(w, b, sigma) - F(w, a, sigma);
            dXCharge2 = F(w, a, sigma) - F(w, inf, sigma);
        }else {
            a = inf;
            dXCharge1 = 0.9973;   // gaussian integral at 3 sigmas
            dXCharge2 = 0.0;
        } // end if
        dXCharge1 = par * dXCharge1;    // normalize by means of carriers
        dXCharge2 = par * dXCharge2;
        // for the time being, signal is the charge
        // in ChargeToSignal signal is converted in ADC channel
        fMapA2->AddSignal(k,(Int_t)strip,dXCharge1);
        tav->Add(k,(Int_t)strip);
        if(((Int_t) strip) > 0) {
            // strip doesn't have to be the first
            // otherwise part of the charge is lost
            fMapA2->AddSignal(k,((Int_t)strip-1),dXCharge2);
            tav->Add(k,((Int_t)(strip-1)));
        } // end if
    } // end if
}
//______________________________________________________________________
Int_t AliITSsimulationSSD::NumOfSteps(Double_t x, Double_t y, Double_t z,
                                      Double_t &dex,Double_t &dey,
                                      Double_t &dez){
    // number of steps
    // it also returns steps for each coord
    //AliITSsegmentationSSD *seg = new AliITSsegmentationSSD();

    Double_t step = 25E-4;
    //step = (Double_t) seg->GetStepSize();  // step size (cm)
    Int_t numOfSteps = (Int_t) (TMath::Sqrt(x*x+y*y+z*z)/step); 

    if (numOfSteps < 1) numOfSteps = 1;       // one step, at least
    //numOfSteps=1;

    // we could condition the stepping depending on the incident angle
    // of the track
    dex = x/numOfSteps;
    dey = y/numOfSteps;
    dez = z/numOfSteps;
    
    return numOfSteps;
}
//----------------------------------------------------------------------
void AliITSsimulationSSD::GetList(Int_t label,Int_t hit,Int_t mod,
                                  AliITSpList *pList,AliITSTableSSD *tav) {
    // loop over nonzero digits
    Int_t ix,i;
    Double_t signal=0.;

    for(Int_t k=0; k<2; k++) {
        ix=tav->Use(k);
        while(ix>-1){
            signal = fMapA2->GetSignal(k,ix);
            if(signal==0.0) {
                ix=tav->Use(k);
                continue;
            } // end if signal==0.0
            // check the signal magnitude
            for(i=0;i<pList->GetNSignals(k,ix);i++){
                signal -= pList->GetTSignal(k,ix,i);
            } // end for i
            //  compare the new signal with already existing list
            if(signal>0)pList->AddSignal(k,ix,label,hit,mod,signal);
            ix=tav->Use(k);
        } // end of loop on strips
    } // end of loop on P/N side
    tav->Clear();
}
//----------------------------------------------------------------------
void AliITSsimulationSSD::ChargeToSignal(Int_t module,const AliITSpList *pList) {
    // charge to signal
    static AliITS *aliITS = (AliITS*)gAlice->GetModule("ITS");
    Float_t threshold = 0.;
    Int_t size = AliITSdigitSSD::GetNTracks();
    Int_t * digits = new Int_t[size];
    Int_t * tracks = new Int_t[size];
    Int_t * hits = new Int_t[size];
    Int_t j1;
    Float_t charges[3] = {0.0,0.0,0.0};
    Float_t signal;
    AliITSCalibrationSSD* res =(AliITSCalibrationSSD*)GetCalibrationModel(module);
    AliITSSimuParam* simpar = fDetType->GetSimuParam();

    for(Int_t k=0;k<2;k++){         // both sides (0=Pside, 1=Nside)
      for(Int_t ix=0;ix<GetNStrips();ix++){     // loop over strips

	// if strip is dead -> gain=0
	if( ((k==0)&&(res->GetGainP(ix)==0)) || ((k==1)&&(res->GetGainN(ix)==0))) continue;
	
	signal = fMapA2->GetSignal(k,ix);
	// signal has to be uncalibrated
	// In real life, gains are supposed to be calculated from calibration runs,
	// stored in the calibration DB and used in the reconstruction
	// (see AliITSClusterFinderSSD.cxx)
	if(k==0) signal /= res->GetGainP(ix);
	else signal /= res->GetGainN(ix);

	// signal is converted in unit of ADC
	signal = res->GetSSDDEvToADC(signal);
	if(signal>4095.) signal = 4095.;//if exceeding, accumulate last one

	// threshold for zero suppression is set on the basis of the noise
	// A good value is 3*sigma_noise
	if(k==0) threshold = res->GetNoiseP(ix);
	else threshold = res->GetNoiseN(ix);

	threshold *= simpar->GetSSDZSThreshold(); // threshold at 3 sigma noise

	if(signal < threshold) continue;
	//cout<<signal<<" "<<threshold<<endl;

	digits[0] = k;
	digits[1] = ix;
	digits[2] = TMath::Nint(signal);
	for(j1=0;j1<size;j1++)if(j1<pList->GetNEntries()){
	  // only three in digit.
	  tracks[j1]  = pList->GetTrack(k,ix,j1);
	  hits[j1]    = pList->GetHit(k,ix,j1);
	}else{
	  tracks[j1]  = -3;
	  hits[j1]    = -1;
	} // end for j1
	// finally add digit
	aliITS->AddSimDigit(2,0,digits,tracks,hits,charges);
      } // end for ix
    } // end for k
    delete [] digits;
    delete [] tracks;
    delete [] hits;
}
//______________________________________________________________________
void AliITSsimulationSSD::WriteSDigits(AliITSpList *pList){
    // Fills the Summable digits Tree
    Int_t i,ni,j,nj;
    static AliITS *aliITS = (AliITS*)gAlice->GetModule("ITS");

    pList->GetMaxMapIndex(ni,nj);
    for(i=0;i<ni;i++)for(j=0;j<nj;j++){
        if(pList->GetSignalOnly(i,j)>0.0){
            aliITS->AddSumDigit(*(pList->GetpListItem(i,j)));
            if(GetDebug(4)) cout << "pListSSD: "<<*(pList->GetpListItem(i,j))
                                << endl;
        } // end if
    } // end for i,j
  return;
}
//______________________________________________________________________
void AliITSsimulationSSD::FillMapFrompList(AliITSpList *pList){
    // Fills fMap2A from the pList of Summable digits
    Int_t k,ix;

    for(k=0;k<2;k++)for(ix=0;ix<GetNStrips();ix++) 
        fMapA2->AddSignal(k,ix,pList->GetSignal(k,ix));
    return;
}
//______________________________________________________________________
void AliITSsimulationSSD::Print(ostream *os){
    //Standard output format for this class

    //AliITSsimulation::Print(os);
    *os << fIonE <<",";
    *os << fDifConst[0] <<","<< fDifConst[1] <<",";
    *os << fDriftVel[0] <<","<< fDriftVel[1];
    //*os <<","; fDCS->Print(os);
    //*os <<","; fMapA2->Print(os);
}
//______________________________________________________________________
void AliITSsimulationSSD::Read(istream *is){
    // Standard output streaming function.

    //AliITSsimulation::Read(is);
    *is >> fIonE;
    *is >> fDifConst[0] >> fDifConst[1];
    *is >> fDriftVel[0] >> fDriftVel[1];
    //fDCS->Read(is);
    //fMapA2->Read(is);
}
//______________________________________________________________________
ostream &operator<<(ostream &os,AliITSsimulationSSD &source){
    // Standard output streaming function.

    source.Print(&os);
    return os;
}
//______________________________________________________________________
istream &operator>>(istream &os,AliITSsimulationSSD &source){
    // Standard output streaming function.

    source.Read(&os);
    return os;
}
//______________________________________________________________________



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