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


///////////////////////////////////////////////////////////////////////////////
//                                                                           //
//  TPC calibration class for temperature maps and tendencies                //
//  (based on TPC Temperature Sensors and FiniteElement Simulation)          //
//                                                                           //
//  Authors: Stefan Rossegger, Haavard Helstrup                              //
//                                                                           //
//  Note: Obvioulsy some changes by Marian, but when ???                     //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////

#include "AliTPCSensorTempArray.h"
#include "TLinearFitter.h"
#include "TString.h"
#include "TGraph2D.h"
#include "TTimeStamp.h"

#include "AliTPCTempMap.h"


ClassImp(AliTPCTempMap)
  
  const char kStringFEsimulation[] = "FEsimulation.txt";

//_____________________________________________________________________________
AliTPCTempMap::AliTPCTempMap(AliTPCSensorTempArray *sensorDCS):
  TNamed(),
  fTempArray(0),
  fStringFEsimulation(kStringFEsimulation)
{
  //
  // AliTPCTempMap default constructor
  //

  fTempArray = sensorDCS;

}

//_____________________________________________________________________________
AliTPCTempMap::AliTPCTempMap(const AliTPCTempMap &c):
  TNamed(c),
  fTempArray(c.fTempArray),
  fStringFEsimulation(c.fStringFEsimulation)
{
  //
  // AliTPCTempMap copy constructor
  //

}

//_____________________________________________________________________________
AliTPCTempMap::~AliTPCTempMap()
{
  //
  // AliTPCTempMap destructor
  //
  
}

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

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

}

//_____________________________________________________________________________
void AliTPCTempMap::Copy(TObject &c) const
{
  //
  // Copy function
  //
  
  TObject::Copy(c);
  
}

//_____________________________________________________________________________

Double_t AliTPCTempMap::GetTempGradientY(UInt_t timeSec, Int_t side){
 //
 // Extract Linear Vertical Temperature Gradient [K/cm] within the TPC on 
 // Shaft Side(A): 0
 // Muon  Side(C): 1
 // Values based on TemperatureSensors within the TPC ( type: 3 (TPC) )
 //
 // FIXME: Also return residual-distribution, covariance Matrix
 //        or simply chi2 for validity check? 
 //        -> better use GetLinearFitter - function in this case!
  
 TLinearFitter *fitter = new TLinearFitter(3,"x0++x1++x2");
 TVectorD param(3);
 Int_t i = 0;

 Int_t nsensors = fTempArray->NumSensors();
 for (Int_t isensor=0; isensor<nsensors; isensor++) { // loop over all sensors
   AliTPCSensorTemp *entry = (AliTPCSensorTemp*)fTempArray->GetSensorNum(isensor);
   
   if (entry->GetType()==3 && entry->GetSide()==side) { // take SensorType:TPC 
     Double_t x[3];
     x[0]=1;
     x[1]=entry->GetX();
     x[2]=entry->GetY();    
     Double_t y = fTempArray->GetValue(timeSec,isensor); // get temperature value
     if (IsOK(y)) fitter->AddPoint(x,y,1); // add values to LinearFitter
     i++;
   }

 }  
 fitter->Eval();
 fitter->GetParameters(param);

 fitter->~TLinearFitter();

 return param[2]; // return vertical (Y) tempGradient in [K/cm]
  
}

//_____________________________________________________________________________
TLinearFitter *AliTPCTempMap::GetLinearFitter(Int_t type, Int_t side, TTimeStamp &stamp)
{
  //
  // absolute time stamp used
  // see AliTPCTempMap::GetLinearFitter(Int_t type, Int_t side, UInt_t timeSec) for details
  //
  Int_t timeSec = stamp.GetSec()-fTempArray->GetStartTime().GetSec();
  return GetLinearFitter(type,side,timeSec);
}

//_____________________________________________________________________________
TLinearFitter *AliTPCTempMap::GetLinearFitter(Int_t type, Int_t side, UInt_t timeSec)
{
  // 
  // Creates a TlinearFitter object for the desired region of the TPC 
  // (via choosen type and side of TPC temperature sensors) at a given 
  // timeSec (in secounds) after start time
  // type: 0 ... ReadOutChambers (ROC)
  //       1 ... OuterContainmentVessel (OFC)
  //       2 ... InnerContainmentVessel (IFC) + ThermalScreener (TS)
  //       3 ... Within the TPC (DriftVolume) (TPC)
  //       4 ... Only InnerContainmentVessel (IFC) 
  // side: Can be choosen for type 0 and 3 (otherwise it will be ignored in 
  //       in order to get all temperature sensors of interest)
  //       0 ... Shaft Side (A)
  //       1 ... Muon Side (C)
  // 

  TLinearFitter *fitter = new TLinearFitter(3);
  Double_t x[3]={0};
  Double_t y = 0;
  const Float_t kMaxDelta=0.5;
  
  if (type == 1 || type == 2 || type == 4) {
    fitter->SetFormula("x0++x1++TMath::Sin(x2)"); // returns Z,Y gradient
  } else {
    fitter->SetFormula("x0++x1++x2"); // returns X,Y gradient
  }

  Int_t i = 0;
  Int_t nsensors = fTempArray->NumSensors();

  Float_t temps[1000];
  for (Int_t isensor=0; isensor<nsensors; isensor++) { // loop over all sensors
    AliTPCSensorTemp *entry = (AliTPCSensorTemp*)fTempArray->GetSensorNum(isensor);
    if (entry->GetType()==type && entry->GetSide()==side){
      Float_t temperature= fTempArray->GetValue(timeSec,isensor); // get temperature value
      if (IsOK(temperature)) {temps[i]=temperature; i++;}
    }
  }
  Float_t medianTemp = TMath::Median(i, temps);
  if (i<3) return 0;
  Float_t rmsTemp = TMath::RMS(i, temps);
  
  i=0;
  
  for (Int_t isensor=0; isensor<nsensors; isensor++) { // loop over all sensors
    AliTPCSensorTemp *entry = (AliTPCSensorTemp*)fTempArray->GetSensorNum(isensor);
    
    if (type==0 || type==3) { // 'side' information used
      if (entry->GetType()==type && entry->GetSide()==side) {
	x[0]=1;
	x[1]=entry->GetX();
	x[2]=entry->GetY();    
	y = fTempArray->GetValue(timeSec,isensor); // get temperature value
	if (TMath::Abs(y-medianTemp)>kMaxDelta+4.*rmsTemp) continue;
	if (IsOK(y)) fitter->AddPoint(x,y,1); // add values to LinearFitter
	i++;
      }
    } else if (type==2) { // in case of IFC also usage of TS values
      if ((entry->GetType()==2) || (entry->GetType()==5)) {
	x[0]=1;
	x[1]=entry->GetZ();
	x[2]=entry->GetPhi();    
	y = fTempArray->GetValue(timeSec,isensor);
	if (TMath::Abs(y-medianTemp)>kMaxDelta+4.*rmsTemp) continue;
	if (IsOK(y)) fitter->AddPoint(x,y,1); 
	i++;
      }
    } else if (type==1){
      if (entry->GetType()==type) {
	x[0]=1;
	x[1]=entry->GetZ();
	x[2]=entry->GetPhi();    
	y = fTempArray->GetValue(timeSec,isensor);
	if (TMath::Abs(y-medianTemp)>kMaxDelta+4.*rmsTemp) continue;
	if (IsOK(y)) fitter->AddPoint(x,y,1);
	i++;	
      }
    } else if (type==4) { // ONLY IFC
      if (entry->GetType()==2) {
	x[0]=1;
	x[1]=entry->GetZ();
	x[2]=entry->GetPhi();    
	y = fTempArray->GetValue(timeSec,isensor);
	if (TMath::Abs(y-medianTemp)>kMaxDelta+4.*rmsTemp) continue;
	if (IsOK(y)) fitter->AddPoint(x,y,1); 
	i++;
      }
    }
  }  
  fitter->Eval();
  //fitter->EvalRobust(0.9); // Evaluates fitter
  

  return fitter; 

  // returns TLinearFitter object where Chi2, Fitparameters and residuals can 
  // be extracted via usual memberfunctions
  // example: fitter->GetParameters(param)
  // In case of type IFC or OFC, the parameters are the gradients in 
  // Z and Y direction (see fitformula)
  // Caution: Parameters are [K/cm] except Y at IFC,OFC ([K/radius]) 
}

//_____________________________________________________________________________

TGraph2D *AliTPCTempMap::GetTempMapsViaSensors(Int_t type, Int_t side, UInt_t timeSec)
{
  // 
  // Creates a TGraph2D object for the desired region of the TPC 
  // (via choosen type and side of TPC temperature sensors) at a given 
  // timeSec (in secounds) after start time
  // type: 0 ... ReadOutChambers (ROC)
  //       1 ... OuterContainmentVessel (OFC)
  //       2 ... InnerContainmentVessel (IFC) + ThermalScreener (TS)
  //       3 ... Within the TPC (DriftVolume) (TPC)
  // side: Can be choosen for type 0 and 3 (otherwise it will be ignored in 
  //       in order to get all temperature sensors of interest)
  //       0 ... A - side
  //       1 ... C - side
  // 

  TGraph2D *graph2D = new TGraph2D();

  Int_t i = 0;
  
  Int_t nsensors = fTempArray->NumSensors();
  for (Int_t isensor=0; isensor<nsensors; isensor++) { // loop over all sensors
    AliTPCSensorTemp *entry = (AliTPCSensorTemp*)fTempArray->GetSensorNum(isensor);

    Double_t x, y, z, r, phi, tempValue;
    x = entry->GetX();
    y = entry->GetY();
    z = entry->GetZ();
    r = entry->GetR();
    phi = entry->GetPhi();
    tempValue = fTempArray->GetValue(timeSec,isensor);
    //    printf("%d type %d: x=%lf y=%lf temp=%lf\n",isensor,entry->GetType(),x,y, tempValue);
    if (type==0 || type==3) { // 'side' information used
      if (entry->GetType()==type && entry->GetSide()==side) {
	graph2D->SetPoint(i,x,y,tempValue);
	i++;
      }
    } else if (type==2) { // in case of IFC also usage of TS values
      if (entry->GetType()==2 || entry->GetType()==5) {
	graph2D->SetPoint(i,z,phi,tempValue);
	i++;
      }
    } else if (type==1){
      if (entry->GetType()==type) {
	graph2D->SetPoint(i,z,phi,tempValue);
	i++;
      }
    }
  }  
  
  if (type==0 || type==3) {
    graph2D->GetXaxis()->SetTitle("X[cm]");
    graph2D->GetYaxis()->SetTitle("Y[cm]");
    if (type==0 && side==0) {
      graph2D->SetTitle("ROC A side");
    } else if (type==0 && side==1) {
      graph2D->SetTitle("ROC C side");
    } else if (type==3 && side==0) {
      graph2D->SetTitle("TPC A side (Inside the TPC)");
    } else if (type==3 && side==1) {
      graph2D->SetTitle("TPC C side (Inside the TPC)");
    }
  } else if (type==1 || type==2) {
    graph2D->GetXaxis()->SetTitle("Z[cm]");
    graph2D->GetYaxis()->SetTitle("Phi[RAD]");
    if (type==1) {
      graph2D->SetTitle("Outer Containment Vessel");
    } else if (type==2) {
      graph2D->SetTitle("Inner Containment Vessel");
    }
  }

  if (!graph2D->GetN()) {
    printf("Returned TGraph2D is empty: check type and side values\n");
  }

  graph2D->GetXaxis()->SetLabelOffset(0.0);
  graph2D->GetYaxis()->SetLabelOffset(0.005);
  graph2D->GetZaxis()->SetLabelOffset(-0.04);
  

  return graph2D; // returns TGgraph2D object
  
}


//_____________________________________________________________________________

TGraph *AliTPCTempMap::MakeGraphGradient(Int_t axis, Int_t side, Int_t nPoints)
{  
  //
  // Make graph from start time to end time of TempGradient in axis direction
  // axis: 0 ... horizontal Temperature Gradient (X)
  //       1 ... vertical Temperature Gradient (Y)
  //       2 ... longitudenal Temperature Gradient (Z) (side is ignored) 
  //             z gradient value based on OFC temperature sensors
  //             Caution!: better z gradient values through difference between 
  //             param[0] A- and param[0] C-side !
  // side for X and Y gradient: 
  //       0 ... Shaft Side (A)
  //       1 ... Muon Side (C)
  //
  
  TVectorD param(3);
  TLinearFitter *fitter = new TLinearFitter(3);

  UInt_t fStartTime = fTempArray->AliTPCSensorTempArray::GetStartTime();
  UInt_t fEndTime = fTempArray->AliTPCSensorTempArray::GetEndTime();
  
  UInt_t stepTime = (fEndTime-fStartTime)/nPoints;

  Double_t *x = new Double_t[nPoints];
  Double_t *y = new Double_t[nPoints];
  for (Int_t ip=0; ip<nPoints; ip++) {
    x[ip] = fStartTime+ip*stepTime;
    if (axis==2) {// Gradient in Z direction (based on OFC tempSensors)
      fitter = GetLinearFitter(1, side, ip*stepTime);
    } else {// Gradient in X or Y direction (based on TPC tempSensors)
      fitter = GetLinearFitter(3, side, ip*stepTime);
    }
    fitter->GetParameters(param);
    // multiplied by 500 since TempGradient is in [K/cm] 
    // (TPC diameter and length ~500cm)
    if (axis==1) { // Y axis
      y[ip] = param[2]*500;
    } else { // X axis
      y[ip] = param[1]*500;
    }
  }

  TGraph *graph = new TGraph(nPoints,x,y);

  fitter->~TLinearFitter(); 
  delete [] x;
  delete [] y;

  graph->GetXaxis()->SetTimeDisplay(1);
  graph->GetXaxis()->SetLabelOffset(0.02);
  graph->GetXaxis()->SetTimeFormat("#splitline{%d/%m}{%H:%M}");

  return graph;
}


//_____________________________________________________________________________
Double_t AliTPCTempMap::GetTemperature(Double_t x, Double_t y, Double_t z, TTimeStamp &stamp)
{
  //
  // absolute time stamp used
  // see also Double_t AliTPCTempMap::GetTemperature(Double_t x, Double_t y, Double_t z, UInt_t timeSec) for details
  //

  Int_t timeSec = stamp.GetSec()-fTempArray->GetStartTime().GetSec();
  return GetTemperature(x, y, z, timeSec);
}

//_____________________________________________________________________________

Double_t AliTPCTempMap::GetTemperature(Double_t x, Double_t y, Double_t z, UInt_t timeSec)
{  
  //
  // Returns estimated Temperature at given position (x,y,z[cm]) at given time 
  // (timeSec) after starttime
  // Method: so far just a linear interpolation between Linar fits of 
  //         the TPC temperature sensors
  //         FIXME: 'Educated Fit' through FiniteElement Simulation results!
  // FIXXME: Return 0? if x,y,z out of range
  //
  
  TVectorD paramA(3), paramC(3);
  TLinearFitter *fitterA = 0;
  TLinearFitter *fitterC = 0;

  fitterA = GetLinearFitter(3, 0, timeSec);
  fitterA->GetParameters(paramA);
  fitterC = GetLinearFitter(3, 1, timeSec);
  fitterC->GetParameters(paramC);

  Double_t fvalA = paramA[0]+paramA[1]*x+paramA[2]*y;
  Double_t fvalC = paramC[0]+paramC[1]*x+paramC[2]*y;

  Double_t k = (fvalA-fvalC)/(2*247);
  Double_t tempValue = fvalC+(fvalA-fvalC)/2+k*z;

  delete fitterA;
  delete fitterC;

  return tempValue;

}


Bool_t  AliTPCTempMap::IsOK(Float_t value){
  //
  // checks if value is within a certain range
  //
  const Float_t kMinT=15;
  const Float_t kMaxT=25;
  return (value>kMinT && value<kMaxT);
}
 AliTPCTempMap.cxx:1
 AliTPCTempMap.cxx:2
 AliTPCTempMap.cxx:3
 AliTPCTempMap.cxx:4
 AliTPCTempMap.cxx:5
 AliTPCTempMap.cxx:6
 AliTPCTempMap.cxx:7
 AliTPCTempMap.cxx:8
 AliTPCTempMap.cxx:9
 AliTPCTempMap.cxx:10
 AliTPCTempMap.cxx:11
 AliTPCTempMap.cxx:12
 AliTPCTempMap.cxx:13
 AliTPCTempMap.cxx:14
 AliTPCTempMap.cxx:15
 AliTPCTempMap.cxx:16
 AliTPCTempMap.cxx:17
 AliTPCTempMap.cxx:18
 AliTPCTempMap.cxx:19
 AliTPCTempMap.cxx:20
 AliTPCTempMap.cxx:21
 AliTPCTempMap.cxx:22
 AliTPCTempMap.cxx:23
 AliTPCTempMap.cxx:24
 AliTPCTempMap.cxx:25
 AliTPCTempMap.cxx:26
 AliTPCTempMap.cxx:27
 AliTPCTempMap.cxx:28
 AliTPCTempMap.cxx:29
 AliTPCTempMap.cxx:30
 AliTPCTempMap.cxx:31
 AliTPCTempMap.cxx:32
 AliTPCTempMap.cxx:33
 AliTPCTempMap.cxx:34
 AliTPCTempMap.cxx:35
 AliTPCTempMap.cxx:36
 AliTPCTempMap.cxx:37
 AliTPCTempMap.cxx:38
 AliTPCTempMap.cxx:39
 AliTPCTempMap.cxx:40
 AliTPCTempMap.cxx:41
 AliTPCTempMap.cxx:42
 AliTPCTempMap.cxx:43
 AliTPCTempMap.cxx:44
 AliTPCTempMap.cxx:45
 AliTPCTempMap.cxx:46
 AliTPCTempMap.cxx:47
 AliTPCTempMap.cxx:48
 AliTPCTempMap.cxx:49
 AliTPCTempMap.cxx:50
 AliTPCTempMap.cxx:51
 AliTPCTempMap.cxx:52
 AliTPCTempMap.cxx:53
 AliTPCTempMap.cxx:54
 AliTPCTempMap.cxx:55
 AliTPCTempMap.cxx:56
 AliTPCTempMap.cxx:57
 AliTPCTempMap.cxx:58
 AliTPCTempMap.cxx:59
 AliTPCTempMap.cxx:60
 AliTPCTempMap.cxx:61
 AliTPCTempMap.cxx:62
 AliTPCTempMap.cxx:63
 AliTPCTempMap.cxx:64
 AliTPCTempMap.cxx:65
 AliTPCTempMap.cxx:66
 AliTPCTempMap.cxx:67
 AliTPCTempMap.cxx:68
 AliTPCTempMap.cxx:69
 AliTPCTempMap.cxx:70
 AliTPCTempMap.cxx:71
 AliTPCTempMap.cxx:72
 AliTPCTempMap.cxx:73
 AliTPCTempMap.cxx:74
 AliTPCTempMap.cxx:75
 AliTPCTempMap.cxx:76
 AliTPCTempMap.cxx:77
 AliTPCTempMap.cxx:78
 AliTPCTempMap.cxx:79
 AliTPCTempMap.cxx:80
 AliTPCTempMap.cxx:81
 AliTPCTempMap.cxx:82
 AliTPCTempMap.cxx:83
 AliTPCTempMap.cxx:84
 AliTPCTempMap.cxx:85
 AliTPCTempMap.cxx:86
 AliTPCTempMap.cxx:87
 AliTPCTempMap.cxx:88
 AliTPCTempMap.cxx:89
 AliTPCTempMap.cxx:90
 AliTPCTempMap.cxx:91
 AliTPCTempMap.cxx:92
 AliTPCTempMap.cxx:93
 AliTPCTempMap.cxx:94
 AliTPCTempMap.cxx:95
 AliTPCTempMap.cxx:96
 AliTPCTempMap.cxx:97
 AliTPCTempMap.cxx:98
 AliTPCTempMap.cxx:99
 AliTPCTempMap.cxx:100
 AliTPCTempMap.cxx:101
 AliTPCTempMap.cxx:102
 AliTPCTempMap.cxx:103
 AliTPCTempMap.cxx:104
 AliTPCTempMap.cxx:105
 AliTPCTempMap.cxx:106
 AliTPCTempMap.cxx:107
 AliTPCTempMap.cxx:108
 AliTPCTempMap.cxx:109
 AliTPCTempMap.cxx:110
 AliTPCTempMap.cxx:111
 AliTPCTempMap.cxx:112
 AliTPCTempMap.cxx:113
 AliTPCTempMap.cxx:114
 AliTPCTempMap.cxx:115
 AliTPCTempMap.cxx:116
 AliTPCTempMap.cxx:117
 AliTPCTempMap.cxx:118
 AliTPCTempMap.cxx:119
 AliTPCTempMap.cxx:120
 AliTPCTempMap.cxx:121
 AliTPCTempMap.cxx:122
 AliTPCTempMap.cxx:123
 AliTPCTempMap.cxx:124
 AliTPCTempMap.cxx:125
 AliTPCTempMap.cxx:126
 AliTPCTempMap.cxx:127
 AliTPCTempMap.cxx:128
 AliTPCTempMap.cxx:129
 AliTPCTempMap.cxx:130
 AliTPCTempMap.cxx:131
 AliTPCTempMap.cxx:132
 AliTPCTempMap.cxx:133
 AliTPCTempMap.cxx:134
 AliTPCTempMap.cxx:135
 AliTPCTempMap.cxx:136
 AliTPCTempMap.cxx:137
 AliTPCTempMap.cxx:138
 AliTPCTempMap.cxx:139
 AliTPCTempMap.cxx:140
 AliTPCTempMap.cxx:141
 AliTPCTempMap.cxx:142
 AliTPCTempMap.cxx:143
 AliTPCTempMap.cxx:144
 AliTPCTempMap.cxx:145
 AliTPCTempMap.cxx:146
 AliTPCTempMap.cxx:147
 AliTPCTempMap.cxx:148
 AliTPCTempMap.cxx:149
 AliTPCTempMap.cxx:150
 AliTPCTempMap.cxx:151
 AliTPCTempMap.cxx:152
 AliTPCTempMap.cxx:153
 AliTPCTempMap.cxx:154
 AliTPCTempMap.cxx:155
 AliTPCTempMap.cxx:156
 AliTPCTempMap.cxx:157
 AliTPCTempMap.cxx:158
 AliTPCTempMap.cxx:159
 AliTPCTempMap.cxx:160
 AliTPCTempMap.cxx:161
 AliTPCTempMap.cxx:162
 AliTPCTempMap.cxx:163
 AliTPCTempMap.cxx:164
 AliTPCTempMap.cxx:165
 AliTPCTempMap.cxx:166
 AliTPCTempMap.cxx:167
 AliTPCTempMap.cxx:168
 AliTPCTempMap.cxx:169
 AliTPCTempMap.cxx:170
 AliTPCTempMap.cxx:171
 AliTPCTempMap.cxx:172
 AliTPCTempMap.cxx:173
 AliTPCTempMap.cxx:174
 AliTPCTempMap.cxx:175
 AliTPCTempMap.cxx:176
 AliTPCTempMap.cxx:177
 AliTPCTempMap.cxx:178
 AliTPCTempMap.cxx:179
 AliTPCTempMap.cxx:180
 AliTPCTempMap.cxx:181
 AliTPCTempMap.cxx:182
 AliTPCTempMap.cxx:183
 AliTPCTempMap.cxx:184
 AliTPCTempMap.cxx:185
 AliTPCTempMap.cxx:186
 AliTPCTempMap.cxx:187
 AliTPCTempMap.cxx:188
 AliTPCTempMap.cxx:189
 AliTPCTempMap.cxx:190
 AliTPCTempMap.cxx:191
 AliTPCTempMap.cxx:192
 AliTPCTempMap.cxx:193
 AliTPCTempMap.cxx:194
 AliTPCTempMap.cxx:195
 AliTPCTempMap.cxx:196
 AliTPCTempMap.cxx:197
 AliTPCTempMap.cxx:198
 AliTPCTempMap.cxx:199
 AliTPCTempMap.cxx:200
 AliTPCTempMap.cxx:201
 AliTPCTempMap.cxx:202
 AliTPCTempMap.cxx:203
 AliTPCTempMap.cxx:204
 AliTPCTempMap.cxx:205
 AliTPCTempMap.cxx:206
 AliTPCTempMap.cxx:207
 AliTPCTempMap.cxx:208
 AliTPCTempMap.cxx:209
 AliTPCTempMap.cxx:210
 AliTPCTempMap.cxx:211
 AliTPCTempMap.cxx:212
 AliTPCTempMap.cxx:213
 AliTPCTempMap.cxx:214
 AliTPCTempMap.cxx:215
 AliTPCTempMap.cxx:216
 AliTPCTempMap.cxx:217
 AliTPCTempMap.cxx:218
 AliTPCTempMap.cxx:219
 AliTPCTempMap.cxx:220
 AliTPCTempMap.cxx:221
 AliTPCTempMap.cxx:222
 AliTPCTempMap.cxx:223
 AliTPCTempMap.cxx:224
 AliTPCTempMap.cxx:225
 AliTPCTempMap.cxx:226
 AliTPCTempMap.cxx:227
 AliTPCTempMap.cxx:228
 AliTPCTempMap.cxx:229
 AliTPCTempMap.cxx:230
 AliTPCTempMap.cxx:231
 AliTPCTempMap.cxx:232
 AliTPCTempMap.cxx:233
 AliTPCTempMap.cxx:234
 AliTPCTempMap.cxx:235
 AliTPCTempMap.cxx:236
 AliTPCTempMap.cxx:237
 AliTPCTempMap.cxx:238
 AliTPCTempMap.cxx:239
 AliTPCTempMap.cxx:240
 AliTPCTempMap.cxx:241
 AliTPCTempMap.cxx:242
 AliTPCTempMap.cxx:243
 AliTPCTempMap.cxx:244
 AliTPCTempMap.cxx:245
 AliTPCTempMap.cxx:246
 AliTPCTempMap.cxx:247
 AliTPCTempMap.cxx:248
 AliTPCTempMap.cxx:249
 AliTPCTempMap.cxx:250
 AliTPCTempMap.cxx:251
 AliTPCTempMap.cxx:252
 AliTPCTempMap.cxx:253
 AliTPCTempMap.cxx:254
 AliTPCTempMap.cxx:255
 AliTPCTempMap.cxx:256
 AliTPCTempMap.cxx:257
 AliTPCTempMap.cxx:258
 AliTPCTempMap.cxx:259
 AliTPCTempMap.cxx:260
 AliTPCTempMap.cxx:261
 AliTPCTempMap.cxx:262
 AliTPCTempMap.cxx:263
 AliTPCTempMap.cxx:264
 AliTPCTempMap.cxx:265
 AliTPCTempMap.cxx:266
 AliTPCTempMap.cxx:267
 AliTPCTempMap.cxx:268
 AliTPCTempMap.cxx:269
 AliTPCTempMap.cxx:270
 AliTPCTempMap.cxx:271
 AliTPCTempMap.cxx:272
 AliTPCTempMap.cxx:273
 AliTPCTempMap.cxx:274
 AliTPCTempMap.cxx:275
 AliTPCTempMap.cxx:276
 AliTPCTempMap.cxx:277
 AliTPCTempMap.cxx:278
 AliTPCTempMap.cxx:279
 AliTPCTempMap.cxx:280
 AliTPCTempMap.cxx:281
 AliTPCTempMap.cxx:282
 AliTPCTempMap.cxx:283
 AliTPCTempMap.cxx:284
 AliTPCTempMap.cxx:285
 AliTPCTempMap.cxx:286
 AliTPCTempMap.cxx:287
 AliTPCTempMap.cxx:288
 AliTPCTempMap.cxx:289
 AliTPCTempMap.cxx:290
 AliTPCTempMap.cxx:291
 AliTPCTempMap.cxx:292
 AliTPCTempMap.cxx:293
 AliTPCTempMap.cxx:294
 AliTPCTempMap.cxx:295
 AliTPCTempMap.cxx:296
 AliTPCTempMap.cxx:297
 AliTPCTempMap.cxx:298
 AliTPCTempMap.cxx:299
 AliTPCTempMap.cxx:300
 AliTPCTempMap.cxx:301
 AliTPCTempMap.cxx:302
 AliTPCTempMap.cxx:303
 AliTPCTempMap.cxx:304
 AliTPCTempMap.cxx:305
 AliTPCTempMap.cxx:306
 AliTPCTempMap.cxx:307
 AliTPCTempMap.cxx:308
 AliTPCTempMap.cxx:309
 AliTPCTempMap.cxx:310
 AliTPCTempMap.cxx:311
 AliTPCTempMap.cxx:312
 AliTPCTempMap.cxx:313
 AliTPCTempMap.cxx:314
 AliTPCTempMap.cxx:315
 AliTPCTempMap.cxx:316
 AliTPCTempMap.cxx:317
 AliTPCTempMap.cxx:318
 AliTPCTempMap.cxx:319
 AliTPCTempMap.cxx:320
 AliTPCTempMap.cxx:321
 AliTPCTempMap.cxx:322
 AliTPCTempMap.cxx:323
 AliTPCTempMap.cxx:324
 AliTPCTempMap.cxx:325
 AliTPCTempMap.cxx:326
 AliTPCTempMap.cxx:327
 AliTPCTempMap.cxx:328
 AliTPCTempMap.cxx:329
 AliTPCTempMap.cxx:330
 AliTPCTempMap.cxx:331
 AliTPCTempMap.cxx:332
 AliTPCTempMap.cxx:333
 AliTPCTempMap.cxx:334
 AliTPCTempMap.cxx:335
 AliTPCTempMap.cxx:336
 AliTPCTempMap.cxx:337
 AliTPCTempMap.cxx:338
 AliTPCTempMap.cxx:339
 AliTPCTempMap.cxx:340
 AliTPCTempMap.cxx:341
 AliTPCTempMap.cxx:342
 AliTPCTempMap.cxx:343
 AliTPCTempMap.cxx:344
 AliTPCTempMap.cxx:345
 AliTPCTempMap.cxx:346
 AliTPCTempMap.cxx:347
 AliTPCTempMap.cxx:348
 AliTPCTempMap.cxx:349
 AliTPCTempMap.cxx:350
 AliTPCTempMap.cxx:351
 AliTPCTempMap.cxx:352
 AliTPCTempMap.cxx:353
 AliTPCTempMap.cxx:354
 AliTPCTempMap.cxx:355
 AliTPCTempMap.cxx:356
 AliTPCTempMap.cxx:357
 AliTPCTempMap.cxx:358
 AliTPCTempMap.cxx:359
 AliTPCTempMap.cxx:360
 AliTPCTempMap.cxx:361
 AliTPCTempMap.cxx:362
 AliTPCTempMap.cxx:363
 AliTPCTempMap.cxx:364
 AliTPCTempMap.cxx:365
 AliTPCTempMap.cxx:366
 AliTPCTempMap.cxx:367
 AliTPCTempMap.cxx:368
 AliTPCTempMap.cxx:369
 AliTPCTempMap.cxx:370
 AliTPCTempMap.cxx:371
 AliTPCTempMap.cxx:372
 AliTPCTempMap.cxx:373
 AliTPCTempMap.cxx:374
 AliTPCTempMap.cxx:375
 AliTPCTempMap.cxx:376
 AliTPCTempMap.cxx:377
 AliTPCTempMap.cxx:378
 AliTPCTempMap.cxx:379
 AliTPCTempMap.cxx:380
 AliTPCTempMap.cxx:381
 AliTPCTempMap.cxx:382
 AliTPCTempMap.cxx:383
 AliTPCTempMap.cxx:384
 AliTPCTempMap.cxx:385
 AliTPCTempMap.cxx:386
 AliTPCTempMap.cxx:387
 AliTPCTempMap.cxx:388
 AliTPCTempMap.cxx:389
 AliTPCTempMap.cxx:390
 AliTPCTempMap.cxx:391
 AliTPCTempMap.cxx:392
 AliTPCTempMap.cxx:393
 AliTPCTempMap.cxx:394
 AliTPCTempMap.cxx:395
 AliTPCTempMap.cxx:396
 AliTPCTempMap.cxx:397
 AliTPCTempMap.cxx:398
 AliTPCTempMap.cxx:399
 AliTPCTempMap.cxx:400
 AliTPCTempMap.cxx:401
 AliTPCTempMap.cxx:402
 AliTPCTempMap.cxx:403
 AliTPCTempMap.cxx:404
 AliTPCTempMap.cxx:405
 AliTPCTempMap.cxx:406
 AliTPCTempMap.cxx:407
 AliTPCTempMap.cxx:408
 AliTPCTempMap.cxx:409
 AliTPCTempMap.cxx:410
 AliTPCTempMap.cxx:411
 AliTPCTempMap.cxx:412
 AliTPCTempMap.cxx:413
 AliTPCTempMap.cxx:414
 AliTPCTempMap.cxx:415
 AliTPCTempMap.cxx:416
 AliTPCTempMap.cxx:417
 AliTPCTempMap.cxx:418
 AliTPCTempMap.cxx:419
 AliTPCTempMap.cxx:420
 AliTPCTempMap.cxx:421
 AliTPCTempMap.cxx:422
 AliTPCTempMap.cxx:423
 AliTPCTempMap.cxx:424
 AliTPCTempMap.cxx:425
 AliTPCTempMap.cxx:426
 AliTPCTempMap.cxx:427
 AliTPCTempMap.cxx:428
 AliTPCTempMap.cxx:429
 AliTPCTempMap.cxx:430
 AliTPCTempMap.cxx:431
 AliTPCTempMap.cxx:432
 AliTPCTempMap.cxx:433
 AliTPCTempMap.cxx:434
 AliTPCTempMap.cxx:435
 AliTPCTempMap.cxx:436
 AliTPCTempMap.cxx:437
 AliTPCTempMap.cxx:438
 AliTPCTempMap.cxx:439
 AliTPCTempMap.cxx:440
 AliTPCTempMap.cxx:441
 AliTPCTempMap.cxx:442
 AliTPCTempMap.cxx:443
 AliTPCTempMap.cxx:444
 AliTPCTempMap.cxx:445
 AliTPCTempMap.cxx:446
 AliTPCTempMap.cxx:447
 AliTPCTempMap.cxx:448
 AliTPCTempMap.cxx:449
 AliTPCTempMap.cxx:450
 AliTPCTempMap.cxx:451
 AliTPCTempMap.cxx:452
 AliTPCTempMap.cxx:453
 AliTPCTempMap.cxx:454
 AliTPCTempMap.cxx:455
 AliTPCTempMap.cxx:456
 AliTPCTempMap.cxx:457