Changes for task:
authormivanov <mivanov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 20 Sep 2013 21:38:02 +0000 (21:38 +0000)
committermivanov <mivanov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 20 Sep 2013 21:38:02 +0000 (21:38 +0000)
https://trello.com/c/y2PApfkL/1-code-high-voltage-and-p-t-correction-of-gain

Usage of basic HighVoltage and Presure/Temperature (time) dependent gas gain correction.

Double_t correctionHVandPT = calib->GetGainCorrectionHVandPT(timeStamp, calib->GetRun(), isec, 5 ,tpcrecoparam->GetGainCorrectionHVandPTMode());

M       Sim/AliTPC.cxx          -  Usage in simulation (according mode)  - multiplicative factor of gain
M       Rec/AliTPCRecoParam.h   -  Switch/ mode of usage of the HVandPT correction
M       Rec/AliTPCRecoParam.cxx -  ...
M       Rec/AliTPCseed.cxx      -  Usage in the reconstruction dEdx+    amp[ncl]/=correctionHVandPT;    // correction for the HV and P/T - time dependent

M       Base/AliTPCcalibDB.cxx  -  Implementing different mode of the usage of the HVandPT correction
M       Base/AliTPCcalibDB.h    -  ...

TPC/Base/AliTPCcalibDB.cxx
TPC/Base/AliTPCcalibDB.h
TPC/Rec/AliTPCRecoParam.cxx
TPC/Rec/AliTPCRecoParam.h
TPC/Rec/AliTPCseed.cxx
TPC/Sim/AliTPC.cxx

index 8aed5e3..86c95ad 100644 (file)
@@ -2272,9 +2272,9 @@ Double_t AliTPCcalibDB::GetVDriftCorrectionDeltaZ(Int_t /*timeStamp*/, Int_t run
   
   // Arguments:
   // mode determines the algorith how to combine the Laser Track, LaserCE or TPC-ITS
-  // timestamp - timestamp
+  // timestamp - not used
   // run       - run number
-  // side      - the drift velocity gy correction per side (CE and Laser tracks)
+  // side      - common for boith sides
   //
   if (run<=0 && fTransform) run = fTransform->GetCurrentRunNumber();
   UpdateRunInformations(run,kFALSE);
@@ -2411,7 +2411,7 @@ AliTPCCorrection * AliTPCcalibDB::GetTPCComposedCorrectionDelta() const{
   return (AliTPCCorrection *)fComposedCorrectionArray->At(4);  //
 }
 
-Double_t AliTPCcalibDB::GetGainCorrectionHVandPT(Int_t timeStamp, Int_t run, Int_t sector, Int_t deltaCache){
+Double_t AliTPCcalibDB::GetGainCorrectionHVandPT(Int_t timeStamp, Int_t run, Int_t sector, Int_t deltaCache, Int_t mode){
   //
   // Correction for  changes of gain caused by change of the HV and by relative change of the gas density
   // Function is slow some kind of caching needed
@@ -2419,16 +2419,32 @@ Double_t AliTPCcalibDB::GetGainCorrectionHVandPT(Int_t timeStamp, Int_t run, Int
   //
   // Input paremeters:
   //  deltaCache - maximal time differnce above which the cache is recaclulated
-  // 
+  //  mode       - mode==0 by default return combined correction 
+  //                       actual HV and Pt correction has to be present in the run calibration otherwise it is ignored.
+  //                      
+  //               mode==1 return combined correction ( important for calibration pass)
+  //
+  //               mode==2 return HV correction
+  //               mode==3 return P/T correction
+  //  Usage in the simulation/reconstruction
+  //  MC:     Qcorr  = Qorig*GetGainCorrectionHVandPT   ( in AliTPC.cxx ) 
+  //  Rec:    dEdx   = dEdx/GetGainCorrectionHVandPT    ( in aliTPCseed.cxx )
+  //
   static TVectorD gGainCorrection(72);
-  static Int_t gTimeStamp=0;
+  static TVectorD gGainCorrectionPT(72);
+  static TVectorD gGainCorrectionHV(72);
+  static Int_t    gTimeStamp=0;
+  static Bool_t   hasTimeDependent=kFALSE; 
   if ( TMath::Abs(timeStamp-gTimeStamp)> deltaCache){    
     //
     TGraphErrors * graphGHV = 0;
     TGraphErrors * graphGPT = 0;
     TObjArray *timeGainSplines = GetTimeGainSplinesRun(run);
-    graphGHV  = (TGraphErrors*) timeGainSplines->FindObject("GainSlopesHV");
-    graphGPT  = (TGraphErrors*) timeGainSplines->FindObject("GainSlopesPT");
+    if (timeGainSplines){
+      graphGHV  = (TGraphErrors*) timeGainSplines->FindObject("GainSlopesHV");
+      graphGPT  = (TGraphErrors*) timeGainSplines->FindObject("GainSlopesPT");
+      if (graphGHV) hasTimeDependent=kTRUE;
+    }
     if (!graphGHV) graphGHV = fParam->GetGainSlopesHV();
     if (!graphGPT) graphGPT = fParam->GetGainSlopesPT();
     //
@@ -2438,9 +2454,18 @@ Double_t AliTPCcalibDB::GetGainCorrectionHVandPT(Int_t timeStamp, Int_t run, Int
       Double_t deltaGPT=0;
       if (graphGHV) deltaGHV = graphGHV->GetY()[isec]*deltaHV;
       if (graphGPT) deltaGPT = graphGPT->GetY()[isec]*GetPTRelative(timeStamp,run,0);
-      gGainCorrection[isec]=deltaGHV+deltaGPT;
+      gGainCorrection[isec]=(1.+deltaGHV)*(1.+deltaGPT);
+      gGainCorrectionPT[isec]=deltaGPT;
+      gGainCorrectionHV[isec]=deltaGHV;
     }    
     gTimeStamp=timeStamp;
   }
-  return gGainCorrection[sector];
+  if (mode==0){
+    if (hasTimeDependent) return gGainCorrection[sector];
+    if (!hasTimeDependent) return 0;
+  }
+  if (mode==1) return gGainCorrection[sector];
+  if (mode==2) return gGainCorrectionPT[sector];
+  if (mode==3) return gGainCorrectionHV[sector];
+  return 0;
 }
index cd95a26..8128a84 100644 (file)
@@ -147,7 +147,7 @@ class AliTPCcalibDB : public TObject
   Float_t GetChamberCurrentNominalHighVoltage(UInt_t roc) const { return (roc<72)?fCurrentNominalVoltage[roc]:0.; }
   Float_t GetChamberGoodHighVoltageFraction(UInt_t roc)   const { return (roc<72)?fChamberHVgoodFraction[roc]:0.; }
   AliDCSSensor* GetChamberHVSensor(UInt_t roc)            const { return (roc<72)?fHVsensors[roc]:0x0;            }
-  Double_t GetGainCorrectionHVandPT(Int_t timeStamp, Int_t run, Int_t sector, Int_t deltaCache);
+  Double_t GetGainCorrectionHVandPT(Int_t timeStamp, Int_t run, Int_t sector, Int_t deltaCache, Int_t mode);
   Bool_t  IsDataTakingActive(time_t timeStamp);
   //
   //Goofie Values
index ebaa60d..cfa1ab8 100644 (file)
@@ -105,6 +105,7 @@ AliTPCRecoParam::AliTPCRecoParam():
   fMinFraction(0.01),           // truncated mean - lower threshold
   fMaxFaction(0.7),            // truncated mean - upper threshold
   fNeighborRowsDedx(2),           // neighbour rows for below threshold dEdx calculation
+  fGainCorrectionHVandPTMode(0), // switch for the usage of GainCorrectionHVandPT (see AliTPCcalibDB::GetGainCorrectionHVandPT   
   fUseTOFCorrection(kTRUE),
   fUseSystematicCorrelation(kTRUE)
 {
index 17ddd5a..e022d75 100644 (file)
@@ -68,8 +68,10 @@ class AliTPCRecoParam : public AliDetectorRecoParam
   void  SetUseTotCharge(Bool_t flag) {fUseTotCharge = flag;}
   void  SetCtgRange(Double_t ctgRange) {fCtgRange = ctgRange;}
   void  SetUseMultiplicityCorrectionDedx(Bool_t flag) {fUseMultiplicityCorrectionDedx = flag;}
+  
   void  SetUseAlignmentTime(Bool_t flag) {fUseAlignmentTime = flag;}
   void  SetNeighborRowsDedx(Int_t nRows) {fNeighborRowsDedx = nRows;}
+  void SetCorrectionHVandPTMode(Int_t value){ fGainCorrectionHVandPTMode =value;}
   //
   Int_t    GetLastSeedRowSec()       const  { return fLastSeedRowSec;} 
   Int_t    GetSeedGapPrim()        const  { return fSeedGapPrim;} 
@@ -115,6 +117,7 @@ class AliTPCRecoParam : public AliDetectorRecoParam
   Int_t GetUseIonTailCorrection() const {return fUseIonTailCorrection;}
 
   Bool_t GetUseMultiplicityCorrectionDedx() const {return fUseMultiplicityCorrectionDedx;}
+  Int_t  GetGainCorrectionHVandPTMode() const  { return   fGainCorrectionHVandPTMode;}
   Bool_t GetUseAlignmentTime() const {return fUseAlignmentTime;}
   //
   Bool_t   GetUseTotCharge() const {return fUseTotCharge;}          // switch use total or max charge
@@ -200,6 +203,7 @@ class AliTPCRecoParam : public AliDetectorRecoParam
   Float_t fMinFraction;           // truncated mean - lower threshold
   Float_t fMaxFaction;            // truncated mean - upper threshold
   Int_t   fNeighborRowsDedx;      // number of neighboring rows to identify cluster below thres in dEdx calculation 0 -> switch off
+  Int_t   fGainCorrectionHVandPTMode; // switch for the usage of GainCorrectionHVandPT (see AliTPCcalibDB::GetGainCorrectionHVandPT 
 
   Bool_t fUseTOFCorrection;  // switch - kTRUE use TOF correction kFALSE - do not use
   //
index db634e5..544b355 100644 (file)
@@ -1082,9 +1082,10 @@ Float_t  AliTPCseed::CookdEdxNorm(Double_t low, Double_t up, Int_t type, Int_t i
       if (type==1) corrNorm=1.;
     }
     //
+    //
     amp[ncl]=charge;
-    amp[ncl]/=gainGG;
-    amp[ncl]/=gainPad;
+    amp[ncl]/=gainGG;                 // normalized gas gain
+    amp[ncl]/=gainPad;                // 
     amp[ncl]/=corrShape;
     amp[ncl]/=corrPadType;
     amp[ncl]/=corrPos;
@@ -1198,14 +1199,15 @@ Float_t  AliTPCseed::CookdEdxAnalytical(Double_t low, Double_t up, Int_t type, I
   AliTPCTransform * trans = AliTPCcalibDB::Instance()->GetTransform();
   const AliTPCRecoParam * recoParam = AliTPCcalibDB::Instance()->GetTransform()->GetCurrentRecoParam();
   //
-  if (recoParam->GetNeighborRowsDedx() == 0) rowThres = 0;
+  if (recoParam->GetNeighborRowsDedx() == 0) rowThres = 0;     
+  UInt_t time = 1;//
   //
   if (trans) {
       runNumber = trans->GetCurrentRunNumber();
       //AliTPCcalibDB::Instance()->SetRun(runNumber);
       timeGainSplines = AliTPCcalibDB::Instance()->GetTimeGainSplinesRun(runNumber);
       if (timeGainSplines && recoParam->GetUseGainCorrectionTime()>0) {
-       UInt_t time = trans->GetCurrentTimeStamp();
+       time = trans->GetCurrentTimeStamp();
        AliSplineFit * fitMIP = (AliSplineFit *) timeGainSplines->At(0);
        AliSplineFit * fitFPcosmic = (AliSplineFit *) timeGainSplines->At(1);
        if (fitMIP) {
@@ -1319,9 +1321,14 @@ Float_t  AliTPCseed::CookdEdxAnalytical(Double_t low, Double_t up, Int_t type, I
     Float_t gainChamber = 1;
     if (grChamberGain[ipad] && recoParam->GetUseGainCorrectionTime()>0) gainChamber = grChamberGain[ipad]->Eval(cluster->GetDetector());
     //
+    //
+    //
+    Double_t correctionHVandPT = AliTPCcalibDB::Instance()->GetGainCorrectionHVandPT(time, runNumber,cluster->GetDetector(), 5 , recoParam->GetGainCorrectionHVandPTMode());
+    //
     amp[ncl]=charge;
-    amp[ncl]/=gainGG;
-    amp[ncl]/=gainPad;
+    amp[ncl]/=gainGG;               // nominal gas gain
+    amp[ncl]/=correctionHVandPT;    // correction for the HV and P/T - time dependent
+    amp[ncl]/=gainPad;              // 
     amp[ncl]/=corrPos;
     amp[ncl]/=gainEqualPadRegion;
     amp[ncl]/=gainChamber;
index 6fda234..14c734a 100644 (file)
@@ -55,6 +55,8 @@
 #include <TParameter.h>
 
 #include "AliDigits.h"
+#include "AliHeader.h"
+
 #include "AliMagF.h"
 #include "AliRun.h"
 #include "AliRunLoader.h"
@@ -2053,6 +2055,11 @@ void AliTPC::MakeSector(Int_t isec,Int_t nrows,TTree *TH,
 
   Float_t gasgain = fTPCParam->GetGasGain();
   gasgain = gasgain/fGainFactor;
+  //  const Int_t timeStamp = 1; //where to get it? runloader->GetHeader()->GetTimeStamp(). https://savannah.cern.ch/bugs/?53025
+  const Int_t timeStamp = fLoader->GetRunLoader()->GetHeader()->GetTimeStamp(); //?
+  Double_t correctionHVandPT = calib->GetGainCorrectionHVandPT(timeStamp, calib->GetRun(), isec, 5 ,tpcrecoparam->GetGainCorrectionHVandPTMode());
+  gasgain*=correctionHVandPT;
+
   Int_t i;
   Float_t xyz[5];