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

////////////////////////////////////////////////////////////////////////////////////////
//                                                                                    //
//     Implementation of the TPC Raw drift velocity and Altro L1 Phase  calibration   //
//                                                                                    //
//               Origin: Jens Wiechula, J.Wiechula@gsi.de                             //
//                                                                                    //
////////////////////////////////////////////////////////////////////////////////////////
//
//
// *************************************************************************************
// *                                Class Description                                  *
// *************************************************************************************
/*

----example---
TFile f("CalibAltro.root");
AliTPCCalibRaw *al=(AliTPCCalibRaw*)f.Get(f.GetListOfKeys()->At(0)->GetName())
{
TCanvas *c1=(TCanvas*)gROOT->FindObject("c1");
if (!c1) c1=new TCanvas("c1","c1");
c1->Clear();

TH2F h2f("h2","h2;RCU;fail",216,0,216,al->GetNevents(),0,al->GetNevents());
Bool_t first=kTRUE;
Int_t i,iev;
for (i=0;i<216;++i) {
  TVectorF *v=al->GetALTROL1PhaseFailEventsRCU(i);
  if (!v) continue;
  for (iev=0;iev<al->GetNevents();++iev) {
    h2f->SetBinContent(i+1,iev+1,(*v)(iev));
  }
//   TH1F h(*v);
//   h.SetLineColor(i/216.*50+50);
//   ((TH1F*)h.Clone(Form("h%d",i)))->Draw(first?"":"same");
//   c1->Modified();
//   c1->Update();
  first=kFALSE;
}
h2f->Draw("col");
}

*/



//Root includes
#include <TROOT.h>
#include <TH2C.h>
#include <TH1F.h>
#include <TMap.h>
#include <TGraph.h>
#include <TObjString.h>
#include <TTimeStamp.h>
#include <TCanvas.h>
//AliRoot includes
#include "AliTPCCalROC.h"
#include "AliAltroRawStream.h"
#include "AliLog.h"
//class header
#include "AliTPCCalibRaw.h"

ClassImp(AliTPCCalibRaw)

AliTPCCalibRaw::AliTPCCalibRaw() :
  AliTPCCalibRawBase(),
  fPeakDetMinus(1),
  fPeakDetPlus(2),
  fNFailL1Phase(0),
  fNFailL1PhaseEvent(0),
  fNSecTime(600), //default 10 minutes
  fNBinsTime(60), //default 60*10 minutes = 10 hours
  fPadProcessed(kFALSE),
  fCurrentChannel(-1),
  fCurrentSector(-1),
  fLastSector(-2),
  fCurrentRow(-1),
  fCurrentPad(-1),
  fLastTimeBinProc(0),
  fPeakTimeBin(0),
  fLastSignal(0),
  fNOkPlus(0),
  fNOkMinus(0),
  fNanoSec(0),
  fArrCurrentPhaseDist(4),
  fArrCurrentPhase(kNRCU),
  fArrFailEventNumber(100),
  fArrALTROL1Phase(100000),
  fArrALTROL1PhaseEvent(kNRCU),
  fArrALTROL1PhaseFailEvent(kNRCU),
  fHnDrift(0x0),
  fVOccupancyEvent(100000),
  fVSignalSumEvent(100000),
  fVOccupancySenEvent(100000),
  fVSignalSumSenEvent(100000),
  fVNfiredPadsSenEvent(100000),
  fVTimeStampEvent(100000)
{
  //
  // Default ctor
  //
  SetNameTitle("AliTPCCalibRaw","AliTPCCalibRaw");
  CreateDVhist();
  for (Int_t ircu=0;ircu<kNRCU;++ircu) fArrCurrentPhase.GetMatrixArray()[ircu]=-1;
  fFirstTimeBin=850;
  fLastTimeBin=1020;
}
//_____________________________________________________________________
AliTPCCalibRaw::AliTPCCalibRaw(const TMap *config) :
AliTPCCalibRawBase(),
fPeakDetMinus(1),
fPeakDetPlus(2),
fNFailL1Phase(0),
fNFailL1PhaseEvent(0),
fNSecTime(600), //default 10 minutes
fNBinsTime(60), //default 60*10 minutes = 10 hours
fPadProcessed(kFALSE),
fCurrentChannel(-1),
fCurrentSector(-1),
fLastSector(-2),
fCurrentRow(-1),
fCurrentPad(-1),
fLastTimeBinProc(0),
fPeakTimeBin(0),
fLastSignal(0),
fNOkPlus(0),
fNOkMinus(0),
fNanoSec(0),
fArrCurrentPhaseDist(4),
fArrCurrentPhase(kNRCU),
fArrFailEventNumber(100),
fArrALTROL1Phase(100000),
fArrALTROL1PhaseEvent(kNRCU),
fArrALTROL1PhaseFailEvent(kNRCU),
fHnDrift(0x0),
fVOccupancyEvent(100000),
fVSignalSumEvent(100000),
fVOccupancySenEvent(100000),
fVSignalSumSenEvent(100000),
fVNfiredPadsSenEvent(100000),
fVTimeStampEvent(100000)
{
  //
  // Default ctor
  //
  SetNameTitle("AliTPCCalibRaw","AliTPCCalibRaw");
  CreateDVhist();
  for (Int_t ircu=0;ircu<kNRCU;++ircu) fArrCurrentPhase.GetMatrixArray()[ircu]=-1;
  fFirstTimeBin=850;
  fLastTimeBin=1020;
  if (config->GetValue("FirstTimeBin")) fFirstTimeBin = ((TObjString*)config->GetValue("FirstTimeBin"))->GetString().Atoi();
  if (config->GetValue("LastTimeBin")) fLastTimeBin = ((TObjString*)config->GetValue("LastTimeBin"))->GetString().Atoi();
  if (config->GetValue("DebugLevel")) fDebugLevel = ((TObjString*)config->GetValue("DebugLevel"))->GetString().Atoi();
}

//_____________________________________________________________________
AliTPCCalibRaw::~AliTPCCalibRaw()
{
  //
  // dtor
  //
  delete fHnDrift;  
}
//_____________________________________________________________________
// AliTPCCalibRaw& AliTPCCalibRaw::operator = (const  AliTPCCalibRaw &source)
// {
//   //
//   // assignment operator
//   //
//   if (&source == this) return *this;
//   new (this) AliTPCCalibRaw(source);
//   
//   return *this;
// }

//_____________________________________________________________________
Int_t AliTPCCalibRaw::Update(const Int_t isector, const Int_t iRow, const Int_t iPad,
             const Int_t iTimeBin, const Float_t signal)
{
  //
  // Data filling method
  //
  if (iRow<0) return 0;
  if (iPad<0) return 0;
  if (iTimeBin<0) return 0;
  //
  Int_t iChannel  = fROC->GetRowIndexes(isector)[iRow]+iPad; //  global pad position in sector
  //occupancy
  fVOccupancyEvent.GetMatrixArray()[GetNevents()]++;
  fVSignalSumEvent.GetMatrixArray()[GetNevents()]+=signal;
  //occupancy in sensitive regions
  Int_t npads=(Int_t)fROC->GetNPads(isector,iRow);
  Int_t cpad=iPad-npads/2;
  if (isector<(Int_t)fROC->GetNInnerSector()){
    //IROC case (spot)
    if ( iRow>19 && iRow<46 ){
      if ( TMath::Abs(cpad)<7 ){
        fVOccupancySenEvent.GetMatrixArray()[GetNevents()]++;
        fVSignalSumSenEvent.GetMatrixArray()[GetNevents()]+=signal;
        if (iChannel!=fCurrentChannel) fVNfiredPadsSenEvent.GetMatrixArray()[GetNevents()]++;
      }
    }
  } else if ( iRow>75 ){
    //OROC case (outer corners and last three rows are sensitive)
    Int_t padEdge=(Int_t)TMath::Min(iPad,npads-iPad);
    Int_t nrows=(Int_t)fROC->GetNRows(isector);
    if ((nrows-iRow-1)<3 || padEdge<((((Int_t)iRow-76)/4+1))*2){
      fVOccupancySenEvent.GetMatrixArray()[GetNevents()]++;
      fVSignalSumSenEvent.GetMatrixArray()[GetNevents()]+=signal;
      if (iChannel!=fCurrentChannel) fVNfiredPadsSenEvent.GetMatrixArray()[GetNevents()]++;
    }
  }
  //
  if ( (iTimeBin>fLastTimeBin) || (iTimeBin<fFirstTimeBin)   ) return 0;
  //don't process edge pads
  if (IsEdgePad(isector,iRow,iPad)) return 0;
//   Double_t x[kHnBinsDV]={1,isector,0};
//   fHnDrift->Fill(x);
  if (fCurrentChannel==iChannel){
    if (fPadProcessed) return 0;
  } else {
    fPadProcessed=kFALSE;
    fNOkPlus=0;
    fNOkMinus=0;
    fPeakTimeBin=0;
    fLastSignal=0;
  }
//   Double_t x2[kHnBinsDV]={2,isector,0};
//   fHnDrift->Fill(x2);
  

  if (signal>fLastSignal) ++fNOkPlus;
  else if(signal<fLastSignal && fNOkPlus>=fPeakDetPlus){
    ++fNOkMinus;
    if (!fPeakTimeBin) fPeakTimeBin=fLastTimeBinProc;
    if ( fNOkMinus>=fPeakDetMinus ) {
      Double_t x[kHnBinsDV]={static_cast<Double_t>(fPeakTimeBin),static_cast<Double_t>(isector),static_cast<Double_t>((fTimeStamp-fFirstTimeStamp)/fNSecTime)};
      fHnDrift->Fill(x);
    } 
  } else {
    fNOkPlus=0;
    fNOkMinus=0;
    fPeakTimeBin=0;
    fLastSignal=0;
  }

  fLastTimeBinProc=iTimeBin;
  fLastSignal=TMath::Nint(signal);
  fCurrentChannel = iChannel;
  return 0;
}
//_____________________________________________________________________
void AliTPCCalibRaw::UpdateDDL(){
  //
  // fill ALTRO L1 information
  //
  
  //set nanoseconds
  if (!fNanoSec) {
    TTimeStamp s;
    fNanoSec=s.GetNanoSec();
  }
  // current phase
  Int_t phase=(Int_t)(GetL1PhaseTB()*4.);
  //Fill pahse information of current rcu and event
  fArrCurrentPhase.GetMatrixArray()[fCurrDDLNum]=phase;
  //increase phase counter
  ++((fArrCurrentPhaseDist.GetMatrixArray())[phase]);
  
}
//_____________________________________________________________________
void AliTPCCalibRaw::ResetEvent()
{
  //
  // Reset event counters
  //

  fCurrentChannel=-1;
  fCurrentRow=-1;
  fCurrentPad=-1;
  fArrCurrentPhaseDist.Zero();
}
//_____________________________________________________________________
void AliTPCCalibRaw::EndEvent()
{
  //
  // End event analysis
  //

  
  //find phase of the current event
  Int_t phaseMaxEntries=-1;
  Int_t maxEntries=0;
  for (Int_t i=0;i<fArrCurrentPhaseDist.GetNrows();++i){
    Int_t entries=(Int_t)fArrCurrentPhaseDist[i];
    if (maxEntries<entries) {
      maxEntries=entries;
      phaseMaxEntries=i;
    }
  }
  // store phase of current event
  if (fArrALTROL1Phase.GetNrows()-1<=GetNevents())
    fArrALTROL1Phase.ResizeTo(GetNevents()+10000);
  (fArrALTROL1Phase.GetMatrixArray())[GetNevents()]=phaseMaxEntries;
  
  //loop over RCUs and test failures
  UInt_t fail=0;
  for (Int_t ircu=0;ircu<kNRCU;++ircu){
    Int_t phase=(Int_t)fArrCurrentPhase[ircu];
    if (phase<0) continue;
    if (phase!=phaseMaxEntries){
      TVectorF *arr=MakeArrL1PhaseRCU(fCurrDDLNum,kTRUE);
      if (arr->GetNrows()-1<=(Int_t)fNFailL1PhaseEvent) arr->ResizeTo(arr->GetNrows()+100);
      (arr->GetMatrixArray())[fNFailL1PhaseEvent]=phase;
      ++fNFailL1Phase;
      fail=1;
      }
    //reset current phase information
    fArrCurrentPhase[ircu]=-1;
  }
  if (fail){
    if (fArrFailEventNumber.GetNrows()-1<=(Int_t)fNFailL1PhaseEvent) fArrFailEventNumber.ResizeTo(fArrFailEventNumber.GetNrows()+100);
    fArrFailEventNumber.GetMatrixArray()[fNFailL1PhaseEvent]=GetNevents();
  }
  fNFailL1PhaseEvent+=fail;
  //time stamps
  fVTimeStampEvent.GetMatrixArray()[GetNevents()]=GetTimeStamp()-fFirstTimeStamp+fNanoSec*1e-9;
  fNanoSec=0;
  //occupance related
  if (fVOccupancyEvent.GetNrows()-1<=GetNevents()){
    fVOccupancyEvent.ResizeTo(GetNevents()+10000);
    fVSignalSumEvent.ResizeTo(GetNevents()+10000);
    fVOccupancySenEvent.ResizeTo(GetNevents()+10000);
    fVSignalSumSenEvent.ResizeTo(GetNevents()+10000);
    fVTimeStampEvent.ResizeTo(GetNevents()+10000);
    fVNfiredPadsSenEvent.ResizeTo(GetNevents()+10000);
  }
  IncrementNevents();
}
//_____________________________________________________________________
TH2C *AliTPCCalibRaw::MakeHistL1RCUEvents(Int_t type)
{
  // Create a 2D histo RCU:Events indicating the there was a deviation
  // from the mean L1 phase of the event
  //
  //type: 0=Failures, 1=Phases

  //number of relavant events, depending on version
  Int_t nevents=GetNevents();
  //check version
  Bool_t newVersion=kFALSE;
  for (Int_t ircu=0; ircu<kNRCU; ++ircu){
    const TVectorF *v=GetALTROL1PhaseEventsRCU(ircu);
    if (!v) continue;
    if ((UInt_t)(v->GetNrows())==fNFailL1PhaseEvent){
      newVersion=kTRUE;
      nevents=fNFailL1PhaseEvent;
    }
    break;
  }
  TH2C *h2 = new TH2C("hL1FailRCUEvents","L1 Failures;RCU;Event",kNRCU,0,kNRCU,nevents,0,nevents);
  Int_t add=0;
  for (Int_t ircu=0;ircu<kNRCU;++ircu) {
    const TVectorF *v=GetALTROL1PhaseEventsRCU(ircu);
    if (type==0){
      add=1;
      h2->SetMinimum(0);
      h2->SetMaximum(2);
    } else if (type==1) {
      add=0;
      h2->SetMinimum(0);
      h2->SetMaximum(4);
    }
    if (!v) continue;
    for (Int_t iev=0;iev<nevents;++iev) {
      Float_t val=(*v)(iev);
      Float_t phase=fArrALTROL1Phase.GetMatrixArray()[iev];
      if (newVersion) {
        Int_t event=(Int_t)fArrFailEventNumber.GetMatrixArray()[iev];
        phase=fArrALTROL1Phase.GetMatrixArray()[event];
      }
      if (type==0) val=(val!=phase);
      h2->SetBinContent(ircu+1,iev+1,val+add);
    }
  }
  return h2;
}
//_____________________________________________________________________
TH1F *AliTPCCalibRaw::MakeHistL1PhaseDist()
{
  //
  // L1 phase distribution. Should be flat in ideal case
  //
  TH1F *h=new TH1F("L1phaseDist","Normalized L1 phase distribution;phase;fraction of events",4,0,4);
  h->Sumw2();
  for (Int_t iev=0;iev<GetNevents();++iev) h->Fill(fArrALTROL1Phase.GetMatrixArray()[iev]);
  if (GetNevents()>0) h->Scale(1./GetNevents());
  h->SetMinimum(0);
  h->SetMaximum(1);
  return h;
}
//_____________________________________________________________________
TVectorF *AliTPCCalibRaw::MakeVectL1PhaseDist()
{
  //
  // L1 phase distribution. Should be flat in ideal case
  //
  TVectorF *v=new TVectorF(4);
  for (Int_t iev=0;iev<GetNevents();++iev) {
    Int_t phase=(Int_t)fArrALTROL1Phase.GetMatrixArray()[iev];
    ((v->GetMatrixArray())[phase])+=1./GetNevents();
  }
  return v;
}
//_____________________________________________________________________
TH2C *AliTPCCalibRaw::MakeHistL1RCUEventsIROC(Int_t type)
{
  //
  // Create a 2D histo RCU:Events indicating the there was a deviation
  // from the mean L1 phase of the event
  //
  TH2C *h2 = new TH2C("hL1FailRCUEventsIROC","L1 Failures IROCs;RCU;Event",72,0,36,GetNevents(),0,GetNevents());
  for (Int_t ircu=0;ircu<72;++ircu) {
    const TVectorF *v=0;
    if (type==0)      v=GetALTROL1PhaseFailEventsRCU(ircu);
    else if (type==1) v=GetALTROL1PhaseEventsRCU(ircu);
    if (!v) continue;
    for (Int_t iev=0;iev<GetNevents();++iev) {
      h2->SetBinContent(ircu+1,iev+1,(*v)(iev));
    }
  }
  return h2;
}
//_____________________________________________________________________
TH2C *AliTPCCalibRaw::MakeHistL1RCUEventsOROC(Int_t type)
{
  //
  // Create a 2D histo RCU:Events indicating the there was a deviation
  // from the mean L1 phase of the event
  //
  TH2C *h2 = new TH2C("hL1FailRCUEventsOROC","L1 Failures OROCs;RCU;Event",144,0,36,GetNevents(),0,GetNevents());
  for (Int_t ircu=72;ircu<kNRCU;++ircu) {
    const TVectorF *v=0;
    if (type==0)      v=GetALTROL1PhaseFailEventsRCU(ircu);
    else if (type==1) v=GetALTROL1PhaseEventsRCU(ircu);
    if (!v) continue;
    for (Int_t iev=0;iev<GetNevents();++iev) {
      h2->SetBinContent(ircu-72+1,iev+1,(*v)(iev));
    }
  }
  return h2;
}
//_____________________________________________________________________
void AliTPCCalibRaw::CreateDVhist()
{
  //
  // Setup the HnSparse for the drift velocity determination
  //
  if (fHnDrift) return;
  //HnSparse bins
  //time bin, roc, time
  Int_t    bins[kHnBinsDV] = {static_cast<Int_t>(fLastTimeBin-fFirstTimeBin), 72, static_cast<Int_t>(fNBinsTime)};
  Double_t xmin[kHnBinsDV] = {static_cast<Double_t>(fFirstTimeBin),0,0};
  Double_t xmax[kHnBinsDV] = {static_cast<Double_t>(fLastTimeBin),72,static_cast<Double_t>(fNBinsTime)};
  fHnDrift=new THnSparseI("fHnDrift",Form("Drift velocity using last time bin;time bin[#times 100ns];ROC;Time bin [#times %us]",fNSecTime),kHnBinsDV, bins, xmin, xmax);
    
}
//_____________________________________________________________________
void AliTPCCalibRaw::Analyse()
{
  //
  // Analyse Data
  //

  //resize arrays
  fArrALTROL1Phase.ResizeTo(GetNevents());
  for (Int_t ircu=0;ircu<kNRCU;++ircu){
    TVectorF *arr=MakeArrL1PhaseRCU(ircu);//MakeArrL1PhaseRCU(ircu);
    if (!arr) continue;
    arr->ResizeTo(fNFailL1PhaseEvent);
    fArrFailEventNumber.ResizeTo(fNFailL1PhaseEvent);
//    TVectorF *arrF=MakeArrL1PhaseFailRCU(ircu);
//     arrF->ResizeTo(1);
  }
  //resize occupancy arrays only save event occupancy in sensitive regions by default
  //save the rest in debub mode
  fVOccupancySenEvent.ResizeTo(GetNevents());
  if (fDebugLevel>0){
    fVOccupancyEvent.ResizeTo(GetNevents());
    fVSignalSumEvent.ResizeTo(GetNevents());
    fVSignalSumSenEvent.ResizeTo(GetNevents());
    fVNfiredPadsSenEvent.ResizeTo(GetNevents());
    fVTimeStampEvent.ResizeTo(GetNevents());
  } else {
    fVOccupancyEvent.ResizeTo(0);
    fVSignalSumEvent.ResizeTo(0);
    fVSignalSumSenEvent.ResizeTo(0);
    fVNfiredPadsSenEvent.ResizeTo(0);
    fVTimeStampEvent.ResizeTo(0);
  }
  //Analyse drift velocity TODO
  
}
//_____________________________________________________________________
TGraph* AliTPCCalibRaw::MakeGraphOccupancy(const Int_t type, const Int_t xType)
{
  //
  // create occupancy graph (of samples abouve threshold)
  // type=0:   number of samples
  // type=1:   mean data volume (ADC counts/sample)
  // type=2:   data volume (ADC counts)
  // type=3:   samples per ADC count
  // type=4:   sample occupancy
  //
  // type=5: number of sample sensitive / number of samples
  //
  // same in sensitive regions:
  // type=10:  number of samples
  // type=11:  mean data volume (ADC counts/sample)
  // type=12:  data volume (ADC counts)
  // type=13:  samples per ADC count
  // type=14:  sample occupancy
  //
  // type=16: number of samples sensitive / number of pads sensitive
  // type=17: pad occupancy in sensitive regions
  // xType=0:  vs. time stamp
  // xType=1:  vs. event counter
  //

  TString title("Event occupancy");
  TString xTitle("Time");
  TString yTitle("number of samples");
  TGraph *gr=new TGraph(GetNevents());
  if (fVSignalSumEvent.GetNrows()==0&&!(type==10||type==14)) return 0;
  TVectorF *vOcc=&fVOccupancyEvent;
  TVectorF *vSum=&fVSignalSumEvent;
  TVectorF *vPads=&fVNfiredPadsSenEvent;
  Double_t norm=557568.;
  if (type!=14&&fVOccupancyEvent.GetNrows()==0){
    AliWarning("In non debug mode only occupancy in sensitive regions vs. event awailable!!!");
    return 0;
  }
  if (type>=10){
    vOcc=&fVOccupancySenEvent;
    vSum=&fVSignalSumSenEvent;
    vPads=&fVNfiredPadsSenEvent;
    norm=33012.;
  }
  for (Int_t i=0;i<GetNevents(); ++i){
    Double_t nAboveThreshold=vOcc->GetMatrixArray()[i];
    
    Double_t nSumADC        =1;
    Double_t timestamp      =1;
    Double_t nPads          =1;

    if (fVOccupancyEvent.GetNrows()>0){
      nSumADC        =vSum->GetMatrixArray()[i];
      timestamp      =fVTimeStampEvent.GetMatrixArray()[i]+fFirstTimeStamp;
      nPads          =vPads->GetMatrixArray()[i];
    }
    Double_t x=timestamp;
    Double_t y=0;
    //
    if (xType==1)     x=i;
    //
    if (type%10==0)            y=nAboveThreshold;
    if (type%10==1&&nAboveThreshold>0)      y=nSumADC/nAboveThreshold;
    if (type%10==2)            y=nSumADC;
    if (type%10==3&&nSumADC>0) y=nAboveThreshold/nSumADC;
    if (type%10==4)            y=nAboveThreshold/(norm*(fLastTimeBin-fFirstTimeBin));
    if (type==5)               y=fVOccupancySenEvent.GetMatrixArray()[i]/fVOccupancyEvent.GetMatrixArray()[i];
    if (type==16&&nPads>0)     y=nAboveThreshold/nPads;
    if (type==17)              y=nPads/norm;
    //
    gr->SetPoint(i,x,y);
  }
  if (xType==1) xTitle="Event";
  if (type%10==1)      yTitle="Mean ADC counts/sample";
  else if (type%10==2) yTitle="Data volume [ADC counts]";
  else if (type%10==3) yTitle="samples per ADC count";
  else if (type%10==4) yTitle="sample occupancy";
  if (type==5)         yTitle="N samples (sensitive) / N samples";
  if (type%10==6)      yTitle="N samples / N pads";
  if (type==17)        yTitle="Pad Occupancy";
  if (type>=10)        yTitle+=" (sensitive)";
  title=yTitle+":"+xTitle;
  title+=";"+xTitle+";"+yTitle;
  gr->SetTitle(title.Data());
  gr->SetEditable(kFALSE);
  return gr;
}
//_____________________________________________________________________
// TGraph* AliTPCCalibRaw::MakeGraphNoiseEvents()
// {
  //
  // Not implemented for the moment
  //
//   return 0;  
// }
//_____________________________________________________________________
TCanvas* AliTPCCalibRaw::MakeCanvasOccupancy(const Int_t xType, Bool_t sen)
{
  //
  // Create a canvas with occupancy information of all 'type's (see MakeGraphOccupancy)
  // xType=0: vs. timestamp
  // xType=1: vs. event number
  //
  // sen=kTRUE: for sensitive regions
  //

  TString name("RawOccupancy_");
  TString title("Raw Occupancy vs. ");
  if (xType==0){
    name+="Time";
    title+="time";
  } else if (xType==1){
    name+="Event";
    title+="event";
  }
  if (sen){
    name+="Sen";
    title+=" (sensitive)";
  }
  TCanvas *c=(TCanvas*)gROOT->GetListOfCanvases()->FindObject(name.Data());
  if (!c) c=new TCanvas(name.Data(),title.Data());
  c->Clear();
  c->Divide(2,2);
  for (Int_t i=0;i<4;++i){
    c->cd(i+1);
    TGraph *gr=MakeGraphOccupancy(i+10*(Int_t)sen,xType);
    gr->Draw("alp");
  }
  return c;
}

//_____________________________________________________________________
void AliTPCCalibRaw::Merge(AliTPCCalibRaw * const sig)
{
  //
  // Merge sig with this instance
  //

  if (!sig) return;
  MergeBase(sig);
  //Add last time bin distribution histogram
  fHnDrift->Add(sig->fHnDrift);

  //Add occupancy data
  
}

//_____________________________________________________________________
Long64_t AliTPCCalibRaw::Merge(TCollection * const list)
{
  //
  // Merge all objects of this type in list
  //
  
  Long64_t nmerged=1;
  
  TIter next(list);
  AliTPCCalibRaw *ce=0;
  TObject *o=0;
  
  while ( (o=next()) ){
    ce=dynamic_cast<AliTPCCalibRaw*>(o);
    if (ce){
      Merge(ce);
      ++nmerged;
    }
  }
  
  return nmerged;
}

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