]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TPC/AliTPCcalibDButil.cxx
moving AliEMCALGeoUtils to AliEMCALGeometry
[u/mrichter/AliRoot.git] / TPC / AliTPCcalibDButil.cxx
index fbf75a13cd13524f928d74d23307ca441483600f..714ebf09bff07a308857750501724bf8944bac4e 100644 (file)
@@ -40,6 +40,7 @@
 #include <AliCDBEntry.h>
 #include <AliCDBManager.h>
 #include <AliCDBId.h>
+#include <AliSplineFit.h>
 #include "AliTPCcalibDB.h"
 #include "AliTPCCalPad.h"
 #include "AliTPCCalROC.h"
@@ -1353,7 +1354,7 @@ Int_t AliTPCcalibDButil::GetCurrentReferenceRun(const char* type) const {
   if (!fCurrentRefMap) return -2;
   TObjString *str=dynamic_cast<TObjString*>(fCurrentRefMap->GetValue(type));
   if (!str) return -2;
-  return (const Int_t)str->GetString().Atoi();
+  return (Int_t)str->GetString().Atoi();
 }
 //_____________________________________________________________________________________
 Int_t AliTPCcalibDButil::GetReferenceRun(const char* type) const{
@@ -1363,7 +1364,7 @@ Int_t AliTPCcalibDButil::GetReferenceRun(const char* type) const{
   if (!fRefMap) return -1;
   TObjString *str=dynamic_cast<TObjString*>(fRefMap->GetValue(type));
   if (!str) return -1;
-  return (const Int_t)str->GetString().Atoi();
+  return (Int_t)str->GetString().Atoi();
 }
 //_____________________________________________________________________________________
 AliTPCCalPad *AliTPCcalibDButil::CreateCEOutlyerMap( Int_t & noutliersCE, AliTPCCalPad * const ceOut, Float_t minSignal, Float_t cutTrmsMin,  Float_t cutTrmsMax, Float_t cutMaxDistT){
@@ -1401,13 +1402,14 @@ AliTPCCalPad *AliTPCcalibDButil::CreateCEOutlyerMap( Int_t & noutliersCE, AliTPC
   Double_t rmsMedian         = fCETrms->GetMedian();
   for (UInt_t iroc=0;iroc<fCETmean->kNsec;++iroc){
     AliTPCCalROC *rocData=fCETmean->GetCalROC(iroc);
+    if (!rocData) continue;
     if (fALTROMasked) rocMasked= fALTROMasked->GetCalROC(iroc);
     AliTPCCalROC *rocOut       = out->GetCalROC(iroc);
     AliTPCCalROC *rocCEQ       = fCEQmean->GetCalROC(iroc);
     AliTPCCalROC *rocCETrms    = fCETrms->GetCalROC(iroc);
     Double_t trocMedian        = rocData->GetMedian();
     //
-    if (!rocData) {
+    if (!rocData || !rocCEQ || !rocCETrms || !rocData) {
       noutliersCE+=AliTPCROC::Instance()->GetNChannels(iroc);
       rocOut->Add(1.);
       continue;
@@ -1514,7 +1516,10 @@ AliTPCCalPad *AliTPCcalibDButil::CreatePulserOutlyerMap(Int_t &noutliersPulser,
       Float_t valTmean=rocData->GetValue(ichannel);
       Float_t valQmean=rocPulserQ->GetValue(ichannel);
       Float_t valTrms =rocPulserTrms->GetValue(ichannel);
+      Float_t valMasked =0;
+      if (rocMasked) valMasked = rocMasked->GetValue(ichannel);
       Int_t isOut=0;
+      if (valMasked>0.5) isOut=1;
       if (TMath::Abs(valTmean-rocMedianT)>cutTime) isOut=1;
       if (TMath::Abs(valQmean-rocMedianQ)>cutnRMSQ*rocRMSQ) isOut=1;
       if (TMath::Abs(valTrms-rocMedianTrms)>cutnRMSrms*rocRMSTrms) isOut=1;
@@ -1772,8 +1777,12 @@ Double_t  AliTPCcalibDButil::GetTriggerOffsetTPC(Int_t run, Int_t timeStamp, Dou
     tdelta[nused]=ccosmic-claser;
     nused++;
   }
-  if (nused<kMinPoints &&deltaT<kMaxPeriod) return  AliTPCcalibDButil::GetTriggerOffsetTPC(run, timeStamp, deltaT*2,deltaTLaser);
+  if (nused<kMinPoints &&deltaT<kMaxPeriod) {
+    delete [] tdelta;
+    return  AliTPCcalibDButil::GetTriggerOffsetTPC(run, timeStamp, deltaT*2,deltaTLaser);
+  }
   if (nused<kMinPoints) {
+    delete [] tdelta;
     printf("AliFatal: No time offset calibration available\n");
     return 0;
   }
@@ -2378,6 +2387,23 @@ Double_t AliTPCcalibDButil::EvalGraphConst(TGraph * const graph, Double_t xref){
   return graph->Eval(xref);
 }
 
+Double_t AliTPCcalibDButil::EvalGraphConst(AliSplineFit *graph, Double_t xref){
+  //
+  // Use constant interpolation outside of range also for spline fits
+  //
+  if (!graph) {
+    printf("AliTPCcalibDButil::EvalGraphConst: 0 pointer\n");
+    return 0;
+  }
+  if (graph->GetKnots()<1){
+    printf("AliTPCcalibDButil::EvalGraphConst: Empty graph");
+    return 0;
+  }
+  if (xref<graph->GetX()[0]) return graph->GetY0()[0];
+  if (xref>graph->GetX()[graph->GetKnots()-1]) return graph->GetY0()[graph->GetKnots()-1]; 
+  return graph->Eval( xref);
+}
+
 Float_t AliTPCcalibDButil::FilterSensor(AliDCSSensor * sensor, Double_t ymin, Double_t ymax, Double_t maxdy,  Double_t sigmaCut){
   //
   // Filter DCS sensor information
@@ -2616,6 +2642,7 @@ void AliTPCcalibDButil::FilterCE(Double_t deltaT, Double_t cutAbs, Double_t cutS
       continue;
     }
     TGraph* graphTS= FilterGraphMedian(graphTS0,cutSigma,medianY);    
+    if (!graphTS) continue;
     graphTS->Sort();
     AliTPCcalibDButil::SmoothGraph(graphTS,deltaT);      
     if (pcstream){
@@ -2630,7 +2657,6 @@ void AliTPCcalibDButil::FilterCE(Double_t deltaT, Double_t cutAbs, Double_t cutS
        "\n";
     }
     delete graphTS0;
-    if (!graphTS) continue;
     arrT->AddAt(graphTS,i);
     delete graph;
   }
@@ -2780,7 +2806,11 @@ Double_t AliTPCcalibDButil::GetLaserTime0(Int_t run, Int_t timeStamp, Int_t delt
   //if (index1-index0 <kMinPoints) { index1+=kMinPoints; index0-=kMinPoints;}
   if (index0<0) index0=0;
   if (index1>=npoints-1) index1=npoints-1;
-  if (index1-index0<kMinPoints) return 0;
+  if (index1-index0<kMinPoints) {
+    delete [] ylaser;
+    delete [] xlaser;
+    return 0;
+  }
   //
   //Double_t median = TMath::Median(index1-index0, &(ylaser[index0]));
     Double_t mean = TMath::Mean(index1-index0, &(ylaser[index0]));