]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ANALYSIS/AliAnalysisGoodies.cxx
fixing bug in par file creation when package name was equally to a directory name...
[u/mrichter/AliRoot.git] / ANALYSIS / AliAnalysisGoodies.cxx
index 5349243f437d3675707acd6eb892f00efdaaab3e..f2ce7d0b75d849b051584f6ebaae9ad66baab83d 100644 (file)
 #include "AliXMLCollection.h" 
 #include "AliAnalysisGoodies.h" 
 #include "AliAnalysisManager.h" 
+#include "AliAODHandler.h"
 #include "AliAnalysisTask.h" 
-  //#include "AliPhotonAnalysisTask.h" 
 #include "AliLog.h" 
 
 #include <Riostream.h>
-#include <TAlienCollection.h>
-#include <TChain.h>
+#ifdef WITHALIEN
+#include <TGridResult.h>
 #include <TFileMerger.h>
+#include <TFile.h> 
+#endif
+#include <TChain.h>
 #include <TGrid.h>
 #include <TROOT.h> 
 #include <TSystem.h>
-
+#include <TEntryList.h>
 
 //______________________________________________________________________________
 AliAnalysisGoodies::AliAnalysisGoodies() :
+  TObject(),
+  fTimer(), 
   fESDTreeName("esdTree"), 
-  fnumberOfTasks(0),
-  fTaskList(0),
-  fTaskInType(0), 
-  fTaskOuType(0)
+  fAmgr(0)
 {
   fTimer.Reset() ; 
    
@@ -54,14 +56,46 @@ AliAnalysisGoodies::AliAnalysisGoodies() :
     TGrid::Connect("alien://");
   else 
     AliInfo("You are not connected to the GRID") ; 
+ // Make the analysis manager
+  fAmgr = new AliAnalysisManager("Goodies Manager", "Analysis manager created by AliAnalysisGoodies") ;
+}
+
+//______________________________________________________________________________
+AliAnalysisGoodies::AliAnalysisGoodies(const AliAnalysisGoodies& ag) :
+  TObject(),
+  fTimer(), 
+  fESDTreeName(""), 
+  fAmgr(0x0)  
+{
+  
+  fESDTreeName = ag.fESDTreeName ;  
+  TString token = gSystem->Getenv("GRID_TOKEN") ; 
+  
+  if ( token == "OK" ) 
+    TGrid::Connect("alien://");
+  else 
+    AliInfo("You are not connected to the GRID") ; 
+   
+  // Make the analysis manager
+  fAmgr = new AliAnalysisManager("Goodies Manager", "Analysis manager created by AliAnalysisGoodies") ;
+}
+
+//______________________________________________________________________________
+AliAnalysisGoodies& AliAnalysisGoodies::operator=(const AliAnalysisGoodies& ag)
+{
+  // Assignment operator
+  if(this!=&ag) {
+  }
+
+  return *this;
 }
 
 //______________________________________________________________________________
 void AliAnalysisGoodies::Help() const  
 {
   AliInfo("Analysis utilities:\n") ; 
-  printf("                ***  Copy  : copy files ESD files listed in an xml collection from AliEn catalog to local storage and creates a local xml collection  \n") ; 
-  printf("                                        usage: Copy(in, out)\n") ; 
+  printf("                ***  Alien2Local  : copy files ESD files listed in an xml collection from AliEn catalog to local storage and creates a local xml collection  \n") ; 
+  printf("                                        usage: Alien2Local(in, out)\n") ; 
   printf("                                                in: a xml esd collection file name    \n") ;  
   printf("                                                ou: the local directory where to save the esd root files   \n") ;  
   printf("                ***  Make  : makes esd collection from tags  \n") ; 
@@ -88,13 +122,14 @@ void AliAnalysisGoodies::Help() const
 }
 
 //______________________________________________________________________
-const Bool_t AliAnalysisGoodies::Alien2Local(const TString collectionNameIn, const TString localDir)
+Bool_t AliAnalysisGoodies::Alien2Local(const TString collectionNameIn, const TString localDir)
 {
   // copy files ESD files listed in an xml collection from AliEn catalog to local storage and creates a local xml collection
   // usage: Alien2Local(in, out)
   //        in: a xml esd collection file name 
   //        ou: the local directory where to save the esd root files          
 
+#ifdef WITHALIEN
   Bool_t rv = kTRUE ; 
 
   fTimer.Start() ; 
@@ -108,11 +143,9 @@ const Bool_t AliAnalysisGoodies::Alien2Local(const TString collectionNameIn, con
   collectionOu->SetCollectionName(collectionNameOu) ; 
   collectionOu->WriteHeader() ; 
 
-  TFileMerger merger ; 
-  
   const char* ocwd = gSystem->WorkingDirectory();
 
-  Int_t counter = 0 ;  
+  Int_t counter = 1 ;  
   while ( collectionIn->Next() ) {
     gSystem->ChangeDirectory(localDir) ; 
     TString fileTURL = collectionIn->GetTURL("") ; 
@@ -123,18 +156,21 @@ const Bool_t AliAnalysisGoodies::Alien2Local(const TString collectionNameIn, con
     tempo.Remove(tempo.Last('/'), tempo.Length()) ; 
     TString runNumber = tempo(tempo.Last('/')+1, tempo.Length())+"/" ; 
     TString dir = localDir + runNumber ; 
-    gSystem->MakeDirectory(dir) ; 
-    gSystem->ChangeDirectory(dir) ; 
-    dir += evtsNumber + "/"; 
-    gSystem->MakeDirectory(dir) ; 
-    gSystem->ChangeDirectory(dir) ; 
-    dir += collectionIn->GetCollectionName() ; 
+    dir += evtsNumber ;
+    char line[1024] ; 
+    sprintf(line, ".! mkdir -p %s", dir.Data()) ; 
+    gROOT->ProcessLine(line) ; 
+    printf("***************************%s\n", line) ; 
     TEntryList * list = collectionIn->GetEventList("") ; 
-    
-    collectionOu->WriteBody(counter, collectionIn->GetGUID(""), collectionIn->GetLFN(""), collectionIn->GetTURL(""), list) ;
-    counter++ ; 
-    printf("Copying %s to %s\n", fileTURL.Data(), dir.Data()) ;  
-    merger.Cp(fileTURL, dir) ;
+    if (!list) 
+     list = new TEntryList() ; 
+    tempo = fileTURL ; 
+    TString filename = tempo(tempo.Last('/')+1, tempo.Length()) ;  
+    dir += filename ; 
+    AliInfo(Form("Copying %s to %s\n", fileTURL.Data(), dir.Data())) ;  
+    collectionOu->WriteBody(counter, collectionIn->GetGUID(""), collectionIn->GetLFN(""), dir, list) ;
+    counter++ ;
+    TFile::Cp(fileTURL, dir) ;
   }
   collectionOu->Export() ;
   gSystem->ChangeDirectory(ocwd) ; 
@@ -142,11 +178,86 @@ const Bool_t AliAnalysisGoodies::Alien2Local(const TString collectionNameIn, con
   fTimer.Stop();
   fTimer.Print();
 
-  return rv ; 
+  return rv ;
+#else
+  return kFALSE;
+#endif
 }
 
 //______________________________________________________________________
-const Bool_t AliAnalysisGoodies::Make(AliRunTagCuts *runCuts, AliEventTagCuts *evtCuts, const char * in, const char * out) const  
+AliAnalysisDataContainer * AliAnalysisGoodies::ConnectInput(AliAnalysisTask * task, TClass * classin, UShort_t index) 
+{
+  // connect a task to the input
+
+  if ( ! fAmgr->GetTask(task->GetName()) ) 
+    fAmgr->AddTask(task) ;
+  else 
+    AliFatal(Form("Task %s already exists", task->GetName())) ; 
+
+  AliAnalysisDataContainer * taskInput = 0x0 ; 
+  if ( fAmgr->GetInputs() ) 
+    taskInput = dynamic_cast<AliAnalysisDataContainer *>(fAmgr->GetInputs()->FindObject(Form("InputContainer_%s_%d", task->GetName(), index))) ; 
+  if ( ! taskInput ) {
+    taskInput  = fAmgr->CreateContainer(Form("InputContainer_%s_%d", task->GetName(), index), classin, AliAnalysisManager::kInputContainer) ;
+    fAmgr->ConnectInput (task, index, taskInput);
+  }
+  else 
+    AliFatal(Form("Input %s already exists", taskInput->GetName())) ; 
+
+  return taskInput ; 
+} 
+
+//______________________________________________________________________
+void AliAnalysisGoodies::ConnectInput(AliAnalysisTask * task, AliAnalysisDataContainer * taskInput, UShort_t index) 
+{
+  // connect a task to the input
+
+  if ( ! fAmgr->GetTask(task->GetName()) ) 
+    fAmgr->AddTask(task) ;
+  else 
+    AliFatal(Form("Task %s already exists", task->GetName())) ; 
+
+  fAmgr->ConnectInput (task, index, taskInput);
+} 
+
+//______________________________________________________________________
+AliAnalysisDataContainer *  AliAnalysisGoodies::ConnectOuput(AliAnalysisTask * task, TClass * classou, UShort_t index, TString opt ) 
+{
+  // connect a task to the output
+
+  char filename[20] ; 
+
+    if (opt == "AOD" ) {    
+      if ( fAmgr->GetOutputEventHandler() == 0x0) {
+       AliAODHandler * aodHandler = new AliAODHandler() ; 
+       aodHandler->SetOutputFileName(Form("%s_0.root",task->GetName())) ; 
+       fAmgr->SetOutputEventHandler(aodHandler) ;
+      } 
+      sprintf(filename, "default") ; 
+    } 
+    else 
+      sprintf(filename, "%s_%d.root",task->GetName(), index) ; 
+    
+    AliAnalysisDataContainer * taskOuput = 0x0 ;
+    if ( fAmgr->GetOutputs() ) 
+      taskOuput = dynamic_cast<AliAnalysisDataContainer *>(fAmgr->GetOutputs()->FindObject(Form("OutputContainer_%s_%d", task->GetName(), index))) ; 
+    if ( ! taskOuput )
+      taskOuput = fAmgr->CreateContainer(Form("OutputContainer_%s_%d", task->GetName(), index), classou, AliAnalysisManager::kOutputContainer, filename) ;
+    fAmgr->ConnectOutput(task, index, taskOuput);
+    
+    return taskOuput ; 
+} 
+
+//______________________________________________________________________
+void AliAnalysisGoodies::ConnectOuput(AliAnalysisTask * task, AliAnalysisDataContainer * taskOuput, UShort_t index) 
+{
+  // connect a task to the output
+
+  fAmgr->ConnectInput (task, index, taskOuput);
+} 
+
+//______________________________________________________________________
+Bool_t AliAnalysisGoodies::Make(AliRunTagCuts *runCuts, AliLHCTagCuts *lhcCuts, AliDetectorTagCuts *detCuts, AliEventTagCuts *evtCuts, const char * in, const char * out) const  
 {
   // makes esd collection from tags 
   // usage Make(tags, esds)
@@ -162,9 +273,9 @@ const Bool_t AliAnalysisGoodies::Make(AliRunTagCuts *runCuts, AliEventTagCuts *e
  
   TString file(in) ; 
   if ( file.Contains(".root") ) 
-    rv = MakeEsdCollectionFromTagFile(runCuts, evtCuts, file.Data(), out) ; 
+    rv = MakeEsdCollectionFromTagFile(runCuts, lhcCuts, detCuts, evtCuts, file.Data(), out) ; 
   else  if ( file.Contains(".xml") ) 
-    rv = MakeEsdCollectionFromTagCollection(runCuts, evtCuts, file.Data(), out) ;
+    rv = MakeEsdCollectionFromTagCollection(runCuts, lhcCuts, detCuts, evtCuts, file.Data(), out) ;
   else {
     AliError(Form("%s is not a valid file format", in)) ; 
     rv = kFALSE ; 
@@ -174,7 +285,7 @@ const Bool_t AliAnalysisGoodies::Make(AliRunTagCuts *runCuts, AliEventTagCuts *e
 }
 
 //______________________________________________________________________
-const Bool_t AliAnalysisGoodies::MakeEsdCollectionFromTagFile(AliRunTagCuts *runCuts, AliEventTagCuts *evtCuts, const char * in, const char * out) const 
+Bool_t AliAnalysisGoodies::MakeEsdCollectionFromTagFile(AliRunTagCuts *runCuts, AliLHCTagCuts *lhcCuts, AliDetectorTagCuts *detCuts, AliEventTagCuts *evtCuts, const char * in, const char * out) const 
 {
   // Makes an esd collection from a root tag file 
   Bool_t rv = kTRUE ; 
@@ -188,14 +299,14 @@ const Bool_t AliAnalysisGoodies::MakeEsdCollectionFromTagFile(AliRunTagCuts *run
   if ( ! rv ) 
     return rv ; 
  
-  tagAna->CreateXMLCollection(out, runCuts, evtCuts) ;
+  tagAna->CreateXMLCollection(out, runCuts, lhcCuts, detCuts, evtCuts) ;
  
   return rv ; 
 
 }
 
 //______________________________________________________________________
-const Bool_t AliAnalysisGoodies::MakeEsdCollectionFromTagCollection(AliRunTagCuts * runCuts, AliEventTagCuts * evtCuts, const char * in, const char * out) const 
+Bool_t AliAnalysisGoodies::MakeEsdCollectionFromTagCollection(AliRunTagCuts *runCuts, AliLHCTagCuts *lhcCuts, AliDetectorTagCuts *detCuts, AliEventTagCuts *evtCuts, const char * in, const char * out) const 
 {
   // Makes an esd collection from a xml tag collection 
   Bool_t rv = kTRUE ; 
@@ -203,19 +314,24 @@ const Bool_t AliAnalysisGoodies::MakeEsdCollectionFromTagCollection(AliRunTagCut
   printf("*** Create Collection       ***\n");
   printf("***  Wk-Dir = |%s|             \n",gSystem->WorkingDirectory());
   printf("***  Coll   = |%s|             \n",in);                      
+
+#ifdef WITHALIEN
   
-  TAlienCollection * collection = TAlienCollection::Open(in);
-  TGridResult* result = collection->GetGridResult("");
+  TGridCollection * collection = (TGridCollection*)gROOT->ProcessLine(Form("TAlienCollection::Open(\"%s\", 0)",in));
+  TGridResult* result = collection->GetGridResult("", 0, 0);
   AliTagAnalysis * tagAna = new AliTagAnalysis(); 
   tagAna->ChainGridTags(result);
 
-  tagAna->CreateXMLCollection(out, runCuts, evtCuts) ;
+  tagAna->CreateXMLCollection(out, runCuts, lhcCuts, detCuts, evtCuts) ;
 
+#else
+  rv =  kFALSE;
+#endif
   return rv ; 
 }
 
 //______________________________________________________________________
-const Bool_t AliAnalysisGoodies::MakeEsdCollectionFromTagCollection(const char * runCuts, const char * evtCuts, const char * in, const char * out) const 
+Bool_t AliAnalysisGoodies::MakeEsdCollectionFromTagCollection(const char * runCuts, const char *lhcCuts, const char *detCuts, const char * evtCuts, const char * in, const char * out) const 
 {
   // Makes an esd collection from a xml tag collection 
   
@@ -226,18 +342,23 @@ const Bool_t AliAnalysisGoodies::MakeEsdCollectionFromTagCollection(const char *
   printf("***  Wk-Dir = |%s|             \n",gSystem->WorkingDirectory());
   printf("***  Coll   = |%s|             \n",in);                      
   
-  TAlienCollection * collection = TAlienCollection::Open(in);
-  TGridResult* result = collection->GetGridResult("");
+#ifdef WITHALIEN
+
+  TGridCollection * collection = (TGridCollection*)gROOT->ProcessLine(Form("TAlienCollection::Open(\"%s\", 0)",in));
+  TGridResult* result = collection->GetGridResult("", 0, 0);
   AliTagAnalysis * tagAna = new AliTagAnalysis(); 
   tagAna->ChainGridTags(result);
   
-  tagAna->CreateXMLCollection(out, runCuts, evtCuts) ;
+  tagAna->CreateXMLCollection(out, runCuts, lhcCuts, detCuts, evtCuts) ;
 
-  return rv ; 
+#else
+  rv = kFALSE;
+#endif
+  return rv ;
 }
 
 //______________________________________________________________________
-const Bool_t AliAnalysisGoodies::Merge(const char * collectionFile, const char * subFile, const char * outFile) 
+Bool_t AliAnalysisGoodies::Merge(const char * collectionFile, const char * subFile, const char * outFile) 
 {
   // merges files listed in a xml collection 
   // usage Merge(collection, outputFile))
@@ -257,8 +378,10 @@ const Bool_t AliAnalysisGoodies::Merge(const char * collectionFile, const char *
   printf("***  Wk-Dir = |%s|             \n",gSystem->WorkingDirectory());
   printf("***  Coll   = |%s|             \n",collectionFile);                  
   
-  TAlienCollection * collection = TAlienCollection::Open(collectionFile);
-  TGridResult* result = collection->GetGridResult("");
+#ifdef WITHALIEN
+
+  TGridCollection * collection = (TGridCollection*)gROOT->ProcessLine(Form("TAlienCollection::Open(\"%s\", 0)",collectionFile));
+  TGridResult* result = collection->GetGridResult("", 0, 0);
   
   Int_t index = 0  ;
   const char * turl ;
@@ -293,15 +416,17 @@ const Bool_t AliAnalysisGoodies::Merge(const char * collectionFile, const char *
   fTimer.Stop();
   fTimer.Print();
   
-  return rv ; 
+#else
+  rv = kFALSE;
+#endif
+  return rv ;
 }
 
 //______________________________________________________________________
-const Bool_t AliAnalysisGoodies::Process(TChain * chain) 
+Bool_t AliAnalysisGoodies::Process(TChain * chain) 
 {
   // process events starting from a chain of esd Trees
   Bool_t rv = kFALSE ; 
-
   fTimer.Start() ;
 
   rv = ProcessChain(chain) ; 
@@ -313,22 +438,24 @@ const Bool_t AliAnalysisGoodies::Process(TChain * chain)
 }
 
 //______________________________________________________________________
-const Bool_t AliAnalysisGoodies::Process(const char * inFile) 
+Bool_t AliAnalysisGoodies::Process(const char * inFile) 
 { 
   // process the events with an Analysis Task 
   // usage Process(esdFile)
   //              esdFile: is of the form opt?file_lfn 
   Bool_t rv = kFALSE ; 
-  AliRunTagCuts   * runCuts = 0x0 ; 
-  AliEventTagCuts * evtCuts = 0x0 ;
+  AliRunTagCuts      * runCuts = 0x0 ; 
+  AliLHCTagCuts      * lhcCuts = 0x0 ;
+  AliDetectorTagCuts * detCuts = 0x0 ; 
+  AliEventTagCuts    * evtCuts = 0x0 ;
 
-  rv = Process(inFile, runCuts, evtCuts) ; 
+  rv = Process(inFile, runCuts, lhcCuts, detCuts, evtCuts) ; 
 
   return rv ; 
 }
 
 //______________________________________________________________________
-const Bool_t AliAnalysisGoodies::Process(const char * inFile, AliRunTagCuts *runCuts, AliEventTagCuts * evtCuts ) 
+Bool_t AliAnalysisGoodies::Process(const char * inFile, AliRunTagCuts *runCuts, AliLHCTagCuts *lhcCuts, AliDetectorTagCuts *detCuts, AliEventTagCuts * evtCuts ) 
 {
   // process the events with an Analysis Task 
   // usage Process(esdFile, runtagCuts, evtTagCuts)
@@ -349,11 +476,11 @@ const Bool_t AliAnalysisGoodies::Process(const char * inFile, AliRunTagCuts *run
 
   } else if (file.Contains("tag?") && file.Contains(".root") ) {
     file.ReplaceAll("tag?", "") ; 
-    rv = ProcessTagFile(file.Data(), runCuts, evtCuts) ; 
+    rv = ProcessTagFile(file.Data(), runCuts, lhcCuts, detCuts, evtCuts) ; 
 
   } else if (file.Contains("tag?") && file.Contains(".xml") ) {
     file.ReplaceAll("tag?", "") ; 
-    rv = ProcessTagXmlCollection(file.Data(), runCuts, evtCuts) ; 
+    rv = ProcessTagXmlCollection(file.Data(), runCuts, lhcCuts, detCuts, evtCuts) ; 
 
   } else { 
     AliError(Form("%s is not a valid file format", inFile)) ; 
@@ -367,7 +494,7 @@ const Bool_t AliAnalysisGoodies::Process(const char * inFile, AliRunTagCuts *run
 }
 
 //______________________________________________________________________
-const Bool_t AliAnalysisGoodies::Process(const char * inFile, const char * runCuts, const char * evtCuts) 
+Bool_t AliAnalysisGoodies::Process(const char * inFile, const char * runCuts, const char * lhcCuts, const char * detCuts, const char * evtCuts) 
 {
   // process the events with an Analysis Task 
   // usage Process(esdFile, runtagCuts, evtTagCuts)
@@ -388,11 +515,11 @@ const Bool_t AliAnalysisGoodies::Process(const char * inFile, const char * runCu
 
   } else if (file.Contains("tag?") && file.Contains(".root") ) {
     file.ReplaceAll("tag?", "") ; 
-    rv = ProcessTagFile(file.Data(), runCuts, evtCuts) ; 
+    rv = ProcessTagFile(file.Data(), runCuts, lhcCuts, detCuts, evtCuts) ; 
 
   } else if (file.Contains("tag?") && file.Contains(".xml") ) {
     file.ReplaceAll("tag?", "") ; 
-    rv = ProcessTagXmlCollection(file.Data(), runCuts, evtCuts) ; 
+    rv = ProcessTagXmlCollection(file.Data(), runCuts, lhcCuts, detCuts, evtCuts) ; 
 
   } else { 
     AliError(Form("%s is not a valid file format", inFile)) ; 
@@ -406,42 +533,16 @@ const Bool_t AliAnalysisGoodies::Process(const char * inFile, const char * runCu
 }
 
 //______________________________________________________________________
-const Bool_t AliAnalysisGoodies::ProcessChain(TChain * chain) const
+Bool_t AliAnalysisGoodies::ProcessChain(TChain * chain) const
 {
   // Procees a TChain. 
 
   Bool_t rv = kTRUE ;
 
-  if (! fTaskList ) {
-    AliError("No tasks defined") ; 
-    return kFALSE ;
-  }
-
-  // Make the analysis manager
-  AliAnalysisManager * mgr = new AliAnalysisManager() ;
-
-  // Make tasks 
-  // The top input must be common to all top tasks
-  TClass * classIn = fTaskInType[0] ; 
-  AliAnalysisDataContainer * taskInput  = mgr->CreateContainer("Input  Container", classIn, AliAnalysisManager::kInputContainer) ;
-  Int_t index ; 
-  for (index = 0; index < fnumberOfTasks; index++) {
-    AliAnalysisTask * task = fTaskList[index] ;
-    mgr->AddTask(task) ;
-  
-    // Create containers for input/output
-    TClass * classOu = fTaskOuType[index] ; 
-    AliAnalysisDataContainer * taskOutput = mgr->CreateContainer("Output Container", classOu, AliAnalysisManager::kOutputContainer) ;
-    mgr->ConnectInput (task, 0, taskInput);
-    mgr->ConnectOutput(task, 0, taskOutput);
-  }
-  
-  // Open data
-  taskInput->SetData(chain);
-
-  if (mgr->InitAnalysis()) {
-    mgr->PrintStatus();
-    chain->Process(mgr);
+  // start processing 
+  if (fAmgr->InitAnalysis()) {
+    fAmgr->PrintStatus();
+    fAmgr->StartAnalysis("local",chain);
   } else 
     rv = kFALSE ; 
   
@@ -449,7 +550,7 @@ const Bool_t AliAnalysisGoodies::ProcessChain(TChain * chain) const
 }
  
 //______________________________________________________________________
-const Bool_t AliAnalysisGoodies::ProcessEsdFile(const char * esdFile) const   
+Bool_t AliAnalysisGoodies::ProcessEsdFile(const char * esdFile) const   
 {
   // process the events in a single ESD file with an Analysis Task 
   // usage ProcessLocalEsdFile(esdFile)
@@ -473,7 +574,7 @@ const Bool_t AliAnalysisGoodies::ProcessEsdFile(const char * esdFile) const
 }
 
 //______________________________________________________________________
-const Bool_t AliAnalysisGoodies::ProcessTagFile(const char * tagFile, AliRunTagCuts *runCuts, AliEventTagCuts *evtCuts) const   
+Bool_t AliAnalysisGoodies::ProcessTagFile(const char * tagFile, AliRunTagCuts *runCuts, AliLHCTagCuts *lhcCuts, AliDetectorTagCuts *detCuts, AliEventTagCuts *evtCuts) const   
 {
   // process the events in a single Tag file with an Analysis Task 
   // usage ProcessLocalEsdFile(tagFile)
@@ -497,7 +598,7 @@ const Bool_t AliAnalysisGoodies::ProcessTagFile(const char * tagFile, AliRunTagC
 
   // Query the tag file and make the analysis chain
   TChain * analysisChain = new TChain(fESDTreeName)  ;
-  analysisChain = tagAna->QueryTags(runCuts, evtCuts);
+  analysisChain = tagAna->QueryTags(runCuts, lhcCuts, detCuts, evtCuts);
   
   // Process the events
   rv = ProcessChain(analysisChain) ; 
@@ -506,7 +607,7 @@ const Bool_t AliAnalysisGoodies::ProcessTagFile(const char * tagFile, AliRunTagC
 }
 
 //______________________________________________________________________
-const Bool_t AliAnalysisGoodies::ProcessTagFile(const char * tagFile, const char * runCuts, const char * evtCuts) const   
+Bool_t AliAnalysisGoodies::ProcessTagFile(const char * tagFile, const char * runCuts, const char * lhcCuts, const char * detCuts, const char * evtCuts) const   
 {
   // process the events in a single Tag file with an Analysis Task 
   // usage ProcessLocalEsdFile(tagFile)
@@ -531,7 +632,7 @@ const Bool_t AliAnalysisGoodies::ProcessTagFile(const char * tagFile, const char
 
   // Query the tag file and make the analysis chain
   TChain * analysisChain = new TChain(fESDTreeName)  ;
-  analysisChain = tagAna->QueryTags(runCuts, evtCuts);
+  analysisChain = tagAna->QueryTags(runCuts, lhcCuts, detCuts, evtCuts);
   
   // Process the events
  rv = ProcessChain(analysisChain) ; 
@@ -540,7 +641,7 @@ const Bool_t AliAnalysisGoodies::ProcessTagFile(const char * tagFile, const char
 }
 
 //______________________________________________________________________
-const Bool_t AliAnalysisGoodies::ProcessEsdXmlCollection(const char * xmlFile) const   
+Bool_t AliAnalysisGoodies::ProcessEsdXmlCollection(const char * xmlFile) const   
 {
   // process the events in a xml ESD collection  with an Analysis Task 
   // usage ProcessLocalEsdFile(xmlFile)
@@ -552,28 +653,35 @@ const Bool_t AliAnalysisGoodies::ProcessEsdXmlCollection(const char * xmlFile) c
   printf("***  Wk-Dir = |%s|             \n",gSystem->WorkingDirectory());
   printf("***  Coll   = |%s|             \n",xmlFile);                 
 
-  TAlienCollection * collection = TAlienCollection::Open(xmlFile) ; 
+#ifdef WITHALIEN
+  //AliXMLCollection * collection = AliXMLCollection::Open(xmlFile,0) ;
+  TGridCollection * collection =  (TGridCollection*)gROOT->ProcessLine(Form("TAlienCollection::Open(\"%s\", 0)", xmlFile));
   if (! collection) {
     AliError(Form("%s not found", xmlFile)) ; 
     return kFALSE ; 
   }
 
-  TGridResult* result = collection->GetGridResult("");
+  TGridResult* result = collection->GetGridResult("",0 ,0);
   TList* analysisfilelist = result->GetFileInfoList();
   
   // Makes the ESD chain 
   printf("*** Getting the Chain       ***\n");
   TChain* analysisChain = new TChain(fESDTreeName);
   analysisChain->AddFileInfoList(analysisfilelist);
+
   // Process the events
   rv = ProcessChain(analysisChain) ; 
 
+#else
+  rv = kFALSE;
+
+#endif
+
   return rv ; 
 }
 
 //______________________________________________________________________
-const Bool_t AliAnalysisGoodies::ProcessTagXmlCollection(const char * xmlFile, AliRunTagCuts *runCuts, AliEventTagCuts * evtCuts) const   
+Bool_t AliAnalysisGoodies::ProcessTagXmlCollection(const char * xmlFile, AliRunTagCuts *runCuts, AliLHCTagCuts *lhcCuts, AliDetectorTagCuts *detCuts, AliEventTagCuts * evtCuts) const   
 {
   // process the events in a xml ESD collection  with an Analysis Task 
   // usage ProcessLocalEsdFile(xmlFile)
@@ -588,34 +696,39 @@ const Bool_t AliAnalysisGoodies::ProcessTagXmlCollection(const char * xmlFile, A
 
   printf("*** Process       ***\n");
   printf("***  Wk-Dir = |%s|             \n",gSystem->WorkingDirectory());
-  printf("***  Coll   = |%s|             \n",xmlFile);                 
+  printf("***  Coll   = |%s|            \n",xmlFile);                  
  
   // check if file is local or alien
   if ( gSystem->AccessPathName(xmlFile) ) 
     TGrid::Connect("alien://"); 
 
-  TAlienCollection * collection = TAlienCollection::Open(xmlFile) ; 
+#ifdef WITHALIEN
+
+  TGridCollection * collection = (TGridCollection*)gROOT->ProcessLine(Form("TAlienCollection::Open(\"%s\", 0)",xmlFile));
   if (! collection) {
     AliError(Form("%s not found", xmlFile)) ; 
     return kFALSE ; 
   }
 
-  TGridResult* result = collection->GetGridResult("");
+  TGridResult* result = collection->GetGridResult("", 0, 0);
   AliTagAnalysis * tagAna = new AliTagAnalysis(); 
   tagAna->ChainGridTags(result);
   
   // Query the tag file and make the analysis chain
   TChain * analysisChain = new TChain(fESDTreeName)  ;
-  analysisChain = tagAna->QueryTags(runCuts, evtCuts);
+  analysisChain = tagAna->QueryTags(runCuts, lhcCuts, detCuts, evtCuts);
 
   // Process the events
   rv = ProcessChain(analysisChain) ; 
 
+#else
+  rv = kFALSE;
+#endif
   return rv ; 
 }
 
 //______________________________________________________________________
-const Bool_t AliAnalysisGoodies::ProcessTagXmlCollection(const char * xmlFile, const char * runCuts, const char * evtCuts) const   
+Bool_t AliAnalysisGoodies::ProcessTagXmlCollection(const char * xmlFile, const char * runCuts, const char * lhcCuts, const char * detCuts, const char * evtCuts) const   
 {
   // process the events in a xml ESD collection  with an Analysis Task 
   // usage ProcessLocalEsdFile(xmlFile)
@@ -632,32 +745,37 @@ const Bool_t AliAnalysisGoodies::ProcessTagXmlCollection(const char * xmlFile, c
   printf("***  Wk-Dir = |%s|             \n",gSystem->WorkingDirectory());
   printf("***  Coll   = |%s|             \n",xmlFile);                 
  
+#ifdef WITHALIEN
+
   // check if file is local or alien
   if ( gSystem->AccessPathName(xmlFile) ) 
     TGrid::Connect("alien://"); 
 
-  TAlienCollection * collection = TAlienCollection::Open(xmlFile) ; 
+  TGridCollection * collection = (TGridCollection*)gROOT->ProcessLine(Form("TAlienCollection::Open(\"%s\", 0)",xmlFile));
   if (! collection) {
     AliError(Form("%s not found", xmlFile)) ; 
     return kFALSE ; 
   }
 
-  TGridResult* result = collection->GetGridResult("");
+  TGridResult* result = collection->GetGridResult("", 0, 0);
   AliTagAnalysis * tagAna = new AliTagAnalysis(); 
   tagAna->ChainGridTags(result);
   
   // Query the tag file and make the analysis chain
   TChain * analysisChain = new TChain(fESDTreeName)  ;
-  analysisChain = tagAna->QueryTags(runCuts, evtCuts);
+  analysisChain = tagAna->QueryTags(runCuts, lhcCuts, detCuts, evtCuts);
 
   // Process the events
   rv = ProcessChain(analysisChain) ; 
 
+#else
+  rv = kFALSE;
+#endif
   return rv ; 
 }
 
 //______________________________________________________________________
-const Bool_t AliAnalysisGoodies::Register( const char * lfndir, const char * pfndir, const char * file) 
+Bool_t AliAnalysisGoodies::Register( const char * lfndir, const char * pfndir, const char * file) 
 {
   // register files already stored in a MSS into the AliEn catalog
   // usage: Register(lfndir, pfndir, pfnFileName)
@@ -702,14 +820,3 @@ const Bool_t AliAnalysisGoodies::Register( const char * lfndir, const char * pfn
   return rv;
 }
  
-//______________________________________________________________________
-void AliAnalysisGoodies::SetTasks(Int_t nb, AliAnalysisTask ** taskList, TClass ** inputType, TClass ** outputType)
-{
-  // define a task with its output and input type
-
-  
-  fnumberOfTasks= nb; 
-  fTaskList   = taskList ;
-  fTaskInType = inputType ; 
-  fTaskOuType = outputType ; 
-}