#include "AliXMLCollection.h"
#include "AliAnalysisGoodies.h"
#include "AliAnalysisManager.h"
+#include "AliAODHandler.h"
#include "AliAnalysisTask.h"
#include "AliLog.h"
#ifdef WITHALIEN
#include <TGridResult.h>
#include <TFileMerger.h>
+#include <TFile.h>
#endif
#include <TChain.h>
#include <TGrid.h>
TObject(),
fTimer(),
fESDTreeName("esdTree"),
- fnumberOfTasks(0),
- fTaskList(0),
- fTaskInType(0),
- fTaskOuType(0)
+ fAmgr(0)
{
fTimer.Reset() ;
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") ;
}
//______________________________________________________________________________
TObject(),
fTimer(),
fESDTreeName(""),
- fnumberOfTasks(0),
- fTaskList(0),
- fTaskInType(0),
- fTaskOuType(0)
+ fAmgr(0x0)
{
fESDTreeName = ag.fESDTreeName ;
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;
}
//______________________________________________________________________________
collectionOu->SetCollectionName(collectionNameOu) ;
collectionOu->WriteHeader() ;
- TFileMerger merger ;
-
const char* ocwd = gSystem->WorkingDirectory();
Int_t counter = 1 ;
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) ;
+ TFile::Cp(fileTURL, dir) ;
}
collectionOu->Export() ;
gSystem->ChangeDirectory(ocwd) ;
#endif
}
+//______________________________________________________________________
+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
{
#ifdef WITHALIEN
- TGridCollection * collection = (TGridCollection*)gROOT->ProcessLine(Form("TAlienCollection::Open(%s)",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);
#ifdef WITHALIEN
- TGridCollection * collection = (TGridCollection*)gROOT->ProcessLine(Form("TAlienCollection::Open(%s)",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);
#ifdef WITHALIEN
- TGridCollection * collection = (TGridCollection*)gROOT->ProcessLine(Form("TAlienCollection::Open(%s)",collectionFile));
- TGridResult* result = collection->GetGridResult("");
+ TGridCollection * collection = (TGridCollection*)gROOT->ProcessLine(Form("TAlienCollection::Open(\"%s\", 0)",collectionFile));
+ TGridResult* result = collection->GetGridResult("", 0, 0);
Int_t index = 0 ;
const char * turl ;
Bool_t rv = kTRUE ;
- if (! fTaskList ) {
- AliError("No tasks defined") ;
- return kFALSE ;
- }
-
- // Make the analysis manager
- 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("InputContainer", classIn, AliAnalysisManager::kInputContainer) ;
- Int_t index ;
- for (index = 0; index < fnumberOfTasks; index++) {
-
- TClass * classOu = fTaskOuType[index] ;
- AliAnalysisTask * task = fTaskList[index] ;
-
- AliAnalysisDataContainer * taskOutput = mgr->CreateContainer(Form("OutputContainer%d",index), classOu, AliAnalysisManager::kOutputContainer, Form("%s.root",task->GetName())) ;
- mgr->AddTask(task) ;
-
- // Create containers for input/output
-
- mgr->ConnectInput (task, 0, taskInput);
- mgr->ConnectOutput(task, 0, taskOutput);
- }
-
// start processing
-
- if (mgr->InitAnalysis()) {
- mgr->PrintStatus();
- mgr->StartAnalysis("local",chain);
+ if (fAmgr->InitAnalysis()) {
+ fAmgr->PrintStatus();
+ fAmgr->StartAnalysis("local",chain);
} else
rv = kFALSE ;
#ifdef WITHALIEN
//AliXMLCollection * collection = AliXMLCollection::Open(xmlFile,0) ;
- TGridCollection * collection = (TGridCollection*)gROOT->ProcessLine(Form("TAlienCollection::Open(%s,0)",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);
TList* analysisfilelist = result->GetFileInfoList();
// Makes the ESD chain
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) )
#ifdef WITHALIEN
- TGridCollection * collection = (TGridCollection*)gROOT->ProcessLine(Form("TAlienCollection::Open(%s)",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);
if ( gSystem->AccessPathName(xmlFile) )
TGrid::Connect("alien://");
- TGridCollection * collection = (TGridCollection*)gROOT->ProcessLine(Form("TAlienCollection::Open(%s)",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);
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 ;
-}