ROOT logo
void runPWG2AODCreation(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("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);
    //
    AliAnalysisTaskPWG2ESDfilter *esdfilter = new AliAnalysisTaskPWG2ESDfilter("PWG2 ESD Filter");
    esdfilter->SetTrackFilter(trackFilter);
    esdfilter->SetDebugLevel(10);
    mgr->AddTask(esdfilter);

    // 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 );
    //
    // 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());
    } 
}
 runPWG2AODCreation.C:1
 runPWG2AODCreation.C:2
 runPWG2AODCreation.C:3
 runPWG2AODCreation.C:4
 runPWG2AODCreation.C:5
 runPWG2AODCreation.C:6
 runPWG2AODCreation.C:7
 runPWG2AODCreation.C:8
 runPWG2AODCreation.C:9
 runPWG2AODCreation.C:10
 runPWG2AODCreation.C:11
 runPWG2AODCreation.C:12
 runPWG2AODCreation.C:13
 runPWG2AODCreation.C:14
 runPWG2AODCreation.C:15
 runPWG2AODCreation.C:16
 runPWG2AODCreation.C:17
 runPWG2AODCreation.C:18
 runPWG2AODCreation.C:19
 runPWG2AODCreation.C:20
 runPWG2AODCreation.C:21
 runPWG2AODCreation.C:22
 runPWG2AODCreation.C:23
 runPWG2AODCreation.C:24
 runPWG2AODCreation.C:25
 runPWG2AODCreation.C:26
 runPWG2AODCreation.C:27
 runPWG2AODCreation.C:28
 runPWG2AODCreation.C:29
 runPWG2AODCreation.C:30
 runPWG2AODCreation.C:31
 runPWG2AODCreation.C:32
 runPWG2AODCreation.C:33
 runPWG2AODCreation.C:34
 runPWG2AODCreation.C:35
 runPWG2AODCreation.C:36
 runPWG2AODCreation.C:37
 runPWG2AODCreation.C:38
 runPWG2AODCreation.C:39
 runPWG2AODCreation.C:40
 runPWG2AODCreation.C:41
 runPWG2AODCreation.C:42
 runPWG2AODCreation.C:43
 runPWG2AODCreation.C:44
 runPWG2AODCreation.C:45
 runPWG2AODCreation.C:46
 runPWG2AODCreation.C:47
 runPWG2AODCreation.C:48
 runPWG2AODCreation.C:49
 runPWG2AODCreation.C:50
 runPWG2AODCreation.C:51
 runPWG2AODCreation.C:52
 runPWG2AODCreation.C:53
 runPWG2AODCreation.C:54
 runPWG2AODCreation.C:55
 runPWG2AODCreation.C:56
 runPWG2AODCreation.C:57
 runPWG2AODCreation.C:58
 runPWG2AODCreation.C:59
 runPWG2AODCreation.C:60
 runPWG2AODCreation.C:61
 runPWG2AODCreation.C:62
 runPWG2AODCreation.C:63
 runPWG2AODCreation.C:64
 runPWG2AODCreation.C:65
 runPWG2AODCreation.C:66
 runPWG2AODCreation.C:67
 runPWG2AODCreation.C:68
 runPWG2AODCreation.C:69
 runPWG2AODCreation.C:70
 runPWG2AODCreation.C:71
 runPWG2AODCreation.C:72
 runPWG2AODCreation.C:73
 runPWG2AODCreation.C:74
 runPWG2AODCreation.C:75
 runPWG2AODCreation.C:76
 runPWG2AODCreation.C:77
 runPWG2AODCreation.C:78
 runPWG2AODCreation.C:79
 runPWG2AODCreation.C:80
 runPWG2AODCreation.C:81
 runPWG2AODCreation.C:82
 runPWG2AODCreation.C:83
 runPWG2AODCreation.C:84
 runPWG2AODCreation.C:85
 runPWG2AODCreation.C:86
 runPWG2AODCreation.C:87
 runPWG2AODCreation.C:88
 runPWG2AODCreation.C:89
 runPWG2AODCreation.C:90
 runPWG2AODCreation.C:91
 runPWG2AODCreation.C:92
 runPWG2AODCreation.C:93
 runPWG2AODCreation.C:94
 runPWG2AODCreation.C:95
 runPWG2AODCreation.C:96
 runPWG2AODCreation.C:97
 runPWG2AODCreation.C:98
 runPWG2AODCreation.C:99
 runPWG2AODCreation.C:100
 runPWG2AODCreation.C:101
 runPWG2AODCreation.C:102
 runPWG2AODCreation.C:103
 runPWG2AODCreation.C:104
 runPWG2AODCreation.C:105
 runPWG2AODCreation.C:106
 runPWG2AODCreation.C:107
 runPWG2AODCreation.C:108
 runPWG2AODCreation.C:109
 runPWG2AODCreation.C:110
 runPWG2AODCreation.C:111
 runPWG2AODCreation.C:112
 runPWG2AODCreation.C:113
 runPWG2AODCreation.C:114
 runPWG2AODCreation.C:115
 runPWG2AODCreation.C:116
 runPWG2AODCreation.C:117
 runPWG2AODCreation.C:118
 runPWG2AODCreation.C:119
 runPWG2AODCreation.C:120
 runPWG2AODCreation.C:121
 runPWG2AODCreation.C:122
 runPWG2AODCreation.C:123
 runPWG2AODCreation.C:124
 runPWG2AODCreation.C:125