ROOT logo

class  AliAnalysisManager;
class  AliAnalysisAlien;
class AliSpectraBothPID;
Int_t mc=-1;
Int_t aod=-1;
TString griddatadir="";
TString datapattern="";
TString gridworkingdir="";
TString aliroot="";
TString root="";


void runGridBoth(TString mode="test",TString configfile="config.txt",Int_t day=15,Int_t month=6, Int_t year=2012) 
{


   	ifstream infile(configfile);
	char buffer[256];
	while (infile.eof()==false)
	{
		buffer[0]='#'; 
		while (buffer[0]=='#'&&infile.eof()==false)
			infile.getline(buffer,256);
		TString tmpstring(buffer);
		cout<<buffer<<endl;
		if(tmpstring.Contains("MC"))
		{
			tmpstring.Remove(0,3);
			cout<<tmpstring<<endl;
		        if (!tmpstring.IsDigit())
			{
				cout<<"Wrong format of MC flag in config file "<<endl;
				return; 	
			}
			mc=tmpstring.Atoi();
		}
		else if(tmpstring.Contains("AOD")&&tmpstring.Length()<6)
		{
			tmpstring.Remove(0,4);
		        if (!tmpstring.IsDigit())
			{
				cout<<"Wrong format of AOD flag in config file "<<endl;
				return; 	
			}
			aod=tmpstring.Atoi();
		}
		else if(tmpstring.Contains("GridDataDir"))
		{
			griddatadir=tmpstring.Remove(0,12);		
		}
		else if(tmpstring.Contains("DataPattern"))
		{	
			datapattern=tmpstring.Remove(0,12);
		}
		else if (tmpstring.Contains("GridWorkingDir"))
		{
			gridworkingdir=tmpstring.Remove(0,15);
		}
		else if(tmpstring.Contains("root")&&!tmpstring.Contains("aliroot"))
		{	
			root=tmpstring.Remove(0,5);
		}
		else if (tmpstring.Contains("aliroot"))
		{
			aliroot=tmpstring.Remove(0,8);
		}

		else
			continue;

	}
	 
	if(mc<0||aod<0||griddatadir.Length()<1||root.Length()<1||datapattern.Length()<1||gridworkingdir.Length()<1||aliroot.Length()<1)
	{
		cout<<"lack of config info"<<endl;
 		return;	
	}	
cout<<mc<<" "<<aod<<" "<<griddatadir.Data()<<" "<<root.Data()<<" "<<datapattern.Data()<<" "<<gridworkingdir.Data()<<" "<<aliroot.Data()<<endl;
	

  TString daystring=Form("%d%d%d",year,month,day);	
  //to be used with Aliroot > v5-03-32-AN
  AliLog::SetGlobalDebugLevel(100);
  // Load common libraries
  gEnv->SetValue("XSec.GSI.DelegProxy", "2");
  
  // Load common libraries
  gSystem->Load("libCore.so");
  gSystem->Load("libTree.so");
  gSystem->Load("libGeom.so");
  gSystem->Load("libVMC.so");
  gSystem->Load("libPhysics.so");
  gSystem->Load("libMinuit.so"); 
  gSystem->Load("libGui.so");
  gSystem->Load("libXMLParser.so");
  gSystem->Load("libSTEERBase.so");
  gSystem->Load("libESD.so");
  gSystem->Load("libCDB.so");
  gSystem->Load("libAOD");
  gSystem->Load("libANALYSIS");
  gSystem->Load("libANALYSISalice");
  gSystem->Load("libCORRFW");
  gSystem->Load("libProof.so");
  gSystem->Load("libRAWDatabase.so");
  gSystem->Load("libSTEER.so");
  gSystem->Load("libTENDER.so");
    gSystem->Load("libTENDERSupplies.so");
gSystem->Load("libPWGLFspectra.so");
  gROOT->ProcessLine(".include $ALICE_ROOT/include ");
  gSystem->SetIncludePath("-I.");
  gROOT->ProcessLine(".include $ALICE_ROOT/TOF ");

  //gSystem->Load("libPWGLFspectra.so");
 // gROOT->LoadMacro("AliSpectraBothTrackCuts.cxx+g");
 // gROOT->LoadMacro("AliSpectraBothEventCuts.cxx+g");
  // gROOT->LoadMacro("HistogramNames.cxx");
 // gROOT->LoadMacro("AliSpectraBothHistoManager.cxx+g");
 // gROOT->LoadMacro("AliSpectraBothPID.cxx+g");
 // gROOT->LoadMacro("AliAnalysisTaskSpectraBoth.cxx+g");
  //__________________________________________________________________________
  // Use AliRoot includes to compile our task
  gROOT->ProcessLine(".include $ALICE_ROOT/include  ");
  gSystem->SetIncludePath("-I.");
  gROOT->ProcessLine(".include $ALICE_ROOT/TOF ");
  gROOT->LoadMacro("$ALICE_ROOT/PWGLF/SPECTRA/PiKaPr/TestAOD/AddTaskSpectraBoth.C");
	
  // Create and configure the alien handler plugin
  AliAnalysisGrid *alienHandler = CreateAlienHandler(mode,daystring);  
  if (!alienHandler) return;
  // Create the analysis manager
  AliAnalysisManager *mgr = new AliAnalysisManager("testAnalysis");
  // Connect plug-in to the analysis manager
  mgr->SetGridHandler(alienHandler);
  if(aod)
  {	
  	AliAODInputHandler* aodH = new AliAODInputHandler();
  	mgr->SetInputEventHandler(aodH);
  }
  else
  {
	 AliESDInputHandler* esdH = new AliESDInputHandler();	
	 mgr->SetInputEventHandler(esdH);
	 if(mc)
        {
             AliMCEventHandler *mch = new AliMCEventHandler();
             mgr->SetMCtruthEventHandler(mch);
	}
  }		
  
  // Add PID task
 // Bool_t isMC=kFALSE, Bool_t autoMCesd=kTRUE,
   //    Bool_t tuneOnData=kFALSE, Int_t recoPass=2, Bool_t cachePID=kFALSE, TString detResponse="",
//Bool_t useTPCEtaCorrection = kFALSE  gROOT->LoadMacro("./AddTaskSpectraBoth.C");

  Double_t Nsigmapid=3.;
  Double_t pt=5.;
  Double_t p=5.;
  Double_t y=.2;
  Double_t ptTofMatch=.6;
  UInt_t trkbit=1;
  UInt_t trkbit2=16;

  UInt_t trkbitQVector=1;
  Bool_t UseCentPatchAOD049=kFALSE;
  Double_t DCA=100000;
  UInt_t minNclsTPC=70;
  UInt_t minNclsTPC2=0;	
  Int_t rebinfactor=1;		
 Bool_t mcfactor=0;
 if(mc)
	mcfactor=1;	

 gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPIDResponse.C");
  AliAnalysisTaskPIDResponse *taskPID=AddTaskPIDResponse(mcfactor,kTRUE,kFALSE,2,kFALSE,"",kTRUE);
taskPID->SetUseTPCEtaCorrection(kTRUE);
 if(!aod)
  {	
  	gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
        AliPhysicsSelectionTask* physSelTask = AddTaskPhysicsSelection();
        if(mc)
        {
             physSelTask->GetPhysicsSelection()->SetAnalyzeMC();
         } 
  }
	

    	AliAnalysisTaskSpectraBoth* task1=0x0;  
	AliAnalysisTaskSpectraBoth* task2=0x0;
	AliAnalysisTaskSpectraBoth* task3=0x0;
	AliAnalysisTaskSpectraBoth* task4=0x0;  



	task1=AddTaskSpectraBoth(mcfactor,-1,-1,-1,-1,-0.8,0.8,Nsigmapid,pt,p,-0.5,0.5,ptTofMatch,trkbit,trkbitQVector,UseCentPatchAOD049,DCA,minNclsTPC,rebinfactor,"V0M",2);

	task2=AddTaskSpectraBoth(mcfactor,-1,-1,-1,-1,-0.8,0.8,Nsigmapid,pt,p,-0.465,0.035,ptTofMatch,trkbit,trkbitQVector,UseCentPatchAOD049,DCA,minNclsTPC,rebinfactor,"V0M",2);
	
	task3=AddTaskSpectraBoth(mcfactor,-1,-1,-1,-1,-0.8,0.8,2.0,pt,p,-0.465,0.035,ptTofMatch,trkbit,trkbitQVector,UseCentPatchAOD049,DCA,minNclsTPC,rebinfactor,"V0M",2);

	task4=AddTaskSpectraBoth(mcfactor,-1,-1,-1,-1,-0.8,0.8,Nsigmapid,pt,p,-0.465,0.035,ptTofMatch,trkbit2,trkbitQVector,UseCentPatchAOD049,DCA,minNclsTPC2,rebinfactor,"V0M",2);

	


  if(mc)
  {
  	task1->SetdotheMCLoopAfterEventCuts(kTRUE);
	task2->SetdotheMCLoopAfterEventCuts(kTRUE);
	task3->SetdotheMCLoopAfterEventCuts(kTRUE);
	task4->SetdotheMCLoopAfterEventCuts(kTRUE);


  }
  else
 {
	task1->GetEventCuts()->SetTriggerSettings(AliVEvent::kINT7);
	task2->GetEventCuts()->SetTriggerSettings(AliVEvent::kINT7);
	task3->GetEventCuts()->SetTriggerSettings(AliVEvent::kINT7);
	task4->GetEventCuts()->SetTriggerSettings(AliVEvent::kINT7);


}	
  if(!aod)
  {
	AliESDtrackCuts* cuttpc1=AliESDtrackCuts::GetStandardITSTPCTrackCuts2011();
	task1->SetAliESDtrackCuts(cuttpc1);
	AliESDtrackCuts* cuttpc2=AliESDtrackCuts::GetStandardITSTPCTrackCuts2011();

	task2->SetAliESDtrackCuts(cuttpc2);
  }
	
  gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPIDqa.C");
  AddTaskPIDqa(); 
   if(mode.Contains("test"))
	mgr->SetDebugLevel(1);
  //mgr->Init();
  if (!mgr->InitAnalysis())return;
  mgr->PrintStatus();

  mgr->StartAnalysis("grid");
}


AliAnalysisGrid* CreateAlienHandler(TString mode="test",TString daystring)
{
  TString filename="*AliAOD.root";
 
		
  if(!aod)
  {
	filename="*AliESDs.root";
  }



 
  TString jobsettings=griddatadir;
  jobsettings+=datapattern;
  if(aod)
	jobsettings+="AOD";
  else
	jobsettings+="ESD";

  if(mc)
	jobsettings+="MC";
  else
	jobsettings+="DATA";
		
		
  jobsettings.ReplaceAll("/","");	

 jobsettings.ReplaceAll("*","");
	
	

  AliAnalysisAlien *plugin = new AliAnalysisAlien();
  //plugin->AddIncludePath("-I. -I$ROOTSYS/include -I$ALICE_ROOT/include -I$ALICE_ROOT/TOF  -I$ALICE_ROOT/PWGLF/SPECTRA/PiKaPr/TestAOD");
  //plugin->SetAdditionalLibs("libSTEERBase.so libESD.so libAOD.so libANALYSISalice.so libPWGLFspectra.so libTENDER.so libTENDERSupplies.so");
  //plugin->SetAnalysisSource("AliSpectraBothHistoManager.cxx AliSpectraBothTrackCuts.cxx AliSpectraBothEventCuts.cxx AliSpectraBothPID.cxx AliAnalysisTaskSpectraBoth.cxx");
    plugin->AddIncludePath("-I. -I$ROOTSYS/include -I$ALICE_ROOT/include -I$ALICE_ROOT/TOF ");
  plugin->SetAdditionalLibs("libTENDER.so libTENDERSupplies.so libPWGLFspectra.so");
 // plugin->SetAnalysisSource("AliSpectraBothHistoManager.cxx AliSpectraBothTrackCuts.cxx AliSpectraBothEventCuts.cxx AliSpectraBothPID.cxx AliAnalysisTaskSpectraBoth.cxx");
  plugin->SetOverwriteMode();
  plugin->SetExecutableCommand("aliroot -q -b");  
  plugin->SetRunMode(mode.Data());
  plugin->SetNtestFiles(1);
  //Set versions of used packages
  plugin->SetAPIVersion("V1.1x");
  plugin->SetROOTVersion(root.Data());
  plugin->SetAliROOTVersion(aliroot.Data());
  // Declare input data to be processed
  plugin->SetGridDataDir(griddatadir.Data());
  plugin->SetDataPattern(Form("%s/%s",datapattern.Data(),filename.Data()));
  plugin->SetGridWorkingDir(Form("%s%s",gridworkingdir.Data(),daystring.Data()));
  plugin->SetAnalysisMacro(Form("%s.C",jobsettings.Data()));
  plugin->SetExecutable(Form("%s.sh",jobsettings.Data()));
  plugin->SetJDLName(Form("Task%s.jdl",jobsettings.Data()));

  if(mc)
  {
      plugin->SetRunPrefix(""); 
    }  
  else
    {
      plugin->SetRunPrefix("000"); 
    }   
  FILE* listruns=fopen("runs.txt","r");
  Int_t irun;
  while(!feof(listruns))
  {
      fscanf(listruns,"%d\n",&irun);
      plugin->AddRunNumber(irun);
  }
  plugin->SetGridOutputDir("output"); // In this case will be $HOME/work/output 
  plugin->SetMaxMergeFiles(25);
  plugin->SetMergeExcludes("EventStat_temp.root"
                            "event_stat.root");
  plugin->SetMergeViaJDL(true);
  plugin->SetTTL(15*3600);
  // Optionally set input format (default xml-single)
  plugin->SetInputFormat("xml-single");
  // Optionally modify job price (default 1)
  plugin->SetPrice(1);      
  // Optionally modify split mode (default 'se')    
  //plugin->SetSplitMaxInputFileNumber();
  plugin->SetSplitMode("se");
  return plugin;
}
 runGridBoth.C:1
 runGridBoth.C:2
 runGridBoth.C:3
 runGridBoth.C:4
 runGridBoth.C:5
 runGridBoth.C:6
 runGridBoth.C:7
 runGridBoth.C:8
 runGridBoth.C:9
 runGridBoth.C:10
 runGridBoth.C:11
 runGridBoth.C:12
 runGridBoth.C:13
 runGridBoth.C:14
 runGridBoth.C:15
 runGridBoth.C:16
 runGridBoth.C:17
 runGridBoth.C:18
 runGridBoth.C:19
 runGridBoth.C:20
 runGridBoth.C:21
 runGridBoth.C:22
 runGridBoth.C:23
 runGridBoth.C:24
 runGridBoth.C:25
 runGridBoth.C:26
 runGridBoth.C:27
 runGridBoth.C:28
 runGridBoth.C:29
 runGridBoth.C:30
 runGridBoth.C:31
 runGridBoth.C:32
 runGridBoth.C:33
 runGridBoth.C:34
 runGridBoth.C:35
 runGridBoth.C:36
 runGridBoth.C:37
 runGridBoth.C:38
 runGridBoth.C:39
 runGridBoth.C:40
 runGridBoth.C:41
 runGridBoth.C:42
 runGridBoth.C:43
 runGridBoth.C:44
 runGridBoth.C:45
 runGridBoth.C:46
 runGridBoth.C:47
 runGridBoth.C:48
 runGridBoth.C:49
 runGridBoth.C:50
 runGridBoth.C:51
 runGridBoth.C:52
 runGridBoth.C:53
 runGridBoth.C:54
 runGridBoth.C:55
 runGridBoth.C:56
 runGridBoth.C:57
 runGridBoth.C:58
 runGridBoth.C:59
 runGridBoth.C:60
 runGridBoth.C:61
 runGridBoth.C:62
 runGridBoth.C:63
 runGridBoth.C:64
 runGridBoth.C:65
 runGridBoth.C:66
 runGridBoth.C:67
 runGridBoth.C:68
 runGridBoth.C:69
 runGridBoth.C:70
 runGridBoth.C:71
 runGridBoth.C:72
 runGridBoth.C:73
 runGridBoth.C:74
 runGridBoth.C:75
 runGridBoth.C:76
 runGridBoth.C:77
 runGridBoth.C:78
 runGridBoth.C:79
 runGridBoth.C:80
 runGridBoth.C:81
 runGridBoth.C:82
 runGridBoth.C:83
 runGridBoth.C:84
 runGridBoth.C:85
 runGridBoth.C:86
 runGridBoth.C:87
 runGridBoth.C:88
 runGridBoth.C:89
 runGridBoth.C:90
 runGridBoth.C:91
 runGridBoth.C:92
 runGridBoth.C:93
 runGridBoth.C:94
 runGridBoth.C:95
 runGridBoth.C:96
 runGridBoth.C:97
 runGridBoth.C:98
 runGridBoth.C:99
 runGridBoth.C:100
 runGridBoth.C:101
 runGridBoth.C:102
 runGridBoth.C:103
 runGridBoth.C:104
 runGridBoth.C:105
 runGridBoth.C:106
 runGridBoth.C:107
 runGridBoth.C:108
 runGridBoth.C:109
 runGridBoth.C:110
 runGridBoth.C:111
 runGridBoth.C:112
 runGridBoth.C:113
 runGridBoth.C:114
 runGridBoth.C:115
 runGridBoth.C:116
 runGridBoth.C:117
 runGridBoth.C:118
 runGridBoth.C:119
 runGridBoth.C:120
 runGridBoth.C:121
 runGridBoth.C:122
 runGridBoth.C:123
 runGridBoth.C:124
 runGridBoth.C:125
 runGridBoth.C:126
 runGridBoth.C:127
 runGridBoth.C:128
 runGridBoth.C:129
 runGridBoth.C:130
 runGridBoth.C:131
 runGridBoth.C:132
 runGridBoth.C:133
 runGridBoth.C:134
 runGridBoth.C:135
 runGridBoth.C:136
 runGridBoth.C:137
 runGridBoth.C:138
 runGridBoth.C:139
 runGridBoth.C:140
 runGridBoth.C:141
 runGridBoth.C:142
 runGridBoth.C:143
 runGridBoth.C:144
 runGridBoth.C:145
 runGridBoth.C:146
 runGridBoth.C:147
 runGridBoth.C:148
 runGridBoth.C:149
 runGridBoth.C:150
 runGridBoth.C:151
 runGridBoth.C:152
 runGridBoth.C:153
 runGridBoth.C:154
 runGridBoth.C:155
 runGridBoth.C:156
 runGridBoth.C:157
 runGridBoth.C:158
 runGridBoth.C:159
 runGridBoth.C:160
 runGridBoth.C:161
 runGridBoth.C:162
 runGridBoth.C:163
 runGridBoth.C:164
 runGridBoth.C:165
 runGridBoth.C:166
 runGridBoth.C:167
 runGridBoth.C:168
 runGridBoth.C:169
 runGridBoth.C:170
 runGridBoth.C:171
 runGridBoth.C:172
 runGridBoth.C:173
 runGridBoth.C:174
 runGridBoth.C:175
 runGridBoth.C:176
 runGridBoth.C:177
 runGridBoth.C:178
 runGridBoth.C:179
 runGridBoth.C:180
 runGridBoth.C:181
 runGridBoth.C:182
 runGridBoth.C:183
 runGridBoth.C:184
 runGridBoth.C:185
 runGridBoth.C:186
 runGridBoth.C:187
 runGridBoth.C:188
 runGridBoth.C:189
 runGridBoth.C:190
 runGridBoth.C:191
 runGridBoth.C:192
 runGridBoth.C:193
 runGridBoth.C:194
 runGridBoth.C:195
 runGridBoth.C:196
 runGridBoth.C:197
 runGridBoth.C:198
 runGridBoth.C:199
 runGridBoth.C:200
 runGridBoth.C:201
 runGridBoth.C:202
 runGridBoth.C:203
 runGridBoth.C:204
 runGridBoth.C:205
 runGridBoth.C:206
 runGridBoth.C:207
 runGridBoth.C:208
 runGridBoth.C:209
 runGridBoth.C:210
 runGridBoth.C:211
 runGridBoth.C:212
 runGridBoth.C:213
 runGridBoth.C:214
 runGridBoth.C:215
 runGridBoth.C:216
 runGridBoth.C:217
 runGridBoth.C:218
 runGridBoth.C:219
 runGridBoth.C:220
 runGridBoth.C:221
 runGridBoth.C:222
 runGridBoth.C:223
 runGridBoth.C:224
 runGridBoth.C:225
 runGridBoth.C:226
 runGridBoth.C:227
 runGridBoth.C:228
 runGridBoth.C:229
 runGridBoth.C:230
 runGridBoth.C:231
 runGridBoth.C:232
 runGridBoth.C:233
 runGridBoth.C:234
 runGridBoth.C:235
 runGridBoth.C:236
 runGridBoth.C:237
 runGridBoth.C:238
 runGridBoth.C:239
 runGridBoth.C:240
 runGridBoth.C:241
 runGridBoth.C:242
 runGridBoth.C:243
 runGridBoth.C:244
 runGridBoth.C:245
 runGridBoth.C:246
 runGridBoth.C:247
 runGridBoth.C:248
 runGridBoth.C:249
 runGridBoth.C:250
 runGridBoth.C:251
 runGridBoth.C:252
 runGridBoth.C:253
 runGridBoth.C:254
 runGridBoth.C:255
 runGridBoth.C:256
 runGridBoth.C:257
 runGridBoth.C:258
 runGridBoth.C:259
 runGridBoth.C:260
 runGridBoth.C:261
 runGridBoth.C:262
 runGridBoth.C:263
 runGridBoth.C:264
 runGridBoth.C:265
 runGridBoth.C:266
 runGridBoth.C:267
 runGridBoth.C:268
 runGridBoth.C:269
 runGridBoth.C:270
 runGridBoth.C:271
 runGridBoth.C:272
 runGridBoth.C:273
 runGridBoth.C:274
 runGridBoth.C:275
 runGridBoth.C:276
 runGridBoth.C:277
 runGridBoth.C:278
 runGridBoth.C:279
 runGridBoth.C:280
 runGridBoth.C:281
 runGridBoth.C:282
 runGridBoth.C:283
 runGridBoth.C:284
 runGridBoth.C:285
 runGridBoth.C:286
 runGridBoth.C:287
 runGridBoth.C:288
 runGridBoth.C:289
 runGridBoth.C:290
 runGridBoth.C:291
 runGridBoth.C:292
 runGridBoth.C:293
 runGridBoth.C:294
 runGridBoth.C:295
 runGridBoth.C:296
 runGridBoth.C:297
 runGridBoth.C:298
 runGridBoth.C:299
 runGridBoth.C:300
 runGridBoth.C:301
 runGridBoth.C:302
 runGridBoth.C:303
 runGridBoth.C:304
 runGridBoth.C:305
 runGridBoth.C:306
 runGridBoth.C:307
 runGridBoth.C:308
 runGridBoth.C:309
 runGridBoth.C:310
 runGridBoth.C:311
 runGridBoth.C:312
 runGridBoth.C:313
 runGridBoth.C:314
 runGridBoth.C:315
 runGridBoth.C:316
 runGridBoth.C:317
 runGridBoth.C:318
 runGridBoth.C:319
 runGridBoth.C:320
 runGridBoth.C:321
 runGridBoth.C:322
 runGridBoth.C:323
 runGridBoth.C:324
 runGridBoth.C:325
 runGridBoth.C:326
 runGridBoth.C:327
 runGridBoth.C:328
 runGridBoth.C:329
 runGridBoth.C:330