// TODO: // 1. run with Many centrality bins at once #include <string.h> enum { kMyRunModeLocal = 0, kMyRunModeCAF, kMyRunModeGRID}; TList * listToLoad = new TList(); TChain * GetAnalysisChain(const char * incollection); void runProof(Char_t* data = "/alice/data/LHC10h_000138653_p2_AOD049", Long64_t nev = -1, Long64_t offset = 0, Bool_t debug = kFALSE, Int_t runMode = 1, Bool_t isMC = 0, const char* option = "SAVE", Int_t workers = -1) { // runMode: // // 0 local // 1 proof // 2 grid if (nev < 0) nev = 1234567890; InitAndLoadLibs(runMode, workers, debug); // Create the analysis manager mgr = new AliAnalysisManager; // Add AOD handler AliAODInputHandler* AODH = new AliAODInputHandler; mgr->SetInputEventHandler(AODH); mgr->SetDebugLevel(10); // Is this needed for AOD? // if(isMC) { // AliMCEventHandler* handler = new AliMCEventHandler; // handler->SetPreReadMode(AliMCEventHandler::kLmPreRead); // mgr->SetMCtruthEventHandler(handler); // } // If we are running on grid, we need the alien handler if (runMode == kMyRunModeGRID) { // Create and configure the alien handler plugin gROOT->LoadMacro("CreateAlienHandler.C"); AliAnalysisGrid *alienHandler = CreateAlienHandler(data, listToLoad, "full", isMC); if (!alienHandler) { cout << "Cannot create alien handler" << endl; exit(1); } mgr->SetGridHandler(alienHandler); } // Parse option strings TString optionStr(option); // remove SAVE option if set // This is copied from a macro by Jan. The reason I kept it is that I may want to pass textual options to the new task at some point Bool_t doSave = kFALSE; TString optionStr(option); if (optionStr.Contains("SAVE")) { optionStr = optionStr(0, optionStr.Index("SAVE")) + optionStr(optionStr.Index("SAVE") + 4, optionStr.Length()); doSave = kTRUE; } // AliLog::SetClassDebugLevel("AliESDtrackCuts", AliLog::kDebug);// FIXME // load my task gROOT->ProcessLine(".L AddTaskSpectraAOD.C"); AliAnalysisTaskSpectraAOD * task = AddTaskSpectraAOD("SpectraAOD.root"); task->SetIsMC(isMC); // Init and run the analy if (!mgr->InitAnalysis()) return; mgr->PrintStatus(); if (runMode == kMyRunModeLocal) { // If running in local mode, create chain of ESD files cout << "RUNNING LOCAL, CHAIN" << endl; TChain * chain = GetAnalysisChain(data); // chain->Print(); mgr->StartAnalysis("local", chain, nev); } else if (runMode == kMyRunModeCAF) { mgr->StartAnalysis("proof", TString(data) + "#aodTree", nev); } else if (runMode == kMyRunModeGRID) { mgr->StartAnalysis("grid"); } else { cout << "ERROR: unknown run mode" << endl; } TString pathsuffix = ""; if (doSave) MoveOutput(data, pathsuffix.Data()); } void MoveOutput(const char * data, const char * suffix = "") { TString path("output/"); path = path + TString(data).Tokenize("/")->Last()->GetName() + suffix; TString fileName = "SpectraAOD.root"; gSystem->mkdir(path, kTRUE); gSystem->Rename(fileName, path + "/" + fileName); // for(Int_t ibin = 0; ibin < 20; ibin++){ // TString fileBin = fileName; // fileBin.ReplaceAll(".root",Form("_%2.2d.root",ibin)); // gSystem->Rename(fileBin, path + "/" + fileBin); // } Printf(">>>>> Moved files to %s", path.Data()); } TChain * GetAnalysisChain(const char * incollection) { // Builds a chain of esd files // incollection can be // - a single root file // - an xml collection of files on alien // - a ASCII containing a list of local root files TChain* analysisChain = 0; // chain analysisChain = new TChain("aodTree"); if (TString(incollection).Contains(".root")) { analysisChain->Add(incollection); } else if (TString(incollection).Contains("xml")) { TGrid::Connect("alien://"); TAlienCollection * coll = TAlienCollection::Open(incollection); while (coll->Next()) { analysisChain->Add(TString("alien://") + coll->GetLFN()); } } else { ifstream file_collect(incollection); TString line; while (line.ReadLine(file_collect)) { analysisChain->Add(line.Data()); } } analysisChain->GetListOfFiles()->Print(); return analysisChain; } void InitAndLoadLibs(Int_t runMode = kMyRunModeLocal, Int_t workers = 0, Bool_t debug = 0) { // Loads libs and par files + custom task and classes // Custom stuff to be loaded listToLoad->Add(new TObjString("AliSpectraAODHistoManager.cxx+")); listToLoad->Add(new TObjString("AliSpectraAODEventCuts.cxx+")); listToLoad->Add(new TObjString("AliSpectraAODTrackCuts.cxx+")); listToLoad->Add(new TObjString("AliAnalysisTaskSpectraAOD.cxx+")); if (runMode == kMyRunModeCAF) { cout << "Init in CAF mode" << endl; gEnv->SetValue("XSec.GSI.DelegProxy", "2"); TProof * p = TProof::Open("alice-caf.cern.ch", workers > 0 ? Form("workers=%d", workers) : "1x"); //TProof * p = TProof::Open("skaf.saske.sk", workers>0 ? Form("workers=%d",workers) : ""); p->Exec("TObject *o = gEnv->GetTable()->FindObject(\"Proof.UseMergers\"); gEnv->GetTable()->Remove(o);", kTRUE); gProof->EnablePackage("VO_ALICE@AliRoot::v4-21-29-AN"); gSystem->Load("libCore.so"); gSystem->Load("libTree.so"); gSystem->Load("libGeom.so"); gSystem->Load("libVMC.so"); gSystem->Load("libPhysics.so"); gSystem->Load("libSTEERBase"); gSystem->Load("libESD"); gSystem->Load("libAOD"); gSystem->Load("libANALYSIS"); gSystem->Load("libOADB"); gSystem->Load("libANALYSISalice"); // Enable the needed package // gProof->UploadPackage("$ALICE_ROOT/obj/STEERBase"); // gProof->EnablePackage("$ALICE_ROOT/obj/STEERBase"); // gProof->UploadPackage("$ALICE_ROOT/obj/ESD"); // gProof->EnablePackage("$ALICE_ROOT/obj/ESD"); // gProof->UploadPackage("$ALICE_ROOT/obj/AOD"); // gProof->EnablePackage("$ALICE_ROOT/obj/AOD"); // gProof->UploadPackage("$ALICE_ROOT/obj/ANALYSIS"); // gProof->EnablePackage("$ALICE_ROOT/obj/ANALYSIS"); // gProof->UploadPackage("$ALICE_ROOT/obj/OADB"); // gProof->EnablePackage("$ALICE_ROOT/obj/OADB"); // gProof->UploadPackage("$ALICE_ROOT/obj/ANALYSISalice"); // gProof->EnablePackage("$ALICE_ROOT/obj/ANALYSISalice"); // gProof->UploadPackage("$ALICE_ROOT/obj/PWG0base"); // gProof->EnablePackage("$ALICE_ROOT/obj/PWG0base"); // gROOT->ProcessLine(gSystem->ExpandPathName(".include $ALICE_ROOT/PWG0/multPb")); // gROOT->ProcessLine(gSystem->ExpandPathName(".include $ALICE_ROOT/PWGPP/background")); } else { cout << "Init in Local or Grid mode" << endl; gSystem->Load("libCore.so"); gSystem->Load("libTree.so"); gSystem->Load("libGeom.so"); gSystem->Load("libVMC.so"); gSystem->Load("libPhysics.so"); gSystem->Load("libSTEERBase"); gSystem->Load("libESD"); gSystem->Load("libAOD"); gSystem->Load("libANALYSIS"); gSystem->Load("libOADB"); gSystem->Load("libANALYSISalice"); // Use AliRoot includes to compile our task gROOT->ProcessLine(".include $ALICE_ROOT/include"); // gSystem->Load("libVMC"); // gSystem->Load("libTree"); // gSystem->Load("libSTEERBase"); // gSystem->Load("libESD"); // gSystem->Load("libAOD"); // gSystem->Load("libANALYSIS"); // gSystem->Load("libANALYSISalice"); // gSystem->Load("libPWG0base"); // gROOT->ProcessLine(gSystem->ExpandPathName(".include $ALICE_ROOT/PWG0/multPb")); // gROOT->ProcessLine(gSystem->ExpandPathName(".include $ALICE_ROOT/PWGPP/background")); // gROOT->ProcessLine(gSystem->ExpandPathName(".include $ALICE_ROOT/PWGPP/background/")); } // Load helper classes TIterator * iter = listToLoad->MakeIterator(); TObjString * name = 0; while (name = (TObjString *)iter->Next()) { gSystem->ExpandPathName(name->String()); cout << name->String().Data(); if (runMode == kMyRunModeCAF) { gProof->Load(name->String() + (debug ? "+g" : "")); } else { gROOT->LoadMacro(name->String() + (debug ? "+g" : "")); } } }