]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGJE/UserTasks/AliAnalysisTaskIDFragmentationFunction.cxx
Static cast needed by C++11
[u/mrichter/AliRoot.git] / PWGJE / UserTasks / AliAnalysisTaskIDFragmentationFunction.cxx
index 5d624a4fcb35d989100c97d3491322932cdebfcf..259402fa65ac5a30c29b0a0d2eb7c343dbc9f2e3 100644 (file)
@@ -244,6 +244,8 @@ AliAnalysisTaskIDFragmentationFunction::AliAnalysisTaskIDFragmentationFunction()
 
    ,fRandom(0)
    
+   ,fOnlyLeadingJets(kFALSE)
+   
    // PID framework
    ,fNumInclusivePIDtasks(0)
    ,fNumJetPIDtasks(0)
@@ -460,6 +462,7 @@ AliAnalysisTaskIDFragmentationFunction::AliAnalysisTaskIDFragmentationFunction(c
   ,fProNtracksLeadingJetRecSecS(0)  
   ,fProNtracksLeadingJetRecSecSsc(0)
   ,fRandom(0)
+  ,fOnlyLeadingJets(kFALSE)
   // PID framework
   ,fNumInclusivePIDtasks(0)
   ,fNumJetPIDtasks(0)
@@ -678,6 +681,7 @@ AliAnalysisTaskIDFragmentationFunction::AliAnalysisTaskIDFragmentationFunction(c
   ,fProNtracksLeadingJetRecSecS(copy.fProNtracksLeadingJetRecSecS)  
   ,fProNtracksLeadingJetRecSecSsc(copy.fProNtracksLeadingJetRecSecSsc)
   ,fRandom(copy.fRandom)
+  ,fOnlyLeadingJets(copy.fOnlyLeadingJets)
   // PID framework
   ,fNumInclusivePIDtasks(copy.fNumInclusivePIDtasks)
   ,fNumJetPIDtasks(copy.fNumJetPIDtasks)
@@ -939,6 +943,7 @@ AliAnalysisTaskIDFragmentationFunction& AliAnalysisTaskIDFragmentationFunction::
     fProNtracksLeadingJetRecSecS   = o.fProNtracksLeadingJetRecSecS;  
     fProNtracksLeadingJetRecSecSsc = o.fProNtracksLeadingJetRecSecSsc;
     fRandom                        = o.fRandom;
+    fOnlyLeadingJets               = o.fOnlyLeadingJets;
     
     // PID framework
    fUseInclusivePIDtask            = o.fUseInclusivePIDtask;
@@ -1492,7 +1497,7 @@ Bool_t AliAnalysisTaskIDFragmentationFunction::Notify()
     }
   
     if(!fh1Xsec||!fh1Trials){
-      Printf("%s%d No Histogram fh1Xsec",(char*)__FILE__,__LINE__);
+      Printf("%s:%d No Histogram fh1Xsec",(char*)__FILE__,__LINE__);
       return kFALSE;
     }
     
@@ -1503,6 +1508,7 @@ Bool_t AliAnalysisTaskIDFragmentationFunction::Notify()
   }
 
   // Set seed for backg study
+  delete fRandom;
   fRandom = new TRandom3();
   fRandom->SetSeed(0);
 
@@ -2255,6 +2261,7 @@ void AliAnalysisTaskIDFragmentationFunction::UserCreateOutputObjects()
   
   
   // Load PID framework if desired
+  if(fDebug > 1) Printf("AliAnalysisTaskIDFragmentationFunction::UserCreateOutputObjects() -> Loading PID framework");
   
   fUseJetPIDtask = fIDFFMode || fFFMode;
   fUseInclusivePIDtask = fQAMode && (fQAMode&1);
@@ -2269,7 +2276,12 @@ void AliAnalysisTaskIDFragmentationFunction::UserCreateOutputObjects()
     }
     
     if (fUseJetPIDtask) {
+      delete [] fJetPIDtask;
+      fJetPIDtask = 0x0;
+      
       if (fNumJetPIDtasks > 0) {
+        fJetPIDtask = new AliAnalysisTaskPID*[fNumJetPIDtasks];
+        
         for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
           fJetPIDtask[i] = (AliAnalysisTaskPID*)tasks->FindObject(fNameJetPIDtask[i].Data());
           
@@ -2280,13 +2292,18 @@ void AliAnalysisTaskIDFragmentationFunction::UserCreateOutputObjects()
         }
       }
       else {
-        Printf("ERROR: zero jet pid tasks!\n");
+        Printf("WARNING: zero jet pid tasks!\n");
         fUseJetPIDtask = kFALSE;
       }
     }
     
     if (fUseInclusivePIDtask) {
+      delete [] fInclusivePIDtask;
+      fInclusivePIDtask = 0x0;
+      
       if (fNumInclusivePIDtasks > 0) {
+        fInclusivePIDtask = new AliAnalysisTaskPID*[fNumInclusivePIDtasks];
+        
         for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
           fInclusivePIDtask[i] = (AliAnalysisTaskPID*)tasks->FindObject(fNameInclusivePIDtask[i].Data());
           
@@ -2297,13 +2314,17 @@ void AliAnalysisTaskIDFragmentationFunction::UserCreateOutputObjects()
         }
       }
       else {
-        Printf("ERROR: zero inclusive pid tasks!\n");
-        fUseJetPIDtask = kFALSE;
+        Printf("WARNING: zero inclusive pid tasks!\n");
+        fUseInclusivePIDtask = kFALSE;
       }
     }
   }
 
+  if(fDebug > 2) Printf("AliAnalysisTaskIDFragmentationFunction::UserCreateOutputObjects() -> Posting Output");
+  
   PostData(1, fCommonHistList);
+  
+  if(fDebug > 2) Printf("AliAnalysisTaskIDFragmentationFunction::UserCreateOutputObjects() -> Done");
 }
 
 //_______________________________________________
@@ -2418,6 +2439,20 @@ void AliAnalysisTaskIDFragmentationFunction::UserExec(Option_t *)
       return;
     }
   }
+  
+  
+  // Count events with trigger selection, note: Set centrality percentile fix to -1 for pp for PID framework
+  if (fUseJetPIDtask) {
+    for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
+      fJetPIDtask[i]->IncrementEventCounter(fIsPP ? -1. : centPercent, AliAnalysisTaskPID::kTriggerSel);
+    }
+  }
+  
+  if (fUseInclusivePIDtask) {
+    for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
+      fInclusivePIDtask[i]->IncrementEventCounter(fIsPP ? -1. : centPercent, AliAnalysisTaskPID::kTriggerSel);
+    }
+  }
 
   // *** vertex cut ***
   AliAODVertex* primVtx = fAOD->GetPrimaryVertex();
@@ -2431,13 +2466,35 @@ void AliAnalysisTaskIDFragmentationFunction::UserExec(Option_t *)
   
   
   if (fDebug > 1) Printf("%s:%d primary vertex selection: %d", (char*)__FILE__,__LINE__,nTracksPrim);
-  if(!nTracksPrim){
+  if(nTracksPrim <= 0) {
     if (fDebug > 1) Printf("%s:%d primary vertex selection: event REJECTED...",(char*)__FILE__,__LINE__); 
     fh1EvtSelection->Fill(3.);
     PostData(1, fCommonHistList);
     return;
   }
   
+  TString primVtxName(primVtx->GetName());
+
+  if(primVtxName.CompareTo("TPCVertex",TString::kIgnoreCase) == 1){
+    if (fDebug > 1) Printf("%s:%d primary vertex selection: TPC vertex, event REJECTED...",(char*)__FILE__,__LINE__);
+    fh1EvtSelection->Fill(5.);
+    PostData(1, fCommonHistList);
+    return;
+  }
+  
+  // Count events with trigger selection and vtx cut, note: Set centrality percentile fix to -1 for pp for PID framework
+  if (fUseJetPIDtask) {
+    for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
+      fJetPIDtask[i]->IncrementEventCounter(fIsPP ? -1. : centPercent, AliAnalysisTaskPID::kTriggerSelAndVtxCut);
+    }
+  }
+  
+  if (fUseInclusivePIDtask) {
+    for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
+      fInclusivePIDtask[i]->IncrementEventCounter(fIsPP ? -1. : centPercent, AliAnalysisTaskPID::kTriggerSelAndVtxCut);
+    }
+  }
+  
   fh1VertexZ->Fill(primVtx->GetZ());
   
   if(TMath::Abs(primVtx->GetZ())>fMaxVertexZ){
@@ -2447,15 +2504,19 @@ void AliAnalysisTaskIDFragmentationFunction::UserExec(Option_t *)
     return; 
   }
   
-  TString primVtxName(primVtx->GetName());
-
-  if(primVtxName.CompareTo("TPCVertex",TString::kIgnoreCase) == 1){
-    if (fDebug > 1) Printf("%s:%d primary vertex selection: TPC vertex, event REJECTED...",(char*)__FILE__,__LINE__);
-    fh1EvtSelection->Fill(5.);
-    PostData(1, fCommonHistList);
-    return;
+  // Count events with trigger selection and vtx cut, note: Set centrality percentile fix to -1 for pp for PID framework
+  if (fUseJetPIDtask) {
+    for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
+      fJetPIDtask[i]->IncrementEventCounter(fIsPP ? -1. : centPercent, AliAnalysisTaskPID::kTriggerSelAndVtxCutAndZvtxCut);
+    }
   }
-
+  
+  if (fUseInclusivePIDtask) {
+    for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
+      fInclusivePIDtask[i]->IncrementEventCounter(fIsPP ? -1. : centPercent, AliAnalysisTaskPID::kTriggerSelAndVtxCutAndZvtxCut);
+    }
+  }
+  
   if (fDebug > 1) Printf("%s:%d event ACCEPTED ...",(char*)__FILE__,__LINE__); 
   fh1EvtSelection->Fill(0.);
   fh1EvtCent->Fill(centPercent);
@@ -2638,17 +2699,28 @@ void AliAnalysisTaskIDFragmentationFunction::UserExec(Option_t *)
     (char*)__FILE__,__LINE__,nTCutsEfficiency,nRecPartCutsEfficiency);
   
   AliPIDResponse* pidResponse = 0x0;
+  Bool_t tuneOnDataTPC = kFALSE;
   if (fUseJetPIDtask || fUseInclusivePIDtask) {
-    if (!inputHandler)
+    if (!inputHandler) {
       AliFatal("Input handler needed");
+      return;
+    }
     else {
       // PID response object
       pidResponse = inputHandler->GetPIDResponse();
-      if (!pidResponse)
+      if (!pidResponse) {
         AliFatal("PIDResponse object was not created");
+        return;
+      }
+      else {
+        tuneOnDataTPC = pidResponse->IsTunedOnData() &&
+                        ((pidResponse->GetTunedOnDataMask() & AliPIDResponse::kDetTPC) == AliPIDResponse::kDetTPC);
+      }
     }
   }
   
+  if(fDebug>2)Printf("%s:%d Starting processing...",(char*)__FILE__,__LINE__);
+  
   //____ analysis, fill histos ___________________________________________________
   
   if(fQAMode){
@@ -2695,14 +2767,16 @@ void AliAnalysisTaskIDFragmentationFunction::UserExec(Option_t *)
           if (TMath::Abs(chargeMC) < 0.01)
             continue; // Reject neutral particles (only relevant, if mcID is not used)
           
-          Double_t valuesGenYield[AliAnalysisTaskPID::kGenYieldNumAxes] = { mcID, pT, centPercent, -1, -1, -1, -1 };
+          Double_t valuesGenYield[AliAnalysisTaskPID::kGenYieldNumAxes] = { static_cast<Double_t>(mcID), pT, centPercent, -1, -1, -1, -1 };
 
           for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
-            valuesGenYield[fInclusivePIDtask[i]->GetIndexOfChargeAxisGenYield()] = chargeMC;
-            fInclusivePIDtask[i]->FillGeneratedYield(valuesGenYield);
+            if (fInclusivePIDtask[i]->IsInAcceptedEtaRange(TMath::Abs(part->Eta()))) {
+              valuesGenYield[fInclusivePIDtask[i]->GetIndexOfChargeAxisGenYield()] = chargeMC;
+              fInclusivePIDtask[i]->FillGeneratedYield(valuesGenYield);
+            }
           }
           
-          Double_t valuesEff[AliAnalysisTaskPID::kEffNumAxes] = { mcID, pT, part->Eta(), chargeMC,
+          Double_t valuesEff[AliAnalysisTaskPID::kEffNumAxes] = { static_cast<Double_t>(mcID), pT, part->Eta(), chargeMC,
                                                                   centPercent, -1, -1, -1 };// no jet pT etc since inclusive spectrum 
           for (Int_t i = 0; i < fNumInclusivePIDtasks; i++)
             fInclusivePIDtask[i]->FillEfficiencyContainer(valuesEff, AliAnalysisTaskPID::kStepGenWithGenCuts);
@@ -2715,12 +2789,15 @@ void AliAnalysisTaskIDFragmentationFunction::UserExec(Option_t *)
           // fill inclusive tracks XXX, they have the same track cuts!
           AliAODTrack * inclusiveaod  = dynamic_cast<AliAODTrack*>(fTracksRecCutsEfficiency->At(it));
           if(inclusiveaod){
-            Double_t dEdxTPC = pidResponse->IsTunedOnData() ? pidResponse->GetTPCsignalTunedOnData(inclusiveaod) : 
-            inclusiveaod->GetTPCsignal();
+            Double_t dEdxTPC = tuneOnDataTPC ? pidResponse->GetTPCsignalTunedOnData(inclusiveaod) 
+                                             : inclusiveaod->GetTPCsignal();
             
             if (dEdxTPC <= 0)
               continue;
             
+            Bool_t survivedTPCCutMIGeo = AliAnalysisTaskPID::TPCCutMIGeo(inclusiveaod, InputEvent());
+            Bool_t survivedTPCnclCut = AliAnalysisTaskPID::TPCnclCut(inclusiveaod);
+            
             Int_t label = TMath::Abs(inclusiveaod->GetLabel());
             
             // find MC track in our list, if available
@@ -2755,17 +2832,25 @@ void AliAnalysisTaskIDFragmentationFunction::UserExec(Option_t *)
                 continue;
                 
               // AliAODMCParticle->Charge() calls TParticlePDG->Charge(), which returns the charge in units of e0 / 3
-              Double_t value[AliAnalysisTaskPID::kEffNumAxes] = { mcID, gentrack->Pt(), gentrack->Eta(), gentrack->Charge() / 3.,
+              Double_t value[AliAnalysisTaskPID::kEffNumAxes] = { static_cast<Double_t>(mcID), gentrack->Pt(), gentrack->Eta(), gentrack->Charge() / 3.,
                                                                   centPercent,
                                                                   -1, -1, -1 };// no jet pT etc since inclusive spectrum 
-              for (Int_t i = 0; i < fNumInclusivePIDtasks; i++)
-                fInclusivePIDtask[i]->FillEfficiencyContainer(value, AliAnalysisTaskPID::kStepRecWithGenCuts);
+              for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
+                if ((!fInclusivePIDtask[i]->GetUseTPCCutMIGeo() && !fInclusivePIDtask[i]->GetUseTPCnclCut()) ||
+                    (survivedTPCCutMIGeo && fInclusivePIDtask[i]->GetUseTPCCutMIGeo()) ||
+                    (survivedTPCnclCut && fInclusivePIDtask[i]->GetUseTPCnclCut()))
+                  fInclusivePIDtask[i]->FillEfficiencyContainer(value, AliAnalysisTaskPID::kStepRecWithGenCuts);
+              }
                   
-              Double_t valueMeas[AliAnalysisTaskPID::kEffNumAxes] = { mcID, inclusiveaod->Pt(), inclusiveaod->Eta(),
-                                                                      inclusiveaod->Charge(), centPercent,
+              Double_t valueMeas[AliAnalysisTaskPID::kEffNumAxes] = { static_cast<Double_t>(mcID), inclusiveaod->Pt(), inclusiveaod->Eta(),
+                                                                      static_cast<Double_t>(inclusiveaod->Charge()), centPercent,
                                                                       -1, -1, -1 };// no jet pT etc since inclusive spectrum 
-              for (Int_t i = 0; i < fNumInclusivePIDtasks; i++)
-                fInclusivePIDtask[i]->FillEfficiencyContainer(valueMeas, AliAnalysisTaskPID::kStepRecWithGenCutsMeasuredObs);
+              for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
+                if ((!fInclusivePIDtask[i]->GetUseTPCCutMIGeo() && !fInclusivePIDtask[i]->GetUseTPCnclCut()) ||
+                    (survivedTPCCutMIGeo && fInclusivePIDtask[i]->GetUseTPCCutMIGeo()) ||
+                    (survivedTPCnclCut && fInclusivePIDtask[i]->GetUseTPCnclCut()))
+                  fInclusivePIDtask[i]->FillEfficiencyContainer(valueMeas, AliAnalysisTaskPID::kStepRecWithGenCutsMeasuredObs);
+              }
             }
           }
         }
@@ -2780,12 +2865,15 @@ void AliAnalysisTaskIDFragmentationFunction::UserExec(Option_t *)
         AliAODTrack * inclusiveaod  = dynamic_cast<AliAODTrack*>(fTracksRecCuts->At(it));
         if(inclusiveaod){
           if(fUseInclusivePIDtask){
-            Double_t dEdxTPC = pidResponse->IsTunedOnData() ? pidResponse->GetTPCsignalTunedOnData(inclusiveaod)
-                                                            : inclusiveaod->GetTPCsignal();
+            Double_t dEdxTPC = tuneOnDataTPC ? pidResponse->GetTPCsignalTunedOnData(inclusiveaod)
+                                             : inclusiveaod->GetTPCsignal();
             
             if (dEdxTPC <= 0)
               continue;
             
+            Bool_t survivedTPCCutMIGeo = AliAnalysisTaskPID::TPCCutMIGeo(inclusiveaod, InputEvent());
+            Bool_t survivedTPCnclCut = AliAnalysisTaskPID::TPCnclCut(inclusiveaod);
+            
             Int_t label = TMath::Abs(inclusiveaod->GetLabel());
 
             // find MC track in our list, if available
@@ -2795,27 +2883,58 @@ void AliAnalysisTaskIDFragmentationFunction::UserExec(Option_t *)
             if (gentrack)
               pdg = gentrack->GetPdgCode();
             
-            for (Int_t i = 0; i < fNumInclusivePIDtasks; i++)
-              fInclusivePIDtask[i]->ProcessTrack(inclusiveaod, pdg, centPercent, -1); // no jet pT since inclusive spectrum 
+            for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
+              if ((!fInclusivePIDtask[i]->GetUseTPCCutMIGeo() && !fInclusivePIDtask[i]->GetUseTPCnclCut()) ||
+                  (survivedTPCCutMIGeo && fInclusivePIDtask[i]->GetUseTPCCutMIGeo()) ||
+                  (survivedTPCnclCut && fInclusivePIDtask[i]->GetUseTPCnclCut())) {
+                    if (fInclusivePIDtask[i]->IsInAcceptedEtaRange(TMath::Abs(inclusiveaod->Eta())))
+                      fInclusivePIDtask[i]->ProcessTrack(inclusiveaod, pdg, centPercent, -1); // no jet pT since inclusive spectrum 
+              }
+            }
             
             if (gentrack) {
               Int_t mcID = AliAnalysisTaskPID::PDGtoMCID(pdg);
-              Double_t valueRecAllCuts[AliAnalysisTaskPID::kEffNumAxes] = { mcID, inclusiveaod->Pt(), inclusiveaod->Eta(), 
-                                                                            inclusiveaod->Charge(), centPercent,
+              Double_t valueRecAllCuts[AliAnalysisTaskPID::kEffNumAxes] = { static_cast<Double_t>(mcID), inclusiveaod->Pt(), inclusiveaod->Eta(), 
+                                                                            static_cast<Double_t>(inclusiveaod->Charge()), centPercent,
                                                                             -1, -1, -1 };
-              for (Int_t i = 0; i < fNumInclusivePIDtasks; i++)
-                fInclusivePIDtask[i]->FillEfficiencyContainer(valueRecAllCuts, AliAnalysisTaskPID::kStepRecWithRecCutsMeasuredObs);
+              for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
+                if ((!fInclusivePIDtask[i]->GetUseTPCCutMIGeo() && !fInclusivePIDtask[i]->GetUseTPCnclCut()) ||
+                    (survivedTPCCutMIGeo && fInclusivePIDtask[i]->GetUseTPCCutMIGeo()) ||
+                    (survivedTPCnclCut && fInclusivePIDtask[i]->GetUseTPCnclCut()))
+                  fInclusivePIDtask[i]->FillEfficiencyContainer(valueRecAllCuts, AliAnalysisTaskPID::kStepRecWithRecCutsMeasuredObs);
+              }
               
               Double_t weight = IsSecondaryWithStrangeMotherMC(gentrack) ? GetMCStrangenessFactorCMS(gentrack) : 1.0;
-              for (Int_t i = 0; i < fNumInclusivePIDtasks; i++)
-                fInclusivePIDtask[i]->FillEfficiencyContainer(valueRecAllCuts, 
-                                                              AliAnalysisTaskPID::kStepRecWithRecCutsMeasuredObsStrangenessScaled,
-                                                              weight);
-          
-              if (gentrack->IsPhysicalPrimary()) {
-                for (Int_t i = 0; i < fNumInclusivePIDtasks; i++)
+              for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
+                if ((!fInclusivePIDtask[i]->GetUseTPCCutMIGeo() && !fInclusivePIDtask[i]->GetUseTPCnclCut()) ||
+                    (survivedTPCCutMIGeo && fInclusivePIDtask[i]->GetUseTPCCutMIGeo()) ||
+                    (survivedTPCnclCut && fInclusivePIDtask[i]->GetUseTPCnclCut()))
                   fInclusivePIDtask[i]->FillEfficiencyContainer(valueRecAllCuts, 
-                                                                AliAnalysisTaskPID::kStepRecWithRecCutsMeasuredObsPrimaries);
+                                                                AliAnalysisTaskPID::kStepRecWithRecCutsMeasuredObsStrangenessScaled,
+                                                                weight);
+              }
+              
+              if (gentrack->IsPhysicalPrimary()) {
+                // AliAODMCParticle->Charge() calls TParticlePDG->Charge(), which returns the charge in units of e0 / 3
+                Double_t valueGenAllCuts[AliAnalysisTaskPID::kEffNumAxes] = { static_cast<Double_t>(mcID), gentrack->Pt(), gentrack->Eta(), 
+                                                                              gentrack->Charge() / 3., centPercent, -1, -1, 
+                                                                              -1 };
+                
+                Double_t valuePtResolution[AliAnalysisTaskPID::kPtResNumAxes] = { -1, gentrack->Pt(), inclusiveaod->Pt(),
+                                                                                  gentrack->Charge() / 3., centPercent };
+              
+                for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
+                  if ((!fInclusivePIDtask[i]->GetUseTPCCutMIGeo() && !fInclusivePIDtask[i]->GetUseTPCnclCut()) ||
+                      (survivedTPCCutMIGeo && fInclusivePIDtask[i]->GetUseTPCCutMIGeo()) ||
+                      (survivedTPCnclCut && fInclusivePIDtask[i]->GetUseTPCnclCut())) {
+                    fInclusivePIDtask[i]->FillEfficiencyContainer(valueRecAllCuts, 
+                                                                  AliAnalysisTaskPID::kStepRecWithRecCutsMeasuredObsPrimaries);
+                    fInclusivePIDtask[i]->FillEfficiencyContainer(valueGenAllCuts, 
+                                                                  AliAnalysisTaskPID::kStepRecWithRecCutsPrimaries);
+                    
+                    fInclusivePIDtask[i]->FillPtResolution(mcID, valuePtResolution);
+                  }
+                }
               }
             }
           }
@@ -2847,7 +2966,7 @@ void AliAnalysisTaskIDFragmentationFunction::UserExec(Option_t *)
       
       if(fQAMode&2 && (ij==0)) fQAJetHistosGenLeading->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt() );
 
-      if((ij==0) || 1){ // leading jet //TODO all jets
+      if((ij==0) || !fOnlyLeadingJets){ // leading jets or all jets
         TList* jettracklist = new TList();
         Double_t sumPt      = 0.;
         Bool_t isBadJet     = kFALSE;
@@ -2943,15 +3062,17 @@ void AliAnalysisTaskIDFragmentationFunction::UserExec(Option_t *)
             if (TMath::Abs(chargeMC) < 0.01)
               continue; // Reject neutral particles (only relevant, if mcID is not used)
             
-            Double_t valuesGenYield[AliAnalysisTaskPID::kGenYieldNumAxes] = { mcID, trackPt, centPercent, jetPt, z, xi, chargeMC };
+            Double_t valuesGenYield[AliAnalysisTaskPID::kGenYieldNumAxes] = { static_cast<Double_t>(mcID), trackPt, centPercent, jetPt, z, xi, chargeMC };
             
             for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
-              valuesGenYield[fJetPIDtask[i]->GetIndexOfChargeAxisGenYield()] = chargeMC;
-              fJetPIDtask[i]->FillGeneratedYield(valuesGenYield);
+              if (fJetPIDtask[i]->IsInAcceptedEtaRange(TMath::Abs(part->Eta()))) {
+                valuesGenYield[fJetPIDtask[i]->GetIndexOfChargeAxisGenYield()] = chargeMC;
+                fJetPIDtask[i]->FillGeneratedYield(valuesGenYield);
+              }
             }
             
             
-            Double_t valuesEff[AliAnalysisTaskPID::kEffNumAxes] = { mcID, trackPt, part->Eta(), chargeMC,
+            Double_t valuesEff[AliAnalysisTaskPID::kEffNumAxes] = { static_cast<Double_t>(mcID), trackPt, part->Eta(), chargeMC,
                                                                     centPercent, jetPt, z, xi };
             for (Int_t i = 0; i < fNumJetPIDtasks; i++)
               fJetPIDtask[i]->FillEfficiencyContainer(valuesEff, AliAnalysisTaskPID::kStepGenWithGenCuts);
@@ -2990,7 +3111,7 @@ void AliAnalysisTaskIDFragmentationFunction::UserExec(Option_t *)
       if(fQAMode&2) fQAJetHistosRecCuts->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
       if(fQAMode&2 && (ij==0)) fQAJetHistosRecCutsLeading->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt() );
       
-      if((ij==0) || 1){ // leading jet //TODO all jets
+      if((ij==0) || !fOnlyLeadingJets){ // leading jets or all jets
        
        Double_t ptFractionEmbedded = 0; 
        AliAODJet* embeddedJet = 0; 
@@ -3070,12 +3191,15 @@ void AliAnalysisTaskIDFragmentationFunction::UserExec(Option_t *)
       }
          
       if (fUseJetPIDtask) {
-        Double_t dEdxTPC = pidResponse->IsTunedOnData() ? pidResponse->GetTPCsignalTunedOnData(aodtrack)
-                                                        : aodtrack->GetTPCsignal();
+        Double_t dEdxTPC = tuneOnDataTPC ? pidResponse->GetTPCsignalTunedOnData(aodtrack)
+                                         : aodtrack->GetTPCsignal();
         
         if (dEdxTPC <= 0)
           continue;
         
+        Bool_t survivedTPCCutMIGeo = AliAnalysisTaskPID::TPCCutMIGeo(aodtrack, InputEvent());
+        Bool_t survivedTPCnclCut = AliAnalysisTaskPID::TPCnclCut(aodtrack);
+            
         Int_t label = TMath::Abs(aodtrack->GetLabel());
 
         // Find MC track in our list, if available
@@ -3092,27 +3216,63 @@ void AliAnalysisTaskIDFragmentationFunction::UserExec(Option_t *)
           Double_t z = -1., xi = -1.;
           AliAnalysisTaskPID::GetJetTrackObservables(pT, jetPt, z, xi);
             
-          Double_t valueRecAllCuts[AliAnalysisTaskPID::kEffNumAxes] = { mcID, pT, aodtrack->Eta(), aodtrack->Charge(),
+          Double_t valueRecAllCuts[AliAnalysisTaskPID::kEffNumAxes] = { static_cast<Double_t>(mcID), pT, aodtrack->Eta(), static_cast<Double_t>(aodtrack->Charge()),
                                                                         centPercent, jetPt, z, xi };
-          for (Int_t i = 0; i < fNumJetPIDtasks; i++)
-            fJetPIDtask[i]->FillEfficiencyContainer(valueRecAllCuts, AliAnalysisTaskPID::kStepRecWithRecCutsMeasuredObs);
+          for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
+            if ((!fJetPIDtask[i]->GetUseTPCCutMIGeo() && !fJetPIDtask[i]->GetUseTPCnclCut()) ||
+                (survivedTPCCutMIGeo && fJetPIDtask[i]->GetUseTPCCutMIGeo()) ||
+                (survivedTPCnclCut && fJetPIDtask[i]->GetUseTPCnclCut()))
+              fJetPIDtask[i]->FillEfficiencyContainer(valueRecAllCuts, AliAnalysisTaskPID::kStepRecWithRecCutsMeasuredObs);
+          }
           
           Double_t weight = IsSecondaryWithStrangeMotherMC(gentrack) ? GetMCStrangenessFactorCMS(gentrack) : 1.0;
-          for (Int_t i = 0; i < fNumJetPIDtasks; i++)
-            fJetPIDtask[i]->FillEfficiencyContainer(valueRecAllCuts, 
-                                                    AliAnalysisTaskPID::kStepRecWithRecCutsMeasuredObsStrangenessScaled,
-                                                    weight);
-            
+          for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
+            if ((!fJetPIDtask[i]->GetUseTPCCutMIGeo() && !fJetPIDtask[i]->GetUseTPCnclCut()) ||
+                (survivedTPCCutMIGeo && fJetPIDtask[i]->GetUseTPCCutMIGeo()) ||
+                (survivedTPCnclCut && fJetPIDtask[i]->GetUseTPCnclCut()))
+              fJetPIDtask[i]->FillEfficiencyContainer(valueRecAllCuts, 
+                                                      AliAnalysisTaskPID::kStepRecWithRecCutsMeasuredObsStrangenessScaled,
+                                                      weight);
+          }
+          
           if (gentrack->IsPhysicalPrimary()) {
-            for (Int_t i = 0; i < fNumJetPIDtasks; i++)
-              fJetPIDtask[i]->FillEfficiencyContainer(valueRecAllCuts, AliAnalysisTaskPID::kStepRecWithRecCutsMeasuredObsPrimaries);
+            // AliAODMCParticle->Charge() calls TParticlePDG->Charge(), which returns the charge in units of e0 / 3
+            Double_t genPt = gentrack->Pt();
+            Double_t genZ = -1., genXi = -1.;
+            AliAnalysisTaskPID::GetJetTrackObservables(genPt, jetPt, genZ, genXi);
+            Double_t valueGenAllCuts[AliAnalysisTaskPID::kEffNumAxes] = { static_cast<Double_t>(mcID), genPt, gentrack->Eta(), 
+                                                                          gentrack->Charge() / 3., centPercent, jetPt, genZ, 
+                                                                          genXi };
+            
+            Double_t valuePtResolution[AliAnalysisTaskPID::kPtResNumAxes] = { jetPt, genPt, pT, gentrack->Charge() / 3., centPercent };
+            
+            for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
+              if ((!fJetPIDtask[i]->GetUseTPCCutMIGeo() && !fJetPIDtask[i]->GetUseTPCnclCut()) ||
+                  (survivedTPCCutMIGeo && fJetPIDtask[i]->GetUseTPCCutMIGeo()) ||
+                  (survivedTPCnclCut && fJetPIDtask[i]->GetUseTPCnclCut())) {
+                fJetPIDtask[i]->FillEfficiencyContainer(valueRecAllCuts,
+                                                        AliAnalysisTaskPID::kStepRecWithRecCutsMeasuredObsPrimaries);
+                fJetPIDtask[i]->FillEfficiencyContainer(valueGenAllCuts,
+                                                        AliAnalysisTaskPID::kStepRecWithRecCutsPrimaries);
+                
+                fJetPIDtask[i]->FillPtResolution(mcID, valuePtResolution);
+              }
+            }
           }
         }
         
-        for (Int_t i = 0; i < fNumJetPIDtasks; i++)
-          fJetPIDtask[i]->ProcessTrack(aodtrack, pdg, centPercent, jetPt);
+        for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
+          if ((!fJetPIDtask[i]->GetUseTPCCutMIGeo() && !fJetPIDtask[i]->GetUseTPCnclCut()) ||
+              (survivedTPCCutMIGeo && fJetPIDtask[i]->GetUseTPCCutMIGeo()) ||
+              (survivedTPCnclCut && fJetPIDtask[i]->GetUseTPCnclCut())) {
+                if (fJetPIDtask[i]->IsInAcceptedEtaRange(TMath::Abs(aodtrack->Eta())))
+                  fJetPIDtask[i]->ProcessTrack(aodtrack, pdg, centPercent, jetPt);
+          }
+        }
         
-        if (fIDFFMode) {
+        if (fIDFFMode && ((!fJetPIDtask[0]->GetUseTPCCutMIGeo() && !fJetPIDtask[0]->GetUseTPCnclCut()) ||
+            (survivedTPCCutMIGeo && fJetPIDtask[0]->GetUseTPCCutMIGeo()) ||
+            (survivedTPCnclCut && fJetPIDtask[0]->GetUseTPCnclCut()))) {
           // NOTE: Just take particle fraction from first task (should anyway be the same for all tasks)
           Int_t pidWeightedSpecies = fJetPIDtask[0]->GetRandomParticleTypeAccordingToParticleFractions(pT, jetPt,
                                                                                                        centPercent, kTRUE);
@@ -3157,15 +3317,23 @@ void AliAnalysisTaskIDFragmentationFunction::UserExec(Option_t *)
           
                        
                                        // AliAODMCParticle->Charge() calls TParticlePDG->Charge(), which returns the charge in units of e0 / 3
-          Double_t value[AliAnalysisTaskPID::kEffNumAxes] = { mcID, genPt, gentrack->Eta(), gentrack->Charge() / 3.,
+          Double_t value[AliAnalysisTaskPID::kEffNumAxes] = { static_cast<Double_t>(mcID), genPt, gentrack->Eta(), gentrack->Charge() / 3.,
                                                               centPercent, jetPt, genZ, genXi };
-          for (Int_t i = 0; i < fNumJetPIDtasks; i++)
-            fJetPIDtask[i]->FillEfficiencyContainer(value, AliAnalysisTaskPID::kStepRecWithGenCuts);
+          for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
+            if ((!fJetPIDtask[i]->GetUseTPCCutMIGeo() && !fJetPIDtask[i]->GetUseTPCnclCut()) ||
+                (survivedTPCCutMIGeo && fJetPIDtask[i]->GetUseTPCCutMIGeo()) ||
+                (survivedTPCnclCut && fJetPIDtask[i]->GetUseTPCnclCut()))
+              fJetPIDtask[i]->FillEfficiencyContainer(value, AliAnalysisTaskPID::kStepRecWithGenCuts);
+          }
           
-          Double_t valueMeas[AliAnalysisTaskPID::kEffNumAxes] = { mcID, measPt, aodtrack->Eta(), aodtrack->Charge(),
+          Double_t valueMeas[AliAnalysisTaskPID::kEffNumAxes] = { static_cast<Double_t>(mcID), measPt, aodtrack->Eta(), static_cast<Double_t>(aodtrack->Charge()),
                                                                   centPercent, jetPt, measZ, measXi };
-          for (Int_t i = 0; i < fNumJetPIDtasks; i++)
-            fJetPIDtask[i]->FillEfficiencyContainer(valueMeas, AliAnalysisTaskPID::kStepRecWithGenCutsMeasuredObs);
+          for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
+            if ((!fJetPIDtask[i]->GetUseTPCCutMIGeo() && !fJetPIDtask[i]->GetUseTPCnclCut()) ||
+                (survivedTPCCutMIGeo && fJetPIDtask[i]->GetUseTPCCutMIGeo()) ||
+                (survivedTPCnclCut && fJetPIDtask[i]->GetUseTPCnclCut()))
+              fJetPIDtask[i]->FillEfficiencyContainer(valueMeas, AliAnalysisTaskPID::kStepRecWithGenCutsMeasuredObs);
+          }
         }
       }
          }
@@ -3195,7 +3363,7 @@ void AliAnalysisTaskIDFragmentationFunction::UserExec(Option_t *)
          delete jettracklist;  
 
        } // end: cut embedded ratio
-      } // end: leading jet
+      } // end: leading jet or all jets
     } // end: rec. jets after cuts
   } // end: QA, FF and intra-jet
 
@@ -3260,7 +3428,7 @@ void AliAnalysisTaskIDFragmentationFunction::UserExec(Option_t *)
       Bool_t isBadJetRec     = kFALSE;
     
 
-      if((ij==0) || 1){ // leading jet //TODO all jets
+      if((ij==0) || !fOnlyLeadingJets){ // leading jets or all jets
        
        // for efficiency: gen tracks from pointing with gen/rec jet
        TList* jettracklistGenPrim = new TList();
@@ -3480,14 +3648,12 @@ void AliAnalysisTaskIDFragmentationFunction::UserExec(Option_t *)
   if (fUseJetPIDtask) {
     for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
       fJetPIDtask[i]->PostOutputData();
-      fJetPIDtask[i]->IncrementEventsProcessed(centPercent);
     }
   }
   
   if (fUseInclusivePIDtask) {
     for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
       fInclusivePIDtask[i]->PostOutputData();
-      fInclusivePIDtask[i]->IncrementEventsProcessed(centPercent);
     }
   }
 }
@@ -3905,7 +4071,7 @@ Int_t AliAnalysisTaskIDFragmentationFunction::GetListOfBckgJets(TList *list, Int
 } 
 
 // _________________________________________________________________________________________________________
-void AliAnalysisTaskIDFragmentationFunction::SetProperties(THnSparse* h,const Int_t dim, const char** labels)
+void AliAnalysisTaskIDFragmentationFunction::SetProperties(THnSparse* h, Int_t dim, const char** labels)
 {
   // Set properties of THnSparse 
 
@@ -3941,7 +4107,7 @@ void AliAnalysisTaskIDFragmentationFunction::SetProperties(TH1* h,const char* x,
 
 // ________________________________________________________________________________________________________________________________________________________
 void AliAnalysisTaskIDFragmentationFunction::GetJetTracksPointing(TList* inputlist, TList* outputlist, const AliAODJet* jet, 
-                                                                  const Double_t radius, Double_t& sumPt, const Double_t minPtL, const Double_t maxPt, Bool_t& isBadPt)
+                                                                  Double_t radius, Double_t& sumPt, Double_t minPtL, Double_t maxPt, Bool_t& isBadPt)
 {
   // fill list of tracks in cone around jet axis  
 
@@ -3982,7 +4148,7 @@ void AliAnalysisTaskIDFragmentationFunction::GetJetTracksPointing(TList* inputli
 }
 
 // _________________________________________________________________________________________________________________________________________________________________
-void AliAnalysisTaskIDFragmentationFunction::GetJetTracksTrackrefs(TList* list, const AliAODJet* jet, const Double_t minPtL, const Double_t maxPt, Bool_t& isBadPt)
+void AliAnalysisTaskIDFragmentationFunction::GetJetTracksTrackrefs(TList* list, const AliAODJet* jet, Double_t minPtL, Double_t maxPt, Bool_t& isBadPt)
 {
   // list of jet tracks from trackrefs
   
@@ -4088,7 +4254,7 @@ void  AliAnalysisTaskIDFragmentationFunction::AssociateGenRec(TList* tracksAODMC
 
 // _____________________________________________________________________________________________________________________________________________
 void AliAnalysisTaskIDFragmentationFunction::FillSingleTrackHistosRecGen(AliFragFuncQATrackHistos* trackQAGen, AliFragFuncQATrackHistos* trackQARec, TList* tracksGen, 
-                                                                      const TArrayI& indexAODTr, const TArrayS& isRefGen, const Bool_t scaleStrangeness){
+                                                                      const TArrayI& indexAODTr, const TArrayS& isRefGen, Bool_t scaleStrangeness){
 
   // fill QA for single track reconstruction efficiency
   
@@ -4131,7 +4297,7 @@ void AliAnalysisTaskIDFragmentationFunction::FillSingleTrackHistosRecGen(AliFrag
 
 void  AliAnalysisTaskIDFragmentationFunction::FillJetTrackHistosRec(AliFragFuncHistos* ffhistRec, AliAODJet* jet, 
                                                                  TList* jetTrackList, const TList* tracksGen, const TList* tracksRec, const TArrayI& indexAODTr,
-                                                                 const TArrayS& isRefGen, TList* jetTrackListTR, const Bool_t scaleStrangeness,
+                                                                 const TArrayS& isRefGen, TList* jetTrackListTR, Bool_t scaleStrangeness,
                                                                  Bool_t fillJS, TProfile* hProNtracksLeadingJet, TProfile** hProDelRPtSum, TProfile* hProDelR80pcPt)
 {
   // fill objects for jet track reconstruction efficiency or secondaries contamination 
@@ -4551,7 +4717,7 @@ void AliAnalysisTaskIDFragmentationFunction::GetTracksOutOfNJetsStat(Int_t nCase
 }
 
 // ______________________________________________________________________________________________________________________________________________________
-Float_t AliAnalysisTaskIDFragmentationFunction::CalcJetArea(const Float_t etaJet, const Float_t rc) const
+Float_t AliAnalysisTaskIDFragmentationFunction::CalcJetArea(Float_t etaJet, Float_t rc) const
 {
   // calculate area of jet with eta etaJet and radius rc
 
@@ -4640,7 +4806,7 @@ void AliAnalysisTaskIDFragmentationFunction::GetClusterTracksMedian(TList* outpu
   
   normFactor = 0;
 
-  Int_t nBckgClusters = fBckgJetsRec->GetEntries(); // not 'recCuts': use all clusters in full eta range
+  const Int_t nBckgClusters = fBckgJetsRec->GetEntries(); // not 'recCuts': use all clusters in full eta range
 
   if(nBckgClusters<3) return; // need at least 3 clusters (skipping 2 highest)
 
@@ -5288,7 +5454,7 @@ void AliAnalysisTaskIDFragmentationFunction::FillBckgHistos(Int_t type, TList* i
 }
 
 //_____________________________________________________________________________________
-Double_t AliAnalysisTaskIDFragmentationFunction::GetMCStrangenessFactor(const Double_t pt) const
+Double_t AliAnalysisTaskIDFragmentationFunction::GetMCStrangenessFactor(Double_t pt) const
 {
   // factor strangeness data/MC as function of pt from UE analysis (Sara Vallero)