ROOT logo
/* $Id:  $ */
//--------------------------------------------------
// Example macro to do analysis with the 
// analysis classes in CaloTrackCorrelations
// Can be executed with Root and AliRoot
//
// Pay attention to the options and definitions
// set in the lines below
//
//  Author : Gustavo Conesa Balbastre (INFN-LNF)
//
//-------------------------------------------------
enum anaModes {mLocal=0, mPROOF=1, mPlugin=2, mGRID=3};
//mLocal    = 0: Analyze locally files in your computer
//mPROOF    = 1: Analyze files on GRID with Plugin
//mPlugin   = 2: Analyze files on GRID with Plugin
//mGRID     = 3: Analyze files on GRID, jobs launched from aliensh

//---------------------------------------------------------------------------
// Settings to read locally several files, only for "mLocal" mode
// The different values are default, they can be set with environmental 
// variables: INDIR, PATTERN, NFILES, respectivelly

char * kInDir   = "/user/data/files/"; 
char * kPattern = ""; // Data are in files kInDir/kPattern+i 
Int_t  kFile    = 6; 

//---------------------------------------------------------------------------
// Dataset for proof analysis, mode=mPROOF
// char * kDataset = "/alice/vernet/PbPb_LHC10h_ESD";

char *  kDatasetPROOF     = "/alice/vernet/LHC11b_149646";
Int_t   kDatasetNMaxFiles = 20;
TString ccin2p3UserName   = "arbor" ;
TString alienUserName     = "narbor" ;

//---------------------------------------------------------------------------
// Collection file for grid analysis

char * kXML = "collection.xml";

//---------------------------------------------------------------------------
//Scale histograms from file. Change to kTRUE when xsection file exists
//Put name of file containing xsection 
//Put number of events per ESD file
//This is an specific case for normalization of Pythia files.
const char * kXSFileName = "pyxsec.root";

//---------------------------------------------------------------------------

//Set some default values, but used values are set in the code!

Bool_t  kMC        = kFALSE; //With real data kMC = kFALSE
TString kInputData = "ESD"; //ESD, AOD, MC, deltaAOD
Int_t   kYear      = 2011;
TString kCollision = "pp";
Bool_t  outAOD     = kFALSE; //Some tasks doesnt need it.
TString kTreeName;
TString kPass      = "";
char    kTrigger[1024];
Int_t   kRun       = 0;

//________________________
void anaGenKine(Int_t mode=mGRID)
{
  // Main
  
  //--------------------------------------------------------------------
  // Load analysis libraries
  // Look at the method below, 
  // change whatever you need for your analysis case
  // ------------------------------------------------------------------
  
  LoadLibraries(mode) ;
  //gSystem->ListLibraries();
  
  //-------------------------------------------------------------------------------------------------
  //Create chain from ESD and from cross sections files, look below for options.
  //-------------------------------------------------------------------------------------------------
  
  // Set kInputData and kTreeName looking to the kINDIR
  
  //CheckInputData(mode);
  
  // Check global analysis settings  
  
  //CheckEnvironmentVariables();
  
  //printf("*********************************************\n");
  //printf("*** Input data < %s >, pass %s, tree < %s >, MC?  < %d > ***\n",kInputData.Data(),kPass.Data(),kTreeName.Data(),kMC);
  
  //printf("*********************************************\n");
  kTreeName  = "TE";
  kInputData = "MC";
  TChain * chain   = new TChain(kTreeName) ;
  TChain * chainxs = new TChain("Xsection") ;
  
  chain  ->AddFile("galice.root");
  chainxs->AddFile("pyxsec.root");

  //CreateChain(mode, chain, chainxs); 
  
  Double_t scale = -1;
  printf("===== kMC %d, chainxs %p\n",kMC,chainxs);
  if(chainxs && chainxs->GetEntries() > 0)
  {
    Int_t nfiles = chainxs->GetEntries();
    
    //Get the cross section
    Double_t xsection = 0; 
    Float_t ntrials   = 0;
    
    GetAverageXsection(chainxs, xsection, ntrials);
    
    Int_t    nEventsPerFile = chain->GetEntries() / nfiles;
    
    Double_t trials = ntrials / nEventsPerFile ;
    
    scale = xsection/trials;
    
    printf("Get Cross section : nfiles  %d, nevents %d, nevents per file %d \n",nfiles, chain->GetEntries(),nEventsPerFile);     
    printf("                    ntrials %d, trials %2.2f, xs %2.2e, scale factor %2.2e\n", ntrials,trials,xsection,scale);
    
  } 
  
  printf("*********************************************\n");
  printf("number of entries # %lld, skipped %d\n", chain->GetEntries()) ; 	
  printf("*********************************************\n");
  
  if(!chain)
  { 
    printf("STOP, no chain available\n"); 
    return;
  }
  
  AliLog::SetGlobalLogLevel(AliLog::kError);//Minimum prints on screen
  
  //------------------------------------------
  //  Alien handler part
  //------------------------------------------
  AliAnalysisGrid *alienHandler=0x0;
  if(mode==mPlugin)
  {
    // Create and configure the alien handler plugin
    gROOT->LoadMacro("CreateAlienHandler.C");
    alienHandler = CreateAlienHandler();
    if (!alienHandler) return;
  }  
  
  //--------------------------------------
  // Make the analysis manager
  //-------------------------------------
  AliAnalysisManager *mgr  = new AliAnalysisManager("Manager", "Manager");
  //AliAnalysisManager::SetUseProgressBar(kTRUE);
  //mgr->SetSkipTerminate(kTRUE);
  //mgr->SetNSysInfo(1);
  
//  if(mode==mPlugin)
//  {
//    // Connect plugin to the analysis manager
//    mgr->SetGridHandler(alienHandler);
//  }
  
  // MC handler
  if((kMC || kInputData == "MC") && !kInputData.Contains("AOD"))
  {
    AliMCEventHandler* mcHandler = new AliMCEventHandler();
    mcHandler->SetReadTR(kFALSE);//Do not search TrackRef file
    mgr->SetMCtruthEventHandler(mcHandler);
    if( kInputData == "MC") 
    {
      cout<<"MC INPUT EVENT HANDLER"<<endl;
      mgr->SetInputEventHandler(NULL);
    }
  }
  
  
//  // AOD output handler
//  if(kInputData!="deltaAOD" && outAOD)
//  {
//    cout<<"Init output handler"<<endl;
//    AliAODHandler* aodoutHandler   = new AliAODHandler();
//    aodoutHandler->SetOutputFileName("aod.root");
//    ////aodoutHandler->SetCreateNonStandardAOD();
//    mgr->SetOutputEventHandler(aodoutHandler);
//  }
//  
//  //input
//  
//  if(kInputData == "ESD")
//  {
//    // ESD handler
//    AliESDInputHandler *esdHandler = new AliESDInputHandler();
//    esdHandler->SetReadFriends(kFALSE);
//    mgr->SetInputEventHandler(esdHandler);
//    cout<<"ESD handler "<<mgr->GetInputEventHandler()<<endl;
//  }
//  else if(kInputData.Contains("AOD"))
//  {
//    // AOD handler
//    AliAODInputHandler *aodHandler = new AliAODInputHandler();
//    mgr->SetInputEventHandler(aodHandler);
//    if(kInputData == "deltaAOD") aodHandler->AddFriend("deltaAODCaloTrackCorr.root");
//    cout<<"AOD handler "<<mgr->GetInputEventHandler()<<endl;
//  }
  
  //mgr->RegisterExternalFile("deltaAODCaloTrackCorr.root");
  mgr->SetDebugLevel(1); // For debugging, do not uncomment if you want no messages.
  
  TString outputFile = AliAnalysisManager::GetCommonFileName(); 
   
  gROOT->LoadMacro("AddTaskGenKine.C");  
  
 
  AliAnalysisTaskCaloTrackCorrelation *ana   = AddTaskGenKine(outputFile, scale);
    
  
  //-----------------------
  // Run the analysis
  //-----------------------    
  mgr->InitAnalysis();
  mgr->PrintStatus();
  
  if      (mode == mPlugin) mgr->StartAnalysis("grid");
  else if (mode == mPROOF ) mgr->StartAnalysis("proof",chain);
  else                      mgr->StartAnalysis("local",chain);
  
  cout <<" Analysis ended sucessfully "<< endl ;
  
}

//_____________________________
void  LoadLibraries(Int_t mode)
{
  
  if (mode == mPROOF) {
    //TProof::Mgr("ccalpmaster")->SetROOTVersion("ALICE_v5-27-06b");
    gROOT->LoadMacro("/afs/in2p3.fr/group/alice/laf/EnableAliRootForLAF.C");
    TProof* proof = EnableAliRootForLAF("ccaplmaster",nPROOFWorkers.Data(),ccin2p3UserName.Data(),alienUserName.Data(),"",kFALSE,kTRUE,kTRUE,"OADB:ANALYSIS:ANALYSISalice:AOD:ESD:CORRFW:STEERBase:EMCALUtils:PHOSUtils:PWGCaloTrackCorrBase:PWGGACaloTrackCorrelations");
    
    //  TProof* proof = TProof::Open("ccaplmaster",Form("workers=%s",nPROOFWorkers.Data()));
    
    //     //proof->ClearPackages();
    //     proof->UploadPackage("STEERBase");
    //     proof->UploadPackage("ESD");
    //     proof->UploadPackage("AOD");
    //     proof->UploadPackage("ANALYSIS");
    //     proof->UploadPackage("OADB");
    //     proof->UploadPackage("ANALYSISalice");
    //     proof->UploadPackage("CORRFW");
    //     //proof->UploadPackage("JETAN");
    //     proof->UploadPackage("PHOSUtils");
    //     proof->UploadPackage("EMCALUtils");
    //     proof->UploadPackage("PWGCaloTrackCorrBase");
    //     proof->UploadPackage("PWGGACaloTrackCorrelations");

    //     proof->EnablePackage("STEERBase");
    //     proof->EnablePackage("ESD");
    //     proof->EnablePackage("AOD");
    //     proof->EnablePackage("ANALYSIS");
    //     proof->EnablePackage("OADB");
    //     proof->EnablePackage("ANALYSISalice");
    //     proof->EnablePackage("CORRFW");
    //     //proof->EnablePackage("JETAN");
    //     proof->EnablePackage("PHOSUtils");
    //     proof->EnablePackage("EMCALUtils");
    //     proof->EnablePackage("PWGCaloTrackCorrBase");
    //     proof->EnablePackage("PWGGACaloTrackCorrelations");

    return;
  }  
  
  //--------------------------------------
  // Load the needed libraries most of them already loaded by aliroot
  //--------------------------------------
  gSystem->Load("libTree.so");
  gSystem->Load("libGeom.so");
  gSystem->Load("libVMC.so");
  gSystem->Load("libXMLIO.so");
  gSystem->Load("libMatrix.so");
  gSystem->Load("libPhysics.so");
  gSystem->Load("libMinuit.so"); // Root + libraries to if reclusterization is done
  
  gSystem->Load("libSTEERBase.so");
  gSystem->Load("libGui.so"); // Root + libraries to if reclusterization is done
  gSystem->Load("libCDB.so"); // Root + libraries to if reclusterization is done
  gSystem->Load("libESD.so"); // Root + libraries to if reclusterization is done
  gSystem->Load("libAOD.so");
  gSystem->Load("libRAWDatabase.so"); // Root + libraries to if reclusterization is done
  gSystem->Load("libProof.so"); 
  gSystem->Load("libOADB");
  gSystem->Load("libANALYSIS.so");
  gSystem->Load("libSTEER.so"); // Root + libraries to if reclusterization is done
  
  gSystem->Load("libRAWDatarec.so"); // Root + libraries to if reclusterization is done
  gSystem->Load("libRAWDatasim.so"); // Root + libraries to if reclusterization is done
  gSystem->Load("libVZERObase.so");  // Root + libraries to if reclusterization is done
  gSystem->Load("libVZEROrec.so");   // Root + libraries to if reclusterization is done
  
  gSystem->Load("libEMCALUtils");
  //SetupPar("EMCALUtils");
  gSystem->Load("libEMCALraw");  // Root + libraries to if reclusterization is done
  gSystem->Load("libEMCALbase"); // Root + libraries to if reclusterization is done
  gSystem->Load("libEMCALsim");  // Root + libraries to if reclusterization is done
  gSystem->Load("libEMCALrec");  // Root + libraries to if reclusterization is done
  //SetupPar("EMCALraw");
  //SetupPar("EMCALbase");
  //SetupPar("EMCALsim");
  //SetupPar("EMCALrec");
  
  gSystem->Load("libANALYSISalice.so");
  //gSystem->Load("libTENDER.so"); 
  //gSystem->Load("libTENDERSupplies.so");
  
  gSystem->Load("libPHOSUtils");
  gSystem->Load("libEMCALUtils");
  gSystem->Load("libPWGCaloTrackCorrBase");
  gSystem->Load("libPWGGACaloTrackCorrelations");
  //SetupPar("PWGCaloTrackCorrBase");
  //SetupPar("PWGGACaloTrackCorrelations");
  
 
  //gSystem->Load("libJETAN");
  //gSystem->Load("FASTJETAN");
  //gSystem->Load("PWGJE");

  //gSystem->Load("libCORRFW.so");
  //gSystem->Load("libPWGGAGammaConv.so"); 
  //SetupPar("PWGGAGammaConv"); 
  
  // needed for plugin?
  gSystem->AddIncludePath("-I$ALICE_ROOT");
  gSystem->AddIncludePath("-I./");     
  
}

//_________________________________
void SetupPar(char* pararchivename)
{
  //Load par files, create analysis libraries
  //For testing, if par file already decompressed and modified
  //classes then do not decompress.
  
  TString cdir(Form("%s", gSystem->WorkingDirectory() )) ; 
  TString parpar(Form("%s.par", pararchivename)) ; 
  
  if ( gSystem->AccessPathName(pararchivename) ) {  
    TString processline = Form(".! tar xvzf %s",parpar.Data()) ;
    gROOT->ProcessLine(processline.Data());
  }
  
  TString ocwd = gSystem->WorkingDirectory();
  gSystem->ChangeDirectory(pararchivename);
  
  // check for BUILD.sh and execute
  if (!gSystem->AccessPathName("PROOF-INF/BUILD.sh")) {
    printf("*******************************\n");
    printf("*** Building PAR archive    ***\n");
    cout<<pararchivename<<endl;
    printf("*******************************\n");
    
    if (gSystem->Exec("PROOF-INF/BUILD.sh")) {
      Error("runProcess","Cannot Build the PAR Archive! - Abort!");
      return -1;
    }
  }
  // check for SETUP.C and execute
  if (!gSystem->AccessPathName("PROOF-INF/SETUP.C")) {
    printf("*******************************\n");
    printf("*** Setup PAR archive       ***\n");
    cout<<pararchivename<<endl;
    printf("*******************************\n");
    gROOT->Macro("PROOF-INF/SETUP.C");
  }
  
  gSystem->ChangeDirectory(ocwd.Data());
  printf("Current dir: %s\n", ocwd.Data());
}

//______________________________________
void CheckInputData(const anaModes mode)
{
  //Sets input data and tree
  
  TString ocwd = gSystem->WorkingDirectory();
  
  //---------------------------------------
  //Local files analysis
  //---------------------------------------
  if(mode == mLocal){    
    //If you want to add several ESD files sitting in a common directory INDIR
    //Specify as environmental variables the directory (INDIR), the number of files 
    //to analyze (NFILES) and the pattern name of the directories with files (PATTERN)
    
    if(gSystem->Getenv("INDIR"))  
      kInDir = gSystem->Getenv("INDIR") ; 
    else cout<<"INDIR not set, use default: "<<kInDir<<endl;	
    
    TString sindir(kInDir);
    if     (sindir.Contains("pass1")) kPass = "pass1";
    else if(sindir.Contains("pass2")) kPass = "pass2";
    else if(sindir.Contains("pass3")) kPass = "pass3";
    
    if(gSystem->Getenv("PATTERN"))   
      kPattern = gSystem->Getenv("PATTERN") ; 
    else  cout<<"PATTERN not set, use default: "<<kPattern<<endl;
    
    cout<<"INDIR   : "<<kInDir<<endl;
    cout<<"NFILES  : "<<kFile<<endl;
    
    char fileE[120] ;   
    char fileA[120] ;   
    char fileG[120] ;
    char fileEm[120] ;   
    for (Int_t event = 0 ; event < kFile ; event++) {
      sprintf(fileE,  "%s/%s%d/AliESDs.root",    kInDir,kPattern,event) ; 
      sprintf(fileA,  "%s/%s%d/AliAOD.root",     kInDir,kPattern,event) ; 
      sprintf(fileG,  "%s/%s%d/galice.root",     kInDir,kPattern,event) ; 
      sprintf(fileEm, "%s/%s%d/embededAOD.root", kInDir,kPattern,event) ; 
      
      TFile * fESD = TFile::Open(fileE) ; 
      TFile * fAOD = TFile::Open(fileA) ; 
      
      //Check if file exists and add it, if not skip it
      if (fESD) 
      {
        kTreeName  = "esdTree";
        kInputData = "ESD";
        TFile * fG = TFile::Open(fileG);
        if(fG) { kMC = kTRUE; fG->Close();}
        else     kMC = kFALSE;
        
        // Get run number
        TTree* esdTree = (TTree*)fESD->Get("esdTree");
        AliESDEvent* esd = new AliESDEvent();
        esd->ReadFromTree(esdTree);
        esdTree->GetEvent(0);
        kRun = esd->GetRunNumber();
        
        return;
      }
      else if(fAOD)
      {
        kTreeName  = "aodTree";
        kInputData = "AOD";
        if(((TTree*) fAOD->Get("aodTree"))->GetBranch("mcparticles")) kMC=kTRUE;
        else kMC = kFALSE;
        
        // Get run number
        TTree* aodTree = (TTree*)fAOD->Get("aodTree");
        AliAODEvent* aod = new AliAODEvent();
        aod->ReadFromTree(aodTree);
        aodTree->GetEvent(0);
        kRun = aod->GetRunNumber();
        return;
      }
      else if(TFile::Open(fileEm))
      {
        kTreeName  = "aodTree";
        kInputData = "AOD";
        kMC        = kTRUE;
        
        return;
      }
      else if(TFile::Open(fileG))
      {
        kTreeName  = "TE";
        kInputData = "MC";
        kMC        = kTRUE;
        return;
      }
    }
    
    if(fESD) fESD->Close();
    if(fAOD) fAOD->Close();
    
  }// local files analysis
  
  //------------------------------
  //GRID xml files
  //-----------------------------
  else if(mode == mGRID){
    //Get colection file. It is specified by the environmental
    //variable XML
    
    if(gSystem->Getenv("XML") )
      kXML = gSystem->Getenv("XML");
    else
      sprintf(kXML, "collection.xml") ; 
    
    if (!TFile::Open(kXML)) {
      printf("No collection file with name -- %s -- was found\n",kXML);
      return ;
    }
    else cout<<"XML file "<<kXML<<endl;
    
    //Load necessary libraries and connect to the GRID
    gSystem->Load("libNetx.so") ; 
    gSystem->Load("libRAliEn.so"); 
    TGrid::Connect("alien://") ;
    
    //Feed Grid with collection file
    TGridCollection * collection = (TGridCollection*) TAlienCollection::Open(kXML);
    if (! collection) {
      AliError(Form("%s not found", kXML)) ; 
      return kFALSE ; 
    }
    TGridResult* result = collection->GetGridResult("",0 ,0);
    
    for (Int_t index = 0; index < result->GetEntries(); index++) {
      TString alienURL = result->GetKey(index, "turl") ; 
      cout << "================== " << alienURL << endl ; 
      
      if     (alienURL.Contains("pass1")) kPass = "pass1";
      else if(alienURL.Contains("pass2")) kPass = "pass2";
      else if(alienURL.Contains("pass3")) kPass = "pass3";
      
      kRun = AliAnalysisManager::GetRunFromAlienPath(alienURL.Data());
      printf("Run number from alien path = %d\n",kRun);
      
      TFile * fAOD = 0 ; 
      //Check if file exists and add it, if not skip it
      if (alienURL.Contains("AliESDs.root"))  
      {
        kTreeName  = "esdTree";
        kInputData = "ESD";
        alienURL.ReplaceAll("AliESDs.root","galice.root");
        if(TFile::Open(alienURL)) kMC=kTRUE;
        else kMC = kFALSE;
        return;
      }
      else if(alienURL.Contains("AliAOD.root"))
      {
        kTreeName  = "aodTree";
        kInputData = "AOD";
        fAOD = TFile::Open(alienURL);
        if(((TTree*) fAOD->Get("aodTree"))->GetBranch("mcparticles")) kMC=kTRUE;
        else kMC = kFALSE;
        return;
      }
      else if(alienURL.Contains("embededAOD.root"))
      {
        kTreeName  = "aodTree";
        kInputData = "AOD";
        kMC=kTRUE;
        return;
      }
      else if(alienURL.Contains("galice.root"))
      {
        kTreeName  = "TE";
        kInputData = "MC";
        kMC=kTRUE;
        return;
      } 
    }
  }// xml analysis
  //------------------------------
  //PROOF files
  //-----------------------------
  else if(mode == mPROOF){
    
    TFileCollection* coll  = gProof->GetDataSet(kDatasetPROOF)->GetStagedSubset();
    
    TIter iter(coll->GetList());
    
    TFileInfo* fileInfo = 0;
    while ((fileInfo = dynamic_cast<TFileInfo*> (iter())))
    {
      if (fileInfo->GetFirstUrl()) {
        TString ProofURL = fileInfo->GetFirstUrl()->GetUrl();
        cout << "================== " << ProofURL << endl ; 
        
        if     (ProofURL.Contains("pass1")) kPass = "pass1";
        else if(ProofURL.Contains("pass2")) kPass = "pass2";
        else if(ProofURL.Contains("pass3")) kPass = "pass3";
        
        kRun = AliAnalysisManager::GetRunFromAlienPath(ProofURL.Data());
        printf("Run number from alien path = %d\n",kRun);
        
        TFile * fAOD = 0 ; 
        //Check if file exists and add it, if not skip it
        if (ProofURL.Contains("AliESDs.root"))  
        {
          kTreeName  = "esdTree";
          kInputData = "ESD";
          alienURL.ReplaceAll("AliESDs.root","galice.root");
          if(TFile::Open(ProofURL)) kMC=kTRUE;
          else kMC = kFALSE;
          
          return;
        }
        else if(ProofURL.Contains("AliAOD.root"))
        {
          kTreeName  = "aodTree";
          kInputData = "AOD";
          fAOD = TFile::Open(ProofURL);
          if(((TTree*) fAOD->Get("aodTree"))->GetBranch("mcparticles")) kMC=kTRUE;
          else kMC = kFALSE;
          return;
        }
        else if(ProofURL.Contains("embededAOD.root"))
        {
          kTreeName  = "aodTree";
          kInputData = "AOD";
          kMC=kTRUE;
          return;
        }
        else if(ProofURL.Contains("galice.root"))
        {
          kTreeName  = "TE";
          kInputData = "MC";
          kMC=kTRUE;
          return;
        } 
      }
    }
  }// proof analysis
  
  gSystem->ChangeDirectory(ocwd.Data());
  
}

//_____________________________________________________________________
void CreateChain(const anaModes mode, TChain * chain, TChain * chainxs)
{
  //Fills chain with data
  TString ocwd = gSystem->WorkingDirectory();
  
  //---------------------------------------
  // Local files analysis
  //---------------------------------------
  if(mode == mLocal){    
    //If you want to add several ESD files sitting in a common directory INDIR
    //Specify as environmental variables the directory (INDIR), the number of files 
    //to analyze (NFILES) and the pattern name of the directories with files (PATTERN)
    
    if(gSystem->Getenv("INDIR"))  
      kInDir = gSystem->Getenv("INDIR") ; 
    else cout<<"INDIR not set, use default: "<<kInDir<<endl;	
    
    if(gSystem->Getenv("PATTERN"))   
      kPattern = gSystem->Getenv("PATTERN") ; 
    else  cout<<"PATTERN not set, use default: "<<kPattern<<endl;
    
    if(gSystem->Getenv("NFILES"))
      kFile = atoi(gSystem->Getenv("NFILES")) ;
    else cout<<"NFILES not set, use default: "<<kFile<<endl;
    
    //Check if env variables are set and are correct
    if ( kInDir  && kFile) {
      printf("Get %d files from directory %s\n",kFile,kInDir);
      if ( ! gSystem->cd(kInDir) ) {//check if ESDs directory exist
        printf("%s does not exist\n", kInDir) ;
        return ;
      }
      
      //if(gSystem->Getenv("XSFILE"))  
      //kXSFileName = gSystem->Getenv("XSFILE") ; 
      //else cout<<" XS file name not set, use default: "<<kXSFileName<<endl;	
      char * kGener = gSystem->Getenv("GENER");
      if(kGener) {
        cout<<"GENER "<<kGener<<endl;
        if     (!strcmp(kGener,"PYTHIA")) kXSFileName = "pyxsec.root";
        else if(!strcmp(kGener,"HERWIG")) kXSFileName = "hexsec.root";
        else cout<<" UNKNOWN GENER, use default: "<<kXSFileName<<endl;
      }
      else cout<<" GENER not set, use default xs file name: "<<kXSFileName<<endl;
      
      cout<<"INDIR   : "<<kInDir     <<endl;
      cout<<"NFILES  : "<<kFile      <<endl;
      cout<<"PATTERN : "<<kPattern   <<endl;
      cout<<"XSFILE  : "<<kXSFileName<<endl;
      
      TString datafile="";
      if     (kInputData == "ESD")        datafile = "AliESDs.root" ;
      else if(kInputData.Contains("AOD")) datafile = "AliAOD.root"  ;
      else if(kInputData == "MC")         datafile = "galice.root"  ;
      
      //Loop on ESD/AOD/MC files, add them to chain
      Int_t event =0;
      Int_t skipped=0 ; 
      char file[120] ;
      char filexs[120] ;
      
      for (event = 0 ; event < kFile ; event++) {
        sprintf(file,   "%s/%s%d/%s", kInDir,kPattern,event,datafile.Data()) ; 
        sprintf(filexs, "%s/%s%d/%s", kInDir,kPattern,event,kXSFileName) ; 
        TFile * fData = 0 ; 
        //Check if file exists and add it, if not skip it
        if ( fData = TFile::Open(file)) {
          if ( fData->Get(kTreeName) ) { 
            printf("++++ Adding %s\n", file) ;
            chain->AddFile(file);
            chainxs->Add(filexs) ; 
          }
        }
        else { 
          printf("---- Skipping %s\n", file) ;
          skipped++ ;
        }
      }
    }
    else {
      TString input = "AliESDs.root" ;
      cout<<">>>>>> No list added, take a single file <<<<<<<<< "<<input<<endl;
      chain->AddFile(input);
    }
    
  }// local files analysis
  
  //------------------------------
  // GRID xml files
  //------------------------------
  else if(mode == mGRID){
    //Get colection file. It is specified by the environmental
    //variable XML
    
    //Feed Grid with collection file
    TGridCollection * collection = (TGridCollection*) TAlienCollection::Open(kXML);
    if (! collection) {
      AliError(Form("%s not found", kXML)) ; 
      return kFALSE ; 
    }
    
    TGridResult* result = collection->GetGridResult("",0 ,0);
    
    // Makes the ESD chain 
    printf("*** Getting the Chain       ***\n");
    for (Int_t index = 0; index < result->GetEntries(); index++) {
      TString alienURL = result->GetKey(index, "turl") ; 
      cout << "================== " << alienURL << endl ; 
      chain->Add(alienURL) ; 
      alienURL.ReplaceAll("AliESDs.root",kXSFileName);
      chainxs->Add(alienURL) ; 
    }
  }// xml analysis
  
  //------------------------------
  // PROOF
  //------------------------------
  else if (mode == mPROOF) {
    
    TFileCollection* ds= gProof->GetDataSet(kDatasetPROOF)->GetStagedSubset();
    
    gROOT->LoadMacro("/afs/in2p3.fr/group/alice/laf/dataset_management/CreateChainFromDataSet.C");
    chain = CreateChainFromDataSet(ds, kTreeName , kDatasetNMaxFiles);
    printf("chain has %d entries\n",chain->GetEntries());
  }
  
  gSystem->ChangeDirectory(ocwd.Data());
  
}

//______________________________
void CheckEnvironmentVariables()
{
  
  sprintf(kTrigger,"");
  
  Bool_t bRecalibrate = kFALSE;
  Bool_t bBadChannel = kFALSE;
  
  for (int i=0; i< gApplication->Argc();i++){
    
#ifdef VERBOSEARGS
    
    printf("Arg  %d:  %s\n",i,gApplication->Argv(i));
    
#endif
    
    TString sRun = "";
    
    if (!(strcmp(gApplication->Argv(i),"--trigger")))
      sprintf(trigger,gApplication->Argv(i+1));
    
    if (!(strcmp(gApplication->Argv(i),"--recalibrate")))
      bRecalibrate = atoi(gApplication->Argv(i+1));
    
    if (!(strcmp(gApplication->Argv(i),"--badchannel")))
      bBadChannel = atoi(gApplication->Argv(i+1));
    
    if (!(strcmp(gApplication->Argv(i),"--run"))){
      sRun = gApplication->Argv(i+1);
      if(sRun.Contains("LHC10")) {
        kYear = 2010;
      }
      else {
        if(kRun <=0){
          kRun = atoi(gApplication->Argv(i+1));
        }
        else printf("** Run number already set  to %d, do not set to %d\n",kRun,atoi(gApplication->Argv(i+1)));
      }//numeric run
    }//--run available
    
  }// args loop
  
  if(!sRun.Contains("LHC10")){
    if     ( kRun < 140000) 
    {
      kYear = 2010;
      if( kRun >= 136851 ) kCollision = "PbPb";
    }
    else if( kRun < 170600)
    {
      kYear = 2011;
      if( kRun >= 166500 ) kCollision = "PbPb";
    }
    else 
    {
      kYear = 2012;

    }
  }
  
  if(kMC) sprintf(kTrigger,"");
  
  printf("*********************************************\n");
  //printf("*** Settings trigger %s, recalibrate %d, remove bad channels %d, year %d, collision %s, run %d ***\n",
  //       kTrigger,bRecalibrate,bBadChannel, kYear,kCollision.Data(), kRun);
  printf("*** Settings year %d, collision %s, run %d ***\n",kYear,kCollision.Data(), kRun);
  printf("*********************************************\n");
  
}


//_________________________________________________________________
void GetAverageXsection(TTree * tree, Double_t & xs, Float_t & ntr)
{
  // Read the PYTHIA statistics from the file pyxsec.root created by
  // the function WriteXsection():
  // integrated cross section (xsection) and
  // the  number of Pyevent() calls (ntrials)
  // and calculate the weight per one event xsection/ntrials
  // The spectrum calculated by a user should be
  // multiplied by this weight, something like this:
  // TH1F *userSpectrum ... // book and fill the spectrum
  // userSpectrum->Scale(weight)
  //
  // Yuri Kharlov 19 June 2007
  // Gustavo Conesa 15 April 2008
  Double_t xsection = 0;
  UInt_t    ntrials = 0;
  xs = 0;
  ntr = 0;
  
  Int_t nfiles =  tree->GetEntries()  ;
  if (tree && nfiles > 0) {
    tree->SetBranchAddress("xsection",&xsection);
    tree->SetBranchAddress("ntrials" ,&ntrials );
    for(Int_t i = 0; i < nfiles; i++){
      tree->GetEntry(i);
      xs  += xsection ;
      ntr += ntrials ;
      cout << "xsection " <<xsection<<" ntrials "<<ntrials<<endl; 
    }
    
    xs =   xs /  nfiles;
    ntr =  ntr / nfiles;
    cout << "-----------------------------------------------------------------"<<endl;
    cout << "Average of "<< nfiles<<" files: xsection " <<xs<<" ntrials "<<ntr<<endl; 
    cout << "-----------------------------------------------------------------"<<endl;
  } 
  else cout << " >>>> Empty tree !!!! <<<<< "<<endl;
  
}



 anaGenKine.C:1
 anaGenKine.C:2
 anaGenKine.C:3
 anaGenKine.C:4
 anaGenKine.C:5
 anaGenKine.C:6
 anaGenKine.C:7
 anaGenKine.C:8
 anaGenKine.C:9
 anaGenKine.C:10
 anaGenKine.C:11
 anaGenKine.C:12
 anaGenKine.C:13
 anaGenKine.C:14
 anaGenKine.C:15
 anaGenKine.C:16
 anaGenKine.C:17
 anaGenKine.C:18
 anaGenKine.C:19
 anaGenKine.C:20
 anaGenKine.C:21
 anaGenKine.C:22
 anaGenKine.C:23
 anaGenKine.C:24
 anaGenKine.C:25
 anaGenKine.C:26
 anaGenKine.C:27
 anaGenKine.C:28
 anaGenKine.C:29
 anaGenKine.C:30
 anaGenKine.C:31
 anaGenKine.C:32
 anaGenKine.C:33
 anaGenKine.C:34
 anaGenKine.C:35
 anaGenKine.C:36
 anaGenKine.C:37
 anaGenKine.C:38
 anaGenKine.C:39
 anaGenKine.C:40
 anaGenKine.C:41
 anaGenKine.C:42
 anaGenKine.C:43
 anaGenKine.C:44
 anaGenKine.C:45
 anaGenKine.C:46
 anaGenKine.C:47
 anaGenKine.C:48
 anaGenKine.C:49
 anaGenKine.C:50
 anaGenKine.C:51
 anaGenKine.C:52
 anaGenKine.C:53
 anaGenKine.C:54
 anaGenKine.C:55
 anaGenKine.C:56
 anaGenKine.C:57
 anaGenKine.C:58
 anaGenKine.C:59
 anaGenKine.C:60
 anaGenKine.C:61
 anaGenKine.C:62
 anaGenKine.C:63
 anaGenKine.C:64
 anaGenKine.C:65
 anaGenKine.C:66
 anaGenKine.C:67
 anaGenKine.C:68
 anaGenKine.C:69
 anaGenKine.C:70
 anaGenKine.C:71
 anaGenKine.C:72
 anaGenKine.C:73
 anaGenKine.C:74
 anaGenKine.C:75
 anaGenKine.C:76
 anaGenKine.C:77
 anaGenKine.C:78
 anaGenKine.C:79
 anaGenKine.C:80
 anaGenKine.C:81
 anaGenKine.C:82
 anaGenKine.C:83
 anaGenKine.C:84
 anaGenKine.C:85
 anaGenKine.C:86
 anaGenKine.C:87
 anaGenKine.C:88
 anaGenKine.C:89
 anaGenKine.C:90
 anaGenKine.C:91
 anaGenKine.C:92
 anaGenKine.C:93
 anaGenKine.C:94
 anaGenKine.C:95
 anaGenKine.C:96
 anaGenKine.C:97
 anaGenKine.C:98
 anaGenKine.C:99
 anaGenKine.C:100
 anaGenKine.C:101
 anaGenKine.C:102
 anaGenKine.C:103
 anaGenKine.C:104
 anaGenKine.C:105
 anaGenKine.C:106
 anaGenKine.C:107
 anaGenKine.C:108
 anaGenKine.C:109
 anaGenKine.C:110
 anaGenKine.C:111
 anaGenKine.C:112
 anaGenKine.C:113
 anaGenKine.C:114
 anaGenKine.C:115
 anaGenKine.C:116
 anaGenKine.C:117
 anaGenKine.C:118
 anaGenKine.C:119
 anaGenKine.C:120
 anaGenKine.C:121
 anaGenKine.C:122
 anaGenKine.C:123
 anaGenKine.C:124
 anaGenKine.C:125
 anaGenKine.C:126
 anaGenKine.C:127
 anaGenKine.C:128
 anaGenKine.C:129
 anaGenKine.C:130
 anaGenKine.C:131
 anaGenKine.C:132
 anaGenKine.C:133
 anaGenKine.C:134
 anaGenKine.C:135
 anaGenKine.C:136
 anaGenKine.C:137
 anaGenKine.C:138
 anaGenKine.C:139
 anaGenKine.C:140
 anaGenKine.C:141
 anaGenKine.C:142
 anaGenKine.C:143
 anaGenKine.C:144
 anaGenKine.C:145
 anaGenKine.C:146
 anaGenKine.C:147
 anaGenKine.C:148
 anaGenKine.C:149
 anaGenKine.C:150
 anaGenKine.C:151
 anaGenKine.C:152
 anaGenKine.C:153
 anaGenKine.C:154
 anaGenKine.C:155
 anaGenKine.C:156
 anaGenKine.C:157
 anaGenKine.C:158
 anaGenKine.C:159
 anaGenKine.C:160
 anaGenKine.C:161
 anaGenKine.C:162
 anaGenKine.C:163
 anaGenKine.C:164
 anaGenKine.C:165
 anaGenKine.C:166
 anaGenKine.C:167
 anaGenKine.C:168
 anaGenKine.C:169
 anaGenKine.C:170
 anaGenKine.C:171
 anaGenKine.C:172
 anaGenKine.C:173
 anaGenKine.C:174
 anaGenKine.C:175
 anaGenKine.C:176
 anaGenKine.C:177
 anaGenKine.C:178
 anaGenKine.C:179
 anaGenKine.C:180
 anaGenKine.C:181
 anaGenKine.C:182
 anaGenKine.C:183
 anaGenKine.C:184
 anaGenKine.C:185
 anaGenKine.C:186
 anaGenKine.C:187
 anaGenKine.C:188
 anaGenKine.C:189
 anaGenKine.C:190
 anaGenKine.C:191
 anaGenKine.C:192
 anaGenKine.C:193
 anaGenKine.C:194
 anaGenKine.C:195
 anaGenKine.C:196
 anaGenKine.C:197
 anaGenKine.C:198
 anaGenKine.C:199
 anaGenKine.C:200
 anaGenKine.C:201
 anaGenKine.C:202
 anaGenKine.C:203
 anaGenKine.C:204
 anaGenKine.C:205
 anaGenKine.C:206
 anaGenKine.C:207
 anaGenKine.C:208
 anaGenKine.C:209
 anaGenKine.C:210
 anaGenKine.C:211
 anaGenKine.C:212
 anaGenKine.C:213
 anaGenKine.C:214
 anaGenKine.C:215
 anaGenKine.C:216
 anaGenKine.C:217
 anaGenKine.C:218
 anaGenKine.C:219
 anaGenKine.C:220
 anaGenKine.C:221
 anaGenKine.C:222
 anaGenKine.C:223
 anaGenKine.C:224
 anaGenKine.C:225
 anaGenKine.C:226
 anaGenKine.C:227
 anaGenKine.C:228
 anaGenKine.C:229
 anaGenKine.C:230
 anaGenKine.C:231
 anaGenKine.C:232
 anaGenKine.C:233
 anaGenKine.C:234
 anaGenKine.C:235
 anaGenKine.C:236
 anaGenKine.C:237
 anaGenKine.C:238
 anaGenKine.C:239
 anaGenKine.C:240
 anaGenKine.C:241
 anaGenKine.C:242
 anaGenKine.C:243
 anaGenKine.C:244
 anaGenKine.C:245
 anaGenKine.C:246
 anaGenKine.C:247
 anaGenKine.C:248
 anaGenKine.C:249
 anaGenKine.C:250
 anaGenKine.C:251
 anaGenKine.C:252
 anaGenKine.C:253
 anaGenKine.C:254
 anaGenKine.C:255
 anaGenKine.C:256
 anaGenKine.C:257
 anaGenKine.C:258
 anaGenKine.C:259
 anaGenKine.C:260
 anaGenKine.C:261
 anaGenKine.C:262
 anaGenKine.C:263
 anaGenKine.C:264
 anaGenKine.C:265
 anaGenKine.C:266
 anaGenKine.C:267
 anaGenKine.C:268
 anaGenKine.C:269
 anaGenKine.C:270
 anaGenKine.C:271
 anaGenKine.C:272
 anaGenKine.C:273
 anaGenKine.C:274
 anaGenKine.C:275
 anaGenKine.C:276
 anaGenKine.C:277
 anaGenKine.C:278
 anaGenKine.C:279
 anaGenKine.C:280
 anaGenKine.C:281
 anaGenKine.C:282
 anaGenKine.C:283
 anaGenKine.C:284
 anaGenKine.C:285
 anaGenKine.C:286
 anaGenKine.C:287
 anaGenKine.C:288
 anaGenKine.C:289
 anaGenKine.C:290
 anaGenKine.C:291
 anaGenKine.C:292
 anaGenKine.C:293
 anaGenKine.C:294
 anaGenKine.C:295
 anaGenKine.C:296
 anaGenKine.C:297
 anaGenKine.C:298
 anaGenKine.C:299
 anaGenKine.C:300
 anaGenKine.C:301
 anaGenKine.C:302
 anaGenKine.C:303
 anaGenKine.C:304
 anaGenKine.C:305
 anaGenKine.C:306
 anaGenKine.C:307
 anaGenKine.C:308
 anaGenKine.C:309
 anaGenKine.C:310
 anaGenKine.C:311
 anaGenKine.C:312
 anaGenKine.C:313
 anaGenKine.C:314
 anaGenKine.C:315
 anaGenKine.C:316
 anaGenKine.C:317
 anaGenKine.C:318
 anaGenKine.C:319
 anaGenKine.C:320
 anaGenKine.C:321
 anaGenKine.C:322
 anaGenKine.C:323
 anaGenKine.C:324
 anaGenKine.C:325
 anaGenKine.C:326
 anaGenKine.C:327
 anaGenKine.C:328
 anaGenKine.C:329
 anaGenKine.C:330
 anaGenKine.C:331
 anaGenKine.C:332
 anaGenKine.C:333
 anaGenKine.C:334
 anaGenKine.C:335
 anaGenKine.C:336
 anaGenKine.C:337
 anaGenKine.C:338
 anaGenKine.C:339
 anaGenKine.C:340
 anaGenKine.C:341
 anaGenKine.C:342
 anaGenKine.C:343
 anaGenKine.C:344
 anaGenKine.C:345
 anaGenKine.C:346
 anaGenKine.C:347
 anaGenKine.C:348
 anaGenKine.C:349
 anaGenKine.C:350
 anaGenKine.C:351
 anaGenKine.C:352
 anaGenKine.C:353
 anaGenKine.C:354
 anaGenKine.C:355
 anaGenKine.C:356
 anaGenKine.C:357
 anaGenKine.C:358
 anaGenKine.C:359
 anaGenKine.C:360
 anaGenKine.C:361
 anaGenKine.C:362
 anaGenKine.C:363
 anaGenKine.C:364
 anaGenKine.C:365
 anaGenKine.C:366
 anaGenKine.C:367
 anaGenKine.C:368
 anaGenKine.C:369
 anaGenKine.C:370
 anaGenKine.C:371
 anaGenKine.C:372
 anaGenKine.C:373
 anaGenKine.C:374
 anaGenKine.C:375
 anaGenKine.C:376
 anaGenKine.C:377
 anaGenKine.C:378
 anaGenKine.C:379
 anaGenKine.C:380
 anaGenKine.C:381
 anaGenKine.C:382
 anaGenKine.C:383
 anaGenKine.C:384
 anaGenKine.C:385
 anaGenKine.C:386
 anaGenKine.C:387
 anaGenKine.C:388
 anaGenKine.C:389
 anaGenKine.C:390
 anaGenKine.C:391
 anaGenKine.C:392
 anaGenKine.C:393
 anaGenKine.C:394
 anaGenKine.C:395
 anaGenKine.C:396
 anaGenKine.C:397
 anaGenKine.C:398
 anaGenKine.C:399
 anaGenKine.C:400
 anaGenKine.C:401
 anaGenKine.C:402
 anaGenKine.C:403
 anaGenKine.C:404
 anaGenKine.C:405
 anaGenKine.C:406
 anaGenKine.C:407
 anaGenKine.C:408
 anaGenKine.C:409
 anaGenKine.C:410
 anaGenKine.C:411
 anaGenKine.C:412
 anaGenKine.C:413
 anaGenKine.C:414
 anaGenKine.C:415
 anaGenKine.C:416
 anaGenKine.C:417
 anaGenKine.C:418
 anaGenKine.C:419
 anaGenKine.C:420
 anaGenKine.C:421
 anaGenKine.C:422
 anaGenKine.C:423
 anaGenKine.C:424
 anaGenKine.C:425
 anaGenKine.C:426
 anaGenKine.C:427
 anaGenKine.C:428
 anaGenKine.C:429
 anaGenKine.C:430
 anaGenKine.C:431
 anaGenKine.C:432
 anaGenKine.C:433
 anaGenKine.C:434
 anaGenKine.C:435
 anaGenKine.C:436
 anaGenKine.C:437
 anaGenKine.C:438
 anaGenKine.C:439
 anaGenKine.C:440
 anaGenKine.C:441
 anaGenKine.C:442
 anaGenKine.C:443
 anaGenKine.C:444
 anaGenKine.C:445
 anaGenKine.C:446
 anaGenKine.C:447
 anaGenKine.C:448
 anaGenKine.C:449
 anaGenKine.C:450
 anaGenKine.C:451
 anaGenKine.C:452
 anaGenKine.C:453
 anaGenKine.C:454
 anaGenKine.C:455
 anaGenKine.C:456
 anaGenKine.C:457
 anaGenKine.C:458
 anaGenKine.C:459
 anaGenKine.C:460
 anaGenKine.C:461
 anaGenKine.C:462
 anaGenKine.C:463
 anaGenKine.C:464
 anaGenKine.C:465
 anaGenKine.C:466
 anaGenKine.C:467
 anaGenKine.C:468
 anaGenKine.C:469
 anaGenKine.C:470
 anaGenKine.C:471
 anaGenKine.C:472
 anaGenKine.C:473
 anaGenKine.C:474
 anaGenKine.C:475
 anaGenKine.C:476
 anaGenKine.C:477
 anaGenKine.C:478
 anaGenKine.C:479
 anaGenKine.C:480
 anaGenKine.C:481
 anaGenKine.C:482
 anaGenKine.C:483
 anaGenKine.C:484
 anaGenKine.C:485
 anaGenKine.C:486
 anaGenKine.C:487
 anaGenKine.C:488
 anaGenKine.C:489
 anaGenKine.C:490
 anaGenKine.C:491
 anaGenKine.C:492
 anaGenKine.C:493
 anaGenKine.C:494
 anaGenKine.C:495
 anaGenKine.C:496
 anaGenKine.C:497
 anaGenKine.C:498
 anaGenKine.C:499
 anaGenKine.C:500
 anaGenKine.C:501
 anaGenKine.C:502
 anaGenKine.C:503
 anaGenKine.C:504
 anaGenKine.C:505
 anaGenKine.C:506
 anaGenKine.C:507
 anaGenKine.C:508
 anaGenKine.C:509
 anaGenKine.C:510
 anaGenKine.C:511
 anaGenKine.C:512
 anaGenKine.C:513
 anaGenKine.C:514
 anaGenKine.C:515
 anaGenKine.C:516
 anaGenKine.C:517
 anaGenKine.C:518
 anaGenKine.C:519
 anaGenKine.C:520
 anaGenKine.C:521
 anaGenKine.C:522
 anaGenKine.C:523
 anaGenKine.C:524
 anaGenKine.C:525
 anaGenKine.C:526
 anaGenKine.C:527
 anaGenKine.C:528
 anaGenKine.C:529
 anaGenKine.C:530
 anaGenKine.C:531
 anaGenKine.C:532
 anaGenKine.C:533
 anaGenKine.C:534
 anaGenKine.C:535
 anaGenKine.C:536
 anaGenKine.C:537
 anaGenKine.C:538
 anaGenKine.C:539
 anaGenKine.C:540
 anaGenKine.C:541
 anaGenKine.C:542
 anaGenKine.C:543
 anaGenKine.C:544
 anaGenKine.C:545
 anaGenKine.C:546
 anaGenKine.C:547
 anaGenKine.C:548
 anaGenKine.C:549
 anaGenKine.C:550
 anaGenKine.C:551
 anaGenKine.C:552
 anaGenKine.C:553
 anaGenKine.C:554
 anaGenKine.C:555
 anaGenKine.C:556
 anaGenKine.C:557
 anaGenKine.C:558
 anaGenKine.C:559
 anaGenKine.C:560
 anaGenKine.C:561
 anaGenKine.C:562
 anaGenKine.C:563
 anaGenKine.C:564
 anaGenKine.C:565
 anaGenKine.C:566
 anaGenKine.C:567
 anaGenKine.C:568
 anaGenKine.C:569
 anaGenKine.C:570
 anaGenKine.C:571
 anaGenKine.C:572
 anaGenKine.C:573
 anaGenKine.C:574
 anaGenKine.C:575
 anaGenKine.C:576
 anaGenKine.C:577
 anaGenKine.C:578
 anaGenKine.C:579
 anaGenKine.C:580
 anaGenKine.C:581
 anaGenKine.C:582
 anaGenKine.C:583
 anaGenKine.C:584
 anaGenKine.C:585
 anaGenKine.C:586
 anaGenKine.C:587
 anaGenKine.C:588
 anaGenKine.C:589
 anaGenKine.C:590
 anaGenKine.C:591
 anaGenKine.C:592
 anaGenKine.C:593
 anaGenKine.C:594
 anaGenKine.C:595
 anaGenKine.C:596
 anaGenKine.C:597
 anaGenKine.C:598
 anaGenKine.C:599
 anaGenKine.C:600
 anaGenKine.C:601
 anaGenKine.C:602
 anaGenKine.C:603
 anaGenKine.C:604
 anaGenKine.C:605
 anaGenKine.C:606
 anaGenKine.C:607
 anaGenKine.C:608
 anaGenKine.C:609
 anaGenKine.C:610
 anaGenKine.C:611
 anaGenKine.C:612
 anaGenKine.C:613
 anaGenKine.C:614
 anaGenKine.C:615
 anaGenKine.C:616
 anaGenKine.C:617
 anaGenKine.C:618
 anaGenKine.C:619
 anaGenKine.C:620
 anaGenKine.C:621
 anaGenKine.C:622
 anaGenKine.C:623
 anaGenKine.C:624
 anaGenKine.C:625
 anaGenKine.C:626
 anaGenKine.C:627
 anaGenKine.C:628
 anaGenKine.C:629
 anaGenKine.C:630
 anaGenKine.C:631
 anaGenKine.C:632
 anaGenKine.C:633
 anaGenKine.C:634
 anaGenKine.C:635
 anaGenKine.C:636
 anaGenKine.C:637
 anaGenKine.C:638
 anaGenKine.C:639
 anaGenKine.C:640
 anaGenKine.C:641
 anaGenKine.C:642
 anaGenKine.C:643
 anaGenKine.C:644
 anaGenKine.C:645
 anaGenKine.C:646
 anaGenKine.C:647
 anaGenKine.C:648
 anaGenKine.C:649
 anaGenKine.C:650
 anaGenKine.C:651
 anaGenKine.C:652
 anaGenKine.C:653
 anaGenKine.C:654
 anaGenKine.C:655
 anaGenKine.C:656
 anaGenKine.C:657
 anaGenKine.C:658
 anaGenKine.C:659
 anaGenKine.C:660
 anaGenKine.C:661
 anaGenKine.C:662
 anaGenKine.C:663
 anaGenKine.C:664
 anaGenKine.C:665
 anaGenKine.C:666
 anaGenKine.C:667
 anaGenKine.C:668
 anaGenKine.C:669
 anaGenKine.C:670
 anaGenKine.C:671
 anaGenKine.C:672
 anaGenKine.C:673
 anaGenKine.C:674
 anaGenKine.C:675
 anaGenKine.C:676
 anaGenKine.C:677
 anaGenKine.C:678
 anaGenKine.C:679
 anaGenKine.C:680
 anaGenKine.C:681
 anaGenKine.C:682
 anaGenKine.C:683
 anaGenKine.C:684
 anaGenKine.C:685
 anaGenKine.C:686
 anaGenKine.C:687
 anaGenKine.C:688
 anaGenKine.C:689
 anaGenKine.C:690
 anaGenKine.C:691
 anaGenKine.C:692
 anaGenKine.C:693
 anaGenKine.C:694
 anaGenKine.C:695
 anaGenKine.C:696
 anaGenKine.C:697
 anaGenKine.C:698
 anaGenKine.C:699
 anaGenKine.C:700
 anaGenKine.C:701
 anaGenKine.C:702
 anaGenKine.C:703
 anaGenKine.C:704
 anaGenKine.C:705
 anaGenKine.C:706
 anaGenKine.C:707
 anaGenKine.C:708
 anaGenKine.C:709
 anaGenKine.C:710
 anaGenKine.C:711
 anaGenKine.C:712
 anaGenKine.C:713
 anaGenKine.C:714
 anaGenKine.C:715
 anaGenKine.C:716
 anaGenKine.C:717
 anaGenKine.C:718
 anaGenKine.C:719
 anaGenKine.C:720
 anaGenKine.C:721
 anaGenKine.C:722
 anaGenKine.C:723
 anaGenKine.C:724
 anaGenKine.C:725
 anaGenKine.C:726
 anaGenKine.C:727
 anaGenKine.C:728
 anaGenKine.C:729
 anaGenKine.C:730
 anaGenKine.C:731
 anaGenKine.C:732
 anaGenKine.C:733
 anaGenKine.C:734
 anaGenKine.C:735
 anaGenKine.C:736
 anaGenKine.C:737
 anaGenKine.C:738
 anaGenKine.C:739
 anaGenKine.C:740
 anaGenKine.C:741
 anaGenKine.C:742
 anaGenKine.C:743
 anaGenKine.C:744
 anaGenKine.C:745
 anaGenKine.C:746
 anaGenKine.C:747
 anaGenKine.C:748
 anaGenKine.C:749
 anaGenKine.C:750
 anaGenKine.C:751
 anaGenKine.C:752
 anaGenKine.C:753
 anaGenKine.C:754
 anaGenKine.C:755
 anaGenKine.C:756
 anaGenKine.C:757
 anaGenKine.C:758
 anaGenKine.C:759
 anaGenKine.C:760
 anaGenKine.C:761
 anaGenKine.C:762
 anaGenKine.C:763
 anaGenKine.C:764
 anaGenKine.C:765
 anaGenKine.C:766
 anaGenKine.C:767
 anaGenKine.C:768
 anaGenKine.C:769
 anaGenKine.C:770
 anaGenKine.C:771
 anaGenKine.C:772
 anaGenKine.C:773
 anaGenKine.C:774
 anaGenKine.C:775
 anaGenKine.C:776
 anaGenKine.C:777
 anaGenKine.C:778
 anaGenKine.C:779
 anaGenKine.C:780
 anaGenKine.C:781
 anaGenKine.C:782
 anaGenKine.C:783
 anaGenKine.C:784
 anaGenKine.C:785
 anaGenKine.C:786
 anaGenKine.C:787
 anaGenKine.C:788
 anaGenKine.C:789
 anaGenKine.C:790
 anaGenKine.C:791
 anaGenKine.C:792
 anaGenKine.C:793
 anaGenKine.C:794
 anaGenKine.C:795
 anaGenKine.C:796
 anaGenKine.C:797
 anaGenKine.C:798
 anaGenKine.C:799
 anaGenKine.C:800
 anaGenKine.C:801
 anaGenKine.C:802
 anaGenKine.C:803
 anaGenKine.C:804
 anaGenKine.C:805
 anaGenKine.C:806
 anaGenKine.C:807
 anaGenKine.C:808
 anaGenKine.C:809
 anaGenKine.C:810
 anaGenKine.C:811
 anaGenKine.C:812
 anaGenKine.C:813
 anaGenKine.C:814
 anaGenKine.C:815
 anaGenKine.C:816
 anaGenKine.C:817
 anaGenKine.C:818
 anaGenKine.C:819
 anaGenKine.C:820
 anaGenKine.C:821
 anaGenKine.C:822
 anaGenKine.C:823
 anaGenKine.C:824
 anaGenKine.C:825
 anaGenKine.C:826
 anaGenKine.C:827
 anaGenKine.C:828
 anaGenKine.C:829
 anaGenKine.C:830
 anaGenKine.C:831
 anaGenKine.C:832
 anaGenKine.C:833
 anaGenKine.C:834
 anaGenKine.C:835
 anaGenKine.C:836
 anaGenKine.C:837
 anaGenKine.C:838
 anaGenKine.C:839
 anaGenKine.C:840
 anaGenKine.C:841
 anaGenKine.C:842
 anaGenKine.C:843
 anaGenKine.C:844
 anaGenKine.C:845
 anaGenKine.C:846
 anaGenKine.C:847
 anaGenKine.C:848
 anaGenKine.C:849
 anaGenKine.C:850
 anaGenKine.C:851
 anaGenKine.C:852
 anaGenKine.C:853
 anaGenKine.C:854
 anaGenKine.C:855
 anaGenKine.C:856
 anaGenKine.C:857
 anaGenKine.C:858
 anaGenKine.C:859
 anaGenKine.C:860
 anaGenKine.C:861
 anaGenKine.C:862
 anaGenKine.C:863
 anaGenKine.C:864
 anaGenKine.C:865
 anaGenKine.C:866
 anaGenKine.C:867
 anaGenKine.C:868
 anaGenKine.C:869