// //
// Authors: Stefan Rossegger, Haavard Helstrup //
// //
+// Note: Obvioulsy some changes by Marian, but when ??? //
+// //
///////////////////////////////////////////////////////////////////////////////
#include "AliTPCSensorTempArray.h"
x[1]=entry->GetX();
x[2]=entry->GetY();
Double_t y = fTempArray->GetValue(timeSec,isensor); // get temperature value
- fitter->AddPoint(x,y,1); // add values to LinearFitter
+ if (IsOK(y)) fitter->AddPoint(x,y,1); // add values to LinearFitter
i++;
}
}
+//_____________________________________________________________________________
TLinearFitter *AliTPCTempMap::GetLinearFitter(Int_t type, Int_t side, TTimeStamp &stamp)
{
//
}
//_____________________________________________________________________________
-
TLinearFitter *AliTPCTempMap::GetLinearFitter(Int_t type, Int_t side, UInt_t timeSec)
{
//
//
TLinearFitter *fitter = new TLinearFitter(3);
- Double_t *x = new Double_t[3];
+ Double_t x[3]={0};
Double_t y = 0;
- const Float_t kMinT=10, kMaxT =30, kMaxDelta=0.5;
+ const Float_t kMaxDelta=0.5;
if (type == 1 || type == 2 || type == 4) {
fitter->SetFormula("x0++x1++TMath::Sin(x2)"); // returns Z,Y gradient
AliTPCSensorTemp *entry = (AliTPCSensorTemp*)fTempArray->GetSensorNum(isensor);
if (entry->GetType()==type && entry->GetSide()==side){
Float_t temperature= fTempArray->GetValue(timeSec,isensor); // get temperature value
- if (temperature>kMinT && temperature<kMaxT) {temps[i]=temperature; i++;}
+ if (IsOK(temperature)) {temps[i]=temperature; i++;}
}
}
Float_t medianTemp = TMath::Median(i, temps);
x[2]=entry->GetY();
y = fTempArray->GetValue(timeSec,isensor); // get temperature value
if (TMath::Abs(y-medianTemp)>kMaxDelta+4.*rmsTemp) continue;
- fitter->AddPoint(x,y,1); // add values to LinearFitter
+ 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
x[2]=entry->GetPhi();
y = fTempArray->GetValue(timeSec,isensor);
if (TMath::Abs(y-medianTemp)>kMaxDelta+4.*rmsTemp) continue;
- fitter->AddPoint(x,y,1);
+ if (IsOK(y)) fitter->AddPoint(x,y,1);
i++;
}
} else if (type==1){
x[2]=entry->GetPhi();
y = fTempArray->GetValue(timeSec,isensor);
if (TMath::Abs(y-medianTemp)>kMaxDelta+4.*rmsTemp) continue;
- fitter->AddPoint(x,y,1);
+ if (IsOK(y)) fitter->AddPoint(x,y,1);
i++;
}
} else if (type==4) { // ONLY IFC
x[2]=entry->GetPhi();
y = fTempArray->GetValue(timeSec,isensor);
if (TMath::Abs(y-medianTemp)>kMaxDelta+4.*rmsTemp) continue;
- fitter->AddPoint(x,y,1);
+ if (IsOK(y)) fitter->AddPoint(x,y,1);
i++;
}
}
fitter->Eval();
//fitter->EvalRobust(0.9); // Evaluates fitter
- delete [] x;
return fitter;
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) at given time
+ // 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
//
TVectorD paramA(3), paramC(3);
- TLinearFitter *fitterA = new TLinearFitter(3);
- TLinearFitter *fitterC = new TLinearFitter(3);
+ TLinearFitter *fitterA = 0;
+ TLinearFitter *fitterC = 0;
fitterA = GetLinearFitter(3, 0, timeSec);
fitterA->GetParameters(paramA);
Double_t k = (fvalA-fvalC)/(2*247);
Double_t tempValue = fvalC+(fvalA-fvalC)/2+k*z;
- fitterA->~TLinearFitter();
- fitterC->~TLinearFitter();
+ 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);
+}