1 void AnalysisTrainMuonLocal(char* filein = "AliESDs.root", char* fileout = "AliAODs.root")
3 // Macro to produce a generic AOD starting from an ESD file.
4 // The AOD is filled with two tasks:
5 // 1- with the first one (AliAnalysisTaskESDfilter),
6 // all the branches of the AOD are filled apart from the muons.
7 // 2- with the second task (AliAnalysisTaskESDMuonFilter)
8 // muons tracks are added to the tracks branch
9 // There is the possibility to apply cuts on the muon tracks in order
10 // to reject muons before filling the AOD
11 // This macro works locally
15 gSystem->Load("libTree.so");
16 gSystem->Load("libGeom.so");
17 gSystem->Load("libVMC.so");
18 gSystem->Load("libPhysics.so");
20 // If analysis is .par based:
23 SetupPar("STEERBase");
27 SetupPar("ANALYSISalice");
28 // Analysis-specific packages
32 TChain* chain = new TChain("esdTree");
35 // Define the analysis manager
36 AliAnalysisManager *mgr = new AliAnalysisManager("Analysis Train", "Analysis train");
39 AliESDInputHandler *esdHandler = new AliESDInputHandler();
40 esdHandler->SetInactiveBranches("FMD CaloCluster");
43 AliAODHandler* aodHandler = new AliAODHandler();
44 aodHandler->SetOutputFileName(fileout);
46 mgr->SetInputEventHandler(esdHandler);
47 mgr->SetOutputEventHandler(aodHandler);
49 // Set of cuts for the ESD filter
52 AliESDtrackCuts* esdTrackCutsL = new AliESDtrackCuts("AliESDtrackCuts", "Loose");
53 esdTrackCutsL->SetMinNClustersTPC(50);
54 esdTrackCutsL->SetMaxChi2PerClusterTPC(3.5);
55 esdTrackCutsL->SetMaxCovDiagonalElements(2,2,0.5,0.5,2);
56 esdTrackCutsL->SetRequireTPCRefit(kTRUE);
57 esdTrackCutsL->SetMinNsigmaToVertex(3);
58 esdTrackCutsL->SetRequireSigmaToVertex(kTRUE);
59 esdTrackCutsL->SetAcceptKingDaughters(kFALSE);
62 AliESDtrackCuts* esdTrackCutsH = new AliESDtrackCuts("AliESDtrackCuts", "Hard");
63 esdTrackCutsH->SetMinNClustersTPC(100);
64 esdTrackCutsH->SetMaxChi2PerClusterTPC(2.0);
65 esdTrackCutsH->SetMaxCovDiagonalElements(2,2,0.5,0.5,2);
66 esdTrackCutsH->SetRequireTPCRefit(kTRUE);
67 esdTrackCutsH->SetMinNsigmaToVertex(2);
68 esdTrackCutsH->SetRequireSigmaToVertex(kTRUE);
69 esdTrackCutsH->SetAcceptKingDaughters(kFALSE);
70 esdTrackCutsH->SetPRange(0.,2.);
73 AliESDMuonTrackCuts* esdMuonTrackCuts = new AliESDMuonTrackCuts("AliESDMuonTrackCuts", "test");
74 esdMuonTrackCuts->SetPRange(0.,20.);
75 //esdMuonTrackCuts->SetPtRange(0.,0.5); // examples of kinematic cuts that can be applied
76 esdMuonTrackCuts->SetHistogramsOn(kTRUE); // methods to draw control histos
77 esdMuonTrackCuts->DefineHistograms();
78 esdMuonTrackCuts->DrawHistograms();
80 // track filter (to reject tracks not surviving the cuts - refers to all particles apart from muons)
81 AliAnalysisFilter* trackFilter = new AliAnalysisFilter("trackFilter");
82 trackFilter->AddCuts(esdTrackCutsH);
84 // muon track filter (to reject muon tracks not surviving the cuts)
85 AliAnalysisFilter* trackMuonFilter = new AliAnalysisFilter("trackMuonFilter");
86 trackMuonFilter->AddCuts(esdMuonTrackCuts);
88 // ESD filter task putting standard info in the output generic AOD
89 AliAnalysisTaskESDfilter *esdfilter = new AliAnalysisTaskESDfilter("ESD Filter");
90 //esdfilter->SetTrackFilter(trackFilter);
91 esdfilter->SetDebugLevel(10);
92 mgr->AddTask(esdfilter);
94 // ESD filter task putting muon info in the output generic AOD
95 AliAnalysisTaskESDMuonFilter *esdmuonfilter = new AliAnalysisTaskESDMuonFilter("ESD Muon Filter");
96 esdmuonfilter->SetTrackFilter(trackMuonFilter);
97 mgr->AddTask(esdmuonfilter);
99 // Containers for input/output
100 AliAnalysisDataContainer *cin_esd = mgr->CreateContainer("cESD",TChain::Class(),
101 AliAnalysisManager::kInputContainer);
102 // Output AOD container.
103 AliAnalysisDataContainer *cout_aod = mgr->CreateContainer("cAOD", TTree::Class(),
104 AliAnalysisManager::kOutputContainer, "default");
106 // Connect containers to tasks slots
107 mgr->ConnectInput (esdfilter, 0, cin_esd );
108 mgr->ConnectOutput (esdfilter, 0, cout_aod );
110 mgr->ConnectInput (esdmuonfilter, 0, cin_esd);
111 mgr->ConnectOutput (esdmuonfilter, 0, cout_aod );
116 if (mgr->InitAnalysis()) {
118 mgr->StartAnalysis("local",chain);
122 //______________________________________________________________________________
123 void SetupPar(char* pararchivename)
125 if (pararchivename) {
126 char processline[1024];
127 sprintf(processline,".! tar xvzf %s.par",pararchivename);
128 gROOT->ProcessLine(processline);
129 TString ocwd = gSystem->WorkingDirectory();
130 gSystem->ChangeDirectory(pararchivename);
132 // check for BUILD.sh and execute
133 if (!gSystem->AccessPathName("PROOF-INF/BUILD.sh")) {
134 printf("*******************************\n");
135 printf("*** Building PAR archive ***\n");
136 printf("*******************************\n");
138 if (gSystem->Exec("PROOF-INF/BUILD.sh")) {
139 Error("runProcess","Cannot Build the PAR Archive! - Abort!");
143 // check for SETUP.C and execute
144 if (!gSystem->AccessPathName("PROOF-INF/SETUP.C")) {
145 printf("*******************************\n");
146 printf("*** Setup PAR archive ***\n");
147 printf("*******************************\n");
148 gROOT->Macro("PROOF-INF/SETUP.C");
151 gSystem->ChangeDirectory(ocwd.Data());
152 printf("Current dir: %s\n", ocwd.Data());