]>
Commit | Line | Data |
---|---|---|
f70a1b5d | 1 | void AnalysisTrainMuonLocal(char* filein = "AliESDs.root", char* fileout = "AliAOD.root") |
2 | ||
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 | |
12 | // R. Arnaldi 5/5/08 | |
13 | ||
14 | { | |
15 | gSystem->Load("libTree.so"); | |
16 | gSystem->Load("libGeom.so"); | |
17 | gSystem->Load("libVMC.so"); | |
18 | gSystem->Load("libPhysics.so"); | |
19 | ||
20 | // If analysis is .par based: | |
21 | ||
22 | // Common packages | |
23 | SetupPar("STEERBase"); | |
24 | SetupPar("ESD"); | |
25 | SetupPar("AOD"); | |
26 | SetupPar("ANALYSIS"); | |
27 | SetupPar("ANALYSISalice"); | |
28 | // Analysis-specific packages | |
29 | SetupPar("PWG3muon"); | |
30 | ||
31 | // Input ESD file | |
32 | TChain* chain = new TChain("esdTree"); | |
33 | chain->Add(filein); | |
34 | ||
35 | // Define the analysis manager | |
36 | AliAnalysisManager *mgr = new AliAnalysisManager("Analysis Train", "Analysis train"); | |
37 | ||
38 | // ESD input handler | |
39 | AliESDInputHandler *esdHandler = new AliESDInputHandler(); | |
40 | esdHandler->SetInactiveBranches("FMD CaloCluster"); | |
41 | ||
42 | // AOD output handler | |
43 | AliAODHandler* aodHandler = new AliAODHandler(); | |
44 | aodHandler->SetOutputFileName(fileout); | |
45 | ||
46 | mgr->SetInputEventHandler(esdHandler); | |
47 | mgr->SetOutputEventHandler(aodHandler); | |
48 | ||
49 | // Set of cuts for the ESD filter | |
50 | // | |
51 | // standard cut | |
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); | |
60 | // | |
61 | // hard cuts | |
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.); | |
71 | // | |
72 | // muon cuts | |
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(); | |
79 | ||
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); | |
83 | ||
84 | // muon track filter (to reject muon tracks not surviving the cuts) | |
85 | AliAnalysisFilter* trackMuonFilter = new AliAnalysisFilter("trackMuonFilter"); | |
86 | trackMuonFilter->AddCuts(esdMuonTrackCuts); | |
87 | ||
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); | |
93 | ||
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); | |
98 | ||
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"); | |
105 | ||
106 | // Connect containers to tasks slots | |
107 | mgr->ConnectInput (esdfilter, 0, cin_esd ); | |
108 | mgr->ConnectOutput (esdfilter, 0, cout_aod ); | |
109 | ||
110 | mgr->ConnectInput (esdmuonfilter, 0, cin_esd); | |
111 | mgr->ConnectOutput (esdmuonfilter, 0, cout_aod ); | |
112 | ||
113 | // | |
114 | // Run the analysis | |
115 | // | |
116 | if (mgr->InitAnalysis()) { | |
117 | mgr->PrintStatus(); | |
118 | mgr->StartAnalysis("local",chain); | |
119 | } | |
120 | } | |
121 | ||
122 | //______________________________________________________________________________ | |
123 | void SetupPar(char* pararchivename) | |
124 | { | |
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); | |
131 | ||
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"); | |
137 | ||
138 | if (gSystem->Exec("PROOF-INF/BUILD.sh")) { | |
139 | Error("runProcess","Cannot Build the PAR Archive! - Abort!"); | |
140 | return -1; | |
141 | } | |
142 | } | |
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"); | |
149 | } | |
150 | ||
151 | gSystem->ChangeDirectory(ocwd.Data()); | |
152 | printf("Current dir: %s\n", ocwd.Data()); | |
153 | } | |
154 | } |