]>
Commit | Line | Data |
---|---|---|
8acd5e60 | 1 | void AnalysisTrainMuonLocal(char* filein = "AliESDs.root", char* fileout = "AliAOD.root")\r |
2 | \r | |
3 | // Macro to produce a generic AOD starting from an ESD file. \r | |
4 | // The AOD is filled with two tasks: \r | |
5 | // 1- with the first one (AliAnalysisTaskESDfilter), \r | |
6 | // all the branches of the AOD are filled apart from the muons. \r | |
7 | // 2- with the second task (AliAnalysisTaskESDMuonFilter) \r | |
8 | // muons tracks are added to the tracks branch \r | |
9 | // This macro works locally\r | |
10 | // R. Arnaldi 5/5/08\r | |
11 | \r | |
12 | {\r | |
13 | gSystem->Load("libTree.so");\r | |
14 | gSystem->Load("libGeom.so");\r | |
15 | gSystem->Load("libVMC.so");\r | |
16 | gSystem->Load("libPhysics.so");\r | |
17 | \r | |
18 | // If analysis is .par based:\r | |
19 | \r | |
20 | // Common packages\r | |
21 | SetupPar("STEERBase");\r | |
22 | SetupPar("ESD");\r | |
23 | SetupPar("AOD");\r | |
24 | SetupPar("ANALYSIS");\r | |
25 | SetupPar("ANALYSISalice");\r | |
26 | // Analysis-specific packages\r | |
27 | SetupPar("PWG3muon"); \r | |
28 | \r | |
29 | // Input ESD file\r | |
30 | TChain* chain = new TChain("esdTree"); \r | |
31 | chain->Add(filein);\r | |
32 | \r | |
33 | // Define the analysis manager\r | |
34 | AliAnalysisManager *mgr = new AliAnalysisManager("Analysis Train", "Analysis train");\r | |
35 | \r | |
36 | // ESD input handler\r | |
37 | AliESDInputHandler *esdHandler = new AliESDInputHandler();\r | |
38 | esdHandler->SetInactiveBranches("FMD CaloCluster");\r | |
39 | \r | |
40 | // AOD output handler\r | |
41 | AliAODHandler* aodHandler = new AliAODHandler();\r | |
42 | aodHandler->SetOutputFileName(fileout);\r | |
43 | \r | |
44 | mgr->SetInputEventHandler(esdHandler);\r | |
45 | mgr->SetOutputEventHandler(aodHandler);\r | |
46 | \r | |
47 | // Set of cuts for the ESD filter\r | |
48 | // \r | |
49 | // standard cuts\r | |
50 | AliESDtrackCuts* esdTrackCutsL = new AliESDtrackCuts("AliESDtrackCuts", "Loose");\r | |
51 | esdTrackCutsL->SetMinNClustersTPC(50);\r | |
52 | esdTrackCutsL->SetMaxChi2PerClusterTPC(3.5);\r | |
53 | esdTrackCutsL->SetMaxCovDiagonalElements(2,2,0.5,0.5,2);\r | |
54 | esdTrackCutsL->SetRequireTPCRefit(kTRUE);\r | |
55 | esdTrackCutsL->SetMinNsigmaToVertex(3);\r | |
56 | esdTrackCutsL->SetRequireSigmaToVertex(kTRUE);\r | |
57 | esdTrackCutsL->SetAcceptKingDaughters(kFALSE);\r | |
58 | //\r | |
59 | // hard cuts\r | |
60 | AliESDtrackCuts* esdTrackCutsH = new AliESDtrackCuts("AliESDtrackCuts", "Hard");\r | |
61 | esdTrackCutsH->SetMinNClustersTPC(100);\r | |
62 | esdTrackCutsH->SetMaxChi2PerClusterTPC(2.0);\r | |
63 | esdTrackCutsH->SetMaxCovDiagonalElements(2,2,0.5,0.5,2);\r | |
64 | esdTrackCutsH->SetRequireTPCRefit(kTRUE);\r | |
65 | esdTrackCutsH->SetMinNsigmaToVertex(2);\r | |
66 | esdTrackCutsH->SetRequireSigmaToVertex(kTRUE);\r | |
67 | esdTrackCutsH->SetAcceptKingDaughters(kFALSE);\r | |
68 | //\r | |
69 | AliAnalysisFilter* trackFilter = new AliAnalysisFilter("trackFilter");\r | |
70 | trackFilter->AddCuts(esdTrackCutsL);\r | |
71 | trackFilter->AddCuts(esdTrackCutsH);\r | |
72 | \r | |
73 | // ESD filter task putting standard info in the output generic AOD \r | |
74 | AliAnalysisTaskESDfilter *esdfilter = new AliAnalysisTaskESDfilter("ESD Filter");\r | |
75 | //esdfilter->SetTrackFilter(trackFilter);\r | |
76 | esdfilter->SetDebugLevel(10);\r | |
77 | mgr->AddTask(esdfilter);\r | |
78 | \r | |
79 | // ESD filter task putting muon info in the output generic AOD \r | |
80 | AliAnalysisTaskESDMuonFilter *esdmuonfilter = new AliAnalysisTaskESDMuonFilter("ESD Muon Filter");\r | |
81 | mgr->AddTask(esdmuonfilter);\r | |
82 | \r | |
83 | // Containers for input/output\r | |
84 | AliAnalysisDataContainer *cin_esd = mgr->CreateContainer("cESD",TChain::Class(), \r | |
85 | AliAnalysisManager::kInputContainer);\r | |
86 | // Output AOD container. \r | |
87 | AliAnalysisDataContainer *cout_aod = mgr->CreateContainer("cAOD", TTree::Class(),\r | |
88 | AliAnalysisManager::kOutputContainer, "default");\r | |
89 | \r | |
90 | // Connect containers to tasks slots\r | |
91 | mgr->ConnectInput (esdfilter, 0, cin_esd );\r | |
92 | mgr->ConnectOutput (esdfilter, 0, cout_aod );\r | |
93 | \r | |
94 | mgr->ConnectInput (esdmuonfilter, 0, cin_esd);\r | |
95 | mgr->ConnectOutput (esdmuonfilter, 0, cout_aod );\r | |
96 | \r | |
97 | //\r | |
98 | // Run the analysis\r | |
99 | // \r | |
100 | if (mgr->InitAnalysis()) {\r | |
101 | mgr->PrintStatus();\r | |
102 | mgr->StartAnalysis("local",chain);\r | |
103 | } \r | |
104 | }\r | |
105 | \r | |
106 | //______________________________________________________________________________\r | |
107 | void SetupPar(char* pararchivename)\r | |
108 | {\r | |
109 | if (pararchivename) {\r | |
110 | char processline[1024];\r | |
111 | sprintf(processline,".! tar xvzf %s.par",pararchivename);\r | |
112 | gROOT->ProcessLine(processline);\r | |
113 | TString ocwd = gSystem->WorkingDirectory();\r | |
114 | gSystem->ChangeDirectory(pararchivename);\r | |
115 | \r | |
116 | // check for BUILD.sh and execute\r | |
117 | if (!gSystem->AccessPathName("PROOF-INF/BUILD.sh")) {\r | |
118 | printf("*******************************\n");\r | |
119 | printf("*** Building PAR archive ***\n");\r | |
120 | printf("*******************************\n");\r | |
121 | \r | |
122 | if (gSystem->Exec("PROOF-INF/BUILD.sh")) {\r | |
123 | Error("runProcess","Cannot Build the PAR Archive! - Abort!");\r | |
124 | return -1;\r | |
125 | }\r | |
126 | }\r | |
127 | // check for SETUP.C and execute\r | |
128 | if (!gSystem->AccessPathName("PROOF-INF/SETUP.C")) {\r | |
129 | printf("*******************************\n");\r | |
130 | printf("*** Setup PAR archive ***\n");\r | |
131 | printf("*******************************\n");\r | |
132 | gROOT->Macro("PROOF-INF/SETUP.C");\r | |
133 | }\r | |
134 | \r | |
135 | gSystem->ChangeDirectory(ocwd.Data());\r | |
136 | printf("Current dir: %s\n", ocwd.Data());\r | |
137 | } \r | |
138 | }\r |