ROOT logo
void AnalysisTrainMuonComp(){
  TStopwatch timer;
  timer.Start();

  printf("*** Connect to AliEn ***\n");
  TGrid::Connect("alien://");

  gSystem->Load("libTree.so");
  gSystem->Load("libGeom.so");
  gSystem->Load("libVMC.so");
  gSystem->Load("libPhysics.so");
  
  // Common packages
  SetupPar("STEERBase");
  gSystem->Load("libSTEERBase.so");
  SetupPar("ESD");
  gSystem->Load("libVMC.so");
  gSystem->Load("libESD.so");
  SetupPar("AOD");
  gSystem->Load("libAOD.so");
  SetupPar("ANALYSIS");
  gSystem->Load("libANALYSIS.so");
  SetupPar("ANALYSISalice");
  gSystem->Load("libANALYSISalice.so");
  // Analysis-specific packages
  SetupPar("PWG3muon");      
  gSystem->Load("libPWGmuon.so");
  
  gROOT->LoadMacro("AliAnalysisTaskAODvsESD.cxx+");  

  const char *collectionfile = "wn.xml";

  //Usage of event tags
  AliTagAnalysis *analysis = new AliTagAnalysis(); 
  
  TChain* chain = 0x0;
  chain = analysis->GetChainFromCollection(collectionfile,"esdTree");
  chain->SetBranchStatus("*Calo*",0);

  // Define the analysis manager
  AliAnalysisManager *mgr = new AliAnalysisManager("Analysis Train", "Analysis train");

  // ESD input handler
  AliESDInputHandler *esdHandler = new AliESDInputHandler();
  esdHandler->SetInactiveBranches("FMD CaloCluster");
  mgr->SetInputEventHandler(esdHandler);

  // AOD output handler
  AliAODHandler* aodHandler = new AliAODHandler();  
  aodHandler->SetOutputFileName("AOD.root");  
  mgr->SetOutputEventHandler(aodHandler);
  
  // Set of cuts for the ESD filter
  // standard cuts
  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 cuts
  AliESDtrackCuts* esdTrackCutsH = new AliESDtrackCuts("AliESDtrackCuts", "Hard");
  esdTrackCutsH->SetMinNClustersTPC(100);
  esdTrackCutsH->SetMaxChi2PerClusterTPC(2.0);
  esdTrackCutsH->SetMaxCovDiagonalElements(2,2,0.5,0.5,2);
  esdTrackCutsH->SetRequireTPCRefit(kTRUE);
  esdTrackCutsH->SetMinNsigmaToVertex(2);
  esdTrackCutsH->SetRequireSigmaToVertex(kTRUE);
  esdTrackCutsH->SetAcceptKingDaughters(kFALSE);
  
  AliAnalysisFilter* trackFilter = new AliAnalysisFilter("trackFilter");
  trackFilter->AddCuts(esdTrackCutsL);
  trackFilter->AddCuts(esdTrackCutsH);
  
   // first task - ESD filter task putting standard info in the output generic AOD 
  AliAnalysisTaskESDfilter *esdFilter = new AliAnalysisTaskESDfilter("ESD Filter");
  //esdFilter->SetTrackFilter(trackFilter);
  mgr->AddTask(esdFilter);
  
  // second task - ESD filter task putting muon info in the output generic AOD 
  AliAnalysisTaskESDMuonFilter *esdMuonFilter = new AliAnalysisTaskESDMuonFilter("ESD Muon Filter");
  mgr->AddTask(esdMuonFilter);
  
  // third task - compare created AOD and exixting ESDs
  AliAnalysisTaskAODvsESD *AODvsESD = new AliAnalysisTaskAODvsESD("aodVsEsd");
  mgr->AddTask(AODvsESD);

  // Input ESD container
  AliAnalysisDataContainer *esdIn = mgr->GetCommonInputContainer();
  // Output AOD container. 
  AliAnalysisDataContainer *aodOut = mgr->GetCommonOutputContainer();
  // Output comparison
  AliAnalysisDataContainer *listOut = mgr->CreateContainer("output2", TList::Class(), AliAnalysisManager::kOutputContainer, "AODvsESDoutput.root");

  // Connect containers to tasks slots
  mgr->ConnectInput(esdFilter,0,esdIn); 
  mgr->ConnectOutput(esdFilter,0,aodOut);
  
  mgr->ConnectInput(esdMuonFilter,0,esdIn);
  mgr->ConnectOutput(esdMuonFilter,0,aodOut);

  mgr->ConnectInput(AODvsESD,0,esdIn);
  mgr->ConnectOutput(AODvsESD,0,listOut);
  
  // Run the analysis
  if (mgr->InitAnalysis()){
    mgr->PrintStatus();
    mgr->StartAnalysis("local",chain);
  }   
  timer.Stop();
  timer.Print();
}

//______________________________________________________________________________
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("*** Building PAR archive    ***\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("*** Setup PAR archive       ***\n");
      gROOT->Macro("PROOF-INF/SETUP.C");
    }
    
    gSystem->ChangeDirectory(ocwd.Data());
    printf("Current dir: %s\n", ocwd.Data());
  } 
}

 AnalysisTrainMuonComp.C:1
 AnalysisTrainMuonComp.C:2
 AnalysisTrainMuonComp.C:3
 AnalysisTrainMuonComp.C:4
 AnalysisTrainMuonComp.C:5
 AnalysisTrainMuonComp.C:6
 AnalysisTrainMuonComp.C:7
 AnalysisTrainMuonComp.C:8
 AnalysisTrainMuonComp.C:9
 AnalysisTrainMuonComp.C:10
 AnalysisTrainMuonComp.C:11
 AnalysisTrainMuonComp.C:12
 AnalysisTrainMuonComp.C:13
 AnalysisTrainMuonComp.C:14
 AnalysisTrainMuonComp.C:15
 AnalysisTrainMuonComp.C:16
 AnalysisTrainMuonComp.C:17
 AnalysisTrainMuonComp.C:18
 AnalysisTrainMuonComp.C:19
 AnalysisTrainMuonComp.C:20
 AnalysisTrainMuonComp.C:21
 AnalysisTrainMuonComp.C:22
 AnalysisTrainMuonComp.C:23
 AnalysisTrainMuonComp.C:24
 AnalysisTrainMuonComp.C:25
 AnalysisTrainMuonComp.C:26
 AnalysisTrainMuonComp.C:27
 AnalysisTrainMuonComp.C:28
 AnalysisTrainMuonComp.C:29
 AnalysisTrainMuonComp.C:30
 AnalysisTrainMuonComp.C:31
 AnalysisTrainMuonComp.C:32
 AnalysisTrainMuonComp.C:33
 AnalysisTrainMuonComp.C:34
 AnalysisTrainMuonComp.C:35
 AnalysisTrainMuonComp.C:36
 AnalysisTrainMuonComp.C:37
 AnalysisTrainMuonComp.C:38
 AnalysisTrainMuonComp.C:39
 AnalysisTrainMuonComp.C:40
 AnalysisTrainMuonComp.C:41
 AnalysisTrainMuonComp.C:42
 AnalysisTrainMuonComp.C:43
 AnalysisTrainMuonComp.C:44
 AnalysisTrainMuonComp.C:45
 AnalysisTrainMuonComp.C:46
 AnalysisTrainMuonComp.C:47
 AnalysisTrainMuonComp.C:48
 AnalysisTrainMuonComp.C:49
 AnalysisTrainMuonComp.C:50
 AnalysisTrainMuonComp.C:51
 AnalysisTrainMuonComp.C:52
 AnalysisTrainMuonComp.C:53
 AnalysisTrainMuonComp.C:54
 AnalysisTrainMuonComp.C:55
 AnalysisTrainMuonComp.C:56
 AnalysisTrainMuonComp.C:57
 AnalysisTrainMuonComp.C:58
 AnalysisTrainMuonComp.C:59
 AnalysisTrainMuonComp.C:60
 AnalysisTrainMuonComp.C:61
 AnalysisTrainMuonComp.C:62
 AnalysisTrainMuonComp.C:63
 AnalysisTrainMuonComp.C:64
 AnalysisTrainMuonComp.C:65
 AnalysisTrainMuonComp.C:66
 AnalysisTrainMuonComp.C:67
 AnalysisTrainMuonComp.C:68
 AnalysisTrainMuonComp.C:69
 AnalysisTrainMuonComp.C:70
 AnalysisTrainMuonComp.C:71
 AnalysisTrainMuonComp.C:72
 AnalysisTrainMuonComp.C:73
 AnalysisTrainMuonComp.C:74
 AnalysisTrainMuonComp.C:75
 AnalysisTrainMuonComp.C:76
 AnalysisTrainMuonComp.C:77
 AnalysisTrainMuonComp.C:78
 AnalysisTrainMuonComp.C:79
 AnalysisTrainMuonComp.C:80
 AnalysisTrainMuonComp.C:81
 AnalysisTrainMuonComp.C:82
 AnalysisTrainMuonComp.C:83
 AnalysisTrainMuonComp.C:84
 AnalysisTrainMuonComp.C:85
 AnalysisTrainMuonComp.C:86
 AnalysisTrainMuonComp.C:87
 AnalysisTrainMuonComp.C:88
 AnalysisTrainMuonComp.C:89
 AnalysisTrainMuonComp.C:90
 AnalysisTrainMuonComp.C:91
 AnalysisTrainMuonComp.C:92
 AnalysisTrainMuonComp.C:93
 AnalysisTrainMuonComp.C:94
 AnalysisTrainMuonComp.C:95
 AnalysisTrainMuonComp.C:96
 AnalysisTrainMuonComp.C:97
 AnalysisTrainMuonComp.C:98
 AnalysisTrainMuonComp.C:99
 AnalysisTrainMuonComp.C:100
 AnalysisTrainMuonComp.C:101
 AnalysisTrainMuonComp.C:102
 AnalysisTrainMuonComp.C:103
 AnalysisTrainMuonComp.C:104
 AnalysisTrainMuonComp.C:105
 AnalysisTrainMuonComp.C:106
 AnalysisTrainMuonComp.C:107
 AnalysisTrainMuonComp.C:108
 AnalysisTrainMuonComp.C:109
 AnalysisTrainMuonComp.C:110
 AnalysisTrainMuonComp.C:111
 AnalysisTrainMuonComp.C:112
 AnalysisTrainMuonComp.C:113
 AnalysisTrainMuonComp.C:114
 AnalysisTrainMuonComp.C:115
 AnalysisTrainMuonComp.C:116
 AnalysisTrainMuonComp.C:117
 AnalysisTrainMuonComp.C:118
 AnalysisTrainMuonComp.C:119
 AnalysisTrainMuonComp.C:120
 AnalysisTrainMuonComp.C:121
 AnalysisTrainMuonComp.C:122
 AnalysisTrainMuonComp.C:123
 AnalysisTrainMuonComp.C:124
 AnalysisTrainMuonComp.C:125
 AnalysisTrainMuonComp.C:126
 AnalysisTrainMuonComp.C:127
 AnalysisTrainMuonComp.C:128
 AnalysisTrainMuonComp.C:129
 AnalysisTrainMuonComp.C:130
 AnalysisTrainMuonComp.C:131
 AnalysisTrainMuonComp.C:132
 AnalysisTrainMuonComp.C:133
 AnalysisTrainMuonComp.C:134
 AnalysisTrainMuonComp.C:135
 AnalysisTrainMuonComp.C:136
 AnalysisTrainMuonComp.C:137
 AnalysisTrainMuonComp.C:138
 AnalysisTrainMuonComp.C:139
 AnalysisTrainMuonComp.C:140
 AnalysisTrainMuonComp.C:141
 AnalysisTrainMuonComp.C:142
 AnalysisTrainMuonComp.C:143
 AnalysisTrainMuonComp.C:144
 AnalysisTrainMuonComp.C:145
 AnalysisTrainMuonComp.C:146