]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG4/macros/AnalysisTrainPWG4Jets.C
Fix Coverity
[u/mrichter/AliRoot.git] / PWG4 / macros / AnalysisTrainPWG4Jets.C
index 25da527eb82baa568a2e32dce4dd762a1dd6713f..9671f26a1ec0ee5768e5a87724f8ed473219dc08 100644 (file)
@@ -33,6 +33,7 @@ Bool_t      kUsePAR             = kFALSE;  // use par files for extra libs
 Bool_t      kUseCPAR            = kFALSE;  // use par files for common libs
 Bool_t      kFillAOD = kTRUE;  // switch of AOD filling for on the fly analysis
 Bool_t      kFilterAOD = kTRUE;
+Float_t     kJetTriggerPtCut = 20; // pT for jet trigger in case of iFilter==2
 Int_t       kSaveAOD = 8;        // Bit switch 1 = Full AOD 2 = Jet AOD , 4 = PartCorr, 8 = JCORRAN 
 //== general input and output variables
 
@@ -68,7 +69,7 @@ Int_t         kErrorIgnoreLevel = -1; // takes the errror print level from .root
 // const Int_t kSysError =   5000;
 // const Int_t kFatal    =   6000; 
 Int_t         kUseSysInfo         = 0; // activate debugging
-Long64_t    kNumberOfEvents     = 1234567890; // number of events to process from the chain
+Long64_t    kNumberOfEvents     = 1234567890; // Number of events to process from the chain
 Bool_t      kUseMC              = kTRUE;  // use MC info
 Bool_t      kIsMC               = kTRUE;  // is MC info, if false it overwrites Use(AOD)MC
 Bool_t      kUseAODMC           = kTRUE;  // use MC infA
@@ -90,9 +91,11 @@ Int_t       kJetMapOffset[3] = {10000,100,1};
 TString     kDefaultJetBranch     = "";      // is currently set when filled (iJETAN or clusters) or from config macro 
 TString     kDefaultJetBackgroundBranch            = "";      // is currently set when filled (jet clsuters  
 TString     kDefaultJetBackgroundBranchCut1        = "";      // is currently set when filled (jet clsuters  
+TString     kDefaultJetBackgroundBranchCut2        = "";      // is currently set when filled (jet clsuters  
 TString     kDefaultJetBackgroundBranch_extra     = "";      // is currently set when filled (jet clsuters) 
 TString     kJetSubtractBranches     = "";      // is currently set when filled (jet clsuters  
 TString     kJetSubtractBranchesCut1     = "";      // is currently set when filled (jet clsuters  
+TString     kJetSubtractBranchesCut2     = "";      // is currently set when filled (jet clsuters  
 TString     kJetSubtractBranches_extra     = "";      // is currently set when filled (jet clsuters  
 
 TString     kDefaultJetBranchMC     = "";      // is currently set when filled (iJETAN or clusters) or from config macro 
@@ -167,7 +170,7 @@ Int_t       kProofOffset = 0;
 //== grid plugin setup variables
 Bool_t      kPluginUse         = kTRUE;   // do not change
 Bool_t      kPluginUseProductionMode  = kFALSE;   // use the plugin in production mode
-TString     kPluginRootVersion       = "v5-28-00c";  // *CHANGE ME IF MORE RECENT IN GRID*
+TString     kPluginRootVersion       = "v5-30-02";  // *CHANGE ME IF MORE RECENT IN GRID*
 TString     kPluginAliRootVersion    = "v4-21-01a-AN";  // *CHANGE ME IF MORE RECENT IN GRID*                                          
 Bool_t      kPluginMergeViaJDL       = kTRUE;  // merge via JDL
 Bool_t      kPluginFastReadOption   = kFALSE;  // use xrootd tweaks
@@ -408,7 +411,7 @@ void AnalysisTrainPWG4Jets(const char *analysis_mode="local",
    
    Float_t fTrackEtaWindow = 0.9;
    Float_t fJetEtaWindow   = 0.5;
-
+   Float_t fVertexWindow =  10;
    /*
    if(kIsPbPb){// for pass1
      Float_t fTrackEtaWindow = 0.8;
@@ -425,29 +428,33 @@ void AnalysisTrainPWG4Jets(const char *analysis_mode="local",
        iTriggerHIC = 2;
        rejectBkg = false; // for the moment...
      }
-     AliPhysicsSelectionTask* physSelTask = AddTaskPhysicsSelection(kIsMC,rejectBkg);  
+     AliPhysicsSelectionTask* physSelTask = AddTaskPhysicsSelection(kIsMC,true,rejectBkg);  
 
-     mgr->RegisterExtraFile("EventStat_temp.root");
+     //     mgr->RegisterExtraFile("event_stat.root");
      mgr->AddStatisticsTask();
    }
    else{
      iPhysicsSelectionFlag = AliVEvent::kMB;
    }
-
-   if(iCentralitySelection){
+   
+   if(kIsPbPb&&!iAODanalysis){
 
      // has to run before AOD filter
      gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskCentrality.C");
-     //     const char* file1="$ALICE_ROOT/ANALYSIS/macros/AliCentralityBy1D_137161.root";
-     //     const char* file2="$ALICE_ROOT/ANALYSIS/macros/AliCentralityByFunction_137161.root";
      AliCentralitySelectionTask *taskC = AddTaskCentrality();
       if (!taskC) ::Warning("AnalysisTrainPWG4Jets", "AliCentralitySelectionTask cannot run for this train conditions - EXCLUDED");
-   }
 
+
+     gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskEventplane.C");
+     AliEPSelectionTask *taskEP = AddTaskEventplane();
+     if (!taskEP) ::Warning("AnalysisTrainPWG4Jets", "AliEventplan cannot run for this train conditions - EXCLUDED");
+   }
+   
    if (iESDfilter && !iAODanalysis) {
       //  ESD filter task configuration.
       gROOT->LoadMacro("$ALICE_ROOT/PWG4/macros/AddTaskESDFilterPWG4Train.C");
-      AliAnalysisTaskESDfilter *taskesdfilter = AddTaskESDFilter(kUseKinefilter,kUseMuonfilter);
+      // switch on centrality make for PbPb
+      AliAnalysisTaskESDfilter *taskesdfilter = AddTaskESDFilterPWG4Train(kUseKinefilter); // carefull, if physics selection is enabled you may get not primary vertex pointer later on...
       taskesdfilter->SetEnableFillAOD(!kFilterAOD);
       taskesdfilter->DisableV0s();
       taskesdfilter->DisableCascades();
@@ -586,27 +593,28 @@ void AnalysisTrainPWG4Jets(const char *analysis_mode="local",
      if(iPWG4Cluster&1){
 
        if(kIsPbPb){
-        taskCl = AddTaskJetCluster("AOD","",kHighPtFilterMask,iPhysicsSelectionFlag,"KT",0.4,0,1, kDeltaAODJetName.Data(),0.15,fTrackEtaWindow,0); // this one is for the background and random jets, random cones with no skip
+        taskCl = AddTaskJetCluster("AOD","",kHighPtFilterMask,iPhysicsSelectionFlag,"KT",0.4,0,1, kDeltaAODJetName.Data(),0.15,fTrackEtaWindow,fVertexWindow,0); // this one is for the background and random jets, random cones with no skip
         taskCl->SetBackgroundCalc(kTRUE);
         taskCl->SetNRandomCones(1);
-        taskCl->SetEventSelection(kTRUE); // saves some computing time, not all vertices are processed
         //      taskCl->SetDebugLevel(11);
         taskCl->SetCentralityCut(fCenLo,fCenUp);
-        taskCl->SetGhostEtamax(fTrackEtaWindow);
+
+        taskCl->SetJetTypes(1<<0|1<<2|1<<3);
         kDefaultJetBackgroundBranch = Form("%s_%s",AliAODJetEventBackground::StdBranchName(),taskCl->GetJetOutputBranch());
         kJetListSpectrum.Add(new TObjString(taskCl->GetJetOutputBranch()));
         kJetListSpectrum.Add(new TObjString(Form("%sRandomConeSkip%02d",taskCl->GetJetOutputBranch(),0)));
         kJetListSpectrum.Add(new TObjString(Form("%sRandomCone_random",taskCl->GetJetOutputBranch())));
+
         kJetSubtractBranches += Form("%s%s ",taskCl->GetJetOutputBranch(),"RandomConeSkip00");
         kJetSubtractBranches += Form("%s%s ",taskCl->GetJetOutputBranch(),"RandomCone_random");
 
-        taskCl = AddTaskJetCluster("AOD","",kHighPtFilterMask,iPhysicsSelectionFlag,"KT",0.4,0,1, kDeltaAODJetName.Data(),2.0,fTrackEtaWindow,0); // this one is for the background and random jets, random cones with no skip
-        taskCl->SetEventSelection(kTRUE); // saves some computing time, not all vertices are processed
+        taskCl = AddTaskJetCluster("AOD","",kHighPtFilterMask,iPhysicsSelectionFlag,"KT",0.4,0,1, kDeltaAODJetName.Data(),1.0,fTrackEtaWindow,fVertexWindow,0); // this one is for the background and random jets, random cones with no skip
         taskCl->SetNRandomCones(1);
         taskCl->SetBackgroundCalc(kTRUE);
         taskCl->SetCentralityCut(fCenLo,fCenUp);
-        taskCl->SetGhostEtamax(fTrackEtaWindow);
         if(iAODanalysis==2)taskCl->SetAODTrackInput(kTRUE);
+
+        taskCl->SetJetTypes(1<<0|1<<2|1<<3);
         kDefaultJetBackgroundBranchCut1 = Form("%s_%s",AliAODJetEventBackground::StdBranchName(),taskCl->GetJetOutputBranch());
         kJetSubtractBranchesCut1 += Form("%s%s ",taskCl->GetJetOutputBranch(),"RandomConeSkip00");
         kJetSubtractBranchesCut1 += Form("%s%s ",taskCl->GetJetOutputBranch(),"RandomCone_random");
@@ -614,157 +622,166 @@ void AnalysisTrainPWG4Jets(const char *analysis_mode="local",
         kJetListSpectrum.Add(new TObjString(Form("%sRandomConeSkip%02d",taskCl->GetJetOutputBranch(),0)));
         kJetListSpectrum.Add(new TObjString(Form("%sRandomCone_random",taskCl->GetJetOutputBranch())));
 
+        taskCl = AddTaskJetCluster("AOD","",kHighPtFilterMask,iPhysicsSelectionFlag,"KT",0.4,0,1, kDeltaAODJetName.Data(),2.0,fTrackEtaWindow,fVertexWindow,0); // this one is for the background and random jets, random cones with no skip
+        taskCl->SetNRandomCones(1);
+        taskCl->SetBackgroundCalc(kTRUE);
+        taskCl->SetCentralityCut(fCenLo,fCenUp);
+        if(iAODanalysis==2)taskCl->SetAODTrackInput(kTRUE);
+
+        taskCl->SetJetTypes(1<<0|1<<2|1<<3);
+        kDefaultJetBackgroundBranchCut2 = Form("%s_%s",AliAODJetEventBackground::StdBranchName(),taskCl->GetJetOutputBranch());
+        kJetSubtractBranchesCut2 += Form("%s%s ",taskCl->GetJetOutputBranch(),"RandomConeSkip00");
+        kJetSubtractBranchesCut2 += Form("%s%s ",taskCl->GetJetOutputBranch(),"RandomCone_random");
+        kJetListSpectrum.Add(new TObjString(taskCl->GetJetOutputBranch()));
+        kJetListSpectrum.Add(new TObjString(Form("%sRandomConeSkip%02d",taskCl->GetJetOutputBranch(),0)));
+        kJetListSpectrum.Add(new TObjString(Form("%sRandomCone_random",taskCl->GetJetOutputBranch())));
+
+
          if (iPWG4FastEmbedding) {
            AliAnalysisTaskJetCluster *taskClEmb = 0;
-           taskClEmb = AddTaskJetCluster("AODextra","",kHighPtFilterMask,iPhysicsSelectionFlag,"KT",0.4,0,1, kDeltaAODJetName.Data(),0.15,fTrackEtaWindow); // this one is for the background and random jets
-        taskCl->SetEventSelection(kTRUE); // saves some computing time, not all vertices are processed
+           taskClEmb = AddTaskJetCluster("AODextra","",kHighPtFilterMask,iPhysicsSelectionFlag,"KT",0.4,0,1, kDeltaAODJetName.Data(),0.15,fTrackEtaWindow,fVertexWindow); // this one is for the background and random jets
            taskClEmb->SetBackgroundCalc(kTRUE);
            taskClEmb->SetCentralityCut(fCenLo,fCenUp);
-           taskClEmb->SetGhostEtamax(fTrackEtaWindow);
           if(iAODanalysis==2)taskClEmb->SetAODTrackInput(kTRUE);
           kDefaultJetBackgroundBranch_extra = Form("%s_%s",AliAODJetEventBackground::StdBranchName(),taskClEmb->GetJetOutputBranch());
 
-           taskClEmb = AddTaskJetCluster("AODextraonly","",kHighPtFilterMask,iPhysicsSelectionFlag,"KT",0.4,0,1, kDeltaAODJetName.Data(),0.15,fTrackEtaWindow); // this one is for the background and random jets
-          taskCl->SetEventSelection(kTRUE); // saves some computing time, not all vertices are processed
+           taskClEmb = AddTaskJetCluster("AODextraonly","",kHighPtFilterMask,iPhysicsSelectionFlag,"KT",0.4,0,1, kDeltaAODJetName.Data(),0.15,fTrackEtaWindow,fVertexWindow); // this one is for the background and random jets
            taskClEmb->SetBackgroundCalc(kFALSE);
            taskClEmb->SetCentralityCut(fCenLo,fCenUp);
-           taskClEmb->SetGhostEtamax(fTrackEtaWindow);
           if(iAODanalysis==2)taskClEmb->SetAODTrackInput(kTRUE);
           
-           taskClEmb = AddTaskJetCluster("AODextra","",kHighPtFilterMask,iPhysicsSelectionFlag,"ANTIKT",0.4,0,1,kDeltaAODJetName.Data(),0.15,fTrackEtaWindow);
-        taskCl->SetEventSelection(kTRUE); // saves some computing time, not all vertices are processed
+           taskClEmb = AddTaskJetCluster("AODextra","",kHighPtFilterMask,iPhysicsSelectionFlag,"ANTIKT",0.4,0,1,kDeltaAODJetName.Data(),0.15,fTrackEtaWindow,fVertexWindow);
            taskClEmb->SetCentralityCut(fCenLo,fCenUp);
            taskClEmb->SetBackgroundBranch(kDefaultJetBackgroundBranch_extra.Data());
            kJetSubtractBranches_extra += Form("%s ",taskClEmb->GetJetOutputBranch());
           if(iAODanalysis==2)taskClEmb->SetAODTrackInput(kTRUE);
 
-           taskClEmb = AddTaskJetCluster("AODextraonly","",kHighPtFilterMask,iPhysicsSelectionFlag,"ANTIKT",0.4,0,1,kDeltaAODJetName.Data(),0.15,fTrackEtaWindow);
+           taskClEmb = AddTaskJetCluster("AODextraonly","",kHighPtFilterMask,iPhysicsSelectionFlag,"ANTIKT",0.4,0,1,kDeltaAODJetName.Data(),0.15,fTrackEtaWindow,fVertexWindow);
            taskClEmb->SetCentralityCut(fCenLo,fCenUp);
           if(iAODanalysis==2)taskClEmb->SetAODTrackInput(kTRUE);
          }
 
-        taskCl = AddTaskJetCluster("AOD","",kHighPtFilterMask,iPhysicsSelectionFlag,"KT",0.2,0,1, kDeltaAODJetName.Data(),0.15); // this one is for the background and random jets
-        taskCl->SetEventSelection(kTRUE); // saves some computing time, not all vertices are processed
+        taskCl = AddTaskJetCluster("AOD","",kHighPtFilterMask,iPhysicsSelectionFlag,"KT",0.2,0,1, kDeltaAODJetName.Data(),0.15,fTrackEtaWindow,fVertexWindow,0); // this one is for the background and random jets
+        taskCl->SetNRandomCones(1);
         taskCl->SetBackgroundCalc(kTRUE);
         taskCl->SetCentralityCut(fCenLo,fCenUp);
-        taskCl->SetGhostEtamax(fTrackEtaWindow);
+        taskCl->SetJetTypes(1<<0|1<<2|1<<3);
         kJetListSpectrum.Add(new TObjString(taskCl->GetJetOutputBranch()));
+        kJetListSpectrum.Add(new TObjString(Form("%sRandomConeSkip%02d",taskCl->GetJetOutputBranch(),0)));
+        kJetListSpectrum.Add(new TObjString(Form("%sRandomCone_random",taskCl->GetJetOutputBranch())));
+
+
+
         if(iAODanalysis==2)taskCl->SetAODTrackInput(kTRUE);
        }
        else{
-        taskCl = AddTaskJetCluster("AOD","",kHighPtFilterMask,iPhysicsSelectionFlag,"KT",0.6,0,1,kDeltaAODJetName.Data(),0.15); // this one is for the background jets
-        taskCl->SetEventSelection(kTRUE); // saves some computing time, not all vertices are processed
+        taskCl = AddTaskJetCluster("AOD","",kHighPtFilterMask,iPhysicsSelectionFlag,"KT",0.6,0,1,kDeltaAODJetName.Data(),0.15,fTrackEtaWindow,fVertexWindow); // this one is for the background jets
         taskCl->SetBackgroundCalc(kTRUE);
         kDefaultJetBackgroundBranch = Form("%s_%s",AliAODJetEventBackground::StdBranchName(),taskCl->GetJetOutputBranch());
-        taskCl->SetGhostEtamax(fTrackEtaWindow);
         if(iAODanalysis==2)taskCl->SetAODTrackInput(kTRUE);
         kJetListSpectrum.Add(new TObjString(taskCl->GetJetOutputBranch()));
 
-        taskCl = AddTaskJetCluster("AOD","",kHighPtFilterMask,iPhysicsSelectionFlag,"KT",0.4,0,1,kDeltaAODJetName.Data(),0.15); 
-        taskCl->SetEventSelection(kTRUE); // saves some computing time, not all vertices are processed
+        taskCl = AddTaskJetCluster("AOD","",kHighPtFilterMask,iPhysicsSelectionFlag,"KT",0.4,0,1,kDeltaAODJetName.Data(),0.15,fTrackEtaWindow,fVertexWindow); 
         taskCl->SetBackgroundCalc(kTRUE);
-        taskCl->SetGhostEtamax(fTrackEtaWindow);
         if(iAODanalysis==2)taskCl->SetAODTrackInput(kTRUE);
         kJetListSpectrum.Add(new TObjString(taskCl->GetJetOutputBranch()));
        } 
 
-       taskCl = AddTaskJetCluster("AOD","",kHighPtFilterMask,iPhysicsSelectionFlag,"ANTIKT",0.4,2,1,kDeltaAODJetName.Data(),0.15);
-       taskCl->SetEventSelection(kTRUE); // saves some computing time, not all vertices are processed
+       taskCl = AddTaskJetCluster("AOD","",kHighPtFilterMask,iPhysicsSelectionFlag,"ANTIKT",0.4,0,1,kDeltaAODJetName.Data(),0.15,fTrackEtaWindow,fVertexWindow); // thid id sldo got the random cones but avoiding the two leading jets
        taskCl->SetCentralityCut(fCenLo,fCenUp);
        if(kIsPbPb)taskCl->SetBackgroundBranch(kDefaultJetBackgroundBranch.Data());
-       //       taskCl->SetDebugLevel(3);
        taskCl->SetNRandomCones(1);
+       if(iFilterAnalysis==2){
+        taskCl->SetJetTriggerPtCut(kJetTriggerPtCut);
+       }
        if(iAODanalysis==2)taskCl->SetAODTrackInput(kTRUE);
+
+       taskCl->SetJetTypes(1<<0|1<<2); // only store the RC on full event with 2 removed
        kDefaultJetBranch = taskCl->GetJetOutputBranch();
        kJetSubtractBranches += Form("%s ",taskCl->GetJetOutputBranch());
-       kJetSubtractBranches += Form("%s%s ",taskCl->GetJetOutputBranch(),"RandomConeSkip02");
-       kJetSubtractBranches += Form("%s%s ",taskCl->GetJetOutputBranch(),"RandomCone_random");
+       //       kJetSubtractBranches += Form("%s%s ",taskCl->GetJetOutputBranch(),"RandomConeSkip02");
+       //       kJetSubtractBranches += Form("%s%s ",taskCl->GetJetOutputBranch(),"RandomCone_random");
        kJetListSpectrum.Add(new TObjString(taskCl->GetJetOutputBranch()));
        kJetListSpectrum.Add(new TObjString(Form("%sRandomConeSkip%02d",taskCl->GetJetOutputBranch(),2)));
-       kJetListSpectrum.Add(new TObjString(Form("%sRandomCone_random",taskCl->GetJetOutputBranch())));
+       //       kJetListSpectrum.Add(new TObjString(Form("%sRandomCone_random",taskCl->GetJetOutputBranch())));
 
-       taskCl = AddTaskJetCluster("AOD","",kHighPtFilterMask,iPhysicsSelectionFlag,"ANTIKT",0.4,2,1,kDeltaAODJetName.Data(),2.0);
-       taskCl->SetEventSelection(kTRUE); // saves some computing time, not all vertices are processed
+       taskCl = AddTaskJetCluster("AOD","",kHighPtFilterMask,iPhysicsSelectionFlag,"ANTIKT",0.4,0,1,kDeltaAODJetName.Data(),1.0,fTrackEtaWindow,fVertexWindow);
+       taskCl->SetNRandomCones(1);
        taskCl->SetCentralityCut(fCenLo,fCenUp);
        if(iAODanalysis==2)taskCl->SetAODTrackInput(kTRUE);
        if(kIsPbPb)taskCl->SetBackgroundBranch(kDefaultJetBackgroundBranchCut1.Data());
+
+       taskCl->SetJetTypes(1<<0|1<<2); // only store the RC on full event with 2 removed
        kJetSubtractBranchesCut1 += Form("%s ",taskCl->GetJetOutputBranch());
        kJetListSpectrum.Add(new TObjString(taskCl->GetJetOutputBranch()));
+       kJetListSpectrum.Add(new TObjString(Form("%sRandomConeSkip%02d",taskCl->GetJetOutputBranch(),2)));
 
-       if(iFilterAnalysis==2){
-        if(kIsPbPb)taskCl->SetJetTriggerPtCut(50.);
-        else taskCl->SetJetTriggerPtCut(20.);
-       }
 
-       // tmp track qa...
-       taskCl = AddTaskJetCluster("AOD","",1<<4|1<<8,iPhysicsSelectionFlag,"ANTIKT",0.4,2,1,kDeltaAODJetName.Data(),2.0);
-       taskCl->SetEventSelection(kTRUE); // saves some computing time, not all vertices are processed
+       taskCl = AddTaskJetCluster("AOD","",kHighPtFilterMask,iPhysicsSelectionFlag,"ANTIKT",0.4,0,1,kDeltaAODJetName.Data(),2.0,fTrackEtaWindow,fVertexWindow);
        taskCl->SetCentralityCut(fCenLo,fCenUp);
-       taskCl->SetFilterMask(1<<4|1<<8,1);
-
+       taskCl->SetNRandomCones(1);
+       if(iAODanalysis==2)taskCl->SetAODTrackInput(kTRUE);
+       if(kIsPbPb)taskCl->SetBackgroundBranch(kDefaultJetBackgroundBranchCut2.Data());
+       taskCl->SetJetTypes(1<<0|1<<2); // only store the RC on full event with 2 removed
+       kJetSubtractBranchesCut2 += Form("%s ",taskCl->GetJetOutputBranch());
+       kJetListSpectrum.Add(new TObjString(taskCl->GetJetOutputBranch()));
+       kJetListSpectrum.Add(new TObjString(Form("%sRandomConeSkip%02d",taskCl->GetJetOutputBranch(),2)));
 
-       taskCl = AddTaskJetCluster("AOD","",1<<9|1<<8,iPhysicsSelectionFlag,"ANTIKT",0.4,2,1,kDeltaAODJetName.Data(),2.0);
-       taskCl->SetEventSelection(kTRUE); // saves some computing time, not all vertices are processed
+       // tmp track qa...
+       /*
+       taskCl = AddTaskJetCluster("AOD","",1<<8,iPhysicsSelectionFlag,"ANTIKT",0.4,2,1,kDeltaAODJetName.Data(),2.0);
        taskCl->SetCentralityCut(fCenLo,fCenUp);
-       taskCl->SetFilterMask(1<<9|1<<8,2);
-
-       
-
-       taskCl = AddTaskJetCluster("AOD","",kHighPtFilterMask,iPhysicsSelectionFlag,"ANTIKT",0.2,0,1,kDeltaAODJetName.Data(),0.15);
+       taskCl->SetFilterMask(1<<4|1<<8,1);
+       */
+       taskCl = AddTaskJetCluster("AOD","",kHighPtFilterMask,iPhysicsSelectionFlag,"ANTIKT",0.2,0,1,kDeltaAODJetName.Data(),0.15,fTrackEtaWindow,fVertexWindow,2);
        taskCl->SetCentralityCut(fCenLo,fCenUp);
-       taskCl->SetEventSelection(kTRUE); // saves some computing time, not all vertices are processed
+       taskCl->SetNRandomCones(1);
        if(iAODanalysis==2)taskCl->SetAODTrackInput(kTRUE);
        if(kIsPbPb)taskCl->SetBackgroundBranch(kDefaultJetBackgroundBranch.Data());
+
+       taskCl->SetJetTypes(1<<0|1<<2); 
        kJetSubtractBranches += Form("%s ",taskCl->GetJetOutputBranch());
+       //       kJetSubtractBranches += Form("%s%s ",taskCl->GetJetOutputBranch(),"RandomConeSkip00");
+       //       kJetSubtractBranches += Form("%s%s ",taskCl->GetJetOutputBranch(),"RandomCone_random");
        kJetListSpectrum.Add(new TObjString(taskCl->GetJetOutputBranch()));
+       kJetListSpectrum.Add(new TObjString(Form("%sRandomConeSkip%02d",taskCl->GetJetOutputBranch(),2)));
+
 
        if(kUseAODMC){
         if(kIsPbPb){
-          taskCl = AddTaskJetCluster("AODMC","",kHighPtFilterMask,iPhysicsSelectionFlag,"KT",0.4,0,1, kDeltaAODJetName.Data(),0.15,fTrackEtaWindow); // this one is for the background and random jets
-          taskCl->SetEventSelection(kTRUE); // saves some computing time, not all vertices are processed
+          taskCl = AddTaskJetCluster("AODMC","",kHighPtFilterMask,iPhysicsSelectionFlag,"KT",0.4,0,1, kDeltaAODJetName.Data(),0.15,fTrackEtaWindow,fVertexWindow); // this one is for the background and random jets
           taskCl->SetBackgroundCalc(kTRUE);
-          taskCl->SetGhostEtamax(0.9);
           kDefaultJetBackgroundBranchMC = Form("%s_%s",AliAODJetEventBackground::StdBranchName(),taskCl->GetJetOutputBranch());
           if(iAODanalysis==2)taskCl->SetAODTrackInput(kTRUE);     
         kJetListSpectrum.Add(new TObjString(taskCl->GetJetOutputBranch()));
 
-          taskCl = AddTaskJetCluster("AODMC2","",kHighPtFilterMask,iPhysicsSelectionFlag,"KT",0.4,0,1, kDeltaAODJetName.Data(),0.15); // this one is for the background and random jets
-        taskCl->SetEventSelection(kTRUE); // saves some computing time, not all vertices are processed
+        taskCl = AddTaskJetCluster("AODMC2","",kHighPtFilterMask,iPhysicsSelectionFlag,"KT",0.4,0,1, kDeltaAODJetName.Data(),0.15,fVertexWindow,fVertexWindow); // this one is for the background and random jets
           taskCl->SetBackgroundCalc(kTRUE);
-          taskCl->SetGhostEtamax(fTrackEtaWindow);
-          kDefaultJetBackgroundBranchMC2 = Form("%s_%s",AliAODJetEventBackground::StdBranchName(),taskCl->GetJetOutputBranch(),fTrackEtaWindow); 
+          kDefaultJetBackgroundBranchMC2 = Form("%s_%s",AliAODJetEventBackground::StdBranchName(),taskCl->GetJetOutputBranch()); 
           if(iAODanalysis==2)taskCl->SetAODTrackInput(kTRUE);
           kJetListSpectrum.Add(new TObjString(taskCl->GetJetOutputBranch()));
         }
         else{
-          taskCl = AddTaskJetCluster("AODMC","",kHighPtFilterMask,iPhysicsSelectionFlag,"KT",0.6,0,1, kDeltaAODJetName.Data(),0.15,fTrackEtaWindow); // this one is for the background and random jets
-          taskCl->SetEventSelection(kTRUE); // saves some computing time, not all vertices are processed
+          taskCl = AddTaskJetCluster("AODMC","",kHighPtFilterMask,iPhysicsSelectionFlag,"KT",0.6,0,1, kDeltaAODJetName.Data(),0.15,fTrackEtaWindow,fVertexWindow); // this one is for the background and random jets
           taskCl->SetBackgroundCalc(kTRUE);
-          taskCl->SetGhostEtamax(fTrackEtaWindow);
           kDefaultJetBackgroundBranchMC = Form("%s_%s",AliAODJetEventBackground::StdBranchName(),taskCl->GetJetOutputBranch());
         kJetListSpectrum.Add(new TObjString(taskCl->GetJetOutputBranch()));       
 
-          taskCl = AddTaskJetCluster("AODMC2","",kHighPtFilterMask,iPhysicsSelectionFlag,"KT",0.6,0,1, kDeltaAODJetName.Data(),0.15,fTrackEtaWindow); // this one is for the background and random jets
-          taskCl->SetEventSelection(kTRUE); // saves some computing time, not all vertices are processed
+        taskCl = AddTaskJetCluster("AODMC2","",kHighPtFilterMask,iPhysicsSelectionFlag,"KT",0.6,0,1, kDeltaAODJetName.Data(),0.15,fTrackEtaWindow,fVertexWindow); // this one is for the background and random jets
           taskCl->SetBackgroundCalc(kTRUE);
-          taskCl->SetGhostEtamax(fTrackEtaWindow);
           kDefaultJetBackgroundBranchMC2 = Form("%s_%s",AliAODJetEventBackground::StdBranchName(),taskCl->GetJetOutputBranch()); 
           if(iAODanalysis==2)taskCl->SetAODTrackInput(kTRUE);
           kJetListSpectrum.Add(new TObjString(taskCl->GetJetOutputBranch()));
           // pp background calcs...
         }
         
-        taskCl = AddTaskJetCluster("AODMC","",kHighPtFilterMask,iPhysicsSelectionFlag,"ANTIKT",0.4,0,1, kDeltaAODJetName.Data(),0.15,fTrackEtaWindow); 
-        taskCl->SetGhostEtamax(fTrackEtaWindow);
-        taskCl->SetEventSelection(kTRUE); // saves some computing time, not all vertices are processed
+        taskCl = AddTaskJetCluster("AODMC","",kHighPtFilterMask,iPhysicsSelectionFlag,"ANTIKT",0.4,0,1, kDeltaAODJetName.Data(),0.15,fTrackEtaWindow,fVertexWindow); 
         if(kIsPbPb)taskCl->SetBackgroundBranch(kDefaultJetBackgroundBranchMC.Data());   
         kDefaultJetBranchMC = taskCl->GetJetOutputBranch();
         if(iAODanalysis==2)taskCl->SetAODTrackInput(kTRUE);
         kJetListSpectrum.Add(new TObjString(taskCl->GetJetOutputBranch()));
 
-        taskCl = AddTaskJetCluster("AODMC2","",kHighPtFilterMask,iPhysicsSelectionFlag,"ANTIKT",0.4,0,1, kDeltaAODJetName.Data(),0.15,fTrackEtaWindow);
-        taskCl->SetEventSelection(kTRUE); // saves some computing time, not all vertices are processed
+        taskCl = AddTaskJetCluster("AODMC2","",kHighPtFilterMask,iPhysicsSelectionFlag,"ANTIKT",0.4,0,1, kDeltaAODJetName.Data(),0.15,fTrackEtaWindow,fVertexWindow);
         if(kIsPbPb)taskCl->SetBackgroundBranch(kDefaultJetBackgroundBranchMC2.Data());  
         kDefaultJetBranchMC2 = taskCl->GetJetOutputBranch();
         if(iAODanalysis==2)taskCl->SetAODTrackInput(kTRUE);
@@ -790,7 +807,7 @@ void AnalysisTrainPWG4Jets(const char *analysis_mode="local",
         taskSubtract = AddTaskJetBackgroundSubtract(kJetSubtractBranches,iB,kJetSubtractMask1.Data(),kJetSubtractMask2.Data());
         taskSubtract->SetBackgroundBranch(kDefaultJetBackgroundBranch.Data());         taskSubtract->SelectCollisionCandidates(iPhysicsSelectionFlag);
         if(kDeltaAODJetName.Length()>0)taskSubtract->SetNonStdOutputFile(kDeltaAODJetName.Data());
-        //      taskSubtract->SetDebugLevel(10);
+        taskSubtract->SetKeepJets(kTRUE);
         TString cTmp;       
         TObjArray *objArr = kJetSubtractBranches.Tokenize(" ");
         for(int iJB = 0;iJB<objArr->GetEntries();iJB++){
@@ -812,7 +829,7 @@ void AnalysisTrainPWG4Jets(const char *analysis_mode="local",
        //
        // cut1
        Int_t iB = 2;
-       taskSubtract = AddTaskJetBackgroundSubtract(kJetSubtractBranchesCut1,iB,kJetSubtractMask1.Data(),kJetSubtractMask2.Data(),"Cut2000");
+       taskSubtract = AddTaskJetBackgroundSubtract(kJetSubtractBranchesCut1,iB,kJetSubtractMask1.Data(),kJetSubtractMask2.Data(),"Cut1000");
        taskSubtract->SetBackgroundBranch(kDefaultJetBackgroundBranchCut1.Data());              
        taskSubtract->SelectCollisionCandidates(iPhysicsSelectionFlag);
        if(kDeltaAODJetName.Length()>0)taskSubtract->SetNonStdOutputFile(kDeltaAODJetName.Data());
@@ -825,6 +842,18 @@ void AnalysisTrainPWG4Jets(const char *analysis_mode="local",
         kJetListSpectrum.Add(new TObjString(cTmp.Data()));
        }
 
+       taskSubtract = AddTaskJetBackgroundSubtract(kJetSubtractBranchesCut2,iB,kJetSubtractMask1.Data(),kJetSubtractMask2.Data(),"Cut2000");
+       taskSubtract->SetBackgroundBranch(kDefaultJetBackgroundBranchCut2.Data());              
+       taskSubtract->SelectCollisionCandidates(iPhysicsSelectionFlag);
+       if(kDeltaAODJetName.Length()>0)taskSubtract->SetNonStdOutputFile(kDeltaAODJetName.Data());
+
+       objArr = kJetSubtractBranchesCut2.Tokenize(" ");
+       for(int iJB = 0;iJB<objArr->GetEntries();iJB++){
+        TObjString *ostr = (TObjString*)objArr->At(iJB);
+        cTmp = ostr->GetString().Data();
+        cTmp.ReplaceAll(kJetSubtractMask1.Data(),Form(kJetSubtractMask2.Data(),iB));
+        kJetListSpectrum.Add(new TObjString(cTmp.Data()));
+       }
 
      }
      if(kJetSubtractBranches_extra.Length()){
@@ -873,7 +902,7 @@ void AnalysisTrainPWG4Jets(const char *analysis_mode="local",
    if(iPWG4JetServices){
      gROOT->LoadMacro("$ALICE_ROOT/PWG4/macros/AddTaskJetServices.C");
      AliAnalysisTaskJetServices *taskjetServ = 0;
-     taskjetServ = AddTaskJetServices();
+     taskjetServ = AddTaskJetServices("/Users/kleinb/Dropbox/SharedJets/Christian/Files/PWG4_JetTasksOutput_110818a.root");
      if (!taskjetServ) ::Warning("AnalysisTrainPWG4Jets", "AliAnalysisTaskJetServices cannot run for this train conditions - EXCLUDED");
      if(kGridRunRange[0]>0)taskjetServ->SetRunRange(kGridRunRange[0],kGridRunRange[1]);
      else taskjetServ->SetRunRange(110000,160000);
@@ -882,12 +911,15 @@ void AnalysisTrainPWG4Jets(const char *analysis_mode="local",
      taskjetServ->SetPhysicsSelectionFlag(iPhysicsSelectionFlag); // 
      taskjetServ->SetNonStdFile(kDeltaAODJetName.Data());
      taskjetServ->SetTrackEtaWindow(fTrackEtaWindow);
+     taskjetServ->SetZVertexCut(fVertexWindow);
      taskjetServ->SetFilterMask(kHighPtFilterMask);
+
+     if(kIsPbPb)taskjetServ->SetCollisionType(AliAnalysisTaskJetServices::kPbPb);
+     else taskjetServ->SetCollisionType(AliAnalysisTaskJetServices::kPP);
      if(kIsPbPb){
        if(kDeltaAODJetName.Length()>0&&kFilterAOD)taskjetServ->SetFilterAODCollisions(kTRUE);
        //       else if(iAODanalysis)taskjetServ->SetFilterAODCollisions(kTRUE);
        //       taskjetServ->SetDebugLevel(3);
-       taskjetServ->SetZVertexCut(8.);
      }
      if(iAODanalysis){
        //  
@@ -906,6 +938,7 @@ void AnalysisTrainPWG4Jets(const char *analysis_mode="local",
        Printf("%3d: %s",iJF+1,objStr->GetString().Data());
      }
 
+     //     Printf("Type q to exit");if(getchar()=='q')return;
      if(iPWG4JetSpectrum&1){
        if(kIsPbPb){
         for(int iJF = 0;iJF < kJetListSpectrum.GetSize();iJF++){
@@ -1197,10 +1230,7 @@ void AnalysisTrainPWG4Jets(const char *analysis_mode="local",
      AliPWG4HighPtQAMC *taskQAMC = 0;
      if(kUseMC){
        if(iPWG4PtQAMC&1){
-        taskQAMC = AddTaskPWG4HighPtQAMC(kGridDataSet.Data(),0);
-        taskQAMC = AddTaskPWG4HighPtQAMC(kGridDataSet.Data(),1);
-        taskQAMC = AddTaskPWG4HighPtQAMC(kGridDataSet.Data(),2);
-        taskQAMC = AddTaskPWG4HighPtQAMC(kGridDataSet.Data(),3);
+        taskQAMC = AddTaskPWG4HighPtQAMCAll(kGridDataSet.Data());
        }
      }
      if (!taskQAMC) ::Warning("AnalysisTrainPWG4Jets", "AliAnalysisTaskQAMC cannot run for this train conditions - EXCLUDED");
@@ -1208,9 +1238,8 @@ void AnalysisTrainPWG4Jets(const char *analysis_mode="local",
 
    if(iPWG4PtTrackQA){
      gROOT->LoadMacro("$ALICE_ROOT/PWG4/macros/AddTaskPWG4HighPtTrackQA.C");
-
-     AddTaskPWG4HighPtTrackQAAll(kGridDataSet.Data(),kIsPbPb,iAODanalysis);
-
+     if(iPWG4PtTrackQA&2)AddTaskPWG4HighPtTrackQAAll(kGridDataSet.Data(),kIsPbPb,iAODanalysis);
+     else AddTaskPWG4HighPtTrackQAAllReduced(kGridDataSet.Data(),kIsPbPb,iAODanalysis);
    }
 
    if(iPWG4PtQATPC){
@@ -1234,9 +1263,9 @@ void AnalysisTrainPWG4Jets(const char *analysis_mode="local",
 
    if(iPWG4PtSpectra){
      gROOT->LoadMacro("$ALICE_ROOT/PWG4/macros/AddTaskPWG4HighPtSpectra.C");
-     AddTaskPWG4HighPtSpectraAll(kGridDataSet.Data(),kIsPbPb);
+     AddTaskPWG4HighPtSpectraAll(kGridDataSet.Data(),kIsPbPb,iAODanalysis);
    }
-
+   
    if(iPWG4KMeans){
      gROOT->LoadMacro("$ALICE_ROOT/PWG4/macros/AddTaskKMeans.C");
      AliAnalysisTaskKMeans *taskKMeans = AddTaskKMeans();
@@ -1509,8 +1538,6 @@ void CheckModuleFlags(const char *mode) {
       if( iPWG4Cosmics)::Info("AnalysisTrainPWG4Jets.C::CheckModuleFlags", "PWG4 Comics disabled in analysis on AOD's");
       iPWG4Cosmics        = 0;
 
-      if( iPWG4PtSpectra)::Info("AnalysisTrainPWG4Jets.C::CheckModuleFlags", "PWG4 PtQAMC disabled in analysis on AOD's");
-      iPWG4PtSpectra     = 0;
       if(iPWG4KMeans)::Info("AnalysisTrainPWG4Jets.C::CheckModuleFlags", "PWG4KMeans disabled on AOD's");
       iPWG4KMeans       = 0;
       if (iPWG4JetCorr)::Info("AnalysisTrainPWG4Jets.C::CheckModuleFlags", "PWG4Jetcorr disabled on AOD's");
@@ -1666,6 +1693,7 @@ Bool_t LoadCommonLibraries(const char *mode)
    gSystem->Load("libGeom.so");
    gSystem->Load("libVMC.so");
    gSystem->Load("libPhysics.so");
+   gSystem->Load("libMinuit.so");
    
    // Load framework classes. Par option ignored here.
    switch (imode) {
@@ -2075,6 +2103,7 @@ AliAnalysisAlien* CreateAlienHandler(const char *plugin_mode)
    AliAnalysisAlien *plugin = new AliAnalysisAlien();
 // Set the run mode (can be "full", "test", "offline", "submit" or "terminate")
    plugin->SetRunMode(plugin_mode);
+   plugin->SetCheckCopy(kFALSE); 
    if (kPluginUseProductionMode) plugin->SetProductionMode();
    plugin->SetJobTag(kJobTag);
    plugin->SetNtestFiles(1);
@@ -2102,7 +2131,7 @@ AliAnalysisAlien* CreateAlienHandler(const char *plugin_mode)
    if(kGridLocalRunList.Length()>0){
      ifstream in1;
      in1.open(kGridLocalRunList.Data());
-     int iRun;
+     int iRun = 0;
      int icount = 0;
      Int_t nRun = 0;
      // just use run numbers, negatives will be excluded