]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ANALYSIS/AliAnalysisGoodies.cxx
Moving AliTagAnalysis and AliXMLCollection from ESD to ANALYSIS library (Panos+Cvetan)
[u/mrichter/AliRoot.git] / ANALYSIS / AliAnalysisGoodies.cxx
index 01ed80382e3af0dddfa15739c0291e0ad9ee5942..f3eb38745760aa83a57e24f10f10d8be4c52f1cb 100644 (file)
 #include <Riostream.h>
 #ifdef WITHALIEN
 #include <TAlienCollection.h>
+#include <TGridResult.h>
+#include <TFileMerger.h>
 #endif
 #include <TChain.h>
-#include <TFileMerger.h>
 #include <TGrid.h>
 #include <TROOT.h> 
 #include <TSystem.h>
-
+#include <TEntryList.h>
 
 //______________________________________________________________________________
 AliAnalysisGoodies::AliAnalysisGoodies() :
@@ -62,8 +63,8 @@ AliAnalysisGoodies::AliAnalysisGoodies() :
 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") ; 
@@ -90,13 +91,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() ; 
@@ -114,7 +116,7 @@ const Bool_t AliAnalysisGoodies::Alien2Local(const TString collectionNameIn, con
   
   const char* ocwd = gSystem->WorkingDirectory();
 
-  Int_t counter = 0 ;  
+  Int_t counter = 1 ;  
   while ( collectionIn->Next() ) {
     gSystem->ChangeDirectory(localDir) ; 
     TString fileTURL = collectionIn->GetTURL("") ; 
@@ -125,17 +127,20 @@ 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()) ;  
+    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++ ;
     merger.Cp(fileTURL, dir) ;
   }
   collectionOu->Export() ;
@@ -144,11 +149,14 @@ 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  
+Bool_t AliAnalysisGoodies::Make(AliRunTagCuts *runCuts, AliEventTagCuts *evtCuts, const char * in, const char * out) const  
 {
   // makes esd collection from tags 
   // usage Make(tags, esds)
@@ -176,7 +184,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, AliEventTagCuts *evtCuts, const char * in, const char * out) const 
 {
   // Makes an esd collection from a root tag file 
   Bool_t rv = kTRUE ; 
@@ -197,7 +205,7 @@ const Bool_t AliAnalysisGoodies::MakeEsdCollectionFromTagFile(AliRunTagCuts *run
 }
 
 //______________________________________________________________________
-const Bool_t AliAnalysisGoodies::MakeEsdCollectionFromTagCollection(AliRunTagCuts * runCuts, AliEventTagCuts * evtCuts, const char * in, const char * out) const 
+Bool_t AliAnalysisGoodies::MakeEsdCollectionFromTagCollection(AliRunTagCuts * runCuts, AliEventTagCuts * evtCuts, const char * in, const char * out) const 
 {
   // Makes an esd collection from a xml tag collection 
   Bool_t rv = kTRUE ; 
@@ -208,21 +216,21 @@ const Bool_t AliAnalysisGoodies::MakeEsdCollectionFromTagCollection(AliRunTagCut
 
 #ifdef WITHALIEN
   
-  TAlienCollection * collection = TAlienCollection::Open(in);
+  TGridCollection * collection = TAlienCollection::Open(in);
   TGridResult* result = collection->GetGridResult("");
   AliTagAnalysis * tagAna = new AliTagAnalysis(); 
   tagAna->ChainGridTags(result);
 
   tagAna->CreateXMLCollection(out, runCuts, evtCuts) ;
 
-  return rv ; 
 #else
-  return kFALSE;
+  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 * evtCuts, const char * in, const char * out) const 
 {
   // Makes an esd collection from a xml tag collection 
   
@@ -235,7 +243,7 @@ const Bool_t AliAnalysisGoodies::MakeEsdCollectionFromTagCollection(const char *
   
 #ifdef WITHALIEN
 
-  TAlienCollection * collection = TAlienCollection::Open(in);
+  TGridCollection * collection = TAlienCollection::Open(in);
   TGridResult* result = collection->GetGridResult("");
   AliTagAnalysis * tagAna = new AliTagAnalysis(); 
   tagAna->ChainGridTags(result);
@@ -249,7 +257,7 @@ const Bool_t AliAnalysisGoodies::MakeEsdCollectionFromTagCollection(const char *
 }
 
 //______________________________________________________________________
-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))
@@ -271,7 +279,7 @@ const Bool_t AliAnalysisGoodies::Merge(const char * collectionFile, const char *
   
 #ifdef WITHALIEN
 
-  TAlienCollection * collection = TAlienCollection::Open(collectionFile);
+  TGridCollection * collection = TAlienCollection::Open(collectionFile);
   TGridResult* result = collection->GetGridResult("");
   
   Int_t index = 0  ;
@@ -314,11 +322,10 @@ const Bool_t AliAnalysisGoodies::Merge(const char * collectionFile, const char *
 }
 
 //______________________________________________________________________
-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) ; 
@@ -330,7 +337,7 @@ 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)
@@ -345,7 +352,7 @@ const Bool_t AliAnalysisGoodies::Process(const char * inFile)
 }
 
 //______________________________________________________________________
-const Bool_t AliAnalysisGoodies::Process(const char * inFile, AliRunTagCuts *runCuts, AliEventTagCuts * evtCuts ) 
+Bool_t AliAnalysisGoodies::Process(const char * inFile, AliRunTagCuts *runCuts, AliEventTagCuts * evtCuts ) 
 {
   // process the events with an Analysis Task 
   // usage Process(esdFile, runtagCuts, evtTagCuts)
@@ -384,7 +391,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 * evtCuts) 
 {
   // process the events with an Analysis Task 
   // usage Process(esdFile, runtagCuts, evtTagCuts)
@@ -423,7 +430,7 @@ 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. 
 
@@ -433,14 +440,14 @@ const Bool_t AliAnalysisGoodies::ProcessChain(TChain * chain) const
     AliError("No tasks defined") ; 
     return kFALSE ;
   }
-
+  
   // Make the analysis manager
-  AliAnalysisManager * mgr = new AliAnalysisManager() ;
+  AliAnalysisManager * mgr = new AliAnalysisManager("Goodies Manager", "Analysis manager created by AliAnalysisGoodies") ;
 
   // 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) ;
+  AliAnalysisDataContainer * taskInput  = mgr->CreateContainer("InputContainer", classIn, AliAnalysisManager::kInputContainer) ;
   Int_t index ; 
   for (index = 0; index < fnumberOfTasks; index++) {
     AliAnalysisTask * task = fTaskList[index] ;
@@ -448,17 +455,19 @@ const Bool_t AliAnalysisGoodies::ProcessChain(TChain * chain) const
   
     // Create containers for input/output
     TClass * classOu = fTaskOuType[index] ; 
-    AliAnalysisDataContainer * taskOutput = mgr->CreateContainer("Output Container", classOu, AliAnalysisManager::kOutputContainer) ;
+    AliAnalysisDataContainer * taskOutput = mgr->CreateContainer(Form("OutputContainer%d",index), classOu, AliAnalysisManager::kOutputContainer,
+                                            Form("%s.root",task->GetName())) ;
     mgr->ConnectInput (task, 0, taskInput);
     mgr->ConnectOutput(task, 0, taskOutput);
   }
   
   // Open data
-  taskInput->SetData(chain);
+//  taskInput->SetData(chain);
 
   if (mgr->InitAnalysis()) {
     mgr->PrintStatus();
-    chain->Process(mgr);
+//    chain->Process(mgr);
+    mgr->StartAnalysis("local",chain);
   } else 
     rv = kFALSE ; 
   
@@ -466,7 +475,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)
@@ -490,7 +499,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, AliEventTagCuts *evtCuts) const   
 {
   // process the events in a single Tag file with an Analysis Task 
   // usage ProcessLocalEsdFile(tagFile)
@@ -523,7 +532,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 * evtCuts) const   
 {
   // process the events in a single Tag file with an Analysis Task 
   // usage ProcessLocalEsdFile(tagFile)
@@ -557,7 +566,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)
@@ -571,7 +580,7 @@ const Bool_t AliAnalysisGoodies::ProcessEsdXmlCollection(const char * xmlFile) c
 
 #ifdef WITHALIEN
 
-  TAlienCollection * collection = TAlienCollection::Open(xmlFile) ; 
+  TGridCollection * collection = TAlienCollection::Open(xmlFile) ; 
   if (! collection) {
     AliError(Form("%s not found", xmlFile)) ; 
     return kFALSE ; 
@@ -595,7 +604,7 @@ const Bool_t AliAnalysisGoodies::ProcessEsdXmlCollection(const char * xmlFile) c
 }
 
 //______________________________________________________________________
-const Bool_t AliAnalysisGoodies::ProcessTagXmlCollection(const char * xmlFile, AliRunTagCuts *runCuts, AliEventTagCuts * evtCuts) const   
+Bool_t AliAnalysisGoodies::ProcessTagXmlCollection(const char * xmlFile, AliRunTagCuts *runCuts, AliEventTagCuts * evtCuts) const   
 {
   // process the events in a xml ESD collection  with an Analysis Task 
   // usage ProcessLocalEsdFile(xmlFile)
@@ -618,7 +627,7 @@ const Bool_t AliAnalysisGoodies::ProcessTagXmlCollection(const char * xmlFile, A
 
 #ifdef WITHALIEN
 
-  TAlienCollection * collection = TAlienCollection::Open(xmlFile) ; 
+  TGridCollection * collection = TAlienCollection::Open(xmlFile) ; 
   if (! collection) {
     AliError(Form("%s not found", xmlFile)) ; 
     return kFALSE ; 
@@ -642,7 +651,7 @@ const Bool_t AliAnalysisGoodies::ProcessTagXmlCollection(const char * xmlFile, A
 }
 
 //______________________________________________________________________
-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 * evtCuts) const   
 {
   // process the events in a xml ESD collection  with an Analysis Task 
   // usage ProcessLocalEsdFile(xmlFile)
@@ -665,7 +674,7 @@ const Bool_t AliAnalysisGoodies::ProcessTagXmlCollection(const char * xmlFile, c
   if ( gSystem->AccessPathName(xmlFile) ) 
     TGrid::Connect("alien://"); 
 
-  TAlienCollection * collection = TAlienCollection::Open(xmlFile) ; 
+  TGridCollection * collection = TAlienCollection::Open(xmlFile) ; 
   if (! collection) {
     AliError(Form("%s not found", xmlFile)) ; 
     return kFALSE ; 
@@ -689,7 +698,7 @@ const Bool_t AliAnalysisGoodies::ProcessTagXmlCollection(const char * xmlFile, c
 }
 
 //______________________________________________________________________
-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)