]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TPC/AliTPCcalibDB.cxx
undo previous changes
[u/mrichter/AliRoot.git] / TPC / AliTPCcalibDB.cxx
index 2edcfc1ded0db956a04309cb93cc4f139d14e6f9..aabccafc569ad811bedf1f072215d084081793d0 100644 (file)
@@ -124,7 +124,7 @@ class AliTPCCalDet;
 #include "AliTPCCalibVdrift.h"
 #include "AliTPCCalibRaw.h"
 #include "AliTPCParam.h"
-
+#include "AliTPCCorrection.h"
 #include "AliTPCPreprocessorOnline.h"
 
 
@@ -179,6 +179,8 @@ AliTPCcalibDB::AliTPCcalibDB():
   fDedxGainFactor(0),
   fPadTime0(0),
   fDistortionMap(0),
+  fComposedCorrection(0),
+  fComposedCorrectionArray(0),
   fPadNoise(0),
   fPedestals(0),
   fCalibRaw(0),
@@ -207,6 +209,7 @@ AliTPCcalibDB::AliTPCcalibDB():
   // constructor
   //  
   //
+  fgInstance=this;
   Update();    // temporary
 }
 
@@ -219,6 +222,8 @@ AliTPCcalibDB::AliTPCcalibDB(const AliTPCcalibDB& ):
   fDedxGainFactor(0),
   fPadTime0(0),
   fDistortionMap(0),
+  fComposedCorrection(0),
+  fComposedCorrectionArray(0),
   fPadNoise(0),
   fPedestals(0),
   fCalibRaw(0),
@@ -268,7 +273,12 @@ AliTPCcalibDB::~AliTPCcalibDB()
   //
   
 }
-
+AliTPCCalPad* AliTPCcalibDB::GetDistortionMap(Int_t i) const {
+  //
+  // get distortion map - due E field distortions
+  //
+  return (fDistortionMap) ? (AliTPCCalPad*)fDistortionMap->At(i):0;
+}
 
 //_____________________________________________________________________________
 AliCDBEntry* AliTPCcalibDB::GetCDBEntry(const char* cdbPath)
@@ -319,7 +329,7 @@ void AliTPCcalibDB::Update(){
     entry->SetOwner(kTRUE);
     fPadGainFactor = (AliTPCCalPad*)entry->GetObject();
   }else{
-    AliFatal("TPC - Missing calibration entry")
+    AliFatal("TPC - Missing calibration entry TPC/Calib/PadGainFactor")
   }
   //
   entry          = GetCDBEntry("TPC/Calib/TimeGain");
@@ -328,7 +338,7 @@ void AliTPCcalibDB::Update(){
     entry->SetOwner(kTRUE);
     fTimeGainSplines = (TObjArray*)entry->GetObject();
   }else{
-    AliFatal("TPC - Missing calibration entry")
+    AliFatal("TPC - Missing calibration entry TPC/Calib/Timegain")
   }
   //
   entry          = GetCDBEntry("TPC/Calib/GainFactorDedx");
@@ -336,7 +346,7 @@ void AliTPCcalibDB::Update(){
     entry->SetOwner(kTRUE);
     fDedxGainFactor = (AliTPCCalPad*)entry->GetObject();
   }else{
-    AliFatal("TPC - Missing calibration entry")
+    AliFatal("TPC - Missing calibration entry TPC/Calib/gainFactordEdx")
   }
   //
   entry          = GetCDBEntry("TPC/Calib/PadTime0");
@@ -352,7 +362,7 @@ void AliTPCcalibDB::Update(){
   if (entry){
     //if (fPadTime0) delete fPadTime0;
     entry->SetOwner(kTRUE);
-    fDistortionMap =(TObjArray*)entry->GetObject();
+    fDistortionMap =dynamic_cast<TObjArray*>(entry->GetObject());
   }else{
     //AliFatal("TPC - Missing calibration entry")
   }
@@ -389,7 +399,7 @@ void AliTPCcalibDB::Update(){
     entry->SetOwner(kTRUE);
     fParam = (AliTPCParam*)(entry->GetObject()->Clone());
   }else{
-    AliFatal("TPC - Missing calibration entry")
+    AliFatal("TPC - Missing calibration entry TPC/Calib/Parameters")
   }
 
   entry          = GetCDBEntry("TPC/Calib/ClusterParam");
@@ -444,8 +454,25 @@ void AliTPCcalibDB::Update(){
     //entry->SetOwner(kTRUE);
     fCTPTimeParams=dynamic_cast<AliCTPTimeParams*>(entry->GetObject());
   }else{
-    AliFatal("TPC - Missing calibration entry")
+    AliError("TPC - Missing calibration entry")
   }  
+  //TPC space point correction data
+  entry          = GetCDBEntry("TPC/Calib/Correction");
+  if (entry){
+    //entry->SetOwner(kTRUE);
+    fComposedCorrection=dynamic_cast<AliTPCCorrection*>(entry->GetObject());
+    if (fComposedCorrection) fComposedCorrection->Init();
+    fComposedCorrectionArray=dynamic_cast<TObjArray*>(entry->GetObject());
+    if (fComposedCorrectionArray){
+      for (Int_t i=0; i<fComposedCorrectionArray->GetEntries(); i++){
+       AliTPCCorrection* composedCorrection= dynamic_cast<AliTPCCorrection*>(fComposedCorrectionArray->At(i));
+       if (composedCorrection) composedCorrection->Init();
+      }
+    }
+  }else{
+    AliError("TPC - Missing calibration entry-  TPC/Calib/Correction")
+  }  
+
   //
   if (!fTransform) {
     fTransform=new AliTPCTransform(); 
@@ -476,9 +503,11 @@ void AliTPCcalibDB::UpdateNonRec(){
     fDataQA=dynamic_cast<AliTPCdataQA*>(entry->GetObject());
   }
   // High voltage
-  entry = AliCDBManager::Instance()->Get("TPC/Calib/HighVoltage",fRun);
-  if (entry)  {
-    fVoltageArray.AddAt(entry->GetObject(),fRun);
+  if (fRun>=0){
+    entry = AliCDBManager::Instance()->Get("TPC/Calib/HighVoltage",fRun);
+    if (entry)  {
+      fVoltageArray.AddAt(entry->GetObject(),fRun);
+    }
   }
 
 }
@@ -889,6 +918,7 @@ void AliTPCcalibDB::UpdateRunInformations( Int_t run, Bool_t force){
   // - > Don't use it for reconstruction - Only for Calibration studies
   //
   if (run<=0) return;
+  fRun=run;
   AliCDBEntry * entry = 0;
   if (run>= fRunList.fN){
     fRunList.Set(run*2+1);
@@ -1019,6 +1049,9 @@ AliGRPObject *AliTPCcalibDB::GetGRP(Int_t run){
   //
   // Get GRP object for given run 
   //
+  if (run>= ((Instance()->fGRPArray)).GetEntriesFast()){
+    Instance()->UpdateRunInformations(run);    
+  }
   AliGRPObject * grpRun = dynamic_cast<AliGRPObject *>((Instance()->fGRPArray).At(run));
   if (!grpRun) {
     Instance()->UpdateRunInformations(run);
@@ -1278,9 +1311,9 @@ Float_t AliTPCcalibDB::GetDCSSensorMeanValue(AliDCSSensorArray *arr, const char
     }
   }
   if (sigDigits>=0){
-    val/=10;
+    // val/=10;
     val=(Float_t)TMath::Floor(val * TMath::Power(10., sigDigits) + .5) / TMath::Power(10., sigDigits);
-    val*=10;
+    //    val*=10;
   }
   return val;
 }
@@ -1664,7 +1697,7 @@ Bool_t AliTPCcalibDB::CreateGUITree(const char* filename){
   
   //
   TString file(filename);
-  if (file.IsNull()) file=Form("guiTreeRun_%d.root",fRun);
+  if (file.IsNull()) file=Form("guiTreeRun_%lld.root",fRun);
   prep.DumpToFile(file.Data());
   return kTRUE;
 }
@@ -1726,7 +1759,7 @@ Double_t AliTPCcalibDB::GetVDriftCorrectionTime(Int_t timeStamp, Int_t run, Int_
   //
   // Notice - Extrapolation outside of calibration range  - using constant function
   //
-  Double_t result;
+  Double_t result=0;
   // mode 1  automatic mode - according to the distance to the valid calibration
   //                        -  
   Double_t deltaP=0,  driftP=0,      wP  = 0.;
@@ -1825,11 +1858,14 @@ Double_t AliTPCcalibDB::GetVDriftCorrectionGy(Int_t timeStamp, Int_t run, Int_t
   return -result/250.; //normalized before
 }
 
-AliTPCCalPad* AliTPCcalibDB::MakeDeadMap(const char* nameMappingFile) {
+AliTPCCalPad* AliTPCcalibDB::MakeDeadMap(Double_t notInMap, const char* nameMappingFile) {
 //
 //   Read list of active DDLs from OCDB entry
 //   Generate and return AliTPCCalPad containing 1 for all pads in active DDLs,
 //   0 for all pads in non-active DDLs. 
+//   For DDLs with missing status information (no DCS input point to Shuttle),
+//     the value of the AliTPCCalPad entry is determined by the parameter
+//     notInMap (default value 1)
 //
   char chinfo[1000];
    
@@ -1882,7 +1918,11 @@ AliTPCCalPad* AliTPCcalibDB::MakeDeadMap(const char* nameMappingFile) {
            Int_t row       = mapping->GetPadRow(patch, hwadd);        // row in a ROC (IROC or OROC)
 //              Int_t globalrow = mapping.GetGlobalPadRow(patch, hwadd);  // row in full sector (IROC plus OROC)
            Int_t pad       = mapping->GetPad(patch, hwadd);
-           active=TString(arrDDL[i]).Atof();
+           if (!TString(arrDDL[i]).IsDigit()) {
+             active = notInMap;
+           } else { 
+              active=TString(arrDDL[i]).Atof();
+          }
            calRoc->SetValue(row,pad,active);
          } // end channel for loop
         } // end altro for loop
@@ -1894,3 +1934,15 @@ AliTPCCalPad* AliTPCcalibDB::MakeDeadMap(const char* nameMappingFile) {
 }
 
 
+
+AliTPCCorrection * AliTPCcalibDB::GetTPCComposedCorrection(Float_t field) const{
+  //
+  // GetComposed correction for given field setting
+  //
+  if (!fComposedCorrectionArray) return 0;
+  if (field>0.1) return (AliTPCCorrection *)fComposedCorrectionArray->At(1);
+  if (field<-0.1) return (AliTPCCorrection *)fComposedCorrectionArray->At(2);
+  return (AliTPCCorrection *)fComposedCorrectionArray->At(0);
+  
+}
+