]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG3/muon/AnalysisTrainMuonLocal.C
bugfix #38673 (Kenneth): last pad per row was always ignored; corrected cleanup og...
[u/mrichter/AliRoot.git] / PWG3 / muon / AnalysisTrainMuonLocal.C
CommitLineData
f70a1b5d 1void 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//______________________________________________________________________________
123void 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}