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


///////////////////////////////////////////////////////////////////////////////
//                                                                           //
//     Calibration base class for a single ROC                               //
//     Contains one float value per pad                                      //
//     mapping of the pads taken form AliTPCROC                              //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////

//
// ROOT includes 
//
#include "TMath.h"
#include "TClass.h"
#include "TFile.h"
#include "TH1F.h"
#include "TH2F.h"
#include "TArrayI.h"

//
//
#include "AliTPCCalROC.h"
#include "AliMathBase.h"

#include "TRandom3.h"      // only needed by the AliTPCCalROCTest() method

ClassImp(AliTPCCalROC)


//_____________________________________________________________________________
AliTPCCalROC::AliTPCCalROC()
             :TNamed(),
	      fSector(0),
	      fNChannels(0),
	      fNRows(0),
	      fkIndexes(0),
	      fData(0)
{
  //
  // Default constructor
  //

}

//_____________________________________________________________________________
AliTPCCalROC::AliTPCCalROC(UInt_t  sector)
             :TNamed(),
	      fSector(0),
	      fNChannels(0),
	      fNRows(0),
	      fkIndexes(0),
	      fData(0)
{
  //
  // Constructor that initializes a given sector
  //
  fSector = sector;
  fNChannels    =  AliTPCROC::Instance()->GetNChannels(fSector);
  fNRows        =  AliTPCROC::Instance()->GetNRows(fSector);
  fkIndexes      =  AliTPCROC::Instance()->GetRowIndexes(fSector);
  fData = new Float_t[fNChannels];
  Reset();
//   for (UInt_t  idata = 0; idata< fNChannels; idata++) fData[idata] = 0.;
}

//_____________________________________________________________________________
AliTPCCalROC::AliTPCCalROC(const AliTPCCalROC &c)
             :TNamed(c),
	      fSector(0),
	      fNChannels(0),
	      fNRows(0),
	      fkIndexes(0),
	      fData(0)
{
  //
  // AliTPCCalROC copy constructor
  //
  fSector = c.fSector;
  fNChannels    =  AliTPCROC::Instance()->GetNChannels(fSector);
  fNRows        =  AliTPCROC::Instance()->GetNRows(fSector);
  fkIndexes      =  AliTPCROC::Instance()->GetRowIndexes(fSector);
  //
  fData   = new Float_t[fNChannels];
  for (UInt_t  idata = 0; idata< fNChannels; idata++) fData[idata] = c.fData[idata];
}
//____________________________________________________________________________
AliTPCCalROC & AliTPCCalROC::operator =(const AliTPCCalROC & param)
{
  //
  // assignment operator - dummy
  //
  if (this == &param) return (*this);
  fSector       = param.fSector;
  fNChannels    =  AliTPCROC::Instance()->GetNChannels(fSector);
  fNRows        =  AliTPCROC::Instance()->GetNRows(fSector);
  fkIndexes     =  AliTPCROC::Instance()->GetRowIndexes(fSector);
  //
  if (fData) delete [] fData;
  fData         = new Float_t[fNChannels];
  for (UInt_t  idata = 0; idata< fNChannels; idata++) fData[idata] = param.fData[idata];
  return (*this);
}


//_____________________________________________________________________________
AliTPCCalROC::~AliTPCCalROC()
{
  //
  // AliTPCCalROC destructor
  //
  if (fData) {
    delete [] fData;
    fData = 0;
  }
}



void AliTPCCalROC::Streamer(TBuffer &R__b)
{
   //
   // Stream an object of class AliTPCCalROC.
   //
   if (R__b.IsReading()) {
      AliTPCCalROC::Class()->ReadBuffer(R__b, this);
      fkIndexes =  AliTPCROC::Instance()->GetRowIndexes(fSector);
   } else {
      AliTPCCalROC::Class()->WriteBuffer(R__b,this);
   }
}


//

Bool_t AliTPCCalROC::MedianFilter(Int_t deltaRow, Int_t deltaPad, AliTPCCalROC* outlierROC,  Bool_t doEdge){
  //){
  //
  //   Modify content of the object - raplace value by median in neighorhood
  //
  Float_t *newBuffer=new Float_t[fNChannels] ;
  Double_t *cacheBuffer=new Double_t[fNChannels];
  //
  for (Int_t iRow=0; iRow< Int_t(fNRows); iRow++){
    Int_t nPads=GetNPads(iRow); // number of rows in current row
    for (Int_t iPad=0; iPad<nPads; iPad++){
      Double_t value=GetValue(iRow,iPad);
      Int_t counter=0;
      //
      for (Int_t dRow=-deltaRow; dRow<=deltaRow; dRow++){
	Int_t jRow=iRow+dRow;  //take the row - mirror if ouside of range
	Float_t sign0=1.;
	if (jRow<0) sign0=-1.;
	if (UInt_t(jRow)>=fNRows) sign0=-1.;	
	Int_t jPads= GetNPads(iRow+sign0*dRow);
	Int_t offset=(nPads-jPads)/2.;
	//
	for (Int_t dPad=-deltaPad; dPad<=deltaPad; dPad++){
	  Float_t sign=sign0;
	  Int_t jPad=iPad+dPad+offset;  //take the pad - mirror if ouside of range
	  Int_t kRow=jRow;
	  if (jPad<0) sign=-1;
	  if (jPad>=jPads) sign=-1;
	  if (sign<0){
	    kRow=iRow-dRow;
	    jPad=iPad-dPad+offset;
	    if (!doEdge) continue;
	  }	  
	  if (IsInRange(UInt_t(kRow),jPad)){
	    Bool_t isOutlier=(outlierROC==NULL)?kFALSE:outlierROC->GetValue(kRow,jPad)>0;
	    if (!isOutlier){
	      cacheBuffer[counter]=sign*(GetValue(kRow,jPad)-value);
	      counter++;
	    }
	  }
	}
      }
      newBuffer[fkIndexes[iRow]+iPad]=0.;
      if (counter>1) newBuffer[fkIndexes[iRow]+iPad] = TMath::Median(counter, cacheBuffer)+value;
    }
  }
  memcpy(fData, newBuffer,GetNchannels()*sizeof(Float_t));
  delete []newBuffer;
  delete []cacheBuffer;
  return kTRUE;
}



Bool_t AliTPCCalROC::LTMFilter(Int_t deltaRow, Int_t deltaPad, Float_t fraction, Int_t type, AliTPCCalROC* outlierROC,  Bool_t doEdge){
  //){
  //
  //
  // //
  //   Modify content of the class
  //   write LTM mean or median
  if (fraction<0 || fraction>1) return kFALSE;
  Float_t *newBuffer=new Float_t[fNChannels] ;
  Double_t *cacheBuffer=new Double_t[fNChannels];
  //
  for (Int_t iRow=0; iRow< Int_t(fNRows); iRow++){
    Int_t nPads=GetNPads(iRow); // number of rows in current row
    for (Int_t iPad=0; iPad<nPads; iPad++){
      Double_t value=GetValue(iRow,iPad);
      Int_t counter=0;
      //
      for (Int_t dRow=-deltaRow; dRow<=deltaRow; dRow++){
	Int_t jRow=iRow+dRow;  //take the row - mirror if ouside of range
	Float_t sign0=1.;
	if (jRow<0) sign0=-1.;
	if (UInt_t(jRow)>=fNRows) sign0=-1.;	
	Int_t jPads= GetNPads(iRow+sign0*dRow);
	Int_t offset=(nPads-jPads)/2.;
	//
	for (Int_t dPad=-deltaPad; dPad<=deltaPad; dPad++){
	  Float_t sign=sign0;
	  Int_t jPad=iPad+dPad+offset;  //take the pad - mirror if ouside of range
	  Int_t kRow=jRow;
	  if (jPad<0) sign=-1;
	  if (jPad>=jPads) sign=-1;
	  if (sign<0){
	    if (!doEdge) continue;
	    kRow=iRow-dRow;
	    jPad=iPad-dPad+offset;
	  } 
	  if (IsInRange(UInt_t(kRow),jPad)){
	    Bool_t isOutlier=(outlierROC==NULL)?kFALSE:outlierROC->GetValue(kRow,jPad)>0;
	    if (!isOutlier){
	      cacheBuffer[counter]=sign*(GetValue(kRow,jPad)-value);
	      counter++;
	    }
	  }
	}
      }
      Double_t mean=0,rms=0;
      if (TMath::Nint(fraction*Double_t(counter))>1 ) AliMathBase::EvaluateUni(counter,cacheBuffer,mean,rms,TMath::Nint(fraction*Double_t(counter)));
      mean+=value;
      newBuffer[fkIndexes[iRow]+iPad] = (type==0)? mean:rms;
    }
  }
  memcpy(fData, newBuffer,GetNchannels()*sizeof(Float_t));
  delete []newBuffer;
  delete []cacheBuffer;
  return kTRUE;
}

Bool_t  AliTPCCalROC::Convolute(Double_t sigmaPad, Double_t sigmaRow,  AliTPCCalROC*outlierROC, TF1 */*fpad*/, TF1 */*frow*/){
  //
  // convolute the calibration with function fpad,frow
  // in range +-4 sigma

  Float_t *newBuffer=new Float_t[fNChannels] ;
  //
  for (Int_t iRow=0; iRow< Int_t(fNRows); iRow++){
    Int_t nPads=GetNPads(iRow); // number of rows in current row
    for (Int_t iPad=0; iPad<nPads; iPad++){
      Int_t jRow0=TMath::Max(TMath::Nint(iRow-sigmaRow*4.),0);
      Int_t jRow1=TMath::Min(TMath::Nint(iRow+sigmaRow*4.),Int_t(fNRows));
      Int_t jPad0=TMath::Max(TMath::Nint(iPad-sigmaPad*4.),0);
      Int_t jPad1=TMath::Min(TMath::Nint(iRow+sigmaPad*4.),Int_t(nPads));
      //
      Double_t sumW=0;
      Double_t sumCal=0;
      for (Int_t jRow=jRow0; jRow<=jRow1; jRow++){
	for (Int_t jPad=jPad0; jPad<=jPad1; jPad++){
	  if (!IsInRange(jRow,jPad)) continue;
	  Bool_t isOutlier=(outlierROC==NULL)?kFALSE:outlierROC->GetValue(jRow,jPad)>0;
	  if (!isOutlier){
	    Double_t weight= TMath::Gaus(jPad,iPad,sigmaPad)*TMath::Gaus(jRow,iRow,sigmaRow);	    
	    sumCal+=weight*GetValue(jRow,jPad);
	    sumW+=weight;
	  }
	}
      }
      if (sumW>0){
	sumCal/=sumW;
	newBuffer[fkIndexes[iRow]+iPad]=sumCal;
      }
    }
  }
  memcpy(fData, newBuffer,GetNchannels()*sizeof(Float_t));
  delete []newBuffer;
  return kTRUE;
}


//





// algebra fuctions:

void AliTPCCalROC::Add(Float_t c1){
  //
  // add c1 to each channel of the ROC  
  //
  for (UInt_t  idata = 0; idata< fNChannels; idata++) fData[idata]+=c1;
}


void AliTPCCalROC::Multiply(Float_t c1){
  //
  // multiply each channel of the ROC with c1
  //
  for (UInt_t  idata = 0; idata< fNChannels; idata++) fData[idata]*=c1;
}


void AliTPCCalROC::Add(const AliTPCCalROC * roc, Double_t c1){
  //
  // multiply AliTPCCalROC roc by c1 and add each channel to the coresponing channel in the ROC
  //  - pad by pad 
  //
  if (!roc) return;
  for (UInt_t  idata = 0; idata< fNChannels; idata++){
    fData[idata]+=roc->fData[idata]*c1;
  }
}


void AliTPCCalROC::Multiply(const AliTPCCalROC*  roc) {
  //
  // multiply each channel of the ROC with the coresponding channel of 'roc'
  //     - pad by pad -
  //
  if (!roc) return;
  for (UInt_t  idata = 0; idata< fNChannels; idata++){
    fData[idata]*=roc->fData[idata];
  }
}


void AliTPCCalROC::Divide(const AliTPCCalROC*  roc) {
  //
  // divide each channel of the ROC by the coresponding channel of 'roc'
  //     - pad by pad -
  //
  if (!roc) return;
  Float_t kEpsilon=0.00000000000000001;
  for (UInt_t  idata = 0; idata< fNChannels; idata++){
    if (TMath::Abs(roc->fData[idata])>kEpsilon)
      fData[idata]/=roc->fData[idata];
  }
}

void AliTPCCalROC::Reset()
{
  //
  // reset to ZERO
  //
  memset(fData,0,sizeof(Float_t)*fNChannels); // set all values to 0
}

Double_t AliTPCCalROC::GetMean(AliTPCCalROC *const outlierROC) const {
   //
   //  returns the mean value of the ROC
   //  pads with value != 0 in outlierROC are not used for the calculation
   //  return 0 if no data is accepted by the outlier cuts 
   //
   if (!outlierROC) return TMath::Mean(fNChannels, fData);
   Double_t *ddata = new Double_t[fNChannels];
   Int_t nPoints = 0;
   for (UInt_t i=0;i<fNChannels;i++) {
      if (!(outlierROC->GetValue(i))) {
         ddata[nPoints]= fData[i];
         nPoints++;
      }
   }
   Double_t mean = 0;
   if(nPoints>0)
     mean = TMath::Mean(nPoints, ddata);
   delete [] ddata;
   return mean;
}

Double_t AliTPCCalROC::GetMedian(AliTPCCalROC *const outlierROC) const {
   //
   //  returns the median value of the ROC
   //  pads with value != 0 in outlierROC are not used for the calculation
   //  return 0 if no data is accepted by the outlier cuts 
   //
   if (!outlierROC) return TMath::Median(fNChannels, fData);
   Double_t *ddata = new Double_t[fNChannels];
   Int_t nPoints = 0;
   for (UInt_t i=0;i<fNChannels;i++) {
      if (!(outlierROC->GetValue(i))) {
         ddata[nPoints]= fData[i];
         nPoints++;
      }
   }
   Double_t median = 0;
   if(nPoints>0)
     median = TMath::Median(nPoints, ddata);
   delete [] ddata;
   return median;
}

Double_t AliTPCCalROC::GetRMS(AliTPCCalROC *const outlierROC) const {
   //
   //  returns the RMS value of the ROC
   //  pads with value != 0 in outlierROC are not used for the calculation
   //  return 0 if no data is accepted by the outlier cuts 
   //
   if (!outlierROC) return TMath::RMS(fNChannels, fData);
   Double_t *ddata = new Double_t[fNChannels];
   Int_t nPoints = 0;
   for (UInt_t i=0;i<fNChannels;i++) {
      if (!(outlierROC->GetValue(i))) {
         ddata[nPoints]= fData[i];
         nPoints++;
      }
   }
   Double_t rms = 0;
   if(nPoints>0)
     rms = TMath::RMS(nPoints, ddata);
   delete [] ddata;
   return rms;
}

Double_t AliTPCCalROC::GetLTM(Double_t *const sigma, Double_t fraction, AliTPCCalROC *const outlierROC){
  //
  //  returns the LTM and sigma
  //  pads with value != 0 in outlierROC are not used for the calculation
   //  return 0 if no data is accepted by the outlier cuts 
  //
  Double_t *ddata = new Double_t[fNChannels];
  UInt_t nPoints = 0;
  for (UInt_t i=0;i<fNChannels;i++) {
     if (!outlierROC || !(outlierROC->GetValue(i))) {
        ddata[nPoints]= fData[i];
        nPoints++;
     }
  }

  Double_t ltm =0, lsigma=0;
  if(nPoints>0) {
    Int_t hh = TMath::Min(TMath::Nint(fraction *nPoints), Int_t(nPoints));
    AliMathBase::EvaluateUni(nPoints,ddata, ltm, lsigma, hh);
    if (sigma) *sigma=lsigma;
  }
  
  delete [] ddata;
  return ltm;
}

TH1F * AliTPCCalROC::MakeHisto1D(Float_t min, Float_t max,Int_t type){
  //
  // make 1D histo
  // type -1 = user defined range
  //       0 = nsigma cut nsigma=min
  //       1 = delta cut around median delta=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 ROC 1D%d",GetTitle(),fSector);
  TH1F * his = new TH1F(name.Data(),name.Data(),100, min,max);
  for (UInt_t irow=0; irow<fNRows; irow++){
    UInt_t npads = (Int_t)GetNPads(irow);
    for (UInt_t ipad=0; ipad<npads; ipad++){
      his->Fill(GetValue(irow,ipad));
    }
  }
  return his;
}



TH2F * AliTPCCalROC::MakeHisto2D(Float_t min, Float_t max,Int_t type){
  //
  // make 2D histo
  // type -1 = user defined range
  //       0 = nsigma cut nsigma=min
  //       1 = delta cut around median delta=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){
      Double_t sigma;
      Float_t mean  = GetLTM(&sigma,max);
      sigma*=min;
      min = mean-sigma;
      max = mean+sigma;

    }
  }
  UInt_t maxPad = 0;
  for (UInt_t irow=0; irow<fNRows; irow++){
    if (GetNPads(irow)>maxPad) maxPad = GetNPads(irow);
  }

  TString name=Form("%s ROC%d",GetTitle(),fSector);
  TH2F * his = new TH2F(name.Data(),name.Data(),fNRows+10,-5, fNRows+5, maxPad+10, -(Int_t(maxPad/2))-5, maxPad/2+5);
  for (UInt_t irow=0; irow<fNRows; irow++){
    UInt_t npads = (Int_t)GetNPads(irow);
    for (UInt_t ipad=0; ipad<npads; ipad++){
      his->Fill(irow+0.5,Int_t(ipad)-Int_t(npads/2)+0.5,GetValue(irow,ipad));
    }
  }
  his->SetMaximum(max);
  his->SetMinimum(min);
  return his;
}

TH2F * AliTPCCalROC::MakeHistoOutliers(Float_t delta, Float_t fraction, Int_t type){
  //
  // Make Histogram with outliers
  // mode = 0 - sigma cut used
  // mode = 1 - absolute cut used
  // fraction - fraction of values used to define sigma
  // delta - in mode 0 - nsigma cut
  //            mode 1 - delta cut
  //
  Double_t sigma;
  Float_t mean  = GetLTM(&sigma,fraction);  
  if (type==0) delta*=sigma; 
  UInt_t maxPad = 0;
  for (UInt_t irow=0; irow<fNRows; irow++){
    if (GetNPads(irow)>maxPad) maxPad = GetNPads(irow);
  }

  TString name=Form("%s ROC Outliers%d",GetTitle(),fSector);
  TH2F * his = new TH2F(name.Data(),name.Data(),fNRows+10,-5, fNRows+5, maxPad+10, -(Int_t(maxPad/2))-5, maxPad/2+5);
  for (UInt_t irow=0; irow<fNRows; irow++){
    UInt_t npads = (Int_t)GetNPads(irow);
    for (UInt_t ipad=0; ipad<npads; ipad++){
      if (TMath::Abs(GetValue(irow,ipad)-mean)>delta)
	his->Fill(irow+0.5,Int_t(ipad)-Int_t(npads/2)+0.5,1);
    }
  }
  return his;
}



void AliTPCCalROC::Draw(Option_t* opt){
  //
  // create histogram with values and draw it
  //
  TH1 * his=0; 
  TString option=opt;
  option.ToUpper();
  if (option.Contains("1D")){
    his = MakeHisto1D();
  }
  else{
    his = MakeHisto2D();
  }
  his->Draw(option);
}





void AliTPCCalROC::Test() {
  //
  // example function to show functionality and test AliTPCCalROC
  //

  Float_t kEpsilon=0.00001;
  
  // create CalROC with defined values
  AliTPCCalROC  roc0(0);  
  for (UInt_t irow = 0; irow <roc0.GetNrows(); irow++){
    for (UInt_t ipad = 0; ipad <roc0.GetNPads(irow); ipad++){
      Float_t value  = irow+ipad/1000.;
      roc0.SetValue(irow,ipad,value);
    }
  }
  
  // copy CalROC, readout values and compare to original
  AliTPCCalROC roc1(roc0);
  for (UInt_t irow = 0; irow <roc1.GetNrows(); irow++){
    for (UInt_t ipad = 0; ipad <roc1.GetNPads(irow); ipad++){
      Float_t value  = irow+ipad/1000.;
      if (roc1.GetValue(irow,ipad)!=value){
        printf("Read/Write error\trow=%d\tpad=%d\n",irow,ipad);
      }
    }
  }

  // write original CalROC to file
  TFile f("calcTest.root","recreate");
  roc0.Write("Roc0");
  AliTPCCalROC * roc2 = (AliTPCCalROC*)f.Get("Roc0");
  f.Close();
  
  // read CalROC from file and compare to original CalROC
  for (UInt_t irow = 0; irow <roc0.GetNrows(); irow++){
    if (roc0.GetNPads(irow)!=roc2->GetNPads(irow))
      printf("NPads - Read/Write error\trow=%d\n",irow);
    for (UInt_t ipad = 0; ipad <roc1.GetNPads(irow); ipad++){
      Float_t value  = irow+ipad/1000.;
      if (roc2->GetValue(irow,ipad)!=value){
        printf("Read/Write error\trow=%d\tpad=%d\n",irow,ipad);
      }
    }
  }

  // 
  // Algebra Tests
  //
  
  // Add constant
  AliTPCCalROC roc3(roc0);
  roc3.Add(1.5);
  for (UInt_t irow = 0; irow <roc3.GetNrows(); irow++){
    for (UInt_t ipad = 0; ipad <roc3.GetNPads(irow); ipad++){
      Float_t value  = irow+ipad/1000. + 1.5;
      if (TMath::Abs(roc3.GetValue(irow,ipad)-value) > kEpsilon){
        printf("Add constant - error\trow=%d\tpad=%d\n",irow,ipad);
      }
    }
  }

  // Add another CalROC
  AliTPCCalROC roc4(roc0);
  roc4.Add(&roc0, -1.5);
  for (UInt_t irow = 0; irow <roc4.GetNrows(); irow++){
    for (UInt_t ipad = 0; ipad <roc4.GetNPads(irow); ipad++){
      Float_t value  = irow+ipad/1000. - 1.5 * (irow+ipad/1000.);
      if (TMath::Abs(roc4.GetValue(irow,ipad)-value) > kEpsilon){
        printf("Add CalROC - error\trow=%d\tpad=%d\n",irow,ipad);
      }
    }
  }
  
  // Multiply with constant
  AliTPCCalROC roc5(roc0);
  roc5.Multiply(-1.4);
  for (UInt_t irow = 0; irow <roc5.GetNrows(); irow++){
    for (UInt_t ipad = 0; ipad <roc5.GetNPads(irow); ipad++){
      Float_t value  = (irow+ipad/1000.) * (-1.4);
      if (TMath::Abs(roc5.GetValue(irow,ipad)-value) > kEpsilon){
        printf("Multiply with constant - error\trow=%d\tpad=%d\n",irow,ipad);
      }
    }
  }

  // Multiply another CalROC
  AliTPCCalROC roc6(roc0);
  roc6.Multiply(&roc0);
  for (UInt_t irow = 0; irow <roc6.GetNrows(); irow++){
    for (UInt_t ipad = 0; ipad <roc6.GetNPads(irow); ipad++){
      Float_t value  = (irow+ipad/1000.) * (irow+ipad/1000.);
      if (TMath::Abs(roc6.GetValue(irow,ipad)-value) > kEpsilon*100){
        printf("Multiply with CalROC - error\trow=%d\tpad=%d\n",irow,ipad);
      }
    }
  }


  // Divide by CalROC
  AliTPCCalROC roc7(roc0);
  roc7.Divide(&roc0);
  for (UInt_t irow = 0; irow <roc7.GetNrows(); irow++){
    for (UInt_t ipad = 0; ipad <roc7.GetNPads(irow); ipad++){
      Float_t value  = 1.;
      if (irow+ipad == 0) value = roc0.GetValue(irow,ipad);
      if (TMath::Abs(roc7.GetValue(irow,ipad)-value) > kEpsilon){
        printf("Multiply with CalROC - error\trow=%d\tpad=%d\n",irow,ipad);
      }
    }
  }

  //
  // Statistics Test
  //
  
  // create CalROC with defined values
  TRandom3 rnd(0);
  AliTPCCalROC sroc0(0);
  for (UInt_t ichannel = 0; ichannel < sroc0.GetNchannels(); ichannel++){
    Float_t value  = rnd.Gaus(10., 2.);
    sroc0.SetValue(ichannel,value);
  }

  printf("Mean   (should be close to 10): %f\n", sroc0.GetMean());
  printf("RMS    (should be close to  2): %f\n", sroc0.GetRMS());
  printf("Median (should be close to 10): %f\n", sroc0.GetMedian());
  printf("LTM    (should be close to 10): %f\n", sroc0.GetLTM());

  //AliTPCCalROC* sroc1 = sroc0.LocalFit(4, 8);
  
  //delete sroc1;

//        std::cout << TMath::Abs(roc5.GetValue(irow,ipad)-value) << std::endl;
}


AliTPCCalROC * AliTPCCalROC::LocalFit(Int_t rowRadius, Int_t padRadius, AliTPCCalROC* ROCoutliers, Bool_t robust, Double_t chi2Threshold, Double_t robustFraction) {
  //
  // MakeLocalFit - smoothing
  // returns a AliTPCCalROC with smoothed data
  // rowRadius and padRadius specifies a window around a given pad. 
  // 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
  //
  AliTPCCalROC * xROCfitted = new AliTPCCalROC(fSector);
  TLinearFitter fitterQ(6,"hyp5");
   // TLinearFitter fitterQ(6,"x0++x1++x2++x3++x4++x5");
  fitterQ.StoreData(kTRUE);
  for (UInt_t row=0; row < GetNrows(); row++) {
    //std::cout << "Entering row " << row << " of " << GetNrows() << " @ sector "<< fSector << " for local fitting... "<< std::endl;
    for (UInt_t pad=0; pad < GetNPads(row); pad++)
      xROCfitted->SetValue(row, pad, GetNeighbourhoodValue(&fitterQ, row, pad, rowRadius, padRadius, ROCoutliers, robust, chi2Threshold, robustFraction));
  }
  return xROCfitted;
}


Double_t AliTPCCalROC::GetNeighbourhoodValue(TLinearFitter* fitterQ, Int_t row, Int_t pad, Int_t rRadius, Int_t pRadius, AliTPCCalROC *const ROCoutliers, Bool_t robust, Double_t chi2Threshold, Double_t robustFraction) {
  //
  // AliTPCCalROC::GetNeighbourhoodValue - smoothing - PRIVATE
  // in this function the fit for LocalFit is done
  //

  fitterQ->ClearPoints();
  TVectorD fitParam(6);
  Int_t    npoints=0;
  Double_t xx[6];
  Float_t dlx, dly;
  Float_t lPad[3] = {0};
  Float_t localXY[3] = {0};
  
  AliTPCROC* tpcROCinstance = AliTPCROC::Instance();
  tpcROCinstance->GetPositionLocal(fSector, row, pad, lPad);  // calculate position lPad by pad and row number
  
  TArrayI *neighbourhoodRows = 0;
  TArrayI *neighbourhoodPads = 0;
  
  //std::cerr << "Trying to get neighbourhood for row " << row << ", pad " << pad << std::endl;
  GetNeighbourhood(neighbourhoodRows, neighbourhoodPads, row, pad, rRadius, pRadius);
  //std::cerr << "Got neighbourhood for row " << row << ", pad " << pad << std::endl;
  
  Int_t r, p;
  for (Int_t i=0; i < (2*rRadius+1)*(2*pRadius+1); i++) {
    r = neighbourhoodRows->At(i);
    p = neighbourhoodPads->At(i);
    if (r == -1 || p == -1) continue;   // window is bigger than ROC
    tpcROCinstance->GetPositionLocal(fSector, r, p, localXY);   // calculate position localXY by pad and row number
    dlx = lPad[0] - localXY[0];
    dly = lPad[1] - localXY[1];
    //xx[0] = 1;
    xx[1] = dlx;
    xx[2] = dly;
    xx[3] = dlx*dlx;
    xx[4] = dly*dly;
    xx[5] = dlx*dly;
    if (!ROCoutliers || ROCoutliers->GetValue(r,p) != 1) {
      fitterQ->AddPoint(&xx[1], GetValue(r, p), 1);
      npoints++;
    }
  }
  
  delete neighbourhoodRows;
  delete neighbourhoodPads;
  
  if (npoints < 0.5 * ((2*rRadius+1)*(2*pRadius+1)) ) {
    // std::cerr << "Too few data points for fitting @ row " << row << ", pad " << pad << " in sector " << fSector << std::endl;
    return 0.;  // for diagnostic
  }
  fitterQ->Eval();
  fitterQ->GetParameters(fitParam);
  Float_t chi2Q = 0;
  if (robust) chi2Q = fitterQ->GetChisquare()/(npoints-6.);
  //if (robust) chi2Q = fitterQ->GetChisquare()/(npoints-6.);
  if (robust && chi2Q > chi2Threshold) {
    //std::cout << "robust fitter called... " << std::endl;
    fitterQ->EvalRobust(robustFraction);
    fitterQ->GetParameters(fitParam);
  }
  Double_t value = fitParam[0];
  
  //if (value < 0) std::cerr << "negative fit-value " << value << " in sector "<< this->fSector << " @ row: " << row << " and pad: " << pad << ", with fitter Chi2 = " << chi2Q <<  std::endl;
  return value;
}




void AliTPCCalROC::GetNeighbourhood(TArrayI* &rowArray, TArrayI* &padArray, Int_t row, Int_t pad, Int_t rRadius, Int_t pRadius) {
  //
  // AliTPCCalROC::GetNeighbourhood - PRIVATE
  // in this function the window for LocalFit is determined
  //
  rowArray = new TArrayI((2*rRadius+1)*(2*pRadius+1));
  padArray = new TArrayI((2*rRadius+1)*(2*pRadius+1));
  
  Int_t rmin = row - rRadius;
  UInt_t rmax = row + rRadius;
  
  // if window goes out of ROC
  if (rmin < 0) {
    rmax = rmax - rmin;
    rmin = 0;
  }
  if (rmax >= GetNrows()) {
    rmin = rmin - (rmax - GetNrows()+1);
    rmax = GetNrows() - 1;
      if (rmin  < 0 ) rmin = 0; // if the window is bigger than the ROC
  }
  
  Int_t pmin, pmax;
  Int_t i = 0;
  
  for (UInt_t r = rmin; r <= rmax; r++) {
    pmin = pad - pRadius;
    pmax = pad + pRadius;
    if (pmin < 0) {
      pmax = pmax - pmin;
      pmin = 0;
    }
    if (pmax >= (Int_t)GetNPads(r)) {
      pmin = pmin - (pmax - GetNPads(r)+1);
      pmax = GetNPads(r) - 1;
      if (pmin  < 0 ) pmin = 0; // if the window is bigger than the ROC
    }
    for (Int_t p = pmin; p <= pmax; p++) {
      (*rowArray)[i] = r;
      (*padArray)[i] = p;
      i++;
    }
  }
  for (Int_t j = i; j < rowArray->GetSize(); j++){  // unused padArray-entries, in the case that the window is bigger than the ROC
    //std::cout << "trying to write -1" << std::endl;
    (*rowArray)[j] = -1;
    (*padArray)[j] = -1;
    //std::cout << "writing -1" << std::endl;
  }
}



void AliTPCCalROC::GlobalFit(const AliTPCCalROC* ROCoutliers, Bool_t robust, TVectorD &fitParam, TMatrixD &covMatrix, Float_t & chi2, Int_t fitType, Double_t chi2Threshold, Double_t robustFraction, Double_t err){
  //
  // Makes a  GlobalFit for the given secotr and return fit-parameters, covariance and chi2
  // The origin of the fit function is the center of the ROC!
  // fitType == 0: fit plane function
  // fitType == 1: fit parabolic function
  // ROCoutliers - 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
  // err: error of the data points
  //
  TLinearFitter* fitterG = 0;
  Double_t xx[6];
  
  if (fitType  == 1) {
    fitterG = new TLinearFitter (6,"x0++x1++x2++x3++x4++x5");
    fitParam.ResizeTo(6);
    covMatrix.ResizeTo(6,6);
  } else {
    fitterG = new TLinearFitter(3,"x0++x1++x2");
    fitParam.ResizeTo(3);
    covMatrix.ResizeTo(3,3);
  }
  fitterG->StoreData(kTRUE);   
  fitterG->ClearPoints();
  Int_t    npoints=0;
  
  Float_t dlx, dly;
  Float_t centerPad[3] = {0};
  Float_t localXY[3] = {0};
  
  AliTPCROC* tpcROCinstance = AliTPCROC::Instance();
  tpcROCinstance->GetPositionLocal(fSector, GetNrows()/2, GetNPads(GetNrows()/2)/2, centerPad);  // calculate center of ROC 
  
  // loop over all channels and read data into fitterG
  for (UInt_t irow = 0; irow < GetNrows(); irow++) {
    for (UInt_t ipad = 0; ipad < GetNPads(irow); ipad++) {
      // fill fitterG
      if (ROCoutliers && ROCoutliers->GetValue(irow, ipad) != 0) continue;
      tpcROCinstance->GetPositionLocal(fSector, irow, ipad, localXY);   // calculate position localXY by pad and row number
      dlx = localXY[0] - centerPad[0];
      dly = localXY[1] - centerPad[1];
      xx[0] = 1;
      xx[1] = dlx;
      xx[2] = dly;
      xx[3] = dlx*dlx;
      xx[4] = dly*dly;
      xx[5] = dlx*dly;
      npoints++;
      fitterG->AddPoint(xx, GetValue(irow, ipad), err);
    }
  }
  if(npoints>10) { // make sure there is something to fit
    fitterG->Eval();
    fitterG->GetParameters(fitParam);
    fitterG->GetCovarianceMatrix(covMatrix);
    if (fitType == 1)
      chi2 = fitterG->GetChisquare()/(npoints-6.);
    else chi2 = fitterG->GetChisquare()/(npoints-3.);
    if (robust && chi2 > chi2Threshold) {
      //    std::cout << "robust fitter called... " << std::endl;
      fitterG->EvalRobust(robustFraction);
      fitterG->GetParameters(fitParam);
    }
  } else {
    // set parameteres to 0
    Int_t nParameters = 3;
    if (fitType  == 1)
      nParameters = 6;

    for(Int_t i = 0; i < nParameters; i++)
      fitParam[i] = 0;
  }
  
  delete fitterG;
}


AliTPCCalROC* AliTPCCalROC::CreateGlobalFitCalROC(TVectorD &fitParam, Int_t sector){
  //
  // Create ROC with global fit parameters
  // The origin of the fit function is the center of the ROC!
  // loop over all channels, write fit values into new ROC and return it
  //
  Float_t dlx, dly;
  Float_t centerPad[3] = {0};
  Float_t localXY[3] = {0};
  AliTPCCalROC * xROCfitted = new AliTPCCalROC(sector);
  AliTPCROC* tpcROCinstance = AliTPCROC::Instance();
  tpcROCinstance->GetPositionLocal(sector, xROCfitted->GetNrows()/2, xROCfitted->GetNPads(xROCfitted->GetNrows()/2)/2, centerPad);  // calculate center of ROC 
  Int_t fitType = 1;
  if (fitParam.GetNoElements() == 6) fitType = 1;
  else fitType = 0;
  Double_t value = 0;
  if (fitType == 1) { // parabolic fit
    for (UInt_t irow = 0; irow < xROCfitted->GetNrows(); irow++) {
      for (UInt_t ipad = 0; ipad < xROCfitted->GetNPads(irow); ipad++) {
	tpcROCinstance->GetPositionLocal(sector, irow, ipad, localXY);   // calculate position localXY by pad and row number
	dlx = localXY[0] - centerPad[0];
	dly = localXY[1] - centerPad[1];
	value = fitParam[0] + fitParam[1]*dlx + fitParam[2]*dly + fitParam[3]*dlx*dlx + fitParam[4]*dly*dly + fitParam[5]*dlx*dly;
	xROCfitted->SetValue(irow, ipad, value);
      }
    }   
  }
  else {  // linear fit
    for (UInt_t irow = 0; irow < xROCfitted->GetNrows(); irow++) {
      for (UInt_t ipad = 0; ipad < xROCfitted->GetNPads(irow); ipad++) {
	tpcROCinstance->GetPositionLocal(sector, irow, ipad, localXY);   // calculate position localXY by pad and row number
	dlx = localXY[0] - centerPad[0];
	dly = localXY[1] - centerPad[1];
	value = fitParam[0] + fitParam[1]*dlx + fitParam[2]*dly;
	xROCfitted->SetValue(irow, ipad, value);
      }
    }   
  }
  return xROCfitted;
}

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