X-Git-Url: http://git.uio.no/git/?p=u%2Fmrichter%2FAliRoot.git;a=blobdiff_plain;f=ANALYSIS%2FAliAnalysisGoodies.cxx;h=f2ce7d0b75d849b051584f6ebaae9ad66baab83d;hp=b78d9f3300a3dae9101cfca641c1bd0d489a9b58;hb=95a4dd3fef82dcd8a110e732027d435e5e4f8ef9;hpb=50026a5fc306b1f72d81b5fa29daec7bf8504e14 diff --git a/ANALYSIS/AliAnalysisGoodies.cxx b/ANALYSIS/AliAnalysisGoodies.cxx index b78d9f3300a..f2ce7d0b75d 100644 --- a/ANALYSIS/AliAnalysisGoodies.cxx +++ b/ANALYSIS/AliAnalysisGoodies.cxx @@ -25,6 +25,7 @@ #include "AliXMLCollection.h" #include "AliAnalysisGoodies.h" #include "AliAnalysisManager.h" +#include "AliAODHandler.h" #include "AliAnalysisTask.h" #include "AliLog.h" @@ -32,6 +33,7 @@ #ifdef WITHALIEN #include #include +#include #endif #include #include @@ -44,10 +46,7 @@ AliAnalysisGoodies::AliAnalysisGoodies() : TObject(), fTimer(), fESDTreeName("esdTree"), - fnumberOfTasks(0), - fTaskList(0), - fTaskInType(0), - fTaskOuType(0) + fAmgr(0) { fTimer.Reset() ; @@ -57,6 +56,8 @@ 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") ; } //______________________________________________________________________________ @@ -64,10 +65,7 @@ AliAnalysisGoodies::AliAnalysisGoodies(const AliAnalysisGoodies& ag) : TObject(), fTimer(), fESDTreeName(""), - fnumberOfTasks(0), - fTaskList(0), - fTaskInType(0), - fTaskOuType(0) + fAmgr(0x0) { fESDTreeName = ag.fESDTreeName ; @@ -77,6 +75,19 @@ AliAnalysisGoodies::AliAnalysisGoodies(const AliAnalysisGoodies& ag) : 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; } //______________________________________________________________________________ @@ -132,8 +143,6 @@ Bool_t AliAnalysisGoodies::Alien2Local(const TString collectionNameIn, const TSt collectionOu->SetCollectionName(collectionNameOu) ; collectionOu->WriteHeader() ; - TFileMerger merger ; - const char* ocwd = gSystem->WorkingDirectory(); Int_t counter = 1 ; @@ -161,7 +170,7 @@ Bool_t AliAnalysisGoodies::Alien2Local(const TString collectionNameIn, const TSt 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) ; @@ -175,6 +184,78 @@ Bool_t AliAnalysisGoodies::Alien2Local(const TString collectionNameIn, const TSt #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(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(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 { @@ -236,8 +317,8 @@ Bool_t AliAnalysisGoodies::MakeEsdCollectionFromTagCollection(AliRunTagCuts *run #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); @@ -263,8 +344,8 @@ Bool_t AliAnalysisGoodies::MakeEsdCollectionFromTagCollection(const char * runCu #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); @@ -299,8 +380,8 @@ Bool_t AliAnalysisGoodies::Merge(const char * collectionFile, const char * subFi #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 ; @@ -458,36 +539,10 @@ Bool_t AliAnalysisGoodies::ProcessChain(TChain * chain) const 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++) { - AliAnalysisTask * task = fTaskList[index] ; - mgr->AddTask(task) ; - - // Create containers for input/output - TClass * classOu = fTaskOuType[index] ; - 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); - } - // start processing - - if (mgr->InitAnalysis()) { - mgr->PrintStatus(); - mgr->StartAnalysis("local",chain); + if (fAmgr->InitAnalysis()) { + fAmgr->PrintStatus(); + fAmgr->StartAnalysis("local",chain); } else rv = kFALSE ; @@ -599,27 +654,29 @@ Bool_t AliAnalysisGoodies::ProcessEsdXmlCollection(const char * xmlFile) const printf("*** Coll = |%s| \n",xmlFile); #ifdef WITHALIEN - - TGridCollection * collection = (TGridCollection*)gROOT->ProcessLine(Form("TAlienCollection::Open(%s)",xmlFile)); + //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 ; } @@ -639,7 +696,7 @@ Bool_t AliAnalysisGoodies::ProcessTagXmlCollection(const char * xmlFile, AliRunT 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) ) @@ -647,13 +704,13 @@ Bool_t AliAnalysisGoodies::ProcessTagXmlCollection(const char * xmlFile, AliRunT #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); @@ -694,13 +751,13 @@ Bool_t AliAnalysisGoodies::ProcessTagXmlCollection(const char * xmlFile, const c 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); @@ -763,14 +820,3 @@ Bool_t AliAnalysisGoodies::Register( const char * lfndir, const char * pfndir, c 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 ; -}