]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TPC/AliTPCTempMap.cxx
Fix for infinite loop.
[u/mrichter/AliRoot.git] / TPC / AliTPCTempMap.cxx
index dfc563e5d0b9bb59bd9e1b1242c2132c5abe8848..f0f2ef7a401b860e0cc034814eaa0a2dabaf078b 100644 (file)
@@ -121,7 +121,7 @@ Double_t AliTPCTempMap::GetTempGradientY(UInt_t timeSec, Int_t side){
      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++;
    }
 
@@ -135,6 +135,7 @@ Double_t AliTPCTempMap::GetTempGradientY(UInt_t timeSec, Int_t side){
   
 }
 
+//_____________________________________________________________________________
 TLinearFitter *AliTPCTempMap::GetLinearFitter(Int_t type, Int_t side, TTimeStamp &stamp)
 {
   //
@@ -146,7 +147,6 @@ TLinearFitter *AliTPCTempMap::GetLinearFitter(Int_t type, Int_t side, TTimeStamp
 }
 
 //_____________________________________________________________________________
-
 TLinearFitter *AliTPCTempMap::GetLinearFitter(Int_t type, Int_t side, UInt_t timeSec)
 {
   // 
@@ -167,7 +167,7 @@ TLinearFitter *AliTPCTempMap::GetLinearFitter(Int_t type, Int_t side, UInt_t tim
   TLinearFitter *fitter = new TLinearFitter(3);
   Double_t *x = new Double_t[3];
   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
@@ -183,7 +183,7 @@ TLinearFitter *AliTPCTempMap::GetLinearFitter(Int_t type, Int_t side, UInt_t tim
     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);
@@ -202,7 +202,7 @@ TLinearFitter *AliTPCTempMap::GetLinearFitter(Int_t type, Int_t side, UInt_t tim
        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
@@ -212,7 +212,7 @@ TLinearFitter *AliTPCTempMap::GetLinearFitter(Int_t type, Int_t side, UInt_t tim
        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){
@@ -222,7 +222,7 @@ TLinearFitter *AliTPCTempMap::GetLinearFitter(Int_t type, Int_t side, UInt_t tim
        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
@@ -232,7 +232,7 @@ TLinearFitter *AliTPCTempMap::GetLinearFitter(Int_t type, Int_t side, UInt_t tim
        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++;
       }
     }
@@ -397,12 +397,25 @@ TGraph *AliTPCTempMap::MakeGraphGradient(Int_t axis, Int_t side, Int_t nPoints)
   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
@@ -429,5 +442,15 @@ Double_t AliTPCTempMap::GetTemperature(Double_t x, Double_t y, Double_t z, UInt_
   fitterC->~TLinearFitter();
 
   return tempValue;
+
 }
 
+
+Bool_t  AliTPCTempMap::IsOK(Float_t value){
+  //
+  //
+  //
+  const Float_t kMinT=15;
+  const Float_t kMaxT=25;
+  return (value>kMinT && value<kMaxT);
+}