]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
PWG4HighPtSpectra Task compatible with AOD analysis and added to the TrackQA AOD...
authordkeijden <dkeijden@cern.ch>
Tue, 22 Apr 2014 17:05:15 +0000 (19:05 +0200)
committermverweij <marta.verweij@cern.ch>
Wed, 30 Apr 2014 13:55:22 +0000 (15:55 +0200)
PWGJE/AliPWG4HighPtSpectra.cxx
PWGJE/AliPWG4HighPtSpectra.h
PWGJE/macros/AddTaskPWG4HighPtSpectra.C
PWGJE/macros/AddTaskPWG4HighPtTrackQA.C

index 403842b2ae8c2923cbb8685e0bfbbbf021b993b2..29a3c192265b14fe4abcf8ee5ade1e53bafc89cf 100644 (file)
 
 #include "AliAnalysisManager.h"
 #include "AliESDInputHandler.h"
+#include "AliAODInputHandler.h"
 #include "AliESDtrack.h"
+#include "AliAODTrack.h"
+#include "AliAODMCParticle.h"
 #include "AliESDtrackCuts.h"
 #include "AliExternalTrackParam.h"
 #include "AliCentrality.h"
@@ -56,6 +59,7 @@
 #include "AliGenPythiaEventHeader.h"
 #include "AliGenHijingEventHeader.h"
 #include "AliGenCocktailEventHeader.h"
+#include "AliESDVertex.h"
 //#include "$ALICE_ROOT/PWG4/JetTasks/AliAnalysisHelperJetTasks.h"
 
 //#include <iostream>
@@ -66,9 +70,11 @@ ClassImp(AliPWG4HighPtSpectra)
 //__________________________________________________________________________
 AliPWG4HighPtSpectra::AliPWG4HighPtSpectra() : AliAnalysisTask("AliPWG4HighPtSpectra", ""), 
   fReadAODData(0),
+  fNoPythiaInfo(0),
   fCFManagerPos(0x0),
   fCFManagerNeg(0x0),
   fESD(0x0),
+  fAOD(0x0),
   fMC(0x0),
   fStack(0x0),
   fVtx(0x0),
@@ -78,6 +84,7 @@ AliPWG4HighPtSpectra::AliPWG4HighPtSpectra() : AliAnalysisTask("AliPWG4HighPtSpe
   fTrackType(0),
   fTrackCuts(0x0),
   fTrackCutsReject(0x0),
+  fFilterMask(0),
   fbSelectHIJING(kFALSE),
   fSigmaConstrainedMax(100.),
   fAvgTrials(1),
@@ -97,13 +104,16 @@ AliPWG4HighPtSpectra::AliPWG4HighPtSpectra() : AliAnalysisTask("AliPWG4HighPtSpe
   //Default ctor
   //
 }
+
 //___________________________________________________________________________
 AliPWG4HighPtSpectra::AliPWG4HighPtSpectra(const Char_t* name) :
   AliAnalysisTask(name,""),
   fReadAODData(0),
+  fNoPythiaInfo(0),
   fCFManagerPos(0x0),
   fCFManagerNeg(0x0),
   fESD(0x0),
+  fAOD(0x0),
   fMC(0x0),
   fStack(0x0),
   fVtx(0x0),
@@ -113,6 +123,7 @@ AliPWG4HighPtSpectra::AliPWG4HighPtSpectra(const Char_t* name) :
   fTrackType(0),
   fTrackCuts(0x0),
   fTrackCutsReject(0x0),
+  fFilterMask(0),
   fbSelectHIJING(kFALSE),
   fSigmaConstrainedMax(100.),
   fAvgTrials(1),
@@ -166,14 +177,24 @@ void AliPWG4HighPtSpectra::ConnectInputData(Option_t *)
     return;
   }
 
-  AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
-
-  if (!esdH) {
-    AliDebug(2,Form("ERROR: Could not get ESDInputHandler"));
-    return;
-  } else
-    fESD = esdH->GetEvent();
+  if(fReadAODData) {
+    AliAODInputHandler *aodH = dynamic_cast<AliAODInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
+  
+    if (!aodH) {
+      AliDebug(2,Form("ERROR: Could not get AODInputHandler"));
+      return;
+    } else
+      fAOD = aodH->GetEvent();
+  } else {
+    AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
   
+    if (!esdH) {
+      AliDebug(2,Form("ERROR: Could not get ESDInputHandler"));
+      return;
+    } else
+      fESD = esdH->GetEvent();
+  }
+
   AliMCEventHandler *eventHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
   if (!eventHandler) {
     AliDebug(2,Form( "ERROR: Could not retrieve MC event handler \n"));
@@ -184,7 +205,8 @@ void AliPWG4HighPtSpectra::ConnectInputData(Option_t *)
 }
 
 //________________________________________________________________________
-Bool_t AliPWG4HighPtSpectra::SelectEvent() {
+Bool_t AliPWG4HighPtSpectra::SelectEvent()
+{
   //
   // Decide if event should be selected for analysis
   //
@@ -198,16 +220,16 @@ Bool_t AliPWG4HighPtSpectra::SelectEvent() {
 
   Bool_t selectEvent = kTRUE;
 
-  //fESD object available?
-  if (!fESD) {
+  //fESD or fAOD object available?
+  if (!fESD && !fAOD) {
     AliDebug(2,Form("ERROR: fInputEvent not available\n"));
-    fNEventReject->Fill("noESD",1);
+    fNEventReject->Fill("noESD/AOD",1);
     selectEvent = kFALSE;
     return selectEvent;
   }
 
   //Trigger
-  UInt_t isSelected = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
+  UInt_t isSelected = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected(); //TODO: still works?
   if(fTriggerMask != AliVEvent::kAny && !(isSelected&fTriggerMask)) { //Select collison candidates
     AliDebug(2,Form(" Trigger Selection: event REJECTED ... "));
     fNEventReject->Fill("Trigger",1);
@@ -216,14 +238,19 @@ Bool_t AliPWG4HighPtSpectra::SelectEvent() {
   }
 
   //Check if number of reconstructed tracks is larger than 1
-  if(!fESD->GetNumberOfTracks() || fESD->GetNumberOfTracks()<2)  {
-    fNEventReject->Fill("NTracks<2",1);
-    selectEvent = kFALSE;
-    return selectEvent;
+  if(!fReadAODData) { //TODO: check if indeed these things are filtered in AOD cases.
+    if(!fESD->GetNumberOfTracks() || fESD->GetNumberOfTracks()<2)  {
+      fNEventReject->Fill("NTracks<2",1);
+      selectEvent = kFALSE;
+      return selectEvent;
+    }
   }
 
   //Check if vertex is reconstructed
-  fVtx = fESD->GetPrimaryVertexSPD();
+  if(fESD)
+    fVtx = fESD->GetPrimaryVertexSPD();
+  if(fAOD)
+    fVtx = fAOD->GetPrimaryVertexSPD(); //TODO: Could also use general vertexing
 
   if(!fVtx) {
     fNEventReject->Fill("noVTX",1);
@@ -231,10 +258,13 @@ Bool_t AliPWG4HighPtSpectra::SelectEvent() {
     return selectEvent;
   }
 
-  if(!fVtx->GetStatus()) {
-    fNEventReject->Fill("VtxStatus",1);
-    selectEvent = kFALSE;
-    return selectEvent;
+  if(!fReadAODData){ //TODO: Is this correct?
+    const AliESDVertex* esdVtx = fESD->GetPrimaryVertexSPD();
+    if(!esdVtx->GetStatus()) {
+      fNEventReject->Fill("VtxStatus",1);
+      selectEvent = kFALSE;
+      return selectEvent;
+    }
   }
 
   // Need vertex cut
@@ -257,19 +287,32 @@ Bool_t AliPWG4HighPtSpectra::SelectEvent() {
   //Centrality selection should only be done in case of PbPb
   if(IsPbPb()) {
     Float_t cent = 0.;
-    if(fCentClass!=CalculateCentrality(fESD) && fCentClass!=10) {
+    Int_t calccent = 0;
+    if(fReadAODData)
+      calccent = CalculateCentrality(fAOD);
+    else
+      calccent = CalculateCentrality(fESD);
+    if(fCentClass!=calccent && fCentClass!=10) {
       fNEventReject->Fill("cent",1);
       selectEvent = kFALSE;
       return selectEvent;
     }
     else {
-      if(dynamic_cast<AliESDEvent*>(fESD)->GetCentrality()) {
-       cent = dynamic_cast<AliESDEvent*>(fESD)->GetCentrality()->GetCentralityPercentile("V0M");
+      if(fReadAODData) {
+        if(dynamic_cast<AliAODEvent*>(fAOD)->GetCentrality()) {
+          cent = dynamic_cast<AliAODEvent*>(fAOD)->GetCentrality()->GetCentralityPercentile("V0M");
+        }
       }
+      else {
+        if(dynamic_cast<AliESDEvent*>(fESD)->GetCentrality()) {
+          cent = dynamic_cast<AliESDEvent*>(fESD)->GetCentrality()->GetCentralityPercentile("V0M");
+        }
+      }
+
       if(cent>90.) {
        fNEventReject->Fill("cent>90",1);
        selectEvent = kFALSE;
-       return selectEvent;     
+       return selectEvent;
       }
       fh1Centrality->Fill(cent);
     }
@@ -280,24 +323,22 @@ Bool_t AliPWG4HighPtSpectra::SelectEvent() {
 }
 
 //________________________________________________________________________
-Int_t AliPWG4HighPtSpectra::CalculateCentrality(AliESDEvent *esd){
-
-
+Int_t AliPWG4HighPtSpectra::CalculateCentrality(AliVEvent *event)
+{
   Float_t cent = 999;
 
-  if(esd){
-    if(esd->GetCentrality()){
-      cent = esd->GetCentrality()->GetCentralityPercentile("V0M");
+  if(event){
+    if(event->GetCentrality()){
+      cent = event->GetCentrality()->GetCentralityPercentile("V0M");
     }
   }
 
-  if(cent<0)  return 5;
+  if(cent<0) return 5;
   if(cent>80)return 4;
   if(cent>50)return 3;
   if(cent>30)return 2;
   if(cent>10)return 1;
   return 0;
-
 }
 
 //_________________________________________________
@@ -308,13 +349,19 @@ void AliPWG4HighPtSpectra::Exec(Option_t *)
   //
   AliDebug(2,Form(">> AliPWG4HighPtSpectra::Exec \n"));  
 
-  if(!fMC) {
-    AliMCEventHandler *eventHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
-    if (!eventHandler) {
-      AliDebug(2,Form( "ERROR: Could not retrieve MC event handler \n"));
+  AliVEvent* event;
+  if(fReadAODData)
+    event = fAOD;
+  else {
+    event = fESD;
+    if(!fMC) {
+      AliMCEventHandler *eventHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
+      if (!eventHandler) {
+        AliDebug(2,Form( "ERROR: Could not retrieve MC event handler \n"));
+      }
+      else
+        fMC = eventHandler->MCEvent();
     }
-    else
-      fMC = eventHandler->MCEvent();
   }
 
   // All events without selection
@@ -328,18 +375,24 @@ void AliPWG4HighPtSpectra::Exec(Option_t *)
     return;
   }
 
-  //MCEvent available? 
-  //if yes: get stack
-  if(fMC) {
-    AliDebug(2,Form("MC particles: %d", fMC->GetNumberOfTracks()));
-    fStack = fMC->Stack();                //Particles Stack
-    AliDebug(2,Form("MC particles stack: %d", fStack->GetNtrack()));
+  TClonesArray *arrayMC = 0x0;
+  if(fReadAODData){
+    //Open the MC particles in the case of AODanalysis
+    arrayMC = (TClonesArray*) fAOD->GetList()->FindObject(AliAODMCParticle::StdBranchName());
+  }
+  else {
+    //In case of ESD event: MCEvent available? if yes: get MC particles stack
+    if(fMC) {
+      AliDebug(2,Form("MC particles: %d", fMC->GetNumberOfTracks()));
+      fStack = fMC->Stack();                //Particles Stack
+      AliDebug(2,Form("MC particles stack: %d", fStack->GetNtrack()));
+    }
   }
 
-  Int_t nTracks = fESD->GetNumberOfTracks();
+  Int_t nTracks = event->GetNumberOfTracks();
   AliDebug(2,Form("nTracks %d", nTracks));
 
-  if(!fTrackCuts) { 
+  if((!fTrackCuts && !fReadAODData) || (fFilterMask==0 && fReadAODData)) { //if the TrackCuts are missing in ESD analysis or the FilterBit is missing in AOD analysis
     fNEventReject->Fill("noTrackCuts",1);
     // Post output data
     PostData(0,fHistList);
@@ -358,8 +411,139 @@ void AliPWG4HighPtSpectra::Exec(Option_t *)
   Double_t containerInputRecMC[nvar]     = {0.,0.,0.,0.}; //reconstructed yield as function of MC variable
 
   //Now go to rec level
-  for (Int_t iTrack = 0; iTrack<nTracks; iTrack++) 
-    {   
+  if(fReadAODData) {//AOD analysis
+    Int_t nOfPrimaries = 0;
+    for (Int_t iTrack = 0; iTrack<nTracks; iTrack++) 
+    {
+      //Get track for analysis
+      AliVTrack *track = 0x0;
+
+      AliAODTrack *aodtrack = fAOD->GetTrack(iTrack);
+      if(!aodtrack)
+        continue;
+      if( !aodtrack->TestFilterMask(fFilterMask) )
+        continue;
+      else {
+        AliAODTrack* trackcopy = new AliAODTrack(*aodtrack);
+        track = (AliVTrack*) trackcopy;
+      }
+      //fill the container
+      containerInputRec[0] = track->Pt();
+      containerInputRec[1] = track->Phi();
+      containerInputRec[2] = track->Eta();
+      containerInputRec[3] = track->GetTPCNcls();//TODO: is this correct substitute?
+
+      if(track->Charge()>0.) {
+        fCFManagerPos->GetParticleContainer()->Fill(containerInputRec,kStepReconstructed); //TODO: Can charge be used instead of GetSign?
+cout << __LINE__ << ". fill " << kStepReconstructed << " with: " << containerInputRec[0] << ", " << containerInputRec[1] << ", " << containerInputRec[2] << ", " << containerInputRec[3] << endl;
+      }
+      if(track->Charge()<0.) {
+        fCFManagerNeg->GetParticleContainer()->Fill(containerInputRec,kStepReconstructed);
+cout << __LINE__ << ". fill " << kStepReconstructed << " with: " << containerInputRec[0] << ", " << containerInputRec[1] << ", " << containerInputRec[2] << ", " << containerInputRec[3] << endl;
+      }
+
+      if(arrayMC) {
+        Int_t label = TMath::Abs(track->GetLabel());
+       if(label>arrayMC->GetEntries()) {
+         if(fTrackType==1 || fTrackType==2 || fTrackType==7)
+           delete track;
+         continue;
+       }
+       AliAODMCParticle *particle = (AliAODMCParticle*) arrayMC->At(label);
+       if(!particle) {
+         if(fTrackType==1 || fTrackType==2 || fTrackType==7)
+           delete track;
+         continue;
+       }
+       //Only select particles generated by HIJING if requested
+       if(fbSelectHIJING) {
+         if(!IsHIJINGParticle(label)) {
+           if(fTrackType==1 || fTrackType==2 || fTrackType==7)
+             delete track;
+            if(particle->IsPhysicalPrimary())
+              nOfPrimaries++;
+           continue;
+         }
+       }
+       containerInputRecMC[0] = particle->Pt();      
+       containerInputRecMC[1] = particle->Phi();      
+       containerInputRecMC[2] = particle->Eta();  
+       containerInputRecMC[3] = track->GetTPCNcls();
+
+       //Container with primaries
+       if(particle->IsPhysicalPrimary()) {
+          nOfPrimaries++;
+         if(particle->Charge()>0.) {
+           fCFManagerPos->GetParticleContainer()->Fill(containerInputRecMC,kStepReconstructedMC);
+cout << __LINE__ << ". fill " << kStepReconstructedMC << " with: " << containerInputRecMC[0] << ", " << containerInputRecMC[1] << ", " << containerInputRecMC[2] << ", " << containerInputRecMC[3] << endl;
+          }
+         if(particle->Charge()<0.) {
+           fCFManagerNeg->GetParticleContainer()->Fill(containerInputRecMC,kStepReconstructedMC);
+cout << __LINE__ << ". fill " << kStepReconstructedMC << " with: " << containerInputRecMC[0] << ", " << containerInputRecMC[1] << ", " << containerInputRecMC[2] << ", " << containerInputRecMC[3] << endl;
+          }
+         //Fill pT resolution plots for primaries
+         //fPtRelUncertainty1PtPrim->Fill(containerInputRec[0],containerInputRec[0]*TMath::Sqrt(track->GetSigma1Pt2())); //TODO: have to reimplement this for AOD analysis
+       }
+
+       //Container with secondaries
+       if (!particle->IsPhysicalPrimary() ) {
+         if(particle->Charge()>0.) {
+           fCFManagerPos->GetParticleContainer()->Fill(containerInputRecMC,kStepSecondaries);
+cout << __LINE__ << ". fill " << kStepSecondaries << " with: " << containerInputRecMC[0] << ", " << containerInputRecMC[1] << ", " << containerInputRecMC[2] << ", " << containerInputRecMC[3] << endl;
+         }
+         if(particle->Charge()<0.) {
+           fCFManagerNeg->GetParticleContainer()->Fill(containerInputRecMC,kStepSecondaries);
+cout << __LINE__ << ". fill " << kStepSecondaries << " with: " << containerInputRecMC[0] << ", " << containerInputRecMC[1] << ", " << containerInputRecMC[2] << ", " << containerInputRecMC[3] << endl;
+         }
+         //Fill pT resolution plots for primaries
+         //fPtRelUncertainty1PtSec->Fill(containerInputRec[0],containerInputRec[0]*TMath::Sqrt(track->GetSigma1Pt2())); //TODO: have to reimplement this for AOD analysis
+       }
+      }
+    }//track loop
+
+    //Fill MC containers if particles are findable
+    if(arrayMC) {
+      for(int iPart = 1; iPart<nOfPrimaries; iPart++) {
+       AliAODMCParticle *mcPart = (AliAODMCParticle*) arrayMC->At(iPart);
+        if(!mcPart) continue;
+
+        //Only select particles generated by HIJING if requested
+        if(fbSelectHIJING) {
+         if(!IsHIJINGParticle(iPart))
+           continue;
+        }
+
+        Int_t pdg = mcPart->PdgCode();
+
+        // select charged pions, protons, kaons , electrons, muons
+        if(TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) ==
+          321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13){
+  
+         //fill the container
+         containerInputMC[0] = mcPart->Pt();
+         containerInputMC[1] = mcPart->Phi();      
+         containerInputMC[2] = mcPart->Eta();  
+         //      AliESDtrack *esdtrack = fESD->GetTrack(mcPart->GetLabel());
+         containerInputMC[3] = 159.;
+         
+         if(mcPart->IsPhysicalPrimary()) {
+           if(mcPart->Charge()>0. && fCFManagerPos->CheckParticleCuts(kStepMCAcceptance,mcPart)) {
+              fCFManagerPos->GetParticleContainer()->Fill(containerInputMC,kStepMCAcceptance);
+cout << __LINE__ << ". fill " << kStepMCAcceptance << " with: " << containerInputMC[0] << ", " << containerInputMC[1] << ", " << containerInputMC[2] << ", " << containerInputMC[3] << endl;
+            }
+           if(mcPart->Charge()<0. && fCFManagerNeg->CheckParticleCuts(kStepMCAcceptance,mcPart)) {
+              fCFManagerNeg->GetParticleContainer()->Fill(containerInputMC,kStepMCAcceptance);
+cout << __LINE__ << ". fill " << kStepMCAcceptance << " with: " << containerInputMC[0] << ", " << containerInputMC[1] << ", " << containerInputMC[2] << ", " << containerInputMC[3] << endl;
+            }
+         }
+        }
+      }
+    }
+
+  }//end of AOD analysis
+  else {//ESD analysis
+    for (Int_t iTrack = 0; iTrack<nTracks; iTrack++) 
+    {
       //Get track for analysis
       AliESDtrack *track = 0x0;
       AliESDtrack *esdtrack = fESD->GetTrack(iTrack);
@@ -380,7 +564,7 @@ void AliPWG4HighPtSpectra::Exec(Option_t *)
          continue;
        
        AliExternalTrackParam exParam;
-       Bool_t relate = track->RelateToVertexTPC(fVtx,fESD->GetMagneticField(),kVeryBig,&exParam);
+       Bool_t relate = track->RelateToVertexTPC(fESD->GetPrimaryVertexSPD(),fESD->GetMagneticField(),kVeryBig,&exParam);
        if( !relate ) {
          if(track) delete track;
          continue;
@@ -401,7 +585,7 @@ void AliPWG4HighPtSpectra::Exec(Option_t *)
                continue;
              
              AliExternalTrackParam exParam;
-             Bool_t relate = track->RelateToVertexTPC(fVtx,fESD->GetMagneticField(),kVeryBig,&exParam);
+             Bool_t relate = track->RelateToVertexTPC(fESD->GetPrimaryVertexSPD(),fESD->GetMagneticField(),kVeryBig,&exParam);
              if( !relate ) {
                if(track) delete track;
                continue;
@@ -412,7 +596,6 @@ void AliPWG4HighPtSpectra::Exec(Option_t *)
              //use global constrained track
              track = new AliESDtrack(*esdtrack);
              track->Set(esdtrack->GetConstrainedParam()->GetX(),esdtrack->GetConstrainedParam()->GetAlpha(),esdtrack->GetConstrainedParam()->GetParameter(),esdtrack->GetConstrainedParam()->GetCovariance());
-
            }
          }
        }
@@ -449,7 +632,6 @@ void AliPWG4HighPtSpectra::Exec(Option_t *)
            continue;
          }
        }
-      
        if(esdtrack->GetConstrainedParam()) 
          track->Set(esdtrack->GetConstrainedParam()->GetX(),esdtrack->GetConstrainedParam()->GetAlpha(),esdtrack->GetConstrainedParam()->GetParameter(),esdtrack->GetConstrainedParam()->GetCovariance());
       }
@@ -506,10 +688,8 @@ void AliPWG4HighPtSpectra::Exec(Option_t *)
          if(particle->GetPDG()->Charge()<0.) {
            fCFManagerNeg->GetParticleContainer()->Fill(containerInputRecMC,kStepReconstructedMC);
          }
-
          //Fill pT resolution plots for primaries
          fPtRelUncertainty1PtPrim->Fill(containerInputRec[0],containerInputRec[0]*TMath::Sqrt(track->GetSigma1Pt2()));
-
        }
 
        //Container with secondaries
@@ -528,51 +708,52 @@ void AliPWG4HighPtSpectra::Exec(Option_t *)
       if(fTrackType==1  || fTrackType==2 || fTrackType==4 || fTrackType==5 || fTrackType==6 || fTrackType==7) {
        if(track) delete track;
       }
-
-
     }//track loop
-  
-
-  //Fill MC containers if particles are findable
-  if(fMC) {
-    for(int iPart = 1; iPart<(fMC->GetNumberOfPrimaries()); iPart++) {
-      AliMCParticle *mcPart  = (AliMCParticle*)fMC->GetTrack(iPart);
-      if(!mcPart) continue;
-
-      //Only select particles generated by HIJING if requested
-      if(fbSelectHIJING) {
-       if(!IsHIJINGParticle(iPart))
-         continue;
-      }
 
-      Int_t pdg = mcPart->PdgCode();
-      
-      // select charged pions, protons, kaons , electrons, muons
-      if(TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) ==
-        321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13){
-
-       //fill the container
-       containerInputMC[0] = mcPart->Pt();
-       containerInputMC[1] = mcPart->Phi();      
-       containerInputMC[2] = mcPart->Eta();  
-       //      AliESDtrack *esdtrack = fESD->GetTrack(mcPart->GetLabel());
-       containerInputMC[3] = 159.;
-       
-       if(fStack->IsPhysicalPrimary(iPart)) {
-         if(mcPart->Charge()>0. && fCFManagerPos->CheckParticleCuts(kStepMCAcceptance,mcPart)) fCFManagerPos->GetParticleContainer()->Fill(containerInputMC,kStepMCAcceptance);
-         if(mcPart->Charge()<0. && fCFManagerNeg->CheckParticleCuts(kStepMCAcceptance,mcPart)) fCFManagerNeg->GetParticleContainer()->Fill(containerInputMC,kStepMCAcceptance);
-       }
+    //Fill MC containers if particles are findable
+    if(fMC) {
+      for(int iPart = 1; iPart<(fMC->GetNumberOfPrimaries()); iPart++) {
+        AliMCParticle *mcPart  = (AliMCParticle*)fMC->GetTrack(iPart);
+        if(!mcPart) continue;
+  
+        //Only select particles generated by HIJING if requested
+        if(fbSelectHIJING) {
+         if(!IsHIJINGParticle(iPart))
+           continue;
+        }
+  
+        Int_t pdg = mcPart->PdgCode();
+        
+        // select charged pions, protons, kaons , electrons, muons
+        if(TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) ==
+          321 || TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13){
+  
+         //fill the container
+         containerInputMC[0] = mcPart->Pt();
+         containerInputMC[1] = mcPart->Phi();      
+         containerInputMC[2] = mcPart->Eta();  
+         //      AliESDtrack *esdtrack = fESD->GetTrack(mcPart->GetLabel());
+         containerInputMC[3] = 159.;
+         
+         if(fStack->IsPhysicalPrimary(iPart)) {
+           if(mcPart->Charge()>0. && fCFManagerPos->CheckParticleCuts(kStepMCAcceptance,mcPart)) fCFManagerPos->GetParticleContainer()->Fill(containerInputMC,kStepMCAcceptance);
+           if(mcPart->Charge()<0. && fCFManagerNeg->CheckParticleCuts(kStepMCAcceptance,mcPart)) fCFManagerNeg->GetParticleContainer()->Fill(containerInputMC,kStepMCAcceptance);
+         }
+        }
       }
     }
-  }
-  
+  }//end of ESD analysis
+
+cout << "Now posting..." << endl;
   PostData(0,fHistList);
   PostData(1,fCFManagerPos->GetParticleContainer());
   PostData(2,fCFManagerNeg->GetParticleContainer());
   
 }
+
 //________________________________________________________________________
-Bool_t AliPWG4HighPtSpectra::PythiaInfoFromFile(const char* currFile,Float_t &fXsec,Float_t &fTrials){
+Bool_t AliPWG4HighPtSpectra::PythiaInfoFromFile(const char* currFile,Float_t &fXsec,Float_t &fTrials)
+{
   //
   // get the cross section and the trails either from pyxsec.root or from pysec_hists.root
   // This is to called in Notify and should provide the path to the AOD/ESD file
@@ -636,6 +817,7 @@ Bool_t AliPWG4HighPtSpectra::PythiaInfoFromFile(const char* currFile,Float_t &fX
   }
   return kTRUE;
 }
+
 //________________________________________________________________________
 Bool_t AliPWG4HighPtSpectra::Notify()
 {
@@ -645,6 +827,9 @@ Bool_t AliPWG4HighPtSpectra::Notify()
   // Copied from AliAnalysisTaskJetSpectrum2
   // 
 
+  if(fNoPythiaInfo)
+    return kTRUE;
+
   TTree *tree = AliAnalysisManager::GetAnalysisManager()->GetTree();
   Float_t xsection = 0;
   Float_t ftrials  = 1;
@@ -667,7 +852,8 @@ Bool_t AliPWG4HighPtSpectra::Notify()
 }
 
 //________________________________________________________________________
-AliGenPythiaEventHeader*  AliPWG4HighPtSpectra::GetPythiaEventHeader(AliMCEvent *mcEvent){
+AliGenPythiaEventHeader*  AliPWG4HighPtSpectra::GetPythiaEventHeader(AliMCEvent *mcEvent)
+{
   
   if(!mcEvent)return 0;
   AliGenEventHeader* genHeader = mcEvent->GenEventHeader();
@@ -697,7 +883,8 @@ AliGenPythiaEventHeader*  AliPWG4HighPtSpectra::GetPythiaEventHeader(AliMCEvent
 }
 
 //________________________________________________________________________
-AliGenHijingEventHeader*  AliPWG4HighPtSpectra::GetHijingEventHeader(AliMCEvent *mcEvent){
+AliGenHijingEventHeader*  AliPWG4HighPtSpectra::GetHijingEventHeader(AliMCEvent *mcEvent)
+{
   
   if(!mcEvent)return 0;
   AliGenEventHeader* genHeader = mcEvent->GenEventHeader();
@@ -726,7 +913,6 @@ AliGenHijingEventHeader*  AliPWG4HighPtSpectra::GetHijingEventHeader(AliMCEvent
 
 }
 
-
 //___________________________________________________________________________
 void AliPWG4HighPtSpectra::Terminate(Option_t*)
 {
@@ -737,7 +923,8 @@ void AliPWG4HighPtSpectra::Terminate(Option_t*)
 }
 
 //___________________________________________________________________________
-void AliPWG4HighPtSpectra::CreateOutputObjects() {
+void AliPWG4HighPtSpectra::CreateOutputObjects() 
+{
   //HERE ONE CAN CREATE OUTPUT OBJECTS, IN PARTICULAR IF THE OBJECT PARAMETERS DON'T NEED
   //TO BE SET BEFORE THE EXECUTION OF THE TASK
   //
@@ -757,7 +944,7 @@ void AliPWG4HighPtSpectra::CreateOutputObjects() {
 
   fNEventReject = new TH1F("fNEventReject","Reason events are rejectected for analysis",20,0,20);
   //Set labels
-  fNEventReject->Fill("noESD",0);
+  fNEventReject->Fill("noESD/AOD",0);
   fNEventReject->Fill("Trigger",0);
   fNEventReject->Fill("NTracks<2",0);
   fNEventReject->Fill("noVTX",0);
@@ -815,7 +1002,8 @@ void AliPWG4HighPtSpectra::CreateOutputObjects() {
 }
 
 //________________________________________________________________________
-Bool_t AliPWG4HighPtSpectra::IsHIJINGParticle(Int_t label) {
+Bool_t AliPWG4HighPtSpectra::IsHIJINGParticle(Int_t label) //TODO: Still need to translate this function...
+{
   //
   // Return kTRUE in case particle is from HIJING event
   //
index 45a44bae5f5416ed5288e8191f99b21193e9a89b..56cce56bd923f996dbdfa01bfe228d64c90c24fa 100644 (file)
@@ -34,7 +34,9 @@ class TList;
 //class AliCFManager;
 class AliESDtrackCuts;
 class AliESDEvent;
-class AliESDVertex;
+class AliAODEvent;
+class AliVEvent;
+class AliVVertex;
 class AliMCEvent;
 class AliStack;
 class AliGenPythiaEventHeader;
@@ -66,7 +68,7 @@ class AliPWG4HighPtSpectra : public AliAnalysisTask {
 
   Bool_t IsPbPb() {return fIsPbPb;}  //is PbPb data?
   Bool_t SelectEvent();    //decides if event is used for analysis
-  Int_t CalculateCentrality(AliESDEvent *esd);
+  Int_t CalculateCentrality(AliVEvent *event);
 
   //Setters
   void SetIsPbPb(Bool_t cs)                {fIsPbPb = cs;}
@@ -84,7 +86,8 @@ class AliPWG4HighPtSpectra : public AliAnalysisTask {
   //if fTrackType=2 (TPConly constrained)
   void SetTrackType(Int_t trackType) {fTrackType = trackType;}
   //AliESDtrackCuts setters
-  void SetCuts(AliESDtrackCuts* trackCuts) {fTrackCuts = trackCuts;}
+  void SetCuts(AliESDtrackCuts* trackCuts) {fTrackCuts = trackCuts;} // Needs to be specified for ESD analysis, not for AOD analysis
+  void SetFilterMask(Int_t filtermask) {fFilterMask = filtermask;} // Needs to be specified for AOD analysis, not for ESD analysis
   void SetCutsReject(AliESDtrackCuts* trackCuts) {fTrackCutsReject = trackCuts;}
   void SelectHIJINGOnly(Bool_t b)    {fbSelectHIJING = b;}
 
@@ -96,6 +99,9 @@ class AliPWG4HighPtSpectra : public AliAnalysisTask {
   Bool_t IsReadAODData()   const {return fReadAODData;}
   void   SetReadAODData(Bool_t flag=kTRUE) {fReadAODData=flag;}
 
+  Bool_t   IsUsingPythiaInfo() const {return fNoPythiaInfo;}
+  void   SetNoPythiaInfo() {fNoPythiaInfo=kTRUE;}
+
   static AliGenPythiaEventHeader*  GetPythiaEventHeader(AliMCEvent *mcEvent);
   static AliGenHijingEventHeader*  GetHijingEventHeader(AliMCEvent *mcEvent);
 
@@ -104,24 +110,27 @@ class AliPWG4HighPtSpectra : public AliAnalysisTask {
 
   
  protected:
-  Bool_t              fReadAODData ;       // flag for AOD/ESD input files
-  const AliCFManager  *fCFManagerPos    ;  // pointer to the CF manager for positive charged particles
-  const AliCFManager  *fCFManagerNeg    ;  // pointer to the CF manager for negative charged particles
+  Bool_t              fReadAODData      ;  // flag for AOD/ESD input files
+  Bool_t              fNoPythiaInfo     ;  // flag to skip reading pyxsec.root and plotting output
+  const AliCFManager  *fCFManagerPos    ;  //! pointer to the CF manager for positive charged particles
+  const AliCFManager  *fCFManagerNeg    ;  //! pointer to the CF manager for negative charged particles
  
   AliESDEvent *fESD;      //! ESD object
-  AliMCEvent  *fMC;       //! MC event object
+  AliAODEvent *fAOD;      //! AOD object
+  AliMCEvent  *fMC;       //! MC event object, only used in ESD analysis
   AliStack    *fStack;    //! stack object
 
-  const AliESDVertex   *fVtx;     //! vertex object
+  const AliVVertex   *fVtx;     //! vertex object
 
   UInt_t      fTriggerMask;          // Trigger mask to select events 
   Bool_t      fIsPbPb;               // kTRUE if PbPb
   Int_t       fCentClass;            // Select only events from predefined centrality class
 
   Int_t   fTrackType;     // Type of track to be used in analysis
-  //AliESDtrackCuts options. Must be setted in AddTaskPWG4HighPTSpectra.C. They correspond with different steps in container.
+  //AliESDtrackCuts options and FilterMask. The former is must be setted in AddTaskPWG4HighPTSpectra.C for ESD analysis, the latter must be setted in AddTaskPWG4HighPTSpectra.C for AOD analysis. The AliESDtrackCuts correspond with different steps in container.
   AliESDtrackCuts *fTrackCuts;           // trackCuts applied to global tracks
   AliESDtrackCuts *fTrackCutsReject;     // trackCuts to reject tracks (hybrid case)
+  Int_t   fFilterMask;     // Filtermask specifying track cuts. See https://twiki.cern.ch/twiki/bin/view/ALICE/PWGPPAODTrackCuts for values.
 
   Bool_t fbSelectHIJING; //Select only particles from HIJING event
 
index 74e311db46ea22bf27790dd146c19c048888e4ad..febbf032fe88db5cfe0e6cdb65c8700a593f3e18 100644 (file)
@@ -9,41 +9,85 @@ const Float_t etamax = 0.9;
 const Int_t   mintrackrefsTPC = 0;
 const Int_t   mintrackrefsITS = 0;
 
-void AddTaskPWG4HighPtSpectra(TString year = "2011", char *prodType = "LHC11h",Bool_t isPbPb=kTRUE, Int_t iAODanalysis = 0, UInt_t triggerMask = AliVEvent::kMB,Bool_t bSelectHijingParticles = kFALSE)
+void AddTaskPWG4HighPtSpectra(TString year = "2011", char *prodType = "LHC11h",Bool_t isPbPb=kTRUE, Int_t iAODanalysis = 0, UInt_t triggerMask = AliVEvent::kMB,Bool_t bSelectHijingParticles = kFALSE,Bool_t usePythiaxsec = kFALSE)
 {
   int cent = 10;
 
   if(year.Contains("2011")) {
-    AddTaskPWG4HighPtSpectra2011(prodType,isPbPb,bSelectHijingParticles);
+    AddTaskPWG4HighPtSpectra2011(prodType,isPbPb,iAODanalysis,bSelectHijingParticles,usePythiaxsec);
   }
   else {
 
-    AliPWG4HighPtSpectra *taskSpectra00cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,0,0,triggerMask,bSelectHijingParticles);
-    AliPWG4HighPtSpectra *taskSpectra01cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,0,1,triggerMask,bSelectHijingParticles);
-    //  AliPWG4HighPtSpectra *taskSpectra02cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,0,2,triggerMask,bSelectHijingParticles);
-    //  AliPWG4HighPtSpectra *taskSpectra10cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,1,0,triggerMask,bSelectHijingParticles);
-    //  AliPWG4HighPtSpectra *taskSpectra20cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,2,0,triggerMask,bSelectHijingParticles);
-    AliPWG4HighPtSpectra *taskSpectra70cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,0,triggerMask,bSelectHijingParticles);
-    AliPWG4HighPtSpectra *taskSpectra71cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,1,triggerMask,bSelectHijingParticles);
-    AliPWG4HighPtSpectra *taskSpectra72cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,2,triggerMask,bSelectHijingParticles);
+    AliPWG4HighPtSpectra *taskSpectra00cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,0,0,triggerMask,bSelectHijingParticles,iAODanalysis,usePythiaxsec);
+    AliPWG4HighPtSpectra *taskSpectra01cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,0,1,triggerMask,bSelectHijingParticles,iAODanalysis,usePythiaxsec);
+    //  AliPWG4HighPtSpectra *taskSpectra02cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,0,2,triggerMask,bSelectHijingParticles,iAODanalysis,usePythiaxsec);
+    //  AliPWG4HighPtSpectra *taskSpectra10cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,1,0,triggerMask,bSelectHijingParticles,iAODanalysis,usePythiaxsec);
+    //  AliPWG4HighPtSpectra *taskSpectra20cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,2,0,triggerMask,bSelectHijingParticles,iAODanalysis,usePythiaxsec);
+    AliPWG4HighPtSpectra *taskSpectra70cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,0,triggerMask,bSelectHijingParticles,iAODanalysis,usePythiaxsec);
+    AliPWG4HighPtSpectra *taskSpectra71cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,1,triggerMask,bSelectHijingParticles,iAODanalysis,usePythiaxsec);
+    AliPWG4HighPtSpectra *taskSpectra72cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,2,triggerMask,bSelectHijingParticles,iAODanalysis,usePythiaxsec);
 
     if(isPbPb) {
       for(cent=0; cent<4; cent++) {
-       AliPWG4HighPtSpectra *taskSpectra00 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,0,0,triggerMask,bSelectHijingParticles);
-       AliPWG4HighPtSpectra *taskSpectra01 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,0,1,triggerMask,bSelectHijingParticles);
-       //      AliPWG4HighPtSpectra *taskSpectra02 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,0,2,triggerMask,bSelectHijingParticles);
-       //      AliPWG4HighPtSpectra *taskSpectra10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,1,0,triggerMask,bSelectHijingParticles);
-       //      AliPWG4HighPtSpectra *taskSpectra20 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,2,0,triggerMask,bSelectHijingParticles);
-       AliPWG4HighPtSpectra *taskSpectra70 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,0,triggerMask,bSelectHijingParticles);
-       AliPWG4HighPtSpectra *taskSpectra71 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,1,triggerMask,bSelectHijingParticles);
-       AliPWG4HighPtSpectra *taskSpectra72 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,2,triggerMask,bSelectHijingParticles);
+       AliPWG4HighPtSpectra *taskSpectra00 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,0,0,triggerMask,bSelectHijingParticles,iAODanalysis,usePythiaxsec);
+       AliPWG4HighPtSpectra *taskSpectra01 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,0,1,triggerMask,bSelectHijingParticles,iAODanalysis,usePythiaxsec);
+       //      AliPWG4HighPtSpectra *taskSpectra02 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,0,2,triggerMask,bSelectHijingParticles,iAODanalysis,usePythiaxsec);
+       //      AliPWG4HighPtSpectra *taskSpectra10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,1,0,triggerMask,bSelectHijingParticles,iAODanalysis,usePythiaxsec);
+       //      AliPWG4HighPtSpectra *taskSpectra20 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,2,0,triggerMask,bSelectHijingParticles,iAODanalysis,usePythiaxsec);
+       AliPWG4HighPtSpectra *taskSpectra70 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,0,triggerMask,bSelectHijingParticles,iAODanalysis,usePythiaxsec);
+       AliPWG4HighPtSpectra *taskSpectra71 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,1,triggerMask,bSelectHijingParticles,iAODanalysis,usePythiaxsec);
+       AliPWG4HighPtSpectra *taskSpectra72 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,2,triggerMask,bSelectHijingParticles,iAODanalysis,usePythiaxsec);
       }
     }
   }
+}
 
+void AddTaskPWG4HighPtSpectraQA_AOD(char *prodType = "LHC11h",Bool_t isPbPb=kTRUE, UInt_t triggerMask = AliVEvent::kMB,Bool_t bSelectHijingParticles = kFALSE,Bool_t usePythiaxsec = kFALSE)
+{
+  Int_t filterMask1; //standard global tracks
+  Int_t filterMask2; //complementary tracks
+  Int_t filterMask; //the sum: hybrid tracks
+
+  Bool_t bIncludeNoITS = kFALSE;
+
+  TString strRunPeriod = TString(prodType);
+  strRunPeriod.ToLower();
+
+  if (strRunPeriod == "lhc10h" || strRunPeriod == "lhc11h" ||
+      strRunPeriod == "lhc12a" || strRunPeriod == "lhc12b" || strRunPeriod == "lhc12c" || strRunPeriod == "lhc12d" ||
+      strRunPeriod == "lhc12e" || strRunPeriod == "lhc12f" || strRunPeriod == "lhc12g" || strRunPeriod == "lhc12g" ||
+      strRunPeriod == "lhc12h" || strRunPeriod == "lhc12i" ||
+      strRunPeriod == "lhc13b" || strRunPeriod == "lhc13c" || strRunPeriod == "lhc13d" || strRunPeriod == "lhc13e" ||
+      strRunPeriod == "lhc13f" || strRunPeriod == "lhc13g" ||
+      strRunPeriod == "lhc12a15e" || strRunPeriod == "lhc13b4" || strRunPeriod == "lhc13b4_fix" ||
+      strRunPeriod == "lhc13b4_plus" || strRunPeriod == "lhc12a15f" || strRunPeriod.Contains("lhc12a17") || strRunPeriod.Contains("lhc14a1")) {
+    filterMask  = 768;
+    filterMask1 = 256;
+    filterMask2 = 512;
+    bIncludeNoITS = kFALSE;
+    if(strRunPeriod == "lhc10h") bIncludeNoITS = kTRUE;
+  }
+  else if (strRunPeriod == "lhc11a" || strRunPeriod == "lhc10hold" || strRunPeriod == "lhc12a15a" || strRunPeriod.Contains("lhc11a2")) {
+    filterMask  = 272;
+    filterMask1 = 16;
+    filterMask2 = 256;
+    bIncludeNoITS = kTRUE;
+  }
+  else
+    AliFatal("Period string not of predefined type. Add it to the list in this macro.");
+
+  AliPWG4HighPtSpectra   *taskSpectraSUM   = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,10,0,0,triggerMask,bSelectHijingParticles,kTRUE,usePythiaxsec,filterMask ); //Sum: the hybrid tracks.
+  AliPWG4HighPtSpectra   *taskSpectraRESTR = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,10,0,5,triggerMask,bSelectHijingParticles,kTRUE,usePythiaxsec,filterMask1); //With SPD and ITS refit.
+  AliPWG4HighPtSpectra   *taskSpectraNOSPD = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,10,7,5,triggerMask,bSelectHijingParticles,kTRUE,usePythiaxsec,filterMask2); //Only ITS refit, not SPD.
+  if(isPbPb) { //also vary the centrality
+    AliPWG4HighPtSpectra *taskSpectraCent0 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,0 ,0,0,triggerMask,bSelectHijingParticles,kTRUE,usePythiaxsec,filterMask );
+    AliPWG4HighPtSpectra *taskSpectraCent1 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,1 ,0,0,triggerMask,bSelectHijingParticles,kTRUE,usePythiaxsec,filterMask );
+    AliPWG4HighPtSpectra *taskSpectraCent2 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,2 ,0,0,triggerMask,bSelectHijingParticles,kTRUE,usePythiaxsec,filterMask );
+    AliPWG4HighPtSpectra *taskSpectraCent3 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,3 ,0,0,triggerMask,bSelectHijingParticles,kTRUE,usePythiaxsec,filterMask );
+  }
 }
 
-void AddTaskPWG4HighPtSpectra2011(char *prodType = "LHC10h", Bool_t isPbPb=kTRUE,Bool_t bSelHijingParticles = kFALSE)
+void AddTaskPWG4HighPtSpectra2011(char *prodType = "LHC10h", Bool_t isPbPb=kTRUE, Int_t iAODanalysis = 0, Bool_t bSelHijingParticles = kFALSE, Bool_t usePythiaxsec = kFALSE)
 {
 
   int cent = 10;
@@ -51,49 +95,49 @@ void AddTaskPWG4HighPtSpectra2011(char *prodType = "LHC10h", Bool_t isPbPb=kTRUE
   UInt_t iPhysicsSelectionFlag = AliVEvent::kMB|AliVEvent::kCentral|AliVEvent::kSemiCentral;
   UInt_t iPhysicsSelectionFlagEMCEJE = AliVEvent::kEMCEJE;
 
-  AliPWG4HighPtSpectra *taskSpectra00cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,0,0,iPhysicsSelectionFlag,bSelHijingParticles);
-  AliPWG4HighPtSpectra *taskSpectra01cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,0,1,iPhysicsSelectionFlag,bSelHijingParticles);
-  AliPWG4HighPtSpectra *taskSpectra70cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,0,iPhysicsSelectionFlag,bSelHijingParticles);
-  AliPWG4HighPtSpectra *taskSpectra71cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,1,iPhysicsSelectionFlag,bSelHijingParticles);
-  AliPWG4HighPtSpectra *taskSpectra72cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,2,iPhysicsSelectionFlag,bSelHijingParticles);
-  AliPWG4HighPtSpectra *taskSpectra05cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,0,5,iPhysicsSelectionFlag,bSelHijingParticles);
-  AliPWG4HighPtSpectra *taskSpectra74cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,4,iPhysicsSelectionFlag,bSelHijingParticles);
-  AliPWG4HighPtSpectra *taskSpectra75cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,5,iPhysicsSelectionFlag,bSelHijingParticles);
-  AliPWG4HighPtSpectra *taskSpectra40cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,4,0,iPhysicsSelectionFlag,bSelHijingParticles);
-
-  AliPWG4HighPtSpectra *taskSpectraEMCJE00cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,0,0,iPhysicsSelectionFlagEMCEJE,bSelHijingParticles);
-  AliPWG4HighPtSpectra *taskSpectraEMCJE01cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,0,1,iPhysicsSelectionFlagEMCEJE,bSelHijingParticles);
-  AliPWG4HighPtSpectra *taskSpectraEMCJE70cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,0,iPhysicsSelectionFlagEMCEJE,bSelHijingParticles);
-  AliPWG4HighPtSpectra *taskSpectraEMCJE71cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,1,iPhysicsSelectionFlagEMCEJE,bSelHijingParticles);
-  AliPWG4HighPtSpectra *taskSpectraEMCJE72cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,2,iPhysicsSelectionFlagEMCEJE,bSelHijingParticles);
-  AliPWG4HighPtSpectra *taskSpectraEMCJE05cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,0,5,iPhysicsSelectionFlagEMCEJE,bSelHijingParticles);
-  AliPWG4HighPtSpectra *taskSpectraEMCJE74cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,4,iPhysicsSelectionFlagEMCEJE,bSelHijingParticles);
-  AliPWG4HighPtSpectra *taskSpectraEMCJE75cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,5,iPhysicsSelectionFlagEMCEJE,bSelHijingParticles);
-  AliPWG4HighPtSpectra *taskSpectraEMCJE40cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,4,0,iPhysicsSelectionFlagEMCEJE,bSelHijingParticles);
+  AliPWG4HighPtSpectra *taskSpectra00cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,0,0,iPhysicsSelectionFlag,bSelHijingParticles,iAODanalysis,usePythiaxsec);
+  AliPWG4HighPtSpectra *taskSpectra01cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,0,1,iPhysicsSelectionFlag,bSelHijingParticles,iAODanalysis,usePythiaxsec);
+  AliPWG4HighPtSpectra *taskSpectra70cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,0,iPhysicsSelectionFlag,bSelHijingParticles,iAODanalysis,usePythiaxsec);
+  AliPWG4HighPtSpectra *taskSpectra71cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,1,iPhysicsSelectionFlag,bSelHijingParticles,iAODanalysis,usePythiaxsec);
+  AliPWG4HighPtSpectra *taskSpectra72cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,2,iPhysicsSelectionFlag,bSelHijingParticles,iAODanalysis,usePythiaxsec);
+  AliPWG4HighPtSpectra *taskSpectra05cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,0,5,iPhysicsSelectionFlag,bSelHijingParticles,iAODanalysis,usePythiaxsec);
+  AliPWG4HighPtSpectra *taskSpectra74cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,4,iPhysicsSelectionFlag,bSelHijingParticles,iAODanalysis,usePythiaxsec);
+  AliPWG4HighPtSpectra *taskSpectra75cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,5,iPhysicsSelectionFlag,bSelHijingParticles,iAODanalysis,usePythiaxsec);
+  AliPWG4HighPtSpectra *taskSpectra40cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,4,0,iPhysicsSelectionFlag,bSelHijingParticles,iAODanalysis,usePythiaxsec);
+
+  AliPWG4HighPtSpectra *taskSpectraEMCJE00cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,0,0,iPhysicsSelectionFlagEMCEJE,bSelHijingParticles,iAODanalysis,usePythiaxsec);
+  AliPWG4HighPtSpectra *taskSpectraEMCJE01cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,0,1,iPhysicsSelectionFlagEMCEJE,bSelHijingParticles,iAODanalysis,usePythiaxsec);
+  AliPWG4HighPtSpectra *taskSpectraEMCJE70cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,0,iPhysicsSelectionFlagEMCEJE,bSelHijingParticles,iAODanalysis,usePythiaxsec);
+  AliPWG4HighPtSpectra *taskSpectraEMCJE71cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,1,iPhysicsSelectionFlagEMCEJE,bSelHijingParticles,iAODanalysis,usePythiaxsec);
+  AliPWG4HighPtSpectra *taskSpectraEMCJE72cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,2,iPhysicsSelectionFlagEMCEJE,bSelHijingParticles,iAODanalysis,usePythiaxsec);
+  AliPWG4HighPtSpectra *taskSpectraEMCJE05cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,0,5,iPhysicsSelectionFlagEMCEJE,bSelHijingParticles,iAODanalysis,usePythiaxsec);
+  AliPWG4HighPtSpectra *taskSpectraEMCJE74cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,4,iPhysicsSelectionFlagEMCEJE,bSelHijingParticles,iAODanalysis,usePythiaxsec);
+  AliPWG4HighPtSpectra *taskSpectraEMCJE75cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,5,iPhysicsSelectionFlagEMCEJE,bSelHijingParticles,iAODanalysis,usePythiaxsec);
+  AliPWG4HighPtSpectra *taskSpectraEMCJE40cent10 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,4,0,iPhysicsSelectionFlagEMCEJE,bSelHijingParticles,iAODanalysis,usePythiaxsec);
 
 
   if(isPbPb) {
     for(cent=0; cent<4; cent++) {
 
-      AliPWG4HighPtSpectra *taskSpectra00 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,0,0,iPhysicsSelectionFlag,bSelHijingParticles);
-      AliPWG4HighPtSpectra *taskSpectra01 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,0,1,iPhysicsSelectionFlag,bSelHijingParticles);
-      AliPWG4HighPtSpectra *taskSpectra70 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,0,iPhysicsSelectionFlag,bSelHijingParticles);
-      AliPWG4HighPtSpectra *taskSpectra71 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,1,iPhysicsSelectionFlag,bSelHijingParticles);
-      AliPWG4HighPtSpectra *taskSpectra72 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,2,iPhysicsSelectionFlag,bSelHijingParticles);
-      AliPWG4HighPtSpectra *taskSpectra05 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,0,5,iPhysicsSelectionFlag,bSelHijingParticles);
-      AliPWG4HighPtSpectra *taskSpectra74 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,4,iPhysicsSelectionFlag,bSelHijingParticles);
-      AliPWG4HighPtSpectra *taskSpectra75 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,5,iPhysicsSelectionFlag,bSelHijingParticles);
-      AliPWG4HighPtSpectra *taskSpectra40 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,4,0,iPhysicsSelectionFlag,bSelHijingParticles);
-
-      AliPWG4HighPtSpectra *taskSpectraEMCJE00 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,0,0,iPhysicsSelectionFlagEMCEJE,bSelHijingParticles);
-      AliPWG4HighPtSpectra *taskSpectraEMCJE01 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,0,1,iPhysicsSelectionFlagEMCEJE,bSelHijingParticles);
-      AliPWG4HighPtSpectra *taskSpectraEMCJE70 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,0,iPhysicsSelectionFlagEMCEJE,bSelHijingParticles);
-      AliPWG4HighPtSpectra *taskSpectraEMCJE71 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,1,iPhysicsSelectionFlagEMCEJE,bSelHijingParticles);
-      AliPWG4HighPtSpectra *taskSpectraEMCJE72 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,2,iPhysicsSelectionFlagEMCEJE,bSelHijingParticles);
-      AliPWG4HighPtSpectra *taskSpectraEMCJE05 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,0,5,iPhysicsSelectionFlagEMCEJE,bSelHijingParticles);
-      AliPWG4HighPtSpectra *taskSpectraEMCJE74 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,4,iPhysicsSelectionFlagEMCEJE,bSelHijingParticles);
-      AliPWG4HighPtSpectra *taskSpectraEMCJE75 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,5,iPhysicsSelectionFlagEMCEJE,bSelHijingParticles);
-      AliPWG4HighPtSpectra *taskSpectraEMCJE40 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,4,0,iPhysicsSelectionFlagEMCEJE,bSelHijingParticles);
+      AliPWG4HighPtSpectra *taskSpectra00 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,0,0,iPhysicsSelectionFlag,bSelHijingParticles,iAODanalysis,usePythiaxsec);
+      AliPWG4HighPtSpectra *taskSpectra01 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,0,1,iPhysicsSelectionFlag,bSelHijingParticles,iAODanalysis,usePythiaxsec);
+      AliPWG4HighPtSpectra *taskSpectra70 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,0,iPhysicsSelectionFlag,bSelHijingParticles,iAODanalysis,usePythiaxsec);
+      AliPWG4HighPtSpectra *taskSpectra71 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,1,iPhysicsSelectionFlag,bSelHijingParticles,iAODanalysis,usePythiaxsec);
+      AliPWG4HighPtSpectra *taskSpectra72 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,2,iPhysicsSelectionFlag,bSelHijingParticles,iAODanalysis,usePythiaxsec);
+      AliPWG4HighPtSpectra *taskSpectra05 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,0,5,iPhysicsSelectionFlag,bSelHijingParticles,iAODanalysis,usePythiaxsec);
+      AliPWG4HighPtSpectra *taskSpectra74 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,4,iPhysicsSelectionFlag,bSelHijingParticles,iAODanalysis,usePythiaxsec);
+      AliPWG4HighPtSpectra *taskSpectra75 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,5,iPhysicsSelectionFlag,bSelHijingParticles,iAODanalysis,usePythiaxsec);
+      AliPWG4HighPtSpectra *taskSpectra40 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,4,0,iPhysicsSelectionFlag,bSelHijingParticles,iAODanalysis,usePythiaxsec);
+
+      AliPWG4HighPtSpectra *taskSpectraEMCJE00 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,0,0,iPhysicsSelectionFlagEMCEJE,bSelHijingParticles,iAODanalysis,usePythiaxsec);
+      AliPWG4HighPtSpectra *taskSpectraEMCJE01 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,0,1,iPhysicsSelectionFlagEMCEJE,bSelHijingParticles,iAODanalysis,usePythiaxsec);
+      AliPWG4HighPtSpectra *taskSpectraEMCJE70 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,0,iPhysicsSelectionFlagEMCEJE,bSelHijingParticles,iAODanalysis,usePythiaxsec);
+      AliPWG4HighPtSpectra *taskSpectraEMCJE71 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,1,iPhysicsSelectionFlagEMCEJE,bSelHijingParticles,iAODanalysis,usePythiaxsec);
+      AliPWG4HighPtSpectra *taskSpectraEMCJE72 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,2,iPhysicsSelectionFlagEMCEJE,bSelHijingParticles,iAODanalysis,usePythiaxsec);
+      AliPWG4HighPtSpectra *taskSpectraEMCJE05 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,0,5,iPhysicsSelectionFlagEMCEJE,bSelHijingParticles,iAODanalysis,usePythiaxsec);
+      AliPWG4HighPtSpectra *taskSpectraEMCJE74 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,4,iPhysicsSelectionFlagEMCEJE,bSelHijingParticles,iAODanalysis,usePythiaxsec);
+      AliPWG4HighPtSpectra *taskSpectraEMCJE75 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,7,5,iPhysicsSelectionFlagEMCEJE,bSelHijingParticles,iAODanalysis,usePythiaxsec);
+      AliPWG4HighPtSpectra *taskSpectraEMCJE40 = ConfigureTaskPWG4HighPtSpectra(prodType,isPbPb,cent,4,0,iPhysicsSelectionFlagEMCEJE,bSelHijingParticles,iAODanalysis,usePythiaxsec);
 
     }
 
@@ -104,19 +148,25 @@ void AddTaskPWG4HighPtSpectra2011(char *prodType = "LHC10h", Bool_t isPbPb=kTRUE
 
 AliPWG4HighPtSpectra* ConfigureTaskPWG4HighPtSpectra(char *prodType = "LHC10e14", Bool_t isPbPb=kTRUE,Int_t centClass = 0, 
                                                     Int_t trackType = 0, Int_t cuts = 0, UInt_t triggerMask = AliVEvent::kMB,
-                                                    Bool_t bSelectHijingParticles = kFALSE)
+                                                    Bool_t bSelectHijingParticles = kFALSE, Int_t iAODanalysis = 0,
+                                                     Bool_t usePythiaxsec = kTRUE, Int_t filterMask = 0)
 {
 
   /*
-   trackType: 0 = global
+    trackType: 0 = global
                1 = TPC stand alone
                2 = TPC stand alone constrained to SPD vertex
+               4 = TPC stand alone constrained to SPD vertex with QA track selection on global tracks
+               5 = Hybrid tracks: constrained TPConly for which no tight ITS is available
+               6 = Hybrid tracks: constrained loose global for which no tight ITS is available
     cuts:      0 (global) = standard ITSTPC2010 a la RAA analysis
                1 (global) = ITSrefit, no SPD requirements -> standard for jet analysis
                2 (global) = ITSrefit + no hits in SPD
-              3 (global) = standard ITS tight cuts with nCrossed rows cut for hybrid tracks
+               3 (global) = standard ITS tight cuts with nCrossed rows cut for hybrid tracks
                0 (TPC)    = standard TPC + NClusters>70
                1 (TPC)    = standard TPC + NClusters>0 --> to study new TPC QA recommendations
+               0 (hybrid 5) = constrained TPConly for which no tight ITS is available
+               0 (hybrid 6) = constrained loose global for which no tight ITS is available
    */
 
   // Creates HighPtSpectra analysis task and adds it to the analysis manager.
@@ -142,6 +192,9 @@ AliPWG4HighPtSpectra* ConfigureTaskPWG4HighPtSpectra(char *prodType = "LHC10e14"
   TString type = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
   const char *analysisType = "ESD";//"TPC"
 
+  if( (type=="AOD" && iAODanalysis==0) || (type=="ESD" && iAODanalysis==1) ) //check if iAODanalysis is configured correctly. TODO: this can be simplified by removing the iAODanalysis variable.
+    AliFatal(Form("Ordering to perform the analysis on wrong datatype. This is an %s!", type))
+
   // C. Create the task, add it to manager.
   //===========================================================================
  //CONTAINER DEFINITION
@@ -232,81 +285,84 @@ AliPWG4HighPtSpectra* ConfigureTaskPWG4HighPtSpectra(char *prodType = "LHC10e14"
   containerNeg -> SetBinLimits(incls,binLim4);
   
   //CREATE THE  CUTS -----------------------------------------------
-  //Use AliESDtrackCuts
+  //Use AliESDtrackCuts, only for ESD analysis
   AliESDtrackCuts *trackCuts = new AliESDtrackCuts("AliESDtrackCuts","Standard Cuts");
   AliESDtrackCuts *trackCutsReject = 0x0;
-  //Standard Cuts
-  //Set track cuts for global tracks
-  if(trackType==0 && cuts==0) {
-    // tight global tracks - RAA analysis
-    trackCuts = CreateTrackCutsPWGJE(1000);
-  }
-  if(trackType==0 && cuts==1) {
-    //Cuts global tracks with ITSrefit requirement and SPDrequirement for jet analysis
-    trackCuts = CreateTrackCutsPWGJE(10001006);
-  }
-  if(trackType==0 && cuts==5) {
-    //Cuts global tracks with ITSrefit requirement and SPDrequirement for jet analysis + NCrossedRowsCut>120 recommended in 2011
-    trackCuts = CreateTrackCutsPWGJE(10001008);
-  }
-  
-  if(trackType==0 && cuts==2) {
-    //Cuts global tracks with ITSrefit requirement but without SPD
-    if (!strcmp(prodType,"LHC12a15e"))
-      trackCuts = CreateTrackCutsPWGJE(10011008);
-    else
-      trackCuts = CreateTrackCutsPWGJE(10011006);
-  }
-  if(trackType==7 && cuts==0) {
-    // no requirements on SPD and ITSrefit failed
-    trackCuts = CreateTrackCutsPWGJE(10041006);   //no ITSrefit requirement
-    trackCutsReject = CreateTrackCutsPWGJE(1006); //ITSrefit requirement
-    trackCutsReject->SetEtaRange(etamin,etamax);
-    trackCutsReject->SetPtRange(0.15, 1e10);
-  }
-  if(trackType==7 && cuts==4) {
-    // tight global tracks +  NCrossedRowsCut>120 recommended in 2011
-    trackCuts = CreateTrackCutsPWGJE(10041008);
-    trackCutsReject = CreateTrackCutsPWGJE(1008);
-    trackCutsReject->SetEtaRange(-0.9,0.9);
-    trackCutsReject->SetPtRange(0.15, 1e10);
-  }
-  if(trackType==7 && cuts==1) {
-    //Cuts global tracks with ITSrefit requirement but without SPD
-    trackCuts = CreateTrackCutsPWGJE(10011006);
-  }
-  if(trackType==7 && cuts==5) {
-    // tight global tracks  + NCrossedRowsCut>120 recommended in 2011
-    trackCuts = CreateTrackCutsPWGJE(10011008);
-  }
-
-  if(trackType==7 && cuts==2) {
-    // no requirements on SPD and ITSrefit failed
-    trackCuts = CreateTrackCutsPWGJE(10041006);       //no ITSrefit requirement filter 256
-    trackCutsReject = CreateTrackCutsPWGJE(10001006); //ITSrefit requirement filter 16
-    trackCutsReject->SetEtaRange(etamin,etamax);
-    trackCutsReject->SetPtRange(0.15, 1e10);
-  }
-  if(trackType==7 && cuts==6) {
-    // no requirements on SPD and ITSrefit failed
-    trackCuts = CreateTrackCutsPWGJE(10041008);       //no ITSrefit requirement filter 256
-    trackCutsReject = CreateTrackCutsPWGJE(10001008); //ITSrefit requirement filter 16
-    trackCutsReject->SetEtaRange(-0.9,0.9);
-    trackCutsReject->SetPtRange(0.15, 1e10);
-  }
-
-
 
-  if(trackType==1 && cuts==0) {
-    //Set track cuts for TPConly tracks
-    trackCuts = CreateTrackCutsPWGJE(2001);
-  }
-  if(trackType==2 && cuts==0) {
-     //              Set track cuts for TPConly constrained tracks
-    trackCuts = CreateTrackCutsPWGJE(2001);
+  if(!iAODanalysis) {
+    //Standard Cuts
+    //Set track cuts for global tracks
+    if(trackType==0 && cuts==0) {
+      // tight global tracks - RAA analysis
+      trackCuts = CreateTrackCutsPWGJE(1000);
+    }
+    if(trackType==0 && cuts==1) {
+      //Cuts global tracks with ITSrefit requirement and SPDrequirement for jet analysis
+      trackCuts = CreateTrackCutsPWGJE(10001006);
+    }
+    if(trackType==0 && cuts==5) {
+      //Cuts global tracks with ITSrefit requirement and SPDrequirement for jet analysis + NCrossedRowsCut>120 recommended in 2011
+      trackCuts = CreateTrackCutsPWGJE(10001008);
+    }
+    
+    if(trackType==0 && cuts==2) {
+      //Cuts global tracks with ITSrefit requirement but without SPD
+      if (!strcmp(prodType,"LHC12a15e"))
+        trackCuts = CreateTrackCutsPWGJE(10011008);
+      else
+        trackCuts = CreateTrackCutsPWGJE(10011006);
+    }
+    if(trackType==7 && cuts==0) {
+      // no requirements on SPD and ITSrefit failed
+      trackCuts = CreateTrackCutsPWGJE(10041006);   //no ITSrefit requirement
+      trackCutsReject = CreateTrackCutsPWGJE(1006); //ITSrefit requirement
+      trackCutsReject->SetEtaRange(etamin,etamax);
+      trackCutsReject->SetPtRange(0.15, 1e10);
+    }
+    if(trackType==7 && cuts==4) {
+      // tight global tracks +  NCrossedRowsCut>120 recommended in 2011
+      trackCuts = CreateTrackCutsPWGJE(10041008);
+      trackCutsReject = CreateTrackCutsPWGJE(1008);
+      trackCutsReject->SetEtaRange(-0.9,0.9);
+      trackCutsReject->SetPtRange(0.15, 1e10);
+    }
+    if(trackType==7 && cuts==1) {
+      //Cuts global tracks with ITSrefit requirement but without SPD
+      trackCuts = CreateTrackCutsPWGJE(10011006);
+    }
+    if(trackType==7 && cuts==5) {
+      // tight global tracks  + NCrossedRowsCut>120 recommended in 2011
+      trackCuts = CreateTrackCutsPWGJE(10011008);
+    }
+  
+    if(trackType==7 && cuts==2) {
+      // no requirements on SPD and ITSrefit failed
+      trackCuts = CreateTrackCutsPWGJE(10041006);       //no ITSrefit requirement filter 256
+      trackCutsReject = CreateTrackCutsPWGJE(10001006); //ITSrefit requirement filter 16
+      trackCutsReject->SetEtaRange(etamin,etamax);
+      trackCutsReject->SetPtRange(0.15, 1e10);
+    }
+    if(trackType==7 && cuts==6) {
+      // no requirements on SPD and ITSrefit failed
+      trackCuts = CreateTrackCutsPWGJE(10041008);       //no ITSrefit requirement filter 256
+      trackCutsReject = CreateTrackCutsPWGJE(10001008); //ITSrefit requirement filter 16
+      trackCutsReject->SetEtaRange(-0.9,0.9);
+      trackCutsReject->SetPtRange(0.15, 1e10);
+    }
+  
+  
+  
+    if(trackType==1 && cuts==0) {
+      //Set track cuts for TPConly tracks
+      trackCuts = CreateTrackCutsPWGJE(2001);
+    }
+    if(trackType==2 && cuts==0) {
+       //            Set track cuts for TPConly constrained tracks
+      trackCuts = CreateTrackCutsPWGJE(2001);
+    }
+    trackCuts->SetEtaRange(etamin,etamax);
+    trackCuts->SetPtRange(0.15, 1e10);
   }
-  trackCuts->SetEtaRange(etamin,etamax);
-  trackCuts->SetPtRange(0.15, 1e10);
 
   // Gen-Level kinematic cuts
   AliCFTrackKineCuts *mcKineCuts = new AliCFTrackKineCuts("mcKineCuts","MC-level kinematic cuts");
@@ -363,12 +419,19 @@ AliPWG4HighPtSpectra* ConfigureTaskPWG4HighPtSpectra(char *prodType = "LHC10e14"
 
   AliPWG4HighPtSpectra *taskPWG4HighPtSpectra = new AliPWG4HighPtSpectra(Form("AliPWG4HighPtSpectraCent%dTrackType%dCuts%dPSF%s",centClass,trackType,cuts,trigName.Data()));
   taskPWG4HighPtSpectra->SetTrackType(trackType);
-  taskPWG4HighPtSpectra->SetCuts(trackCuts);
-  taskPWG4HighPtSpectra->SetCutsReject(trackCutsReject);
+  if(iAODanalysis)
+    taskPWG4HighPtSpectra->SetFilterMask(filterMask);
+  else {
+    taskPWG4HighPtSpectra->SetCuts(trackCuts);
+    taskPWG4HighPtSpectra->SetCutsReject(trackCutsReject);
+  }
   taskPWG4HighPtSpectra->SetCFManagerPos(manPos); //here is set the CF manager +
   taskPWG4HighPtSpectra->SetCFManagerNeg(manNeg); //here is set the CF manager -
   taskPWG4HighPtSpectra->SetTriggerMask(triggerMask);
   taskPWG4HighPtSpectra->SelectHIJINGOnly(bSelectHijingParticles);
+  taskPWG4HighPtSpectra->SetReadAODData(iAODanalysis==0? kFALSE : kTRUE);
+  if(!usePythiaxsec)
+    taskPWG4HighPtSpectra->SetNoPythiaInfo();
 
   if(isPbPb) {
     taskPWG4HighPtSpectra->SetIsPbPb(kTRUE);
index 73e20336b23a025fe238f68a9f7bc036e9ad3cc1..dd40057b1e81eac079c34bab747101d2f9543340 100644 (file)
@@ -1,4 +1,4 @@
-void AddTaskPWG4HighPtTrackQA(TString prodType = "LHC10h", Int_t iAODanalysis = 0, Bool_t isPbPb=kTRUE, Bool_t bReduced = kTRUE, Int_t filterBit = 272)
+void AddTaskPWG4HighPtTrackQA(TString prodType = "LHC10h", Int_t iAODanalysis = 0, Bool_t isPbPb=kTRUE, Bool_t bReduced = kTRUE, Int_t filterBit = 272, Bool_t doEfficiency = kFALSE)
 {
   if(iAODanalysis==0) { //run on ESDs
     if(prodType.EqualTo("LHC10h") || prodType.EqualTo("LHC11a")) {
@@ -17,12 +17,16 @@ void AddTaskPWG4HighPtTrackQA(TString prodType = "LHC10h", Int_t iAODanalysis =
     }
   }
   else if(iAODanalysis==1) { //run on AODs
+    if(doEfficiency==1){
+      gROOT->LoadMacro(gSystem->ExpandPathName("$ALICE_ROOT/PWGJE/macros/AddTaskPWG4HighPtSpectra.C"));
+      AddTaskPWG4HighPtSpectraQA_AOD(prodType.Data(),isPbPb,AliVEvent::kMB,kFALSE,kFALSE);//TODO:bHijing has to become kTRUE
+    }
     AddTaskPWG4HighPtTrackQAAOD(prodType.Data(),isPbPb,iAODanalysis,filterBit); 
   }
 }
 
-void AddTaskPWG4HighPtTrackQApPb(char *prodType = "LHC13b") {
-
+void AddTaskPWG4HighPtTrackQApPb(char *prodType = "LHC13b")
+{
   AliPWG4HighPtTrackQA *taskTrackQA05cent10 = ConfigureTaskPWG4HighPtTrackQA(prodType,kFALSE,0,10,0,5,AliVEvent::kINT7);
   AliPWG4HighPtTrackQA *taskTrackQA75cent10 = ConfigureTaskPWG4HighPtTrackQA(prodType,kFALSE,0,10,7,5,AliVEvent::kINT7);
   
@@ -32,7 +36,6 @@ void AddTaskPWG4HighPtTrackQApPb(char *prodType = "LHC13b") {
   }
 }
 
-
 void AddTaskPWG4HighPtTrackQAAll(char *prodType = "LHC10h",Bool_t isPbPb=kTRUE, Int_t iAODanalysis = 0) 
 {    
 
@@ -125,7 +128,6 @@ void AddTaskPWG4HighPtTrackQAAllReduced(char *prodType = "LHC11h",Bool_t isPbPb=
   }
 }
 
-
 void AddTaskPWG4HighPtTrackQALHC11hLTS(char *prodType = "LHC10h",Bool_t isPbPb=kTRUE, Int_t iAODanalysis = 0) 
 {