]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG0/dNdPt/AlidNdPtCorrection.cxx
dNdPt analysis update for preliminary spectra
[u/mrichter/AliRoot.git] / PWG0 / dNdPt / AlidNdPtCorrection.cxx
index f7545f433c177d5d732914cae6a555feba45b953..56a3efbe1e3dccba59acb8346d04258ff31a8ef4 100644 (file)
@@ -48,6 +48,7 @@
 \r
 #include "AliPWG0Helper.h"\r
 #include "AlidNdPtHelper.h"\r
+#include "AlidNdPtAnalysis.h"\r
 #include "AlidNdPtCorrection.h"\r
 \r
 using namespace std;\r
@@ -94,6 +95,7 @@ ClassImp(AlidNdPtCorrection)
   fEventMultCorrelationMatrix(0),\r
   fZvNorm(0),\r
   fZvEmptyEventsNorm(0),\r
+  fLHCBin0Background(0),\r
   fCorrTriggerMBtoInelEventMatrix(0),\r
   fCorrTriggerMBtoNDEventMatrix(0),\r
   fCorrTriggerMBtoNSDEventMatrix(0),\r
@@ -170,6 +172,7 @@ AlidNdPtCorrection::AlidNdPtCorrection(Char_t* name, Char_t* title, TString corr
   fEventMultCorrelationMatrix(0),\r
   fZvNorm(0),\r
   fZvEmptyEventsNorm(0),\r
+  fLHCBin0Background(0),\r
   fCorrTriggerMBtoInelEventMatrix(0),\r
   fCorrTriggerMBtoNDEventMatrix(0),\r
   fCorrTriggerMBtoNSDEventMatrix(0),\r
@@ -290,10 +293,17 @@ void AlidNdPtCorrection::Init(){
   //const Int_t ptNbins = 52; \r
   //Double_t binsPt[ptNbins+1] = { 0.20, 0.30, 0.40, 0.50, 0.60, 0.70, 0.80, 0.90, 1.00, 1.10, 1.20, 1.30, 1.40, 1.50, 1.60, 1.70, 1.80, 1.90, 2.00, 2.10, 2.20, 2.30, 2.40, 2.50, 2.60, 2.70, 2.80, 2.90, 3.00, 3.10, 3.20, 3.30, 3.40, 3.50, 3.60, 3.70, 3.80, 3.90, 4.00, 4.20, 4.40, 4.60, 4.80, 5.00, 5.20, 5.40, 5.60, 5.80, 6.00, 7.00, 7.60, 8.80, 9.60 }; \r
 \r
+ /*\r
   const Int_t ptNbins = 56; \r
   Double_t binsPt[ptNbins+1] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.2,2.4,2.6,2.8,3.0,3.2,3.4,3.6,3.8,4.0,4.5,5.0,5.5,6.0,6.5,7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0};\r
   Double_t binsEta[etaNbins+1] = {-1.5,-1.4,-1.3,-1.2,-1.1,-1.0,-0.9,-0.8,-0.7,-0.6,-0.5,-0.4,-0.3,-0.2,-0.1,0.,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2,1.3,1.4,1.5};\r
   Double_t binsZv[zvNbins+1] = {-30.,-25.,-20.,-15.,-10.,-5.,0.,5.,10.,15.,20.,25.,30.};\r
+  */\r
+\r
+  const Int_t ptNbins = 55; \r
+  Double_t binsPt[ptNbins+1] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.2,2.4,2.6,2.8,3.0,3.2,3.4,3.6,3.8,4.0,4.5,5.0,5.5,6.0,6.5,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0};\r
+  Double_t binsEta[etaNbins+1] = {-1.5,-1.4,-1.3,-1.2,-1.1,-1.0,-0.9,-0.8,-0.7,-0.6,-0.5,-0.4,-0.3,-0.2,-0.1,0.,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2,1.3,1.4,1.5};\r
+  Double_t binsZv[zvNbins+1] = {-30.,-25.,-20.,-15.,-10.,-5.,0.,5.,10.,15.,20.,25.,30.};\r
 \r
 \r
   //\r
@@ -901,6 +911,11 @@ void AlidNdPtCorrection::Init(){
          Printf("No %s matrix \n", "fZvEmptyEventsNorm");\r
       }\r
 \r
+      fLHCBin0Background = (TH1D*)folder->FindObject("hLHCBin0Background");\r
+      if(!fLHCBin0Background) {\r
+         Printf("No %s matrix \n", "fLHCBin0Background");\r
+      }\r
+\r
       //\r
       // track-event level corrections (zv,pt,eta)\r
       //\r
@@ -989,8 +1004,6 @@ void AlidNdPtCorrection::Process(AliESDEvent *esdEvent, AliMCEvent *mcEvent)
     }\r
 \r
     if(IsUseMCInfo()) { \r
-      //static AliTriggerAnalysis* triggerAnalysis = new AliTriggerAnalysis;\r
-      //isEventTriggered = triggerAnalysis->IsTriggerFired(esdEvent, GetTrigger());\r
       trigSel->SetAnalyzeMC();\r
       isEventTriggered = trigSel->IsCollisionCandidate(esdEvent);\r
     }\r
@@ -1045,7 +1058,7 @@ void AlidNdPtCorrection::Process(AliESDEvent *esdEvent, AliMCEvent *mcEvent)
     fMCEventHist1->Fill(vMCEventHist1);\r
 \r
     // multipliticy of all MC primary tracks\r
-    // in Zvtx, pt and eta ranges\r
+    // in Zvtx, eta ranges\r
     multMCTrueTracks = AlidNdPtHelper::GetMCTrueTrackMult(mcEvent,evtCuts,accCuts);\r
 \r
   } // end bUseMC\r
@@ -1058,60 +1071,61 @@ void AlidNdPtCorrection::Process(AliESDEvent *esdEvent, AliMCEvent *mcEvent)
     Bool_t bRedoTPCVertex = evtCuts->IsRedoTPCVertex();\r
     Bool_t bUseConstraints = evtCuts->IsUseBeamSpotConstraint();\r
     vtxESD = AlidNdPtHelper::GetVertex(esdEvent,evtCuts,accCuts,esdTrackCuts,GetAnalysisMode(),kFALSE,bRedoTPCVertex,bUseConstraints); \r
-    isRecVertex = AlidNdPtHelper::TestRecVertex(vtxESD, GetAnalysisMode(), kFALSE); \r
+    isRecVertex = AlidNdPtHelper::TestRecVertex(vtxESD, esdEvent->GetPrimaryVertexSPD(), GetAnalysisMode(), kFALSE);\r
   }\r
-  if( IsUseMCInfo() &&  !evtCuts->IsRecVertexRequired() ) {\r
-    vtxESD = new AliESDVertex(vtxMC[2],10.,genHeader->NProduced());\r
+\r
+  if( IsUseMCInfo() && !evtCuts->IsRecVertexRequired() ) {\r
+    vtxESD = new AliESDVertex(vtxMC[2],10.,genHeader->NProduced(),"smearMC");\r
     isRecVertex = kTRUE;\r
   }\r
+\r
   Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD) && isRecVertex; \r
-  //printf("isEventOK %d, isRecVertex %d, nContributors %d, Zv %f\n",isEventOK, isRecVertex, vtxESD->GetNContributors(), vtxESD->GetZv());\r
+  //printf("isEventOK %d, isEventTriggered %d \n",isEventOK, isEventTriggered);\r
+  //printf("GetAnalysisMode() %d \n",GetAnalysisMode());\r
 \r
-  //\r
-  // get multiplicity vertex contributors\r
-  //\r
+  // vertex contributors\r
   Int_t multMBTracks = 0; \r
-  if(GetAnalysisMode() == AlidNdPtHelper::kTPC || GetAnalysisMode() == AlidNdPtHelper::kMCRec) {  \r
-    multMBTracks = AlidNdPtHelper::GetTPCMBTrackMult(esdEvent,evtCuts,accCuts,esdTrackCuts);\r
+  if(GetAnalysisMode() == AlidNdPtHelper::kTPC) \r
+  {  \r
+     if(vtxESD->GetStatus() && isRecVertex)\r
+       multMBTracks = AlidNdPtHelper::GetTPCMBTrackMult(esdEvent,evtCuts,accCuts,esdTrackCuts);\r
   } \r
-  else if(GetAnalysisMode() == AlidNdPtHelper::kTPCITS || GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtx || \r
-          GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtxUpdate || GetAnalysisMode() == AlidNdPtHelper::kMCRec || \r
-         GetAnalysisMode()==AlidNdPtHelper::kTPCITSHybrid) {\r
-    //if(vtxESD->GetStatus())\r
-    //   multMBTracks = vtxESD->GetNContributors();\r
-\r
-    // origin Jan Fiete GO\r
-    const AliMultiplicity* mult = esdEvent->GetMultiplicity();\r
-    if (mult) {\r
-      Int_t trackletCount = 0;\r
-\r
-      for(Int_t i=0; i<mult->GetNumberOfTracklets(); ++i) {\r
-        Float_t deltaPhi = mult->GetDeltaPhi(i);\r
-        // prevent values to be shifted by 2 Pi()\r
-        if (deltaPhi < -TMath::Pi())\r
-          deltaPhi += TMath::Pi() * 2;\r
-        if (deltaPhi > TMath::Pi())\r
-          deltaPhi -= TMath::Pi() * 2;\r
-\r
-         //if (fDeltaPhiCut > 0 && TMath::Abs(deltaPhi) > fDeltaPhiCut)\r
-         // continue;\r
-\r
-       trackletCount++;\r
-       }\r
-       //multMBTracks = mult->GetNumberOfTracklets();\r
-       multMBTracks = trackletCount;\r
-       //printf("trackletCount %d \n", trackletCount);\r
-     }\r
-     else {\r
-       AliDebug(AliLog::kError, Form("Multiplicty %p", mult));\r
-       return; \r
-     }\r
+  else if( GetAnalysisMode() == AlidNdPtHelper::kTPCITS ||  GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtx || \r
+           GetAnalysisMode()==AlidNdPtHelper::kTPCSPDvtxUpdate || GetAnalysisMode()==AlidNdPtHelper::kTPCITSHybrid ) \r
+  {\r
+     const AliMultiplicity* mult = esdEvent->GetMultiplicity();\r
+     //if(mult && vtxESD->GetStatus() && isRecVertex)\r
+     if(mult)\r
+       multMBTracks = mult->GetNumberOfTracklets();\r
+    \r
   } \r
+  else if( GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtx || GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate || \r
+           GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt)\r
+  {\r
+     if(vtxESD->GetStatus() && isRecVertex)\r
+       multMBTracks = vtxESD->GetNContributors();\r
+\r
+  }\r
   else {\r
     AliDebug(AliLog::kError, Form("Found analysis type %s", GetAnalysisMode()));\r
     return; \r
   }\r
 \r
+\r
+  /*\r
+  //\r
+  // set 0-bin\r
+  //\r
+  if( GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtx || \r
+      GetAnalysisMode() == AlidNdPtHelper::kTPCTrackSPDvtxUpdate || \r
+      GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt) \r
+  {\r
+      if(AlidNdPtAnalysis::IsBinZeroTrackSPDvtx(esdEvent)) multMBTracks = 0;\r
+  } else {\r
+      if(AlidNdPtAnalysis::IsBinZeroSPDvtx(esdEvent)) multMBTracks = 0;\r
+  }\r
+  */\r
+\r
   //\r
   // correct event and track histograms\r
   //\r
@@ -1171,9 +1185,28 @@ void AlidNdPtCorrection::Process(AliESDEvent *esdEvent, AliMCEvent *mcEvent)
         if(!isCosmic) continue;\r
       }\r
 \r
-      if(esdTrackCuts->AcceptTrack(track) && accCuts->AcceptTrack(track)) \r
-        multRecTemp++;\r
-    }  \r
+      if(esdTrackCuts->AcceptTrack(track)) \r
+      {\r
+        if(GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt) {\r
+          if(AlidNdPtHelper::IsGoodImpPar(track) && accCuts->AcceptTrack(track)) multRecTemp++;\r
+        }\r
+       else {\r
+          if(accCuts->AcceptTrack(track)) multRecTemp++;\r
+        }\r
+      }  \r
+    }\r
+\r
+    // check multiplicity\r
+    const AliMultiplicity* mult = esdEvent->GetMultiplicity();\r
+    Int_t trackletMult = 0;\r
+    if (mult) {\r
+       for(Int_t i=0; i<mult->GetNumberOfTracklets(); i++) {\r
+          if(TMath::Abs(mult->GetEta(i)) < accCuts->GetMaxEta() )\r
+           trackletMult++;\r
+       }\r
+    }\r
+    // use tracklet multiplicity\r
+    multRecTemp = trackletMult;\r
 \r
     //\r
     for(Int_t i=0; i<entries;++i) \r
@@ -1182,7 +1215,6 @@ void AlidNdPtCorrection::Process(AliESDEvent *esdEvent, AliMCEvent *mcEvent)
       if(!track) continue;\r
       if(track->Charge()==0) continue;\r
 \r
-\r
       // only postive charged \r
       if(GetParticleMode() == AlidNdPtHelper::kPlus && track->Charge() < 0) \r
       continue;\r
@@ -1192,8 +1224,9 @@ void AlidNdPtCorrection::Process(AliESDEvent *esdEvent, AliMCEvent *mcEvent)
       continue;\r
         \r
       // track-level corrections\r
-      if(esdTrackCuts->AcceptTrack(track)) \r
-      {\r
+      if(!esdTrackCuts->AcceptTrack(track))  continue;\r
+      if(GetAnalysisMode()==AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt && !AlidNdPtHelper::IsGoodImpPar(track)) continue;\r
+\r
         // cosmics analysis\r
         isCosmic = kFALSE;\r
         if( GetParticleMode()==AlidNdPtHelper::kCosmic )\r
@@ -1221,10 +1254,10 @@ void AlidNdPtCorrection::Process(AliESDEvent *esdEvent, AliMCEvent *mcEvent)
         // if TPC-ITS hybrid tracking (kTPCITSHybrid)\r
         // replace track parameters with TPC-ony track parameters\r
         //\r
-        if( GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybrid ) \r
+        if( GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybrid || GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtx || GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybridTrackSPDvtxDCArPt\r
         {\r
-          // Relate TPC-only tracks to SPD vertex\r
-          isOK = track->RelateToVertexTPCBxByBz(esdEvent->GetPrimaryVertexSPD(), b, kVeryBig);\r
+          // Relate TPC-only tracks to Tracks or SPD vertex\r
+          isOK = track->RelateToVertexTPCBxByBz(vtxESD, b, kVeryBig);\r
           if(!isOK) continue;\r
 \r
          // replace esd track parameters with TPCinner\r
@@ -1236,13 +1269,13 @@ void AlidNdPtCorrection::Process(AliESDEvent *esdEvent, AliMCEvent *mcEvent)
         } \r
 \r
         //\r
-        if (GetAnalysisMode()==AlidNdPtHelper::kTPCSPDvtxUpdate) \r
+        if (GetAnalysisMode()==AlidNdPtHelper::kTPCSPDvtxUpdate || GetAnalysisMode()==AlidNdPtHelper::kTPCTrackSPDvtxUpdate\r
         {\r
           //\r
           // update track parameters\r
           //\r
            AliExternalTrackParam cParam;\r
-          isOK = track->RelateToVertexTPC(esdEvent->GetPrimaryVertexSPD(),esdEvent->GetMagneticField(),kVeryBig,&cParam);\r
+          isOK = track->RelateToVertexTPC(vtxESD,esdEvent->GetMagneticField(),kVeryBig,&cParam);\r
           if(!isOK) continue;\r
           track->Set(cParam.GetX(),cParam.GetAlpha(),cParam.GetParameter(),cParam.GetCovariance());\r
 \r
@@ -1273,10 +1306,11 @@ void AlidNdPtCorrection::Process(AliESDEvent *esdEvent, AliMCEvent *mcEvent)
             multRec++;\r
           }\r
          }\r
-       }\r
-    }\r
+      }\r
+\r
     // event-level corrections\r
-    if(GetAnalysisMode()==AlidNdPtHelper::kMCRec && IsUseMCInfo()) { \r
+    if(GetAnalysisMode()==AlidNdPtHelper::kMCRec && IsUseMCInfo()) \r
+    { \r
       FillHistograms(AlidNdPtHelper::kRecEvents,vtxMC[2],multMBTracks);\r
     }\r
     else {\r
@@ -1285,22 +1319,22 @@ void AlidNdPtCorrection::Process(AliESDEvent *esdEvent, AliMCEvent *mcEvent)
 \r
     // calculate meanPt from the event\r
     Double_t meanPtMult[8] = {0};  \r
-    Double_t meanPtTrueMult[8] = {0};  \r
     for (Int_t i = 0; i<8; i++) {\r
       if(!fCorrRecTrackMultHist1[i]) continue;\r
-      meanPtMult[i] = fCorrRecTrackPt1[i]->Projection(0)->GetMean();    \r
+      TH1D *hp = (TH1D *)fCorrRecTrackPt1[i]->Projection(0);\r
+      if(!hp) continue;\r
+      meanPtMult[i] = hp->GetMean();    \r
       Double_t vCorrRecTrackMeanPtMultHist1[2] = {meanPtMult[i],multRecTemp};\r
       fCorrRecTrackMeanPtMultHist1[i]->Fill(vCorrRecTrackMeanPtMultHist1); \r
       \r
       if( IsUseMCInfo() ) {\r
-        if(!fCorrRecTrackPt1[i]) continue;\r
-        meanPtTrueMult[i] = fCorrRecTrackPt1[i]->Projection(0)->GetMean();    \r
         Double_t vCorrRecTrackMeanPtTrueMultHist1[2] = {meanPtMult[i],multMCTrueTracks};\r
         fCorrRecTrackMeanPtTrueMultHist1[i]->Fill(vCorrRecTrackMeanPtTrueMultHist1); \r
       }\r
 \r
       // reset pt histo for the next event\r
       if(fCorrRecTrackPt1[i])  fCorrRecTrackPt1[i]->Reset();\r
+      if(hp) delete hp;\r
     }\r
 \r
     // control event histograms\r
@@ -1308,20 +1342,22 @@ void AlidNdPtCorrection::Process(AliESDEvent *esdEvent, AliMCEvent *mcEvent)
     fRecEventHist1->Fill(vRecEventHist1);\r
 \r
     // correlation track multiplicity vs tracklet multiplicity\r
-    Double_t vRecEventMultHist1[3] = {multRecTemp, multMBTracks};\r
+    Double_t vRecEventMultHist1[3] = {multRec, multMBTracks};\r
     fRecEventMultHist1->Fill(vRecEventMultHist1);\r
-\r
-  } \r
+  }\r
 \r
   // empty events corrections\r
   // no reconstructed zv\r
-  if(isEventTriggered && multMBTracks==0) {\r
-    if(GetAnalysisMode()==AlidNdPtHelper::kMCRec && IsUseMCInfo()) {\r
+  if( isEventTriggered && multMBTracks==0 ) \r
+  {\r
+    if(GetAnalysisMode()==AlidNdPtHelper::kMCRec && IsUseMCInfo()) \r
+    {\r
       FillHistograms(AlidNdPtHelper::kTriggeredEvents,vtxMC[2],multMBTracks);\r
     }\r
     else {\r
       Double_t zv = fZvNorm->GetRandom();\r
-      FillHistograms(AlidNdPtHelper::kTriggeredEvents,zv,multMBTracks);\r
+      if(zv>evtCuts->GetMinZv() && zv<evtCuts->GetMaxZv())\r
+        FillHistograms(AlidNdPtHelper::kTriggeredEvents,zv,multMBTracks);\r
     }\r
   }\r
 \r
@@ -1335,14 +1371,19 @@ void AlidNdPtCorrection::Process(AliESDEvent *esdEvent, AliMCEvent *mcEvent)
       //\r
       Double_t vMCEventMatrix[2] = {vtxMC[2],multMBTracks};\r
       fMCAllEventMultHist1->Fill(vMCEventMatrix);\r
+\r
       if(evtType == AliPWG0Helper::kND) {\r
         fMCAllNDEventMultHist1->Fill(vMCEventMatrix);\r
       }\r
       if(evtType != AliPWG0Helper::kSD) {\r
         fMCAllNSDEventMultHist1->Fill(vMCEventMatrix);\r
       }\r
-      if(isEventTriggered) fMCTriggerMultHist1->Fill(vMCEventMatrix);\r
-      if(isEventTriggered && isEventOK) fMCEventMultHist1->Fill(vMCEventMatrix);\r
+      if(isEventTriggered) {\r
+        fMCTriggerMultHist1->Fill(vMCEventMatrix);\r
+      }\r
+      if(isEventTriggered && isEventOK) {\r
+        fMCEventMultHist1->Fill(vMCEventMatrix);\r
+      }\r
 \r
       //\r
       // MC histograms for efficiency studies\r
@@ -1384,9 +1425,9 @@ void AlidNdPtCorrection::Process(AliESDEvent *esdEvent, AliMCEvent *mcEvent)
         // sum up pt in the event\r
        sumPtMC +=gpt; \r
 \r
-        Double_t valMCAllTrackMultHist1[3] = {gpt,geta,multRec};         \r
+        Double_t valMCAllTrackMultHist1[3] = {gpt,geta,multRecTemp};     \r
         Double_t valMCAllTrackTrueMultHist1[3] = {gpt,geta,multMCTrueTracks};    \r
-        Double_t valMCAllTrackTrueMultHist2[3] = {gpt,multRec,multMCTrueTracks};         \r
+        Double_t valMCAllTrackTrueMultHist2[3] = {gpt,multRecTemp,multMCTrueTracks};     \r
 \r
         fMCAllPrimTrackMultHist1->Fill(valMCAllTrackMultHist1);\r
         fMCAllPrimTrackTrueMultHist1->Fill(valMCAllTrackTrueMultHist1);\r
@@ -1419,10 +1460,14 @@ void AlidNdPtCorrection::Process(AliESDEvent *esdEvent, AliMCEvent *mcEvent)
       //\r
       Double_t meanPtMCMult = 0;\r
       Double_t meanPtMCTrueMult = 0;\r
-      if(multRec) meanPtMCMult = sumPtMC/multRec; \r
-      if(multMCTrueTracks) meanPtMCTrueMult = sumPtMC/multMCTrueTracks; \r
+      if(multRecTemp) { \r
+        meanPtMCMult = sumPtMC/multRecTemp; \r
+      }\r
+      if(multMCTrueTracks) { \r
+        meanPtMCTrueMult = sumPtMC/multMCTrueTracks; \r
+      }\r
 \r
-      Double_t valMCMeanPtMult[2] = {meanPtMCMult,multRec};      \r
+      Double_t valMCMeanPtMult[2] = {meanPtMCMult,multRecTemp};          \r
       Double_t valMCMeanPtTrueMult[2] = {meanPtMCTrueMult,multMCTrueTracks};     \r
 \r
       fMCAllPrimTrackMeanPtMult1->Fill(valMCMeanPtMult);\r
@@ -1444,7 +1489,6 @@ void AlidNdPtCorrection::Process(AliESDEvent *esdEvent, AliMCEvent *mcEvent)
           fMCEventPrimTrackMeanPtMult1->Fill(valMCMeanPtMult);\r
           fMCEventPrimTrackMeanPtTrueMult1->Fill(valMCMeanPtTrueMult);\r
       }\r
-\r
     }\r
   } // end bUseMC\r
 \r
@@ -1482,18 +1526,23 @@ void AlidNdPtCorrection::FillHistograms(AlidNdPtHelper::EventObject eventObj, Do
 \r
   if(eventObj==AlidNdPtHelper::kTriggeredEvents && multMBTracks==0) // empty triggered events\r
   {\r
+    Double_t factLHCBack = 1.;\r
+    if(!IsUseMCInfo()) factLHCBack = fLHCBin0Background->GetBinContent(1); \r
+\r
+\r
     Int_t bin = fZvEmptyEventsNorm->FindBin(zv);\r
     Double_t factZ = fZvEmptyEventsNorm->GetBinContent(bin);\r
+\r
     Double_t corrToInelF0 = GetCorrFactZvMult(fCorrTriggerMBtoInelEventMatrix,zv,multMBTracks);\r
     Double_t corrToNDF0 = GetCorrFactZvMult(fCorrTriggerMBtoNDEventMatrix,zv,multMBTracks);\r
     Double_t corrToNSDF0 = GetCorrFactZvMult(fCorrTriggerMBtoNSDEventMatrix,zv,multMBTracks);\r
-    //printf("factZ %f, corrToInelF0 %f, corrToNDF0 %f, corrToNSDF0 %f \n",factZ,corrToInelF0,corrToNDF0,corrToNSDF0);\r
+    printf("factLHCBack %f, factZ %f, corrToInelF0 %f, corrToNDF0 %f, corrToNSDF0 %f \n",factLHCBack,factZ,corrToInelF0,corrToNDF0,corrToNSDF0);\r
 \r
     fCorrRecEventHist2[0]->Fill(vEventMatrix);\r
-    fCorrRecEventHist2[1]->Fill(vEventMatrix,factZ);\r
-    fCorrRecEventHist2[2]->Fill(vEventMatrix,factZ*corrToInelF0);\r
-    fCorrRecEventHist2[3]->Fill(vEventMatrix,factZ*corrToNDF0);\r
-    fCorrRecEventHist2[4]->Fill(vEventMatrix,factZ*corrToNSDF0);\r
+    fCorrRecEventHist2[1]->Fill(vEventMatrix,factLHCBack*factZ);\r
+    fCorrRecEventHist2[2]->Fill(vEventMatrix,factLHCBack*factZ*corrToInelF0);\r
+    fCorrRecEventHist2[3]->Fill(vEventMatrix,factLHCBack*factZ*corrToNDF0);\r
+    fCorrRecEventHist2[4]->Fill(vEventMatrix,factLHCBack*factZ*corrToNSDF0);\r
   }\r
 }\r
 \r
@@ -1542,7 +1591,7 @@ void AlidNdPtCorrection::FillHistograms(AliESDtrack * const esdTrack, AliStack *
   {\r
     // track level corrections\r
     Double_t trackEffF = 1.0;  \r
-    if(pt < 2.5) trackEffF = GetCorrFactZvPtEta(fCorrTrackMatrix,zv,pt,eta);\r
+    if(pt < 2.6) trackEffF = GetCorrFactZvPtEta(fCorrTrackMatrix,zv,pt,eta);\r
     else trackEffF = GetCorrFactZvPtEta(fCorrHighPtTrackMatrix,zv,pt,eta);\r
 \r
     Double_t trackContF = GetContFactZvPtEta(fContTrackMatrix,zv,pt,eta);\r
@@ -1663,7 +1712,15 @@ Double_t AlidNdPtCorrection::GetContFactZvPtEta(THnSparse * const hist, Double_t
  Int_t binz = az->FindBin(eta);\r
  Int_t dim[3] = {binx,biny,binz};\r
 \r
- Double_t fact  = 1.0-hist->GetBinContent(dim);  \r
+ //\r
+ //  additional correction for secondary \r
+ //  particles with strangeness (data driven)\r
+ // \r
+ Double_t corrFact = 1.;\r
+ if(!IsUseMCInfo()) corrFact = AlidNdPtHelper::GetStrangenessCorrFactor(pt);\r
+ //printf("pt %f, corrFact %f \n", pt, corrFact);\r
+\r
+ Double_t fact  = 1.0 - corrFact*hist->GetBinContent(dim);  \r
  //Double_t fact  = hist->GetBinContent(dim);  \r
 \r
 return fact;\r