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

///////////////////////////////////////////////////////////////////////////////
//                                                                           //
//  TPC calibration class for parameters which are saved per pad             //
//  Each AliTPCCalPad consists of 72 AliTPCCalROC-objects                    //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////

#include "AliTPCCalPad.h"
#include "AliTPCCalROC.h"
#include <TObjArray.h>
#include <TAxis.h>
#include <TGraph.h>
#include <TGraph2D.h>
#include <TH2F.h>
#include "TTreeStream.h"
#include "TFile.h"
#include "TKey.h"
#include <TFormula.h>
#include <TString.h>
#include <TObjString.h>
#include <iostream>
#include <AliLog.h>

//graphic includes
#include <TTree.h>
#include <TH1.h>
#include <TCanvas.h>
#include <TLegend.h>
#include <TCut.h>
#include <TVirtualPad.h>
#include "AliTPCPreprocessorOnline.h"
#include "AliTPCCalibViewer.h"
ClassImp(AliTPCCalPad)

//_____________________________________________________________________________
AliTPCCalPad::AliTPCCalPad():TNamed()
{
  //
  // AliTPCCalPad default constructor
  //

  for (Int_t isec = 0; isec < kNsec; isec++) {
    fROC[isec] = 0;
  }

}

//_____________________________________________________________________________
AliTPCCalPad::AliTPCCalPad(const Text_t *name, const Text_t *title)
                :TNamed(name,title)
{
  //
  // AliTPCCalPad constructor
  //
  for (Int_t isec = 0; isec < kNsec; isec++) {
    fROC[isec] = new AliTPCCalROC(isec);
  }
}


//_____________________________________________________________________________
AliTPCCalPad::AliTPCCalPad(const AliTPCCalPad &c):TNamed(c)
{
  //
  // AliTPCCalPad copy constructor
  //

  for (Int_t isec = 0; isec < kNsec; isec++) {
         fROC[isec] = 0;
     if (c.fROC[isec])
       fROC[isec] = new AliTPCCalROC(*(c.fROC[isec]));
  }
}

//_____________________________________________________________________________
AliTPCCalPad::AliTPCCalPad(TObjArray * array):TNamed(array->GetName(),array->GetName())
{
  //
  // AliTPCCalPad default constructor
  //

  for (Int_t isec = 0; isec < kNsec; isec++) {
    fROC[isec] = (AliTPCCalROC *)array->At(isec);
  }

}


///_____________________________________________________________________________
AliTPCCalPad::~AliTPCCalPad()
{
  //
  // AliTPCCalPad destructor
  //

  for (Int_t isec = 0; isec < kNsec; isec++) {
    if (fROC[isec]) {
      delete fROC[isec];
      fROC[isec] = 0;
    }
  }

}

//_____________________________________________________________________________
AliTPCCalPad &AliTPCCalPad::operator=(const AliTPCCalPad &c)
{
  //
  // Assignment operator
  //

  if (this != &c) ((AliTPCCalPad &) c).Copy(*this);
  return *this;

}

//_____________________________________________________________________________
void AliTPCCalPad::Copy(TObject &c) const
{
  //
  // Copy function
  //

  for (Int_t isec = 0; isec < kNsec; isec++) {
    if (fROC[isec]) {
      fROC[isec]->Copy(*((AliTPCCalPad &) c).fROC[isec]);
    }
  }
  TObject::Copy(c);
}


void AliTPCCalPad::SetCalROC(AliTPCCalROC* roc, Int_t sector){
   //
   // Set AliTPCCalROC copies values from 'roc'
   // if sector == -1 the sector specified in 'roc' is used
   // else sector specified in 'roc' is ignored and specified sector is filled
   //
   if (sector == -1) sector = roc->GetSector();
   if (!fROC[sector]) fROC[sector] = new AliTPCCalROC(sector);
   for (UInt_t ichannel = 0; ichannel < roc->GetNchannels(); ichannel++) 
      fROC[sector]->SetValue(ichannel, roc->GetValue(ichannel));
}

Bool_t  AliTPCCalPad::MedianFilter(Int_t deltaRow, Int_t deltaPad, AliTPCCalPad*outlierPad,  Bool_t doEdge){
  //
  // replace constent with median in the neigborhood
  //
  Bool_t isOK=kTRUE;
  for (Int_t isec = 0; isec < kNsec; isec++) {
    AliTPCCalROC *outlierROC=(outlierPad==NULL)?NULL:outlierPad->GetCalROC(isec);
    if (fROC[isec]){
      isOK&=fROC[isec]->MedianFilter(deltaRow,deltaPad,outlierROC,doEdge);
    }
  }
  return isOK;
}

Bool_t  AliTPCCalPad::LTMFilter(Int_t deltaRow, Int_t deltaPad, Float_t fraction, Int_t type, AliTPCCalPad*outlierPad,  Bool_t doEdge){
  //
  // replace constent with LTM statistic  in  neigborhood
  //
  Bool_t isOK=kTRUE;
  for (Int_t isec = 0; isec < kNsec; isec++) {
    AliTPCCalROC *outlierROC=(outlierPad==NULL)?NULL:outlierPad->GetCalROC(isec);
    if (fROC[isec]){
      isOK&=fROC[isec]->LTMFilter(deltaRow, deltaPad,fraction,type,outlierROC,doEdge);
    }
  }
  return isOK;
}

Bool_t  AliTPCCalPad::Convolute(Double_t sigmaPad, Double_t sigmaRow,  AliTPCCalPad*outlierPad, TF1 *fpad, TF1 *frow){
  //
  // replace constent with median in the neigborhood
  //
  Bool_t isOK=kTRUE;
  for (Int_t isec = 0; isec < kNsec; isec++) {
    AliTPCCalROC *outlierROC=(outlierPad==NULL)?NULL:outlierPad->GetCalROC(isec);
    if (fROC[isec]){
      isOK&=fROC[isec]->Convolute(sigmaPad,sigmaRow,outlierROC,fpad,frow);
    }
  }
  return isOK;
}


//_____________________________________________________________________________
void AliTPCCalPad::Add(Float_t c1)
{
    //
    // add constant c1 to all channels of all ROCs
    //

    for (Int_t isec = 0; isec < kNsec; isec++) {
	if (fROC[isec]){
	    fROC[isec]->Add(c1);
	}
    }
}

//_____________________________________________________________________________
void AliTPCCalPad::Multiply(Float_t c1)
{
  //
  // multiply each channel of all ROCs with c1
  //    
    for (Int_t isec = 0; isec < kNsec; isec++) {
	if (fROC[isec]){
	    fROC[isec]->Multiply(c1);
	}
    }
}

//_____________________________________________________________________________
void AliTPCCalPad::Add(const AliTPCCalPad * pad, Double_t c1)
{
  //
  // multiply AliTPCCalPad 'pad' by c1 and add each channel to the coresponing channel in all ROCs
  //  - pad by pad -
  //
    for (Int_t isec = 0; isec < kNsec; isec++) {
	if (fROC[isec] && pad->GetCalROC(isec)){
	    fROC[isec]->Add(pad->GetCalROC(isec),c1);
	}
    }
}

//_____________________________________________________________________________
void AliTPCCalPad::Multiply(const AliTPCCalPad * pad)
{
  //
  // multiply each channel of all ROCs with the coresponding channel of 'pad'
  //     - pad by pad -
  //
   for (Int_t isec = 0; isec < kNsec; isec++) {
	if (fROC[isec]){
	    fROC[isec]->Multiply(pad->GetCalROC(isec));
	}
    }
}

//_____________________________________________________________________________
void AliTPCCalPad::Divide(const AliTPCCalPad * pad)
{
  //
  // divide each channel of all ROCs by the coresponding channel of 'pad'
  //     - pad by pad -
  //    
    for (Int_t isec = 0; isec < kNsec; isec++) {
	if (fROC[isec]){
	    fROC[isec]->Divide(pad->GetCalROC(isec));
	}
    }
}

//_____________________________________________________________________________
void AliTPCCalPad::Reset()
{
  //
  // Reset all cal Rocs
  //
  for (Int_t isec = 0; isec < kNsec; isec++) {
    if (fROC[isec]){
      fROC[isec]->Reset();
    }
  }
}

//_____________________________________________________________________________
TGraph  *  AliTPCCalPad::MakeGraph(Int_t type, Float_t ratio){
  //
  //   type=1 - mean
  //        2 - median
  //        3 - LTM
  //
  Int_t npoints = 0;
  for (Int_t i=0;i<72;i++) if (fROC[i]) npoints++;
  TGraph * graph = new TGraph(npoints);
  npoints=0;   
  for (Int_t isec=0;isec<72;isec++){
    if (!fROC[isec]) continue;
    if (type==0)  graph->SetPoint(npoints,isec,fROC[isec]->GetMean());      
    if (type==1)  graph->SetPoint(npoints,isec,fROC[isec]->GetMedian());
    if (type==2)  graph->SetPoint(npoints,isec,fROC[isec]->GetLTM(0,ratio));    
    npoints++;
  }

  graph->GetXaxis()->SetTitle("Sector"); 
  if (type==0) {
    graph->GetYaxis()->SetTitle("Mean");   
    graph->SetMarkerStyle(22);    
  }
  if (type==1) {
    graph->GetYaxis()->SetTitle("Median");   
    graph->SetMarkerStyle(22);    
  }
  if (type==2) {
      graph->GetYaxis()->SetTitle(Form("Mean%f",ratio));      
      graph->SetMarkerStyle(24);
  }

  return graph;
}

//_____________________________________________________________________________
Double_t AliTPCCalPad::GetMeanRMS(Double_t &rms)
{
    //
    // Calculates mean and RMS of all ROCs
    //
    Double_t sum = 0, sum2 = 0, n=0, val=0;
    for (Int_t isec = 0; isec < kNsec; isec++) {
        AliTPCCalROC *calRoc = fROC[isec];
	if ( calRoc ){
	    for (UInt_t irow=0; irow<calRoc->GetNrows(); irow++){
		for (UInt_t ipad=0; ipad<calRoc->GetNPads(irow); ipad++){
		    val = calRoc->GetValue(irow,ipad);
		    sum+=val;
		    sum2+=val*val;
                    n++;
		}
	    }

	}
    }
    Double_t n1 = 1./n;
    Double_t mean = sum*n1;
    rms  = TMath::Sqrt(TMath::Abs(sum2*n1-mean*mean));
    return mean;
}


//_____________________________________________________________________________
Double_t AliTPCCalPad::GetMean(AliTPCCalPad* outlierPad)
{
    //
    // return mean of the mean of all ROCs
    //
    Double_t arr[kNsec];
    Int_t n=0;
    for (Int_t isec = 0; isec < kNsec; isec++) {
       AliTPCCalROC *calRoc = fROC[isec];
       if ( calRoc ){
          AliTPCCalROC* outlierROC = 0;
          if (outlierPad) outlierROC = outlierPad->GetCalROC(isec);
	       arr[n] = calRoc->GetMean(outlierROC);
          n++;
       }
    }
    return TMath::Mean(n,arr);
}

//_____________________________________________________________________________
Double_t AliTPCCalPad::GetRMS(AliTPCCalPad* outlierPad)
{
    //
    // return mean of the RMS of all ROCs
    //
    Double_t arr[kNsec];
    Int_t n=0;
    for (Int_t isec = 0; isec < kNsec; isec++) {
       AliTPCCalROC *calRoc = fROC[isec];
       if ( calRoc ){
          AliTPCCalROC* outlierROC = 0;
          if (outlierPad) outlierROC = outlierPad->GetCalROC(isec);
          arr[n] = calRoc->GetRMS(outlierROC);
          n++;
       }
    }
    return TMath::Mean(n,arr);
}

//_____________________________________________________________________________
Double_t AliTPCCalPad::GetMedian(AliTPCCalPad* outlierPad)
{
    //
    // return mean of the median of all ROCs
    //
    Double_t arr[kNsec];
    Int_t n=0;
    for (Int_t isec = 0; isec < kNsec; isec++) {
       AliTPCCalROC *calRoc = fROC[isec];
       if ( calRoc ){
          AliTPCCalROC* outlierROC = 0;
          if (outlierPad) outlierROC = outlierPad->GetCalROC(isec);
          arr[n] = calRoc->GetMedian(outlierROC);
          n++;
       }
    }
    return TMath::Mean(n,arr);
}

//_____________________________________________________________________________
Double_t AliTPCCalPad::GetLTM(Double_t *sigma, Double_t fraction, AliTPCCalPad* outlierPad)
{
    //
    // return mean of the LTM and sigma of all ROCs
    //
    Double_t arrm[kNsec];
    Double_t arrs[kNsec];
    Double_t *sTemp=0x0;
    Int_t n=0;

    for (Int_t isec = 0; isec < kNsec; isec++) {
        AliTPCCalROC *calRoc = fROC[isec];
	if ( calRoc ){
	    if ( sigma ) sTemp=arrs+n;
       AliTPCCalROC* outlierROC = 0;
       if (outlierPad) outlierROC = outlierPad->GetCalROC(isec);
	    arrm[n] = calRoc->GetLTM(sTemp,fraction, outlierROC);
            n++;
	}
    }
    if ( sigma ) *sigma = TMath::Mean(n,arrs);
    return TMath::Mean(n,arrm);
}

//_____________________________________________________________________________
TH1F * AliTPCCalPad::MakeHisto1D(Float_t min, Float_t max,Int_t type, Int_t side){
  //
  // make 1D histo
  // type -1 = user defined range
  //       0 = nsigma cut nsigma=min
  //
  if (type>=0){
    if (type==0){
      // nsigma range
      Float_t mean  = GetMean();
      Float_t sigma = GetRMS();
      Float_t nsigma = TMath::Abs(min);
      min = mean-nsigma*sigma;
      max = mean+nsigma*sigma;
    }
    if (type==1){
      // fixed range
      Float_t mean   = GetMedian();
      Float_t  delta = min;
      min = mean-delta;
      max = mean+delta;
    }
    if (type==2){
      //
      // LTM mean +- nsigma
      //
      Double_t sigma;
      Float_t mean  = GetLTM(&sigma,max);
      sigma*=min;
      min = mean-sigma;
      max = mean+sigma;
    }
  }
  TString name=Form("%s Pad 1D",GetTitle());
  TH1F * his = new TH1F(name.Data(),name.Data(),100, min,max);
    for (Int_t isec = 0; isec < kNsec; isec++) {
      if (side==1 && isec%36>18) continue;
      if (side==-1 && isec%36<18) continue;
	if (fROC[isec]){
	    for (UInt_t irow=0; irow<fROC[isec]->GetNrows(); irow++){
		UInt_t npads = (Int_t)fROC[isec]->GetNPads(irow);
		for (UInt_t ipad=0; ipad<npads; ipad++){
		    his->Fill(fROC[isec]->GetValue(irow,ipad));
		}
	    }
	}
    }
  return his;
}

//_____________________________________________________________________________
TH2F *AliTPCCalPad::MakeHisto2D(Int_t side){
  //
  // Make 2D graph
  // side  -  specify the side A = 0 C = 1
  // type  -  used types of determination of boundaries in z
  //
  Float_t kEpsilon = 0.000000000001;
  TH2F * his = new TH2F(GetName(), GetName(), 250,-250,250,250,-250,250);
  AliTPCROC * roc  = AliTPCROC::Instance(); 
  for (Int_t isec=0; isec<72; isec++){
    if (side==0 && isec%36>=18) continue;
    if (side>0 && isec%36<18) continue;
    if (fROC[isec]){
      AliTPCCalROC * calRoc = fROC[isec];
      for (UInt_t irow=0; irow<calRoc->GetNrows(); irow++)
	for (UInt_t ipad=0; ipad<calRoc->GetNPads(irow); ipad++)
	  if (TMath::Abs(calRoc->GetValue(irow,ipad))>kEpsilon){
	    Float_t xyz[3];
	    roc->GetPositionGlobal(isec,irow,ipad,xyz);
	    Int_t binx = 1+TMath::Nint((xyz[0]+250.)*0.5);
	    Int_t biny = 1+TMath::Nint((xyz[1]+250.)*0.5);
	    Float_t value = calRoc->GetValue(irow,ipad);	    
	    his->SetBinContent(binx,biny,value);
	  }
    }
  }
  his->SetXTitle("x (cm)");
  his->SetYTitle("y (cm)");
  return his;
}


AliTPCCalPad* AliTPCCalPad::LocalFit(const char* padName, Int_t rowRadius, Int_t padRadius, AliTPCCalPad* PadOutliers, Bool_t robust, Double_t chi2Threshold, Double_t robustFraction, Bool_t printCurrentSector) const {
   //
   // Loops over all AliTPCCalROCs and performs a localFit in each ROC
   // AliTPCCalPad with fit-data is returned
   // rowRadius and padRadius specifies a window around a given pad in one sector. 
   // The data of this window are fitted with a parabolic function. 
   // This function is evaluated at the pad's position.
   // At the edges the window is shifted, so that the specified pad is not anymore in the center of the window. 
   // rowRadius  -  radius - rows to be used for smoothing
   // padradius  -  radius - pads to be used for smoothing
   // ROCoutlier -  map of outliers - pads not to be used for local smoothing
   // robust     -  robust method of fitting  - (much slower)
   // chi2Threshold: Threshold for chi2 when EvalRobust is called
   // robustFraction: Fraction of data that will be used in EvalRobust
   //
   //
   AliTPCCalPad* pad = new AliTPCCalPad(padName, padName);
   for (Int_t isec = 0; isec < 72; isec++){
      if (printCurrentSector) std::cout << "LocalFit in sector " << isec << "\r" << std::flush;
      if (PadOutliers)
         pad->SetCalROC(GetCalROC(isec)->LocalFit(rowRadius, padRadius, PadOutliers->GetCalROC(isec), robust, chi2Threshold, robustFraction));
      else 
         pad->SetCalROC(GetCalROC(isec)->LocalFit(rowRadius, padRadius, 0, robust, chi2Threshold, robustFraction));
   }
   return pad;
}


AliTPCCalPad* AliTPCCalPad::GlobalFit(const char* padName, AliTPCCalPad* PadOutliers, Bool_t robust, Int_t fitType, Double_t chi2Threshold, Double_t robustFraction, Double_t err, TObjArray *fitParArr, TObjArray *fitCovArr){
   //
   // Loops over all AliTPCCalROCs and performs a globalFit in each ROC
   // AliTPCCalPad with fit-data is returned
   // chi2Threshold: Threshold for chi2 when EvalRobust is called
   // robustFraction: Fraction of data that will be used in EvalRobust
   // chi2Threshold: Threshold for chi2 when EvalRobust is called
   // robustFraction: Fraction of data that will be used in EvalRobust
   // err: error of the data points
   // if fitParArr and/or fitCovArr is given, write fitParameters and/or covariance Matrices into the array
   //
   AliTPCCalPad* pad = new AliTPCCalPad(padName, padName);
   TVectorD fitParam(0);
   TMatrixD covMatrix(0,0);
   Float_t chi2 = 0;
   for (Int_t isec = 0; isec < 72; isec++){
      if (PadOutliers)
         GetCalROC(isec)->GlobalFit(PadOutliers->GetCalROC(isec), robust, fitParam, covMatrix, chi2, fitType, chi2Threshold, robustFraction, err);
      else 
         GetCalROC(isec)->GlobalFit(0, robust, fitParam, covMatrix, chi2, fitType, chi2Threshold, robustFraction, err);

      AliTPCCalROC *roc=AliTPCCalROC::CreateGlobalFitCalROC(fitParam, isec);
      pad->SetCalROC(roc);
      delete roc;
      if ( fitParArr ) fitParArr->AddAtAndExpand(new TVectorD(fitParam), isec);
      if ( fitCovArr ) fitCovArr->AddAtAndExpand(new TMatrixD(covMatrix), isec);
   }
   return pad;
}
//_____________________________________________________________________________
TObjArray* AliTPCCalPad::CreateFormulaArray(const char *fitFormula)
{
  //
  // create an array of TFormulas for the each parameter of the fit function
  //

  // split fit string in single parameters
  // find dimension of the fit:
  TString fitString(fitFormula);
  fitString.ReplaceAll("++","#");
  fitString.ReplaceAll(" ","");
  TObjArray *arrFitParams = fitString.Tokenize("#");
  Int_t ndim = arrFitParams->GetEntries();
  //create array of TFormulas to evaluate the parameters
  TObjArray *arrFitFormulas = new TObjArray(ndim);
  arrFitFormulas->SetOwner(kTRUE);
  for (Int_t idim=0;idim<ndim;++idim){
    TString s=((TObjString*)arrFitParams->At(idim))->GetString();
    s.ReplaceAll("gx","[0]");
    s.ReplaceAll("gy","[1]");
    s.ReplaceAll("lx","[2]");
    s.ReplaceAll("ly","[3]");
    s.ReplaceAll("sector","[4]");
    arrFitFormulas->AddAt(new TFormula(Form("param%02d",idim),s.Data()),idim);
  }
  delete arrFitParams;
  
  return arrFitFormulas;
}
//_____________________________________________________________________________
void AliTPCCalPad::EvalFormulaArray(const TObjArray &arrFitFormulas, TVectorD &results,
                                    const Int_t sec, const Int_t row, const Int_t pad)
{
  //
  // evaluate the fit formulas
  //
  Int_t ndim=arrFitFormulas.GetEntries();
  results.ResizeTo(ndim);
  
  AliTPCROC* tpcROCinstance = AliTPCROC::Instance();  // to calculate the pad's position
  Float_t localXYZ[3];
  Float_t globalXYZ[3];
  tpcROCinstance->GetPositionLocal(sec, row, pad, localXYZ);
  tpcROCinstance->GetPositionGlobal(sec, row, pad, globalXYZ);
  //calculate parameter values
  for (Int_t idim=0;idim<ndim;++idim){
    TFormula *f=(TFormula*)arrFitFormulas.At(idim);
    f->SetParameters(globalXYZ[0],globalXYZ[1],localXYZ[0],localXYZ[1],sec);
    results[idim]=f->Eval(0);
  }
}
//_____________________________________________________________________________
void AliTPCCalPad::GlobalSidesFit(const AliTPCCalPad* PadOutliers, const char* fitFormula, TVectorD &fitParamSideA, TVectorD &fitParamSideC,TMatrixD &covMatrixSideA, TMatrixD &covMatrixSideC, Float_t & chi2SideA, Float_t & chi2SideC, AliTPCCalPad *pointError, Bool_t robust, Double_t robustFraction){
  //
  // Performs a fit on both sides.
  // Valid information for the fitFormula are the variables
  // - gx, gy, lx ,ly: meaning global x, global y, local x, local y value of the padName
  // - sector:         the sector number.
  //  eg. a formula might look 'gy' or '(sector<36) ++ gy' or 'gx ++ gy' or 'gx ++ gy ++ lx ++ lx^2' and so on
  //
  // PadOutliers - pads with value !=0 are not used in fitting procedure
  // chi2Threshold: Threshold for chi2 when EvalRobust is called
  // robustFraction: Fraction of data that will be used in EvalRobust
  //

  TObjArray* arrFitFormulas=CreateFormulaArray(fitFormula);
  Int_t ndim = arrFitFormulas->GetEntries();
  //resize output data arrays
  fitParamSideA.ResizeTo(ndim+1);
  fitParamSideC.ResizeTo(ndim+1);
  covMatrixSideA.ResizeTo(ndim+1,ndim+1);
  covMatrixSideC.ResizeTo(ndim+1,ndim+1);
  // create linear fitter for A- and C- Side
  TLinearFitter* fitterGA = new TLinearFitter(ndim+1,Form("hyp%d",ndim));
  TLinearFitter* fitterGC = new TLinearFitter(ndim+1,Form("hyp%d",ndim));
  fitterGA->StoreData(kTRUE);
  fitterGC->StoreData(kTRUE);
  //parameter values
  TVectorD parValues(ndim);

  AliTPCCalROC *rocErr=0x0;
  
  for (UInt_t isec = 0; isec<kNsec; ++isec){
    AliTPCCalROC *rocOut=PadOutliers->GetCalROC(isec);
    AliTPCCalROC *rocData=GetCalROC(isec);
    if (pointError) rocErr=pointError->GetCalROC(isec);
    if (!rocData) continue;
    for (UInt_t irow = 0; irow < GetCalROC(isec)->GetNrows(); irow++) {
      for (UInt_t ipad = 0; ipad < GetCalROC(isec)->GetNPads(irow); ipad++) {
        //check for outliers
        if (rocOut && rocOut->GetValue(irow,ipad)) continue;
        //calculate parameter values
        EvalFormulaArray(*arrFitFormulas,parValues,isec,irow,ipad);
        //get value
        Float_t value=rocData->GetValue(irow,ipad);
        //point error
        Int_t err=1;
        if (rocErr) {
          err=TMath::Nint(rocErr->GetValue(irow,ipad));
          if (err==0) err=1;
        }
        //add points to the fitters
        if (isec/18%2==0){
          fitterGA->AddPoint(parValues.GetMatrixArray(),value,err);
        }else{
          fitterGC->AddPoint(parValues.GetMatrixArray(),value,err);
        }
      }
    }
  }
  if (robust){
    fitterGA->EvalRobust(robustFraction);
    fitterGC->EvalRobust(robustFraction);
  } else {
    fitterGA->Eval();
    fitterGC->Eval();
  }
  chi2SideA=fitterGA->GetChisquare()/(fitterGA->GetNpoints()-(ndim+1));
  chi2SideC=fitterGC->GetChisquare()/(fitterGC->GetNpoints()-(ndim+1));
  fitterGA->GetParameters(fitParamSideA);
  fitterGC->GetParameters(fitParamSideC);
  fitterGA->GetCovarianceMatrix(covMatrixSideA);
  fitterGC->GetCovarianceMatrix(covMatrixSideC);
  
  delete arrFitFormulas;
  delete fitterGA;
  delete fitterGC;
  
}
//
AliTPCCalPad *AliTPCCalPad::CreateCalPadFit(const char* fitFormula, const TVectorD &fitParamSideA, const TVectorD &fitParamSideC)
{
  //
  //
  //
  TObjArray *arrFitFormulas=CreateFormulaArray(fitFormula);
  Int_t ndim = arrFitFormulas->GetEntries();
  //check if dimension of fit formula and fit parameters agree
  if (ndim!=fitParamSideA.GetNrows()||ndim!=fitParamSideC.GetNrows()){
    printf("AliTPCCalPad::CreateCalPadFit: Dimensions of fit formula and fit Parameters does not match!");
    return 0;
  }
  //create cal pad
  AliTPCCalPad *pad=new AliTPCCalPad("fitResultPad",Form("Fit result: %s",fitFormula));
  //fill cal pad with fit results if requested
  for (UInt_t isec = 0; isec<kNsec; ++isec){
    AliTPCCalROC *roc=pad->GetCalROC(isec);
    for (UInt_t irow = 0; irow < roc->GetNrows(); irow++) {
      for (UInt_t ipad = 0; ipad < roc->GetNPads(irow); ipad++) {
        const TVectorD *fitPar=0;
        TVectorD fitResArray;
        if (isec/18%2==0){
          fitPar=&fitParamSideA;
        }else{
          fitPar=&fitParamSideC;
        }
        EvalFormulaArray(*arrFitFormulas,fitResArray, isec, irow, ipad);
        for (Int_t idim=0;idim<ndim;++idim)
          fitResArray(idim)*=(*fitPar)(idim);
        roc->SetValue(irow,ipad,fitResArray.Sum());
      }
    }
  }
  delete arrFitFormulas;
  return pad;
}



TCanvas * AliTPCCalPad::MakeReportPadSector(TTree *chain, const char* varName, const char*varTitle, const char *axisTitle, Float_t min, Float_t max, const char *cutUser){
  //
  // Make a report - cal pads per sector
  // mean valeus per sector and local X
  //
  TH1* his=0; 
  TLegend *legend = 0;
  TCanvas *canvas = new TCanvas(Form("Sector: %s",varTitle),Form("Sector: %s",varTitle),1500,1100);

  canvas->Divide(2);
  chain->SetAlias("lX","lx.fElements"); 
  //
  canvas->cd(1);
  TString strDraw=varName;
  strDraw+=":lX";
  legend = new TLegend(0.5,0.50,0.9,0.9, Form("%s TPC A side", varTitle));
  for (Int_t isec=-1; isec<18; isec+=1){
    TCut cutSec=Form("sector%%36==%d",isec);
    cutSec+=cutUser;
    if (isec==-1) cutSec="sector%36<18";
    chain->SetMarkerColor(1+(isec+2)%5);
    chain->SetLineColor(1+(isec+2)%5);
    chain->SetMarkerStyle(25+(isec+2)%4);
    //
    chain->Draw(strDraw.Data(),cutSec,"profgoff");
    his=(TH1*)chain->GetHistogram()->Clone();
    delete chain->GetHistogram();
    his->SetMaximum(max);
    his->SetMinimum(min);
    his->GetXaxis()->SetTitle("R (cm)");
    his->GetYaxis()->SetTitle(axisTitle);
    his->SetTitle(Form("%s- sector %d",varTitle, isec));
    his->SetName(Form("%s- sector %d",varTitle, isec));
    if (isec==-1) his->SetTitle(Form("%s A side",varTitle));
    if (isec==-1) his->Draw();
    his->Draw("same");
    legend->AddEntry(his);
  }
  legend->Draw();
  canvas->cd(2);
  //
  legend = new TLegend(0.5,0.50,0.9,0.9, Form("%s TPC C side", varTitle));
  for (Int_t isec=-1; isec<18; isec+=1){
    TCut cutSec=Form("(sector+18)%%36==%d",isec);
    cutSec+=cutUser;
    if (isec==-1) cutSec="sector%36>18";
    chain->SetMarkerColor(1+(isec+2)%5);
    chain->SetLineColor(1+(isec+2)%5);
    chain->SetMarkerStyle(25+isec%4);
    //
    chain->Draw(strDraw.Data(),cutSec,"profgoff");
    his=(TH1*)chain->GetHistogram()->Clone();
    delete chain->GetHistogram();
    his->SetMaximum(max);
    his->SetMinimum(min);
    his->GetXaxis()->SetTitle("R (cm)");
    his->GetYaxis()->SetTitle(axisTitle);
    his->SetTitle(Form("%s- sector %d",varTitle,isec));
    his->SetName(Form("%s- sector %d",varTitle,isec));
    if (isec==-1) his->SetTitle(Form("%s C side",varTitle));
    if (isec==-1) his->Draw();
    his->Draw("same");
    legend->AddEntry(his);
  }
  legend->Draw();
  //
  //
  return canvas;
}


TCanvas * AliTPCCalPad::MakeReportPadSector2D(TTree *chain, const char* varName, const char*varTitle, const char *axisTitle, Float_t min, Float_t max, const char *cutUser){
  //
  // Make a report - cal pads per sector
  // 2D view
  // Input tree should be created using AliPreprocesorOnline before
  // 
  TH1* his=0; 
  TCanvas *canvas = new TCanvas(Form("%s2D",varTitle),Form("%s2D",varTitle),1500,1100);
  canvas->Divide(2);
  //
  TString strDraw=varName;
  strDraw+=":gy.fElements:gx.fElements>>his(250,-250,250,250,-250,250)";
  //
  TVirtualPad * pad=0;
  pad=canvas->cd(1);
  pad->SetMargin(0.15,0.15,0.15,0.15);
  TCut cut=cutUser;
  chain->Draw(strDraw.Data(),"sector%36<18"+cut,"profgoffcolz2");
  his=(TH1*)chain->GetHistogram()->Clone();
  delete chain->GetHistogram();
  his->SetMaximum(max);
  his->SetMinimum(min);
  his->GetXaxis()->SetTitle("x (cm)");
  his->GetYaxis()->SetTitle("y (cm)");
  his->GetZaxis()->SetTitle(axisTitle);
  his->SetTitle(Form("%s A side",varTitle));
  his->SetName(Form("%s A side",varTitle));
  his->Draw("colz2");
  //
  pad=canvas->cd(2);
  pad->SetMargin(0.15,0.15,0.15,0.15);

  chain->Draw(strDraw.Data(),"sector%36>=18"+cut,"profgoffcolz2");
  his=(TH1*)chain->GetHistogram()->Clone();
  delete chain->GetHistogram();
  his->SetMaximum(max);
  his->SetMinimum(min);
  his->GetXaxis()->SetTitle("x (cm)");
  his->GetYaxis()->SetTitle("y (cm)");
  his->GetZaxis()->SetTitle(axisTitle);
  his->SetTitle(Form("%s C side",varTitle));
  his->SetName(Form("%s C side",varTitle));
  his->Draw("colz2");
  //
  //
  return canvas;
}

void  AliTPCCalPad::Draw(Option_t* option){
  // 
  // Draw function - standard 2D view
  //
  TH1* his=0; 
  TCanvas *canvas = new TCanvas(Form("%s2D",GetTitle()),Form("%s2D",GetTitle()),900,900);
  canvas->Divide(2,2);
  //
  //
  TVirtualPad * pad=0;
  pad=canvas->cd(1);
  pad->SetMargin(0.15,0.15,0.15,0.15);
  his=MakeHisto2D(0);
  his->GetXaxis()->SetTitle("x (cm)");
  his->GetYaxis()->SetTitle("y (cm)");
  his->GetZaxis()->SetTitle(GetTitle());
  his->SetTitle(Form("%s A side",GetTitle()));
  his->SetName(Form("%s A side",GetTitle()));
  his->Draw(option);
  //
  pad=canvas->cd(2);
  pad->SetMargin(0.15,0.15,0.15,0.15);
  his=MakeHisto2D(1);
  his->GetXaxis()->SetTitle("x (cm)");
  his->GetYaxis()->SetTitle("y (cm)");
  his->GetZaxis()->SetTitle(GetTitle());
  his->SetTitle(Form("%s C side",GetTitle()));
  his->SetName(Form("%s C side",GetTitle()));
  his->Draw(option);
  //
  pad=canvas->cd(3);
  pad->SetMargin(0.15,0.15,0.15,0.15);
  his=MakeHisto1D(-8,8,0,1);
  his->GetXaxis()->SetTitle(GetTitle());
  his->SetTitle(Form("%s A side",GetTitle()));
  his->SetName(Form("%s A side",GetTitle()));
  his->Draw("err");
  //
  pad=canvas->cd(4);
  pad->SetMargin(0.15,0.15,0.15,0.15);
  his=MakeHisto1D(-8,8,0,-1);
  his->GetXaxis()->SetTitle(GetTitle());
  his->SetTitle(Form("%s C side",GetTitle()));
  his->SetName(Form("%s C side",GetTitle()));
  his->Draw("err");


}


AliTPCCalPad * AliTPCCalPad::MakeCalPadFromHistoRPHI(TH2 * hisA, TH2* hisC){
  //
  // Make cal pad from r-phi histograms
  //
  AliTPCROC *proc= AliTPCROC::Instance();
  AliTPCCalPad *calPad = new AliTPCCalPad("his","his");
  Float_t globalPos[3];
  for (Int_t isec=0; isec<72; isec++){
    AliTPCCalROC* calRoc  = calPad->GetCalROC(isec);
    TH2 * his = ((isec%36<18) ? hisA:hisC);
    for (UInt_t irow=0; irow<calRoc->GetNrows(); irow+=1){
      Int_t jrow=irow;
      if (isec>=36) jrow+=63;
      for (UInt_t ipad=0;ipad<proc->GetNPads(isec,irow);ipad+=1){
        proc->GetPositionGlobal(isec,irow,ipad, globalPos);
        Double_t phi=TMath::ATan2(globalPos[1],globalPos[0]);
        //if (phi<0) phi+=TMath::Pi()*2;
        Int_t bin=his->FindBin(phi,jrow);
        Float_t value= his->GetBinContent(bin);
	calRoc->SetValue(irow,ipad,value);
      }
    }
  }
  return calPad;
}

AliTPCCalPad *AliTPCCalPad::MakePadFromTree(TTree * treePad, const char *query, const char* name, Bool_t doFast){
  //
  // make cal pad from the tree 
  //
  if (!treePad){
    ::Error("AliTPCCalPad::MakePadFromTree(TTree * treePad, const char *query, const char* name)","Input tree is missing");
    return 0;
  }
  if (treePad->GetEntries()!=kNsec) return 0;
  AliTPCCalPad * calPad= new AliTPCCalPad(name,name);
  if (name) calPad->SetName(name);
  if (!doFast){
    for (Int_t iSec=0; iSec<72; iSec++){
      AliTPCCalROC* calROC  = calPad->GetCalROC(iSec);
      UInt_t nchannels = (UInt_t)treePad->Draw(query,"1","goff",1,iSec);
      if (nchannels!=calROC->GetNchannels()) {
	::Error("AliTPCCalPad::MakePad",TString::Format("%s\t:Wrong query sector\t%d\t%d",treePad->GetName(),iSec,nchannels).Data());
	break;
      }
      for (UInt_t index=0; index<nchannels; index++) calROC->SetValue(index,treePad->GetV1()[index]);
    }
  }else{    
    UInt_t nchannelsTree = (UInt_t)treePad->Draw(query,"1","goff");
    UInt_t nchannelsAll=0;
    for (Int_t iSec=0; iSec<72; iSec++){
      AliTPCCalROC* calROC  = calPad->GetCalROC(iSec);
      UInt_t nchannels=calROC->GetNchannels();
      for (UInt_t index=0; index<nchannels; index++) {
	if (nchannelsAll<=nchannelsTree)calROC->SetValue(index,treePad->GetV1()[nchannelsAll]);
	nchannelsAll++;
      }
    }
    if (nchannelsAll>nchannelsTree){
      ::Error("AliTPCCalPad::MakePad",TString::Format("%s\t:Wrong query: cout mismatch\t%d\t%d",query, nchannelsAll,nchannelsTree).Data());
    }
  }
  return calPad;
}

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