]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ANALYSIS/macros/AnalysisTrainNew.C
TENDER becomes Tender, removing .so
[u/mrichter/AliRoot.git] / ANALYSIS / macros / AnalysisTrainNew.C
index 01dc35db8fc39c3e95e4a5505a78864065931d27..ef6333e99f2f9c2ec5e47f6cf40e9582c1fbee08 100644 (file)
@@ -16,8 +16,8 @@
 //    root[1] AnalysisTrainNew(ana_mode, plugin_mode, "train_default_<date>/ConfigTrain.C")
 
 //==================   TRAIN NAME   ============================================
-TString     train_name         = "testTR018_LHC10a6ESD"; // *CHANGE ME* (no blancs or special characters)
-TString     job_tag            = "testTR018: ESD -> histograms"; // *CHANGE ME*
+TString     train_name         = "FILTER_DATA"; // *CHANGE ME* (no blancs or special characters)
+TString     job_tag            = "FILTER_DATA: data ESD + PhysSel + Tender -> AOD + Muons + Vertices"; // *CHANGE ME*
 //==============================================================================
 
 // ### Settings that make sense in PROOF only
@@ -31,39 +31,40 @@ TString     proof_outdir       = "";
 
 // ### Settings that make sense when using the Alien plugin
 //==============================================================================
-Int_t       runOnData          = 0;       // Set to 1 if processing real data
+Int_t       runOnData          = 1;       // Set to 1 if processing real data
 Int_t       iCollision         = 0;       // 0=pp, 1=Pb-Pb
 Bool_t      usePLUGIN          = kTRUE;   // do not change
-Bool_t      useProductionMode  = kFALSE;   // use the plugin in production mode
+Bool_t      useProductionMode  = kTRUE;   // use the plugin in production mode
 // Usage of par files ONLY in grid mode and ONLY if the code is not available
 // in the deployed AliRoot versions. Par file search path: local dir, if not there $ALICE_ROOT.
 // To refresh par files, remove the ones in the workdir, then do "make <target.par>" in 
 // AliRoot.
 Bool_t      usePAR             = kFALSE;  // use par files for extra libs
 Bool_t      useCPAR            = kFALSE;  // use par files for common libs
-TString     root_version       = "v5-26-00b";  // *CHANGE ME IF MORE RECENT IN GRID*
-TString     aliroot_version    = "v4-19-06-AN";  // *CHANGE ME IF MORE RECENT IN GRID*                                          
+TString     root_version       = "v5-27-05";  // *CHANGE ME IF MORE RECENT IN GRID*
+TString     aliroot_version    = "v4-20-06-AN-1";  // *CHANGE ME IF MORE RECENT IN GRID*                                          
 // Change production base directory here
-TString     alien_datadir      = "/alice/sim/LHC10a13";
+TString     alien_datadir      = "/alice/data/2010/LHC10d";
 // AliEn output directory. If blank will become output_<train_name>
-//TString     alien_outdir       = "/alice/sim/LHC10a6/analysis/ESD/TR016";
- TString     alien_outdir       = "";
+//TString     alien_outdir       = "/alice/data/2010/LHC10b/AOD1";
+TString     alien_outdir       = "";
 // Output folder to write delta AOD's. Considered if not null.
 TString     outputSingleFolder = "";
 //TString     outputSingleFolder = "deltas";
 // Number of files merged in a chunk
 Int_t       maxMergeFiles      = 20;
 // Files that should not be merged
-TString     mergeExclude       = "AliAOD.root AliAOD.VertexingHF.root AliAOD.Jets.root deltaAODPartCorr.root AliAOD.Muons.root resonances.root forward.root";
+TString     mergeExclude       = "AliAOD.root AliAOD.VertexingHF.root AliAOD.Jets.root deltaAODPartCorr.root AliAOD.Muons.root AliAOD.Dimuons.root";
 // Make replicas on the storages below
 TString     outputStorages      = "disk=4";
 // Number of runs per master job
 Int_t       nRunsPerMaster     = 10;
 // Maximum number of files per job (gives size of AOD)
-Int_t       nFilesPerJob       = 10;
+Int_t       nFilesPerJob       = 50;
 // Int_t       nFilesPerJob       = 1; (AOD->delta AOD production case)
 // Set the run range
-Int_t       run_range[2]       =  {104824, 104825};  //  *CHANGE ME*
+Int_t run_numbers[10] = {126432}; // **********************!!!!!!!
+//Int_t       run_range[2]       =  {114786, 114949};  // LHC09a7   *CHANGE ME*
 // ### Settings that make sense only for local analysis
 //==============================================================================
 // Change local xml dataset for local interactive analysis
@@ -71,18 +72,23 @@ TString     local_xmldataset   = "";
 
 // ### Other flags to steer the analysis
 //==============================================================================
-Bool_t      useDATE            = kFALSE; // use date in train name
-Bool_t      useDBG             = kTRUE; // activate debugging
-Bool_t      useMC              = kTRUE;  // use MC info
-Bool_t      useTAGS            = kTRUE; // use ESD tags for selection
-Bool_t      useKFILTER         = kTRUE; // use Kinematics filter
-Bool_t      useTR              = kTRUE;  // use track references
-Bool_t      useCORRFW          = kFALSE; // do not change
-Bool_t      useAODTAGS         = kFALSE;  // use AOD tags
-Bool_t      saveTrain          = kTRUE;  // save train configuration as: 
-Bool_t      saveCanvases       = kTRUE; // save canvases created in Terminate
-Bool_t      saveProofToAlien   = kFALSE; // save proof outputs in AliEn
-                                         // train_[trainName]_ddMonthyyyy_time.C
+Bool_t      usePhysicsSelection = kTRUE; // use physics selection
+Bool_t      useTender           = kTRUE; // use tender wagon
+Bool_t      useMergeViaJDL      = kTRUE;  // merge via JDL
+Bool_t      useFastReadOption   = kTRUE;  // use xrootd tweaks
+Bool_t      useOverwriteMode    = kTRUE;  // overwrite existing collections
+Bool_t      useDATE             = kFALSE; // use date in train name
+Bool_t      useDBG              = kTRUE;  // activate debugging
+Bool_t      useMC               = kFALSE;  // use MC info
+Bool_t      useTAGS             = kFALSE;  // use ESD tags for selection
+Bool_t      useKFILTER          = kFALSE;  // use Kinematics filter
+Bool_t      useTR               = kFALSE;  // use track references
+Bool_t      useCORRFW           = kFALSE; // do not change
+Bool_t      useAODTAGS          = kFALSE; // use AOD tags
+Bool_t      saveTrain           = kTRUE;  // save train configuration as: 
+Bool_t      saveCanvases        = kFALSE;  // save canvases created in Terminate
+Bool_t      saveProofToAlien    = kFALSE; // save proof outputs in AliEn
+
 // ### Analysis modules to be included. Some may not be yet fully implemented.
 //==============================================================================
 Int_t       iAODanalysis       = 0;      // Analysis on input AOD's
@@ -90,13 +96,13 @@ Int_t       iAODhandler        = 1;      // Analysis produces an AOD or dAOD's
 Int_t       iESDfilter         = 1;      // ESD to AOD filter (barrel + muon tracks)
 Int_t       iMUONcopyAOD       = 1;      // Task that copies only muon events in a separate AOD (PWG3)
 Int_t       iJETAN             = 1;      // Jet analysis (PWG4)
-Int_t       iJETANdelta        = 1;      // Jet delta AODs
-Int_t       iPWG4partcorr      = 1;      // Gamma-hadron correlations task (PWG4)
-Int_t       iPWG4gammaconv     = 1;      // Gamma conversion analysis (PWG4)
-Int_t       iPWG4omega3pi      = 1;      // Omega to 3 pi analysis (PWG4)
+Int_t       iJETANdelta        = 0;      // Jet delta AODs
+Int_t       iPWG4partcorr      = 0;      // Gamma-hadron correlations task (PWG4)
+Int_t       iPWG4gammaconv     = 0;      // Gamma conversion analysis (PWG4)
+Int_t       iPWG4omega3pi      = 0;      // Omega to 3 pi analysis (PWG4)
 Int_t       iPWG3vertexing     = 1;      // Vertexing HF task (PWG3)
-Int_t       iPWG3hfe           = 1;      // Electrons analysis (PWG3)
-Int_t       iPWG3d2h           = 1;      // D0->2 hadrons (PWG3)
+Int_t       iPWG3hfe           = 0;      // Electrons analysis (PWG3)
+Int_t       iPWG3d2h           = 0;      // D0->2 hadrons (PWG3)
 Int_t        iPWG3d0mass       = 1;      // D0 mass (PWG3D2H)                                                                              
 Int_t        iPWG3d0massLS     = 1;      // D0 mass LS (PWG3D2H)                                                                           
 Int_t        iPWG3dplus        = 1;      // D+ analysis (PWG3D2H)                                                                          
@@ -104,19 +110,19 @@ Int_t        iPWG3LSd0         = 1;      // LS D0 analysis (PWG3D2H)
 Int_t        iPWG3LSjpsi       = 1;      // LS J/Psi analysis (PWG3D2H)                                                                    
 Int_t        iPWG3CFd0         = 1;      // CF D0 analysis (PWG3D2H)                                                                       
 Int_t        iPWG3promptd0     = 1;      // prompt D0 analysis (PWG3D2H)                                                                   
-Int_t       iPWG3MuonTrain     = 1;      // Muon analysis train
-Int_t       iPWG2femto         = 1;      // Femtoscopy task (PWG2)
-Int_t       iPWG2spectra       = 1;      // Spectra tasks (PWG2
+Int_t       iPWG3MuonTrain     = 0;      // Muon analysis train
+Int_t       iPWG2femto         = 0;      // Femtoscopy task (PWG2)
+Int_t       iPWG2spectra       = 0;      // Spectra tasks (PWG2
 Int_t        iPWG2protons      = 1;         // Proton-antiproton analysis
 Int_t        iPWG2checkcascade = 1;         // Check cascades task
 Int_t        iPWG2perfcascade  = 1;         // Check performance cascade
 Int_t        iPWG2checkv0      = 1;         // Check V0 task
 Int_t        iPWG2strange      = 1;         // Strangeness task
 Int_t        iPWG2central      = 1;         // Anisothropy in central collisions
-Int_t       iPWG2flow          = 1;      // Flow analysis tasks (PWG2)
-Int_t       iPWG2res           = 1;      // Resonances task (PWG2)
-Int_t        iPWG2rsneff       = 1;      // Resonances efficiency
-Int_t       iPWG2kink          = 1;      // Kink analysis tasks (PWG2)
+Int_t       iPWG2flow          = 0;      // Flow analysis tasks (PWG2)
+Int_t       iPWG2res           = 0;      // Resonances task (PWG2)
+Int_t        iPWG2rsneff       = 0;      // Resonances efficiency
+Int_t       iPWG2kink          = 0;      // Kink analysis tasks (PWG2)
 Int_t        iPWG2kinkESDMC    = 1;         // Kink ESD-MC comparison (PWG2)
 Int_t        iPWG2kinkLSKstar  = 1;      // Kink like-sign K* (PWG2)
 Int_t        iPWG2kinkLSL1520  = 1;      // Kink like-sign L1520 (PWG2)
@@ -127,14 +133,13 @@ Int_t        iPWG2kinkL1520ESD = 1;      // Kink L1520 ESD (PWG2)
 Int_t        iPWG2kinkL1520MC  = 1;      // Kink L1520 MC (PWG2)
 Int_t        iPWG2kinkPhiESD   = 1;      // Kink resonances Phi ESD (PWG2)
 Int_t        iPWG2kinkPhiMC    = 1;      // Kink resonances Phi MC (PWG2)
-Int_t       iPWG2evchar        = 1;      // Event characteristics (PWG2)
-Int_t       iPWG2unicor        = 1;      // Unicor analysis (PWG2)
-Int_t       iPWG2forward       = 1;      // FMD analysis (PWG2)
+Int_t       iPWG2evchar        = 0;      // Event characteristics (PWG2)
+Int_t       iPWG2unicor        = 0;      // Unicor analysis (PWG2)
+Int_t       iPWG2forward       = 0;      // FMD analysis (PWG2)
 
 // ### Configuration macros used for each module
 //==============================================================================
-//TString     configPWG2femto    = "$ALICE_ROOT/PWG2/FEMTOSCOPY/macros/Train/Train3/ConfigFemtoAnalysis.C";
-TString     configPWG2femto    = "$ALICE_ROOT/PWG2/FEMTOSCOPY/macros/Train/PWG2TrainLHC10a6/ConfigFemtoAnalysis.C";
+TString     configPWG2femto    = "$ALICE_ROOT/PWG2/FEMTOSCOPY/macros/Train/Train3/ConfigFemtoAnalysis.C";
 //TString     configPWG3d2h      = "$ALICE_ROOT/PWG3/vertexingHF/ConfigVertexingHF_highmult.C";
 TString     configPWG3d2h      = "$ALICE_ROOT/PWG3/vertexingHF/ConfigVertexingHF.C";
 // Temporaries.
@@ -163,6 +168,8 @@ void AnalysisTrainNew(const char *analysis_mode="grid",
    printf("=  Configuring analysis train for:                               =\n");
    if (iAODanalysis) printf("=  AOD analysis                                                  =\n");
    else              printf("=  ESD analysis                                                  =\n");
+   if (usePhysicsSelection)   printf("=  Physics selection                                                =\n");
+   if (useTender)    printf("=  TENDER                                                        =\n");
    if (iESDfilter)   printf("=  ESD filter                                                    =\n");
    if (iMUONcopyAOD) printf("=  MUON copy AOD                                                 =\n");
    if (iJETAN)       printf("=  Jet analysis                                                  =\n");
@@ -217,14 +224,18 @@ void AnalysisTrainNew(const char *analysis_mode="grid",
    if (iPWG4gammaconv) printf("=  PWG4 gamma conversion                                         =\n");
    if (iPWG4omega3pi)  printf("=  PWG4 omega to 3 pions                                         =\n");
    printf("==================================================================\n");
-   printf(":: use MC truth      %d\n", (UInt_t)useMC);
-   printf(":: use KINE filter   %d\n", (UInt_t)useKFILTER);
-   printf(":: use track refs    %d\n", (UInt_t)useTR);
-   printf(":: use tags          %d\n", (UInt_t)useTAGS);
-   printf(":: use AOD tags      %d\n", (UInt_t)useAODTAGS);
-   printf(":: use debugging     %d\n", (UInt_t)useDBG);
-   printf(":: use PAR files     %d\n", (UInt_t)usePAR);
-   printf(":: use AliEn plugin  %d\n", (UInt_t)usePLUGIN);
+   printf(":: use physics selection: %d\n", (UInt_t)usePhysicsSelection);
+   printf(":: use xrootd tweaks:     %d\n", (UInt_t)useFastReadOption);
+   printf(":: use overwrite xml    : %d\n", (UInt_t)useOverwriteMode);
+   printf(":: use merge via JDL:     %d\n", (UInt_t)useMergeViaJDL);
+   printf(":: use MC truth:          %d\n", (UInt_t)useMC);
+   printf(":: use KINE filter:       %d\n", (UInt_t)useKFILTER);
+   printf(":: use track references:  %d\n", (UInt_t)useTR);
+   printf(":: use tags:              %d\n", (UInt_t)useTAGS);
+   printf(":: use AOD tags:          %d\n", (UInt_t)useAODTAGS);
+   printf(":: use debugging:         %d\n", (UInt_t)useDBG);
+   printf(":: use PAR files:         %d\n", (UInt_t)usePAR);
+   printf(":: use AliEn plugin:      %d\n", (UInt_t)usePLUGIN);
 
    //==========================================================================
    // Connect to back-end system
@@ -276,13 +287,12 @@ void AnalysisTrainNew(const char *analysis_mode="grid",
       if (iAODanalysis) {
          aodHandler->SetFillAOD(kFALSE);
          aodHandler->SetCreateNonStandardAOD();
-         aodHandler->SetOutputFileName("");
          if (iJETAN)         aodHandler->SetOutputFileName("AliAOD.Jets.root");
 //         if (iPWG3vertexing) aodHandler->SetOutputFileName("AliAOD.VertexingHF.root");
       } 
    }
    // Debugging if needed
-   if (useDBG) mgr->SetDebugLevel(2);
+   if (useDBG) mgr->SetDebugLevel(3);
    if (saveCanvases) mgr->SetSaveCanvases(kTRUE);
 
    //==========================================================================
@@ -315,8 +325,7 @@ void AnalysisTrainNew(const char *analysis_mode="grid",
       if (saveTrain && smode=="GRID") {                                                                                                    
          AliAnalysisAlien *gridhandler = (AliAnalysisAlien*)mgr->GetGridHandler();                                                         
          TString alien_workdir = gGrid->GetHomeDirectory();                                                                                
-         if (iAODanalysis) alien_workdir += "analysisAOD";                                                                                 
-         else              alien_workdir += "analysisESD";                                                                                 
+         alien_workdir += train_name;
          alien_outdir = gridhandler->GetGridOutputDir();                                                                                   
          printf("=== Registering ConfigTrain.C in the work directory <%s> ===\n",                                                          
                 alien_workdir.Data());                                                                                                     
@@ -334,15 +343,32 @@ void AddAnalysisTasks()
 // Add all analysis task wagons to the train                                                                                               
    AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();                                                                     
 
+  //
+  // Tender and supplies
+  //
+   if (useTender) {
+      gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/TenderSupplies/AddTaskTender.C");
+      AliAnalysisTaskSE *tender = AddTaskTender(kTRUE);
+//      tender->SelectCollisionCandidates();
+      tender->SetDebugLevel(2);
+   }
+   if (usePhysicsSelection) {
+   // Physics selection task
+      gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
+      mgr->RegisterExtraFile("event_stat.root");
+      AliPhysicsSelectionTask *physSel = AddTaskPhysicsSelection(useMC);
+   }
+
    if (iESDfilter && !iAODanalysis) {
       //  ESD filter task configuration.
       gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskESDFilter.C");
       if (iMUONcopyAOD) {
          printf("Registering delta AOD file\n");
          mgr->RegisterExtraFile("AliAOD.Muons.root");
-         AliAnalysisTaskESDfilter *taskesdfilter = AddTaskESDFilter(useKFILTER, kTRUE);
+         mgr->RegisterExtraFile("AliAOD.Dimuons.root");
+         AliAnalysisTaskESDfilter *taskesdfilter = AddTaskESDFilter(useKFILTER, kTRUE, kTRUE, usePhysicsSelection);
       } else {
-         AliAnalysisTaskESDfilter *taskesdfilter = AddTaskESDFilter(useKFILTER, kFALSE);      
+         AliAnalysisTaskESDfilter *taskesdfilter = AddTaskESDFilter(useKFILTER, kFALSE, kFALSE, usePhysicsSelection);
       }   
    }   
 
@@ -370,7 +396,7 @@ void AddAnalysisTasks()
       // cascades
       if (iPWG2checkcascade) {
         gROOT->LoadMacro("$ALICE_ROOT/PWG2/SPECTRA/macros/AddTaskCheckCascade.C");
-        AliAnalysisTaskCheckCascade *taskcheckcascade = AddTaskCheckCascade(iCollision);
+        AliAnalysisTaskCheckCascade *taskcheckcascade = AddTaskCheckCascade(iCollision,runOnData);
         if (!taskcheckcascade) ::Warning("AnalysisTrainNew", "AliAnalysisTaskCheckCascade cannot run for this train conditions - EXCLUDED");
       }  
       // v0's
@@ -475,12 +501,22 @@ void AddAnalysisTasks()
       if (!taskunicor) ::Warning("AnalysisTrainNew", "AliAnalysisTaskUnicor cannot run for this train conditions - EXCLUDED");
    }   
 
-   // FMD
+   // Forward Multiplicity
    AliAnalysisManager::SetCommonFileName("forward.root");
    if (iPWG2forward) {
-      gROOT->LoadMacro("$ALICE_ROOT/PWG2/FORWARD/analysis/AddTaskFMD.C");
-      AliFMDAnalysisTaskSE *taskfmd = AddTaskFMD();
-      if (!taskfmd) ::Warning("AnalysisTrainNew", "AliFMDAnalysisTaskSE cannot run for this train conditions - EXCLUDED");
+      gROOT->LoadMacro("$ALICE_ROOT/PWG2/FORWARD/analysis2/AddTaskForwardMult.C");
+      gROOT->LoadMacro("$ALICE_ROOT/PWG2/FORWARD/analysis2/AddTaskCentralMult.C");
+      Bool_t   mc  = false;
+      UShort_t sys = 0; // 0: get from data, 1: pp, 2: AA 
+      UShort_t sNN = 0; // 0: get from data, otherwise center of mass
+                       // energy (per nucleon pair)
+      Short_t  fld = 0; // 0: get from data, otherwise L3 field in kG
+      AliAnalysisTask *taskForward = AddTaskForwardMult(mc, sys, sNN, fld);
+      if (!taskForward) 
+       ::Warning("AnalysisTrainNew", "AliForwardMultiplicityTask cannot run for this train conditions - EXCLUDED");
+      AliAnalysisTask *taskCentral = AddTaskCentralMult(mc, sys, sNN, fld);
+      if (!taskCentral) 
+       ::Warning("AnalysisTrainNew", "AliCentralMultiplicityTask cannot run for this train conditions - EXCLUDED");
    }   
    AliAnalysisManager::SetCommonFileName("PWG2histograms.root");
 
@@ -518,8 +554,8 @@ void AddAnalysisTasks()
       TString path = gROOT->GetMacroPath();
       path += ":$ALICE_ROOT/PWG2/RESONANCES/macros/train";
       gROOT->SetMacroPath(path);
-      AddAnalysisTaskRsnNew();
-      if (iPWG2rsneff) AddAnalysisTaskRsnEffNew();
+      AddAnalysisTaskRsn(kTRUE);
+      if (iPWG2rsneff) AddAnalysisTaskRsnEff();
    }   
    AliAnalysisManager::SetCommonFileName("PWG2histograms.root");
 
@@ -528,7 +564,7 @@ void AddAnalysisTasks()
            
    // PWG3 vertexing
    if (iPWG3vertexing) {
-      gROOT->LoadMacro("$ALICE_ROOT/PWG3/vertexingHF/AddTaskVertexingHF.C");
+      gROOT->LoadMacro("$ALICE_ROOT/PWG3/vertexingHF/macros/AddTaskVertexingHF.C");
       if (!iPWG3d2h) TFile::Cp(gSystem->ExpandPathName(configPWG3d2h.Data()), Form("%s/ConfigVertexingHF.C", train_name.Data()));
       AliAnalysisTaskSEVertexingHF *taskvertexingHF = AddTaskVertexingHF();
       if (!taskvertexingHF) ::Warning("AnalysisTrainNew", "AliAnalysisTaskSEVertexingHF cannot run for this train conditions - EXCLUDED");
@@ -546,7 +582,7 @@ void AddAnalysisTasks()
    if (iPWG3d2h) {
       gROOT->LoadMacro("$ALICE_ROOT/PWG3/vertexingHF/AddD2HTrain.C");
       TFile::Cp(gSystem->ExpandPathName(configPWG3d2h.Data()), Form("%s/ConfigVertexingHF.C", train_name.Data()));
-      AddD2HTrain(kTRUE, iPWG3d0mass,iPWG3d0massLS,iPWG3dplus, iPWG3LSd0, iPWG3LSjpsi, iPWG3CFd0, iPWG3promptd0);                                 
+      AddD2HTrain(iPWG3d0mass,iPWG3d0massLS,iPWG3dplus, iPWG3LSd0, iPWG3LSjpsi, iPWG3CFd0, iPWG3promptd0);                                 
    }   
 
    // PWG3 muon
@@ -559,8 +595,7 @@ void AddAnalysisTasks()
       Int_t addMuonDistributions = 1;
       Int_t addSingleMuonAnalysis = 1;
       Int_t addMuonHFAnalysis = 1;
-      Int_t addDimuonCFContainer = 1;   // Dimuons container
-      Int_t ntaskmuon = AddPWG3MuonTrain(isESDAnalysis,isAODAnalysis,addMuonDistributions,addSingleMuonAnalysis,addMuonHFAnalysis, addDimuonCFContainer);
+      Int_t ntaskmuon = AddPWG3MuonTrain(isESDAnalysis,isAODAnalysis,addMuonDistributions,addSingleMuonAnalysis,addMuonHFAnalysis);
       printf("Added %d muon tasks\n", ntaskmuon);
    }   
       
@@ -581,7 +616,7 @@ void AddAnalysisTasks()
       } else {
          // AOD-based analysis. Add all reconstructors to write into delta AOD's
          if (iJETANdelta) {
-            Int_t ntasksjets = AddTaskJetsDelta("AliAOD.Jets.root");
+            Int_t ntasksjets = AddTaskJetsDelta("AliAOD.Jets.root",0,kFALSE);
             if (ntasksjets) printf("Added %d jet reconstructors\n", ntasksjets);
          }
       }      
@@ -594,9 +629,6 @@ void AddAnalysisTasks()
       if (!taskpartcorrPHOS) ::Warning("AnalysisTrainNew", "AliAnalysisTaskParticleCorrelation PHOS cannot run for this train conditions - EXCLUDED");
       AliAnalysisTaskParticleCorrelation *taskpartcorrEMCAL = AddTaskPartCorr("AOD", "EMCAL", kFALSE, isSimulation);
       if (!taskpartcorrEMCAL) ::Warning("AnalysisTrainNew", "AliAnalysisTaskParticleCorrelation EMCAL cannot run for this train conditions - EXCLUDED");
-      gROOT->LoadMacro("$ALICE_ROOT/PWG4/macros/QA/AddTaskCalorimeterQA.C");
-      AliAnalysisTaskParticleCorrelation *taskpartcorrqa = AddTaskCalorimeterQA("ESD",kFALSE,kFALSE);
-      if (!taskpartcorrqa) ::Warning("AnalysisTrainNew", "AliAnalysisTaskParticleCorrelation QA cannot run for this train conditions - EXCLUDED");
       mgr->RegisterExtraFile("deltaAODPartCorr.root");
    }   
 
@@ -605,9 +637,13 @@ void AddAnalysisTasks()
       gROOT->LoadMacro("$ALICE_ROOT/PWG4/macros/AddTaskGammaConversion.C");
       TString cdir = gSystem->WorkingDirectory();
       gSystem->ChangeDirectory(gSystem->ExpandPathName("$ALICE_ROOT/PWG4/macros/"));
-      TString gcArguments = "-run-on-train -run-jet -run-chic -run-neutralmeson -run-cf";
+      TString gcArguments = "-run-on-train   -use-own-xyz  -run-jet  -run-neutralmeson -no-aod  -apply-chi2-cut -low-memory -use-v0-multiplicity -move-bg-vertex ";
+      TString kGCAnalysisCutSelectionId="900110204010001";
+      gcArguments.Append(Form(" -set-cut-selection %s",kGCAnalysisCutSelectionId.Data()));
+      if(!useMC)gcArguments += " -mc-off";
       AliAnalysisTaskGammaConversion * taskGammaConversion = AddTaskGammaConversion(gcArguments,mgr->GetCommonInputContainer());
       gSystem->ChangeDirectory(cdir);
+      taskGammaConversion->SelectCollisionCandidates();
       if (!taskGammaConversion) ::Warning("AnalysisTrainNew", "AliAnalysisTaskGammaConversion cannot run for these train conditions - EXCLUDED");
    }   
 
@@ -740,10 +776,6 @@ void CheckModuleFlags(const char *mode) {
          ::Info("AnalysisTrainNew.C::CheckModuleFlags", "iPWG2evchar disabled if not reading track references");
          iPWG2evchar = 0;
       }   
-      if (!iAODhandler) {
-         ::Info("AnalysisTrainNew.C::CheckModuleFlags", "iPWG3d2h disabled on ESD analysis without AOD handler");
-         iPWG3d2h = 0;
-      }         
    }
    if (!useMC) {
       if (iPWG2perfcascade)
@@ -752,9 +784,6 @@ void CheckModuleFlags(const char *mode) {
       if (iPWG2central)
          ::Info("AnalysisTrainNew.C::CheckModuleFlags", "PWG2central disabled without MC info");
          iPWG2central = 0;
-      if (iPWG2rsneff)   
-         ::Info("AnalysisTrainNew.C::CheckModuleFlags", "PWG2rsneff disabled without MC info");
-         iPWG2rsneff = 0;
    }   
    if (iJETAN && !iAODanalysis) iESDfilter=1;
    if (iESDfilter) {iAODhandler=1; useCORRFW = kTRUE;}
@@ -808,12 +837,6 @@ Bool_t Connect(const char *mode) {
          }   
          break;
       case 2:      
-         if  (!username.Length()) {
-            ::Error(Form("AnalysisTrainNew.C::Connect <%s>", mode), "Make sure you:\n \
-                           1. Have called: alien-token-init <username>\n \
-                           2. Have called: >source /tmp/gclient_env_$UID");
-            return kFALSE;
-         }
          if (usePLUGIN && !gSystem->Getenv("alien_CLOSE_SE")) {
             ::Error(Form("AnalysisTrainNew.C::Connect <%s>", mode), 
                            "When using the AliEn plugin it is preferable to define the \
@@ -910,6 +933,10 @@ Bool_t LoadAnalysisLibraries(const char *mode)
 {
 // Load common analysis libraries.
    Bool_t success = kTRUE;
+   if (useTender) {
+      if (!LoadLibrary("Tender", mode, kTRUE) ||
+          !LoadLibrary("TenderSupplies", mode, kTRUE)) return kFALSE;
+   }       
    if (iESDfilter || iPWG3MuonTrain) {
       if (!LoadLibrary("PWG3base", mode, kTRUE) ||
           !LoadLibrary("PWG3muon", mode, kTRUE)) return kFALSE;
@@ -976,7 +1003,7 @@ Bool_t LoadAnalysisLibraries(const char *mode)
    }   
    // PWG2 FORWARD
    if (iPWG2forward) {
-      if (!LoadLibrary("PWG2forward", mode, kTRUE)) return kFALSE;
+      if (!LoadLibrary("PWG2forward2", mode, kTRUE)) return kFALSE;
    }   
    // PWG3 Vertexing HF
    if (iPWG3vertexing || iPWG3d2h) {
@@ -1188,7 +1215,10 @@ AliAnalysisAlien* CreateAlienHandler(const char *plugin_mode)
 // Set the run mode (can be "full", "test", "offline", "submit" or "terminate")
    plugin->SetRunMode(plugin_mode);
    if (useProductionMode) plugin->SetProductionMode();
-   if (!outputSingleFolder.IsNull()) plugin->SetOutputSingleFolder(outputSingleFolder);
+   if (!outputSingleFolder.IsNull()) {
+      plugin->SetOutputSingleFolder(outputSingleFolder);
+      plugin->SetOutputToRunNo();
+   }   
    plugin->SetJobTag(job_tag);
    plugin->SetNtestFiles(1);
 //   plugin->SetPreferedSE("ALICE::NIHAM::File");
@@ -1202,14 +1232,18 @@ AliAnalysisAlien* CreateAlienHandler(const char *plugin_mode)
 // Define production directory LFN
    plugin->SetGridDataDir(alien_datadir);
 // Set data search pattern
-   if (iAODanalysis) plugin->SetDataPattern("*AliAOD.root");
-   else              plugin->SetDataPattern("*AliESDs.root");
+   if (runOnData) {
+      plugin->SetRunPrefix("000");
+      plugin->SetDataPattern("*ESDs/pass1/*ESDs.root");
+   } else {
+      plugin->SetDataPattern("*ESDs.root");
+   }   
 // ...then add run numbers to be considered
-   if (!iAODanalysis) plugin->SetRunRange(run_range[0], run_range[1]);
-//   for (Int_t i=0; i<10; i++) {
-//      if (run_numbers[i]==0) break;
-//      plugin->AddRunNumber(run_numbers[i]);
-//   }   
+//   if (!iAODanalysis) plugin->SetRunRange(run_range[0], run_range[1]);
+   for (Int_t i=0; i<10; i++) {
+      if (run_numbers[i]==0) break;
+      plugin->AddRunNumber(run_numbers[i]);
+   }   
 // Method 2: Declare existing data files (raw collections, xml collections, root file)
 // If no path mentioned data is supposed to be in the work directory (see SetGridWorkingDir())
 // XML collections added via this method can be combined with the first method if
@@ -1217,8 +1251,7 @@ AliAnalysisAlien* CreateAlienHandler(const char *plugin_mode)
 //   plugin->AddDataFile("tag.xml");
 //   plugin->AddDataFile("/alice/data/2008/LHC08c/000057657/raw/Run57657.Merged.RAW.tag.root");
 // Define alien work directory where all files will be copied. Relative to alien $HOME.
-   if (iAODanalysis) plugin->SetGridWorkingDir("analysisAOD");
-   else              plugin->SetGridWorkingDir("analysisESD");
+   plugin->SetGridWorkingDir(train_name);
 // Declare alien output directory. Relative to working directory.
    if (!alien_outdir.Length()) alien_outdir = Form("output_%s",train_name.Data());
    plugin->SetGridOutputDir(alien_outdir);
@@ -1292,7 +1325,7 @@ AliAnalysisAlien* CreateAlienHandler(const char *plugin_mode)
    if (!listhists.Length() && !listaods.Length()) {
       ::Fatal("AnalysisTrainNew", "No task output !");
    }
-   TString outputArchive = Form("log_archive.zip:stderr,stdout@%s", outputStorages.Data());
+   TString outputArchive = Form("log_archive.zip:stderr@%s", outputStorages.Data());
    if (listaods.Length()) {
       outputArchive += " ";
       outputArchive += listaods;
@@ -1304,7 +1337,7 @@ AliAnalysisAlien* CreateAlienHandler(const char *plugin_mode)
 // Set friends
 //   if (iAODanalysis && iPWG3d2h) 
 //      plugin->SetFriendChainName("AliAOD.VertexingHF.root");
-   plugin->SetOutputArchive(outputArchive);
+//   plugin->SetOutputArchive(outputArchive);
 // Optionally set a name for the generated analysis macro (default MyAnalysis.C)
    plugin->SetAnalysisMacro(Form("%s.C", train_name.Data()));
 // Optionally set maximum number of input files/subjob (default 100, put 0 to ignore)
@@ -1323,8 +1356,15 @@ AliAnalysisAlien* CreateAlienHandler(const char *plugin_mode)
    plugin->SetExecutable(Form("%s.sh", train_name.Data()));
 // Optionally modify job price (default 1)
    plugin->SetPrice(1);      
+// Merge via JDL
+   plugin->SetMergeViaJDL(useMergeViaJDL);
+// Use fastread option
+   plugin->SetFastReadOption(useFastReadOption);
+// UseOverwrite mode
+   plugin->SetOverwriteMode(useOverwriteMode);   
+   plugin->SetExecutableCommand("aliroot -b -q");
 // Optionally modify split mode (default 'se')    
-//   plugin->SetSplitMode("se");
+   plugin->SetSplitMode("se");
    return plugin;
 }
 
@@ -1344,9 +1384,7 @@ void WriteConfig()
       fdate.getline(date,64);
       fdate.close();
       gSystem->Exec("rm date.tmp");
-      train_name = Form("train_%s_%s", train_name.Data(), date);
-   } else {
-      train_name = Form("train_%s", train_name.Data());
+      train_name = Form("%s_%s", train_name.Data(), date);
    }   
    TString cdir = gSystem->WorkingDirectory();
    gSystem->MakeDirectory(train_name);
@@ -1380,8 +1418,13 @@ void WriteConfig()
 //      if (run_numbers[i]) 
 //         out << "   run_numbers[" << i << "]  = " << run_numbers[i] << ";" << endl;
 //   }
-   out << "   run_range[0]    = " << run_range[0] << ";" << endl;
-   out << "   run_range[1]    = " << run_range[1] << ";" << endl;
+//   out << "   run_range[0]    = " << run_range[0] << ";" << endl;
+//   out << "   run_range[1]    = " << run_range[1] << ";" << endl;
+   out << "   usePhysicsSelection = " << usePhysicsSelection << ";" << endl;
+   out << "   useTender       = " << useTender << ";" << endl;
+   out << "   useMergeViaJDL  = " << useMergeViaJDL << ";" << endl;
+   out << "   useOverwriteMode  = " << useOverwriteMode << ";" << endl;
+   out << "   useFastReadOption = " << useFastReadOption << ";" << endl;
    out << "   useDBG          = " << useDBG << ";" << endl;
    out << "   useMC           = " << useMC << ";" << endl;
    out << "   useTAGS         = " << useTAGS << ";" << endl;