42 #include <TGeoGlobalMagField.h> 45 #include "AliKFParticle.h" 48 #include "AliAODEvent.h" 49 #include "AliESDEvent.h" 51 #include "AliMCEvent.h" 52 #include "AliMCEventHandler.h" 53 #include "AliESDpid.h" 54 #include "AliESDtrackCuts.h" 56 #include "AliGenCocktailEventHeader.h" 62 #include "AliKFVertex.h" 63 #include "AliAODTrack.h" 64 #include "AliESDtrack.h" 65 #include "AliAnalysisManager.h" 66 #include "AliInputEventHandler.h" 67 #include "AliAODHandler.h" 68 #include "AliPIDResponse.h" 72 #include "TObjArray.h" 82 kAddv0sInESDFilter(kFALSE),
84 fConversionCuts(NULL),
86 fConversionGammas(NULL),
87 fUseImprovedVertex(kTRUE),
88 fUseOwnXYZCalculation(kTRUE),
89 fUseConstructGamma(kFALSE),
90 kUseAODConversionPhoton(kTRUE),
92 fDeltaAODBranchName("GammaConv"),
93 fDeltaAODFilename("AliAODGammaConversion.root"),
95 fPreviousV0ReaderPerformsAODRelabeling(0),
96 fEventIsSelected(kFALSE),
97 fNumberOfPrimaryTracks(0),
98 fNumberOfTPCoutTracks(0),
101 fUseMassToZero(kTRUE),
102 fProduceV0findingEffi(kFALSE),
103 fProduceImpactParamHistograms(kFALSE),
104 fCurrentInvMassPair(0),
107 fImpactParamHistograms(NULL),
108 fHistoMCGammaPtvsR(NULL),
109 fHistoMCGammaPtvsPhi(NULL),
110 fHistoMCGammaPtvsEta(NULL),
111 fHistoMCGammaRvsPhi(NULL),
112 fHistoMCGammaRvsEta(NULL),
113 fHistoMCGammaPhivsEta(NULL),
114 fHistoRecMCGammaPtvsR(NULL),
115 fHistoRecMCGammaPtvsPhi(NULL),
116 fHistoRecMCGammaPtvsEta(NULL),
117 fHistoRecMCGammaRvsPhi(NULL),
118 fHistoRecMCGammaRvsEta(NULL),
119 fHistoRecMCGammaPhivsEta(NULL),
120 fHistoRecMCGammaMultiPt(NULL),
121 fHistoRecMCGammaMultiPtvsEta(NULL),
122 fHistoRecMCGammaMultiR(NULL),
123 fHistoRecMCGammaMultiPhi(NULL),
124 fHistoPosTrackImpactParamZ(NULL),
125 fHistoPosTrackImpactParamY(NULL),
126 fHistoPosTrackImpactParamX(NULL),
127 fHistoPosTrackImpactParamZvsPt(NULL),
128 fHistoPosTrackImpactParamYvsPt(NULL),
129 fHistoPosTrackImpactParamXvsPt(NULL),
130 fHistoNegTrackImpactParamZ(NULL),
131 fHistoNegTrackImpactParamY(NULL),
132 fHistoNegTrackImpactParamX(NULL),
133 fHistoNegTrackImpactParamZvsPt(NULL),
134 fHistoNegTrackImpactParamYvsPt(NULL),
135 fHistoNegTrackImpactParamXvsPt(NULL),
136 fHistoImpactParamZvsR(NULL),
137 fHistoImpactParamZvsR2(NULL),
140 fHistoDCAzPhoton(NULL),
141 fHistoDCAzPhoton2(NULL),
144 fHistoRviaAlpha(NULL),
145 fHistoRviaAlphaRecalc(NULL),
147 fHistoImpactParameterStudy(NULL),
148 fImpactParamTree(NULL),
149 fVectorFoundGammas(0),
150 fCurrentFileName(""),
151 fMCFileChecked(kFALSE)
155 DefineInput(0, TChain::Class());
156 DefineOutput(1,TBits::Class());
164 if(fConversionGammas){
165 fConversionGammas->Delete();
166 delete fConversionGammas;
167 fConversionGammas=0x0;
180 if(fConversionGammas && (index < fConversionGammas->GetEntriesFast())) {
181 TObject *tmp = fConversionGammas->At(index);
182 if(tmp->IsA() == AliAODConversionPhoton::Class()){
238 if(fConversionCuts==NULL){
239 if(fConversionCuts==NULL)AliError(
"No Conversion Cut Selection initialized");
241 if(fEventCuts==NULL){
242 if(fEventCuts==NULL)AliError(
"No Event Cut Selection initialized");
245 if(fCreateAOD){kUseAODConversionPhoton=kTRUE;}
247 if(fConversionGammas != NULL){
248 delete fConversionGammas;
249 fConversionGammas=NULL;
252 if(fConversionGammas == NULL){
253 if(kUseAODConversionPhoton){
254 fConversionGammas =
new TClonesArray(
"AliAODConversionPhoton",100);}
256 fConversionGammas =
new TClonesArray(
"AliKFConversionPhoton",100);}
258 fConversionGammas->Delete();
267 fPCMv0BitField =
new TBits();
270 fDeltaAODBranchName.Append(
"_");
271 fDeltaAODBranchName.Append(fEventCuts->GetCutNumber());
274 fDeltaAODBranchName.Append(
"_");
275 fDeltaAODBranchName.Append(fConversionCuts->GetCutNumber());
276 fDeltaAODBranchName.Append(
"_gamma");
278 fConversionGammas->SetName(fDeltaAODBranchName.Data());
280 AddAODBranch(
"TClonesArray", &fConversionGammas, fDeltaAODFilename.Data());
281 AliAnalysisManager::GetAnalysisManager()->RegisterExtraFile(fDeltaAODFilename.Data());
284 if(fProduceImpactParamHistograms){
285 if(fImpactParamHistograms != NULL){
286 delete fImpactParamHistograms;
287 fImpactParamHistograms = NULL;
289 if(fImpactParamHistograms==NULL){
290 fImpactParamHistograms =
new TList();
291 fImpactParamHistograms->SetOwner(kTRUE);
292 fImpactParamHistograms->SetName(Form(
"ImpactParamHistograms_%s_%s",fEventCuts->GetCutNumber().Data(),fConversionCuts->GetCutNumber().Data()));
294 fHistoPosTrackImpactParamZ =
new TH1F(
"fHistoPosTrackImpactParamZ",
"",480,-80,80);
295 fHistoPosTrackImpactParamZ->SetXTitle(
"Z (cm)");
296 fImpactParamHistograms->Add(fHistoPosTrackImpactParamZ);
298 fHistoPosTrackImpactParamY =
new TH1F(
"fHistoPosTrackImpactParamY",
"",720,-120,120);
299 fHistoPosTrackImpactParamY->SetXTitle(
"Y (cm)");
300 fImpactParamHistograms->Add(fHistoPosTrackImpactParamY);
302 fHistoPosTrackImpactParamX =
new TH1F(
"fHistoPosTrackImpactParamX",
"",30,-3,3);
303 fHistoPosTrackImpactParamX->SetXTitle(
"X (cm)");
304 fImpactParamHistograms->Add(fHistoPosTrackImpactParamX);
306 fHistoNegTrackImpactParamZ =
new TH1F(
"fHistoNegTrackImpactParamZ",
"",480,-80,80);
307 fHistoNegTrackImpactParamZ->SetXTitle(
"Z (cm)");
308 fImpactParamHistograms->Add(fHistoNegTrackImpactParamZ);
310 fHistoNegTrackImpactParamY =
new TH1F(
"fHistoNegTrackImpactParamY",
"",720,-120,120);
311 fHistoNegTrackImpactParamY->SetXTitle(
"Y (cm)");
312 fImpactParamHistograms->Add(fHistoNegTrackImpactParamY);
314 fHistoNegTrackImpactParamX =
new TH1F(
"fHistoNegTrackImpactParamX",
"",30,-3,3);
315 fHistoNegTrackImpactParamX->SetXTitle(
"X (cm)");
316 fImpactParamHistograms->Add(fHistoNegTrackImpactParamX);
318 fHistoPosTrackImpactParamZvsPt =
new TH2F(
"fHistoPosTrackImpactParamZvsPt",
"",100,0,10,480,-80,80);
319 fHistoPosTrackImpactParamZvsPt->SetYTitle(
"Z (cm)");
320 fHistoPosTrackImpactParamZvsPt->SetXTitle(
"Pt (GeV)");
321 fImpactParamHistograms->Add(fHistoPosTrackImpactParamZvsPt);
323 fHistoPosTrackImpactParamYvsPt =
new TH2F(
"fHistoPosTrackImpactParamYvsPt",
"",100,0,10,720,-120,120);
324 fHistoPosTrackImpactParamYvsPt->SetYTitle(
"Y (cm)");
325 fHistoPosTrackImpactParamYvsPt->SetXTitle(
"Pt (GeV)");
326 fImpactParamHistograms->Add(fHistoPosTrackImpactParamYvsPt);
328 fHistoPosTrackImpactParamXvsPt =
new TH2F(
"fHistoPosTrackImpactParamXvsPt",
"",100,0,10,30,-3,5);
329 fHistoPosTrackImpactParamXvsPt->SetYTitle(
"X (cm)");
330 fHistoPosTrackImpactParamXvsPt->SetXTitle(
"Pt (GeV)");
331 fImpactParamHistograms->Add(fHistoPosTrackImpactParamXvsPt);
333 fHistoNegTrackImpactParamZvsPt =
new TH2F(
"fHistoNegTrackImpactParamZvsPt",
"",100,0,10,480,-80,80);
334 fHistoNegTrackImpactParamZvsPt->SetYTitle(
"Z (cm)");
335 fHistoNegTrackImpactParamZvsPt->SetXTitle(
"Pt (GeV)");
336 fImpactParamHistograms->Add(fHistoNegTrackImpactParamZvsPt);
338 fHistoNegTrackImpactParamYvsPt =
new TH2F(
"fHistoNegTrackImpactParamYvsPt",
"",100,0,10,720,-120,120);
339 fHistoNegTrackImpactParamYvsPt->SetYTitle(
"Y (cm)");
340 fHistoNegTrackImpactParamYvsPt->SetXTitle(
"Pt (GeV)");
341 fImpactParamHistograms->Add(fHistoNegTrackImpactParamYvsPt);
343 fHistoNegTrackImpactParamXvsPt =
new TH2F(
"fHistoNegTrackImpactParamXvsPt",
"",100,0,10,30,-3,3);
344 fHistoNegTrackImpactParamXvsPt->SetYTitle(
"X (cm)");
345 fHistoNegTrackImpactParamXvsPt->SetXTitle(
"Pt (GeV)");
346 fImpactParamHistograms->Add(fHistoNegTrackImpactParamXvsPt);
348 fHistoImpactParamZvsR =
new TH2F(
"fHistoImpactParamZvsR",
"Before cuts",300,-150,150,200,0,200);
349 fHistoImpactParamZvsR->SetXTitle(
"Z (cm)");
350 fHistoImpactParamZvsR->SetYTitle(
"R (cm)");
351 fImpactParamHistograms->Add(fHistoImpactParamZvsR);
353 fHistoImpactParamZvsR2 =
new TH2F(
"fHistoImpactParamZvsR2",
"After cuts",300,-150,150,200,0,200);
354 fHistoImpactParamZvsR2->SetXTitle(
"Z (cm)");
355 fHistoImpactParamZvsR2->SetYTitle(
"R (cm)");
356 fImpactParamHistograms->Add(fHistoImpactParamZvsR2);
358 fHistoPt =
new TH1F(
"fHistoPt",
"Before all cuts",100,0,10);
359 fHistoPt->SetXTitle(
"Pt (GeV)");
360 fImpactParamHistograms->Add(fHistoPt);
362 fHistoPt2 =
new TH1F(
"fHistoPt2",
"After all cuts",100,0,10);
363 fHistoPt2->SetXTitle(
"Pt (GeV)");
364 fImpactParamHistograms->Add(fHistoPt2);
366 fHistoDCAzPhoton =
new TH1F(
"fHistoDCAzPhoton",
"Before cuts",20,-2,2);
367 fHistoDCAzPhoton->SetXTitle(
"DCAz photon (cm)");
368 fImpactParamHistograms->Add(fHistoDCAzPhoton);
370 fHistoDCAzPhoton2 =
new TH1F(
"fHistoDCAzPhoton2",
"After cuts",20,-2,2);
371 fHistoDCAzPhoton2->SetXTitle(
"DCAz photon (cm)");
372 fImpactParamHistograms->Add(fHistoDCAzPhoton2);
374 fHistoR =
new TH1F(
"fHistoR",
"",200,0,200);
375 fHistoR->SetXTitle(
"Conversion radius (cm)");
376 fImpactParamHistograms->Add(fHistoR);
378 fHistoRrecalc =
new TH1F(
"fHistoRrecalc",
"",200,0,200);
379 fHistoRrecalc->SetXTitle(
"conversion radius (cm)");
380 fImpactParamHistograms->Add(fHistoRrecalc);
382 fHistoRviaAlpha =
new TH1F(
"fHistoRviaAlpha",
"",200,0,200);
383 fHistoRviaAlpha->SetXTitle(
"Conversion radius (cm)");
384 fImpactParamHistograms->Add(fHistoRviaAlpha);
386 fHistoRviaAlphaRecalc =
new TH1F(
"fHistoRviaAlphaRecalc",
"",200,0,200);
387 fHistoRviaAlphaRecalc->SetXTitle(
"conversion radius (cm)");
388 fImpactParamHistograms->Add(fHistoRviaAlphaRecalc);
390 fHistoRdiff =
new TH1F(
"fHistoRdiff",
"",200,0,200);
391 fHistoRdiff->SetXTitle(
"R_conv - R_cluster conflict (cm)");
392 fImpactParamHistograms->Add(fHistoRdiff);
394 fHistoImpactParameterStudy =
new TH1F(
"fHistoImpactParameterStudy",
"",7,-0.5,6.5);
395 fHistoImpactParameterStudy->GetXaxis()->SetBinLabel(1,
"# V0s");
396 fHistoImpactParameterStudy->GetXaxis()->SetBinLabel(2,
"two TPC-only tracks");
397 fHistoImpactParameterStudy->GetXaxis()->SetBinLabel(3,
"Z cut not passed");
398 fHistoImpactParameterStudy->GetXaxis()->SetBinLabel(4,
"Y cut not passed");
399 fHistoImpactParameterStudy->GetXaxis()->SetBinLabel(5,
"R>80cm");
400 fHistoImpactParameterStudy->GetXaxis()->SetBinLabel(6,
"causality cut not p.");
401 fHistoImpactParameterStudy->GetXaxis()->SetBinLabel(7,
"# removed V0s");
402 fImpactParamHistograms->Add(fHistoImpactParameterStudy);
404 fImpactParamTree =
new TTree(
"fImpactParamTree",
"");
405 fImpactParamHistograms->Add(fImpactParamTree);
408 if (fProduceV0findingEffi){
409 TH1::AddDirectory(kFALSE);
410 if(fHistograms != NULL){
414 if(fHistograms==NULL){
415 fHistograms =
new TList();
416 fHistograms->SetOwner(kTRUE);
417 fHistograms->SetName(Form(
"V0FindingEfficiencyInput_%s_%s",fEventCuts->GetCutNumber().Data(),fConversionCuts->GetCutNumber().Data()));
420 fHistoMCGammaPtvsR =
new TH2F(
"MCconvGamma_Pt_R",
"MC converted gamma Pt vs R (|eta| < 0.9)",250,0.0,25,400,0,200);
421 fHistoMCGammaPtvsR->SetXTitle(
"p_{MC,T} (GeV/c)");
422 fHistoMCGammaPtvsR->SetYTitle(
"R_{MC,conv} (cm)");
423 fHistograms->Add(fHistoMCGammaPtvsR);
425 fHistoMCGammaPtvsEta =
new TH2F(
"MCconvGamma_Pt_Eta",
"MC converted gamma Pt vs Eta ",250,0.0,25,280,-1.4,1.4);
426 fHistoMCGammaPtvsEta->SetXTitle(
"p_{MC,T} (GeV/c)");
427 fHistoMCGammaPtvsEta->SetYTitle(
"#eta_{MC}");
428 fHistograms->Add(fHistoMCGammaPtvsEta);
430 fHistoMCGammaPtvsPhi =
new TH2F(
"MCconvGamma_Pt_Phi",
"MC converted gamma Pt vs Phi (|eta| < 0.9) ",250,0.0,25,400,0,2*TMath::Pi());
431 fHistoMCGammaPtvsPhi->SetXTitle(
"p_{MC,T} (GeV/c)");
432 fHistoMCGammaPtvsPhi->SetYTitle(
"#varphi_{MC} (rad)");
433 fHistograms->Add(fHistoMCGammaPtvsPhi);
435 fHistoMCGammaRvsPhi =
new TH2F(
"MCconvGamma_R_Phi",
"MC converted gamma R vs Phi (|eta| < 0.9) ",400,0,200,400,0,2*TMath::Pi());
436 fHistoMCGammaRvsPhi->SetXTitle(
"R_{MC,conv} (cm)");
437 fHistoMCGammaRvsPhi->SetYTitle(
"#varphi_{MC} (rad)");
438 fHistograms->Add(fHistoMCGammaRvsPhi);
440 fHistoMCGammaRvsEta =
new TH2F(
"MCconvGamma_R_Eta",
"MC converted gamma R vs Eta ",400,0,200,280,-1.4,1.4);
441 fHistoMCGammaRvsEta->SetXTitle(
"R_{MC,conv} (cm)");
442 fHistoMCGammaRvsEta->SetYTitle(
"#eta_{MC}");
443 fHistograms->Add(fHistoMCGammaRvsEta);
445 fHistoMCGammaPhivsEta =
new TH2F(
"MCconvGamma_Phi_Eta",
"MC converted gamma Phi vs Eta ",400,0,2*TMath::Pi(),280,-1.4,1.4);
446 fHistoMCGammaPhivsEta->SetXTitle(
"#phi_{MC} (rad)");
447 fHistoMCGammaPhivsEta->SetYTitle(
"#eta_{MC}");
448 fHistograms->Add(fHistoMCGammaPhivsEta);
450 fHistoRecMCGammaPtvsR =
new TH2F(
"RecMCconvGamma_Pt_R",
"rec MC converted gamma Pt vs R (|eta| < 0.9)",250,0.0,25,400,0,200);
451 fHistoRecMCGammaPtvsR->SetXTitle(
"p_{MC,T} (GeV/c)");
452 fHistoRecMCGammaPtvsR->SetYTitle(
"R_{MC,conv} (cm)");
453 fHistograms->Add(fHistoRecMCGammaPtvsR);
455 fHistoRecMCGammaPtvsEta =
new TH2F(
"RecMCconvGamma_Pt_Eta",
"rec MC converted gamma Pt vs Eta ",250,0.0,25,280,-1.4,1.4);
456 fHistoRecMCGammaPtvsEta->SetXTitle(
"p_{MC,T} (GeV/c)");
457 fHistoRecMCGammaPtvsEta->SetYTitle(
"#eta_{MC}");
458 fHistograms->Add(fHistoRecMCGammaPtvsEta);
460 fHistoRecMCGammaPtvsPhi =
new TH2F(
"RecMCconvGamma_Pt_Phi",
"rec MC converted gamma Pt vs Phi (|eta| < 0.9) ",250,0.0,25,400,0,2*TMath::Pi());
461 fHistoRecMCGammaPtvsPhi->SetXTitle(
"p_{MC,T} (GeV/c)");
462 fHistoRecMCGammaPtvsPhi->SetYTitle(
"#varphi_{MC} (rad)");
463 fHistograms->Add(fHistoRecMCGammaPtvsPhi);
465 fHistoRecMCGammaRvsPhi =
new TH2F(
"RecMCconvGamma_R_Phi",
"rec MC converted gamma R vs Phi (|eta| < 0.9) ",400,0,200,400,0,2*TMath::Pi());
466 fHistoRecMCGammaRvsPhi->SetXTitle(
"R_{MC,conv} (cm)");
467 fHistoRecMCGammaRvsPhi->SetYTitle(
"#varphi_{MC} (rad)");
468 fHistograms->Add(fHistoRecMCGammaRvsPhi);
470 fHistoRecMCGammaRvsEta =
new TH2F(
"RecMCconvGamma_R_Eta",
"rec MC converted gamma R vs Eta ",400,0,200,280,-1.4,1.4);
471 fHistoRecMCGammaRvsEta->SetXTitle(
"R_{MC,conv} (cm)");
472 fHistoRecMCGammaRvsEta->SetYTitle(
"#eta_{MC}");
473 fHistograms->Add(fHistoRecMCGammaRvsEta);
475 fHistoRecMCGammaPhivsEta =
new TH2F(
"RecMCconvGamma_Phi_Eta",
"rec MC converted gamma Phi vs Eta ",400,0,2*TMath::Pi(),280,-1.4,1.4);
476 fHistoRecMCGammaPhivsEta->SetXTitle(
"#phi_{MC} (rad)");
477 fHistoRecMCGammaPhivsEta->SetYTitle(
"#eta_{MC}");
478 fHistograms->Add(fHistoRecMCGammaPhivsEta);
480 fHistoRecMCGammaMultiPtvsEta =
new TH2F(
"RecMCconvGammaMulti_Pt_Eta",
"rec MC converted gamma (at least double counted) Pt vs Eta ",250,0.0,25,280,-1.4,1.4);
481 fHistoRecMCGammaMultiPtvsEta->SetXTitle(
"p_{MC,T} (GeV/c)");
482 fHistoRecMCGammaMultiPtvsEta->SetYTitle(
"#eta_{MC}");
483 fHistograms->Add(fHistoRecMCGammaMultiPtvsEta);
485 fHistoRecMCGammaMultiPt =
new TH1F(
"RecMCconvGammaMulti_Pt",
"rec MC converted gamma (at least double counted) Pt (|eta| < 0.9)",250,0.0,25);
486 fHistoRecMCGammaMultiPt->SetXTitle(
"p_{MC,T} (GeV/c)");
487 fHistograms->Add(fHistoRecMCGammaMultiPt);
489 fHistoRecMCGammaMultiR =
new TH1F(
"RecMCconvGammaMulti_R",
"rec MC converted gamma (at least double counted) R (|eta| < 0.9)",400,0,200);
490 fHistoRecMCGammaMultiR->SetXTitle(
"R_{MC,conv} (cm)");
491 fHistograms->Add(fHistoRecMCGammaMultiR);
493 fHistoRecMCGammaMultiPhi =
new TH1F(
"RecMCconvGammaMulti_Phi",
"rec MC converted gamma (at least double counted) Phi (|eta| < 0.9)",400,0,2*TMath::Pi());
494 fHistoRecMCGammaMultiPhi->SetXTitle(
"#phi_{MC} (rad)");
495 fHistograms->Add(fHistoRecMCGammaMultiPhi);
497 fVectorFoundGammas.clear();
505 fCurrentFileName =
"";
506 fMCFileChecked = kFALSE;
511 AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
513 TTree* tree = (
TTree*) inputHandler->GetTree();
514 TFile*
file = (TFile*) tree->GetCurrentFile();
515 fCurrentFileName = file->GetName();
520 if (fPeriodName.CompareTo(
"") == 0){
521 TObjArray *arr = fCurrentFileName.Tokenize(
"/");
523 for (
Int_t i = 0; i < arr->GetEntriesFast();i++ ){
524 TObjString* testObjString = (TObjString*)arr->At(i);
525 if (testObjString->GetString().BeginsWith(
"LHC")){
526 fPeriodName = testObjString->GetString();
527 i = arr->GetEntriesFast();
530 if (fPeriodName.CompareTo(
"")==0){
531 TObjArray *arr2 = fCurrentFileName.Tokenize(
"__");
532 for (
Int_t i = 0; i < arr->GetEntriesFast();i++ ){
533 TObjString* testObjString = (TObjString*)arr2->At(i);
534 if (testObjString->GetString().BeginsWith(
"LHC")){
535 fPeriodName = testObjString->GetString();
536 i = arr2->GetEntriesFast();
541 fEventCuts->SetPeriodEnum (fPeriodName);
545 fEventCuts->SetPeriodEnum (fPeriodName);
559 TObjArray *arr = fCurrentFileName.Tokenize(
"/");
561 for (
Int_t i = 0; i < arr->GetEntriesFast();i++ ){
562 TObjString* testObjString = (TObjString*)arr->At(i);
563 if (testObjString->GetString().BeginsWith(
"LHC")){
564 TObjString* testObjString2 = (TObjString*)arr->At(i+1);
565 fPtHardBin = testObjString2->GetString().Atoi();
566 i = arr->GetEntriesFast();
571 if(!fEventCuts->GetDoEtaShift())
return kTRUE;
572 if(fEventCuts->GetEtaShift() == 0.0){
573 fEventCuts->GetCorrectEtaShiftFromPeriod();
574 fEventCuts->DoEtaShift(kFALSE);
577 printf(
" Gamma Conversion Reader %s_%s :: Eta Shift Manually Set to %f \n\n",
578 (fEventCuts->GetCutNumber()).
Data(),(fConversionCuts->GetCutNumber()).
Data(),fEventCuts->GetEtaShift());
579 fEventCuts->DoEtaShift(kFALSE);
589 if (!TGeoGlobalMagField::Instance()->GetField()) esdEvent->InitMagneticField();
593 if(!fConversionGammas)Init();
596 fEventIsSelected=ProcessEvent(fInputEvent,fMCEvent);
608 fConversionGammas->Delete();
611 if (kAddv0sInESDFilter){fPCMv0BitField->Clear();}
613 fInputEvent = inputEvent;
617 AliError(
"No Input event");
620 if(!fEventCuts){AliError(
"No EventCuts");
return kFALSE;}
621 if(!fConversionCuts){AliError(
"No ConversionCuts");
return kFALSE;}
631 if(!fEventCuts->EventIsSelected(fInputEvent,fMCEvent)){
632 if (fEventCuts->GetEventQuality() == 2 && !fMCFileChecked ){
633 cout <<
"ERROR with MC reading for: "<< fCurrentFileName.Data() << endl;
634 fMCFileChecked = kTRUE;
639 AliKFParticle::SetField(fInputEvent->GetMagneticField());
641 if(fInputEvent->IsA()==AliAODEvent::Class() && fProduceV0findingEffi){
642 fProduceV0findingEffi = kFALSE;
643 AliWarning(
"V0finding effi cannot be run on AODs ");
646 if(fProduceV0findingEffi){
647 CreatePureMCHistosForV0FinderEffiESD();
648 fVectorFoundGammas.clear();
651 if(fInputEvent->IsA()==AliESDEvent::Class()){
654 if(fInputEvent->IsA()==AliAODEvent::Class()){
655 GetAODConversionGammas();
665 if(fInputEvent->IsA()==AliESDEvent::Class()){
668 PostData(1, fPCMv0BitField);
669 AliAODHandler * aodhandler =
dynamic_cast<AliAODHandler*
>(AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler());
670 if (aodhandler && aodhandler->GetFillAOD()) {
671 AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler()->SetFillExtension(kTRUE);
684 if(!(charge==1||charge==-1)){AliError(
"Charge not defined");
return 0x0;}
686 if(fConversionCuts->GetV0FinderSameSign()==1){
688 if((fConversionCuts->GetTrack(fInputEvent,fCurrentV0->GetPindex()))->Charge()!=(fConversionCuts->GetTrack(fInputEvent,fCurrentV0->GetNindex()))->Charge())
return 0x0;
689 if((fConversionCuts->GetTrack(fInputEvent,fCurrentV0->GetPindex()))->Charge()==(fConversionCuts->GetTrack(fInputEvent,fCurrentV0->GetNindex()))->Charge()){
691 tracklabel=fCurrentV0->GetPindex();
692 return fCurrentV0->GetParamP();
694 tracklabel=fCurrentV0->GetNindex();
695 return fCurrentV0->GetParamN();
699 }
else if(fConversionCuts->GetV0FinderSameSign()==2){
702 tracklabel=fCurrentV0->GetPindex();
703 return fCurrentV0->GetParamP();
705 tracklabel=fCurrentV0->GetNindex();
706 return fCurrentV0->GetParamN();
712 if(!fCurrentV0->GetParamN()||!fCurrentV0->GetParamP())
return 0x0;
713 if(!fConversionCuts->GetTrack(fInputEvent,fCurrentV0->GetNindex())||!fConversionCuts->GetTrack(fInputEvent,fCurrentV0->GetPindex()))
return 0x0;
714 if((fConversionCuts->GetTrack(fInputEvent,fCurrentV0->GetPindex()))->Charge()==
charge){
715 tracklabel=fCurrentV0->GetPindex();
716 return fCurrentV0->GetParamP();}
717 if((fConversionCuts->GetTrack(fInputEvent,fCurrentV0->GetNindex()))->Charge()==
charge){
718 tracklabel=fCurrentV0->GetNindex();
719 return fCurrentV0->GetParamN();}
735 for(
Int_t currentV0Index=0;currentV0Index<fESDEvent->GetNumberOfV0s();currentV0Index++){
736 AliESDv0 *fCurrentV0=(AliESDv0*)(fESDEvent->GetV0(currentV0Index));
738 printf(
"Requested V0 does not exist");
742 fCurrentMotherKFCandidate=ReconstructV0(fCurrentV0,currentV0Index);
744 if(fCurrentMotherKFCandidate){
747 if(kUseAODConversionPhoton){
748 new((*fConversionGammas)[fConversionGammas->GetEntriesFast()])
AliAODConversionPhoton(fCurrentMotherKFCandidate);
750 currentConversionPhoton->
SetMass(fCurrentMotherKFCandidate->
M());
751 if (fUseMassToZero) currentConversionPhoton->
SetMassToZero();
753 if(kAddv0sInESDFilter){fPCMv0BitField->SetBitNumber(currentV0Index, kTRUE);}
755 new((*fConversionGammas)[fConversionGammas->GetEntriesFast()])
AliKFConversionPhoton(*fCurrentMotherKFCandidate);
758 delete fCurrentMotherKFCandidate;
759 fCurrentMotherKFCandidate=NULL;
762 if(kAddv0sInESDFilter){fPCMv0BitField->Compact();}
775 if(!fConversionCuts->SelectV0Finder(fCurrentV0->GetOnFlyStatus())){
780 if (fMCEvent && fProduceV0findingEffi ) FillRecMCHistosForV0FinderEffiESD(fCurrentV0);
783 Int_t currentTrackLabels[2]={-1,-1};
787 const AliExternalTrackParam *fCurrentExternalTrackParamPositive=GetExternalTrackParamP(fCurrentV0,currentTrackLabels[0]);
789 const AliExternalTrackParam *fCurrentExternalTrackParamNegative=GetExternalTrackParamN(fCurrentV0,currentTrackLabels[1]);
791 if(!fCurrentExternalTrackParamPositive||!fCurrentExternalTrackParamNegative)
return 0x0;
795 AliVTrack * posTrack = fConversionCuts->GetTrack(fInputEvent,currentTrackLabels[0]);
796 AliVTrack * negTrack = fConversionCuts->GetTrack(fInputEvent,currentTrackLabels[1]);
797 if(!negTrack || !posTrack) {
802 if(!fConversionCuts->TracksAreSelected(negTrack, posTrack)){
807 fConversionCuts->FillV0EtaBeforedEdxCuts(fCurrentV0->Eta());
808 if (!fConversionCuts->dEdxCuts(posTrack)) {
813 if(!fConversionCuts->dEdxCuts(negTrack)) {
817 fConversionCuts->FillV0EtaAfterdEdxCuts(fCurrentV0->Eta());
822 AliKFParticle fCurrentNegativeKFParticle(*(fCurrentExternalTrackParamNegative),11);
824 AliKFParticle fCurrentPositiveKFParticle(*(fCurrentExternalTrackParamPositive),-11);
830 if(fUseConstructGamma){
832 fCurrentMotherKF->
ConstructGamma(fCurrentNegativeKFParticle,fCurrentPositiveKFParticle);
835 fCurrentMotherKF->SetMassConstraint(0,0.0001);
840 fCurrentMotherKF->
SetTrackLabels(currentTrackLabels[0],currentTrackLabels[1]);
856 TParticle *fNegativeMCParticle = 0x0;
857 if(labeln>-1) fNegativeMCParticle = fMCEvent->Particle(labeln);
858 TParticle *fPositiveMCParticle = 0x0;
859 if(labelp>-1) fPositiveMCParticle = fMCEvent->Particle(labelp);
861 if(fPositiveMCParticle&&fNegativeMCParticle){
869 if(fUseImprovedVertex == kTRUE){
870 AliKFVertex primaryVertexImproved(*fInputEvent->GetPrimaryVertex());
872 primaryVertexImproved+=*fCurrentMotherKF;
873 fCurrentMotherKF->SetProductionVertex(primaryVertexImproved);
877 if (fImprovedPsiPair == 0){
878 Double_t PsiPair=GetPsiPair(fCurrentV0,fCurrentExternalTrackParamPositive,fCurrentExternalTrackParamNegative, convpos);
884 if(fUseOwnXYZCalculation){
886 if(!GetConversionPoint(fCurrentExternalTrackParamPositive,fCurrentExternalTrackParamNegative,convpos,dca)){
888 delete fCurrentMotherKF;
889 fCurrentMotherKF=NULL;
898 if (fImprovedPsiPair >= 1){
900 Double_t PsiPair=GetPsiPair(fCurrentV0,fCurrentExternalTrackParamPositive,fCurrentExternalTrackParamNegative,convpos);
905 if(fCurrentMotherKF->GetNDF() > 0.)
906 fCurrentMotherKF->
SetChi2perNDF(fCurrentMotherKF->GetChi2()/fCurrentMotherKF->GetNDF());
910 fCurrentMotherKF->
SetMass(fCurrentMotherKF->
M());
913 Double_t mass=-99.0, mass_width=-99.0, Pt=-99.0, Pt_width=-99.0;
914 AliKFParticle fCurrentMotherKFForMass(fCurrentNegativeKFParticle,fCurrentPositiveKFParticle);
915 fCurrentMotherKFForMass.GetMass(mass,mass_width);
916 fCurrentMotherKFForMass.GetPt(Pt,Pt_width);
917 fCurrentInvMassPair=
mass;
920 if (!fConversionCuts->KappaCuts(fCurrentMotherKF,fInputEvent)){
922 delete fCurrentMotherKF;
923 fCurrentMotherKF=NULL;
928 if(!fConversionCuts->PhotonCuts(fCurrentMotherKF,fInputEvent)){
930 delete fCurrentMotherKF;
931 fCurrentMotherKF=NULL;
937 if(fProduceImpactParamHistograms) FillImpactParamHistograms(posTrack, negTrack, fCurrentV0, fCurrentMotherKF);
940 return fCurrentMotherKF;
949 AliExternalTrackParam nt(*negativeparam);
950 AliExternalTrackParam pt(*positiveparam);
952 Float_t magField = fInputEvent->GetMagneticField();
955 if (fImprovedPsiPair==0 ) {
956 v0->GetXYZ(xyz[0],xyz[1],xyz[2]);
957 }
else if (fImprovedPsiPair>=1 ) {
1024 v0->GetNPxPyPz(mn[0],mn[1],mn[2]);
1025 v0->GetPPxPyPz(mp[0],mp[1],mp[2]);
1028 deltat = TMath::ATan(mp[2]/(TMath::Sqrt(mp[0]*mp[0] + mp[1]*mp[1])+1.e-13)) - TMath::ATan(mn[2]/(TMath::Sqrt(mn[0]*mn[0] + mn[1]*mn[1])+1.e-13));
1029 Double_t radiussum = TMath::Sqrt(xyz[0]*xyz[0] + xyz[1]*xyz[1]) + 50;
1040 if (fImprovedPsiPair==1 || fImprovedPsiPair==0 ){
1041 if(nt.PropagateTo(radiussum,magField) == 0)
return psiPair;
1042 if(pt.PropagateTo(radiussum,magField) == 0)
return psiPair;
1044 pt.GetPxPyPz(momPosProp);
1045 nt.GetPxPyPz(momNegProp);
1046 }
else if (fImprovedPsiPair>=2) {
1047 momPosProp[0] = pt.GetParameterAtRadius(radiussum,magField,3);
1048 momPosProp[1] = pt.GetParameterAtRadius(radiussum,magField,4);
1049 momPosProp[2] = pt.GetParameterAtRadius(radiussum,magField,5);
1051 momNegProp[0] = nt.GetParameterAtRadius(radiussum,magField,3);
1052 momNegProp[1] = nt.GetParameterAtRadius(radiussum,magField,4);
1053 momNegProp[2] = nt.GetParameterAtRadius(radiussum,magField,5);
1054 pEle = TMath::Sqrt(momNegProp[0]*momNegProp[0]+momNegProp[1]*momNegProp[1]+momNegProp[2]*momNegProp[2]);
1056 pPos = TMath::Sqrt(momPosProp[0]*momPosProp[0]+momPosProp[1]*momPosProp[1]+momPosProp[2]*momPosProp[2]);
1058 if ( (pEle==0 || pPos==0) && fImprovedPsiPair==3) {
1059 radiussum = TMath::Sqrt(xyz[0]*xyz[0] + xyz[1]*xyz[1]) + 30;
1060 momPosProp[0] = pt.GetParameterAtRadius(radiussum,magField,3);
1061 momPosProp[1] = pt.GetParameterAtRadius(radiussum,magField,4);
1062 momPosProp[2] = pt.GetParameterAtRadius(radiussum,magField,5);
1064 momNegProp[0] = nt.GetParameterAtRadius(radiussum,magField,3);
1065 momNegProp[1] = nt.GetParameterAtRadius(radiussum,magField,4);
1066 momNegProp[2] = nt.GetParameterAtRadius(radiussum,magField,5);
1071 pEle = TMath::Sqrt(momNegProp[0]*momNegProp[0]+momNegProp[1]*momNegProp[1]+momNegProp[2]*momNegProp[2]);
1072 pPos = TMath::Sqrt(momPosProp[0]*momPosProp[0]+momPosProp[1]*momPosProp[1]+momPosProp[2]*momPosProp[2]);
1075 momPosProp[0]*momNegProp[0]+momPosProp[1]*momNegProp[1]+momPosProp[2]*momNegProp[2];
1077 if (pEle==0 || pPos==0)
return psiPair;
1080 Double_t chipair = TMath::ACos(scalarproduct/(pEle*pPos));
1083 psiPair = TMath::ASin(deltat/chipair);
1093 Double_t b=fInputEvent->GetMagneticField();
1096 track->GetHelixParameters(helix,b);
1100 Double_t radius = TMath::Abs(1./helix[4]);
1104 phi = phi + 2*TMath::Pi();
1107 phi -= TMath::Pi()/2.;
1108 Double_t xpoint = radius * TMath::Cos(phi);
1109 Double_t ypoint = radius * TMath::Sin(phi);
1123 center[0] = xpos + xpoint;
1124 center[1] = ypos + ypoint;
1133 if(!pparam||!nparam)
return kFALSE;
1136 GetHelixCenter(pparam,helixcenterpos);
1139 GetHelixCenter(nparam,helixcenterneg);
1142 pparam->GetHelixParameters(helixpos,fInputEvent->GetMagneticField());
1143 Double_t posradius = TMath::Abs(1./helixpos[4]);
1146 nparam->GetHelixParameters(helixneg,fInputEvent->GetMagneticField());
1147 Double_t negradius = TMath::Abs(1./helixneg[4]);
1156 convpos[0] = (xpos*negradius + xneg*posradius)/(negradius+posradius);
1157 convpos[1] = (ypos*negradius+ yneg*posradius)/(negradius+posradius);
1162 Double_t deltaXPos = convpos[0] - xpos;
1163 Double_t deltaYPos = convpos[1] - ypos;
1165 Double_t deltaXNeg = convpos[0] - xneg;
1166 Double_t deltaYNeg = convpos[1] - yneg;
1168 Double_t alphaPos = TMath::Pi() + TMath::ATan2(-deltaYPos,-deltaXPos);
1169 Double_t alphaNeg = TMath::Pi() + TMath::ATan2(-deltaYNeg,-deltaXNeg);
1171 Double_t vertexXNeg = xneg + TMath::Abs(negradius)*TMath::Cos(alphaNeg);
1172 Double_t vertexYNeg = yneg + TMath::Abs(negradius)*TMath::Sin(alphaNeg);
1174 Double_t vertexXPos = xpos + TMath::Abs(posradius)*TMath::Cos(alphaPos);
1175 Double_t vertexYPos = ypos + TMath::Abs(posradius)*TMath::Sin(alphaPos);
1177 AliExternalTrackParam p(*pparam);
1178 AliExternalTrackParam n(*nparam);
1180 TVector2 vertexPos(vertexXPos,vertexYPos);
1181 TVector2 vertexNeg(vertexXNeg,vertexYNeg);
1184 TVector2 vertexPosRot=vertexPos.Rotate(-p.GetAlpha());
1185 TVector2 vertexNegRot=vertexNeg.Rotate(-n.GetAlpha());
1189 if(!p.PropagateTo(vertexPosRot.X(),fInputEvent->GetMagneticField()))
return kFALSE;
1190 if(!n.PropagateTo(vertexNegRot.X(),fInputEvent->GetMagneticField()))
return kFALSE;
1194 if(TMath::Abs(vertexPos.Mod()-TMath::Sqrt(p.GetX()*p.GetX()+p.GetY()*p.GetY()))>0.01)
return kFALSE;
1195 if(TMath::Abs(vertexNeg.Mod()-TMath::Sqrt(n.GetX()*n.GetX()+n.GetY()*n.GetY()))>0.01)
return kFALSE;
1199 convpos[2] = (p.GetZ()*negradius+n.GetZ()*posradius)/(negradius+posradius);
1202 TVector2 vdca=vertexPos-vertexNeg;
1204 dca[1]=TMath::Abs(n.GetZ()-p.GetZ());
1218 if(fConversionGammas == NULL){
1219 fConversionGammas =
new TClonesArray(
"AliAODConversionPhoton",100);
1221 fConversionGammas->Delete();
1227 TClonesArray *fInputGammas=
dynamic_cast<TClonesArray*
>(fAODEvent->FindListObject(fDeltaAODBranchName.Data()));
1230 FindDeltaAODBranchName();
1231 fInputGammas=
dynamic_cast<TClonesArray*
>(fAODEvent->FindListObject(fDeltaAODBranchName.Data()));}
1232 if(!fInputGammas){AliError(
"No Gamma Satellites found");
return kFALSE;}
1235 for(
Int_t i=0;i<fInputGammas->GetEntriesFast();i++){
1238 if(fRelabelAODs)RelabelAODPhotonCandidates(gamma);
1239 if(fConversionCuts->PhotonIsSelected(gamma,fInputEvent)){
1246 if(fConversionGammas->GetEntries()){
return kTRUE;}
1256 TList *list=fInputEvent->GetList();
1257 for(
Int_t ii=0;ii<list->GetEntries();ii++){
1258 TString name((list->At(ii))->GetName());
1259 if(name.BeginsWith(fDeltaAODBranchName)&&name.EndsWith(
"gamma")){
1260 fDeltaAODBranchName=name;
1261 AliInfo(Form(
"Set DeltaAOD BranchName to: %s",fDeltaAODBranchName.Data()));
1270 if(fPreviousV0ReaderPerformsAODRelabeling == 2)
return;
1271 else if(fPreviousV0ReaderPerformsAODRelabeling == 0){
1272 printf(
"Running AODs! Determine if V0Reader '%s' should perform relabeling\n",this->GetName());
1274 Int_t iPosition = obj->IndexOf(
this);
1275 Bool_t prevV0ReaderRunningButNotRelabeling = kFALSE;
1276 for(
Int_t i=iPosition-1; i>=0; i--){
1277 if( (obj->At(i))->IsA() == AliV0ReaderV1::Class()){
1280 fPreviousV0ReaderPerformsAODRelabeling = 2;
1281 prevV0ReaderRunningButNotRelabeling = kFALSE;
1282 printf(
"V0Reader '%s' is running before this V0Reader '%s': do _NOT_ relabel AODs by current reader!\n",tempReader->GetName(),this->GetName());
1284 }
else prevV0ReaderRunningButNotRelabeling = kTRUE;
1287 if(prevV0ReaderRunningButNotRelabeling) AliFatal(Form(
"There are V0Readers before '%s', but none of them is relabeling!",this->GetName()));
1289 if(fPreviousV0ReaderPerformsAODRelabeling == 2)
return;
1291 printf(
"This V0Reader '%s' is first to be processed: do relabel AODs by current reader!\n",this->GetName());
1292 fPreviousV0ReaderPerformsAODRelabeling = 1;
1296 if(fPreviousV0ReaderPerformsAODRelabeling != 1) AliFatal(Form(
"In %s: fPreviousV0ReaderPerformsAODRelabeling = '%i' - while it should be impossible it is something different than '1'!",this->GetName(),fPreviousV0ReaderPerformsAODRelabeling));
1301 Bool_t AODLabelPos = kFALSE;
1302 Bool_t AODLabelNeg = kFALSE;
1304 for(
Int_t i = 0; i<fInputEvent->GetNumberOfTracks();i++){
1305 AliAODTrack *tempDaughter =
static_cast<AliAODTrack*
>(fInputEvent->GetTrack(i));
1310 AODLabelPos = kTRUE;
1317 AODLabelNeg = kTRUE;
1320 if(AODLabelNeg && AODLabelPos){
1324 if(!AODLabelPos || !AODLabelNeg){
1357 if(fInputEvent->IsA()==AliESDEvent::Class()){
1358 static AliESDtrackCuts *EsdTrackCuts = 0x0;
1359 static int prevRun = -1;
1361 Int_t runNumber = fInputEvent->GetRunNumber();
1363 if (prevRun!=runNumber) {
1364 delete EsdTrackCuts;
1366 prevRun = runNumber;
1368 if (!EsdTrackCuts) {
1370 if( (runNumber<=146860) || (runNumber>=197470 && runNumber<=197692) || (runNumber>=172440 && runNumber<=193766) ){
1371 EsdTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010();
1373 }
else if (runNumber>=209122){
1376 EsdTrackCuts =
new AliESDtrackCuts();
1378 EsdTrackCuts->AliESDtrackCuts::SetMinNCrossedRowsTPC(70);
1379 EsdTrackCuts->AliESDtrackCuts::SetMinRatioCrossedRowsOverFindableClustersTPC(0.8);
1380 EsdTrackCuts->SetCutGeoNcrNcl(2., 130., 1.5, 0.0, 0.0);
1382 EsdTrackCuts->AliESDtrackCuts::SetMaxChi2PerClusterTPC(4);
1383 EsdTrackCuts->AliESDtrackCuts::SetAcceptKinkDaughters(kFALSE);
1384 EsdTrackCuts->AliESDtrackCuts::SetRequireTPCRefit(kTRUE);
1386 EsdTrackCuts->AliESDtrackCuts::SetRequireITSRefit(kTRUE);
1387 EsdTrackCuts->AliESDtrackCuts::SetClusterRequirementITS(AliESDtrackCuts::kSPD,
1388 AliESDtrackCuts::kAny);
1389 EsdTrackCuts->AliESDtrackCuts::SetMaxDCAToVertexXYPtDep(
"0.0105+0.0350/pt^1.1");
1390 EsdTrackCuts->AliESDtrackCuts::SetMaxChi2TPCConstrainedGlobal(36);
1391 EsdTrackCuts->AliESDtrackCuts::SetMaxDCAToVertexZ(2);
1392 EsdTrackCuts->AliESDtrackCuts::SetDCAToVertex2D(kFALSE);
1393 EsdTrackCuts->AliESDtrackCuts::SetRequireSigmaToVertex(kFALSE);
1394 EsdTrackCuts->AliESDtrackCuts::SetMaxChi2PerClusterITS(36);
1397 EsdTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011();
1399 EsdTrackCuts->SetMaxDCAToVertexZ(2);
1400 EsdTrackCuts->SetEtaRange(-0.8, 0.8);
1401 EsdTrackCuts->SetPtRange(0.15);
1403 fNumberOfPrimaryTracks = 0;
1404 for(
Int_t iTracks = 0; iTracks < fInputEvent->GetNumberOfTracks(); iTracks++){
1405 AliESDtrack* curTrack = (AliESDtrack*) fInputEvent->GetTrack(iTracks);
1406 if(!curTrack)
continue;
1407 if(!EsdTrackCuts->AcceptTrack(curTrack))
continue;
1409 fNumberOfPrimaryTracks++;
1412 else if(fInputEvent->IsA()==AliAODEvent::Class()){
1413 fNumberOfPrimaryTracks = 0;
1414 for(
Int_t iTracks = 0; iTracks<fInputEvent->GetNumberOfTracks(); iTracks++){
1415 AliAODTrack* curTrack = (AliAODTrack*) fInputEvent->GetTrack(iTracks);
1416 if(curTrack->GetID()<0)
continue;
1417 if(!curTrack->IsHybridGlobalConstrainedGlobal())
continue;
1418 if(TMath::Abs(curTrack->Eta())>0.8)
continue;
1419 if(curTrack->Pt()<0.15)
continue;
1422 fNumberOfPrimaryTracks++;
1431 fNumberOfTPCoutTracks = 0;
1433 for (
Int_t itrk = 0; itrk < fInputEvent->GetNumberOfTracks(); itrk++) {
1434 AliVTrack *trk =
dynamic_cast<AliVTrack*
>(fInputEvent->GetTrack(itrk));
1438 if (!(trk->Pt() < 0.15) && (TMath::Abs(trk->Eta()) < 0.8)) {
1439 if ((trk->GetStatus() & AliVTrack::kTPCout) == AliVTrack::kTPCout) {
1440 fNumberOfTPCoutTracks++;
1452 if(!mcEvent)
return kFALSE;
1454 if (particle->GetPdgCode() == 22){
1456 if( TMath::Abs(particle->Eta()) > etaMax )
return kFALSE;
1458 if(particle->GetMother(0) >-1 && mcEvent->Particle(particle->GetMother(0))->GetPdgCode() == 22){
1462 TParticle* ePos = NULL;
1463 TParticle* eNeg = NULL;
1464 if(particle->GetNDaughters() >= 2){
1465 for(
Int_t daughterIndex=particle->GetFirstDaughter();daughterIndex<=particle->GetLastDaughter();daughterIndex++){
1466 if(daughterIndex<0)
continue;
1467 TParticle *tmpDaughter = mcEvent->Particle(daughterIndex);
1468 if(tmpDaughter->GetUniqueID() == 5){
1469 if(tmpDaughter->GetPdgCode() == 11){
1471 }
else if(tmpDaughter->GetPdgCode() == -11){
1477 if(ePos == NULL || eNeg == NULL){
1481 if( TMath::Abs(ePos->Eta()) > etaMax ||
1482 TMath::Abs(eNeg->Eta()) > etaMax )
1486 if(ePos->R() > rMax){
1489 if(TMath::Abs(ePos->Vz()) > zMax){
1492 if(TMath::Abs(eNeg->Vz()) > zMax){
1497 Double_t lineCutZRSlope = tan(2*atan(exp(-etaMax)));
1499 if( ePos->R() <= ((TMath::Abs(ePos->Vz()) * lineCutZRSlope) - lineCutZValue)){
1502 if( eNeg->R() <= ((TMath::Abs(eNeg->Vz()) * lineCutZRSlope) - lineCutZValue)){
1505 if (ePos->Pt() < 0.05 || eNeg->Pt() < 0.05){
1516 const AliVVertex* primVtxMC = fMCEvent->GetPrimaryVertex();
1517 Double_t mcProdVtxX = primVtxMC->GetX();
1518 Double_t mcProdVtxY = primVtxMC->GetY();
1519 Double_t mcProdVtxZ = primVtxMC->GetZ();
1523 for(Long_t i = 0; i < fMCEvent->GetNumberOfTracks(); i++) {
1524 if (fEventCuts->IsConversionPrimaryESD( fMCEvent, i, mcProdVtxX, mcProdVtxY, mcProdVtxZ)){
1526 TParticle* particle = (TParticle *)fMCEvent->Particle(i);
1527 if (!particle)
continue;
1528 if (ParticleIsConvertedPhoton(fMCEvent, particle, 0.9, 180.,250. )){
1529 if(particle->GetFirstDaughter()<0)
continue;
1530 TParticle *tmpDaughter = fMCEvent->Particle(particle->GetFirstDaughter());
1531 if (!tmpDaughter)
continue;
1532 fHistoMCGammaPtvsR->Fill(particle->Pt(),tmpDaughter->R());
1533 fHistoMCGammaPtvsPhi->Fill(particle->Pt(),particle->Phi());
1534 fHistoMCGammaRvsPhi->Fill(tmpDaughter->R(),particle->Phi());
1536 if (ParticleIsConvertedPhoton(fMCEvent, particle, 1.4, 180.,250. )){
1537 if(particle->GetFirstDaughter()<0)
continue;
1538 TParticle *tmpDaughter = fMCEvent->Particle(particle->GetFirstDaughter());
1539 if (!tmpDaughter)
continue;
1540 fHistoMCGammaPtvsEta->Fill(particle->Pt(),particle->Eta());
1541 fHistoMCGammaRvsEta->Fill(tmpDaughter->R(),particle->Eta());
1542 fHistoMCGammaPhivsEta->Fill(particle->Phi(),particle->Eta());
1551 const AliVVertex* primVtxMC = fMCEvent->GetPrimaryVertex();
1552 Double_t mcProdVtxX = primVtxMC->GetX();
1553 Double_t mcProdVtxY = primVtxMC->GetY();
1554 Double_t mcProdVtxZ = primVtxMC->GetZ();
1557 Int_t tracklabelPos=currentV0->GetPindex();
1558 Int_t tracklabelNeg=currentV0->GetNindex();
1560 Int_t labelp=TMath::Abs(fConversionCuts->GetTrack(fInputEvent,tracklabelPos)->GetLabel());
1561 Int_t labeln=TMath::Abs(fConversionCuts->GetTrack(fInputEvent,tracklabelNeg)->GetLabel());
1563 TParticle* negPart = 0x0;
1564 if(labeln>-1) negPart = (TParticle *)fMCEvent->Particle(labeln);
1565 TParticle* posPart = 0x0;
1566 if(labelp>-1) posPart = (TParticle *)fMCEvent->Particle(labelp);
1568 if ( negPart == NULL || posPart == NULL )
return;
1571 Long_t motherlabelNeg = negPart->GetFirstMother();
1572 Long_t motherlabelPos = posPart->GetFirstMother();
1575 if (motherlabelNeg>-1 && motherlabelNeg == motherlabelPos && negPart->GetFirstMother() != -1){
1576 if (fEventCuts->IsConversionPrimaryESD( fMCEvent, negPart->GetFirstMother(), mcProdVtxX, mcProdVtxY, mcProdVtxZ)){
1578 TParticle* mother = (TParticle *)fMCEvent->Particle(motherlabelNeg);
1579 if (mother->GetPdgCode() == 22 ){
1580 if (!CheckVectorForDoubleCount(fVectorFoundGammas,motherlabelNeg ) ){
1581 if (ParticleIsConvertedPhoton(fMCEvent, mother, 0.9, 180.,250. )){
1582 fHistoRecMCGammaPtvsR->Fill(mother->Pt(),negPart->R());
1583 fHistoRecMCGammaPtvsPhi->Fill(mother->Pt(),mother->Phi());
1584 fHistoRecMCGammaRvsPhi->Fill(negPart->R(),mother->Phi());
1586 if (ParticleIsConvertedPhoton(fMCEvent, mother, 1.4, 180.,250. )){
1587 fHistoRecMCGammaPtvsEta->Fill(mother->Pt(),mother->Eta());
1588 fHistoRecMCGammaRvsEta->Fill(negPart->R(),mother->Eta());
1589 fHistoRecMCGammaPhivsEta->Fill(mother->Phi(),mother->Eta());
1593 if (ParticleIsConvertedPhoton(fMCEvent, mother, 0.9, 180.,250. )){
1594 fHistoRecMCGammaMultiPt->Fill(mother->Pt());
1595 fHistoRecMCGammaMultiPhi->Fill(mother->Phi());
1596 fHistoRecMCGammaMultiR->Fill(negPart->R());
1598 if (ParticleIsConvertedPhoton(fMCEvent, mother, 1.4, 180.,250. )){
1599 fHistoRecMCGammaMultiPtvsEta->Fill(mother->Pt(),mother->Eta());
1617 Int_t kMaxTPCV0Conflicts = 1;
1621 fCurrentV0->GetXYZ(convX,convY,convZ);
1622 Double_t convR = TMath::Sqrt(convX*convX+convY*convY);
1630 fHistoImpactParameterStudy->Fill(0);
1633 AliESDtrack* positiveTrack = (AliESDtrack*) pTrack;
1634 AliESDtrack* negativeTrack = (AliESDtrack*) nTrack;
1636 if (!positiveTrack->IsOn(AliESDtrack::kITSin) && !negativeTrack->IsOn(AliESDtrack::kITSin)){
1637 fHistoImpactParameterStudy->Fill(1);
1641 Bool_t RemovedByZcut = kFALSE;
1642 Bool_t RemovedByYcut = kFALSE;
1647 if(((TMath::Abs(positiveTrack->GetZ()))>fZmax) || ((TMath::Abs(negativeTrack->GetZ()))>fZmax)){
1648 fHistoImpactParameterStudy->Fill(2);
1649 RemovedByZcut=kTRUE;
1653 if(((TMath::Abs(positiveTrack->GetY()))>fYmax) || ((TMath::Abs(negativeTrack->GetY()))>fYmax)){
1654 fHistoImpactParameterStudy->Fill(3);
1655 RemovedByYcut=kTRUE;
1660 Bool_t RemovedByCausality=kFALSE;
1663 85.225, 85.975, 86.725, 87.475, 88.225, 88.975, 89.725, 90.475, 91.225, 91.975, 92.725, 93.475, 94.225, 94.975, 95.725,
1664 96.475, 97.225, 97.975, 98.725, 99.475,100.225,100.975,101.725,102.475,103.225,103.975,104.725,105.475,106.225,106.975,
1665 107.725,108.475,109.225,109.975,110.725,111.475,112.225,112.975,113.725,114.475,115.225,115.975,116.725,117.475,118.225,
1666 118.975,119.725,120.475,121.225,121.975,122.725,123.475,124.225,124.975,125.725,126.475,127.225,127.975,128.725,129.475,
1667 130.225,130.975,131.725,135.100,136.100,137.100,138.100,139.100,140.100,141.100,142.100,143.100,144.100,145.100,146.100,
1668 147.100,148.100,149.100,150.100,151.100,152.100,153.100,154.100,155.100,156.100,157.100,158.100,159.100,160.100,161.100,
1669 162.100,163.100,164.100,165.100,166.100,167.100,168.100,169.100,170.100,171.100,172.100,173.100,174.100,175.100,176.100,
1670 177.100,178.100,179.100,180.100,181.100,182.100,183.100,184.100,185.100,186.100,187.100,188.100,189.100,190.100,191.100,
1671 192.100,193.100,194.100,195.100,196.100,197.100,198.100,199.350,200.850,202.350,203.850,205.350,206.850,208.350,209.850,
1672 211.350,212.850,214.350,215.850,217.350,218.850,220.350,221.850,223.350,224.850,226.350,227.850,229.350,230.850,232.350,
1673 233.850,235.350,236.850,238.350,239.850,241.350,242.850,244.350,245.850};
1676 fHistoR->Fill(convR);
1677 fHistoRrecalc->Fill(convRrecalc);
1678 Double_t alpha = TMath::ATan2(convY,convX);
1679 if (alpha<0) alpha += TMath::Pi()*2;
1680 Int_t sec = alpha/(TMath::Pi()/9);
1681 alpha = (10.+sec*20.)*TMath::DegToRad();
1684 Double_t xsV0 = convX*cs - convY*sn;
1685 fHistoRviaAlpha->Fill(xsV0);
1686 Double_t alpha_r = TMath::ATan2(convYrecalc,convXrecalc);
1687 if (alpha_r<0) alpha_r += TMath::Pi()*2;
1688 Int_t sec_r = alpha_r/(TMath::Pi()/9);
1689 alpha_r = (10.+sec_r*20.)*TMath::DegToRad();
1690 Double_t cs_r = TMath::Cos(alpha_r);
1691 Double_t sn_r = TMath::Sin(alpha_r);
1692 Double_t xsV0_r = convXrecalc*cs_r - convYrecalc*sn_r;
1693 fHistoRviaAlphaRecalc->Fill(xsV0_r);
1696 fHistoImpactParameterStudy->Fill(4);
1698 for (
Int_t it=2;it--;) {
1699 Int_t trId = fCurrentV0->GetIndex(it);
1700 AliESDtrack* tr = fESDEvent->GetTrack(trId);
1701 const TBits& bits = tr->GetTPCClusterMap();
1702 Int_t nConflict = 0;
1703 for (
Int_t ic=0;ic<159;ic++) {
1704 if (rTPC[ic]>(xsV0-kTPCMargin))
break;
1705 if (bits.TestBitNumber(ic)){
1707 fHistoRdiff->Fill(xsV0-rTPC[ic]);
1709 if (nConflict>kMaxTPCV0Conflicts) {
1710 fHistoImpactParameterStudy->Fill(5);
1711 RemovedByCausality=kTRUE;
1719 Bool_t RemovedByAnyCut=kFALSE;
1720 if(RemovedByZcut||RemovedByYcut||RemovedByCausality){
1721 fHistoImpactParameterStudy->Fill(6);
1722 RemovedByAnyCut=kTRUE;
1735 fImpactParamTree->Branch(
"posPt",&posPt,
"posPt/F");
1736 fImpactParamTree->Branch(
"posY",&posY,
"posY/F");
1737 fImpactParamTree->Branch(
"R",&R,
"R/F");
1738 posZ = positiveTrack->GetZ();
1739 posY = positiveTrack->GetY();
1740 posX = positiveTrack->GetX();
1741 posPt = positiveTrack->Pt();
1742 negZ = negativeTrack->GetZ();
1743 negY = negativeTrack->GetY();
1744 negX = negativeTrack->GetX();
1745 negPt = negativeTrack->Pt();
1747 fImpactParamTree->Fill();
1750 fHistoPosTrackImpactParamZ->Fill(posZ);
1751 fHistoPosTrackImpactParamY->Fill(posY);
1752 fHistoPosTrackImpactParamX->Fill(posX);
1753 fHistoPosTrackImpactParamZvsPt->Fill(posPt, posZ);
1754 fHistoPosTrackImpactParamYvsPt->Fill(posPt, posY);
1755 fHistoPosTrackImpactParamXvsPt->Fill(posPt, posX);
1756 fHistoNegTrackImpactParamZ->Fill(negZ);
1757 fHistoNegTrackImpactParamY->Fill(negY);
1758 fHistoNegTrackImpactParamX->Fill(negX);
1759 fHistoNegTrackImpactParamZvsPt->Fill(negPt, negZ);
1760 fHistoNegTrackImpactParamYvsPt->Fill(negPt, negY);
1761 fHistoNegTrackImpactParamXvsPt->Fill(negPt, negX);
1764 fHistoPt->Fill(positiveTrack->Pt());
1765 fHistoImpactParamZvsR->Fill(convZrecalc,convRrecalc);
1773 fHistoDCAzPhoton->Fill(DCAzPhoton);
1774 if(!RemovedByAnyCut) {
1775 fHistoPt2->Fill(positiveTrack->Pt());
1776 fHistoImpactParamZvsR2->Fill(convZrecalc,convRrecalc);
1777 fHistoDCAzPhoton2->Fill(DCAzPhoton);
1786 if(tobechecked > -1)
1788 vector<Int_t>::iterator it;
1789 it = find (vec.begin(), vec.end(), tobechecked);
1790 if (it != vec.end())
return true;
1799 if(tobechecked > -1)
1801 vector<Int_t>::iterator it;
1802 it = find (vec.begin(), vec.end(), tobechecked);
1803 if (it != vec.end())
return true;
1805 vec.push_back(tobechecked);
1821 fCurrentIndex(position),
Int_t IsReaderPerformingRelabeling()
Direction_t fDirection
Iterator in forward direction.
anchored LHC16s pass 1 - jet-jet MC in EPOSLHC
Bool_t ParticleIsConvertedPhoton(AliMCEvent *mcEvent, TParticle *particle, Double_t etaMax, Double_t rMax, Double_t zMax)
anchored LHC13[d-e] pass 2 - JJ
void FindDeltaAODBranchName()
void SetConversionPoint(Double_t convpoint[3])
Bool_t CheckVectorForDoubleCount(vector< Int_t > &vec, Int_t tobechecked)
void SetMCLabelNegative(Int_t label)
Bool_t AreAODsRelabeled()
const AliV0ReaderV1 * fkData
V0 reader used to iterate over.
void CreatePureMCHistosForV0FinderEffiESD()
AliConversionPhotonBase * operator*()
Double_t GetConversionZ() const
Float_t GetDCAzToPrimVtx() const
Double_t GetPsiPair(const AliESDv0 *v0, const AliExternalTrackParam *positiveparam, const AliExternalTrackParam *negativeparam, const Double_t convpos[3]) const
void FillRecMCHistosForV0FinderEffiESD(AliESDv0 *currentV0)
Bool_t CheckVectorOnly(vector< Int_t > &vec, Int_t tobechecked)
anchored LHC16f pass 1 low B-field - Pythia8 JJ
anchored LHC13g pass 1 - JJ
anchored LHC13g pass 1 - JJ
int fCurrentIndex
Index of the current element.
anchored LHC17p/q pass 1 - jet-jet MC w/GEANT3,
Bool_t ProcessEvent(AliVEvent *inputEvent, AliMCEvent *mcEvent=NULL)
void SetMCLabelPositive(Int_t label)
Int_t GetTrackLabelNegative() const
void ConstructGamma(const AliKFParticle &fCurrentNegativeKFParticle, const AliKFParticle &fCurrentPositiveKFParticle)
Int_t GetTrackLabelPositive() const
void SetV0Index(Int_t index)
void SetInvMassPair(Float_t mass)
iterator(const AliV0ReaderV1 *reader, Direction_t dir, int position)
Bool_t GetHelixCenter(const AliExternalTrackParam *track, Double_t center[2])
void RelabelAODPhotonCandidates(AliAODConversionPhoton *PhotonCandidate)
void SetChi2perNDF(Float_t chi2)
anchored LHC13[d-e] pass 2 - GJ
Bool_t Data(TH1F *h, Double_t *rangefit, Bool_t writefit, Double_t &sgn, Double_t &errsgn, Double_t &bkg, Double_t &errbkg, Double_t &sgnf, Double_t &errsgnf, Double_t &sigmafit, Int_t &status)
anchored LHC12[a-h] pass 2 - JJ
anchored LHC16r pass 1 - jet-jet MC in EPOSLHC
iterator & operator=(const iterator &other)
void SetMass(Float_t mass)
Double_t GetConversionY() const
anchored LHC13[d-e] pass 2 - JJ
void SetTrackLabels(Int_t label1, Int_t label2)
anchored LHC11a pass 4 - JJ
virtual void Terminate(Option_t *)
const AliExternalTrackParam * GetExternalTrackParam(AliESDv0 *fCurrentV0, Int_t &tracklabel, Int_t charge)
anchored LHC13g pass 1 - JJ
AliKFConversionPhoton * ReconstructV0(AliESDv0 *fCurrentV0, Int_t currentV0Index)
void SetLabelPositive(Int_t label)
Track labels.
void SetLabelNegative(Int_t label)
bool operator!=(iterator &other) const
TFile * file
TList with histograms for a given trigger.
void SetPsiPair(Float_t PsiPair)
void FillImpactParamHistograms(AliVTrack *ptrack, AliVTrack *ntrack, AliESDv0 *fCurrentV0, AliKFConversionPhoton *fCurrentMotherKF)
AliConversionPhotonBase * operator[](int index) const
Array index operator.
anchored LHC11a pass 4 - JJ
anchored LHC16x pass 1 nom B-field - Pythia8 JJ
Bool_t GetConversionPoint(const AliExternalTrackParam *pparam, const AliExternalTrackParam *nparam, Double_t convpos[3], Double_t dca[2])
Bool_t GetAODConversionGammas()
void UserCreateOutputObjects()
virtual void UserExec(Option_t *option)
Double_t GetConversionRadius() const
Double_t GetConversionX() const