]>
Commit | Line | Data |
---|---|---|
15f4cb18 | 1 | void InitHistograms(AliDielectron *die, Int_t cutDefinition); |
2 | ||
3 | void SetupTrackCuts(Bool_t isESD, AliDielectron *die, Int_t cutDefinition); | |
4 | void SetupPairCuts(AliDielectron *die, Int_t cutDefinition); | |
5 | ||
6 | void AddMCSignals(AliDielectron *die); | |
7 | void SetEtaCorrection(); | |
8 | ||
9 | TString names=("TOFTRDany"); | |
10 | enum { kTOFTRD}; | |
11 | ||
12 | TObjArray *arrNames=names.Tokenize(";"); | |
13 | const Int_t nDie=arrNames->GetEntries(); | |
14 | ||
15 | Bool_t hasMC=kFALSE; | |
16 | ||
17 | AliDielectron* ConfigBJpsi_ff_PbPbFilter(Int_t cutDefinition, Bool_t isMC=kFALSE) | |
18 | { | |
19 | // | |
20 | // Setup the instance of AliDielectron | |
21 | // | |
22 | ||
23 | ||
24 | // MC event handler? | |
25 | hasMC=isMC; | |
26 | //(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()!=0x0); | |
27 | ||
28 | //ESD handler? | |
29 | Bool_t isESD=(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()->IsA()==AliESDInputHandler::Class()); | |
30 | ||
31 | ||
32 | // create the actual framework object | |
33 | TString name=Form("%02d",cutDefinition); | |
34 | if (cutDefinition<arrNames->GetEntriesFast()){ | |
35 | name=arrNames->At(cutDefinition)->GetName(); | |
36 | } | |
37 | AliDielectron *die = new AliDielectron(Form("%s",name.Data()), | |
38 | Form("Track cuts: %s",name.Data())); | |
39 | ||
40 | // Monte Carlo Signals and TRD efficiency tables | |
41 | if(hasMC) { | |
42 | AddMCSignals(die); | |
43 | ||
44 | // trd tables | |
45 | TString pidTab="$TRAIN_ROOT/util/dielectron/dielectron/TRDpidEff_eleProb07_TRDntr4_6.root"; | |
46 | TString trainRoot=gSystem->Getenv("TRAIN_ROOT"); | |
47 | if (trainRoot.IsNull()) pidTab="$ALICE_ROOT/PWGDQ/dielectron/files/TRDpidEff_eleProb07_TRDntr4_6.root"; | |
48 | ||
49 | if (gSystem->AccessPathName(gSystem->ExpandPathName(pidTab.Data()))) | |
50 | Error("ConfigPbPb","PID table not found: %s",pidTab.Data()); | |
51 | else | |
52 | die->SetTRDcorrectionFilename(pidTab.Data()); | |
53 | } | |
54 | ||
55 | // cut setup | |
56 | SetupTrackCuts(isESD,die,cutDefinition); | |
57 | SetupPairCuts(die,cutDefinition); | |
58 | ||
59 | // histogram setup | |
60 | if(cutDefinition == kTOFTRD) | |
61 | InitHistograms(die,cutDefinition); | |
62 | ||
63 | // setup eta correction | |
64 | SetEtaCorrection(); | |
65 | ||
66 | return die; | |
67 | } | |
68 | ||
69 | //______________________________________________________________________________________ | |
70 | void SetupTrackCuts(Bool_t isESD, AliDielectron *die, Int_t cutDefinition) | |
71 | { | |
72 | // | |
73 | // Setup the track cuts | |
74 | // | |
75 | ||
76 | // Quality cuts | |
77 | AliDielectronCutGroup* cuts = new AliDielectronCutGroup("cuts","cuts",AliDielectronCutGroup::kCompAND); | |
78 | die->GetTrackFilter().AddCuts(cuts); | |
79 | ||
80 | //Pt cut, should make execution a bit faster | |
81 | AliDielectronVarCuts *pt = new AliDielectronVarCuts("Pt>.85","Pt>.85"); | |
82 | pt->AddCut(AliDielectronVarManager::kPt,0.85,1e30); | |
83 | cuts->AddCut(pt); | |
84 | ||
85 | // track cuts ESD and AOD | |
86 | AliDielectronVarCuts *varCuts = new AliDielectronVarCuts("VarCuts","VarCuts"); | |
87 | varCuts->AddCut(AliDielectronVarManager::kImpactParXY, -1.0, 1.0); | |
88 | varCuts->AddCut(AliDielectronVarManager::kImpactParZ, -3.0, 3.0); | |
89 | varCuts->AddCut(AliDielectronVarManager::kEta, -0.9, 0.9); | |
90 | varCuts->AddCut(AliDielectronVarManager::kTPCchi2Cl, 0.0, 4.0); | |
91 | varCuts->AddCut(AliDielectronVarManager::kNclsTPC, 70.0, 160.0); | |
92 | varCuts->AddCut(AliDielectronVarManager::kKinkIndex0, 0.0); | |
93 | ||
94 | AliDielectronTrackCuts *trkCuts = new AliDielectronTrackCuts("TrkCuts","TrkCuts"); | |
95 | varCuts->AddCut(AliDielectronVarManager::kITSLayerFirstCls,-0.01,1.5); //ITS(0-1) = SPDany | |
96 | ||
97 | cuts->AddCut(varCuts); | |
98 | ||
99 | trkCuts->SetRequireITSRefit(kTRUE); | |
100 | trkCuts->SetRequireTPCRefit(kTRUE); | |
101 | cuts->AddCut(trkCuts); | |
102 | ||
103 | //Do we have an MC handler? | |
104 | // Bool_t hasMC=(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()!=0x0); | |
105 | ||
106 | /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv PID CUTS vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */ | |
107 | AliDielectronPID *pid = new AliDielectronPID("PID","PID"); | |
108 | ||
109 | ////////////////////////////////// DATA | |
110 | if(!hasMC) { | |
111 | ||
112 | pid->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-3.0,3.0,0.,0.,kTRUE); | |
113 | pid->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-3.0,3.0,0.,0.,kTRUE); | |
114 | } | |
115 | ||
116 | ////////////////////////////////// MC | |
117 | if(hasMC) { | |
118 | ||
119 | // electron | |
120 | Double_t nSigmaPi = 3.5; Double_t nSigmaP = 3.5; | |
121 | Double_t resolution=0.0549; | |
122 | Double_t BBpro[5] = {0}; | |
123 | Double_t BBpio[5] = {0}; | |
124 | ||
125 | for(Int_t icent=0; icent<8; icent++) { | |
126 | ||
127 | switch (icent) { | |
128 | case 0: // 0-10% | |
129 | BBpro[0] = 0.031555; BBpro[1] = 26.0595; BBpro[2] = 3.02422e-11; BBpro[3] = 2.05594; BBpro[4] = 5.99848; | |
130 | BBpio[0] = 0.0252122; BBpio[1] = 38.8991; BBpio[2] = 4.0901e-11; BBpio[3] = 5.27988; BBpio[4] = 4.3108; | |
131 | break; | |
132 | case 1: // 10-20% | |
133 | BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999; | |
134 | BBpio[0] = 0.0252127; BBpio[1] = 33.8617; BBpio[2] = 3.56866e-11; BBpio[3] = 5.24831; BBpio[4] = 4.31093; | |
135 | break; | |
136 | case 2: // 20-30% | |
137 | BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999; | |
138 | BBpio[0] = 0.0263205; BBpio[1] = 37.9307; BBpio[2] = 4.29724e-11; BBpio[3] = 5.74458; BBpio[4] = 4.32459; | |
139 | break; | |
140 | case 3: // 30-40% | |
141 | BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999; | |
142 | BBpio[0] = 0.026294; BBpio[1] = 39.0346; BBpio[2] = 4.12261e-11; BBpio[3] = 5.28808; BBpio[4] = 4.31301; | |
143 | break; | |
144 | case 4: // 40-50% | |
145 | BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999; | |
146 | BBpio[0] = 0.0263134; BBpio[1] = 38.2084; BBpio[2] = 3.75159e-11; BBpio[3] = 5.78125; BBpio[4] = 4.31363; | |
147 | break; | |
148 | case 5: // 50-60% | |
149 | BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999; | |
150 | BBpio[0] = 0.0263134; BBpio[1] = 38.2084; BBpio[2] = 3.75159e-11; BBpio[3] = 5.78125; BBpio[4] = 4.31363; | |
151 | break; | |
152 | case 6: // 60-70% | |
153 | BBpro[0] = 0.031555; BBpro[1] = 26.0595; BBpro[2] = 3.02422e-11; BBpro[3] = 2.05594; BBpro[4] = 5.99848; | |
154 | BBpio[0] = 0.026302; BBpio[1] = 38.6888; BBpio[2] = 3.56792e-11; BBpio[3] = 5.2465; BBpio[4] = 4.31094; | |
155 | break; | |
156 | case 7: // 70-80% | |
157 | BBpro[0] = 0.0315171; BBpro[1] = 25.8656; BBpro[2] = 3.03896e-11; BBpro[3] = 2.05802; BBpro[4] = 5.99999; | |
158 | BBpio[0] = 0.0263134; BBpio[1] = 38.2084; BBpio[2] = 3.75159e-11; BBpio[3] = 5.78125; BBpio[4] = 4.31363; | |
159 | break; | |
160 | case 8: // 80-90% | |
161 | BBpro[0] = 0.0313438; BBpro[1] = 25.8666; BBpro[2] = 4.5457e-11; BBpro[3] = 2.07912; BBpro[4] = 5.99986; | |
162 | BBpio[0] = 0.0252127; BBpio[1] = 33.8617; BBpio[2] = 3.56866e-11; BBpio[3] = 5.24831; BBpio[4] = 4.31093; | |
163 | break; | |
164 | case 9: // 90-100% | |
165 | BBpro[0] = 0.0319126; BBpro[1] = 36.8784; BBpro[2] = 3.4274e-11; BBpro[3] = 3.2431; BBpro[4] = 5.93388; | |
166 | BBpio[0] = 0.027079; BBpio[1] = 67.5936; BBpio[2] = 9.72548e-11; BBpio[3] = 9.61382; BBpio[4] = 5.99372; | |
167 | break; | |
168 | } | |
169 | ||
170 | ||
171 | TF1 *ffPro=new TF1(Form("fBethe%d_c%d",AliPID::kProton,icent), Form("(%f*%f+(AliExternalTrackParam::BetheBlochAleph(x/%f,[0],[1],[2],[3],[4])-AliExternalTrackParam::BetheBlochAleph(x/%f,[0],[1],[2],[3],[4])))/%f", nSigmaP,resolution, AliPID::ParticleMass(AliPID::kProton), AliPID::ParticleMass(AliPID::kElectron), resolution), 0.05,200.); | |
172 | ||
173 | TF1 *ffPio=new TF1(Form("fBethe%d_c%d",AliPID::kPion,icent), Form("(%f*%f+(AliExternalTrackParam::BetheBlochAleph(x/%f,[0],[1],[2],[3],[4])-AliExternalTrackParam::BetheBlochAleph(x/%f,[0],[1],[2],[3],[4])))/%f", nSigmaPi,resolution, AliPID::ParticleMass(AliPID::kPion), AliPID::ParticleMass(AliPID::kElectron), resolution), 0.05,200.); | |
174 | ||
175 | TString list=gSystem->Getenv("LIST"); | |
176 | ||
177 | //LHC11a10b | |
178 | if (list.Contains("LHC11a10b") || list.IsNull()) { | |
179 | printf("LHC11a10b parameters\n"); | |
180 | ffPro->SetParameters(BBpro[0],BBpro[1],BBpro[2],BBpro[3],BBpro[4]); | |
181 | ffPio->SetParameters(BBpio[0],BBpio[1],BBpio[2],BBpio[3],BBpio[4]); | |
182 | ||
183 | // proton cut | |
184 | pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,ffPro,10,((double)icent)*10.,((double)icent+1)*10, | |
185 | kFALSE,AliDielectronPID::kRequire,AliDielectronVarManager::kCentrality); | |
186 | // pion cut | |
187 | pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,ffPio,10,((double)icent)*10.,((double)icent+1)*10, | |
188 | kFALSE,AliDielectronPID::kRequire,AliDielectronVarManager::kCentrality); | |
189 | } | |
190 | } | |
191 | ||
192 | // shifts for the nSigma electrons | |
193 | TGraph* nSigmaCorrection = new TGraph(); | |
194 | // LHC11a10b | |
195 | if (list.Contains("LHC11a10b") || list.IsNull()) { | |
196 | nSigmaCorrection->SetPoint(0, 137161., -0.50-(0.28)); | |
197 | nSigmaCorrection->SetPoint(1, 139510., -0.50-(0.28)); | |
198 | pid->SetCorrGraph(nSigmaCorrection); | |
199 | } | |
200 | ||
201 | } //hasMC | |
202 | ||
203 | ////////////////////////////////// DATA + MC | |
204 | // pid cuts TPC + TOF | |
205 | pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-4.,4.); | |
206 | pid->AddCut(AliDielectronPID::kTOF,AliPID::kElectron,-3,3.,0.,0.,kFALSE,AliDielectronPID::kIfAvailable); | |
207 | ||
208 | cuts->AddCut(pid); | |
209 | /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PID CUTS ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/ | |
210 | ||
211 | ||
212 | // exclude conversion electrons selected by the tender | |
213 | AliDielectronTrackCuts *noconv=new AliDielectronTrackCuts("noConv","noConv"); | |
214 | noconv->SetV0DaughterCut(AliPID::kElectron,kTRUE); | |
215 | cuts->AddCut(noconv); | |
216 | ||
217 | } | |
218 | ||
219 | //______________________________________________________________________________________ | |
220 | void SetupPairCuts(AliDielectron *die, Int_t cutDefinition) | |
221 | { | |
222 | // | |
223 | // Setup the pair cuts | |
224 | // | |
225 | ||
226 | // conversion rejection | |
227 | Double_t gCut = 0.05; // default | |
228 | ||
229 | AliDielectronVarCuts *gammaCut=new AliDielectronVarCuts("gammaCut","gammaCut"); | |
230 | gammaCut->AddCut(AliDielectronVarManager::kM,0.,gCut); | |
231 | die->GetPairPreFilter().AddCuts(gammaCut); | |
232 | ||
233 | ||
234 | } | |
235 | ||
236 | //______________________________________________________________________________________ | |
237 | void InitHistograms(AliDielectron *die, Int_t cutDefinition) | |
238 | { | |
239 | // | |
240 | // Initialise the histograms | |
241 | // | |
242 | // Bool_t hasMC=(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()!=0x0); | |
243 | ||
244 | //Setup histogram Manager | |
245 | AliDielectronHistos *histos=new AliDielectronHistos(die->GetName(),die->GetTitle()); | |
246 | ||
247 | ||
248 | //add histograms to event class | |
249 | histos->AddClass("Event"); | |
250 | histos->AddClass("Event_noCuts"); | |
251 | histos->UserHistogram("Event","VtxZ","Vertex Z;z (cm)", | |
252 | 300,-15.,15.,AliDielectronVarManager::kZvPrim); | |
253 | histos->UserHistogram("Event_noCuts","VtxZ","Vertex Z;z (cm)", | |
254 | 300,-15.,15.,AliDielectronVarManager::kZvPrim); | |
255 | ||
256 | histos->UserHistogram("Event","Centrality","Centrality;centrality (%)", | |
257 | 20,0.,100.,AliDielectronVarManager::kCentrality); | |
258 | ||
259 | histos->UserHistogram("Event","Multiplicity","Multiplicity V0;Multiplicity V0", | |
260 | 500,0.,25000., AliDielectronVarManager::kMultV0); | |
261 | histos->UserHistogram("Event","Multiplicity_nTracks","Multiplicity V0 vs #tracks; #tracks; Multiplicity V0;", | |
262 | 500,0.,25000.,500,0.,25000.,AliDielectronVarManager::kNTrk, AliDielectronVarManager::kMultV0); | |
263 | ||
264 | histos->UserHistogram("Event","Cent_Mult","Centrality vs. Multiplicity;centrality (%);Multiplicity V0", | |
265 | 10,0.,100., 500,0.,500.,AliDielectronVarManager::kCentrality,AliDielectronVarManager::kMultV0); | |
266 | histos->UserProfile("Event","Cent_Nacc", | |
267 | "accepted tracks;centrality (%)", | |
268 | AliDielectronVarManager::kNacc, | |
269 | "0.,5.,10.,20.,40.,50.,60.,80.,100.", | |
270 | AliDielectronVarManager::kCentrality); | |
271 | histos->UserProfile("Event","Cent_NVtxContrib", | |
272 | "number of vertex contributors;centrality (%)", | |
273 | AliDielectronVarManager::kNVtxContrib, | |
274 | "0.,5.,10.,20.,40.,50.,60.,80.,100.", | |
275 | AliDielectronVarManager::kCentrality); | |
276 | ||
277 | ||
278 | ||
279 | ||
280 | ||
281 | //Initialise histogram classes | |
282 | histos->SetReservedWords("Track;Pair"); | |
283 | ||
284 | ||
285 | //Pair classes | |
286 | // to fill also mixed event histograms loop until 10 | |
287 | for (Int_t i=0; i<3; ++i){ | |
288 | histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(i))); | |
289 | } | |
290 | ||
291 | if(cutDefinition <= kTOFTRD) { | |
292 | ||
293 | //legs from pair | |
294 | for (Int_t i=0; i<3; ++i){ | |
295 | histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(i))); | |
296 | } | |
297 | ||
298 | //Track classes | |
299 | //to fill also track info from 2nd event loop until 2 | |
300 | for (Int_t i=0; i<2; ++i){ | |
301 | histos->AddClass(Form("Track_%s",AliDielectron::TrackClassName(i))); | |
302 | } | |
303 | ||
304 | //add histograms to Track classes | |
305 | //histos->UserHistogram("Track","TOFbit","TOFbit;bit;#tracks",19,-9.5,9.5,AliDielectronVarManager::kTOFPIDBit); | |
306 | histos->UserHistogram("Track","Pt","Pt;Pt [GeV];#tracks", | |
307 | 400,0,20., | |
308 | AliDielectronVarManager::kPt); | |
309 | ||
310 | histos->UserHistogram("Track","TPCnCls","Number of Clusters TPC;TPC number clusteres;#tracks", | |
311 | 160,-0.5,159.5, | |
312 | AliDielectronVarManager::kNclsTPC); | |
313 | histos->UserHistogram("Track","TPCsignalN","Number of Clusters TPC;TPC number clusteres;#tracks", | |
314 | 160,-0.5,159.5, | |
315 | AliDielectronVarManager::kTPCsignalN); | |
316 | ||
317 | histos->UserHistogram("Track","dXY","dXY;dXY [cm];#tracks", | |
318 | 500,-1.,1., | |
319 | AliDielectronVarManager::kImpactParXY); | |
320 | histos->UserHistogram("Track","dZ","dZ;dZ [cm];#tracks", | |
321 | 600,-3.,3., | |
322 | AliDielectronVarManager::kImpactParZ); | |
323 | ||
324 | histos->UserHistogram("Track","Centrality_Eta_Nsigma","Cent_Eta_nSigma; Centrality; #eta; TPCnSigma_Electron",20,0.,100.,200,-1.,1.,200,-10.,10.,AliDielectronVarManager::kCentrality,AliDielectronVarManager::kEta,AliDielectronVarManager::kTPCnSigmaEle); | |
325 | ||
326 | histos->UserHistogram("Track","Eta_Phi","Eta Phi Map; Eta; Phi;#tracks", | |
327 | 200,-1,1,200,0,6.285, | |
328 | AliDielectronVarManager::kEta,AliDielectronVarManager::kPhi); | |
329 | ||
330 | histos->UserHistogram("Track","dEdx_P","dEdx;P [GeV];TPC signal (arb units);#tracks", | |
331 | 400,0.2,20.,200,0.,200., | |
332 | AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCsignal,kTRUE); | |
333 | ||
334 | histos->UserHistogram("Track","TPCnSigmaEle_P","TPC number of sigmas Electrons;P [GeV];TPC number of sigmas Electrons;#tracks",400,0.2,20.,200,-10.,10., AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEle,kTRUE); | |
335 | ||
336 | histos->UserHistogram("Track","nSigmaTOF_P","TOF sigmas Electrons;P [GeV];TOF number of sigmas Electrons;#tracks", 400,0.2,20.,200,-10.,10., AliDielectronVarManager::kPIn,AliDielectronVarManager::kTOFnSigmaEle,kTRUE); | |
337 | ||
338 | histos->UserHistogram("Track","Ncl",";Number clusters TPC;Number clusters TPC", | |
339 | 160,-0.5,159.5, | |
340 | AliDielectronVarManager::kNclsTPC); | |
341 | histos->UserHistogram("Track","NclFr",";Number of findable clusters (robust);Number findable clusters TPC", | |
342 | 160,-0.5,159.5, | |
343 | AliDielectronVarManager::kNFclsTPCr); | |
344 | histos->UserHistogram("Track","Ncl_NclFr","Number of (findable) clusters TPC;found clusters;findable clusters", | |
345 | 160,-0.5,159.5,160,-0.5,159.5, | |
346 | AliDielectronVarManager::kNclsTPC,AliDielectronVarManager::kNFclsTPCr); | |
347 | histos->UserHistogram("Track","NtrklTRD",";Number tracklets TRD for pid;Number tracklets TRD", | |
348 | 8,-0.5,7.5, | |
349 | AliDielectronVarManager::kTRDpidQuality); | |
350 | ||
351 | //add histograms to Pair classes | |
352 | histos->UserHistogram("Pair","InvMass","Inv.Mass;Inv. Mass [GeV];#pairs", | |
353 | 300,.0,300*0.04, | |
354 | AliDielectronVarManager::kM); // 40MeV bins, 12GeV/c2 | |
355 | histos->UserHistogram("Pair","Rapidity","Rapidity;Rapidity;#pairs", | |
356 | 100,-1.,1., | |
357 | AliDielectronVarManager::kY); | |
358 | histos->UserHistogram("Pair","OpeningAngle","Opening angle;angle", | |
359 | 100,0.,3.15, | |
360 | AliDielectronVarManager::kOpeningAngle); | |
361 | histos->UserHistogram("Pair","Chi2NDF","#chi^{2}/NDF;#chi^{2}/NDF", | |
362 | 100,0.,20, | |
363 | AliDielectronVarManager::kChi2NDF); | |
364 | ||
365 | histos->UserHistogram("Pair","PseudoProperTime","Pseudoproper decay length; pseudoproper-decay-length[#mum];Entries/40#mum", | |
366 | 150,-0.3.,0.3,AliDielectronVarManager::kPseudoProperTime); | |
367 | ||
368 | ||
369 | } | |
370 | ||
371 | die->SetHistogramManager(histos); | |
372 | } | |
373 | ||
374 | ||
375 | void AddMCSignals(AliDielectron *die){ | |
376 | //Do we have an MC handler? | |
377 | //Bool_t hasMC=(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()!=0x0); | |
378 | if (!hasMC) return; | |
379 | ||
380 | AliDielectronSignalMC* inclusiveJpsi = new AliDielectronSignalMC("inclusiveJpsi","Inclusive J/psi"); | |
381 | inclusiveJpsi->SetLegPDGs(11,-11); | |
382 | inclusiveJpsi->SetMotherPDGs(443,443); | |
383 | inclusiveJpsi->SetMothersRelation(AliDielectronSignalMC::kSame); | |
384 | inclusiveJpsi->SetFillPureMCStep(kTRUE); | |
385 | inclusiveJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE); | |
386 | inclusiveJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE); | |
387 | die->AddSignalMC(inclusiveJpsi); | |
388 | ||
389 | AliDielectronSignalMC* promptJpsi = new AliDielectronSignalMC("promptJpsi","Prompt J/psi"); // prompt J/psi (not from beauty decays) | |
390 | promptJpsi->SetLegPDGs(11,-11); | |
391 | promptJpsi->SetMotherPDGs(443,443); | |
392 | promptJpsi->SetGrandMotherPDGs(503,503,kTRUE,kTRUE); // not from beauty hadrons | |
393 | promptJpsi->SetMothersRelation(AliDielectronSignalMC::kSame); | |
394 | promptJpsi->SetFillPureMCStep(kTRUE); | |
395 | promptJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState); | |
396 | promptJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE); | |
397 | promptJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE); | |
398 | promptJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE); | |
399 | die->AddSignalMC(promptJpsi); | |
400 | ||
401 | AliDielectronSignalMC* beautyJpsi = new AliDielectronSignalMC("beautyJpsi","Beauty J/psi"); | |
402 | beautyJpsi->SetLegPDGs(11,-11); | |
403 | beautyJpsi->SetMotherPDGs(443,443); | |
404 | beautyJpsi->SetMothersRelation(AliDielectronSignalMC::kSame); | |
405 | beautyJpsi->SetGrandMotherPDGs(500,500); | |
406 | beautyJpsi->SetFillPureMCStep(kTRUE); | |
407 | beautyJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE); | |
408 | beautyJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE); | |
409 | beautyJpsi->SetCheckBothChargesGrandMothers(kTRUE,kTRUE); | |
410 | die->AddSignalMC(beautyJpsi); | |
411 | ||
412 | AliDielectronSignalMC* directJpsi = new AliDielectronSignalMC("directJpsi","Direct J/psi"); // embedded J/psi | |
413 | directJpsi->SetLegPDGs(11,-11); | |
414 | directJpsi->SetMotherPDGs(443,443); | |
415 | directJpsi->SetMothersRelation(AliDielectronSignalMC::kSame); | |
416 | directJpsi->SetFillPureMCStep(kTRUE); | |
417 | directJpsi->SetLegSources(AliDielectronSignalMC::kFinalState, AliDielectronSignalMC::kFinalState); | |
418 | directJpsi->SetMotherSources(AliDielectronSignalMC::kDirect, AliDielectronSignalMC::kDirect); | |
419 | directJpsi->SetCheckBothChargesLegs(kTRUE,kTRUE); | |
420 | directJpsi->SetCheckBothChargesMothers(kTRUE,kTRUE); | |
421 | die->AddSignalMC(directJpsi); | |
422 | } | |
423 | ||
424 | void SetEtaCorrection() | |
425 | { | |
426 | ||
427 | if (AliDielectronPID::GetEtaCorrFunction()) return; | |
428 | ||
429 | //TString list=gSystem->Getenv("LIST"); | |
430 | TString list="LHC11h.pass2"; | |
431 | ||
432 | //TString etaMap="$TRAIN_ROOT/jpsi_JPSI/EtaCorrMaps.root"; | |
433 | //TString trainRoot=gSystem->Getenv("TRAIN_ROOT"); | |
434 | //if (trainRoot.IsNull()) | |
435 | TString etaMap="$ALICE_ROOT/PWGDQ/dielectron/files/EtaCorrMaps.root"; | |
436 | if (gSystem->AccessPathName(gSystem->ExpandPathName(etaMap.Data()))){ | |
437 | Error("ConfigPbPb","Eta map not found: %s",etaMap.Data()); | |
438 | return; | |
439 | } | |
440 | ||
441 | TFile f(etaMap.Data()); | |
442 | if (!f.IsOpen()) return; | |
443 | TList *keys=f.GetListOfKeys(); | |
444 | ||
445 | ||
446 | for (Int_t i=0; i<keys->GetEntries(); ++i){ | |
447 | TString kName=keys->At(i)->GetName(); | |
448 | TPRegexp reg(kName); | |
449 | if (reg.MatchB(list)){ | |
450 | printf("Using Eta Correction Function: %s\n",kName.Data()); | |
451 | AliDielectronPID::SetEtaCorrFunction((TF1*)f.Get(kName.Data())); | |
452 | } | |
453 | } | |
454 | } | |
455 |