]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG3/muon/AnalysisTrainMuonLocal.C
Analysis taks for the generation of AOD with muon events (Roberta, Enrico)
[u/mrichter/AliRoot.git] / PWG3 / muon / AnalysisTrainMuonLocal.C
1 void AnalysisTrainMuonLocal(char* filein = "AliESDs.root", char* fileout = "AliAODs.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 }