ROOT logo
#include "Riostream.h"
class AliAnalysisAlien;

void LoadLibraries();
AliAnalysisAlien* CreateAlienHandler(const char *plugin_mode);

Int_t  iCollisionType = 0;
UInt_t kTriggerInt = AliVEvent::kAnyINT;
UInt_t kTriggerMuonAll = AliVEvent::kMUL7 | AliVEvent::kMUSH7 | AliVEvent::kMUU7 | AliVEvent::kMUS7;
UInt_t kTriggerMuonBarell = AliVEvent::kMUU7;
UInt_t kTriggerEMC = AliVEvent::kEMC7;
UInt_t kTriggerHM  = AliVEvent::kHighMult;
UInt_t kTriggerMask = kTriggerInt;
TString grid_datadir = "/alice/data/2011/LHC11h/";
TString data_pattern = "*ESDs/pass1_std/*ESDs.root";
Int_t runNumbers[5] = {166532};
Int_t debug_level = 1;        // Debugging

void RunTOFqa(const char* plugin_mode="full") {

	// macro to run the TOF qa
	gSystem->SetIncludePath("-I. -I$ROOTSYS/include -I$ALICE_ROOT/include -I$ALICE_ROOT -I$ALICE_ROOT/ITS -I$ALICE_ROOT/TRD -I$ALICE_ROOT/PWGPP");
	//
	TString trainName = "TOFqa";
	TString analysisMode = "grid"; // "local", "grid", or "proof"
	TString inputMode    = "list"; // "list", "xml", or "dataset"
	Long64_t nentries=123567890,firstentry=0;
	Bool_t saveProofToAlien=kFALSE;
	TString proofOutdir = "";
	if(analysisMode=="grid") {
		// Connect to AliEn
		TGrid::Connect("alien://");
	} 
	else if(analysisMode=="proof") {
		// Connect to the PROOF cluster
		if(inputMode!="dataset") {printf("Input mode must be dataset, for proof analysis\n"); return;}
		gEnv->SetValue("XSec.GSI.DelegProxy","2");
		TProof::Open("alicecaf");
		if(saveProofToAlien) {
			TGrid::Connect("alien://");
			if(gGrid) {
				TString homedir = gGrid->GetHomeDirectory();
				TString workdir = homedir + trainName;
				if(!gGrid->Cd(workdir)) {
					gGrid->Cd(homedir);
					if(gGrid->Mkdir(workdir)) {
						gGrid->Cd(trainName);
						::Info("TOFqa::Connect()", "Directory %s created", gGrid->Pwd());
					}
				}	   
				gGrid->Mkdir("proof_output");
				gGrid->Cd("proof_output");
				proofOutdir = Form("alien://%s", gGrid->Pwd());
			} 
		}
	}
	

	// AliRoot libraries
	if(analysisMode=="local" || analysisMode=="grid") {
		LoadLibraries();
	} 
	else if (analysisMode=="proof") {
		// do nothing now
	}

	if(analysisMode!="grid") {printf("Analysis mode must be grid, to use alien plugin\n"); return;}
	AliAnalysisAlien *alienHandler = CreateAlienHandler(plugin_mode);  
	if(!alienHandler) return;

	// Create the analysis manager
	AliAnalysisManager *mgr  = new AliAnalysisManager("My Manager","My Manager");
	mgr->SetDebugLevel(10);

	// Connect plug-in to the analysis manager
	mgr->SetGridHandler(alienHandler);

	// Handler
	AliESDInputHandler *esdHandler = new AliESDInputHandler();
	esdHandler->SetReadFriends(kFALSE);
	mgr->SetInputEventHandler(esdHandler);
	mgr->SetDebugLevel(debug_level);
	if(saveProofToAlien) mgr->SetSpecialOutputLocation(proofOutdir);
  
	// Physics Selection
	gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
	AliPhysicsSelectionTask* physSelTask = AddTaskPhysicsSelection(kFALSE /*MC*/);

	// TOF qa task
	gROOT->LoadMacro("$ALICE_ROOT/PWGPP/TOF/AddTaskTOFQA.C");
	AliAnalysisTaskTOFqa *tofQA = AddTaskTOFQA();
	tofQA->SelectCollisionCandidates(kTriggerMask);

	// run the analysis
	if (mgr->InitAnalysis()) {                                                                                                              
		mgr->PrintStatus(); 
		if (!strcmp(analysisMode.Data(), "local")) {
			TChain* chain = new TChain("esdTree");
			chain->AddFile("/Users/Chiara/SOFT/MyAnalysis/TOF/QA_PbPb/OnGrid/AliESDs.root");
			Printf("The chain has %d entries",chain->GetEntries());
			mgr->StartAnalysis("local",chain);
		}
		else mgr->StartAnalysis("grid");
	}
  
}


void LoadLibraries()
{
	Printf("Loading libs");
	gSystem->Load("libANALYSIS");
	gSystem->Load("libANALYSISalice");
	gSystem->Load("libCORRFW");
	gSystem->Load("libTENDER");
	gSystem->Load("libPWG0base.so");
	gSystem->Load("libPWG0dep.so");
	gSystem->Load("libPWG0selectors.so");
	gSystem->Load("libPWGPP.so");

}


//_____________________________________________________________________________
//
AliAnalysisAlien* CreateAlienHandler(const char* plugin_mode)
{

	AliAnalysisAlien *plugin = new AliAnalysisAlien();
	// Set the run mode (can be "full", "test", "offline", "submit" or "terminate")
	plugin->SetRunMode(plugin_mode);
	plugin->SetUser("zampolli");
	plugin->SetNtestFiles(1);
	// Set versions of used packages
	plugin->SetAPIVersion("V1.1x");
	plugin->SetROOTVersion("v5-30-03-1");
	plugin->SetAliROOTVersion("v5-02-08-AN");
	plugin->AddIncludePath("-I. -I$ROOTSYS/include -I$ALICE_ROOT/include -I$ALICE_ROOT/ITS -I$ALICE_ROOT/TRD");   
	plugin->SetAdditionalLibs("libCORRFW.so libTENDER.so libPWG0base.so libPWG0dep.so libPWG0selectors.so libPWGPP.so");
	// Declare input data to be processed.
	plugin->SetGridDataDir(grid_datadir); // specify LHC period
	plugin->SetDataPattern(data_pattern); // specify reco pass and AOD set
	plugin->SetRunPrefix("000");
	for (Int_t i=0; i<5; i++) {
		if (!runNumbers[i]) break;
		plugin->AddRunNumber(runNumbers[i]);
	}   
	plugin->SetNrunsPerMaster(1);
	plugin->SetOutputToRunNo(1);
   
	plugin->SetGridWorkingDir("QATOF_1");
	plugin->SetGridOutputDir("output"); // In this case will be $HOME/work/output
	//plugin->SetAdditionalLibs();
	plugin->SetDefaultOutputs(kTRUE);
	plugin->SetAnalysisMacro("TOFqa_1.C");
	plugin->SetExecutable("TOFqa_1.sh");
	plugin->SetSplitMaxInputFileNumber(100);
	plugin->SetInputFormat("xml-single");
	plugin->SetJDLName("TOFqa_1.jdl");
	plugin->SetSplitMode("se");
	plugin->SetMergeViaJDL(kTRUE);
	plugin->SetExecutableCommand("aliroot -b -q");
	//plugin->SetOneStageMerging(kFALSE); // One can use this to force a single stage
	plugin->SetMaxMergeStages(2); // adapt n to your expected number of files 
	
	return plugin;
}
 RunTOFqa.C:1
 RunTOFqa.C:2
 RunTOFqa.C:3
 RunTOFqa.C:4
 RunTOFqa.C:5
 RunTOFqa.C:6
 RunTOFqa.C:7
 RunTOFqa.C:8
 RunTOFqa.C:9
 RunTOFqa.C:10
 RunTOFqa.C:11
 RunTOFqa.C:12
 RunTOFqa.C:13
 RunTOFqa.C:14
 RunTOFqa.C:15
 RunTOFqa.C:16
 RunTOFqa.C:17
 RunTOFqa.C:18
 RunTOFqa.C:19
 RunTOFqa.C:20
 RunTOFqa.C:21
 RunTOFqa.C:22
 RunTOFqa.C:23
 RunTOFqa.C:24
 RunTOFqa.C:25
 RunTOFqa.C:26
 RunTOFqa.C:27
 RunTOFqa.C:28
 RunTOFqa.C:29
 RunTOFqa.C:30
 RunTOFqa.C:31
 RunTOFqa.C:32
 RunTOFqa.C:33
 RunTOFqa.C:34
 RunTOFqa.C:35
 RunTOFqa.C:36
 RunTOFqa.C:37
 RunTOFqa.C:38
 RunTOFqa.C:39
 RunTOFqa.C:40
 RunTOFqa.C:41
 RunTOFqa.C:42
 RunTOFqa.C:43
 RunTOFqa.C:44
 RunTOFqa.C:45
 RunTOFqa.C:46
 RunTOFqa.C:47
 RunTOFqa.C:48
 RunTOFqa.C:49
 RunTOFqa.C:50
 RunTOFqa.C:51
 RunTOFqa.C:52
 RunTOFqa.C:53
 RunTOFqa.C:54
 RunTOFqa.C:55
 RunTOFqa.C:56
 RunTOFqa.C:57
 RunTOFqa.C:58
 RunTOFqa.C:59
 RunTOFqa.C:60
 RunTOFqa.C:61
 RunTOFqa.C:62
 RunTOFqa.C:63
 RunTOFqa.C:64
 RunTOFqa.C:65
 RunTOFqa.C:66
 RunTOFqa.C:67
 RunTOFqa.C:68
 RunTOFqa.C:69
 RunTOFqa.C:70
 RunTOFqa.C:71
 RunTOFqa.C:72
 RunTOFqa.C:73
 RunTOFqa.C:74
 RunTOFqa.C:75
 RunTOFqa.C:76
 RunTOFqa.C:77
 RunTOFqa.C:78
 RunTOFqa.C:79
 RunTOFqa.C:80
 RunTOFqa.C:81
 RunTOFqa.C:82
 RunTOFqa.C:83
 RunTOFqa.C:84
 RunTOFqa.C:85
 RunTOFqa.C:86
 RunTOFqa.C:87
 RunTOFqa.C:88
 RunTOFqa.C:89
 RunTOFqa.C:90
 RunTOFqa.C:91
 RunTOFqa.C:92
 RunTOFqa.C:93
 RunTOFqa.C:94
 RunTOFqa.C:95
 RunTOFqa.C:96
 RunTOFqa.C:97
 RunTOFqa.C:98
 RunTOFqa.C:99
 RunTOFqa.C:100
 RunTOFqa.C:101
 RunTOFqa.C:102
 RunTOFqa.C:103
 RunTOFqa.C:104
 RunTOFqa.C:105
 RunTOFqa.C:106
 RunTOFqa.C:107
 RunTOFqa.C:108
 RunTOFqa.C:109
 RunTOFqa.C:110
 RunTOFqa.C:111
 RunTOFqa.C:112
 RunTOFqa.C:113
 RunTOFqa.C:114
 RunTOFqa.C:115
 RunTOFqa.C:116
 RunTOFqa.C:117
 RunTOFqa.C:118
 RunTOFqa.C:119
 RunTOFqa.C:120
 RunTOFqa.C:121
 RunTOFqa.C:122
 RunTOFqa.C:123
 RunTOFqa.C:124
 RunTOFqa.C:125
 RunTOFqa.C:126
 RunTOFqa.C:127
 RunTOFqa.C:128
 RunTOFqa.C:129
 RunTOFqa.C:130
 RunTOFqa.C:131
 RunTOFqa.C:132
 RunTOFqa.C:133
 RunTOFqa.C:134
 RunTOFqa.C:135
 RunTOFqa.C:136
 RunTOFqa.C:137
 RunTOFqa.C:138
 RunTOFqa.C:139
 RunTOFqa.C:140
 RunTOFqa.C:141
 RunTOFqa.C:142
 RunTOFqa.C:143
 RunTOFqa.C:144
 RunTOFqa.C:145
 RunTOFqa.C:146
 RunTOFqa.C:147
 RunTOFqa.C:148
 RunTOFqa.C:149
 RunTOFqa.C:150
 RunTOFqa.C:151
 RunTOFqa.C:152
 RunTOFqa.C:153
 RunTOFqa.C:154
 RunTOFqa.C:155
 RunTOFqa.C:156
 RunTOFqa.C:157
 RunTOFqa.C:158
 RunTOFqa.C:159
 RunTOFqa.C:160
 RunTOFqa.C:161
 RunTOFqa.C:162
 RunTOFqa.C:163
 RunTOFqa.C:164
 RunTOFqa.C:165
 RunTOFqa.C:166
 RunTOFqa.C:167
 RunTOFqa.C:168