X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TPC%2FAliTPCseed.cxx;h=3109109ff7a61b71f0e8f0b2923b6c8fc148ffe7;hb=32743cf4287cd34b2f0ce64268bdf3154a0ea133;hp=25f357fe707cd6c4e3fb643e57cc22a7a48bbf47;hpb=5731b051aecc42845a6cbae94820b97948887cb6;p=u%2Fmrichter%2FAliRoot.git diff --git a/TPC/AliTPCseed.cxx b/TPC/AliTPCseed.cxx index 25f357fe707..3109109ff7a 100644 --- a/TPC/AliTPCseed.cxx +++ b/TPC/AliTPCseed.cxx @@ -30,6 +30,9 @@ #include "AliTPCcalibDB.h" #include "AliTPCParam.h" #include "AliMathBase.h" +#include "AliTPCTransform.h" +#include "AliSplineFit.h" +#include "AliCDBManager.h" @@ -577,26 +580,30 @@ Float_t AliTPCseed::CookdEdx(Double_t low, Double_t up,Int_t i1, Int_t i2, Bool_ // This funtion calculates dE/dX within the "low" and "up" cuts. //----------------------------------------------------------------- AliTPCParam *param = AliTPCcalibDB::Instance()->GetParameters(); + Int_t row0 = param->GetNRowLow(); Int_t row1 = row0+param->GetNRowUp1(); Int_t row2 = row1+param->GetNRowUp2(); + const AliTPCRecoParam * recoParam = AliTPCcalibDB::Instance()->GetTransform()->GetCurrentRecoParam(); + Int_t useTot = 0; + if (recoParam) useTot = (recoParam->GetUseTotCharge())? 0:1; // // // - fDEDX[0] = CookdEdxNorm(low,up,0 ,i1 ,i2, kTRUE,kFALSE,2,0); - fDEDX[1] = CookdEdxNorm(low,up,0 ,0 ,row0,kTRUE,kFALSE,2,0); - fDEDX[2] = CookdEdxNorm(low,up,0 ,row0,row1,kTRUE,kFALSE,2,0); - fDEDX[3] = CookdEdxNorm(low,up,0 ,row1,row2,kTRUE,kFALSE,2,0); + fDEDX[0] = CookdEdxNorm(low,up,useTot ,i1 ,i2, kTRUE,kFALSE,2,0); + fDEDX[1] = CookdEdxNorm(low,up,useTot ,0 ,row0,kTRUE,kFALSE,2,0); + fDEDX[2] = CookdEdxNorm(low,up,useTot ,row0,row1,kTRUE,kFALSE,2,0); + fDEDX[3] = CookdEdxNorm(low,up,useTot ,row1,row2,kTRUE,kFALSE,2,0); // - fSDEDX[0] = CookdEdxNorm(low,up,0 ,i1 ,i2, kTRUE,kFALSE,2,1); - fSDEDX[1] = CookdEdxNorm(low,up,0 ,0 ,row0,kTRUE,kFALSE,2,1); - fSDEDX[2] = CookdEdxNorm(low,up,0 ,row0,row1,kTRUE,kFALSE,2,1); - fSDEDX[3] = CookdEdxNorm(low,up,0 ,row1,row2,kTRUE,kFALSE,2,1); + fSDEDX[0] = CookdEdxNorm(low,up,useTot ,i1 ,i2, kTRUE,kFALSE,2,1); + fSDEDX[1] = CookdEdxNorm(low,up,useTot ,0 ,row0,kTRUE,kFALSE,2,1); + fSDEDX[2] = CookdEdxNorm(low,up,useTot ,row0,row1,kTRUE,kFALSE,2,1); + fSDEDX[3] = CookdEdxNorm(low,up,useTot ,row1,row2,kTRUE,kFALSE,2,1); // - fNCDEDX[0] = TMath::Nint(CookdEdxNorm(low,up,0 ,i1 ,i2, kTRUE,kFALSE,2,2)); - fNCDEDX[1] = TMath::Nint(CookdEdxNorm(low,up,0 ,0 ,row0,kTRUE,kFALSE,2,2)); - fNCDEDX[2] = TMath::Nint(CookdEdxNorm(low,up,0 ,row0,row1,kTRUE,kFALSE,2,2)); - fNCDEDX[3] = TMath::Nint(CookdEdxNorm(low,up,0 ,row1,row2,kTRUE,kFALSE,2,2)); + fNCDEDX[0] = TMath::Nint(CookdEdxNorm(low,up,useTot ,i1 ,i2, kTRUE,kFALSE,2,2)); + fNCDEDX[1] = TMath::Nint(CookdEdxNorm(low,up,useTot ,0 ,row0,kTRUE,kFALSE,2,2)); + fNCDEDX[2] = TMath::Nint(CookdEdxNorm(low,up,useTot ,row0,row1,kTRUE,kFALSE,2,2)); + fNCDEDX[3] = TMath::Nint(CookdEdxNorm(low,up,useTot ,row1,row2,kTRUE,kFALSE,2,2)); SetdEdx(fDEDX[0]); return fDEDX[0]; @@ -1066,6 +1073,29 @@ Float_t AliTPCseed::CookdEdxNorm(Double_t low, Double_t up, Int_t type, Int_t i } Float_t mean =suma/sumn; Float_t rms =TMath::Sqrt(TMath::Abs(suma2/sumn-mean*mean)); + // + // do time-dependent correction for pressure and temperature variations + UInt_t runNumber = 1; + Float_t corrTimeGain = 1; + AliTPCTransform * trans = AliTPCcalibDB::Instance()->GetTransform(); + if (trans) { + runNumber = trans->GetCurrentRunNumber(); + //AliTPCcalibDB::Instance()->SetRun(runNumber); + TObjArray * timeGainSplines = AliTPCcalibDB::Instance()->GetTimeGainSplinesRun(runNumber); + if (timeGainSplines) { + UInt_t time = trans->GetCurrentTimeStamp(); + AliSplineFit * fitMIP = (AliSplineFit *) timeGainSplines->At(0); + AliSplineFit * fitFPcosmic = (AliSplineFit *) timeGainSplines->At(1); + if (fitMIP) { + corrTimeGain = fitMIP->Eval(time); + } else { + if (fitFPcosmic) corrTimeGain = fitFPcosmic->Eval(time); // This value describes the ratio FP-to-MIP, hardwired for the moment + } + } + } + mean /= corrTimeGain; + rms /= corrTimeGain; + // if (returnVal==1) return rms; if (returnVal==2) return ncl; return mean; @@ -1102,7 +1132,7 @@ Float_t AliTPCseed::CookdEdxAnalytical(Double_t low, Double_t up, Int_t type, I Float_t gainGG = 1; // gas gain factor -always enabled Float_t gainPad = 1; // gain map - used always Float_t corrPos = 1; // local position correction - if posNorm enabled - Float_t corrNorm = 1; // normalization factor - set Q to channel 50 + // // // @@ -1203,6 +1233,29 @@ Float_t AliTPCseed::CookdEdxAnalytical(Double_t low, Double_t up, Int_t type, I } Float_t mean =suma/sumn; Float_t rms =TMath::Sqrt(TMath::Abs(suma2/sumn-mean*mean)); + // + // do time-dependent correction for pressure and temperature variations + UInt_t runNumber = 1; + Float_t corrTimeGain = 1; + AliTPCTransform * trans = AliTPCcalibDB::Instance()->GetTransform(); + if (trans) { + runNumber = trans->GetCurrentRunNumber(); + //AliTPCcalibDB::Instance()->SetRun(runNumber); + TObjArray * timeGainSplines = AliTPCcalibDB::Instance()->GetTimeGainSplinesRun(runNumber); + if (timeGainSplines) { + UInt_t time = trans->GetCurrentTimeStamp(); + AliSplineFit * fitMIP = (AliSplineFit *) timeGainSplines->At(0); + AliSplineFit * fitFPcosmic = (AliSplineFit *) timeGainSplines->At(1); + if (fitMIP) { + corrTimeGain = fitMIP->Eval(time); + } else { + if (fitFPcosmic) corrTimeGain = fitFPcosmic->Eval(time); // This value describes the ratio FP-to-MIP, hardwired for the moment + } + } + } + mean /= corrTimeGain; + rms /= corrTimeGain; + // if (returnVal==1) return rms; if (returnVal==2) return ncl; return mean;