ROOT logo
void runPWG2AODUpdate(const char *esdsource="ESD1503X_v1.txt", int nfiles=1)
{
  producePWG2AOD(esdsource, nfiles);
}

void producePWG2AOD(const char *esdsource, int nfiles)
{
  gSystem->Load("libTree.so");
  gSystem->Load("libGeom.so");
  gSystem->Load("libVMC.so");
  gSystem->Load("libXMLIO.so");
  SetupPar("STEERBase");
  SetupPar("ESD");
  SetupPar("AOD");
  SetupPar("ANALYSIS");
  SetupPar("ANALYSISalice");
  SetupPar("PWG0base");
  SetupPar("PWG2AOD");
  // Make the analysis manager
  //
  // Chain from CAF
  gROOT->LoadMacro("CreateESDChain.C");
  TChain* chain = CreateESDChain(esdsource, nfiles);
  
  AliAODHandler* aodHandler   = new AliAODHandler();
  aodHandler->SetOutputFileName("aod.root");
  AliESDInputHandler *esdHandler = new AliESDInputHandler();
  esdHandler->SetInactiveBranches("FMD CaloCluster");
  
  AliMCEventHandler* mcHandler = new AliMCEventHandler();
  
  AliAnalysisManager *mgr  = new AliAnalysisManager("esd to pwg2 aod", "testing aod analysis");
  mgr->SetInputEventHandler(esdHandler);
  mgr->SetOutputEventHandler(aodHandler);
  mgr->SetMCtruthEventHandler(mcHandler);
  mgr->SetDebugLevel(10);
  AliLog::EnableDebug(kTRUE);
  AliLog::SetGlobalLogLevel(2);
  
  
  // Set of cuts
  // 
  // standard
  AliESDtrackCuts* esdTrackCutsL = new AliESDtrackCuts("AliESDtrackCuts", "Loose");
  esdTrackCutsL->SetMinNClustersTPC(50);
  esdTrackCutsL->SetMaxChi2PerClusterTPC(3.5);
  esdTrackCutsL->SetMaxCovDiagonalElements(2,2,0.5,0.5,2);
  esdTrackCutsL->SetRequireTPCRefit(kTRUE);
  esdTrackCutsL->SetMinNsigmaToVertex(3);
  esdTrackCutsL->SetRequireSigmaToVertex(kTRUE);
  esdTrackCutsL->SetAcceptKingDaughters(kFALSE);
  //
  // hard
  AliESDtrackCuts* esdTrackCutsH = new AliESDtrackCuts("AliESDtrackCuts", "Hard");
  esdTrackCutsH->SetMinNClustersTPC(95);
  esdTrackCutsH->SetMaxChi2PerClusterTPC(2.0);
  esdTrackCutsH->SetMaxChi2PerClusterITS(3.0);
  esdTrackCutsH->SetMaxCovDiagonalElements(2,2,0.5,0.5,2);
  esdTrackCutsH->SetRequireTPCRefit(kTRUE);
  esdTrackCutsH->SetRequireITSRefit(kTRUE);
  esdTrackCutsH->SetMinNsigmaToVertex(2);
  esdTrackCutsH->SetRequireSigmaToVertex(kTRUE);
  esdTrackCutsH->SetAcceptKingDaughters(kFALSE);
  esdTrackCutsH->SetPtRange(0.1,1.5);
  esdTrackCutsH->SetEtaRange(-1.0,1.0);
  //
  AliAnalysisFilter* trackFilter = new AliAnalysisFilter("trackFilter");
  trackFilter->AddCuts(esdTrackCutsL);
  trackFilter->AddCuts(esdTrackCutsH);
  //
  AliAnalysisTaskESDfilter *esdfilter = new AliAnalysisTaskESDfilter("ESD Filter");
  esdfilter->SetTrackFilter(trackFilter);
  esdfilter->SetDebugLevel(10);
  mgr->AddTask(esdfilter);

  AliAnalysisTaskPWG2AODUpdate *pwg2aodupdate = new AliAnalysisTaskPWG2AODUpdate("PWG2 AOD Update");
  mgr->AddTask(pwg2aodupdate);

  // Create containers for input/output
  // Top ESD container
  AliAnalysisDataContainer *cin_esd = mgr->GetCommonInputContainer();
  
  // Output AOD container
  AliAnalysisDataContainer *cout_aod = mgr->GetCommonOutputContainer();
  
  mgr->ConnectInput  (esdfilter,  0, cin_esd  );
  mgr->ConnectOutput (esdfilter,  0, cout_aod );

  mgr->ConnectInput  (pwg2aodupdate,  0, cin_esd  );
  mgr->ConnectOutput (pwg2aodupdate,  0, cout_aod );
  //
  // Run the analysis
  //    
  mgr->InitAnalysis();
  mgr->PrintStatus();
  mgr->StartAnalysis("local",chain);
  delete mgr;
}

void SetupPar(char* pararchivename)
{
    if (pararchivename) {
	char processline[1024];
	sprintf(processline,".! tar xvzf %s.par",pararchivename);
	gROOT->ProcessLine(processline);
	TString ocwd = gSystem->WorkingDirectory();
	gSystem->ChangeDirectory(pararchivename);
	
	// check for BUILD.sh and execute
	if (!gSystem->AccessPathName("PROOF-INF/BUILD.sh")) {
	    printf("*******************************\n");
	    printf("*** Building PAR archive    ***\n");
	    printf("*******************************\n");
	    
	    if (gSystem->Exec("PROOF-INF/BUILD.sh")) {
		Error("runProcess","Cannot Build the PAR Archive! - Abort!");
		return -1;
	    }
	}
	// check for SETUP.C and execute
	if (!gSystem->AccessPathName("PROOF-INF/SETUP.C")) {
	    printf("*******************************\n");
	    printf("*** Setup PAR archive       ***\n");
	    printf("*******************************\n");
	    gROOT->Macro("PROOF-INF/SETUP.C");
	}
	
	gSystem->ChangeDirectory(ocwd.Data());
   printf("Current dir: %s\n", ocwd.Data());
    } 
}
 runPWG2AODUpdate.C:1
 runPWG2AODUpdate.C:2
 runPWG2AODUpdate.C:3
 runPWG2AODUpdate.C:4
 runPWG2AODUpdate.C:5
 runPWG2AODUpdate.C:6
 runPWG2AODUpdate.C:7
 runPWG2AODUpdate.C:8
 runPWG2AODUpdate.C:9
 runPWG2AODUpdate.C:10
 runPWG2AODUpdate.C:11
 runPWG2AODUpdate.C:12
 runPWG2AODUpdate.C:13
 runPWG2AODUpdate.C:14
 runPWG2AODUpdate.C:15
 runPWG2AODUpdate.C:16
 runPWG2AODUpdate.C:17
 runPWG2AODUpdate.C:18
 runPWG2AODUpdate.C:19
 runPWG2AODUpdate.C:20
 runPWG2AODUpdate.C:21
 runPWG2AODUpdate.C:22
 runPWG2AODUpdate.C:23
 runPWG2AODUpdate.C:24
 runPWG2AODUpdate.C:25
 runPWG2AODUpdate.C:26
 runPWG2AODUpdate.C:27
 runPWG2AODUpdate.C:28
 runPWG2AODUpdate.C:29
 runPWG2AODUpdate.C:30
 runPWG2AODUpdate.C:31
 runPWG2AODUpdate.C:32
 runPWG2AODUpdate.C:33
 runPWG2AODUpdate.C:34
 runPWG2AODUpdate.C:35
 runPWG2AODUpdate.C:36
 runPWG2AODUpdate.C:37
 runPWG2AODUpdate.C:38
 runPWG2AODUpdate.C:39
 runPWG2AODUpdate.C:40
 runPWG2AODUpdate.C:41
 runPWG2AODUpdate.C:42
 runPWG2AODUpdate.C:43
 runPWG2AODUpdate.C:44
 runPWG2AODUpdate.C:45
 runPWG2AODUpdate.C:46
 runPWG2AODUpdate.C:47
 runPWG2AODUpdate.C:48
 runPWG2AODUpdate.C:49
 runPWG2AODUpdate.C:50
 runPWG2AODUpdate.C:51
 runPWG2AODUpdate.C:52
 runPWG2AODUpdate.C:53
 runPWG2AODUpdate.C:54
 runPWG2AODUpdate.C:55
 runPWG2AODUpdate.C:56
 runPWG2AODUpdate.C:57
 runPWG2AODUpdate.C:58
 runPWG2AODUpdate.C:59
 runPWG2AODUpdate.C:60
 runPWG2AODUpdate.C:61
 runPWG2AODUpdate.C:62
 runPWG2AODUpdate.C:63
 runPWG2AODUpdate.C:64
 runPWG2AODUpdate.C:65
 runPWG2AODUpdate.C:66
 runPWG2AODUpdate.C:67
 runPWG2AODUpdate.C:68
 runPWG2AODUpdate.C:69
 runPWG2AODUpdate.C:70
 runPWG2AODUpdate.C:71
 runPWG2AODUpdate.C:72
 runPWG2AODUpdate.C:73
 runPWG2AODUpdate.C:74
 runPWG2AODUpdate.C:75
 runPWG2AODUpdate.C:76
 runPWG2AODUpdate.C:77
 runPWG2AODUpdate.C:78
 runPWG2AODUpdate.C:79
 runPWG2AODUpdate.C:80
 runPWG2AODUpdate.C:81
 runPWG2AODUpdate.C:82
 runPWG2AODUpdate.C:83
 runPWG2AODUpdate.C:84
 runPWG2AODUpdate.C:85
 runPWG2AODUpdate.C:86
 runPWG2AODUpdate.C:87
 runPWG2AODUpdate.C:88
 runPWG2AODUpdate.C:89
 runPWG2AODUpdate.C:90
 runPWG2AODUpdate.C:91
 runPWG2AODUpdate.C:92
 runPWG2AODUpdate.C:93
 runPWG2AODUpdate.C:94
 runPWG2AODUpdate.C:95
 runPWG2AODUpdate.C:96
 runPWG2AODUpdate.C:97
 runPWG2AODUpdate.C:98
 runPWG2AODUpdate.C:99
 runPWG2AODUpdate.C:100
 runPWG2AODUpdate.C:101
 runPWG2AODUpdate.C:102
 runPWG2AODUpdate.C:103
 runPWG2AODUpdate.C:104
 runPWG2AODUpdate.C:105
 runPWG2AODUpdate.C:106
 runPWG2AODUpdate.C:107
 runPWG2AODUpdate.C:108
 runPWG2AODUpdate.C:109
 runPWG2AODUpdate.C:110
 runPWG2AODUpdate.C:111
 runPWG2AODUpdate.C:112
 runPWG2AODUpdate.C:113
 runPWG2AODUpdate.C:114
 runPWG2AODUpdate.C:115
 runPWG2AODUpdate.C:116
 runPWG2AODUpdate.C:117
 runPWG2AODUpdate.C:118
 runPWG2AODUpdate.C:119
 runPWG2AODUpdate.C:120
 runPWG2AODUpdate.C:121
 runPWG2AODUpdate.C:122
 runPWG2AODUpdate.C:123
 runPWG2AODUpdate.C:124
 runPWG2AODUpdate.C:125
 runPWG2AODUpdate.C:126
 runPWG2AODUpdate.C:127
 runPWG2AODUpdate.C:128
 runPWG2AODUpdate.C:129
 runPWG2AODUpdate.C:130
 runPWG2AODUpdate.C:131
 runPWG2AODUpdate.C:132