updates for 1/pT correction
authorakalweit <alexander.philipp.kalweit@cern.ch>
Tue, 4 Feb 2014 20:28:31 +0000 (21:28 +0100)
committerakalweit <alexander.philipp.kalweit@cern.ch>
Tue, 4 Feb 2014 20:28:31 +0000 (21:28 +0100)
TPC/Calib/AliTPCPreprocessorOffline.cxx
TPC/Calib/AliTPCPreprocessorOffline.h
TPC/Calib/AliTPCcalibGainMult.cxx
TPC/Calib/AliTPCcalibGainMult.h
TPC/Rec/AliTPCseed.cxx

index b0937d7..6fc6583 100644 (file)
@@ -1164,10 +1164,98 @@ Bool_t AliTPCPreprocessorOffline::AnalyzePadRegionGain(){
 
 }
 
+Bool_t AliTPCPreprocessorOffline::AnalyzeGainInclinationAngle(Int_t padRegion) {
+  //
+  // Analyze gain as a function of the inclination angle phi (1/pt) and produce calibration graphs
+  // padRegion -- 0: short, 1: medium, 2: long, 3: absolute calibration of full track
+  //
+  if (!fGainMult) return kFALSE;
+  if (!(fGainMult->GetHistTopolRelMax())) return kFALSE;
+  if (!(fGainMult->GetHistTopolRelTot())) return kFALSE;
+  if (!(fGainMult->GetHistTopolAbsMax())) return kFALSE;
+  if (!(fGainMult->GetHistTopolAbsTot())) return kFALSE;
+  //
+  TObjArray arrMax;
+  TObjArray arrTot;
+  arrMax.SetOwner(kTRUE);
+  arrTot.SetOwner(kTRUE);
+  //
+  TH2D * histQmax = 0x0;
+  TH2D * histQtot = 0x0;
+  if (padRegion < 3) {
+    //   (0.) dEdx{i}/mean(wi*dEdx{i}),(1.)tgl   (2.) 1/pt   (3.) pad   
+    fGainMult->GetHistTopolRelMax()->GetAxis(3)->SetRangeUser(padRegion,padRegion); // short,medium,long
+    fGainMult->GetHistTopolRelTot()->GetAxis(3)->SetRangeUser(padRegion,padRegion); // short,medium,long
+    //
+    histQmax = (TH2D*) fGainMult->GetHistTopolRelMax()->Projection(0,2);
+    histQmax->SetNameTitle(Form("histQmaxInclAngleRel_%i", padRegion), 
+                          Form("histQmaxInclAngleRel_%i", padRegion));
+    //
+    histQtot = (TH2D*) fGainMult->GetHistTopolRelTot()->Projection(0,2);
+    histQtot->SetNameTitle(Form("histQtotInclAngleRel_%i", padRegion), 
+                          Form("histQtotInclAngleRel_%i", padRegion));
+  } else {
+    histQmax = (TH2D*) fGainMult->GetHistTopolAbsMax()->Projection(0,2);
+    histQmax->SetNameTitle(Form("histQmaxInclAngleAbs_%i", padRegion), 
+                          Form("histQmaxInclAngleAbs_%i", padRegion));
+    //
+    histQtot = (TH2D*) fGainMult->GetHistTopolAbsTot()->Projection(0,2);
+    histQtot->SetNameTitle(Form("histQtotInclAngleAbs_%i", padRegion), 
+                          Form("histQtotInclAngleAbs_%i", padRegion));
+    
+  }
+  //
+  histQmax->FitSlicesY(0,0,-1,0,"QNR",&arrMax);
+  TH1D * corrMax = (TH1D*)arrMax.At(1);
+  corrMax->SetNameTitle(Form("corrMaxInclAngle_%i", padRegion),
+                       Form("corrMaxInclAngle_%i", padRegion));
+  //
+  histQtot->FitSlicesY(0,0,-1,0,"QNR",&arrTot);
+  TH1D * corrTot = (TH1D*)arrTot.At(1);
+  corrTot->SetNameTitle(Form("corrMaxInclAngle_%i", padRegion),
+                       Form("corrMaxInclAngle_%i", padRegion));
+  //
+  corrMax->Scale(1./histQmax->GetMean(2)); // to be changed similar to what Marian did
+  corrTot->Scale(1./histQtot->GetMean(2));
+  //
+  const char* names[4]={"SHORT","MEDIUM","LONG","ABSOLUTE"};
+  //
+  TGraphErrors * graphMax = new TGraphErrors(corrMax);
+  TGraphErrors * graphTot = new TGraphErrors(corrTot);
+  Double_t meanMax = TMath::Mean(graphMax->GetN(), graphMax->GetY());
+  Double_t meanTot = TMath::Mean(graphTot->GetN(), graphTot->GetY());
+  //
+  for (Int_t ipoint=0; ipoint<graphMax->GetN(); ipoint++) {graphMax->GetY()[ipoint]/=meanMax;}
+  for (Int_t ipoint=0; ipoint<graphTot->GetN(); ipoint++) {graphTot->GetY()[ipoint]/=meanTot;}
+
+  //
+  graphMax->SetNameTitle(Form("TGRAPHERRORS_QMAX_INCLANGLE_%s_BEAM_ALL",names[padRegion]),
+                        Form("TGRAPHERRORS_QMAX_INCLANGLE_%s_BEAM_ALL",names[padRegion]));
+  graphTot->SetNameTitle(Form("TGRAPHERRORS_QTOT_INCLANGLE_%s_BEAM_ALL",names[padRegion]),
+                        Form("TGRAPHERRORS_QTOT_INCLANGLE_%s_BEAM_ALL",names[padRegion]));
+  //
+  fGainArray->AddLast(graphMax);
+  fGainArray->AddLast(graphTot);
+  //
+  TF1 * funMax= new TF1("funMax","1++abs(x)++abs(x*x)", 1.5, 4.); // which fit function to use?
+  TF1 * funTot= new TF1("funTot","1++abs(x)++abs(x*x)", 1.5, 4.);
+  graphMax->Fit(funMax,"wQNR","rob=0.9",-0.8,0.8);
+  graphTot->Fit(funTot,"wQNR","rob=0.9",-0.8,0.8);
+  funMax->SetNameTitle(Form("TF1_QMAX_INCLANGLE_%s_BEAM_ALL",names[padRegion]),
+                      Form("TF1_QMAX_INCLANGLE_%s_BEAM_ALL",names[padRegion]));
+  funTot->SetNameTitle(Form("TF1_QTOT_INCLANGLE_%s_BEAM_ALL",names[padRegion]),
+                      Form("TF1_QTOT_INCLANGLE_%s_BEAM_ALL",names[padRegion]));
+  fGainArray->AddLast(funMax);
+  fGainArray->AddLast(funTot);
+  //
+  return kTRUE;
+
+}
+
 
 Bool_t AliTPCPreprocessorOffline::AnalyzeGainDipAngle(Int_t padRegion)  {
   //
-  // Analyze gain as a function of multiplicity and produce calibration graphs
+  // Analyze gain as a function of the dip angle theta and produce calibration graphs
   // padRegion -- 0: short, 1: medium, 2: long, 3: absolute calibration of full track
   //
   if (!fGainMult) return kFALSE;
@@ -1176,6 +1264,8 @@ Bool_t AliTPCPreprocessorOffline::AnalyzeGainDipAngle(Int_t padRegion)  {
   // "dEdxRatioMax","dEdxRatioTot","padType","mult","driftlength"
   TObjArray arrMax;
   TObjArray arrTot;
+  arrMax.SetOwner(kTRUE);
+  arrTot.SetOwner(kTRUE);
   //
   TH2D * histQmax = 0x0;
   TH2D * histQtot = 0x0;
index 2c7de5b..418af75 100644 (file)
@@ -51,6 +51,7 @@ public:
   Bool_t AnalyzeAttachment(Int_t startRunNumber, Int_t endRunNumber, Int_t minEntriesFit = 2000);
   Bool_t AnalyzePadRegionGain();
   Bool_t AnalyzeGainDipAngle(Int_t padRegion = 0);
+  Bool_t AnalyzeGainInclinationAngle(Int_t padRegion = 0);
   Bool_t AnalyzeGainMultiplicity();
   Bool_t AnalyzeGainChamberByChamber();
   void SetTimeGainRange(Double_t minGain=2.0, Double_t maxGain = 3.0) 
index 49d444a..6fc6708 100644 (file)
@@ -94,6 +94,10 @@ AliTPCcalibGainMult::AliTPCcalibGainMult()
    fHistPadEqual(0),
    fHistGainMult(0),
    fHistTopology(0),
+   fHistTopolRelMax(0),
+   fHistTopolRelTot(0),
+   fHistTopolAbsMax(0),
+   fHistTopolAbsTot(0),
    fPIDMatrix(0),
    fHistdEdxMap(0),
    fHistdEdxMax(0),
@@ -129,6 +133,10 @@ AliTPCcalibGainMult::AliTPCcalibGainMult(const Text_t *name, const Text_t *title
    fHistPadEqual(0),
    fHistGainMult(0),
    fHistTopology(0),
+   fHistTopolRelMax(0),
+   fHistTopolRelTot(0),
+   fHistTopolAbsMax(0),
+   fHistTopolAbsTot(0),
    fPIDMatrix(0),
    fHistdEdxMap(0),
    fHistdEdxMax(0),
@@ -155,13 +163,24 @@ AliTPCcalibGainMult::AliTPCcalibGainMult(const Text_t *name, const Text_t *title
   fCutMaxDcaXY = 3.5;
   fCutMaxDcaZ  = 25.;
   // default values for MIP window selection
-  fMinMomentumMIP = 0.4;
+  fMinMomentumMIP = 0.25;
   fMaxMomentumMIP = 0.6;
-  fAlephParameters[0] = 0.07657; // the following parameters work for most of the periods and are therefore default
-  fAlephParameters[1] = 10.6654; // but they can be overwritten in the train setup of cpass0
-  fAlephParameters[2] = 2.51466e-14;
-  fAlephParameters[3] = 2.05379;
-  fAlephParameters[4] = 1.84288;
+  //
+  // expected BetheBloch for calibrations
+  //
+  TVectorD * paramBB =0;
+  AliTPCParam* param = AliTPCcalibDB::Instance()->GetParameters();
+  if (param) paramBB=param->GetBetheBlochParameters();
+  if (!paramBB) { 
+    fAlephParameters[0] = 0.07657; // the following parameters work for most of the periods and are therefore default
+    fAlephParameters[1] = 10.6654; // but they can be overwritten in the train setup of cpass0
+    fAlephParameters[2] = 2.51466e-14;
+    fAlephParameters[3] = 2.05379;
+    fAlephParameters[4] = 1.84288;
+  } else { 
+    // Take calibrated parameters from OCDB
+    for(Int_t iPar = 0; iPar < 5; iPar++) fAlephParameters[iPar] = (*paramBB)(iPar);
+  }
   //
   // basic QA histograms - mainly for debugging purposes
   //
@@ -186,7 +205,7 @@ AliTPCcalibGainMult::AliTPCcalibGainMult(const Text_t *name, const Text_t *title
   //
   // pad region equalization
   //
-  Int_t binsPadEqual[5]    = { 400, 400,    4,    5,   20};
+  Int_t binsPadEqual[5]    = { 400, 400,    4,    5,   20}; // OPTIMIZE MEMORY CONSUMPTION HERE WITH QMAX/QTOT SWITCH
   Double_t xminPadEqual[5] = { 0.0, 0.0, -0.5,    0,  -1.}; 
   Double_t xmaxPadEqual[5] = { 2.0, 2.0,  3.5, 13000,  +1};
   TString axisNamePadEqual[5]   = {"dEdxRatioMax","dEdxRatioTot","padType","mult","dipAngle"};
@@ -199,15 +218,15 @@ AliTPCcalibGainMult::AliTPCcalibGainMult(const Text_t *name, const Text_t *title
   }
   //
   // multiplicity dependence
-  //                    MIP Qmax, MIP Qtot,  z,  pad, vtx. contribut., ncl
-  Int_t binsGainMult[6]    = { 145,  145,   25,    4,  100,  80};
-  Double_t xminGainMult[6] = { 10.,  10.,    0, -0.5,    0, -0.5}; 
-  Double_t xmaxGainMult[6] = {300., 300.,  250,  3.5, 13000, 159.5};
-  TString axisNameMult[6]={"Qmax","Qtot","drift","padtype""multiplicity","ncl"};
-  TString axisTitleMult[6]={"Qmax (a.u)","Qtot (a.u.)","driftlenght l (cm)","Pad Type","multiplicity","ncl"};
-  //
-  fHistGainMult = new THnSparseF("fHistGainMult","MIP Qmax, MIP Qtot, z, type, vtx. contribut.", 6, binsGainMult, xminGainMult, xmaxGainMult); 
-  for (Int_t iaxis=0; iaxis<6;iaxis++){
+  //                    MIP Qmax, MIP Qtot,  z,  pad, vtx. contribut.,
+  Int_t binsGainMult[5]    = { 145,  145,   25,    4,  100}; // OPTIMIZE MEMORY CONSUMPTION HERE WITH QMAX/QTOT SWITCH
+  Double_t xminGainMult[5] = { 10.,  10.,    0, -0.5,    0}; 
+  Double_t xmaxGainMult[5] = {300., 300.,  250,  3.5, 13000};
+  TString axisNameMult[5]={"Qmax","Qtot","drift","padtype""multiplicity"};
+  TString axisTitleMult[5]={"Qmax (a.u)","Qtot (a.u.)","driftlenght l (cm)","Pad Type","multiplicity"};
+  //
+  fHistGainMult = new THnSparseF("fHistGainMult","MIP Qmax, MIP Qtot, z, type, vtx. contribut.", 5, binsGainMult, xminGainMult, xmaxGainMult); 
+  for (Int_t iaxis=0; iaxis<5;iaxis++){
     fHistGainMult->GetAxis(iaxis)->SetName(axisNameMult[iaxis]);
     fHistGainMult->GetAxis(iaxis)->SetTitle(axisTitleMult[iaxis]);
   }
@@ -227,6 +246,44 @@ AliTPCcalibGainMult::AliTPCcalibGainMult(const Text_t *name, const Text_t *title
     fHistTopology->GetAxis(iaxis)->SetTitle(axisTitleTopology[iaxis]);
   }
   //
+  // histograms for topology and multiplicity tgl and 1/pt -- relative calibration of pad regions to common mean
+  //
+  //       (0.) dEdx{i}/mean(wi*dEdx{i}),(1.)tgl   (2.) 1/pt   (3.) pad    
+  Int_t binsTopolRel[4]        = {   200,     20,       20,    4};
+  Double_t xminTopolRel[4]     = {     0,    -1.,      1.5, -0.5};
+  Double_t xmaxTopolRel[4]     = {    2.,    +1.,       4.,  3.5};
+  TString axisNameTopolRel[4]  = {"dEdx",  "tgl",   "1/pT","padType"};
+  TString axisTitleTopolRel[4] = {"dEdx{i}/mean(wi*dEdx{i})","tgl","1/pT","padType"};
+  //
+  fHistTopolRelMax = new THnF("fHistTopolRelMax", "dE/dxRel,tgl,1/pT,padType", 4, binsTopolRel, xminTopolRel, xmaxTopolRel);
+  fHistTopolRelTot = new THnF("fHistTopolRelTot", "dE/dxRel,tgl,1/pT,padType", 4, binsTopolRel, xminTopolRel, xmaxTopolRel);
+  //
+  for (Int_t iaxis=0; iaxis<4;iaxis++){
+   fHistTopolRelMax->GetAxis(iaxis)->SetName(axisNameTopolRel[iaxis]);
+   fHistTopolRelMax->GetAxis(iaxis)->SetTitle(axisTitleTopolRel[iaxis]);
+   fHistTopolRelTot->GetAxis(iaxis)->SetName(axisNameTopolRel[iaxis]);
+   fHistTopolRelTot->GetAxis(iaxis)->SetTitle(axisTitleTopolRel[iaxis]);
+  }
+  //
+  // histograms for topology and multiplicity tgl and 1/pt -- absolute calibration of common mean
+  //
+  //       (        0.)mean(wi*dEdx{i}),(1.)tgl   (2.) 1/pt   (3.) multiplicty
+  Int_t binsTopolAbs[4]        = {  145,     20,       20,    100};
+  Double_t xminTopolAbs[4]     = {   10,    -1.,      1.5,      0.};
+  Double_t xmaxTopolAbs[4]     = {  300.,    +1.,      4.,  13000.};
+  TString axisNameTopolAbs[4]  = {"dEdx",  "tgl",   "1/pT","padType"};
+  TString axisTitleTopolAbs[4] = {"dEdx{i}/mean(wi*dEdx{i})","tgl","1/pT","padType"};
+  //
+  fHistTopolAbsMax = new THnF("fHistTopolAbsMax", "dE/dxAbs,tgl,1/pT,padType", 4, binsTopolAbs, xminTopolAbs, xmaxTopolAbs);
+  fHistTopolAbsTot = new THnF("fHistTopolAbsTot", "dE/dxAbs,tgl,1/pT,padType", 4, binsTopolAbs, xminTopolAbs, xmaxTopolAbs);
+  //
+  for (Int_t iaxis=0; iaxis<4;iaxis++){
+   fHistTopolAbsMax->GetAxis(iaxis)->SetName(axisNameTopolAbs[iaxis]);
+   fHistTopolAbsMax->GetAxis(iaxis)->SetTitle(axisTitleTopolAbs[iaxis]);
+   fHistTopolAbsTot->GetAxis(iaxis)->SetName(axisNameTopolAbs[iaxis]);
+   fHistTopolAbsTot->GetAxis(iaxis)->SetTitle(axisTitleTopolAbs[iaxis]);
+  }
+  //
   // MI suggestion for all dEdx histograms we shpuld keep log scale - to have the same relative resolution
   //
   // e.g: I want to enable -   AliTPCcalibBase::BinLogX(fHistTopology->GetAxis(0));
@@ -282,6 +339,11 @@ AliTPCcalibGainMult::~AliTPCcalibGainMult(){
   delete fHistGainMult;     //  histogram which shows decrease of MIP signal as a function
   delete fHistTopology;
   //
+  delete fHistTopolAbsMax;
+  delete fHistTopolAbsTot;
+  delete fHistTopolRelMax;
+  delete fHistTopolRelTot;
+  //
   delete fHistdEdxMap;
   delete fHistdEdxMax;
   delete fHistdEdxTot;
@@ -460,18 +522,25 @@ void AliTPCcalibGainMult::Process(AliESDEvent *event) {
       //
       for(Int_t ipad = 0; ipad < 4; ipad ++) {
        // "dEdxRatioMax","dEdxRatioTot","padType","mult","driftlength"
-       Double_t vecPadEqual[5] = {signalArrayMax[ipad]/meanMax, signalArrayTot[ipad]/meanTot, ipad, nContributors, dipAngleTgl};
-       if (fMinMomentumMIP > meanP && meanP < fMaxMomentumMIP) fHistPadEqual->Fill(vecPadEqual);
+       Double_t vecPadEqual[5] = {signalArrayMax[ipad]/meanMax, signalArrayTot[ipad]/meanTot, ipad, nContributors, dipAngleTgl};       
+       if (fMinMomentumMIP > meanP && meanP < fMaxMomentumMIP) {
+         fHistPadEqual->Fill(vecPadEqual);
+         //
+         //       (0.) dEdx{i}/mean(wi*dEdx{i}),(1.)tgl   (2.) 1/pt   (3.) pad    
+         Double_t vecTopolRelMax[4] = {signalArrayMax[ipad]/meanMax, dipAngleTgl, TMath::Abs(track->GetSigned1Pt()), ipad};
+         Double_t vecTopolRelTot[4] = {signalArrayMax[ipad]/meanMax, dipAngleTgl, TMath::Abs(track->GetSigned1Pt()), ipad};
+         fHistTopolRelMax->Fill(vecTopolRelMax);
+         fHistTopolRelTot->Fill(vecTopolRelTot);
+       }
       }
       //
       //
       if (meanP < fMaxMomentumMIP && meanP > fMinMomentumMIP) {
-       Double_t vecMult[6] = {seed->CookdEdxAnalytical(fLowerTrunc,fUpperTrunc,1,row0,row1)/corrFactorMip,
+       Double_t vecMult[5] = {seed->CookdEdxAnalytical(fLowerTrunc,fUpperTrunc,1,row0,row1)/corrFactorMip,
                               seed->CookdEdxAnalytical(fLowerTrunc,fUpperTrunc,0,row0,row1)/corrFactorMip,
                               meanDrift,
                               3,
-                              nContributors,
-                              ncls};
+                              nContributors};
        //
        fHistGainMult->Fill(vecMult);
        vecMult[0]=mipSignalShort/corrFactorMip; vecMult[1]=mipSignalShort/corrFactorMip; vecMult[3]=0;
@@ -483,10 +552,18 @@ void AliTPCcalibGainMult::Process(AliESDEvent *event) {
        //
        // topology histogram (absolute)
        //                        (0.) weighted dE/dx, (1.) 0:Qtot - 1:Qmax, (2.) tgl, (3.) 1./pT
-       Double_t vecTopolTot[4] = {meanTot, 0, dipAngleTgl, TMath::Abs(track->GetSigned1Pt())};
-       Double_t vecTopolMax[4] = {meanMax, 1, dipAngleTgl, TMath::Abs(track->GetSigned1Pt())};
+       Double_t vecTopolTot[4] = {meanTot/corrFactorMip, 0, dipAngleTgl, TMath::Abs(track->GetSigned1Pt())};
+       Double_t vecTopolMax[4] = {meanMax/corrFactorMip, 1, dipAngleTgl, TMath::Abs(track->GetSigned1Pt())};
        fHistTopology->Fill(vecTopolTot);
        fHistTopology->Fill(vecTopolMax);
+       //
+       //
+       //                (0.)mean(wi*dEdx{i}), (1.)tgl   (2.) 1/pt   (3.) multiplicty
+       Double_t vecTopolAbsMax[4] = {meanMax/corrFactorMip, dipAngleTgl, TMath::Abs(track->GetSigned1Pt()), nContributors};
+       Double_t vecTopolAbsTot[4] = {meanTot/corrFactorMip, dipAngleTgl, TMath::Abs(track->GetSigned1Pt()), nContributors};
+       fHistTopolAbsMax->Fill(vecTopolAbsMax);
+       fHistTopolAbsTot->Fill(vecTopolAbsTot);
+       
       }
       //
       //
@@ -585,9 +662,12 @@ Long64_t AliTPCcalibGainMult::Merge(TCollection *li) {
     if (cal->GetHistGainMult()) {
        if (fHistGainMult->GetEntries()<kMaxEntriesSparse) fHistGainMult->Add(cal->GetHistGainMult());
     } 
-    if (cal->GetHistTopology()) {
-       fHistTopology->Add(cal->GetHistTopology());
-    } 
+    if (cal->GetHistTopology()) fHistTopology->Add(cal->GetHistTopology());
+    //
+    if (cal->GetHistTopolRelMax()) fHistTopolRelMax->Add(cal->GetHistTopolRelMax());
+    if (cal->GetHistTopolRelTot()) fHistTopolRelTot->Add(cal->GetHistTopolRelTot());
+    if (cal->GetHistTopolAbsMax()) fHistTopolAbsMax->Add(cal->GetHistTopolAbsMax());
+    if (cal->GetHistTopolAbsTot()) fHistTopolAbsTot->Add(cal->GetHistTopolAbsTot());
     //
     if (cal->fHistdEdxMap){
       if (fHistdEdxMap) fHistdEdxMap->Add(cal->fHistdEdxMap);
index 7896be8..d8c80c7 100644 (file)
@@ -48,6 +48,11 @@ public:
   THnSparseF *      GetHistGainMult() const {return fHistGainMult;};  
   THnF       *      GetHistTopology() const {return fHistTopology;};
   //
+  THnF       *      GetHistTopolRelMax() const { return fHistTopolRelMax;};
+  THnF       *      GetHistTopolRelTot() const { return fHistTopolRelTot;};
+  THnF       *      GetHistTopolAbsMax() const { return fHistTopolAbsMax;};
+  THnF       *      GetHistTopolAbsTot() const { return fHistTopolAbsTot;};
+  //
   THnSparseF * GetHistdEdxMap() const { return fHistdEdxMap;}      // 4D dedx histogram
   THnSparseF * GetHistdEdxMax() const { return fHistdEdxMax;}      // 4D dedx histogram
   THnSparseF * GetHistdEdxTot() const { return fHistdEdxTot;}      // 4D dedx histogram
@@ -121,6 +126,12 @@ private:
   THnSparseF * fHistPadEqual;     //  histogram for the equalization of the gain in the different pad regions -> pass0
   THnSparseF * fHistGainMult;     //  histogram which shows decrease of MIP signal as a function
   THnF       * fHistTopology;     //  histogram for topological corrections of signal - dip angle theta and curvature (1/pT)
+  //
+  THnF       * fHistTopolRelMax;  //  histogram for topological corrections  (theta,1/pT) of Qmax for each pad region relative to each other
+  THnF       * fHistTopolRelTot;  //  histogram for topological corrections  (theta,1/pT) of Qtot for each pad region relative to each other
+  THnF       * fHistTopolAbsMax;  //  histogram for topological corrections  (theta,1/pT) of Qmax for each pad region relative to each other
+  THnF       * fHistTopolAbsTot;  //  histogram for topological corrections  (theta,1/pT) of Qtot for each pad region relative to each other
+  //
   TMatrixD *fPIDMatrix;           //! custom PID matrix
   //
   THnSparseF * fHistdEdxMap;      // 4D dedx histogram - per sector/phi
index 0c87dd0..fe8dab3 100644 (file)
@@ -1299,6 +1299,11 @@ Float_t  AliTPCseed::CookdEdxAnalytical(Double_t low, Double_t up, Int_t type, I
     
     Float_t              ty = TMath::Abs(point->GetAngleY());
     Float_t              tz = TMath::Abs(point->GetAngleZ()*TMath::Sqrt(1+ty*ty));
+    //
+    // cut on inclination angle on outer pads <-> to be put to recoParam
+    //
+    if (ty > 1.2 && ipad == 2) continue;
+    //
     Float_t yres0 = parcl->GetRMS0(0,ipad,0,0)/param->GetPadPitchWidth(cluster->GetDetector());
     Float_t zres0 = parcl->GetRMS0(1,ipad,0,0)/param->GetZWidth();