ROOT logo
void AnalysisTrainFromStandardToMuonAODLocal(char* filein= "AliAODs.root", 
                                             char* fileout= "AliMuonAOD.root", 
				             char* dirChain= ".",
				             char* dirData= ".",
					     Int_t nev=123456789){
     
// Macro to produce a MUON-AOD, i.e. a replica of the standard AOD, containing only events
// where at least one muon is present
// 
// - The input files are the standard AOD and the AOD.tag.root files 
// - The AOD.tag file can be:
//      1) the one previously created together with the AOD file (i.e. from
//         AnalysisTrainMuonLocal.C)
//      2) created on the fly with this macro
// - The selection of the muon events is based on the AOD tags
// - The content of the MUON-AOD can be defined by the user with some settings as
//   SetNeedsTracksBranchReplication(), SetNeedsVerticesBranchReplication() 
//   (defined in STEER/AliAODHandler.h)...


    gSystem->Load("libTree.so");
    gSystem->Load("libGeom.so");
    gSystem->Load("libVMC.so");
    gSystem->Load("libPhysics.so");
    gSystem->Load("libSTEER.so");              // for aliroot based analysis
    gSystem->Load("libPWGmuon.so");  // for aliroot based analysis

    // Load par files, if the analysis is par based
    // SetupPar("STEERBase");
    // SetupPar("ESD");
    // SetupPar("AOD");
    // SetupPar("ANALYSIS");
    // SetupPar("ANALYSISalice");
    // SetupPar("PWG3muon");   
     
    // Uncomment the following lines if the AOD tag file has to be created on the fly	 
    // printf("Creating AOD Tags on the fly\n");
    // AliAODTagCreator *t = new AliAODTagCreator();
    // t->SetStorage(0);
    // t->ReadLocalCollection(dirData); 
    
    AliTagAnalysis *TagAna = new AliTagAnalysis("AOD"); 
   
    // Define tag cuts to select events containing at least one muon in the dimuon spectrometer
    printf("Defining Tags cuts to select events containing at least one muon in the dimuon spectrometer\n");
    AliRunTagCuts *runCuts = new AliRunTagCuts();
    AliLHCTagCuts *lhcCuts = new AliLHCTagCuts();
    AliDetectorTagCuts *detCuts = new AliDetectorTagCuts();
    AliEventTagCuts *evCuts = new AliEventTagCuts();
    evCuts->SetNFWMuonRange(1,10);
   
    // Create the chain of interesting events
    TChain* chain = 0x0;
    TagAna->ChainLocalTags(dirChain);
    TagAna->SetType("AOD");
    chain = TagAna->QueryTags(runCuts,lhcCuts,detCuts,evCuts);
    Info("AnalysisTrainFromStandardToMuonAOD",Form("CHAIN HAS %d ENTRIES",(Int_t)chain->GetEntries()));

    // Define aod input handler
    AliAODInputHandler* aodInputHandler = new AliAODInputHandler();
    
    // Define aod output handler
    AliAODHandler* aodOutputHandler = new AliAODHandler();

    // Create non standard AOD
    aodOutputHandler->SetCreateNonStandardAOD(); 
    
    // Select the branches to be replicated in the MUON-AOD
    aodOutputHandler->SetNeedsHeaderReplication();
    aodOutputHandler->SetNeedsTracksBranchReplication();
    aodOutputHandler->SetNeedsVerticesBranchReplication();
    aodOutputHandler->SetNeedsV0sBranchReplication();
    aodOutputHandler->SetNeedsTrackletsBranchReplication(); 
    aodOutputHandler->SetNeedsPMDClustersBranchReplication();
    aodOutputHandler->SetNeedsJetsBranchReplication();
    aodOutputHandler->SetNeedsFMDClustersBranchReplication();
    aodOutputHandler->SetNeedsCaloClustersBranchReplication();
    
    aodOutputHandler->SetOutputFileName(fileout);

     // Define the analysis manager
    AliAnalysisManager *mgr  = new AliAnalysisManager("AOD Manager", "AOD Manager");
    mgr->SetInputEventHandler(aodInputHandler);
    mgr->SetOutputEventHandler(aodOutputHandler);
    //mgr->SetDebugLevel(10);
    
    AliAnalysisTaskFromStandardToMuonAOD *aodfilter = new AliAnalysisTaskFromStandardToMuonAOD("AOD Filter");
    mgr->AddTask(aodfilter);
  
    // Create containers for input/output
    AliAnalysisDataContainer *cinput1 = mgr->GetCommonInputContainer();
    AliAnalysisDataContainer *coutput1 = mgr->GetCommonOutputContainer();
							       
    mgr->ConnectInput(aodfilter,0,cinput1);
    mgr->ConnectOutput(aodfilter,0,coutput1);
 
    // Run the analysis    
    printf("CHAIN HAS %d ENTRIES\n",(Int_t)chain->GetEntries());
    mgr->InitAnalysis();
    mgr->PrintStatus();
    mgr->StartAnalysis("local",chain,nev);
}


Int_t setupPar(const char* pararchivename) {
  ///////////////////
  // Setup PAR File//
  ///////////////////
  if (pararchivename) {
    char processline[1024];
    sprintf(processline,".! tar xvzf %s.par",pararchivename);
    gROOT->ProcessLine(processline);
    const char* 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("runAnalysis","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("../");
  }

  return 1;
}

//______________________________________________________________________________
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());
    } 
}
 AnalysisTrainFromStandardToMuonAODLocal.C:1
 AnalysisTrainFromStandardToMuonAODLocal.C:2
 AnalysisTrainFromStandardToMuonAODLocal.C:3
 AnalysisTrainFromStandardToMuonAODLocal.C:4
 AnalysisTrainFromStandardToMuonAODLocal.C:5
 AnalysisTrainFromStandardToMuonAODLocal.C:6
 AnalysisTrainFromStandardToMuonAODLocal.C:7
 AnalysisTrainFromStandardToMuonAODLocal.C:8
 AnalysisTrainFromStandardToMuonAODLocal.C:9
 AnalysisTrainFromStandardToMuonAODLocal.C:10
 AnalysisTrainFromStandardToMuonAODLocal.C:11
 AnalysisTrainFromStandardToMuonAODLocal.C:12
 AnalysisTrainFromStandardToMuonAODLocal.C:13
 AnalysisTrainFromStandardToMuonAODLocal.C:14
 AnalysisTrainFromStandardToMuonAODLocal.C:15
 AnalysisTrainFromStandardToMuonAODLocal.C:16
 AnalysisTrainFromStandardToMuonAODLocal.C:17
 AnalysisTrainFromStandardToMuonAODLocal.C:18
 AnalysisTrainFromStandardToMuonAODLocal.C:19
 AnalysisTrainFromStandardToMuonAODLocal.C:20
 AnalysisTrainFromStandardToMuonAODLocal.C:21
 AnalysisTrainFromStandardToMuonAODLocal.C:22
 AnalysisTrainFromStandardToMuonAODLocal.C:23
 AnalysisTrainFromStandardToMuonAODLocal.C:24
 AnalysisTrainFromStandardToMuonAODLocal.C:25
 AnalysisTrainFromStandardToMuonAODLocal.C:26
 AnalysisTrainFromStandardToMuonAODLocal.C:27
 AnalysisTrainFromStandardToMuonAODLocal.C:28
 AnalysisTrainFromStandardToMuonAODLocal.C:29
 AnalysisTrainFromStandardToMuonAODLocal.C:30
 AnalysisTrainFromStandardToMuonAODLocal.C:31
 AnalysisTrainFromStandardToMuonAODLocal.C:32
 AnalysisTrainFromStandardToMuonAODLocal.C:33
 AnalysisTrainFromStandardToMuonAODLocal.C:34
 AnalysisTrainFromStandardToMuonAODLocal.C:35
 AnalysisTrainFromStandardToMuonAODLocal.C:36
 AnalysisTrainFromStandardToMuonAODLocal.C:37
 AnalysisTrainFromStandardToMuonAODLocal.C:38
 AnalysisTrainFromStandardToMuonAODLocal.C:39
 AnalysisTrainFromStandardToMuonAODLocal.C:40
 AnalysisTrainFromStandardToMuonAODLocal.C:41
 AnalysisTrainFromStandardToMuonAODLocal.C:42
 AnalysisTrainFromStandardToMuonAODLocal.C:43
 AnalysisTrainFromStandardToMuonAODLocal.C:44
 AnalysisTrainFromStandardToMuonAODLocal.C:45
 AnalysisTrainFromStandardToMuonAODLocal.C:46
 AnalysisTrainFromStandardToMuonAODLocal.C:47
 AnalysisTrainFromStandardToMuonAODLocal.C:48
 AnalysisTrainFromStandardToMuonAODLocal.C:49
 AnalysisTrainFromStandardToMuonAODLocal.C:50
 AnalysisTrainFromStandardToMuonAODLocal.C:51
 AnalysisTrainFromStandardToMuonAODLocal.C:52
 AnalysisTrainFromStandardToMuonAODLocal.C:53
 AnalysisTrainFromStandardToMuonAODLocal.C:54
 AnalysisTrainFromStandardToMuonAODLocal.C:55
 AnalysisTrainFromStandardToMuonAODLocal.C:56
 AnalysisTrainFromStandardToMuonAODLocal.C:57
 AnalysisTrainFromStandardToMuonAODLocal.C:58
 AnalysisTrainFromStandardToMuonAODLocal.C:59
 AnalysisTrainFromStandardToMuonAODLocal.C:60
 AnalysisTrainFromStandardToMuonAODLocal.C:61
 AnalysisTrainFromStandardToMuonAODLocal.C:62
 AnalysisTrainFromStandardToMuonAODLocal.C:63
 AnalysisTrainFromStandardToMuonAODLocal.C:64
 AnalysisTrainFromStandardToMuonAODLocal.C:65
 AnalysisTrainFromStandardToMuonAODLocal.C:66
 AnalysisTrainFromStandardToMuonAODLocal.C:67
 AnalysisTrainFromStandardToMuonAODLocal.C:68
 AnalysisTrainFromStandardToMuonAODLocal.C:69
 AnalysisTrainFromStandardToMuonAODLocal.C:70
 AnalysisTrainFromStandardToMuonAODLocal.C:71
 AnalysisTrainFromStandardToMuonAODLocal.C:72
 AnalysisTrainFromStandardToMuonAODLocal.C:73
 AnalysisTrainFromStandardToMuonAODLocal.C:74
 AnalysisTrainFromStandardToMuonAODLocal.C:75
 AnalysisTrainFromStandardToMuonAODLocal.C:76
 AnalysisTrainFromStandardToMuonAODLocal.C:77
 AnalysisTrainFromStandardToMuonAODLocal.C:78
 AnalysisTrainFromStandardToMuonAODLocal.C:79
 AnalysisTrainFromStandardToMuonAODLocal.C:80
 AnalysisTrainFromStandardToMuonAODLocal.C:81
 AnalysisTrainFromStandardToMuonAODLocal.C:82
 AnalysisTrainFromStandardToMuonAODLocal.C:83
 AnalysisTrainFromStandardToMuonAODLocal.C:84
 AnalysisTrainFromStandardToMuonAODLocal.C:85
 AnalysisTrainFromStandardToMuonAODLocal.C:86
 AnalysisTrainFromStandardToMuonAODLocal.C:87
 AnalysisTrainFromStandardToMuonAODLocal.C:88
 AnalysisTrainFromStandardToMuonAODLocal.C:89
 AnalysisTrainFromStandardToMuonAODLocal.C:90
 AnalysisTrainFromStandardToMuonAODLocal.C:91
 AnalysisTrainFromStandardToMuonAODLocal.C:92
 AnalysisTrainFromStandardToMuonAODLocal.C:93
 AnalysisTrainFromStandardToMuonAODLocal.C:94
 AnalysisTrainFromStandardToMuonAODLocal.C:95
 AnalysisTrainFromStandardToMuonAODLocal.C:96
 AnalysisTrainFromStandardToMuonAODLocal.C:97
 AnalysisTrainFromStandardToMuonAODLocal.C:98
 AnalysisTrainFromStandardToMuonAODLocal.C:99
 AnalysisTrainFromStandardToMuonAODLocal.C:100
 AnalysisTrainFromStandardToMuonAODLocal.C:101
 AnalysisTrainFromStandardToMuonAODLocal.C:102
 AnalysisTrainFromStandardToMuonAODLocal.C:103
 AnalysisTrainFromStandardToMuonAODLocal.C:104
 AnalysisTrainFromStandardToMuonAODLocal.C:105
 AnalysisTrainFromStandardToMuonAODLocal.C:106
 AnalysisTrainFromStandardToMuonAODLocal.C:107
 AnalysisTrainFromStandardToMuonAODLocal.C:108
 AnalysisTrainFromStandardToMuonAODLocal.C:109
 AnalysisTrainFromStandardToMuonAODLocal.C:110
 AnalysisTrainFromStandardToMuonAODLocal.C:111
 AnalysisTrainFromStandardToMuonAODLocal.C:112
 AnalysisTrainFromStandardToMuonAODLocal.C:113
 AnalysisTrainFromStandardToMuonAODLocal.C:114
 AnalysisTrainFromStandardToMuonAODLocal.C:115
 AnalysisTrainFromStandardToMuonAODLocal.C:116
 AnalysisTrainFromStandardToMuonAODLocal.C:117
 AnalysisTrainFromStandardToMuonAODLocal.C:118
 AnalysisTrainFromStandardToMuonAODLocal.C:119
 AnalysisTrainFromStandardToMuonAODLocal.C:120
 AnalysisTrainFromStandardToMuonAODLocal.C:121
 AnalysisTrainFromStandardToMuonAODLocal.C:122
 AnalysisTrainFromStandardToMuonAODLocal.C:123
 AnalysisTrainFromStandardToMuonAODLocal.C:124
 AnalysisTrainFromStandardToMuonAODLocal.C:125
 AnalysisTrainFromStandardToMuonAODLocal.C:126
 AnalysisTrainFromStandardToMuonAODLocal.C:127
 AnalysisTrainFromStandardToMuonAODLocal.C:128
 AnalysisTrainFromStandardToMuonAODLocal.C:129
 AnalysisTrainFromStandardToMuonAODLocal.C:130
 AnalysisTrainFromStandardToMuonAODLocal.C:131
 AnalysisTrainFromStandardToMuonAODLocal.C:132
 AnalysisTrainFromStandardToMuonAODLocal.C:133
 AnalysisTrainFromStandardToMuonAODLocal.C:134
 AnalysisTrainFromStandardToMuonAODLocal.C:135
 AnalysisTrainFromStandardToMuonAODLocal.C:136
 AnalysisTrainFromStandardToMuonAODLocal.C:137
 AnalysisTrainFromStandardToMuonAODLocal.C:138
 AnalysisTrainFromStandardToMuonAODLocal.C:139
 AnalysisTrainFromStandardToMuonAODLocal.C:140
 AnalysisTrainFromStandardToMuonAODLocal.C:141
 AnalysisTrainFromStandardToMuonAODLocal.C:142
 AnalysisTrainFromStandardToMuonAODLocal.C:143
 AnalysisTrainFromStandardToMuonAODLocal.C:144
 AnalysisTrainFromStandardToMuonAODLocal.C:145
 AnalysisTrainFromStandardToMuonAODLocal.C:146
 AnalysisTrainFromStandardToMuonAODLocal.C:147
 AnalysisTrainFromStandardToMuonAODLocal.C:148
 AnalysisTrainFromStandardToMuonAODLocal.C:149
 AnalysisTrainFromStandardToMuonAODLocal.C:150
 AnalysisTrainFromStandardToMuonAODLocal.C:151
 AnalysisTrainFromStandardToMuonAODLocal.C:152
 AnalysisTrainFromStandardToMuonAODLocal.C:153
 AnalysisTrainFromStandardToMuonAODLocal.C:154
 AnalysisTrainFromStandardToMuonAODLocal.C:155
 AnalysisTrainFromStandardToMuonAODLocal.C:156
 AnalysisTrainFromStandardToMuonAODLocal.C:157
 AnalysisTrainFromStandardToMuonAODLocal.C:158
 AnalysisTrainFromStandardToMuonAODLocal.C:159
 AnalysisTrainFromStandardToMuonAODLocal.C:160
 AnalysisTrainFromStandardToMuonAODLocal.C:161
 AnalysisTrainFromStandardToMuonAODLocal.C:162
 AnalysisTrainFromStandardToMuonAODLocal.C:163
 AnalysisTrainFromStandardToMuonAODLocal.C:164
 AnalysisTrainFromStandardToMuonAODLocal.C:165
 AnalysisTrainFromStandardToMuonAODLocal.C:166
 AnalysisTrainFromStandardToMuonAODLocal.C:167
 AnalysisTrainFromStandardToMuonAODLocal.C:168
 AnalysisTrainFromStandardToMuonAODLocal.C:169
 AnalysisTrainFromStandardToMuonAODLocal.C:170
 AnalysisTrainFromStandardToMuonAODLocal.C:171
 AnalysisTrainFromStandardToMuonAODLocal.C:172
 AnalysisTrainFromStandardToMuonAODLocal.C:173
 AnalysisTrainFromStandardToMuonAODLocal.C:174