enum anaModes {mLocal,mPROOF,mGrid}; //mLocal: Analyze locally files in your computer using aliroot //mPROOF: Analyze CAF files with PROOF //mGrid: Analyze files on Grid via AliEn plug-in and using precompiled FLOW libraries // CENTRALITY DEFINITION //Int_t binfirst = 4; //where do we start numbering bins //Int_t binlast = 6; //where do we stop numbering bins //const Int_t numberOfCentralityBins = 9; Int_t binfirst = 0; //where do we start numbering bins Int_t binlast = 8; //where do we stop numbering bins const Int_t numberOfCentralityBins = 9; Float_t centralityArray[numberOfCentralityBins+1] = {0.,5.,10.,20.,30.,40.,50.,60.,70.,80.}; // in centrality percentile //Int_t centralityArray[numberOfCentralityBins+1] = {41,80,146,245,384,576,835,1203,1471,10000}; // in terms of TPC only reference multiplicity TString commonOutputFileName = "outputCentrality"; // e.g.: result for centrality bin 0 will be in the file "outputCentrality0.root", etc //void runFlowTaskCentralityTrain(Int_t mode=mLocal, Int_t nEvents = 10, //Bool_t DATA = kFALSE, const Char_t* dataDir="/Users/snelling/alice_data/Therminator_midcentral", Int_t offset = 0) void runFlowTaskCentralityTrain( Int_t mode = mPROOF, Bool_t useFlowParFiles = kFALSE, Bool_t DATA = kTRUE, const Char_t* dataDir = "/alice/data/LHC10h_000137162_p1_plusplusplus#esdTree", Int_t nEvents = 1e4, Int_t offset = 0, Bool_t useTender = kFALSE ) { // Time: TStopwatch timer; timer.Start(); // Cross-check user settings before starting: // CrossCheckUserSettings(DATA); // Load needed libraries: LoadLibraries(mode,useFlowParFiles); // Create analysis manager: AliAnalysisManager *mgr = new AliAnalysisManager("FlowAnalysisManager"); // Chains: if(mode == mLocal) { TChain* chain = CreateESDChain(dataDir, nEvents, offset); //TChain* chain = CreateAODChain(dataDir, nEvents, offset); } // Connect plug-in to the analysis manager: if(mode == mGrid) { gROOT->LoadMacro("CreateAlienHandler.C"); AliAnalysisGrid *alienHandler = CreateAlienHandler(useFlowParFiles); if(!alienHandler) return; mgr->SetGridHandler(alienHandler); } // Event handlers: AliVEventHandler* esdH = new AliESDInputHandler; mgr->SetInputEventHandler(esdH); if (!DATA) { AliMCEventHandler *mc = new AliMCEventHandler(); mgr->SetMCtruthEventHandler(mc); } // Task to check the offline trigger: gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C"); AddTaskPhysicsSelection(!DATA); //Add the centrality determination task gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskCentrality.C"); AliCentralitySelectionTask* centSelTask = AddTaskCentrality(); if (!DATA) centSelTask->SetMCInput(); if (DATA) centSelTask->SetPass(1); if (useTender) { //Add the tenders gROOT->LoadMacro("$ALICE_ROOT/PWG/FLOW/macros/AddTaskTenderFlow.C"); AddTaskTenderFlow(); } // Setup analysis per centrality bin: gROOT->LoadMacro("AddTaskFlowCentrality.C"); for (Int_t i=binfirst; iSetDebugLevel(2); // Run the analysis: if(!mgr->InitAnalysis()) return; mgr->PrintStatus(); if(mode == mLocal) { mgr->StartAnalysis("local",chain); } else if(mode == mPROOF) { mgr->StartAnalysis("proof",dataDir,nEvents,offset); } else if(mode == mGrid) { mgr->StartAnalysis("grid"); } // Print real and CPU time used for analysis: timer.Stop(); timer.Print(); } // end of void runFlowTaskCentralityTrain(...) //=============================================================================================== /* void CrossCheckUserSettings(Bool_t bData) { // Check in this method if the user settings make sense. if(LYZ1SUM && LYZ2SUM) {cout<<" WARNING: You cannot run LYZ1 and LYZ2 at the same time! LYZ2 needs the output from LYZ1 !!!!"<Load("libCore"); gSystem->Load("libTree"); gSystem->Load("libGeom"); gSystem->Load("libVMC"); gSystem->Load("libXMLIO"); gSystem->Load("libPhysics"); gSystem->Load("libXMLParser"); gSystem->Load("libProof"); gSystem->Load("libMinuit"); if (mode==mLocal || mode==mGrid) { gSystem->Load("libSTEERBase"); gSystem->Load("libCDB"); gSystem->Load("libRAWDatabase"); gSystem->Load("libRAWDatarec"); gSystem->Load("libESD"); gSystem->Load("libAOD"); gSystem->Load("libSTEER"); gSystem->Load("libANALYSIS"); gSystem->Load("libANALYSISalice"); gSystem->Load("libTPCbase"); gSystem->Load("libTOFbase"); gSystem->Load("libTOFrec"); gSystem->Load("libTRDbase"); gSystem->Load("libVZERObase"); gSystem->Load("libVZEROrec"); gSystem->Load("libT0base"); gSystem->Load("libT0rec"); gSystem->Load("libTENDER"); gSystem->Load("libTENDERSupplies"); if (useFlowParFiles) { AliAnalysisAlien::SetupPar("PWGflowBase"); AliAnalysisAlien::SetupPar("PWGflowTasks"); } else { gSystem->Load("libPWGflowBase"); gSystem->Load("libPWGflowTasks"); } } else if (mode==mPROOF) { TList* list = new TList(); list->Add(new TNamed("ALIROOT_MODE", "ALIROOT")); if (useFlowParFiles) list->Add(new TNamed("ALIROOT_EXTRA_LIBS", "ANALYSIS:ANALYSISalice:TENDER:TENDERSupplies")); else list->Add(new TNamed("ALIROOT_EXTRA_LIBS", "ANALYSIS:ANALYSISalice:TENDER:TENDERSupplies:PWGflowBase:PWGflowTasks")); //list->Add(new TNamed("ALIROOT_EXTRA_INCLUDES","PWG/FLOW/Base:PWG/FLOW/Tasks")); // Connect to proof printf("*** Connect to PROOF ***\n"); gEnv->SetValue("XSec.GSI.DelegProxy","2"); //TProof* proof = TProof::Open("alice-caf.cern.ch"); TProof* proof = TProof::Open("skaf.saske.sk"); // list the data available //gProof->ShowDataSets("/*/*"); //gProof->ShowDataSets("/alice/sim/"); //for MC Data //gProof->ShowDataSets("/alice/data/"); //for REAL Data proof->ClearPackages(); proof->EnablePackage("VO_ALICE@AliRoot::v4-21-14-AN",list); if (useFlowParFiles) { gProof->UploadPackage("PWGflowBase.par"); gProof->UploadPackage("PWGflowTasks.par"); } // Show enables Packages gProof->ShowEnabledPackages(); } } // end of void LoadLibraries(const anaModes mode) // Helper macros for creating chains // from: CreateESDChain.C,v 1.10 jgrosseo Exp TChain* CreateESDChain(const char* aDataDir, Int_t aRuns, Int_t offset) { // creates chain of files in a given directory or file containing a list. // In case of directory the structure is expected as: // //AliESDs.root // //AliESDs.root // ... if (!aDataDir) return 0; Long_t id, size, flags, modtime; if (gSystem->GetPathInfo(aDataDir, &id, &size, &flags, &modtime)) { printf("%s not found.\n", aDataDir); return 0; } TChain* chain = new TChain("esdTree"); TChain* chaingAlice = 0; if (flags & 2) { TString execDir(gSystem->pwd()); TSystemDirectory* baseDir = new TSystemDirectory(".", aDataDir); TList* dirList = baseDir->GetListOfFiles(); Int_t nDirs = dirList->GetEntries(); gSystem->cd(execDir); Int_t count = 0; for (Int_t iDir=0; iDirAt(iDir); if (!presentDir || !presentDir->IsDirectory() || strcmp(presentDir->GetName(), ".") == 0 || strcmp(presentDir->GetName(), "..") == 0) continue; if (offset > 0) { --offset; continue; } if (count++ == aRuns) break; TString presentDirName(aDataDir); presentDirName += "/"; presentDirName += presentDir->GetName(); chain->Add(presentDirName + "/AliESDs.root/esdTree"); // cerr<> esdfile; if (!esdfile.Contains("root")) continue; // protection if (offset > 0) { --offset; continue; } if (count++ == aRuns) break; // add esd file chain->Add(esdfile); } in.close(); } return chain; } // end of TChain* CreateESDChain(const char* aDataDir, Int_t aRuns, Int_t offset) //=============================================================================================== TChain* CreateAODChain(const char* aDataDir, Int_t aRuns, Int_t offset) { // creates chain of files in a given directory or file containing a list. // In case of directory the structure is expected as: // //AliAOD.root // //AliAOD.root // ... if (!aDataDir) return 0; Long_t id, size, flags, modtime; if (gSystem->GetPathInfo(aDataDir, &id, &size, &flags, &modtime)) { printf("%s not found.\n", aDataDir); return 0; } TChain* chain = new TChain("aodTree"); TChain* chaingAlice = 0; if (flags & 2) { TString execDir(gSystem->pwd()); TSystemDirectory* baseDir = new TSystemDirectory(".", aDataDir); TList* dirList = baseDir->GetListOfFiles(); Int_t nDirs = dirList->GetEntries(); gSystem->cd(execDir); Int_t count = 0; for (Int_t iDir=0; iDirAt(iDir); if (!presentDir || !presentDir->IsDirectory() || strcmp(presentDir->GetName(), ".") == 0 || strcmp(presentDir->GetName(), "..") == 0) continue; if (offset > 0) { --offset; continue; } if (count++ == aRuns) break; TString presentDirName(aDataDir); presentDirName += "/"; presentDirName += presentDir->GetName(); chain->Add(presentDirName + "/AliAOD.root/aodTree"); // cerr<> aodfile; if (!aodfile.Contains("root")) continue; // protection if (offset > 0) { --offset; continue; } if (count++ == aRuns) break; // add aod file chain->Add(aodfile); } in.close(); } return chain; } // end of TChain* CreateAODChain(const char* aDataDir, Int_t aRuns, Int_t offset)