]>
Commit | Line | Data |
---|---|---|
06f630bb | 1 | /************************************************************************* |
2 | * Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. * | |
3 | * * | |
4 | * Author: The ALICE Off-line Project. * | |
5 | * Contributors are mentioned in the code where appropriate. * | |
6 | * * | |
7 | * Permission to use, copy, modify and distribute this software and its * | |
8 | * documentation strictly for non-commercial purposes is hereby granted * | |
9 | * without fee, provided that the above copyright notice appears in all * | |
10 | * copies and that both the copyright notice and this permission notice * | |
11 | * appear in the supporting documentation. The authors make no claims * | |
12 | * about the suitability of this software for any purpose. It is * | |
13 | * provided "as is" without express or implied warranty. * | |
14 | **************************************************************************/ | |
15 | ||
16 | /////////////////////////////////////////////////////////////////////////// | |
17 | // // | |
18 | // Basic Analysis Task // | |
19 | // // | |
20 | /////////////////////////////////////////////////////////////////////////// | |
21 | ||
22 | #include <TChain.h> | |
23 | #include <TH1D.h> | |
24 | #include <TH2D.h> | |
25 | #include "TVector2.h" | |
26 | ||
27 | ||
28 | #include <AliCFContainer.h> | |
29 | #include <AliInputEventHandler.h> | |
30 | #include <AliESDInputHandler.h> | |
31 | #include <AliAODInputHandler.h> | |
32 | #include <AliAnalysisManager.h> | |
33 | #include <AliVEvent.h> | |
34 | #include <AliTriggerAnalysis.h> | |
35 | ||
36 | ||
37 | #include <TGeoGlobalMagField.h> | |
38 | #include "TGeoManager.h" | |
39 | #include "AliGeomManager.h" | |
40 | #include <AliMagF.h> | |
41 | ||
42 | ||
43 | #include "AliDielectronTaku.h" | |
44 | #include "AliDielectronHistosTaku.h" | |
45 | #include "AliDielectronCF.h" | |
46 | #include "AliDielectronMC.h" | |
47 | #include "AliDielectronEventCuts.h" | |
48 | ||
49 | #include "AliAnalysisTaskMultiDielectronNewTaku.h" | |
50 | ||
51 | #include "AliESDEvent.h" | |
52 | #include "AliESDInputHandler.h" | |
53 | #include "AliESDv0.h" | |
54 | #include "AliESDtrack.h" | |
55 | #include "AliESDtrackCuts.h" | |
56 | #include "AliCentrality.h" | |
57 | #include "AliVVertex.h" | |
58 | #include "AliESDVZERO.h" | |
59 | #include "AliEMCALTrack.h" | |
60 | //#include "AliFlowEventSimple.h" | |
61 | //#include "AliFlowLYZEventPlane.h" | |
62 | ||
63 | ||
64 | ClassImp(AliAnalysisTaskMultiDielectronNewTaku) | |
65 | ||
66 | //_________________________________________________________________________________ | |
67 | AliAnalysisTaskMultiDielectronNewTaku::AliAnalysisTaskMultiDielectronNewTaku() : | |
68 | AliAnalysisTaskSE(), | |
69 | fListDielectron(), | |
70 | fListHistos(), | |
71 | fListTree(NULL), | |
72 | fListCF(), | |
73 | fTree(NULL), | |
74 | fSelectPhysics(kFALSE), | |
75 | fTriggerMask(AliVEvent::kMB), | |
76 | fTriggerOnV0AND(kFALSE), | |
77 | fRejectPileup(kFALSE), | |
78 | fTriggerAnalysis(0x0), | |
79 | fEventFilter(0x0), | |
80 | fCutsEvent(0x0), | |
81 | fCutsMother(0x0), | |
82 | fEventStat(0x0), | |
83 | fEvent(0x0), | |
84 | fdEdXvsPt(0x0), | |
85 | fdEdXnSigmaElecvsPt(0x0), | |
86 | fTOFbetavsPt(0x0), | |
87 | fTOFnSigmaElecvsPt(0x0), | |
88 | fTPCcrossedRowsvsPt(0x0), | |
89 | fTPCchi2vsPt(0x0), | |
90 | fNEvent(0), | |
91 | fkTriggerMask(0), | |
92 | fkTriggerCent(0), | |
93 | fkNCut(0), | |
94 | fkRunNumber(0), | |
95 | fkCentrality(0), | |
96 | fkXvPrim(0), | |
97 | fkYvPrim(0), | |
98 | fkZvPrim(0), | |
99 | fkXRes(0), | |
100 | fkYRes(0), | |
101 | fkZRes(0), | |
102 | fkNTrk(0), | |
103 | fkTracks(0), | |
104 | fkNacc(0), | |
105 | fkNaccTrcklts(0), | |
106 | fkNch(0), | |
107 | fkZDCN1E(0), | |
108 | fkZDCP1E(0), | |
109 | fkZDCN2E(0), | |
110 | fkZDCP2E(0), | |
111 | fkV0A(0), | |
112 | fkV0C(0), | |
113 | fkNPar(0), | |
114 | // fFlowEvent(0), | |
115 | // fLyzEp(0), | |
116 | fQsum(NULL), | |
117 | fQ2sum(0), | |
118 | fkTriggerInfo(0), | |
119 | fMag(0) | |
120 | { | |
121 | // | |
122 | // Constructor | |
123 | // | |
124 | ||
125 | ||
126 | } | |
127 | ||
128 | //_________________________________________________________________________________ | |
129 | AliAnalysisTaskMultiDielectronNewTaku::AliAnalysisTaskMultiDielectronNewTaku(const char *name, | |
130 | AliDielectronEventCuts* cutsEvent | |
131 | ) : | |
132 | AliAnalysisTaskSE(name), | |
133 | fListDielectron(), | |
134 | fListHistos(), | |
135 | fListTree(NULL), | |
136 | fListCF(), | |
137 | fTree(NULL), | |
138 | fSelectPhysics(kFALSE), | |
139 | fTriggerMask(AliVEvent::kMB), | |
140 | fTriggerOnV0AND(kFALSE), | |
141 | fRejectPileup(kFALSE), | |
142 | fTriggerAnalysis(0x0), | |
143 | fEventFilter(0x0), | |
144 | fCutsEvent(cutsEvent), | |
145 | fCutsMother(0x0), | |
146 | fEventStat(0x0), | |
147 | fEvent(0x0), | |
148 | fdEdXvsPt(0x0), | |
149 | fdEdXnSigmaElecvsPt(0x0), | |
150 | fTOFbetavsPt(0x0), | |
151 | fTOFnSigmaElecvsPt(0x0), | |
152 | fTPCcrossedRowsvsPt(0x0), | |
153 | fTPCchi2vsPt(0x0), | |
154 | fNEvent(0), | |
155 | fkTriggerMask(0), | |
156 | fkTriggerCent(0), | |
157 | fkNCut(0), | |
158 | fkRunNumber(0), | |
159 | fkCentrality(0), | |
160 | fkXvPrim(0), | |
161 | fkYvPrim(0), | |
162 | fkZvPrim(0), | |
163 | fkXRes(0), | |
164 | fkYRes(0), | |
165 | fkZRes(0), | |
166 | fkNTrk(0), | |
167 | fkTracks(0), | |
168 | fkNacc(0), | |
169 | fkNaccTrcklts(0), | |
170 | fkNch(0), | |
171 | fkZDCN1E(0), | |
172 | fkZDCP1E(0), | |
173 | fkZDCN2E(0), | |
174 | fkZDCP2E(0), | |
175 | fkV0A(0), | |
176 | fkV0C(0), | |
177 | fkNPar(0), | |
178 | // fFlowEvent(0), | |
179 | // fLyzEp(0), | |
180 | fQsum(NULL), | |
181 | fQ2sum(0), | |
182 | fkTriggerInfo(0), | |
183 | fMag(0) | |
184 | { | |
185 | // | |
186 | // Constructor | |
187 | // | |
188 | DefineInput(0,TChain::Class()); | |
189 | DefineOutput(1, TList::Class()); | |
190 | //DefineOutput(1, TTree::Class()); | |
191 | DefineOutput(2, TList::Class()); | |
192 | DefineOutput(3, TH1D::Class()); | |
193 | DefineOutput(4, TTree::Class()); | |
194 | ||
195 | fName = name; | |
196 | // Constructor. | |
197 | fQsum = new TVector2(); // flow vector sum | |
198 | fQ2sum = 0; | |
199 | ||
200 | ||
201 | cout<<" ************** AliAnalysisTaskMultiDielectron::AliAnalysisTaskMultiDielectron ***********"<<endl; | |
202 | } | |
203 | ||
204 | ||
205 | //_________________________________________________________________________________ | |
206 | void AliAnalysisTaskMultiDielectronNewTaku::UserCreateOutputObjects() | |
207 | { | |
208 | cout<<" ************** AliAnalysisTaskMultiDielectron::Start ***********"<<endl; | |
209 | fListHistos.SetName("Dielectron_Histos_Multi"); | |
210 | fListTree.SetName("Dielectron_Trees_Multi"); | |
211 | fListCF.SetName("Dielectron_CF_Multi"); | |
212 | fListDielectron.SetOwner(); | |
213 | fListHistos.SetOwner(); | |
214 | fListTree.SetOwner(); | |
215 | fListCF.SetOwner(); | |
216 | ||
217 | // | |
218 | // Add all histogram manager histogram lists to the output TList | |
219 | // | |
220 | ||
221 | if (!fListHistos.IsEmpty()||!fListCF.IsEmpty()) return; //already initialised | |
222 | ||
223 | AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager(); | |
224 | Bool_t isESD=man->GetInputEventHandler()->IsA()==AliESDInputHandler::Class(); | |
225 | // Bool_t isAOD=man->GetInputEventHandler()->IsA()==AliAODInputHandler::Class(); | |
226 | ||
227 | TIter nextDie(&fListDielectron); | |
228 | AliDielectronTaku *die=0; | |
229 | while ( (die=static_cast<AliDielectronTaku*>(nextDie())) ){ | |
230 | die->Init(); | |
231 | if (die->GetHistogramList()) fListHistos.Add(const_cast<THashList*>(die->GetHistogramList())); | |
232 | if (die->GetCFManagerPair()) fListCF.Add(const_cast<AliCFContainer*>(die->GetCFManagerPair()->GetContainer())); | |
233 | //if (die->GetTreeList()) fListTree.Add(const_cast<THashList*>(die->GetTreeList())); | |
234 | ///if (die->GetTreeList()) fTree = (TTree*)(die->GetTreeManager()->GetSingleTree()); | |
235 | } | |
236 | ||
237 | Int_t cuts=fListDielectron.GetEntries(); | |
238 | Int_t nbins=kNbinsEvent+2*cuts; | |
239 | if (!fEventStat){ | |
240 | ||
241 | fEventStat=new TH1D(Form("hEventStat_%s",fName.Data()),"Event statistics",nbins,0,nbins); | |
242 | fEventStat->GetXaxis()->SetBinLabel(1,"Before Phys. Sel."); | |
243 | fEventStat->GetXaxis()->SetBinLabel(2,"After Phys. Sel."); | |
244 | ||
245 | //default names | |
246 | fEventStat->GetXaxis()->SetBinLabel(3,"Bin3 not used"); | |
247 | fEventStat->GetXaxis()->SetBinLabel(4,"Bin4 not used"); | |
248 | fEventStat->GetXaxis()->SetBinLabel(5,"Bin5 not used"); | |
249 | ||
250 | if (fTriggerOnV0AND&&isESD) fEventStat->GetXaxis()->SetBinLabel(3,"V0and triggers"); | |
251 | if (fEventFilter) fEventStat->GetXaxis()->SetBinLabel(4,"After Event Filter"); | |
252 | if (fRejectPileup) fEventStat->GetXaxis()->SetBinLabel(5,"After Pileup rejection"); | |
253 | ||
254 | for (Int_t i=0; i<cuts; ++i){ | |
255 | fEventStat->GetXaxis()->SetBinLabel((kNbinsEvent+1)+2*i,Form("#splitline{1 candidate}{%s}",fListDielectron.At(i)->GetName())); | |
256 | fEventStat->GetXaxis()->SetBinLabel((kNbinsEvent+2)+2*i,Form("#splitline{With >1 candidate}{%s}",fListDielectron.At(i)->GetName())); | |
257 | } | |
258 | } | |
259 | ||
260 | if (!fTriggerAnalysis) fTriggerAnalysis=new AliTriggerAnalysis; | |
261 | fTriggerAnalysis->EnableHistograms(); | |
262 | fTriggerAnalysis->SetAnalyzeMC(AliDielectronMC::Instance()->HasMC()); | |
263 | ||
264 | ||
265 | //// this is just test | |
266 | //// I would like to see dE/dx, pT, and so on... | |
267 | ||
268 | TList *tQAElectron = new TList(); | |
269 | tQAElectron->SetName("QAElectron"); | |
270 | tQAElectron->SetOwner(); | |
271 | ||
272 | ||
273 | int nbinx=400; | |
274 | float max_x=20; | |
275 | float min_x=0.2; | |
276 | float binw = (TMath::Log(max_x)-TMath::Log(min_x))/nbinx; | |
277 | double xbin[401]; | |
278 | for(int ii=0;ii<nbinx+1;ii++){ | |
279 | xbin[ii] = TMath::Exp(TMath::Log(min_x) + 0.5*binw+binw*ii); | |
280 | } | |
281 | ||
282 | ||
283 | //// my histo | |
284 | fEvent = new TH1D("Event","Number of Events", 60,0,60); | |
285 | tQAElectron->Add(fEvent); | |
286 | //fdEdXvsPt = new TH2D("dEdXvsPt","dE/dX vs. PT of TPC", 400,0, 20, 2000,0,200); | |
287 | fdEdXvsPt = new TH2D("dEdXvsPt","dE/dX vs. PT of TPC", nbinx, xbin, 2000,0,200); | |
288 | tQAElectron->Add(fdEdXvsPt); | |
289 | fdEdXnSigmaElecvsPt = new TH2D("fdEdXnSigmaElecvsPt"," dE/dX normalized to electron vs. pT of TPC", | |
290 | // 400, 0, 20, 2000, -10, 10); | |
291 | nbinx, xbin, 2000, -10, 10); | |
292 | tQAElectron->Add(fdEdXnSigmaElecvsPt); | |
293 | fTOFbetavsPt = new TH2D("fTOFbetavsPt","TOF beta vs. p", 400, 0, 20, 1200, 0, 1.2); | |
294 | tQAElectron->Add(fTOFbetavsPt); | |
295 | fTOFnSigmaElecvsPt = new TH2D("fTOFnSigmaElecvsPt","TOF nsigma for electron", 400, 0, 20, 2000, -10, 10); | |
296 | tQAElectron->Add(fTOFnSigmaElecvsPt); | |
297 | ||
da9ac610 | 298 | fTPCcrossedRowsvsPt = new TH2D("fTTPCcrossedRowsvsPt","TPC crossed rows", 400, 0, 20, 160,0,160); |
06f630bb | 299 | tQAElectron->Add(fTPCcrossedRowsvsPt); |
da9ac610 | 300 | fTPCchi2vsPt = new TH2D("fTTPCchi2RowsvsPt","TPC chi2", 400, 0, 20, 1000,0,200); |
06f630bb | 301 | tQAElectron->Add(fTPCchi2vsPt); |
302 | ||
303 | ||
304 | fListHistos.Add(tQAElectron); | |
305 | ||
306 | PostData(1, &fListHistos); | |
307 | PostData(2, &fListCF); | |
308 | PostData(3, fEventStat); | |
309 | //PostData(4, &fListTree); | |
310 | ||
311 | //PostData(1,&fListTree); | |
312 | fTree = new TTree(Form("tree_%s",fName.Data()),"single"); | |
313 | SetBranches(fTree); | |
314 | ||
315 | PostData(4,fTree); | |
316 | ||
317 | ||
318 | ////// basic cuts | |
319 | fCutsMother = new AliESDtrackCuts; | |
320 | fCutsMother->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kFirst); | |
321 | fCutsMother->SetRequireTPCRefit(kTRUE); | |
322 | fCutsMother->SetRequireITSRefit(kTRUE); | |
323 | fCutsMother->SetMaxDCAToVertexZ(3.0); | |
324 | fCutsMother->SetMaxDCAToVertexXY(1.0); | |
325 | fCutsMother->SetEtaRange( -0.9 , 0.9 ); | |
326 | fCutsMother->SetAcceptKinkDaughters(kFALSE); | |
327 | fCutsMother->SetPtRange(0.2,10); | |
328 | fCutsMother->SetMinNClustersTPC(70); | |
329 | fCutsMother->SetMaxChi2PerClusterTPC(4); | |
330 | ||
331 | ||
332 | //lee yang zeros event plane | |
333 | //fLyzEp = new AliFlowLYZEventPlane() ; | |
334 | //fLyzEp-> Init(); | |
335 | ||
336 | fkTriggerInfo = new TObjArray(100); | |
337 | ||
338 | fNEvent = 0; | |
339 | fkNPar=0; | |
340 | cout<<" ************** AliAnalysisTaskMultiDielectron::UserCreateOutputObjects End ***********"<<endl; | |
341 | } | |
342 | ||
343 | //_________________________________________________________________________________ | |
344 | void AliAnalysisTaskMultiDielectronNewTaku::UserExec(Option_t *) | |
345 | { | |
346 | // | |
347 | // Main loop. Called for every event | |
348 | // | |
349 | if(fNEvent%100==0){ | |
350 | cout<<"Processing event "<<fNEvent<<endl; | |
351 | } | |
352 | fNEvent++; | |
353 | ||
354 | //cout<<"Start UserExec"<<endl; | |
355 | ||
356 | if (fListHistos.IsEmpty()&&fListCF.IsEmpty()) return; | |
357 | ||
358 | AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager(); | |
359 | Bool_t isESD=man->GetInputEventHandler()->IsA()==AliESDInputHandler::Class(); | |
360 | Bool_t isAOD=man->GetInputEventHandler()->IsA()==AliAODInputHandler::Class(); | |
361 | ||
362 | AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler()); | |
363 | if (!inputHandler) return; | |
364 | ||
365 | if ( inputHandler->GetPIDResponse() ){ | |
366 | AliDielectronVarManager::SetPIDResponse( inputHandler->GetPIDResponse() ); | |
367 | } else { | |
368 | //load esd pid bethe bloch parameters depending on the existance of the MC handler | |
369 | // yes: MC parameters | |
370 | // no: data parameters | |
371 | //ESD case | |
372 | if (isESD){ | |
373 | if (!AliDielectronVarManager::GetESDpid()){ | |
374 | if (AliDielectronMC::Instance()->HasMC()) { | |
375 | AliDielectronVarManager::InitESDpid(); | |
376 | } else { | |
377 | AliDielectronVarManager::InitESDpid(1); | |
378 | /* | |
379 | Double_t fAlephParam[5]={2.11543/50, | |
380 | 20.3394, | |
381 | 5.0411e-11, | |
382 | 2.15543, | |
383 | 2.88663}; | |
384 | */ | |
385 | Double_t fAlephParam[5]={2.11543/122, | |
386 | 42.3394, | |
387 | 2.0411e-22, | |
388 | 2.25543, | |
389 | 6.89 | |
390 | }; | |
391 | ||
392 | ||
393 | ||
394 | ||
395 | ||
396 | AliESDpid *fESDpid = new AliESDpid(); | |
397 | fESDpid->GetTPCResponse().SetBetheBlochParameters(fAlephParam[0], | |
398 | fAlephParam[1], | |
399 | fAlephParam[2], | |
400 | fAlephParam[3], | |
401 | fAlephParam[4]); | |
402 | AliDielectronVarManager::SetESDpid(fESDpid); | |
403 | } | |
404 | } | |
405 | } | |
406 | //AOD case | |
407 | if (isAOD){ | |
408 | if (!AliDielectronVarManager::GetAODpidUtil()){ | |
409 | if (AliDielectronMC::Instance()->HasMC()) { | |
410 | AliDielectronVarManager::InitAODpidUtil(); | |
411 | } else { | |
412 | AliDielectronVarManager::InitAODpidUtil(1); | |
413 | } | |
414 | } | |
415 | } | |
416 | } | |
417 | ||
418 | ||
419 | ||
420 | /* | |
421 | AliESDInputHandler *esdHandler=0x0; | |
422 | if ( (esdHandler=dynamic_cast<AliESDInputHandler*>(man->GetInputEventHandler())) && esdHandler->GetESDpid() ){ | |
423 | AliDielectronVarManager::SetESDpid(esdHandler->GetESDpid()); | |
424 | } else { | |
425 | //load esd pid bethe bloch parameters depending on the existance of the MC handler | |
426 | // yes: MC parameters | |
427 | // no: data parameters | |
428 | if (!AliDielectronVarManager::GetESDpid()){ | |
429 | if (AliDielectronMC::Instance()->HasMC()) { | |
430 | AliDielectronVarManager::InitESDpid(); | |
431 | } else { | |
432 | AliDielectronVarManager::InitESDpid(1); | |
433 | } | |
434 | } | |
435 | } | |
436 | */ | |
437 | ||
438 | ////////////////////////////////////////// | |
439 | ///////////////////////////////////////// | |
440 | // just copy from hor | |
441 | AliESDEvent *fESD = dynamic_cast<AliESDEvent*>(InputEvent()); | |
442 | ||
443 | AliESDRun *fRun = (AliESDRun*)fESD->GetESDRun(); | |
444 | fMag = fRun->GetMagneticField(); | |
445 | if(fRun){ | |
446 | for(int itr=0; itr<AliESDRun::kNTriggerClasses;itr++){ | |
447 | fkTrigName = new TObjString(); | |
448 | fkTrigName->SetString(fRun->GetTriggerClass(itr)); | |
449 | //cout<<itr<<" "<<triggername[itr]<<endl; | |
450 | fkTriggerInfo->AddAt(fkTrigName, itr); | |
451 | fkTrigName->Clear(); | |
452 | } | |
453 | } | |
454 | ||
455 | ||
456 | ||
457 | //just dump the fired trigger class | |
458 | if(fESD){ | |
459 | AliESDHeader* head = (AliESDHeader*)fESD->GetHeader(); | |
460 | //cout<<" trigger "<<head->GetFiredTriggerInputs()<<" : "<<head->GetTriggerMask()<<" : "<<fESD->GetFiredTriggerClasses()<<" "<<endl; | |
461 | fkTriggerMask = head->GetTriggerMask(); | |
462 | ||
463 | for(int itr=0; itr<AliESDRun::kNTriggerClasses;itr++){ | |
464 | if( (head->GetTriggerMask() >> itr) & 0x1 == 1 ){ | |
465 | fEvent->Fill(10+itr); | |
466 | } | |
467 | } | |
468 | } | |
469 | ||
470 | if(fESD) { | |
471 | fEvent->Fill(0); | |
472 | Bool_t isEvT = kFALSE; | |
473 | /* | |
474 | isEvT = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() | |
475 | & AliVEvent::kMB); | |
476 | */ | |
477 | isEvT = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() | |
478 | //& AliVEvent::kSemiCentral); | |
479 | & AliVEvent::kCentral); | |
480 | ||
481 | //AliTriggerAnalysis *fTrigAna = new AliTriggerAnalysis(); | |
482 | if (isEvT){ | |
483 | fEvent->Fill(1); | |
484 | if(fCutsEvent->IsSelected(fESD)){ | |
485 | fEvent->Fill(2); | |
486 | const AliESDVertex *vertex = fESD->GetPrimaryVertex(); | |
487 | if((vertex->GetNContributors()>2)&&(TMath::Abs(vertex->GetZ())<7)) { | |
488 | fEvent->Fill(3); | |
489 | } | |
490 | } | |
491 | } | |
492 | ||
493 | ////////////////////////////////////////// | |
494 | //// fill the number of fired triggers for each trigger types | |
495 | /* | |
496 | isEvT = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()); | |
497 | //AliTriggerAnalysis *fTrigAna = new AliTriggerAnalysis(); | |
498 | if (isEvT){ | |
499 | if(isEvT & AliVEvent::kMB) fEvent->Fill(10); | |
500 | if(isEvT & AliVEvent::kINT7) fEvent->Fill(11); | |
501 | if(isEvT & AliVEvent::kMUON) fEvent->Fill(12); | |
502 | if(isEvT & AliVEvent::kHighMult) fEvent->Fill(13); | |
503 | if(isEvT & AliVEvent::kEMC1) fEvent->Fill(14); | |
504 | if(isEvT & AliVEvent::kCINT5) fEvent->Fill(15); | |
505 | if(isEvT & AliVEvent::kMUSPB) fEvent->Fill(16); | |
506 | if(isEvT & AliVEvent::kMUSHPB) fEvent->Fill(17); | |
507 | if(isEvT & AliVEvent::kMuonLikePB) fEvent->Fill(18); | |
508 | if(isEvT & AliVEvent::kMuonUnlikePB) fEvent->Fill(19); | |
509 | if(isEvT & AliVEvent::kEMC7) fEvent->Fill(20); | |
510 | if(isEvT & AliVEvent::kMUS7) fEvent->Fill(21); | |
511 | if(isEvT & AliVEvent::kPHI1) fEvent->Fill(22); | |
512 | if(isEvT & AliVEvent::kPHOSPb) fEvent->Fill(23); | |
513 | if(isEvT & AliVEvent::kEMCEJE) fEvent->Fill(24); | |
514 | if(isEvT & AliVEvent::kEMCEGA) fEvent->Fill(25); | |
515 | if(isEvT & AliVEvent::kCentral) fEvent->Fill(26); | |
516 | if(isEvT & AliVEvent::kSemiCentral) fEvent->Fill(27); | |
517 | if(isEvT & AliVEvent::kDG5) fEvent->Fill(28); | |
518 | if(isEvT & AliVEvent::kZED) fEvent->Fill(29); | |
519 | if(isEvT & AliVEvent::kAny) fEvent->Fill(30); | |
520 | } | |
521 | */ | |
522 | } | |
523 | ////////////////////////////////////////// | |
524 | ////////////////////////////////////////// | |
525 | ||
526 | ||
527 | // Was event selected ? | |
528 | UInt_t isSelected = AliVEvent::kAny; | |
529 | if( fSelectPhysics && inputHandler && inputHandler->GetEventSelection() ) { | |
530 | isSelected = inputHandler->IsEventSelected(); | |
531 | isSelected&=fTriggerMask; | |
532 | } | |
533 | ||
534 | //Before physics selection | |
535 | fEventStat->Fill(kAllEvents); | |
536 | if (isSelected==0) { | |
537 | PostData(3,fEventStat); | |
538 | return; | |
539 | } | |
540 | //after physics selection | |
541 | fEventStat->Fill(kSelectedEvents); | |
542 | ||
543 | //V0and | |
544 | if (fTriggerOnV0AND&&isESD){ | |
545 | //if (!fTriggerAnalysis->IsOfflineTriggerFired(static_cast<AliESDEvent*>(InputEvent()), AliTriggerAnalysis::kV0AND)) return; | |
546 | } | |
547 | fEventStat->Fill(kV0andEvents); | |
548 | ||
549 | //event filter | |
550 | if (fEventFilter) { | |
551 | //if (!fEventFilter->IsSelected(InputEvent())) return; | |
552 | } | |
553 | fEventStat->Fill(kFilteredEvents); | |
554 | ||
555 | //pileup | |
556 | if (fRejectPileup){ | |
557 | if (InputEvent()->IsPileupFromSPD(3,0.8,3.,2.,5.)) return; | |
558 | } | |
559 | fEventStat->Fill(kPileupEvents); | |
560 | ||
561 | ||
562 | Bool_t isEvT1 = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() | |
563 | & AliVEvent::kCentral); | |
564 | ||
565 | Bool_t isEvT2 = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() | |
566 | & AliVEvent::kSemiCentral); | |
567 | ||
568 | ||
569 | Bool_t isEvT3 = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() | |
570 | & AliVEvent::kMB); | |
571 | ||
572 | fkTriggerCent = 0; | |
573 | if(!isEvT1 && !isEvT2 && !isEvT3){ | |
574 | return ; | |
575 | }else{ | |
576 | if(isEvT1){ | |
577 | fkTriggerCent += 100; | |
578 | } | |
579 | if(isEvT2){ | |
580 | fkTriggerCent += 10; | |
581 | } | |
582 | if(isEvT3){ | |
583 | fkTriggerCent += 1; | |
584 | } | |
585 | } | |
586 | ||
587 | //bz for AliKF | |
588 | Double_t bz = InputEvent()->GetMagneticField(); | |
589 | AliKFParticle::SetField( bz ); | |
590 | ||
591 | AliDielectronPID::SetCorrVal((Double_t)InputEvent()->GetRunNumber()); | |
592 | ||
593 | FillEvent(InputEvent()); | |
594 | fkNPar = 0; | |
595 | ||
596 | //Process event in all AliDielectron instances | |
597 | TIter nextDie(&fListDielectron); | |
598 | AliDielectronTaku *die=0; | |
599 | Int_t idie=0; | |
600 | while ( (die=static_cast<AliDielectronTaku*>(nextDie())) ){ | |
601 | die->Process(InputEvent()); | |
602 | if (die->HasCandidates()){ | |
603 | Int_t ncandidates=die->GetPairArray(1)->GetEntriesFast(); | |
604 | if (ncandidates==1) fEventStat->Fill((kNbinsEvent)+2*idie); | |
605 | else if (ncandidates>1) fEventStat->Fill((kNbinsEvent+1)+2*idie); | |
606 | } | |
607 | AliDielectronVarManager::Fill(InputEvent(), fgValues); | |
608 | //Fill track information, separately for the track array candidates | |
609 | for (Int_t ii=0; ii<2; ++ii){ | |
610 | TObjArray *obj = (TObjArray*)die->GetTrackArray(ii); | |
611 | Int_t ntracks=obj->GetEntriesFast(); | |
612 | for (Int_t itrack=0; itrack<ntracks; ++itrack){ | |
613 | //////////////////////////////////////////////////////////////////// | |
614 | AliDielectronVarManager::Fill(obj->UncheckedAt(itrack), fgValues); | |
615 | //////////////////////////////////////////////////////////////////// | |
616 | AliVTrack *trk = static_cast<AliVTrack*>(obj->UncheckedAt(itrack)); | |
617 | double par[3] ; | |
618 | MomentumEnergyMatch(trk, par); | |
619 | fgValues[AliDielectronVarManager::kE] = par[0]; | |
620 | fgValues[AliDielectronVarManager::kDeltaEta] = par[1]; | |
621 | fgValues[AliDielectronVarManager::kDeltaPhi] = par[2]; | |
622 | /* | |
623 | if(par[0]<0){ | |
624 | continue; | |
625 | } | |
626 | */ | |
627 | ||
628 | AliESDtrack *esdtrack = static_cast<AliESDtrack*>(obj->UncheckedAt(itrack)); | |
629 | Double_t dca[2]={-999.,-999.}; | |
630 | Double_t cov[3]={-999.,-999.,-999.}; | |
631 | Double_t kBeampiperadius=3.; | |
632 | esdtrack->PropagateToDCA(InputEvent()->GetPrimaryVertex(), | |
633 | InputEvent()->GetMagneticField(), kBeampiperadius, dca, cov); | |
634 | fgValues[AliDielectronVarManager::kLegDist] = dca[1]; | |
635 | fgValues[AliDielectronVarManager::kLegDistXY] = dca[0]; | |
636 | fgValues[AliDielectronVarManager::kNclsTPC] = esdtrack->GetTPCCrossedRows(); | |
637 | ||
638 | /* | |
639 | ///// KF analysis | |
640 | AliKFParticle kfTrack = AliKFParticle(*trk, 11); //assuming electron //charge is from trk | |
641 | /// i would like to store | |
642 | /// X, Y, Z, Px, Py, Pz, S(decay length/mom), Chi2, NDF | |
643 | if(kfTrack.GetNDF()!=0) fgValues[AliDielectronVarManager::kChi2NDF] = kfTrack.GetChi2()/kfTrack.GetNDF(); | |
644 | fgValues[AliDielectronVarManager::kDecayLength] = kfTrack.GetS(); | |
645 | fgValues[AliDielectronVarManager::kR] = kfTrack.GetR(); | |
646 | fgValues[AliDielectronVarManager::kThetaHE] = kfTrack.GetX(); | |
647 | fgValues[AliDielectronVarManager::kPhiHE] = kfTrack.GetY(); | |
648 | fgValues[AliDielectronVarManager::kThetaCS] = kfTrack.GetZ(); | |
649 | fgValues[AliDielectronVarManager::kPhiCS] = kfTrack.GetPhi(); | |
650 | fgValues[AliDielectronVarManager::kITSsignalSSD1] = kfTrack.GetPx(); | |
651 | fgValues[AliDielectronVarManager::kITSsignalSSD2] = kfTrack.GetPy(); | |
652 | fgValues[AliDielectronVarManager::kITSsignalSDD1] = kfTrack.GetPz(); | |
653 | fgValues[AliDielectronVarManager::kITSsignalSDD2] = kfTrack.GetP(); | |
654 | */ | |
655 | //////////////////////////////////////////////////////////////////// | |
656 | for(int ich=0;ich<AliDielectronVarManager::kNMaxValues; ich++){ | |
657 | fgData[ich][fkNPar] = fgValues[ich]; | |
658 | } | |
659 | fkNPar++; | |
660 | } | |
661 | } | |
662 | fkNCut = idie; | |
663 | ++idie; | |
664 | fTree->Fill(); | |
665 | } | |
666 | ||
667 | ////////////////////////////////////////////////////////////////////////// | |
668 | ///////////////////////////////////////////////////////////////////////// | |
669 | ////////////////////////////////////////////////////////////////////////// | |
670 | ||
671 | //// fillback to single particle without trackcuts | |
672 | for (Int_t iTracks = 0; iTracks < fESD->GetNumberOfTracks(); iTracks++) { | |
673 | AliESDtrack* track = fESD->GetTrack(iTracks); | |
674 | if (!track) { | |
675 | Printf("ERROR: Could not receive track %d", iTracks); | |
676 | continue; | |
677 | } | |
678 | if(!fCutsMother->AcceptTrack(track)) continue; | |
679 | fdEdXvsPt->Fill(track->GetTPCmomentum(), track->GetTPCsignal()); | |
680 | fdEdXnSigmaElecvsPt->Fill(track->GetTPCmomentum(), | |
681 | AliDielectronVarManager::GetESDpid()->NumberOfSigmasTPC(track, | |
682 | AliPID::kElectron) | |
683 | -AliDielectronPID::GetCorrVal()); | |
684 | ||
685 | fTPCcrossedRowsvsPt->Fill(track->GetTPCmomentum(), track->GetTPCCrossedRows()); | |
686 | fTPCchi2vsPt->Fill(track->GetTPCmomentum(), track->GetTPCchi2()); | |
687 | ||
688 | /// for beta caliculaton | |
689 | Double_t l = track->GetIntegratedLength(); // cm | |
690 | Double_t t = track->GetTOFsignal(); | |
691 | Double_t t0 = AliDielectronVarManager::GetESDpid()->GetTOFResponse().GetTimeZero(); // ps | |
692 | Double_t beta = 0; | |
693 | if( (l < 360. || l > 800.) || (t <= 0.) || (t0 >999990.0) ) { | |
694 | beta; | |
695 | } | |
696 | else { | |
697 | t -= t0; // subtract the T0 | |
698 | l *= 0.01; // cm ->m | |
699 | t *= 1e-12; //ps -> s | |
700 | ||
701 | Double_t v = l / t; | |
702 | beta = v / TMath::C(); | |
703 | } | |
704 | ||
705 | fTOFbetavsPt->Fill(track->GetTPCmomentum(), beta); | |
706 | //// electron cuts ////// | |
707 | if(fabs(AliDielectronVarManager::GetESDpid()->NumberOfSigmasTPC(track,AliPID::kElectron) | |
708 | -AliDielectronPID::GetCorrVal())<3){ | |
709 | fTOFnSigmaElecvsPt->Fill(track->GetTPCmomentum(), | |
710 | AliDielectronVarManager::GetESDpid()->NumberOfSigmasTOF(track, | |
711 | AliPID::kElectron)); | |
712 | } | |
713 | } | |
714 | ||
715 | ||
716 | ||
717 | //cout<<idie<<endl; | |
718 | ||
719 | PostData(1, &fListHistos); | |
720 | PostData(2, &fListCF); | |
721 | PostData(3,fEventStat); | |
722 | //PostData(4, &fListTree); | |
723 | //PostData(1, &fListTree); | |
724 | PostData(4, fTree); | |
725 | } | |
726 | ||
727 | //_________________________________________________________________________________ | |
728 | void AliAnalysisTaskMultiDielectronNewTaku::FinishTaskOutput() | |
729 | { | |
730 | // | |
731 | // Write debug tree | |
732 | // | |
733 | cout<<" ******* AliAnalysisTaskMultiDielectronNewTaku::FinishTaskOutput() *****"<<endl; | |
734 | TIter nextDie(&fListDielectron); | |
735 | AliDielectronTaku *die=0; | |
736 | while ( (die=static_cast<AliDielectronTaku*>(nextDie())) ){ | |
737 | die->SaveDebugTree(); | |
738 | } | |
739 | } | |
740 | ||
741 | //_________________________________________________________________________________ | |
742 | void AliAnalysisTaskMultiDielectronNewTaku::MomentumEnergyMatch(const AliVParticle *track, double *par){ | |
743 | ||
744 | Float_t clsPos[3]; | |
745 | Double_t trkPos[3]; | |
746 | Double_t matchclsE = -9999.9; | |
747 | ||
748 | const AliESDtrack *esdtrack = dynamic_cast<const AliESDtrack *>(track); | |
749 | AliESDEvent *evt = (AliESDEvent*)esdtrack->GetESDEvent(); | |
750 | Double_t magF = evt->GetMagneticField(); | |
751 | Double_t magSign = 1.0; | |
752 | if(magF<0)magSign = -1.0; | |
753 | if (!TGeoGlobalMagField::Instance()->GetField()) { | |
754 | printf("Loading field map...\n"); | |
755 | //AliMagF* field = new AliMagF("Maps","Maps", 1., 1., AliMagF::k5kG); | |
756 | AliMagF* field = new AliMagF("Maps","Maps", magSign, magSign, AliMagF::k5kG); // for 10d | |
757 | TGeoGlobalMagField::Instance()->SetField(field); | |
758 | } | |
759 | ||
760 | AliEMCALTrack *emctrack = new AliEMCALTrack(*esdtrack); | |
761 | Double_t fieldB[3]; | |
762 | emctrack->GetBxByBz(fieldB); | |
763 | //printf("%g %g %g \n", fieldB[0], fieldB[1], fieldB[2]); | |
764 | double min_r=99999.0; | |
765 | double min_dphi=-9999.0; | |
766 | double min_deta=-9999.0; | |
767 | ||
768 | for(Int_t icl=0; icl<evt->GetNumberOfCaloClusters(); icl++){ | |
769 | AliVCluster *cluster = (AliVCluster*) evt->GetCaloCluster(icl); | |
770 | if(!cluster->IsEMCAL()) continue; | |
771 | cluster->GetPosition(clsPos); | |
772 | if(!emctrack->PropagateToGlobal(clsPos[0],clsPos[1],clsPos[2],0.,0.) ) continue; | |
773 | emctrack->GetXYZ(trkPos); | |
774 | TVector3 clsPosVec(clsPos[0],clsPos[1],clsPos[2]); | |
775 | TVector3 trkPosVec(trkPos[0],trkPos[1],trkPos[2]); | |
776 | Double_t delEmcphi = clsPosVec.Phi()-trkPosVec.Phi(); // track cluster matching | |
777 | Double_t delEmceta = clsPosVec.Eta()-trkPosVec.Eta(); // track cluster matching | |
778 | double rmatch = sqrt(pow(delEmcphi,2)+pow(delEmceta,2)); | |
779 | /* | |
780 | if(rmatch<min_r){ | |
781 | min_r = rmatch; | |
782 | min_dphi = delEmcphi; | |
783 | min_deta = delEmceta; | |
784 | matchclsE = cluster->E(); | |
785 | } | |
786 | */ | |
787 | if(rmatch<0.02 && rmatch<min_r){ | |
788 | min_r = rmatch; | |
789 | min_dphi = delEmcphi; | |
790 | min_deta = delEmceta; | |
791 | matchclsE = cluster->E(); | |
792 | } | |
793 | } | |
794 | delete emctrack; | |
795 | ||
796 | par[0] = matchclsE; | |
797 | par[1] = min_dphi; | |
798 | par[2] = min_deta; | |
799 | ||
800 | } | |
801 | ||
802 | ||
803 | //_________________________________________________________________________________ | |
804 | void AliAnalysisTaskMultiDielectronNewTaku::FillEvent(AliVEvent * const ev){ | |
805 | ||
806 | //AliKFVertex *fgKFVertex = new fgKFVertex(); | |
807 | //if (ev && ev->GetPrimaryVertex()) fgKFVertex=new AliKFVertex(*ev->GetPrimaryVertex()); | |
808 | ||
809 | if(ev){ | |
810 | fkRunNumber = ev->GetRunNumber(); | |
811 | fkXvPrim = ev->GetPrimaryVertex()->GetX(); | |
812 | fkYvPrim = ev->GetPrimaryVertex()->GetY(); | |
813 | fkZvPrim = ev->GetPrimaryVertex()->GetZ(); | |
814 | fkNTrk = ev->GetNumberOfTracks(); | |
815 | fkNacc = AliDielectronHelper::GetNacc(ev); | |
816 | fkNaccTrcklts = AliDielectronHelper::GetNaccTrcklts(ev); | |
817 | ||
818 | fkZDCN1E = ev->GetZDCN1Energy(); | |
819 | fkZDCP1E = ev->GetZDCP1Energy(); | |
820 | fkZDCN2E = ev->GetZDCN2Energy(); | |
821 | fkZDCP2E = ev->GetZDCP2Energy(); | |
822 | } | |
823 | AliESDEvent *fESD = dynamic_cast<AliESDEvent*>(ev); | |
824 | ||
825 | fkCentrality=-1; | |
826 | AliCentrality *esdCentrality = const_cast<AliESDEvent*>(fESD)->GetCentrality(); | |
827 | if (esdCentrality) fkCentrality = esdCentrality->GetCentralityPercentile("V0M"); | |
828 | ||
829 | if(fESD->GetPrimaryVertex()){ | |
830 | fkXRes = fESD->GetPrimaryVertex()->GetXRes(); | |
831 | fkYRes = fESD->GetPrimaryVertex()->GetYRes(); | |
832 | fkZRes = fESD->GetPrimaryVertex()->GetZRes(); | |
833 | } | |
834 | ||
835 | if(fESD->GetVZEROData()){ | |
836 | fkV0A=0; | |
837 | fkV0C=0; | |
838 | for(int ich=0;ich<32;ich++){ | |
839 | fkV0A += fESD->GetVZEROData()->GetMultiplicityV0A(ich); | |
840 | fkV0C += fESD->GetVZEROData()->GetMultiplicityV0C(ich); | |
841 | } | |
842 | } | |
843 | ||
844 | /////////////////////////////////////////////////////////////////////// | |
845 | /////////////////////////////////////////////////////////////////////// | |
846 | /////////////// get event plane /////////////////////////////////////// | |
847 | /////////////////////////////////////////////////////////////////////// | |
848 | AliEventplane *fEventPlane = (AliEventplane*)fESD->GetEventplane(); | |
849 | if (fEventPlane) | |
850 | fkRP = fEventPlane->GetEventplane("V0", fESD,2); | |
851 | ||
852 | /* | |
853 | fkRP=-999; fkRPQx=-999; fkRPQy=-999; | |
854 | fkRPsub1=-999; fkRPsub1Qx=-999; fkRPsub1Qy=-999; | |
855 | fkRPsub2=-999; fkRPsub2Qx=-999; fkRPsub2Qy=-999; | |
856 | ||
857 | if(fEventPlane){ | |
858 | ||
859 | fkRP = fEventPlane->GetEventplane("Q"); | |
860 | if(fEventPlane->GetQVector()){ | |
861 | fkRPQx = fEventPlane->GetQVector()->X(); | |
862 | fkRPQy = fEventPlane->GetQVector()->Y(); | |
863 | } | |
864 | if(fEventPlane->GetQsub1()){ | |
865 | fkRPsub1 = fEventPlane->GetQsub1()->Phi()/2; | |
866 | fkRPsub1Qx = fEventPlane->GetQsub1()->X(); | |
867 | fkRPsub1Qy = fEventPlane->GetQsub1()->Y(); | |
868 | } | |
869 | if(fEventPlane->GetQsub2()){ | |
870 | fkRPsub2 = fEventPlane->GetQsub2()->Phi()/2; | |
871 | fkRPsub2Qx = fEventPlane->GetQsub2()->X(); | |
872 | fkRPsub2Qy = fEventPlane->GetQsub2()->Y(); | |
873 | } | |
874 | ||
875 | fkQsubRes = fEventPlane->GetQsubRes(); | |
876 | cout<<fkRP<<" "<<fkRPQx<<" "<<fkRPQy<<" "<<fkRPsub1<<" "<<fkRPsub1Qx<<" "<<fkRPsub1Qy<<" " | |
877 | <<fkRPsub2<<" "<<fkRPsub2Qx<<" "<<fkRPsub2Qy<<endl; | |
878 | ||
879 | cout<<fEventPlane->GetEventplane("Q")<<endl; | |
880 | TVector2 *vec2 = (TVector2*)fEventPlane->GetQVector(); | |
881 | if(!vec2){ cout<<" no EP information "<<endl;} | |
882 | else{ | |
883 | Double_t dRPEP = vec2->Phi()/2; | |
884 | cout<<dRPEP<<endl; | |
885 | } | |
886 | ||
887 | ||
888 | } | |
889 | ||
890 | fFlowEvent = dynamic_cast<AliFlowEventSimple*>(GetInputData(0)); | |
891 | ||
892 | if (fFlowEvent) { | |
893 | //get the Q vector from the FlowEvent | |
894 | AliFlowVector vQ = fFlowEvent->GetQ(); | |
895 | //if (vQ.X()== 0. && vQ.Y()== 0. ) { cout<<"Q vector is NULL!"<<endl; } //coding violation | |
896 | //Weight with the multiplicity | |
897 | Double_t dQX = 0.; | |
898 | Double_t dQY = 0.; | |
899 | if (TMath::AreEqualAbs(vQ.GetMult(),0.0,1e-10)) { | |
900 | dQX = vQ.X()/vQ.GetMult(); | |
901 | dQY = vQ.Y()/vQ.GetMult(); | |
902 | } else {cerr<<"vQ.GetMult() is zero!"<<endl; } | |
903 | vQ.Set(dQX,dQY); | |
904 | *fQsum += vQ; | |
905 | fQ2sum += vQ.Mod2(); | |
906 | fLyzEp->CalculateRPandW(vQ); | |
907 | Double_t dWR = fLyzEp->GetWR(); | |
908 | ||
909 | Double_t dRP = fLyzEp->GetPsi(); | |
910 | //plot difference between event plane from EP-method and LYZ-method | |
911 | Double_t dRPEP = vQ.Phi()/2; //gives distribution from (0 to pi) | |
912 | //Double_t dRPEP = 0.5*TMath::ATan2(vQ.Y(),vQ.X()); //gives distribution from (-pi/2 to pi/2) | |
913 | ||
914 | Double_t dDeltaPhi = dRPEP - dRP; | |
915 | if (dDeltaPhi < 0.) { dDeltaPhi += TMath::Pi(); } //to shift distribution from (-pi/2 to pi/2) to (0 to pi) | |
916 | ||
917 | cout<<dRPEP<<" "<<dRP<<" "<<endl; | |
918 | ||
919 | }else{ | |
920 | cout<<" no fFlowEvent "<<endl; | |
921 | } | |
922 | */ | |
923 | ||
924 | ||
925 | ||
926 | ||
927 | ||
928 | } | |
929 | ||
930 | ||
931 | //_________________________________________________________________________________ | |
932 | void AliAnalysisTaskMultiDielectronNewTaku::SetBranches(TTree *t){ | |
933 | ||
934 | t->Branch("kNEvent",&fNEvent,"kNEvent/I"); | |
935 | t->Branch("kMag",&fMag,"kMag/D"); | |
936 | t->Branch("fkTriggerInfo","TObjArray",&fkTriggerInfo); | |
937 | t->Branch("kTriggerMask",&fkTriggerMask,"kTriggerMask/D"); | |
938 | t->Branch("kTriggerCent",&fkTriggerCent,"kTriggerCent/I"); | |
939 | t->Branch("fkNCut", &fkNCut, "fkNCut/D"); | |
940 | t->Branch("fkRunNumber", &fkRunNumber, "fkRunNumber/D"); | |
941 | t->Branch("fkCentrality", &fkCentrality, "fkCentrality/D"); | |
942 | t->Branch("fkXvPrim", &fkXvPrim, "fkXvPrim/D"); | |
943 | t->Branch("fkYvPrim", &fkYvPrim, "fkYvPrim/D"); | |
944 | t->Branch("fkZvPrim", &fkZvPrim, "fkZvPrim/D"); | |
945 | t->Branch("fkXRes", &fkXRes, "fkXRes/D"); | |
946 | t->Branch("fkYRes", &fkYRes, "fkYRes/D"); | |
947 | t->Branch("fkZRes", &fkZRes, "fkZRes/D"); | |
948 | t->Branch("fkNTrk", &fkNTrk, "fkNTrk/D"); | |
949 | t->Branch("fkTracks", &fkTracks, "fkTracks/D"); | |
950 | t->Branch("fkNacc", &fkNacc, "fkNacc/D"); | |
951 | t->Branch("fkNaccTrcklts", &fkNaccTrcklts, "fkNaccTrcklts/D"); | |
952 | t->Branch("fkNch", &fkNch, "fkNch/D"); | |
953 | t->Branch("fkZDCN1E", &fkZDCN1E, "fkZDCN1E/D"); | |
954 | t->Branch("fkZDCP1E", &fkZDCP1E, "fkZDCP1E/D"); | |
955 | t->Branch("fkZDCN2E", &fkZDCN2E, "fkZDCN2E/D"); | |
956 | t->Branch("fkZDCP2E", &fkZDCP2E, "fkZDCP2E/D"); | |
957 | t->Branch("fkV0A", &fkV0A, "fkV0A/D"); | |
958 | t->Branch("fkV0C", &fkV0C, "fkV0C/D"); | |
959 | ||
960 | t->Branch("fkRP",&fkRP,"fkRP/D"); | |
961 | t->Branch("fkRPQx",&fkRPQx,"fkRPQx/D"); | |
962 | t->Branch("fkRPQy",&fkRPQy,"fkRPQy/D"); | |
963 | t->Branch("fkRPsub1",&fkRPsub1,"fkRPsub1/D"); | |
964 | t->Branch("fkRPsub1Qx",&fkRPsub1Qx,"fkRPsub1Qx/D"); | |
965 | t->Branch("fkRPsub1Qy",&fkRPsub1Qy,"fkRPsub1Qy/D"); | |
966 | t->Branch("fkRPsub2",&fkRPsub2,"fkRPsub2/D"); | |
967 | t->Branch("fkRPsub2Qx",&fkRPsub2Qx,"fkRPsub2Qx/D"); | |
968 | t->Branch("fkRPsub2Qy",&fkRPsub2Qy,"fkRPsub2Qy/D"); | |
969 | t->Branch("fkQsubRes",&fkQsubRes,"fkQsubRes/D"); | |
970 | ||
971 | ||
972 | t->Branch("fkNPar", &fkNPar, "fkNPar/I"); | |
973 | t->Branch("kPx",fgData[AliDielectronVarManager::kPx],"kPx[fkNPar]/D"); | |
974 | t->Branch("kPy",fgData[AliDielectronVarManager::kPy],"kPy[fkNPar]/D"); | |
975 | t->Branch("kPz",fgData[AliDielectronVarManager::kPz],"kPz[fkNPar]/D"); | |
976 | t->Branch("kPt",fgData[AliDielectronVarManager::kPt],"kPt[fkNPar]/D"); | |
977 | t->Branch("kP",fgData[AliDielectronVarManager::kP],"kP[fkNPar]/D"); | |
978 | t->Branch("kXv",fgData[AliDielectronVarManager::kXv],"kXv[fkNPar]/D"); | |
979 | t->Branch("kYv",fgData[AliDielectronVarManager::kYv],"kYv[fkNPar]/D"); | |
980 | t->Branch("kZv",fgData[AliDielectronVarManager::kZv],"kZv[fkNPar]/D"); | |
981 | t->Branch("kOneOverPt",fgData[AliDielectronVarManager::kOneOverPt],"kOneOverPt[fkNPar]/D"); | |
982 | t->Branch("kPhi",fgData[AliDielectronVarManager::kPhi],"kPhi[fkNPar]/D"); | |
983 | t->Branch("kTheta",fgData[AliDielectronVarManager::kTheta],"kTheta[fkNPar]/D"); | |
984 | t->Branch("kEta",fgData[AliDielectronVarManager::kEta],"kEta[fkNPar]/D"); | |
985 | t->Branch("kY",fgData[AliDielectronVarManager::kY],"kY[fkNPar]/D"); | |
986 | t->Branch("kE",fgData[AliDielectronVarManager::kE],"kE[fkNPar]/D"); | |
987 | t->Branch("kM",fgData[AliDielectronVarManager::kM],"kM[fkNPar]/D"); | |
988 | t->Branch("kCharge",fgData[AliDielectronVarManager::kCharge],"kCharge[fkNPar]/D"); | |
989 | t->Branch("kNclsITS",fgData[AliDielectronVarManager::kNclsITS],"kNclsITS[fkNPar]/D"); | |
990 | t->Branch("kNclsTPC",fgData[AliDielectronVarManager::kNclsTPC],"kNclsTPC[fkNPar]/D"); | |
991 | t->Branch("kNclsTPCiter1",fgData[AliDielectronVarManager::kNclsTPCiter1],"kNclsTPCiter1[fkNPar]/D"); | |
992 | t->Branch("kNFclsTPC",fgData[AliDielectronVarManager::kNFclsTPC],"kNFclsTPC[fkNPar]/D"); | |
993 | t->Branch("kNFclsTPCr",fgData[AliDielectronVarManager::kNFclsTPCr],"kNFclsTPCr[fkNPar]/D"); | |
994 | t->Branch("kNFclsTPCrFrac",fgData[AliDielectronVarManager::kNFclsTPCrFrac],"kNFclsTPCrFrac[fkNPar]/D"); | |
995 | t->Branch("kTPCsignalN",fgData[AliDielectronVarManager::kTPCsignalN],"kTPCsignalN[fkNPar]/D"); | |
996 | t->Branch("kTPCsignalNfrac",fgData[AliDielectronVarManager::kTPCsignalNfrac],"kTPCsignalNfrac[fkNPar]/D"); | |
997 | t->Branch("kTPCchi2Cl",fgData[AliDielectronVarManager::kTPCchi2Cl],"kTPCchi2Cl[fkNPar]/D"); | |
998 | t->Branch("kTrackStatus",fgData[AliDielectronVarManager::kTrackStatus],"kTrackStatus[fkNPar]/D"); | |
999 | t->Branch("kNclsTRD",fgData[AliDielectronVarManager::kNclsTRD],"kNclsTRD[fkNPar]/D"); | |
1000 | t->Branch("kTRDntracklets",fgData[AliDielectronVarManager::kTRDntracklets],"kTRDntracklets[fkNPar]/D"); | |
1001 | t->Branch("kTRDpidQuality",fgData[AliDielectronVarManager::kTRDpidQuality],"kTRDpidQuality[fkNPar]/D"); | |
1002 | t->Branch("kTRDprobEle",fgData[AliDielectronVarManager::kTRDprobEle],"kTRDprobEle[fkNPar]/D"); | |
1003 | t->Branch("kTRDprobPio",fgData[AliDielectronVarManager::kTRDprobPio],"kTRDprobPio[fkNPar]/D"); | |
1004 | t->Branch("kImpactParXY",fgData[AliDielectronVarManager::kImpactParXY],"kImpactParXY[fkNPar]/D"); | |
1005 | t->Branch("kImpactParZ",fgData[AliDielectronVarManager::kImpactParZ],"kImpactParZ[fkNPar]/D"); | |
1006 | t->Branch("kTrackLength",fgData[AliDielectronVarManager::kTrackLength],"kTrackLength[fkNPar]/D"); | |
1007 | t->Branch("kPdgCode",fgData[AliDielectronVarManager::kPdgCode],"kPdgCode[fkNPar]/D"); | |
1008 | t->Branch("kPdgCodeMother",fgData[AliDielectronVarManager::kPdgCodeMother],"kPdgCodeMother[fkNPar]/D"); | |
1009 | t->Branch("kPdgCodeGrandMother",fgData[AliDielectronVarManager::kPdgCodeGrandMother],"kPdgCodeGrandMother[fkNPar]/D"); | |
1010 | t->Branch("kNumberOfDaughters",fgData[AliDielectronVarManager::kNumberOfDaughters],"kNumberOfDaughters[fkNPar]/D"); | |
1011 | t->Branch("kHaveSameMother",fgData[AliDielectronVarManager::kHaveSameMother],"kHaveSameMother[fkNPar]/D"); | |
1012 | t->Branch("kIsJpsiPrimary",fgData[AliDielectronVarManager::kIsJpsiPrimary],"kIsJpsiPrimary[fkNPar]/D"); | |
1013 | t->Branch("kITSsignal",fgData[AliDielectronVarManager::kITSsignal],"kITSsignal[fkNPar]/D"); | |
1014 | t->Branch("kITSsignalSSD1",fgData[AliDielectronVarManager::kITSsignalSSD1],"kITSsignalSSD1[fkNPar]/D"); | |
1015 | t->Branch("kITSsignalSSD2",fgData[AliDielectronVarManager::kITSsignalSSD2],"kITSsignalSSD2[fkNPar]/D"); | |
1016 | t->Branch("kITSsignalSDD1",fgData[AliDielectronVarManager::kITSsignalSDD1],"kITSsignalSDD1[fkNPar]/D"); | |
1017 | t->Branch("kITSsignalSDD2",fgData[AliDielectronVarManager::kITSsignalSDD2],"kITSsignalSDD2[fkNPar]/D"); | |
1018 | t->Branch("kITSclusterMap",fgData[AliDielectronVarManager::kITSclusterMap],"kITSclusterMap[fkNPar]/D"); | |
1019 | t->Branch("kITSnSigmaEle",fgData[AliDielectronVarManager::kITSnSigmaEle],"kITSnSigmaEle[fkNPar]/D"); | |
1020 | t->Branch("kITSnSigmaPio",fgData[AliDielectronVarManager::kITSnSigmaPio],"kITSnSigmaPio[fkNPar]/D"); | |
1021 | t->Branch("kITSnSigmaMuo",fgData[AliDielectronVarManager::kITSnSigmaMuo],"kITSnSigmaMuo[fkNPar]/D"); | |
1022 | t->Branch("kITSnSigmaKao",fgData[AliDielectronVarManager::kITSnSigmaKao],"kITSnSigmaKao[fkNPar]/D"); | |
1023 | t->Branch("kITSnSigmaPro",fgData[AliDielectronVarManager::kITSnSigmaPro],"kITSnSigmaPro[fkNPar]/D"); | |
1024 | t->Branch("kPIn",fgData[AliDielectronVarManager::kPIn],"kPIn[fkNPar]/D"); | |
1025 | t->Branch("kTPCsignal",fgData[AliDielectronVarManager::kTPCsignal],"kTPCsignal[fkNPar]/D"); | |
1026 | t->Branch("kTOFsignal",fgData[AliDielectronVarManager::kTOFsignal],"kTOFsignal[fkNPar]/D"); | |
1027 | t->Branch("kTOFbeta",fgData[AliDielectronVarManager::kTOFbeta],"kTOFbeta[fkNPar]/D"); | |
1028 | t->Branch("kTPCnSigmaEle",fgData[AliDielectronVarManager::kTPCnSigmaEle],"kTPCnSigmaEle[fkNPar]/D"); | |
1029 | t->Branch("kTPCnSigmaPio",fgData[AliDielectronVarManager::kTPCnSigmaPio],"kTPCnSigmaPio[fkNPar]/D"); | |
1030 | t->Branch("kTPCnSigmaMuo",fgData[AliDielectronVarManager::kTPCnSigmaMuo],"kTPCnSigmaMuo[fkNPar]/D"); | |
1031 | t->Branch("kTPCnSigmaKao",fgData[AliDielectronVarManager::kTPCnSigmaKao],"kTPCnSigmaKao[fkNPar]/D"); | |
1032 | t->Branch("kTPCnSigmaPro",fgData[AliDielectronVarManager::kTPCnSigmaPro],"kTPCnSigmaPro[fkNPar]/D"); | |
1033 | t->Branch("kTOFnSigmaEle",fgData[AliDielectronVarManager::kTOFnSigmaEle],"kTOFnSigmaEle[fkNPar]/D"); | |
1034 | t->Branch("kTOFnSigmaPio",fgData[AliDielectronVarManager::kTOFnSigmaPio],"kTOFnSigmaPio[fkNPar]/D"); | |
1035 | t->Branch("kTOFnSigmaMuo",fgData[AliDielectronVarManager::kTOFnSigmaMuo],"kTOFnSigmaMuo[fkNPar]/D"); | |
1036 | t->Branch("kTOFnSigmaKao",fgData[AliDielectronVarManager::kTOFnSigmaKao],"kTOFnSigmaKao[fkNPar]/D"); | |
1037 | t->Branch("kTOFnSigmaPro",fgData[AliDielectronVarManager::kTOFnSigmaPro],"kTOFnSigmaPro[fkNPar]/D"); | |
1038 | t->Branch("kKinkIndex0",fgData[AliDielectronVarManager::kKinkIndex0],"kKinkIndex0[fkNPar]/D"); | |
1039 | t->Branch("kChi2NDF",fgData[AliDielectronVarManager::kChi2NDF],"kChi2NDF[fkNPar]/D"); | |
1040 | t->Branch("kDecayLength",fgData[AliDielectronVarManager::kDecayLength],"kDecayLength[fkNPar]/D"); | |
1041 | t->Branch("kR",fgData[AliDielectronVarManager::kR],"kR[fkNPar]/D"); | |
1042 | t->Branch("kOpeningAngle",fgData[AliDielectronVarManager::kOpeningAngle],"kOpeningAngle[fkNPar]/D"); | |
1043 | t->Branch("kThetaHE",fgData[AliDielectronVarManager::kThetaHE],"kThetaHE[fkNPar]/D"); | |
1044 | t->Branch("kPhiHE",fgData[AliDielectronVarManager::kPhiHE],"kPhiHE[fkNPar]/D"); | |
1045 | t->Branch("kThetaCS",fgData[AliDielectronVarManager::kThetaCS],"kThetaCS[fkNPar]/D"); | |
1046 | t->Branch("kPhiCS",fgData[AliDielectronVarManager::kPhiCS],"kPhiCS[fkNPar]/D"); | |
1047 | t->Branch("kLegDist",fgData[AliDielectronVarManager::kLegDist],"kLegDist[fkNPar]/D"); | |
1048 | t->Branch("kLegDistXY",fgData[AliDielectronVarManager::kLegDistXY],"kLegDistXY[fkNPar]/D"); | |
1049 | t->Branch("kDeltaEta",fgData[AliDielectronVarManager::kDeltaEta],"kDeltaEta[fkNPar]/D"); | |
1050 | t->Branch("kDeltaPhi",fgData[AliDielectronVarManager::kDeltaPhi],"kDeltaPhi[fkNPar]/D"); | |
1051 | t->Branch("kMerr",fgData[AliDielectronVarManager::kMerr],"kMerr[fkNPar]/D"); | |
1052 | t->Branch("kDCA",fgData[AliDielectronVarManager::kDCA],"kDCA[fkNPar]/D"); | |
1053 | t->Branch("kPairType",fgData[AliDielectronVarManager::kPairType],"kPairType[fkNPar]/D"); | |
1054 | t->Branch("kPseudoProperTime",fgData[AliDielectronVarManager::kPseudoProperTime],"kPseudoProperTime[fkNPar]/D"); | |
1055 | t->Branch("kXvPrim",fgData[AliDielectronVarManager::kXvPrim],"kXvPrim=kPairMax[fkNPar]/D"); | |
1056 | t->Branch("kYvPrim",fgData[AliDielectronVarManager::kYvPrim],"kYvPrim[fkNPar]/D"); | |
1057 | t->Branch("kZvPrim",fgData[AliDielectronVarManager::kZvPrim],"kZvPrim[fkNPar]/D"); | |
1058 | t->Branch("kXRes",fgData[AliDielectronVarManager::kXRes],"kXRes[fkNPar]/D"); | |
1059 | t->Branch("kYRes",fgData[AliDielectronVarManager::kYRes],"kYRes[fkNPar]/D"); | |
1060 | t->Branch("kZRes",fgData[AliDielectronVarManager::kZRes],"kZRes[fkNPar]/D"); | |
1061 | t->Branch("kNTrk",fgData[AliDielectronVarManager::kNTrk],"kNTrk[fkNPar]/D"); | |
1062 | t->Branch("kTracks",fgData[AliDielectronVarManager::kTracks],"kTracks[fkNPar]/D"); | |
1063 | t->Branch("kNacc",fgData[AliDielectronVarManager::kNacc],"kNacc[fkNPar]/D"); | |
1064 | t->Branch("kNaccTrcklts",fgData[AliDielectronVarManager::kNaccTrcklts],"kNaccTrcklts[fkNPar]/D"); | |
1065 | t->Branch("kNch",fgData[AliDielectronVarManager::kNch],"kNch[fkNPar]/D"); | |
1066 | t->Branch("kCentrality",fgData[AliDielectronVarManager::kCentrality],"kCentrality[fkNPar]/D"); | |
1067 | t->Branch("kNevents",fgData[AliDielectronVarManager::kNevents],"kNevents[fkNPar]/D"); | |
1068 | ||
1069 | ||
1070 | } | |
1071 |