enum { kMyRunModeLocal = 0, kMyRunModeCAF, kMyRunModeGRID}; //#define TENDER TChain * GetAnalysisChain(const char * incollection); void runTriggerStudy(Char_t* data, Long64_t nev = -1, Long64_t offset = 0, Bool_t debug = kFALSE, Int_t runMode = 0, Bool_t isMC = 0, Int_t ntrackletsKine = 100, Bool_t rejectBGV0Trigger = kFALSE, const char* option = "", Int_t workers = -1) { // runMode: // // 0 local // 1 proof #ifdef TENDER TGrid::Connect("alien://"); #endif if (nev < 0) nev = 1234567890; InitAndLoadLibs(runMode,workers,debug); // Create the analysis manager mgr = new AliAnalysisManager; // Add ESD handler AliESDInputHandler* esdH = new AliESDInputHandler; // Do I need any of this? // esdH->SetInactiveBranches("AliESDACORDE FMD ALIESDTZERO ALIESDZDC AliRawDataErrorLogs CaloClusters Cascades EMCALCells EMCALTrigger ESDfriend Kinks AliESDTZERO ALIESDACORDE MuonTracks TrdTracks"); mgr->SetInputEventHandler(esdH); 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("CreateAlienHandlerTrigger.C"); AliAnalysisGrid *alienHandler = CreateAlienHandlerTrigger(data,"pass1",isMC); if (!alienHandler) { cout << "Cannot create alien handler" << endl; exit(1); } mgr->SetGridHandler(alienHandler); } // Add tender #ifdef TENDER gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/TenderSupplies/AddTaskTender.C"); AliAnalysisTask* tender=0x0; if(!isMC) { tender = AddTaskTender(kTRUE); // tender->SetDebugLevel(10); } else { tender = AddTaskTender(kFALSE); // tender->SetDebugLevel(10); } #endif // Add physics selection gROOT->ProcessLine(".L $ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C"); physicsSelectionTask = AddTaskPhysicsSelection(isMC,1,!isMC);//FIXME physicsSelectionTask->GetPhysicsSelection()->SetSkipZDCTime(1);// Skip ZDC - applyied later // 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; } // load my task AliAnalysisTaskTriggerStudy *task = new AliAnalysisTaskTriggerStudy("TaskOfflineTrigger"); mgr->AddTask(task); // Set I/O AliAnalysisDataContainer *cinput0 = mgr->GetCommonInputContainer(); AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("cTrigStudy", AliHistoListWrapper::Class(), AliAnalysisManager::kOutputContainer, "Trig_Temp.root"); mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer()); mgr->ConnectOutput(task,1,coutput1); task->SetIsMC(isMC); task->SetNTrackletsCutKine(ntrackletsKine); task->SetRejectBGWithV0(rejectBGV0Trigger); 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)+"#esdTree",nev); } else if (runMode == kMyRunModeGRID) { mgr->StartAnalysis("grid"); }else { cout << "ERROR: unknown run mode" << endl; } if (doSave) MoveOutput(data, Form("_TrkCut_%d_V0BGCUT_%d",ntrackletsKine,rejectBGV0Trigger)); } void MoveOutput(const char * data, const char * suffix = ""){ TString path("outTrigger/"); path = path + TString(data).Tokenize("/")->Last()->GetName() + suffix; TString fileName = "trigger_study.root"; gSystem->mkdir(path, kTRUE); gSystem->Rename(fileName, path + "/" + fileName); gSystem->Rename("event_stat.root", path + "/" + "event_stat.root"); 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("esdTree"); 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) { if (runMode == kMyRunModeCAF) { cout << "Init in CAF mode" << endl; gEnv->SetValue("XSec.GSI.DelegProxy", "2"); // cout << workers>0 ? Form("workers=%d",workers) : "workers=1x" << endl; // exit(1); TProof * p = TProof::Open("alice-caf.cern.ch", workers>0 ? Form("workers=%d",workers) : "workers=1x"); p->Exec("TObject *o = gEnv->GetTable()->FindObject(\"Proof.UseMergers\"); gEnv->GetTable()->Remove(o);", kTRUE); //TProof::Open("skaf.saske.sk", workers>0 ? Form("workers=%d",workers) : ""); // Enable the needed package (par fileS) // 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/PWG0base"); // gProof->EnablePackage("$ALICE_ROOT/PWG0base"); 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/include ")); gROOT->ProcessLine(gSystem->ExpandPathName(".include $ALICE_ROOT/TOF ")); // Use a precompiled tag TString alirootMode=""; // STEERBase,ESD,AOD,ANALYSIS,ANALYSISalice (default aliroot mode) //alirootMode="ALIROOT"; // $ALICE_ROOT/macros/loadlibs.C // alirootMode="REC"; // $ALICE_ROOT/macros/loadlibsrec.C // alirootMode="SIM"; // $ALICE_ROOT/macros/loadlibssim.C // alirootMode="TRAIN"; // $ALICE_ROOT/macros/loadlibstrain.C (not working yet) // alirootMode="CUSTOM"; // nothing is loaded, but aliroot variables are set (not working yet) TString extraLibs; extraLibs= ""; // not needed in default aliroot mode extraLibs+="CDB:RAWDatabase:STEER:TENDER:TRDbase:STAT:TRDrec:VZERObase:VZEROsim:VZEROrec:RAWDatarec:TPCbase:TPCrec:TPCcalib:TENDERSupplies:RAWDatabase:RAWDatarec:RAWDatasim:TOFbase:TOFrec"; TList *list = new TList(); // sets $ALIROOT_MODE on each worker to let proof to know to run in special mode list->Add(new TNamed("ALIROOT_MODE", alirootMode.Data())); // sets $ALIROOT_EXTRA_LIBS on each worker to let proof to know to load extra libs list->Add(new TNamed("ALIROOT_EXTRA_LIBS", extraLibs.Data())); #ifdef TENDER list->Add(new TNamed("ALIROOT_ENABLE_ALIEN", "1")); #endif // connect to proof gProof->EnablePackage("VO_ALICE@AliRoot::v4-21-22-AN", list); // gProof->Exec("TGrid::Connect(\"alien://\");"); } else { cout << "Init in Local or Grid mode" << endl; gSystem->Load("libCore"); gSystem->Load("libGeom"); gSystem->Load("libPhysics"); gSystem->Load("libVMC"); gSystem->Load("libTree"); gSystem->Load("libProof"); gSystem->Load("libTree"); gSystem->Load("libSTEERBase"); gSystem->Load("libESD"); gSystem->Load("libAOD"); gSystem->Load("libANALYSIS"); gSystem->Load("libOADB"); 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 // TODO: replace this by a list of TOBJStrings TString taskName("$ALICE_ROOT/PWG0/multPbPb/AliAnalysisTaskTriggerStudy.cxx+"); TString listName("$ALICE_ROOT/PWGPP/background/AliHistoListWrapper.cxx+"); gSystem->ExpandPathName(taskName); gSystem->ExpandPathName(listName); // Create, add task if (runMode == kMyRunModeCAF) { gProof->Load(listName+(debug?"+g":"")); gProof->Load(taskName+(debug?"+g":"")); } else { gROOT->LoadMacro(listName+(debug?"+g":"")); gROOT->LoadMacro(taskName+(debug?"+g":"")); } }