ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/*
  marian.ivanov@cern.ch
  
  //TOOLKIT for chain manipulation:  
  //Example usage:
  //
  // 1. Check the list of files
  AliXRDPROOFtoolkit toolkit;
  AliXRDPROOFtoolkit::FilterList("pp.txt","AliESDs.root esdTree AliESDfriends.root * Kinematics.root *",0)
  AliXRDPROOFtoolkit::FilterList("pp.txt","AliESDs.root esdTree AliESDfriends.root * Kinematics.root *",1)
  //
  //2. make a chain or random chain form the list of files
  TChain * chain = toolkit.MakeChain("esd.txt","esdTree",0,10)
  TChain * chainRandom = toolkit.MakeChainrandom("esd.txt","esdTree",0,10)
  chain->Draw("fTPCnclsF");
  

*/
#include <TTree.h>
#include <TEnv.h>
#include <TString.h>
#include <TObjArray.h>
#include <TObjString.h>
#include <TTree.h>
#include <TFile.h>
#include <TChain.h>
#include <TDSet.h>
#include <TH1.h>
#include <TGraph.h>
#include <TMath.h>
#include <TPad.h>
#include <exception>
#include <fstream>
#include <TRandom.h>
#include <TTimeStamp.h>
#include <AliXRDPROOFtoolkit.h>


ClassImp(AliXRDPROOFtoolkit)



//______________________________________________________________________________
  AliXRDPROOFtoolkit::AliXRDPROOFtoolkit () : 
    TObject () ,
    fVerbose(kFALSE),          // verbso mode  - print command 
    fUserName(""),         // user name
    fUserGroup(0)        // user group info
{
  //
  // 
  //
  fUserGroup = gSystem->GetUserInfo();
  fUserName  = fUserGroup->fUser;       
  fVerbose=1;
}





TChain* AliXRDPROOFtoolkit::MakeChain(const char*fileIn, const char * treeName, const char *fName, Int_t maxFiles, Int_t startFile)
{
  //
  // Create a chain of files using the file 'fileIn' as input list 
  // where one line per root file is expected
  //
  // treeName : Name of the tree
  // fName    : file name inside of a zip file, will add '#fName'
  //            to the file name
  // maxFiles : maximum number of files in the chain
  //            -1 (default) add all possible files starting from 'startFile'
  // startFile: position of the first file, starting with 0
  //
  TChain* chain = new TChain(treeName);

  // Open the input stream
  ifstream in;
  in.open(fileIn);

  // Read the input list of files and add them to the chain
  TString currentFile;
  Int_t counter=0;
  while(in.good()) {
    in >> currentFile;
    if (fName) {
      currentFile+="#";
      currentFile+=fName;
    }
    if (!currentFile.Contains("root")) continue; // protection
    ++counter;
    if (counter<=startFile) continue; 
    if ((maxFiles>0) && (counter>maxFiles+startFile)) break;

    TFile * f = TFile::Open(currentFile.Data());
    if (f){
      chain->Add(currentFile.Data());
    }

    delete f;
  }

  in.close();

  return chain;
}

TChain* AliXRDPROOFtoolkit::MakeChainRandom(const char*fileIn, const char * treeName,const char *fName, Int_t maxFiles, Int_t startFile)
{
  //
  // Create a TDSet - files are in random order
  //
  // filein    - input list text file
  // treename  - containg tree 
  // maxFiles  - maximum number of files included

  TObjArray array(10000);
  
  TChain* chain = new TChain(treeName);

  // Open the input stream
  ifstream in;
  in.open(fileIn);

  // Read the input list of files and add them to the chain
  TString currentFile;
  Int_t counter=0;
  while(in.good()) {
    in >> currentFile;
    if (fName) {
      currentFile+="#";
      currentFile+=fName;
    }
    if (!currentFile.Contains("root")) continue; // protection
    counter++;
    //    chain->Add(currentFile.Data());
    array.AddLast(new TObjString(currentFile));
  }
  in.close();
  Int_t entries = array.GetEntries();
  printf("Number of entries\t%d\n",entries);
  //
  //
  //
  Double_t *randomI = new Double_t[entries];
  Int_t *indexes = new Int_t[entries];
  for (Int_t i=0;i<entries; i++) randomI[i]=gRandom->Rndm();
  TMath::Sort(entries,randomI,indexes); 
  
  for (Int_t i=startFile; (i<startFile+maxFiles) && (i<entries); i++){
    Int_t ifile = indexes[i];
    if (ifile<entries && (array.At(ifile)) &&  array.At(ifile)->TestBit(TObject::kCannotPick)==kFALSE){ 
      printf("%d\t%d\t%s\n",i, ifile, array.At(ifile)->GetName());
      chain->Add(array.At(ifile)->GetName());
      array.At(ifile)->SetBit(TObject::kCannotPick);
    }
  }
  return chain;
}



TDSet* AliXRDPROOFtoolkit::MakeSet(const char*fileIn, const char * treeName, const char *fName, Int_t maxFiles)
{
  //
  // Create the TDSet out of list
  // filein    - input list text file
  // treename  - containg tree 
  // maxFiles  - maximum number of files included

  TDSet* chain = new TDSet(treeName);

  // Open the input stream
  ifstream in;
  in.open(fileIn);

  // Read the input list of files and add them to the chain
  TString currentFile;
  Int_t counter=0;
  while(in.good()) {
    in >> currentFile;
    if (fName) {
      currentFile+="#";
      currentFile+=fName;
    }
    if (!currentFile.Contains("root")) continue; // protection
    counter++;
    if (maxFiles>0 && counter>maxFiles) break;
    chain->Add(currentFile.Data());
  }

  in.close();
  chain->Validate();
  return chain;
}


TDSet* AliXRDPROOFtoolkit::MakeSetRandom(const char*fileIn, const char * treeName, const char *fName, Int_t maxFiles)
{
  //
  // Create a TDSet - files are in random order
  //
  // filein    - input list text file
  // treename  - containg tree 
  // maxFiles  - maximum number of files included

  TObjArray array(10000);
  
  TDSet* chain = new TDSet(treeName);

  // Open the input stream
  ifstream in;
  in.open(fileIn);

  // Read the input list of files and add them to the chain
  TString currentFile;
  Int_t counter=0;
  while(in.good()) {
    in >> currentFile;
    if (fName) {
      currentFile+="#";
      currentFile+=fName;
    }
    if (!currentFile.Contains("root")) continue; // protection
    counter++;
    //    chain->Add(currentFile.Data());
    array.AddLast(new TObjString(currentFile));
  }
  in.close();
  Int_t entries = array.GetEntries();
  printf("Number of entries\t%d",entries);
  if (maxFiles<0) maxFiles=entries;
  if (maxFiles>entries) maxFiles=entries;
  for (Int_t i=0; i<maxFiles; i++){
    Int_t ifile = TMath::Nint(gRandom->Rndm()*Float_t(entries));
    if (ifile<entries && (array.At(ifile)) &&  array.At(ifile)->TestBit(TObject::kCannotPick)==kFALSE){ 
      printf("%d\t%d\t%s\n",i, ifile, array.At(ifile)->GetName());
      chain->Add(array.At(ifile)->GetName());
      array.At(ifile)->SetBit(TObject::kCannotPick);
    }
  }


  chain->Validate();
  return chain;
}







Int_t  AliXRDPROOFtoolkit::CheckTreeInFile(const char*fileName,const char*treeName, Int_t debugLevel, const char *branchName){
  //
  // Check the tree in file 
  // fileName   - the name of the file with tree
  // treeName   - the name of file
  // debugLevel - 0 check the existance of the file -  1 make loop over entries
  // branchName - if debugLevel>0 the branch is chcecked
  //              if brnachName =0 the content of full tree is chcecked
  // return value = 0 - Check things  OK
  //               -1 - file not exist or not accesible
  //               -2 - file is zombie
  //		   -3 - tree not present
  //               -4 - branch not present
  TFile * file = TFile::Open(fileName);
  if (!file) { return -1;}
  if (file->IsZombie()) {file->Close(); delete file; return -2;};

  TString TrName(treeName);
  if (TrName=="*") {
    //cout <<"        treename ==== *"<<endl;;
    file->Close(); delete file; 
    return 0;
  }
  TTree * tree = (TTree*)file->Get(treeName);
  if (!tree) {file->Close(); delete file; return -3;}
  TBranch * branch = 0;
  if (branchName) {
    branch = tree->GetBranch(branchName);
    if (!branch) {file->Close(); delete file; return -4;}
  }
  //
  if (debugLevel==1 &&  tree->GetEntries()==0 ) return 1; //empty 

  tree->SetBranchStatus("*",1);
  try {
    if (debugLevel>1){
      Int_t entries = tree->GetEntries();
      for (Int_t i=0;i<entries; i++){
	if (branch) branch->GetEntry(i);
	else tree->GetEntry();      
      }
    }
  }catch ( ... ) {
    printf("PROBLEM\n");  
    // never catched  - as there is no exception in the ROOT IO
    file->Close(); delete file;
    return 1 ;
  }

  file->Close(); delete file;
  return 0;
}


Bool_t  AliXRDPROOFtoolkit::FilterList(const char*inputList, const char*fileList, Int_t checkLevel){
  //
  // Filter the list  
  // inputList - list of original file names
  // fileList  - list of file to be checked
  //           - 0 - fileName
  //           - 1 - treeName (if * not checked)
  //           - 2 - fileName 
  //                 ....
  // checkLevel - 0 - check only existance of the files and tree's + 
  //                  simple file corruption
  //            > 1 - check the content of the tree - 
  //                  (can crash as there do not exest exception handling in ROOT)
  // Output -  two streams are created - file with good entries
  // "%s.Good a,d file with bad entries %s.Bad
  //EXAMPLE:
  // AliXRDPROOFtoolkit::FilterList("ppgrid2.txt","AliESDs.root esdTree AliESDfriends.root * Kinematics.root *",1) 
  gEnv->SetValue("TFile.Recover", 0);
  //
  fstream finput;
  finput.open(inputList, ios_base::in);
  fstream focGood;
  fstream focBad;
  focGood.open(Form("%s.Good",inputList), ios_base::out|ios_base::trunc);
  focBad.open(Form("%s.Bad",inputList), ios_base::out|ios_base::trunc);
  //
  if(!finput.is_open()) {
    cout<<"Can't open file "<<inputList<<endl;
    return kFALSE;
  }
  //
  // Read the input list of files and add them to the chain
  //
  TObjArray *array = (TString(fileList)).Tokenize(" ");
  TString currentFile;
  Int_t counter=0;
  while(finput.good()) {
    finput >> currentFile;
    if (!currentFile.Contains("root")) continue; // protection
    if (currentFile.Contains("alien://")){
      focGood<<currentFile<<endl;
      continue;
    }
    Bool_t isZip = currentFile.Contains("#");
    const char * dirname = gSystem->DirName(currentFile.Data());
    Int_t status = 0;
    //
    for (Int_t i=0; i<array->GetEntries(); i+=2){
      char fname[1000];
      if (!isZip){
	snprintf(fname,1000, "%s/%s",dirname,array->At(i)->GetName());
        if (((TObjString*)array->At(i))->String().Contains("*")){
	  snprintf(fname,1000, "%s", currentFile.Data());
	}
      }
      if (isZip) {
	const char * fileName   =  gSystem->BaseName(currentFile.Data());
	TString fstring=fileName;
	fstring[fstring.First("#")]=0;
	snprintf(fname,1000, "%s/%s#%s",dirname,fstring.Data(),array->At(i)->GetName());
	printf(fname, "To check %s%s#%s\n",dirname,fstring.Data(),array->At(i)->GetName());
      }

      printf("\nFile to be checked %s\n",fname);
      //cout <<"\n arguments: "<< array->At(i+1)->GetName()<<" "<<checkLevel<<endl;
      Int_t cstatus = CheckTreeInFile(fname, array->At(i+1)->GetName(), checkLevel,0);
      //printf("  CheckTreeInFile returns %d",cstatus);
      if (cstatus!=0) {
	status = cstatus; 
	break;
      }
    }
    if (status==0){
      focGood<<currentFile<<endl;
    }else{
      focBad<<currentFile<<endl;
    }
    counter++;    
  }
  finput.close();
  delete array;
  return kTRUE;
}


Bool_t  AliXRDPROOFtoolkit::FilterListZip(const char*inputList, const char*fileList, Int_t checkLevel){
  //
  // Filter the list  
  // inputList - list of original file names
  // fileList  - list of file to be checked
  //           - 0 - fileName
  //           - 1 - treeName (if * not checked)
  //           - 2 - fileName 
  //                 ....
  // checkLevel - 0 - check only existance of the files and tree's + 
  //                  simple file corruption
  //            > 1 - check the content of the tree - 
  //                  (can crash as there do not exest exception handling in ROOT)
  // Output -  two streams are created - file with good entries
  // "%s.Good a,d file with bad entries %s.Bad
  //EXAMPLE:
  // AliXRDPROOFtoolkit::FilterList("ppgrid2.txt","AliESDs.root esdTree AliESDfriends.root * Kinematics.root *",1) 

  fstream finput;
  finput.open(inputList, ios_base::in);
  fstream focGood;
  fstream focBad;
  focGood.open(Form("%s.Good",inputList), ios_base::out|ios_base::trunc);
  focBad.open(Form("%s.Bad",inputList), ios_base::out|ios_base::trunc);
  //
  if(!finput.is_open()) {
    cout<<"Can't open file "<<inputList<<endl;
    return kFALSE;
  }
  //
  // Read the input list of files and add them to the chain
  //
  TObjArray *array = (TString(fileList)).Tokenize(" ");
  TString currentFile;
  Int_t counter=0;
  while(finput.good()) {
    finput >> currentFile;
    if (!currentFile.Contains("root")) continue; // protection
    if (currentFile.Contains("alien://")){
      focGood<<currentFile<<endl;
      continue;
    }
    //Bool_t isZip = currentFile.Contains("#");
    const char * dirname = gSystem->DirName(currentFile.Data());
    const char * fileName   =  gSystem->BaseName(currentFile.Data());
    TString fstring=fileName;
    fstring[fstring.First("#")]=0;
    Int_t status = 0;
    for (Int_t i=0; i<array->GetEntries(); i+=2){
      char fname[1000];
      //if (isZip) sprintf(fname,
      snprintf(fname,1000, "%s/%s#%s",dirname,fstring.Data(),array->At(i)->GetName());
      printf(fname, "To check %s%s#%s\n",dirname,fstring.Data(),array->At(i)->GetName());
      //cout <<"\n arguments: "<< array->At(i+1)->GetName()<<" "<<checkLevel<<endl;
      Int_t cstatus = CheckTreeInFile(fname, array->At(i+1)->GetName(), checkLevel,0);
      //printf("  CheckTreeInFile returns %d",cstatus);
      if (cstatus!=0) {
	status = cstatus; 
	break;
      }
    }
    if (status==0){
      focGood<<currentFile<<endl;
    }else{
      focBad<<currentFile<<endl;
    }
    counter++;    
  }
  finput.close();
  return kTRUE;
}





Bool_t  AliXRDPROOFtoolkit::XRDCopyDir(const char * idir, const char * files, const char *odir, Bool_t /*zip*/){
  //
  // idir  - input directory
  // odir  - output directory
  // files - the list of files to be coppied
  // zip   - not supported yet
  //
  // Example :									
  //
  // idir ="root://gsiaf.gsi.de:1094//sma/sim/v4-05-Rev-03/pp/0000";
  // odir ="root://lxgrid2.gsi.de:1094//miranov/test/pp/0000"; 
  // char *files="AliESDs.root AliESDfriend.root Kinematics.root";
  TString str(files);
  TObjArray * array = str.Tokenize(" "); 
  Int_t nfiles = array->GetEntries();
  char infile[1000];
  char outfile[1000];
  Bool_t succes=kTRUE;
  for (Int_t ifile =0; ifile<nfiles; ifile++){
    snprintf(infile,1000,"%s/%s", idir, array->At(ifile)->GetName());
    snprintf(outfile,1000,"%s/%s", odir, array->At(ifile)->GetName());
    printf("%s - %s\n",infile, outfile);
    Bool_t result = TFile::Cp(infile,outfile); 
    succes &= result;
  }
  delete array;
  return succes;
}



void AliXRDPROOFtoolkit::JoinTreesIndex(const char * outputFile, const char * outputTree, const char *indexName, const char *inputTrees, Int_t debugLevel){
  //
  // Join together several tree according to the index
  // 
  // Parameters:
  // Output:
  //     outputFile : name of the output file
  //     outputTree : name of the output Tree
  //     indexName  : name of the branch to be used as an index
  // Input:
  //     inputTrees : decription of the input trees setup
  /*
    Example usage:
    
    AliXRDPROOFtoolkit::JoinTreesIndex("outAll.root","joinAll","run","1#CPass1#run#tpcQA#TPCCPass1.root+1#VPass1#run#tpcQA#TPCVPass1.root+1#Pass1#run#tpcQA#TPCPass1.root+0#DAQ#run#joinTree#fproductionJoin.root+0#C#run#dcs#OCDBscan.root+0#CE#run#Fits#CEtrend.root");
    ==>
    Combine information form the Cpass1,VPass, and Pass1QA, calibration tree, DAQ information, trigger information 
    Make a File "outAll.root",  with tree "joinAll", index of tree with name "run"
    //
    // Input tree configuration string:
    //
    const char *inputTrees="1#CPass1#run#tpcQA#TPCCPass1.root+1#VPass1#run#tpcQA#TPCVPass1.root+1#Pass1#run#tpcQA#TPCPass1.root+0#DAQ#run#joinTree#/home/miranov/test/dbQueries/fproductionJoin.root+0#C#run#dcs#OCDBscan.root+0#CE#run#Fits#CEtrend.root"
    Describe 6 trees to be merged (string separated be +):
      TObjArray *arrayInput = TString(inputTrees).Tokenize("+");
      TObjString = 1#CPass1#run#tpcQA#TPCCPass1.root
      TObjString = 1#VPass1#run#tpcQA#TPCVPass1.root
      TObjString = 1#Pass1#run#tpcQA#TPCPass1.root
      TObjString = 0#DAQ#run#joinTree#/home/miranov/test/dbQueries/fproductionJoin.root
      TObjString = 0#C#run#dcs#OCDBscan.root
      TObjString = 0#CE#run#Fits#CEtrend.root
    //  
    Each tree is characterize by 5 parameters - separate by #
       description="1#CPass1#run#tpcQA#TPCCPass1.root"
       TString(description)->Tokenize("#").Print()
       Collection name='TObjArray', class='TObjArray', size=16
       TObjString = 1                    ==> (0/1) index is used 
       TObjString = CPass1               ==> name of output branch  in output tree
       TObjString = run                  ==> name of the index
       TObjString = tpcQA                ==> name of the input tree in the input file
       TObjString = TPCCPass1.root       ==> name of the input file
  */
  //
  //
  //
                
  TFile * fout = new TFile(outputFile,"recreate");
  fout->cd();
  TTree *joinTree=new TTree(outputTree,outputTree);
  //
  // 1. Define setup. parse definition string
  //
  TObjArray *arrayInput = TString(inputTrees).Tokenize("+");
  Int_t nTrees = arrayInput->GetEntries();
  TObjArray * arrayFile  = new TObjArray(nTrees);    // array of TFiles with trees
  TObjArray * arrayTrees = new TObjArray(nTrees);    // array of trees 
  TObjArray * arrayNames = new TObjArray(nTrees);    // name of tree
  TObjArray * arrayRunID = new TObjArray(nTrees);    // name of tree
  TArrayI arrayEnableTree(nTrees);  
  for (Int_t i=0; i<2; i++) printf("\n");
  printf("Joing query\n");
  arrayInput->Print();
  for (Int_t i=0; i<2; i++) printf("\n");
  {for (Int_t itree=0; itree<nTrees; itree++){
      //
      TObjArray *description = TString(arrayInput->At(itree)->GetName()).Tokenize("#");
      if (description->GetEntries()<4) {
	printf("Fatal: Invalid description:  %s\n", arrayInput->At(itree)->GetName());
	continue;
      }
      TFile * f = TFile::Open(description->At(4)->GetName());
      if (!f){
	printf("Fatal: Invalid description: fileName %s\n", description->At(4)->GetName());
	delete arrayInput;
	return;
      }
      arrayFile->AddAt(f,itree);
      TTree * tree = (TTree*)f->Get(description->At(3)->GetName());
      if (!tree){
	printf("Fatal: Invalid description. Tree name\t%s\n", description->At(3)->GetName());
	delete arrayInput;
	return;
      }
      tree->SetCacheSize(400000000);
      //    
      arrayTrees->AddAt(tree,itree);
      //
      arrayRunID->AddAt(new TObjString(description->At(2)->GetName()),itree);
      arrayNames->AddAt(new TObjString(description->At(1)->GetName()),itree);
      arrayEnableTree[itree]=atoi(description->At(0)->GetName());    

    }}
  //  
  delete arrayInput;
  // 2. Make the run list
  //
  //
  map<int, int> runMap;
  map<int, int> *runMapTree = new map<int, int>[nTrees];
  //map<int, int> runMapTree[nTrees];
  {for (Int_t itree=0; itree<nTrees; itree++){
      TTree * tree = (TTree*)arrayTrees->At(itree);
      Int_t entries=tree->GetEntries();
      char query[2000];
      snprintf(query,2000,"%s:Entry$", arrayRunID->At(itree)->GetName());
      entries = tree->Draw(query,"","goff");      
      for (Int_t ientry=0;ientry<entries; ientry++){
	Int_t irun=Int_t(tree->GetV1()[ientry]);
	//	Int_t entryNr=Int_t(tree->GetV2()[ientry]);
 	if (arrayEnableTree[itree]>0) runMap[irun]+=1;
 	runMapTree[itree][irun]=ientry;
 	if (debugLevel>0) printf("%s\t%d\t%d\n",tree->GetName(), irun, 	runMapTree[itree][irun]);
      }
    }
  }
  //
  // 3. Make join tree
  //
  Int_t jrun=0;
  fout->cd();
  joinTree->Branch(indexName, &jrun,Form("%s/I",indexName));
  Int_t *status=new Int_t[nTrees];
  char *brName = new char[10000];
  char *brTitle= new char[10000];
  //
  
  {for (Int_t itree=0; itree<nTrees; itree++){
      TTree * tree = (TTree*)arrayTrees->At(itree);      
      tree->GetEntry(1);
      TString treeName=arrayNames->At(itree)->GetName();
      if (treeName.Length()>0){
	joinTree->Branch(Form("%s.status",treeName.Data()), &status[itree],Form("%s.status/I",treeName.Data()));
      }else{
	joinTree->Branch("status", &status[itree],"status/I");
      }
      //
      Int_t nbranches= tree->GetListOfBranches()->GetEntries();
      for (Int_t ibr=0; ibr<nbranches; ibr++){
	TBranch * br = (TBranch*)(tree->GetListOfBranches()->At(ibr));
	if (treeName.Length()>0){
	  sprintf(brName,"%s.%s",treeName.Data(), br->GetName());
	  sprintf(brTitle,"%s.%s",treeName.Data(), br->GetTitle());
	}else{
	  sprintf(brName,"%s",br->GetName());
	  sprintf(brTitle,"%s",br->GetTitle());
	}
	void* addr = 0;
	TString className=br->GetClassName();
	if (className.Length()==0){
	  TString str(br->GetTitle());
	  if (str[str.Length()-1]=='I') addr=new Int_t;
	  if (str[str.Length()-1]=='F') addr=new Float_t;
	  if (str[str.Length()-1]=='D') addr=new Double_t;
	  if (str[str.Length()-1]=='C') addr=new Char_t[10000];
	  if (addr) joinTree->Branch(brName, addr, brTitle);
	  br->SetAddress(addr);
	}else{
	  TClass cclass(className);
	  TObject **addrClass =  new TObject *;
	  (*addrClass)=0;
	  printf("%s\t%s\n",br->GetName(), className.Data());
	  br->SetAddress(addrClass);	  
	  br->GetEntry(0);	  
	  joinTree->Branch(brName,addrClass);	  	  
	}	
      }
    }
  }
  joinTree->Write();
  //
  // 4. Fill the trees
  //
  map<int, int>::iterator riter;   
  {for (riter=runMap.begin(); riter != runMap.end(); ++riter){
      printf("%d\t%d\t", riter->first, riter->second);
      jrun=riter->first;
      for (Int_t itree=0; itree<nTrees; itree++){
	TTree * tree = (TTree*)arrayTrees->At(itree); 
	Int_t entry= runMapTree[itree][jrun];
	status[itree]=(entry>0)?1:0;
	if (entry>=0) tree->GetEntry(entry);
	printf("%d\t",entry);
	//
      }
      joinTree->Fill();
      printf("\n");
    }}
  fout->cd();
  joinTree->Write(outputTree);
  fout->Close();

}



void AliXRDPROOFtoolkit::CacheFileList(const char * fileIn, const char* cachePrefix){
  //
  // cache the list of file locally, cache valeus are stored in the location
  // specified by optional argumen prefix 
  // 2 new files are created 
  //       <fileIn>.cache    - file with the location of cahe files
  //       <fileIn>.cacheLog - log file +list of files which can not be cached 
  //      
  /*
    fileIn = "TPCCPass1.list";
    cachePrefix = "";
  */
  ifstream fin;
  fin.open(fileIn);  
  ofstream fout;
  fout.open(Form("%s.cache",fileIn));  
  ofstream foutLog;
  foutLog.open(Form("%s.cacheLog",fileIn));  
  // Read the input list of files and add them to the chain
  TString currentFile;
  TString cacheFile;
  //Int_t counter=0;
  {while(fin.good()) {
      TTimeStamp s;
      TString fname;
      fin >> currentFile;
      fname=currentFile;
      fname.ReplaceAll("-","_");
      fname.ReplaceAll("/","_");
      fname.ReplaceAll(":","_");
      fname.ReplaceAll("~","_");
      cacheFile=cachePrefix;
      cacheFile+=fname;
      printf("%s\t%s\n",currentFile.Data(),cacheFile.Data());
      if (TFile::Cp(currentFile.Data(),cacheFile.Data())){
	fout<<cacheFile.Data()<<"\n";
	foutLog<<s.AsString();
	foutLog<<cacheFile.Data()<<"n";
      }else{
	foutLog<<"Copy failed"<<currentFile.Data()<<cacheFile.Data()<<"\n";
      }
    }}
  fout.close();
  foutLog.close();
}



void   AliXRDPROOFtoolkit::MakeTreeFromList(const char *fout, const char * treeOut, const char * treeIn, const char * flist, Bool_t debug){
  //
  // join trees from the list  and make a common tree - stored in the file 
  // 
  /*
    Example:
    const char * fout="TPCCpass1.root";
    const char *treeOut="tpcQA"
    const char *treeIn="tpcQA"
    const char * flist="TPCCPass1.list"    
  */
  if (debug>0){
    printf("MakeTreeFromList\n");
    printf("fout=%s\n",fout);
    printf("treeOut=%s\n",treeOut);
    printf("treeIn=%s\n",treeIn);
    printf("fileList=%s\n",flist);
  } 
  ifstream fin;
  fin.open(flist);  
  ofstream foutLog;
  foutLog.open(Form("%s.chainLog",flist));  
  // Read the input list of files and add them to the chain
  TString currentFile;
  Int_t counter=0;
  Int_t nbranches=0;
  {while(fin.good()) {
      fin >> currentFile;
      TFile * f = TFile::Open(currentFile.Data());
      foutLog<<"Opening file"<<currentFile.Data();
      if (!f) {
	foutLog<<"Error opening file\t"<<currentFile<<"\n";
	cout<<"Error opening file\t"<<currentFile<<"\n";
	continue;
      }
      TTree * tree = (TTree*)f->Get(treeIn);
      if (!tree) {
	foutLog<<"Error opening tree\t"<<currentFile<<treeIn<<"\n";
	cout<<"Error opening tree\t"<<currentFile<<treeIn<<"\n";
	f->ls();	
	continue;
      }
      if (tree->GetListOfBranches()==0){
	foutLog<<"Error opening tree\t"<<currentFile<<treeIn<<"\n";
	cout<<"Error opening tree\t"<<currentFile<<treeIn<<"\n";
	continue;
      }
      Int_t nbranchesCurrent = tree->GetListOfBranches()->GetEntries();
      if ( nbranches ==0 ) nbranches=nbranchesCurrent;
      if ( nbranches!=nbranchesCurrent){
	foutLog<<"Error  tree layout\t"<<currentFile<<"   \t"<<treeIn<<"  \t"<<nbranches<<"  \t"<<nbranchesCurrent<<"\n";
	cout<<"Error tree layout\t"   <<currentFile<<"   \t"<<treeIn<<"  \t"<<nbranches<<"  \t"<<nbranchesCurrent<<"\n";
      }     
      counter++;
    }
  }
  foutLog<<"Number of files"<<counter<<"\n";
  cout<<   "Number of files"<<counter<<"\n";
  //

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