]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG4/macros/electrons/anaJete.C
move PWG4 macros to PWGGA corresponding places
[u/mrichter/AliRoot.git] / PWG4 / macros / electrons / anaJete.C
diff --git a/PWG4/macros/electrons/anaJete.C b/PWG4/macros/electrons/anaJete.C
deleted file mode 100755 (executable)
index 02e2382..0000000
+++ /dev/null
@@ -1,729 +0,0 @@
-/* $Id:  $ */\r
-//--------------------------------------------------\r
-// Example macro to do multi-platform JETAN/FASTJET analysis\r
-// Can be executed with Root and AliRoot\r
-//\r
-// Configured by options and definitions set in the lines below and\r
-// additional external configuration files and environement variables.\r
-//\r
-// Author: K. Read\r
-//\r
-//-------------------------------------------------\r
-enum anaModes {mLocal, mLocalCAF, mPROOF, mGRID, mPLUGIN};\r
-//mLocal    = 0: Analyze locally files in your computer\r
-//mLocalCAF = 1: Analyze locally CAF files\r
-//mPROOF    = 2: Analyze CAF files with PROOF\r
-//mGRID     = 3: Analyze files on GRID\r
-//mPLUGIN   = 4: Analyze files on GRID with AliEn plugin\r
-\r
-//---------------------------------------------------------------------------\r
-//Settings to read locally several files, only for "mLocal" mode\r
-//The different values are default, they can be set with environmental \r
-//variables: INDIR, PATTERN, NFILES, respectively\r
-//char * kInDir = "/afs/cern.ch/user/k/kread/public/data/"; \r
-char * kInDir = "/user/data/files";\r
-char * kPattern = ""; // Data are in files kInDir/kPattern+i\r
-Int_t kFile = 1; // Number of files\r
-//---------------------------------------------------------------------------\r
-//Collection file for grid analysis\r
-char * kXML = "collection.xml";\r
-//---------------------------------------------------------------------------\r
-//Data directory for PROOF analysis\r
-char * kmydataset = "/COMMON/COMMON/LHC09a4_run8101X";\r
-//char * kmydataset = "/PWG4/mcosenti/LHC08d10_ppElectronB_Jets#esdTree";\r
-//---------------------------------------------------------------------------\r
-//Scale histograms from file. Change to kTRUE when xsection file exists\r
-//Put name of file containing xsection \r
-//Put number of events per ESD file\r
-//This is an specific case for normalization of Pythia files.\r
-Bool_t kGetXSectionFromFileAndScale = kTRUE;\r
-const char * kXSFileName = "pyxsec.root";\r
-const Int_t kNumberOfEventsPerFile = 200; \r
-//---------------------------------------------------------------------------\r
-\r
-Bool_t kMC = kTRUE; //With real data kMC = kFALSE\r
-TString kInputData = "ESD";//ESD, AOD, MC\r
-TString kTreeName = "esdTree";\r
-//const   Bool_t kMergeAODs = kTRUE; //uncomment for AOD merging\r
-const Bool_t kMergeAODs = kFALSE; //uncomment for no AOD merging\r
-const Bool_t kUsePAR = kTRUE; //set to kFALSE for libraries\r
-const Bool_t kDoJetTask = kTRUE; //set to kFALSE to skip JETAN task\r
-Int_t sevent = 0;\r
-\r
-Int_t mode = mLocal;\r
-char sconfig1[1024] = "ConfigPWG4AODtoAOD";        //"ConfigAnalysis";\r
-char sconfig2[1024] = "ConfigJetAnalysisFastJet.C";//"ConfigAnalysis";\r
-char sconfig3[1024] = "ConfigAnalysisElectron";    //"ConfigAnalysis";\r
-\r
-//Initialize the cross section and ntrials values. Do not modify.\r
-Double_t xsection = 0;\r
-Float_t ntrials = 0;\r
-\r
-void anaJete()\r
-{\r
-  // Main\r
-\r
-  //Process environmental variables from command line:\r
-  ProcessEnvironment();        \r
-  printf("Final    Variables: kInputData %s, kMC %d, mode %d, config2 %s, config3 %s, sevent %d\n",kInputData.Data(),kMC,mode,sconfig2,sconfig3,sevent);\r
-\r
-  if(!kMC) {\r
-    kGetXSectionFromFileAndScale = kFALSE;\r
-  }\r
-\r
-  //--------------------------------------------------------------------\r
-  // Load analysis libraries\r
-  // Look at the method below, \r
-  // change whatever you need for your analysis case\r
-  // ------------------------------------------------------------------\r
-  LoadLibraries(mode) ;\r
-  \r
-  //-------------------------------------------------------------------------------------------------\r
-  //Create chain from ESD and from cross sections files, look below for options.\r
-  //------------------------------------------------------------------------------------------------- \r
-  if(kInputData == "ESD") kTreeName = "esdTree" ;\r
-  else if(kInputData == "AOD") kTreeName = "aodTree" ;\r
-  else if (kInputData == "MC") kTreeName = "TE" ;\r
-  else {\r
-    cout<<"Wrong  data type "<<kInputData<<endl;\r
-    break;\r
-  }\r
-\r
-  TChain * chain   = new TChain(kTreeName) ;\r
-  TChain * chainxs = new TChain("Xsection") ;\r
-\r
-  if (mode==mLocal || mode==mLocalCAF || mode == mGRID) {\r
-    CreateChain(mode, chain, chainxs);  \r
-    cout<<"Chain created"<<endl;\r
-  }\r
-\r
-  if( chain || mode==mPROOF || mode==mPLUGIN ){\r
-    AliLog::SetGlobalLogLevel(AliLog::kError);//Minimum prints on screen\r
-    \r
-    //--------------------------------------\r
-    // Make the analysis manager\r
-    //-------------------------------------\r
-    AliAnalysisManager *mgr  = new AliAnalysisManager("Jet Manager", "Jet Manager");\r
-\r
-    if( mode == mPLUGIN ){\r
-      // Create and configure the alien handler plugin\r
-      if (!AliAnalysisGrid::CreateToken()) return NULL;\r
-      AliAnalysisAlien *plugin = new AliAnalysisAlien();\r
-      plugin->SetRunMode("submit");\r
-      //Uncomment the following 3 lines to permit auto xml creation\r
-      //plugin->SetGridDataDir("/alice/sim/PDC_08b/LHC08d10/"); //dummy\r
-      //plugin->SetDataPattern("AliESDs.root"); //dummy\r
-      //plugin->AddRunNumber(30010); //dummy\r
-      plugin->AddDataFile("mycollect.xml");\r
-      plugin->SetGridWorkingDir("work3");\r
-      plugin->SetAdditionalLibs("anaJet.C ConfigJetAnalysisFastJet.C ConfigAnalysisElectron.C ANALYSIS.par ANALYSISalice.par AOD.par EMCALUtils.par ESD.par PHOSUtils.par STEERBase.par JETAN.par FASTJETAN.par");\r
-      plugin->SetJDLName("anaJet.jdl");\r
-      plugin->SetExecutable("anaJet.sh");\r
-      plugin->SetOutputFiles("histos.root");\r
-      AliAnalysisGrid *alienHandler = plugin;\r
-      if (!alienHandler) return;\r
-\r
-      // Connect plug-in to the analysis manager\r
-      mgr->SetGridHandler(alienHandler);\r
-    }\r
-\r
-    // MC handler\r
-    if( (kMC && (kInputData == "ESD")) || kInputData == "MC"){\r
-      AliMCEventHandler* mcHandler = new AliMCEventHandler();\r
-      mcHandler->SetReadTR(kFALSE);//Do not search TrackRef file\r
-      mgr->SetMCtruthEventHandler(mcHandler);\r
-      if( kInputData == "MC") mgr->SetInputEventHandler(NULL);\r
-    }\r
-\r
-    // AOD output handler\r
-    AliAODHandler* aodoutHandler   = new AliAODHandler();\r
-    aodoutHandler->SetOutputFileName("aodoutput.root");\r
-    if(kMergeAODs)aodoutHandler->SetCreateNonStandardAOD();\r
-    mgr->SetOutputEventHandler(aodoutHandler);\r
-\r
-    //input\r
-    if(kInputData == "ESD"){\r
-      // ESD handler\r
-      AliESDInputHandler *esdHandler = new AliESDInputHandler();\r
-      mgr->SetInputEventHandler(esdHandler);\r
-    }\r
-    if(kInputData == "AOD"){\r
-      // AOD handler\r
-      AliAODInputHandler *aodHandler = new AliAODInputHandler();\r
-      mgr->SetInputEventHandler(aodHandler);\r
-      if(kMergeAODs){\r
-        char path[1024];\r
-        sprintf(path,"AliAOD.root");\r
-        if(gSystem->Getenv("SIMPATH"))\r
-            sprintf(path,"%s/AliAOD.root",gSystem->Getenv("SIMPATH"));\r
-        cout<<"Config: Second input file: "<<path<<endl;\r
-        aodHandler->SetMergeEvents(kTRUE);\r
-        aodHandler->AddFriend(path);\r
-        cout<<"Config: Starting event for second input file: "<<sevent<<endl;\r
-        aodHandler->SetMergeOffset(sevent);\r
-      }\r
-    }\r
-\r
-    mgr->SetDebugLevel(3); // For debugging, do not uncomment if you want no messages.\r
-\r
-\r
-    const Bool_t kDoESDFilter = kTRUE; //need this for JETAN with input ESDs\r
-  //const Bool_t kDoESDFilter = kFALSE;\r
-    if(kInputData == "ESD" && kDoESDFilter){\r
-      printf("Applying ESD filter cuts appropriate for jet analysis\n");\r
-      //\r
-      // Set of cuts\r
-      // \r
-      // standard\r
-      AliESDtrackCuts* esdTrackCutsL = new AliESDtrackCuts("AliESDtrackCuts", "Loose");\r
-      //esdTrackCutsL->SetMinNClustersTPC(50);\r
-      //esdTrackCutsL->SetMaxChi2PerClusterTPC(3.5);\r
-      //esdTrackCutsL->SetRequireTPCRefit(kTRUE);\r
-      //esdTrackCutsL->SetMaxDCAToVertexXY(2.4);\r
-      //esdTrackCutsL->SetMaxDCAToVertexZ(3.2);\r
-      //esdTrackCutsL->SetDCAToVertex2D(kTRUE);\r
-      //esdTrackCutsL->SetRequireSigmaToVertex(kFALSE);\r
-      //esdTrackCutsL->SetAcceptKinkDaughters(kFALSE);\r
-      //\r
-      // hard\r
-      AliESDtrackCuts* esdTrackCutsH = new AliESDtrackCuts("AliESDtrackCuts", "Hard");\r
-      esdTrackCutsH->SetMinNClustersTPC(100);\r
-      esdTrackCutsH->SetMaxChi2PerClusterTPC(2.0);\r
-      esdTrackCutsH->SetRequireTPCRefit(kTRUE);\r
-      esdTrackCutsH->SetMaxDCAToVertexXY(2.4);\r
-      esdTrackCutsH->SetMaxDCAToVertexZ(3.2);\r
-      esdTrackCutsH->SetDCAToVertex2D(kTRUE);\r
-      esdTrackCutsH->SetRequireSigmaToVertex(kFALSE);\r
-      esdTrackCutsH->SetAcceptKinkDaughters(kFALSE);\r
-      //\r
-      AliAnalysisFilter* trackFilter = new AliAnalysisFilter("trackFilter");\r
-      trackFilter->AddCuts(esdTrackCutsL);\r
-      //  trackFilter->AddCuts(esdTrackCutsH);\r
-      //\r
-      AliAnalysisTaskESDfilter *esdfilter = new AliAnalysisTaskESDfilter("ESD Filter");\r
-      esdfilter->SetTrackFilter(trackFilter);\r
-      esdfilter->SetDebugLevel(10);\r
-      mgr->AddTask(esdfilter);\r
-    }\r
-\r
-\r
-    //-------------------------------------------------------------------------\r
-    //Define task, put here any other task that you want to use.\r
-    //-------------------------------------------------------------------------\r
-\r
-    //\r
-    // Jet analysis\r
-    //\r
-    if( kDoJetTask ){\r
-      AliAnalysisTaskJets *jetana = new AliAnalysisTaskJets("JetAnalysis",chain);\r
-      jetana->SetDebugLevel(2);\r
-      jetana->SetConfigFile(sconfig2);  //Default ConfigJetAnalysisFastJet\r
-      //Uncommenting the following line produces too many AddAtAndExpand warnings for now.\r
-      if(kMergeAODs)jetana->ReadAODFromOutput();  //Uncomment when AOD merging\r
-      mgr->AddTask(jetana);\r
-    }\r
-\r
-    //\r
-    // electron analysis\r
-    //\r
-    AliAnalysisTaskParticleCorrelation * taskpwg4 = new AliAnalysisTaskParticleCorrelation ("Particle");\r
-    taskpwg4->SetConfigFileName("ConfigAnalysisElectron"); //Default name is ConfigAnalysisElectron\r
-    mgr->AddTask(taskpwg4);\r
-    \r
-    // Create containers for input/output\r
-    AliAnalysisDataContainer *cinput1 = mgr->GetCommonInputContainer();\r
-    AliAnalysisDataContainer *coutput1 = mgr->GetCommonOutputContainer();\r
-    AliAnalysisDataContainer *coutput2 = mgr->CreateContainer("histos", TList::Class(),\r
-                                                             AliAnalysisManager::kOutputContainer, "histos.root");\r
-\r
-\r
-    if(kInputData == "ESD" && kDoESDFilter){\r
-      mgr->ConnectInput  (esdfilter,  0, cinput1  );\r
-      mgr->ConnectOutput (esdfilter,  0, coutput1 );\r
-    }\r
-\r
-    if( kDoJetTask ){\r
-      mgr->ConnectInput  (jetana,    0, cinput1  );\r
-      mgr->ConnectOutput (jetana,    0, coutput1 );\r
-      mgr->ConnectOutput (jetana,    1, coutput2 );\r
-    }\r
-\r
-    mgr->ConnectInput  (taskpwg4, 0, cinput1  );\r
-    mgr->ConnectOutput (taskpwg4, 0, coutput1 );\r
-    mgr->ConnectOutput (taskpwg4, 1, coutput2 );\r
\r
-\r
-    //------------------------  \r
-    //Scaling task\r
-    //-----------------------\r
-    cout<<">>> Scaling Task"<<endl;\r
-    Int_t nfiles = chain->GetListOfFiles()->GetEntriesFast();//chainxs->GetEntries();\r
-    Int_t nevents = chain->GetEntries();\r
-    cout<<"Get? "<<kGetXSectionFromFileAndScale<<" nfiles "<<nfiles<<" nevents "<<nevents<<endl;\r
-    if(kGetXSectionFromFileAndScale && nfiles > 0){\r
-      cout<<"Init AnaScale"<<endl;\r
-      AliAnaScale * scale = new AliAnaScale("scale") ;\r
-      cout<<"Summed xsection "<<xsection<<" Summed ntrials "<<ntrials<<" total events "<<nevents<<endl;\r
-      //Calculate the average\r
-      xsection/=nfiles;\r
-      ntrials/=nfiles;\r
-      cout<<"Average xsection "<<xsection<<" Average ntrials "<<ntrials<<" total events "<<nevents<<endl;\r
-      Double_t scaleFactor =   xsection/ntrials/nevents ;\r
-      cout<<"Scale factor "<<scaleFactor<<endl;\r
-      scale->Set(scaleFactor) ;\r
-      scale->MakeSumw2(kTRUE);//If you want histograms with error bars set to kTRUE\r
-      scale->SetDebugLevel(2);\r
-      mgr->AddTask(scale);\r
-      \r
-      AliAnalysisDataContainer *coutput3 = mgr->CreateContainer("histosscaled", \r
-                  TList::Class(), AliAnalysisManager::kOutputContainer, "histosscaled.root");\r
-      mgr->ConnectInput  (scale,     0, coutput2);\r
-      mgr->ConnectOutput (scale,     0, coutput3 );\r
-    }\r
-   \r
-    //-----------------------\r
-    // Run the analysis\r
-    //-----------------------    \r
-    TString smode = "";\r
-    if (mode==mLocal || mode == mLocalCAF) \r
-      smode = "local";\r
-    else if (mode==mPROOF) \r
-      smode = "proof";\r
-    else if (mode==mGRID) \r
-      smode = "local";\r
-    else if (mode==mPLUGIN) \r
-      smode = "grid";\r
-    \r
-    //mgr->ResetAnalysis();\r
-    mgr->InitAnalysis();\r
-    mgr->PrintStatus();\r
-    if (mode==mPROOF)\r
-      mgr->StartAnalysis(smode.Data(),kmydataset,1500,0);\r
-    else if (mode==mPLUGIN)\r
-      mgr->StartAnalysis(smode.Data());\r
-    else\r
-      mgr->StartAnalysis(smode.Data(),chain);\r
-\r
-    cout <<" Analysis ended sucessfully "<< endl ;\r
-\r
-  }\r
-  else cout << "Chain was not produced ! "<<endl;\r
-  \r
-}\r
-\r
-void  LoadLibraries(const anaModes mode) {\r
-  \r
-  \r
-  //----------------------------------------------------------\r
-  // >>>>>>>>>>> Local mode <<<<<<<<<<<<<< \r
-  //----------------------------------------------------------\r
-  if (mode==mLocal || mode == mLocalCAF || mode == mGRID || mode == mPLUGIN) {\r
-\r
-    //--------------------------------------\r
-    // Load the needed libraries most of them already loaded by aliroot\r
-    //--------------------------------------\r
-    gSystem->Load("libTree.so");\r
-    gSystem->Load("libGeom.so");\r
-    gSystem->Load("libVMC.so");\r
-    gSystem->Load("libXMLIO.so");\r
-    if( kDoJetTask ){\r
-      gSystem->Load("libCGAL");\r
-      gSystem->Load("libfastjet");\r
-      gSystem->Load("libSISConePlugin");\r
-    }\r
-\r
-    if(kUsePAR){\r
-      //--------------------------------------------------------\r
-      //If you want to use root and par files from aliroot\r
-      //--------------------------------------------------------  \r
-      SetupPar("STEERBase");\r
-      SetupPar("ESD");\r
-      SetupPar("AOD");\r
-      SetupPar("ANALYSIS");\r
-      SetupPar("ANALYSISalice");\r
-      SetupPar("PHOSUtils");\r
-      SetupPar("EMCALUtils");\r
-      if( kDoJetTask ){\r
-        cerr<<"Now Loading JETAN"<<endl;\r
-        SetupPar("JETAN");\r
-        cerr<<"Done Loading JETAN"<<endl;\r
-        cerr<<"Now Loading FASTJETAN"<<endl;\r
-        SetupPar("FASTJETAN");\r
-        cerr<<"Done Loading FASTJETAN"<<endl;\r
-      }\r
-      SetupPar("PWG4PartCorrBase");\r
-      SetupPar("PWG4PartCorrDep");\r
-    }\r
-    else{\r
-      //--------------------------------------------------------\r
-      // If you want to use already compiled libraries \r
-      // in the aliroot distribution\r
-      //--------------------------------------------------------\r
-      gSystem->Load("libSTEERBase");\r
-      gSystem->Load("libESD");\r
-      gSystem->Load("libAOD");\r
-      gSystem->Load("libANALYSIS");\r
-      gSystem->Load("libANALYSISalice");\r
-      gSystem->Load("libPHOSUtils");\r
-      gSystem->Load("libEMCALUtils");\r
-      if( kDoJetTask ){\r
-        gSystem->Load("libJETAN");\r
-        gSystem->Load("libFASTJETAN");\r
-      }\r
-      gSystem->Load("libPWG4PartCorrBase");\r
-      gSystem->Load("libPWG4PartCorrDep");\r
-    }\r
-\r
-       \r
-  }\r
-\r
-  //---------------------------------------------------------\r
-  // <<<<<<<<<< PROOF mode >>>>>>>>>>>>\r
-  //---------------------------------------------------------\r
-  else if (mode==mPROOF) {\r
-    //\r
-    // Connect to proof\r
-    // Put appropriate username here\r
-    // char* myproofname = "alicecaf";\r
-    char* myproofname = "kread@localhost";\r
-\r
-    //TProof::Reset("proof://kread@lxb6046.cern.ch");\r
-    //TProof::Reset("proof://myproofname);\r
-    //TProof::Reset("myproofname",kTRUE);\r
-    gEnv->SetValue("XSec.GSI.DelegProxy","2");   \r
-    //TProof::Mgr(myproofname)->ShowROOTVersions();\r
-    //TProof::Mgr(myproofname)->SetROOTVersion("v5-24-00");\r
-    TProof::Open(myproofname);\r
-\r
-    // gProof->ClearPackages();\r
-    // gProof->SetLogLevel(5);\r
-    // gProof->ClearPackage("STEERBase");\r
-    // gProof->ClearPackage("ESD");\r
-    // gProof->ClearPackage("AOD");\r
-    // gProof->ClearPackage("ANALYSIS");\r
-    // gProof->ClearPackage("ANALYSISalice");\r
-    // gProof->ClearPackage("PHOSUtils");\r
-    // gProof->ClearPackage("EMCALUtils");\r
-    // if( kDoJetTask ){\r
-    //   gProof->ClearPackage("JETAN");\r
-    //   gProof->ClearPackage("FASTJETAN");\r
-    // }\r
-    // gProof->ClearPackage("PWG4PartCorrBase");\r
-    // gProof->ClearPackage("PWG4PartCorrDep");\r
-    // gProof->ShowEnabledPackages();\r
-\r
-    // Enable the STEERBase Package\r
-    gProof->UploadPackage("STEERBase.par");\r
-    gProof->EnablePackage("STEERBase");\r
-    // Enable the ESD Package\r
-    gProof->UploadPackage("ESD.par");\r
-    gProof->EnablePackage("ESD");\r
-    // Enable the AOD Package\r
-    gProof->UploadPackage("AOD.par");\r
-    gProof->EnablePackage("AOD");\r
-    // Enable the Analysis Package\r
-    gProof->UploadPackage("ANALYSIS.par");\r
-    gProof->EnablePackage("ANALYSIS");\r
-    // Enable the Analysis Package\r
-    gProof->UploadPackage("ANALYSISalice.par");\r
-    gProof->EnablePackage("ANALYSISalice");\r
-    // Enable the PHOSUtils Package\r
-    gProof->UploadPackage("PHOSUtils.par");\r
-    gProof->EnablePackage("PHOSUtils");\r
-    // Enable the EMCALUtils Package\r
-    gProof->UploadPackage("EMCALUtils.par");\r
-    gProof->EnablePackage("EMCALUtils");\r
-    if( kDoJetTask ){\r
-      // Enable JETAN analysis\r
-      gProof->UploadPackage("JETAN.par");\r
-      gProof->EnablePackage("JETAN");\r
-      // Enable FASTJETAN analysis\r
-      gProof->UploadPackage("FASTJETAN.par");\r
-      gProof->EnablePackage("FASTJETAN");\r
-    }\r
-    // Enable the PWG4PartCorrBase Package\r
-    gProof->UploadPackage("PWG4PartCorrBase.par");\r
-    gProof->EnablePackage("PWG4PartCorrBase");\r
-    // Enable the PWG4PartCorrDep Package\r
-    gProof->UploadPackage("PWG4PartCorrDep.par");\r
-    gProof->EnablePackage("PWG4PartCorrDep");\r
-\r
-    gProof->ShowEnabledPackages();\r
-  }  \r
-  \r
-}\r
-\r
-void SetupPar(char* pararchivename)\r
-{\r
-  //Load par files, create analysis libraries\r
-  //For testing, if par file already decompressed and modified\r
-  //classes then do not decompress.\r
\r
-  TString cdir(Form("%s", gSystem->WorkingDirectory() )) ; \r
-  TString parpar(Form("%s.par", pararchivename)) ; \r
-  if ( gSystem->AccessPathName(pararchivename) ) {  \r
-    TString processline = Form(".! tar xvzf %s",parpar.Data()) ;\r
-    gROOT->ProcessLine(processline.Data());\r
-  }\r
-  \r
-  TString ocwd = gSystem->WorkingDirectory();\r
-  gSystem->ChangeDirectory(pararchivename);\r
-  \r
-  // check for BUILD.sh and execute\r
-  if (!gSystem->AccessPathName("PROOF-INF/BUILD.sh")) {\r
-    printf("*******************************\n");\r
-    printf("*** Building PAR archive    ***\n");\r
-    cout<<pararchivename<<endl;\r
-    printf("*******************************\n");\r
-    \r
-    if (gSystem->Exec("PROOF-INF/BUILD.sh")) {\r
-      Error("runProcess","Cannot Build the PAR Archive! - Abort!");\r
-      return -1;\r
-    }\r
-  }\r
-  // check for SETUP.C and execute\r
-  if (!gSystem->AccessPathName("PROOF-INF/SETUP.C")) {\r
-    printf("*******************************\n");\r
-    printf("*** Setup PAR archive       ***\n");\r
-    cout<<pararchivename<<endl;\r
-    printf("*******************************\n");\r
-    gROOT->Macro("PROOF-INF/SETUP.C");\r
-  }\r
-  \r
-  gSystem->ChangeDirectory(ocwd.Data());\r
-  printf("Current dir: %s\n", ocwd.Data());\r
-}\r
-\r
-\r
-\r
-void CreateChain(const anaModes mode, TChain * chain, TChain * chainxs){\r
-  //Fills chain with data\r
-\r
-  TString datafile="";\r
-  if(kInputData == "ESD") datafile = "AliESDs.root" ;\r
-  else if(kInputData == "AOD") datafile = "AliAOD.root" ;\r
-  else if(kInputData == "MC")  datafile = "galice.root" ;\r
-\r
-  if(kInputData == "AOD") kXSFileName = "pyxsec_hists.root";\r
-\r
-  char * kGener = gSystem->Getenv("GENER");\r
-  if(kGener) {\r
-    cout<<"GENER "<<kGener<<endl;\r
-    if(!strcmp(kGener,"PYTHIA")) kXSFileName = "pyxsec.root";\r
-    else if(!strcmp(kGener,"HERWIG")) kXSFileName = "hexsec.root";\r
-    else cout<<" UNKNOWN GENER, use default: "<<kXSFileName<<endl;\r
-  }\r
-  else cout<<" GENER not set, use default xs file name: "<<kXSFileName<<endl;\r
-\r
-\r
-  TString ocwd = gSystem->WorkingDirectory();\r
-  \r
-  //-----------------------------------------------------------\r
-  //Analysis of CAF data locally\r
-  //-----------------------------------------------------------\r
-  if(mode == mLocalCAF){\r
-    // Read the input list of files and add them to the chain\r
-    TString line;\r
-    ifstream in;\r
-    in.open("ESDlist.txt");\r
-    while (in.good()) {\r
-      in >> line;\r
-      if (line.Length() == 0) continue;\r
-      // cout << " line = " << line << endl;\r
-      chain->Add(line);\r
-    }\r
-  }\r
-  \r
-  //---------------------------------------\r
-  //Local files analysis\r
-  //---------------------------------------\r
-  else if(mode == mLocal){\r
-    //If you want to add several ESD files sitting in a common directory INDIR\r
-    //Specify as environmental variables the directory (INDIR), the number of files \r
-    //to analyze (NFILES) and the pattern name of the directories with files (PATTERN)\r
-\r
-    if(gSystem->Getenv("INDIR"))  \r
-      kInDir = gSystem->Getenv("INDIR") ; \r
-    else cout<<"INDIR not set, use default: "<<kInDir<<endl;   \r
-    \r
-    if(gSystem->Getenv("PATTERN"))   \r
-      kPattern = gSystem->Getenv("PATTERN") ; \r
-    else  cout<<"PATTERN not set, use default: "<<kPattern<<endl;\r
-    \r
-    if(gSystem->Getenv("NFILES"))\r
-      kFile = atoi(gSystem->Getenv("NFILES")) ;\r
-    else cout<<"NFILES not set, use default: "<<kFile<<endl;\r
-    \r
-    //Check if env variables are set and are correct\r
-    if ( kInDir  && kFile) {\r
-      printf("Get %d files from directory %s\n",kFile,kInDir);\r
-      if ( ! gSystem->cd(kInDir) ) {//check if ESDs directory exist\r
-       printf("%s does not exist\n", kInDir) ;\r
-       return ;\r
-      }\r
-\r
-      //if(gSystem->Getenv("XSFILE"))  \r
-      //kXSFileName = gSystem->Getenv("XSFILE") ; \r
-      //else cout<<" XS file name not set, use default: "<<kXSFileName<<endl;  \r
-\r
-      cout<<"INDIR : "<<kInDir<<endl;\r
-      cout<<"NFILES : "<<kFile<<endl;\r
-      cout<<"PATTERN: " <<kPattern<<endl;\r
-      cout<<"XSFILE  : "<<kXSFileName<<endl;\r
-      \r
-\r
-      //Loop on ESD files, add them to chain\r
-      Int_t event =0;\r
-      Int_t skipped=0 ; \r
-      char file[120] ;\r
-      char filexs[120] ;\r
-      \r
-      for (event = 0 ; event < kFile ; event++) {\r
-       sprintf(file, "%s/%s%d/%s", kInDir,kPattern,event,datafile.Data()) ; \r
-       sprintf(filexs, "%s/%s%d/%s", kInDir,kPattern,event,kXSFileName) ; \r
-       TFile * dataFile = 0 ; \r
-       //Check if file exists and add it, if not skip it\r
-       if ( dataFile = TFile::Open(file)) {\r
-         if ( dataFile->Get(kTreeName) ) { \r
-           Int_t nEventsPerFile = ((TTree*) dataFile->Get(kTreeName)) ->GetEntries();\r
-           printf("++++ Adding %s, with %d events \n", file, nEventsPerFile) ;\r
-           chain->AddFile(file);\r
-           if(kGetXSectionFromFileAndScale) GetXsection(nEventsPerFile, filexs);       \r
-         }\r
-       }\r
-       else { \r
-         printf("---- Skipping %s\n", file) ;\r
-         skipped++ ;\r
-       }\r
-      }\r
-      printf("number of entries # %lld, skipped %d\n", chain->GetEntries(), skipped*100) ;     \r
-    }\r
-    else {\r
-      TString input = "AliESDs.root" ;\r
-      cout<<">>>>>> No list added, take a single file <<<<<<<<< "<<input<<endl;\r
-      chain->AddFile(input);\r
-    }\r
-    \r
-  }// local files analysis\r
-  \r
-  //------------------------------\r
-  //GRID xml files\r
-  //-----------------------------\r
-  else if(mode == mGRID){\r
-    //Get colection file. It is specified by the environmental\r
-    //variable XML\r
-\r
-    if(gSystem->Getenv("XML") )\r
-      kXML = gSystem->Getenv("XML");\r
-    else\r
-      sprintf(kXML, "collection.xml") ; \r
-    \r
-    if (!TFile::Open(kXML)) {\r
-      printf("No collection file with name -- %s -- was found\n",kXML);\r
-      return ;\r
-    }\r
-    else cout<<"XML file "<<kXML<<endl;\r
-\r
-    //Load necessary libraries and connect to the GRID\r
-    gSystem->Load("libNetx.so") ; \r
-    gSystem->Load("libRAliEn.so"); \r
-    TGrid::Connect("alien://") ;\r
-\r
-    //Feed Grid with collection file\r
-    //TGridCollection * collection =  (TGridCollection*)gROOT->ProcessLine(Form("TAlienCollection::Open(\"%s\", 0)", kXML));\r
-    TGridCollection * collection = (TGridCollection*) TAlienCollection::Open(kXML);\r
-    if (! collection) {\r
-      AliError(Form("%s not found", kXML)) ; \r
-      return kFALSE ; \r
-    }\r
-    TGridResult* result = collection->GetGridResult("",0 ,0);\r
-   \r
-    // Makes the ESD chain \r
-    printf("*** Getting the Chain       ***\n");\r
-    Int_t nEventsPerFile = 0;\r
-    for (Int_t index = 0; index < result->GetEntries(); index++) {\r
-      TString alienURL = result->GetKey(index, "turl") ; \r
-      cout << "================== " << alienURL << endl ; \r
-      chain->Add(alienURL) ; \r
-\r
-      if(kGetXSectionFromFileAndScale){\r
-       //Get the number of events per file.\r
-        //Do it only once, no need to open all the files.\r
-        if(index == 0) {\r
-          TFile * df = TFile::Open(alienURL);\r
-          nEventsPerFile = ((TTree*) df->Get(kTreeName)) ->GetEntries();\r
-          df->Close();\r
-        } \r
-        alienURL.ReplaceAll(datafile,kXSFileName);\r
-        GetXsection(nEventsPerFile, alienURL);//chainxs->Add(alienURL) ; \r
-      }\r
-    }\r
-  }// xml analysis\r
-\r
-  gSystem->ChangeDirectory(ocwd.Data());\r
-}\r
-\r
-//________________________________________________\r
-void GetXsection(Int_t nEventsPerFile, TString filexs)\r
-{\r
-  // Get the cross section from the corresponding file in the directory\r
-  // where the data sits.\r
-  // The xsection and ntrials global variables are updated per each file.\r
-  // The average of these cuantities should be calculated after.\r
-\r
-  TFile *fxs = TFile::Open(filexs);\r
-  if(kInputData =="AOD") { //needs improvement, in case of train with ESDs, reading output AODs for example this is wrong.\r
-    TList *l = (TList*) fxs->Get("cFilterList");\r
-    TH1F * hxs = l->FindObject("h1Xsec") ;\r
-    TH1F * htrial = l->FindObject("h1Trials") ;\r
-    if(htrial->GetEntries()!=hxs->GetEntries() || htrial->GetEntries()==0){\r
-      cout<<"Careful!!! Entries in histo for cross section "<<hxs->GetEntries()<< ", for trials "<<htrial->GetEntries()<<endl;\r
-      continue;\r
-    }          \r
-    xsection += hxs->GetBinContent(1);\r
-    ntrials  += htrial->GetBinContent(1)/nEventsPerFile;\r
-    cout << "Chain: xsection " <<hxs->GetBinContent(1)<<" ntrials "<<htrial->GetBinContent(1)<<endl; \r
-    cout << "nEventsPerFile = " << nEventsPerFile <<endl;      \r
-    cout << "Accumulating ntrials/event = " << ntrials << endl;\r
-  }\r
-  else {\r
-    Double_t xs = 0;\r
-    UInt_t ntr = 0;\r
-    TTree * xstree = (TTree*)fxs->Get("Xsection");\r
-    xstree->SetBranchAddress("xsection",&xs);\r
-    xstree->SetBranchAddress("ntrials",&ntr);\r
-    xstree->GetEntry(0);\r
-    cout << "Chain: xsection " <<xs<<" ntrials "<<ntr<<endl;\r
-    xsection += xs ;\r
-    ntrials += (float) ntr/nEventsPerFile;\r
-    cout << "Latest values read are ntr = " << ntr << " and nEventsPerFile = " << nEventsPerFile <<endl;       \r
-    cout << "Accumulating ntrials/event = " << ntrials <<endl;\r
-  }  \r
-}\r
-\r
-void ProcessEnvironment(){\r
-\r
-  if (gSystem->Getenv("anaInputData"))\r
-     kInputData = gSystem->Getenv("anaInputData");\r
-\r
-  if (gSystem->Getenv("anakMC"))\r
-     kMC = atoi(gSystem->Getenv("anakMC"));\r
-\r
-  if (gSystem->Getenv("MODE"))\r
-     mode = atoi(gSystem->Getenv("MODE"));\r
-\r
-  if (gSystem->Getenv("CONFIG1"))\r
-     sprintf(sconfig1,gSystem->Getenv("CONFIG1"));\r
-\r
-  if (gSystem->Getenv("CONFIG2"))\r
-      sprintf(sconfig2,gSystem->Getenv("CONFIG2"));\r
-\r
-  if (gSystem->Getenv("CONFIG3"))\r
-      sprintf(sconfig3,gSystem->Getenv("CONFIG3"));\r
-\r
-  if (gSystem->Getenv("SEVENT"))\r
-      sevent = atoi (gSystem->Getenv("SEVENT"));\r
-       \r
-      printf("Process: Variables: kInputData %s, kMC %d, mode %d, config2 %s, config3 %s, sevent %d\n",kInputData.Data(),kMC,mode,sconfig2,sconfig3,sevent);\r
-\r
-}\r