ROOT logo
/**************************************************************************
 * Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/
///////////////////////////////////////////////////////////////////////////
//  Plane Efficiency class for ITS                      
//  It is used for module by module efficiency of the SSD,        
//  evaluated by tracks
//  (Inherits from AliITSPlaneEff)
//  Author: G.E. Bruno 
//          giuseppe.bruno@ba.infn.it
//
///////////////////////////////////////////////////////////////////////////

/*  $Id$ */

#include <TMath.h>
#include <TH1F.h>
#include <TFile.h>
#include <TTree.h>
#include <TROOT.h>
#include "AliITSPlaneEffSSD.h"
#include "AliLog.h"
#include "AliCDBStorage.h"
#include "AliCDBEntry.h"
#include "AliCDBManager.h"
//#include "AliCDBRunRange.h"
#include "AliITSCalibrationSSD.h"

ClassImp(AliITSPlaneEffSSD)	
//______________________________________________________________________
AliITSPlaneEffSSD::AliITSPlaneEffSSD():
  AliITSPlaneEff(),
  fHisResX(0),
  fHisResZ(0),
  fHisResXZ(0),
  fHisClusterSize(0),
  fHisTrackErrX(0),
  fHisTrackErrZ(0),
  fHisClusErrX(0),
  fHisClusErrZ(0){
  for (UInt_t i=0; i<kNModule; i++){
  // default constructor
    fFound[i]=0;
    fTried[i]=0;
  }
  AliDebug(1,Form("Calling default constructor"));
}
//______________________________________________________________________
AliITSPlaneEffSSD::~AliITSPlaneEffSSD(){
    // destructor
    // Inputs:
    //    none.
    // Outputs:
    //    none.
    // Return:
    //     none.
    DeleteHistos();
}
//______________________________________________________________________
AliITSPlaneEffSSD::AliITSPlaneEffSSD(const AliITSPlaneEffSSD &s) : AliITSPlaneEff(s),
fHisResX(0),
fHisResZ(0),
fHisResXZ(0),
fHisClusterSize(0),
fHisTrackErrX(0),
fHisTrackErrZ(0),
fHisClusErrX(0),
fHisClusErrZ(0)
{
    //     Copy Constructor
    // Inputs:
    //    AliITSPlaneEffSSD &s The original class for which
    //                                this class is a copy of
    // Outputs:
    //    none.
    // Return:

 for (UInt_t i=0; i<kNModule; i++){
    fFound[i]=s.fFound[i];
    fTried[i]=s.fTried[i];
 }
 if(fHis) {
   InitHistos();
   for(Int_t i=0; i<kNHisto; i++) {
      s.fHisResX[i]->Copy(*fHisResX[i]);
      s.fHisResZ[i]->Copy(*fHisResZ[i]);
      s.fHisResXZ[i]->Copy(*fHisResXZ[i]);
      s.fHisClusterSize[i]->Copy(*fHisClusterSize[i]);
      s.fHisTrackErrX[i]->Copy(*fHisTrackErrX[i]);
      s.fHisTrackErrZ[i]->Copy(*fHisTrackErrZ[i]);
      s.fHisClusErrX[i]->Copy(*fHisClusErrX[i]);
      s.fHisClusErrZ[i]->Copy(*fHisClusErrZ[i]);
   }
 }
}
//_________________________________________________________________________
AliITSPlaneEffSSD& AliITSPlaneEffSSD::operator+=(const AliITSPlaneEffSSD &add){
    //    Add-to-me operator
    // Inputs:
    //    const AliITSPlaneEffSSD &add  simulation class to be added
    // Outputs:
    //    none.
    // Return:
    //    none
    for (UInt_t i=0; i<kNModule; i++){
      fFound[i] += add.fFound[i];
      fTried[i] += add.fTried[i];
    }
    if(fHis && add.fHis) {
      for(Int_t i=0; i<kNHisto; i++) {
        fHisResX[i]->Add(add.fHisResX[i]);
        fHisResZ[i]->Add(add.fHisResZ[i]);
        fHisResXZ[i]->Add(add.fHisResXZ[i]);
        fHisClusterSize[i]->Add(add.fHisClusterSize[i]);
        fHisTrackErrX[i]->Add(add.fHisTrackErrX[i]);
        fHisTrackErrZ[i]->Add(add.fHisTrackErrZ[i]);
        fHisClusErrX[i]->Add(add.fHisClusErrX[i]);
        fHisClusErrZ[i]->Add(add.fHisClusErrZ[i]);
      }
    }
    return *this;
}
//______________________________________________________________________
AliITSPlaneEffSSD&  AliITSPlaneEffSSD::operator=(const
                                           AliITSPlaneEffSSD &s){
    //    Assignment operator
    // Inputs:
    //    AliITSPlaneEffSSD &s The original class for which
    //                                this class is a copy of
    // Outputs:
    //    none.
    // Return:
 
    if(this==&s) return *this;
    this->~AliITSPlaneEffSSD();
    new(this) AliITSPlaneEffSSD();
    s.Copy(*this);
    return *this;
}
//______________________________________________________________________
void AliITSPlaneEffSSD::Copy(TObject &obj) const {
  // protected method. copy this to obj
  AliITSPlaneEff::Copy(obj);
  AliITSPlaneEffSSD& target = (AliITSPlaneEffSSD &) obj;
  for(Int_t i=0;i<kNModule;i++) {
      target.fFound[i] = fFound[i];
      target.fTried[i] = fTried[i];
  }
  CopyHistos(target);
  return;
}
//_______________________________________________________________________
void AliITSPlaneEffSSD::CopyHistos(AliITSPlaneEffSSD &target) const {
  // protected method: copy histos from this to target
  target.fHis  = fHis; // this is redundant only in some cases. Leave as it is.
  if(fHis) {
    target.fHisResX=new TH1F*[kNHisto];
    target.fHisResZ=new TH1F*[kNHisto];
    target.fHisResXZ=new TH2F*[kNHisto];
    target.fHisClusterSize=new TH2I*[kNHisto];
    target.fHisTrackErrX=new TH1F*[kNHisto];
    target.fHisTrackErrZ=new TH1F*[kNHisto];
    target.fHisClusErrX=new TH1F*[kNHisto];
    target.fHisClusErrZ=new TH1F*[kNHisto];
    for(Int_t i=0; i<kNHisto; i++) {
      target.fHisResX[i] = new TH1F(*fHisResX[i]);
      target.fHisResZ[i] = new TH1F(*fHisResZ[i]);
      target.fHisResXZ[i] = new TH2F(*fHisResXZ[i]);
      target.fHisClusterSize[i] = new TH2I(*fHisClusterSize[i]);
      target.fHisTrackErrX[i] = new TH1F(*fHisTrackErrX[i]);
      target.fHisTrackErrZ[i] = new TH1F(*fHisTrackErrZ[i]);
      target.fHisClusErrX[i]  = new TH1F(*fHisClusErrX[i]);
      target.fHisClusErrZ[i]  = new TH1F(*fHisClusErrZ[i]);
    }
  }
return;
}

//_______________________________________________________________________
Int_t AliITSPlaneEffSSD::GetMissingTracksForGivenEff(Double_t eff, Double_t RelErr,
          UInt_t im) const {
   
  //   Estimate the number of tracks still to be collected to attain a 
  //   given efficiency eff, with relative error RelErr
  //   Inputs:
  //         eff    -> Expected efficiency (e.g. those from actual estimate)
  //         RelErr -> tollerance [0,1] 
  //         im     -> module number [0,1697]
  //   Outputs: none
  //   Return: the estimated n. of tracks 
  //
if (im>=kNModule) 
 {AliError("GetMissingTracksForGivenEff: you asked for a non existing module");
 return -1;}
else return GetNTracksForGivenEff(eff,RelErr)-fTried[GetKey(im)];
}
//_________________________________________________________________________
Double_t  AliITSPlaneEffSSD::PlaneEff(const UInt_t im) const {
// Compute the efficiency for a basic block, 
// Inputs:
//        im     -> module number [0,1697]
if (im>=kNModule) 
 {AliError("PlaneEff(UInt_t): you asked for a non existing module"); return -1.;}
 Int_t nf=fFound[GetKey(im)];
 Int_t nt=fTried[GetKey(im)];
return AliITSPlaneEff::PlaneEff(nf,nt);
}
//_________________________________________________________________________
Double_t  AliITSPlaneEffSSD::ErrPlaneEff(const UInt_t im) const {
    // Compute the statistical error on efficiency for a basic block,
    // using binomial statistics 
    // Inputs:
    //        im     -> module number [0,1697]
if (im>=kNModule) 
 {AliError("ErrPlaneEff(UInt_t): you asked for a non existing module"); return -1.;}
Int_t nf=fFound[GetKey(im)];
Int_t nt=fTried[GetKey(im)];
return AliITSPlaneEff::ErrPlaneEff(nf,nt);
} 
//_________________________________________________________________________
Bool_t AliITSPlaneEffSSD::UpDatePlaneEff(const Bool_t Kfound, const UInt_t im) {
  // Update efficiency for a basic block
if (im>=kNModule) 
 {AliError("UpDatePlaneEff: you asked for a non existing module"); return kFALSE;}
 fTried[GetKey(im)]++;
 if(Kfound) fFound[GetKey(im)]++;
 return kTRUE;
}
//_________________________________________________________________________
UInt_t AliITSPlaneEffSSD::GetKey(const UInt_t mod) const {
  // get key given a basic block
if(mod>=kNModule)
  {AliError("GetKey: you asked for a non existing block"); return 99999;}
return mod;
}
//__________________________________________________________________________
UInt_t AliITSPlaneEffSSD::GetModFromKey(const UInt_t key) const {
  // get mod. from key
if(key>=kNModule)
  {AliError("GetModFromKey: you asked for a non existing key"); return 9999;}
return key;
}
//__________________________________________________________________________
Double_t AliITSPlaneEffSSD::LivePlaneEff(UInt_t key) const {
  // returns plane efficieny after adding the fraction of sensor which is bad
if(key>=kNModule)
  {AliError("LivePlaneEff: you asked for a non existing key");
   return -1.;}
Double_t leff=AliITSPlaneEff::LivePlaneEff(0); // this just for the Warning
leff=PlaneEff(key)+GetFracBad(key);
return leff>1?1:leff;
}
//____________________________________________________________________________
Double_t AliITSPlaneEffSSD::ErrLivePlaneEff(UInt_t key) const {
  // returns error on live plane efficiency
if(key>=kNModule)
  {AliError("ErrLivePlaneEff: you asked for a non existing key");
   return -1.;}
Int_t nf=fFound[key];
Double_t triedInLive=GetFracLive(key)*fTried[key];
Int_t nt=TMath::Max(nf,TMath::Nint(triedInLive));
return AliITSPlaneEff::ErrPlaneEff(nf,nt); // for the time being: to be checked
}
//_____________________________________________________________________________
Double_t AliITSPlaneEffSSD::GetFracLive(const UInt_t key) const {
  // returns the fraction of the sensor area which is OK (neither noisy nor dead)
  // As for now, it computes only the fraction of good strips / total strips. 
  // If this fraction is large, then the computation is a good approximation. 
  // In any case, it is a lower limit of the fraction of the live area. 
  // The next upgrades would be to add the fraction of area of superoposition 
  // between bad N-side strips and bad P-side strips.  
if(key>=kNModule)
  {AliError("GetFracLive: you asked for a non existing key");
   return -1.;}
AliInfo("GetFracLive: it computes only the fraction of working strips (N+P side) / total strips");
UInt_t bad=0;
GetBadInModule(key,bad);
Double_t live=bad;
live/=(kNChip*kNSide*kNStrip);
return 1.-live;
}
//_____________________________________________________________________________
void AliITSPlaneEffSSD::GetBadInModule(const UInt_t key, UInt_t& nrBadInMod) const {
  // returns the number of dead and noisy strips (sum of P and N sides).
nrBadInMod=0;
if(key>=kNModule)
  {AliError("GetBadInModule: you asked for a non existing key");
   return;}
    // Compute the number of bad (dead+noisy) pixel in a module
//
if(!fInitCDBCalled) 
  {AliError("GetBadInModule: CDB not inizialized: call InitCDB first");
   return;};
AliCDBManager* man = AliCDBManager::Instance();
// retrieve map of dead Pixel 
AliCDBEntry *cdbSSD = man->Get("ITS/Calib/BadChannelsSSD", fRunNumber);
TObjArray* ssdEntry;
if(cdbSSD) {
  ssdEntry = (TObjArray*)cdbSSD->GetObject();
  if(!ssdEntry) 
  {AliError("GetBadInChip: SSDEntry not found in CDB");
   return;}
} else {
  AliError("GetBadInChip: did not find Calib/BadChannelsSSD");
  return;
}
//
//UInt_t mod=GetModFromKey(key);
//
//AliITSBadChannelsSSD* badchannels=(AliITSBadChannelsSSD*) ssdEntry->At(mod);
// count the  number of bad channels on the p side
//nrBadInMod += (badchannels->GetBadPChannelsList()).GetSize();
// add the  number of bad channels on the s side
//nrBadInMod += (badchannels->GetBadNChannelsList()).GetSize();
return;
}
//_____________________________________________________________________________
Double_t AliITSPlaneEffSSD::GetFracBad(const UInt_t key) const {
  // returns 1-fractional live
if(key>=kNModule)
  {AliError("GetFracBad: you asked for a non existing key");
   return -1.;}
return 1.-GetFracLive(key);
}
//_____________________________________________________________________________
Bool_t AliITSPlaneEffSSD::WriteIntoCDB() const {
// write onto CDB
if(!fInitCDBCalled)
  {AliError("WriteIntoCDB: CDB not inizialized. Call InitCDB first");
   return kFALSE;}
// to be written properly: now only for debugging 
  AliCDBMetaData *md= new AliCDBMetaData(); // metaData describing the object
  md->SetObjectClassName("AliITSPlaneEff");
  md->SetResponsible("Giuseppe Eugenio Bruno");
  md->SetBeamPeriod(0);
  md->SetAliRootVersion("head 02/01/08"); //root version
  AliCDBId id("ITS/PlaneEff/PlaneEffSSD",0,AliCDBRunRange::Infinity()); 
  AliITSPlaneEffSSD eff; 
  eff=*this;
  Bool_t r=AliCDBManager::Instance()->GetDefaultStorage()->Put(&eff,id,md);
  delete md;
  return r;
}
//_____________________________________________________________________________
Bool_t AliITSPlaneEffSSD::ReadFromCDB() {
// read from CDB
if(!fInitCDBCalled)
  {AliError("ReadFromCDB: CDB not inizialized. Call InitCDB first");
   return kFALSE;}
AliCDBEntry *cdbEntry = AliCDBManager::Instance()->Get("ITS/PlaneEff/PlaneEffSSD",fRunNumber);
if(!cdbEntry) return kFALSE;
AliITSPlaneEffSSD* eff= (AliITSPlaneEffSSD*)cdbEntry->GetObject();
if(this==eff) return kFALSE;
if(fHis) CopyHistos(*eff); // If histos already exist then copy them to eff
eff->Copy(*this);          // copy everything (statistics and histos) from eff to this
return kTRUE;
}
//_____________________________________________________________________________
Bool_t AliITSPlaneEffSSD::AddFromCDB(AliCDBId *cdbId) {
// Read (actually add the statistics) plane eff. from Data Base
AliCDBEntry *cdbEntry=0;
if (!cdbId) {
  if(!fInitCDBCalled)
    {AliError("ReadFromCDB: CDB not inizialized. Call InitCDB first"); return kFALSE;}
  cdbEntry = AliCDBManager::Instance()->Get("ITS/PlaneEff/PlaneEffSSD",fRunNumber);
} else {
  cdbEntry = AliCDBManager::Instance()->Get(*cdbId);
}
if(!cdbEntry) return kFALSE;
AliITSPlaneEffSSD* eff= (AliITSPlaneEffSSD*)cdbEntry->GetObject();
*this+=*eff;
return kTRUE;
}
//_____________________________________________________________________________
UInt_t AliITSPlaneEffSSD::GetKeyFromDetLocCoord(Int_t ilay, Int_t idet,
                                                Float_t, Float_t) const {
// method to locate a basic block from Detector Local coordinate (to be used in tracking)
UInt_t key=999999;
if(ilay<4 || ilay>5)
  {AliError("GetKeyFromDetLocCoord: you asked for a non existing layer");
   return key;}
if(ilay==4 && (idet<0 || idet>747))
 {AliError("GetKeyFromDetLocCoord: you asked for a non existing detector");
   return key;}
if(ilay==5 && (idet<0 || idet>949))
 {AliError("GetKeyFromDetLocCoord: you asked for a non existing detector");
   return key;}

UInt_t mod=idet;
if(ilay==5) mod+=748;
key=GetKey(mod);
return key;
}
//__________________________________________________________
void AliITSPlaneEffSSD::InitHistos() {
  // for the moment let's create the histograms
  // module by  module
  TString histnameResX="HistResX_mod_",aux;
  TString histnameResZ="HistResZ_mod_";
  TString histnameResXZ="HistResXZ_mod_";
  TString histnameClusterType="HistClusterType_mod_";
  TString histnameTrackErrX="HistTrackErrX_mod_";
  TString histnameTrackErrZ="HistTrackErrZ_mod_";
  TString histnameClusErrX="HistClusErrX_mod_";
  TString histnameClusErrZ="HistClusErrZ_mod_";
//

  TH1::AddDirectory(kFALSE);

  fHisResX=new TH1F*[kNHisto];
  fHisResZ=new TH1F*[kNHisto];
  fHisResXZ=new TH2F*[kNHisto];
  fHisClusterSize=new TH2I*[kNHisto];
  fHisTrackErrX=new TH1F*[kNHisto]; 
  fHisTrackErrZ=new TH1F*[kNHisto]; 
  fHisClusErrX=new TH1F*[kNHisto]; 
  fHisClusErrZ=new TH1F*[kNHisto];

  for (Int_t nhist=0;nhist<kNHisto;nhist++){
    aux=histnameResX;
    aux+=nhist;
    fHisResX[nhist]=new TH1F("histname","histname",500,-0.10,0.10); // +- 1000 micron; 1 bin=4 micron
    fHisResX[nhist]->SetName(aux.Data());
    fHisResX[nhist]->SetTitle(aux.Data());

    aux=histnameResZ;
    aux+=nhist;
    fHisResZ[nhist]=new TH1F("histname","histname",750,-0.75,0.75); // +-5000 micron; 1 bin=20 micron
    fHisResZ[nhist]->SetName(aux.Data());
    fHisResZ[nhist]->SetTitle(aux.Data());

    aux=histnameResXZ;
    aux+=nhist;
    fHisResXZ[nhist]=new TH2F("histname","histname",40,-0.04,0.04,40,-0.32,0.32); // binning:
                                                                                   // 20 micron in x;
                                                                                   // 160 micron in z;
    fHisResXZ[nhist]->SetName(aux.Data());
    fHisResXZ[nhist]->SetTitle(aux.Data());

    aux=histnameClusterType;
    aux+=nhist;
    fHisClusterSize[nhist]=new TH2I("histname","histname",6,0.5,6.5,6,0.5,6.5);
    fHisClusterSize[nhist]->SetName(aux.Data());
    fHisClusterSize[nhist]->SetTitle(aux.Data());

    aux=histnameTrackErrX;
    aux+=nhist;
    fHisTrackErrX[nhist]=new TH1F("histname","histname",300,0.,0.24); // 0-2400 micron; 1 bin=8 micron
    fHisTrackErrX[nhist]->SetName(aux.Data());
    fHisTrackErrX[nhist]->SetTitle(aux.Data());

    aux=histnameTrackErrZ;
    aux+=nhist;
    fHisTrackErrZ[nhist]=new TH1F("histname","histname",300,0.,0.48); // 0-4800 micron; 1 bin=16 micron
    fHisTrackErrZ[nhist]->SetName(aux.Data());
    fHisTrackErrZ[nhist]->SetTitle(aux.Data());

    aux=histnameClusErrX;
    aux+=nhist;
    fHisClusErrX[nhist]=new TH1F("histname","histname",300,0.,0.24); //  0-2400 micron; 1 bin=8 micron
    fHisClusErrX[nhist]->SetName(aux.Data());
    fHisClusErrX[nhist]->SetTitle(aux.Data());

    aux=histnameClusErrZ;
    aux+=nhist;
    fHisClusErrZ[nhist]=new TH1F("histname","histname",200,0.,0.32); //  0-1600 micron; 1 bin=16 micron
    fHisClusErrZ[nhist]->SetName(aux.Data());
    fHisClusErrZ[nhist]->SetTitle(aux.Data());

  }

  TH1::AddDirectory(kTRUE);

return;
}
//__________________________________________________________
void AliITSPlaneEffSSD::DeleteHistos() {
// Delete histograms and remove them from memory 
  if(fHisResX) {
    for (Int_t i=0; i<kNHisto; i++ ) delete fHisResX[i];
    delete [] fHisResX; fHisResX=0;
  }
  if(fHisResZ) {
    for (Int_t i=0; i<kNHisto; i++ ) delete fHisResZ[i];
    delete [] fHisResZ; fHisResZ=0;
  }
  if(fHisResXZ) {
    for (Int_t i=0; i<kNHisto; i++ ) delete fHisResXZ[i];
    delete [] fHisResXZ; fHisResXZ=0;
  }
  if(fHisClusterSize) {
    for (Int_t i=0; i<kNHisto; i++ ) delete fHisClusterSize[i];
    delete [] fHisClusterSize; fHisClusterSize=0;
  }
  if(fHisTrackErrX) {
    for (Int_t i=0; i<kNHisto; i++ ) delete fHisTrackErrX[i];
    delete [] fHisTrackErrX; fHisTrackErrX=0;
  }
  if(fHisTrackErrZ) {
    for (Int_t i=0; i<kNHisto; i++ ) delete fHisTrackErrZ[i];
    delete [] fHisTrackErrZ; fHisTrackErrZ=0;
  }
  if(fHisClusErrX) {
    for (Int_t i=0; i<kNHisto; i++ ) delete fHisClusErrX[i];
    delete [] fHisClusErrX; fHisClusErrX=0;
  }
  if(fHisClusErrZ) {
    for (Int_t i=0; i<kNHisto; i++ ) delete fHisClusErrZ[i];
    delete [] fHisClusErrZ; fHisClusErrZ=0;
  }

return;
}
//__________________________________________________________
Bool_t AliITSPlaneEffSSD::FillHistos(UInt_t key, Bool_t found,
                                     Float_t *tr, Float_t *clu, Int_t *csize, Float_t*) {
// this method fill the histograms
// input: - key: unique key of the basic block
//        - found: Boolean to asses whether a cluster has been associated to the track or not
//        - tr[0],tr[1] local X and Z coordinates of the track prediction, respectively
//        - tr[2],tr[3] error on local X and Z coordinates of the track prediction, respectively
//        - clu[0],clu[1] local X and Z coordinates of the cluster associated to the track, respectively
//        - clu[2],clu[3] error on local X and Z coordinates of the cluster associated to the track, respectively
//        - csize[0][1] cluster size in X and Z, respectively
// output: kTRUE if filling was succesfull kFALSE otherwise
// side effects: updating of the histograms.
//
  if (!fHis) {
    AliWarning("FillHistos: histograms do not exist! Call SetCreateHistos(kTRUE) first");
    return kFALSE;
  }
  if(key>=kNModule)
    {AliWarning("FillHistos: you asked for a non existing key"); return kFALSE;}
  Int_t id=GetModFromKey(key);
  if(id>=kNHisto)
    {AliWarning("FillHistos: you want to fill a non-existing histos"); return kFALSE;}
  if(found) {
    Float_t resx=tr[0]-clu[0];
    Float_t resz=tr[1]-clu[1];
    fHisResX[id]->Fill(resx);
    fHisResZ[id]->Fill(resz);
    fHisResXZ[id]->Fill(resx,resz);
    fHisClusterSize[id]->Fill((Double_t)csize[0],(Double_t)csize[1]);
  }
  fHisTrackErrX[id]->Fill(tr[2]);
  fHisTrackErrZ[id]->Fill(tr[3]);
  fHisClusErrX[id]->Fill(clu[2]);
  fHisClusErrZ[id]->Fill(clu[3]);
  return kTRUE;
}
//__________________________________________________________
Bool_t AliITSPlaneEffSSD::WriteHistosToFile(TString filename, Option_t* option) {
  //
  // Saves the histograms into a tree and saves the trees into a file
  //
  if (!fHis) return kFALSE;
  if (filename.IsNull() || filename.IsWhitespace()) {
     AliWarning("WriteHistosToFile: null output filename!");
     return kFALSE;
  }

  TFile *hFile=new TFile(filename.Data(),option,
                         "The File containing the TREEs with ITS PlaneEff Histos");
  TTree *SSDTree=new TTree("SSDTree","Tree whith Residuals and Cluster Type distributions for SSD");
  TH1F *histZ,*histX;
  TH2F *histXZ;
  TH2I *histClusterType;
  TH1F *histTrErrZ,*histTrErrX;
  TH1F *histClErrZ,*histClErrX;

  histZ=new TH1F();
  histX=new TH1F();
  histXZ=new TH2F();
  histClusterType=new TH2I();
  histTrErrX=new TH1F();
  histTrErrZ=new TH1F();
  histClErrX=new TH1F();
  histClErrZ=new TH1F();

  SSDTree->Branch("histX","TH1F",&histX,128000,0);
  SSDTree->Branch("histZ","TH1F",&histZ,128000,0);
  SSDTree->Branch("histXZ","TH2F",&histXZ,128000,0);
  SSDTree->Branch("histClusterType","TH2I",&histClusterType,128000,0);
  SSDTree->Branch("histTrErrX","TH1F",&histTrErrX,128000,0);
  SSDTree->Branch("histTrErrZ","TH1F",&histTrErrZ,128000,0);
  SSDTree->Branch("histClErrX","TH1F",&histClErrX,128000,0);
  SSDTree->Branch("histClErrZ","TH1F",&histClErrZ,128000,0);

  for(Int_t j=0;j<kNHisto;j++){
    histX=fHisResX[j];
    histZ=fHisResZ[j];
    histXZ=fHisResXZ[j];
    histClusterType=fHisClusterSize[j];
    histTrErrX=fHisTrackErrX[j];
    histTrErrZ=fHisTrackErrZ[j];
    histClErrX=fHisClusErrX[j];
    histClErrZ=fHisClusErrZ[j];

    SSDTree->Fill();
  }
  hFile->Write();
  hFile->Close();
return kTRUE;
}
//__________________________________________________________
Bool_t AliITSPlaneEffSSD::ReadHistosFromFile(TString filename) {
  //
  // Read histograms from an already existing file
  //
  if (!fHis) return kFALSE;
  if (filename.IsNull() || filename.IsWhitespace()) {
     AliWarning("ReadHistosFromFile: incorrect output filename!");
     return kFALSE;
  }

  TH1F *h  = 0;
  TH2F *h2 = 0;
  TH2I *h2i= 0;

  TFile *file=TFile::Open(filename.Data(),"READONLY");

  if (!file || file->IsZombie()) {
    AliWarning(Form("Can't open %s !",filename.Data()));
    delete file;
    return kFALSE;
  }
  TTree *tree = (TTree*) file->Get("SSDTree");

  TBranch *histX = (TBranch*) tree->GetBranch("histX");
  TBranch *histZ = (TBranch*) tree->GetBranch("histZ");
  TBranch *histXZ = (TBranch*) tree->GetBranch("histXZ");
  TBranch *histClusterType = (TBranch*) tree->GetBranch("histClusterType");
  TBranch *histTrErrX = (TBranch*) tree->GetBranch("histTrErrX");
  TBranch *histTrErrZ = (TBranch*) tree->GetBranch("histTrErrZ");
  TBranch *histClErrX = (TBranch*) tree->GetBranch("histClErrX");
  TBranch *histClErrZ = (TBranch*) tree->GetBranch("histClErrZ");

  gROOT->cd();

  Int_t nevent = (Int_t)histX->GetEntries();
  if(nevent!=kNHisto)
    {AliWarning("ReadHistosFromFile: trying to read too many or too few histos!"); return kFALSE;}
  histX->SetAddress(&h);
  for(Int_t j=0;j<kNHisto;j++){
    histX->GetEntry(j);
    fHisResX[j]->Add(h);
  }

  nevent = (Int_t)histZ->GetEntries();
  if(nevent!=kNHisto)
    {AliWarning("ReadHistosFromFile: trying to read too many or too few histos!"); return kFALSE;}
  histZ->SetAddress(&h);
  for(Int_t j=0;j<kNHisto;j++){
    histZ->GetEntry(j);
    fHisResZ[j]->Add(h);
  }

  nevent = (Int_t)histXZ->GetEntries();
  if(nevent!=kNHisto)
    {AliWarning("ReadHistosFromFile: trying to read too many or too few histos!"); return kFALSE;}
  histXZ->SetAddress(&h2);
  for(Int_t j=0;j<kNHisto;j++){
    histXZ->GetEntry(j);
    fHisResXZ[j]->Add(h2);
  }

  nevent = (Int_t)histClusterType->GetEntries();
  if(nevent!=kNHisto)
    {AliWarning("ReadHistosFromFile: trying to read too many or too few histos!"); return kFALSE;}
  histClusterType->SetAddress(&h2i);
  for(Int_t j=0;j<kNHisto;j++){
    histClusterType->GetEntry(j);
    fHisClusterSize[j]->Add(h2i);
  }

  nevent = (Int_t)histTrErrX->GetEntries();
  if(nevent!=kNHisto)
    {AliWarning("ReadHistosFromFile: trying to read too many or too few histos!"); return kFALSE;}
  histTrErrX->SetAddress(&h);
  for(Int_t j=0;j<kNHisto;j++){
    histTrErrX->GetEntry(j);
    fHisTrackErrX[j]->Add(h);
  }

  nevent = (Int_t)histTrErrZ->GetEntries();
  if(nevent!=kNHisto)
    {AliWarning("ReadHistosFromFile: trying to read too many or too few histos!"); return kFALSE;}
  histTrErrZ->SetAddress(&h);
  for(Int_t j=0;j<kNHisto;j++){
    histTrErrZ->GetEntry(j);
    fHisTrackErrZ[j]->Add(h);
  }

  nevent = (Int_t)histClErrX->GetEntries();
  if(nevent!=kNHisto)
    {AliWarning("ReadHistosFromFile: trying to read too many or too few histos!"); return kFALSE;}
  histClErrX->SetAddress(&h);
  for(Int_t j=0;j<kNHisto;j++){
    //delete h; h=0;
    histClErrX->GetEntry(j);
    fHisClusErrX[j]->Add(h);
  }

  nevent = (Int_t)histClErrZ->GetEntries();
  if(nevent!=kNHisto)
    {AliWarning("ReadHistosFromFile: trying to read too many or too few histos!"); return kFALSE;}
  histClErrZ->SetAddress(&h);
  for(Int_t j=0;j<kNHisto;j++){
    //delete h; h=0; 
    histClErrZ->GetEntry(j);
    fHisClusErrZ[j]->Add(h);
  }

  delete h;   
  delete h2;  
  delete h2i; 

  if (file) {
    file->Close();
    delete file;
  }
return kTRUE;
}

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