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());
813 AliKFParticle fCurrentNegativeKFParticle(*(fCurrentExternalTrackParamNegative),11);
815 AliKFParticle fCurrentPositiveKFParticle(*(fCurrentExternalTrackParamPositive),-11);
821 if(fUseConstructGamma){
823 fCurrentMotherKF->
ConstructGamma(fCurrentNegativeKFParticle,fCurrentPositiveKFParticle);
826 fCurrentMotherKF->SetMassConstraint(0,0.0001);
830 if (!fConversionCuts->dEdxCuts(posTrack,fCurrentMotherKF)) {
835 if(!fConversionCuts->dEdxCuts(negTrack,fCurrentMotherKF)) {
839 fConversionCuts->FillV0EtaAfterdEdxCuts(fCurrentV0->Eta());
844 fCurrentMotherKF->
SetTrackLabels(currentTrackLabels[0],currentTrackLabels[1]);
860 TParticle *fNegativeMCParticle = 0x0;
861 if(labeln>-1) fNegativeMCParticle = fMCEvent->Particle(labeln);
862 TParticle *fPositiveMCParticle = 0x0;
863 if(labelp>-1) fPositiveMCParticle = fMCEvent->Particle(labelp);
865 if(fPositiveMCParticle&&fNegativeMCParticle){
873 if(fUseImprovedVertex == kTRUE){
874 AliKFVertex primaryVertexImproved(*fInputEvent->GetPrimaryVertex());
876 primaryVertexImproved+=*fCurrentMotherKF;
877 fCurrentMotherKF->SetProductionVertex(primaryVertexImproved);
881 if (fImprovedPsiPair == 0){
882 Double_t PsiPair=GetPsiPair(fCurrentV0,fCurrentExternalTrackParamPositive,fCurrentExternalTrackParamNegative, convpos);
888 if(fUseOwnXYZCalculation){
890 if(!GetConversionPoint(fCurrentExternalTrackParamPositive,fCurrentExternalTrackParamNegative,convpos,dca)){
892 delete fCurrentMotherKF;
893 fCurrentMotherKF=NULL;
902 if (fImprovedPsiPair >= 1){
904 Double_t PsiPair=GetPsiPair(fCurrentV0,fCurrentExternalTrackParamPositive,fCurrentExternalTrackParamNegative,convpos);
909 if(fCurrentMotherKF->GetNDF() > 0.)
910 fCurrentMotherKF->
SetChi2perNDF(fCurrentMotherKF->GetChi2()/fCurrentMotherKF->GetNDF());
914 fCurrentMotherKF->
SetMass(fCurrentMotherKF->
M());
917 Double_t mass=-99.0, mass_width=-99.0, Pt=-99.0, Pt_width=-99.0;
918 AliKFParticle fCurrentMotherKFForMass(fCurrentNegativeKFParticle,fCurrentPositiveKFParticle);
919 fCurrentMotherKFForMass.GetMass(mass,mass_width);
920 fCurrentMotherKFForMass.GetPt(Pt,Pt_width);
921 fCurrentInvMassPair=
mass;
924 if (!fConversionCuts->KappaCuts(fCurrentMotherKF,fInputEvent)){
926 delete fCurrentMotherKF;
927 fCurrentMotherKF=NULL;
932 if(!fConversionCuts->PhotonCuts(fCurrentMotherKF,fInputEvent)){
934 delete fCurrentMotherKF;
935 fCurrentMotherKF=NULL;
941 if(fProduceImpactParamHistograms) FillImpactParamHistograms(posTrack, negTrack, fCurrentV0, fCurrentMotherKF);
944 return fCurrentMotherKF;
953 AliExternalTrackParam nt(*negativeparam);
954 AliExternalTrackParam pt(*positiveparam);
956 Float_t magField = fInputEvent->GetMagneticField();
959 if (fImprovedPsiPair==0 ) {
960 v0->GetXYZ(xyz[0],xyz[1],xyz[2]);
961 }
else if (fImprovedPsiPair>=1 ) {
1028 v0->GetNPxPyPz(mn[0],mn[1],mn[2]);
1029 v0->GetPPxPyPz(mp[0],mp[1],mp[2]);
1032 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));
1033 Double_t radiussum = TMath::Sqrt(xyz[0]*xyz[0] + xyz[1]*xyz[1]) + 50;
1044 if (fImprovedPsiPair==1 || fImprovedPsiPair==0 ){
1045 if(nt.PropagateTo(radiussum,magField) == 0)
return psiPair;
1046 if(pt.PropagateTo(radiussum,magField) == 0)
return psiPair;
1048 pt.GetPxPyPz(momPosProp);
1049 nt.GetPxPyPz(momNegProp);
1050 }
else if (fImprovedPsiPair>=2) {
1051 momPosProp[0] = pt.GetParameterAtRadius(radiussum,magField,3);
1052 momPosProp[1] = pt.GetParameterAtRadius(radiussum,magField,4);
1053 momPosProp[2] = pt.GetParameterAtRadius(radiussum,magField,5);
1055 momNegProp[0] = nt.GetParameterAtRadius(radiussum,magField,3);
1056 momNegProp[1] = nt.GetParameterAtRadius(radiussum,magField,4);
1057 momNegProp[2] = nt.GetParameterAtRadius(radiussum,magField,5);
1058 pEle = TMath::Sqrt(momNegProp[0]*momNegProp[0]+momNegProp[1]*momNegProp[1]+momNegProp[2]*momNegProp[2]);
1060 pPos = TMath::Sqrt(momPosProp[0]*momPosProp[0]+momPosProp[1]*momPosProp[1]+momPosProp[2]*momPosProp[2]);
1062 if ( (pEle==0 || pPos==0) && fImprovedPsiPair==3) {
1063 radiussum = TMath::Sqrt(xyz[0]*xyz[0] + xyz[1]*xyz[1]) + 30;
1064 momPosProp[0] = pt.GetParameterAtRadius(radiussum,magField,3);
1065 momPosProp[1] = pt.GetParameterAtRadius(radiussum,magField,4);
1066 momPosProp[2] = pt.GetParameterAtRadius(radiussum,magField,5);
1068 momNegProp[0] = nt.GetParameterAtRadius(radiussum,magField,3);
1069 momNegProp[1] = nt.GetParameterAtRadius(radiussum,magField,4);
1070 momNegProp[2] = nt.GetParameterAtRadius(radiussum,magField,5);
1075 pEle = TMath::Sqrt(momNegProp[0]*momNegProp[0]+momNegProp[1]*momNegProp[1]+momNegProp[2]*momNegProp[2]);
1076 pPos = TMath::Sqrt(momPosProp[0]*momPosProp[0]+momPosProp[1]*momPosProp[1]+momPosProp[2]*momPosProp[2]);
1079 momPosProp[0]*momNegProp[0]+momPosProp[1]*momNegProp[1]+momPosProp[2]*momNegProp[2];
1081 if (pEle==0 || pPos==0)
return psiPair;
1084 Double_t chipair = TMath::ACos(scalarproduct/(pEle*pPos));
1087 psiPair = TMath::ASin(deltat/chipair);
1097 Double_t b=fInputEvent->GetMagneticField();
1100 track->GetHelixParameters(helix,b);
1104 Double_t radius = TMath::Abs(1./helix[4]);
1108 phi = phi + 2*TMath::Pi();
1111 phi -= TMath::Pi()/2.;
1112 Double_t xpoint = radius * TMath::Cos(phi);
1113 Double_t ypoint = radius * TMath::Sin(phi);
1127 center[0] = xpos + xpoint;
1128 center[1] = ypos + ypoint;
1137 if(!pparam||!nparam)
return kFALSE;
1140 GetHelixCenter(pparam,helixcenterpos);
1143 GetHelixCenter(nparam,helixcenterneg);
1146 pparam->GetHelixParameters(helixpos,fInputEvent->GetMagneticField());
1147 Double_t posradius = TMath::Abs(1./helixpos[4]);
1150 nparam->GetHelixParameters(helixneg,fInputEvent->GetMagneticField());
1151 Double_t negradius = TMath::Abs(1./helixneg[4]);
1160 convpos[0] = (xpos*negradius + xneg*posradius)/(negradius+posradius);
1161 convpos[1] = (ypos*negradius+ yneg*posradius)/(negradius+posradius);
1166 Double_t deltaXPos = convpos[0] - xpos;
1167 Double_t deltaYPos = convpos[1] - ypos;
1169 Double_t deltaXNeg = convpos[0] - xneg;
1170 Double_t deltaYNeg = convpos[1] - yneg;
1172 Double_t alphaPos = TMath::Pi() + TMath::ATan2(-deltaYPos,-deltaXPos);
1173 Double_t alphaNeg = TMath::Pi() + TMath::ATan2(-deltaYNeg,-deltaXNeg);
1175 Double_t vertexXNeg = xneg + TMath::Abs(negradius)*TMath::Cos(alphaNeg);
1176 Double_t vertexYNeg = yneg + TMath::Abs(negradius)*TMath::Sin(alphaNeg);
1178 Double_t vertexXPos = xpos + TMath::Abs(posradius)*TMath::Cos(alphaPos);
1179 Double_t vertexYPos = ypos + TMath::Abs(posradius)*TMath::Sin(alphaPos);
1181 AliExternalTrackParam p(*pparam);
1182 AliExternalTrackParam n(*nparam);
1184 TVector2 vertexPos(vertexXPos,vertexYPos);
1185 TVector2 vertexNeg(vertexXNeg,vertexYNeg);
1188 TVector2 vertexPosRot=vertexPos.Rotate(-p.GetAlpha());
1189 TVector2 vertexNegRot=vertexNeg.Rotate(-n.GetAlpha());
1193 if(!p.PropagateTo(vertexPosRot.X(),fInputEvent->GetMagneticField()))
return kFALSE;
1194 if(!n.PropagateTo(vertexNegRot.X(),fInputEvent->GetMagneticField()))
return kFALSE;
1198 if(TMath::Abs(vertexPos.Mod()-TMath::Sqrt(p.GetX()*p.GetX()+p.GetY()*p.GetY()))>0.01)
return kFALSE;
1199 if(TMath::Abs(vertexNeg.Mod()-TMath::Sqrt(n.GetX()*n.GetX()+n.GetY()*n.GetY()))>0.01)
return kFALSE;
1203 convpos[2] = (p.GetZ()*negradius+n.GetZ()*posradius)/(negradius+posradius);
1206 TVector2 vdca=vertexPos-vertexNeg;
1208 dca[1]=TMath::Abs(n.GetZ()-p.GetZ());
1222 if(fConversionGammas == NULL){
1223 fConversionGammas =
new TClonesArray(
"AliAODConversionPhoton",100);
1225 fConversionGammas->Delete();
1231 TClonesArray *fInputGammas=
dynamic_cast<TClonesArray*
>(fAODEvent->FindListObject(fDeltaAODBranchName.Data()));
1234 FindDeltaAODBranchName();
1235 fInputGammas=
dynamic_cast<TClonesArray*
>(fAODEvent->FindListObject(fDeltaAODBranchName.Data()));}
1236 if(!fInputGammas){AliError(
"No Gamma Satellites found");
return kFALSE;}
1239 for(
Int_t i=0;i<fInputGammas->GetEntriesFast();i++){
1242 if(fRelabelAODs)RelabelAODPhotonCandidates(gamma);
1243 if(fConversionCuts->PhotonIsSelected(gamma,fInputEvent)){
1250 if(fConversionGammas->GetEntries()){
return kTRUE;}
1260 TList *list=fInputEvent->GetList();
1261 for(
Int_t ii=0;ii<list->GetEntries();ii++){
1262 TString name((list->At(ii))->GetName());
1263 if(name.BeginsWith(fDeltaAODBranchName)&&name.EndsWith(
"gamma")){
1264 fDeltaAODBranchName=name;
1265 AliInfo(Form(
"Set DeltaAOD BranchName to: %s",fDeltaAODBranchName.Data()));
1274 if(fPreviousV0ReaderPerformsAODRelabeling == 2)
return;
1275 else if(fPreviousV0ReaderPerformsAODRelabeling == 0){
1276 printf(
"Running AODs! Determine if V0Reader '%s' should perform relabeling\n",this->GetName());
1278 Int_t iPosition = obj->IndexOf(
this);
1279 Bool_t prevV0ReaderRunningButNotRelabeling = kFALSE;
1280 for(
Int_t i=iPosition-1; i>=0; i--){
1281 if( (obj->At(i))->IsA() == AliV0ReaderV1::Class()){
1284 fPreviousV0ReaderPerformsAODRelabeling = 2;
1285 prevV0ReaderRunningButNotRelabeling = kFALSE;
1286 printf(
"V0Reader '%s' is running before this V0Reader '%s': do _NOT_ relabel AODs by current reader!\n",tempReader->GetName(),this->GetName());
1288 }
else prevV0ReaderRunningButNotRelabeling = kTRUE;
1291 if(prevV0ReaderRunningButNotRelabeling) AliFatal(Form(
"There are V0Readers before '%s', but none of them is relabeling!",this->GetName()));
1293 if(fPreviousV0ReaderPerformsAODRelabeling == 2)
return;
1295 printf(
"This V0Reader '%s' is first to be processed: do relabel AODs by current reader!\n",this->GetName());
1296 fPreviousV0ReaderPerformsAODRelabeling = 1;
1300 if(fPreviousV0ReaderPerformsAODRelabeling != 1) AliFatal(Form(
"In %s: fPreviousV0ReaderPerformsAODRelabeling = '%i' - while it should be impossible it is something different than '1'!",this->GetName(),fPreviousV0ReaderPerformsAODRelabeling));
1305 Bool_t AODLabelPos = kFALSE;
1306 Bool_t AODLabelNeg = kFALSE;
1308 for(
Int_t i = 0; i<fInputEvent->GetNumberOfTracks();i++){
1309 AliAODTrack *tempDaughter =
static_cast<AliAODTrack*
>(fInputEvent->GetTrack(i));
1314 AODLabelPos = kTRUE;
1321 AODLabelNeg = kTRUE;
1324 if(AODLabelNeg && AODLabelPos){
1328 if(!AODLabelPos || !AODLabelNeg){
1361 if(fInputEvent->IsA()==AliESDEvent::Class()){
1362 static AliESDtrackCuts *EsdTrackCuts = 0x0;
1363 static int prevRun = -1;
1365 Int_t runNumber = fInputEvent->GetRunNumber();
1367 if (prevRun!=runNumber) {
1368 delete EsdTrackCuts;
1370 prevRun = runNumber;
1372 if (!EsdTrackCuts) {
1374 if( (runNumber<=146860) || (runNumber>=197470 && runNumber<=197692) || (runNumber>=172440 && runNumber<=193766) ){
1375 EsdTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010();
1377 }
else if (runNumber>=209122){
1380 EsdTrackCuts =
new AliESDtrackCuts();
1382 EsdTrackCuts->AliESDtrackCuts::SetMinNCrossedRowsTPC(70);
1383 EsdTrackCuts->AliESDtrackCuts::SetMinRatioCrossedRowsOverFindableClustersTPC(0.8);
1384 EsdTrackCuts->SetCutGeoNcrNcl(2., 130., 1.5, 0.0, 0.0);
1386 EsdTrackCuts->AliESDtrackCuts::SetMaxChi2PerClusterTPC(4);
1387 EsdTrackCuts->AliESDtrackCuts::SetAcceptKinkDaughters(kFALSE);
1388 EsdTrackCuts->AliESDtrackCuts::SetRequireTPCRefit(kTRUE);
1390 EsdTrackCuts->AliESDtrackCuts::SetRequireITSRefit(kTRUE);
1391 EsdTrackCuts->AliESDtrackCuts::SetClusterRequirementITS(AliESDtrackCuts::kSPD,
1392 AliESDtrackCuts::kAny);
1393 EsdTrackCuts->AliESDtrackCuts::SetMaxDCAToVertexXYPtDep(
"0.0105+0.0350/pt^1.1");
1394 EsdTrackCuts->AliESDtrackCuts::SetMaxChi2TPCConstrainedGlobal(36);
1395 EsdTrackCuts->AliESDtrackCuts::SetMaxDCAToVertexZ(2);
1396 EsdTrackCuts->AliESDtrackCuts::SetDCAToVertex2D(kFALSE);
1397 EsdTrackCuts->AliESDtrackCuts::SetRequireSigmaToVertex(kFALSE);
1398 EsdTrackCuts->AliESDtrackCuts::SetMaxChi2PerClusterITS(36);
1401 EsdTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011();
1403 EsdTrackCuts->SetMaxDCAToVertexZ(2);
1404 EsdTrackCuts->SetEtaRange(-0.8, 0.8);
1405 EsdTrackCuts->SetPtRange(0.15);
1407 fNumberOfPrimaryTracks = 0;
1408 for(
Int_t iTracks = 0; iTracks < fInputEvent->GetNumberOfTracks(); iTracks++){
1409 AliESDtrack* curTrack = (AliESDtrack*) fInputEvent->GetTrack(iTracks);
1410 if(!curTrack)
continue;
1411 if(!EsdTrackCuts->AcceptTrack(curTrack))
continue;
1413 fNumberOfPrimaryTracks++;
1416 else if(fInputEvent->IsA()==AliAODEvent::Class()){
1417 fNumberOfPrimaryTracks = 0;
1418 for(
Int_t iTracks = 0; iTracks<fInputEvent->GetNumberOfTracks(); iTracks++){
1419 AliAODTrack* curTrack = (AliAODTrack*) fInputEvent->GetTrack(iTracks);
1420 if(curTrack->GetID()<0)
continue;
1421 if(!curTrack->IsHybridGlobalConstrainedGlobal())
continue;
1422 if(TMath::Abs(curTrack->Eta())>0.8)
continue;
1423 if(curTrack->Pt()<0.15)
continue;
1426 fNumberOfPrimaryTracks++;
1435 fNumberOfTPCoutTracks = 0;
1437 for (
Int_t itrk = 0; itrk < fInputEvent->GetNumberOfTracks(); itrk++) {
1438 AliVTrack *trk =
dynamic_cast<AliVTrack*
>(fInputEvent->GetTrack(itrk));
1442 if (!(trk->Pt() < 0.15) && (TMath::Abs(trk->Eta()) < 0.8)) {
1443 if ((trk->GetStatus() & AliVTrack::kTPCout) == AliVTrack::kTPCout) {
1444 fNumberOfTPCoutTracks++;
1456 if(!mcEvent)
return kFALSE;
1458 if (particle->GetPdgCode() == 22){
1460 if( TMath::Abs(particle->Eta()) > etaMax )
return kFALSE;
1462 if(particle->GetMother(0) >-1 && mcEvent->Particle(particle->GetMother(0))->GetPdgCode() == 22){
1466 TParticle* ePos = NULL;
1467 TParticle* eNeg = NULL;
1468 if(particle->GetNDaughters() >= 2){
1469 for(
Int_t daughterIndex=particle->GetFirstDaughter();daughterIndex<=particle->GetLastDaughter();daughterIndex++){
1470 if(daughterIndex<0)
continue;
1471 TParticle *tmpDaughter = mcEvent->Particle(daughterIndex);
1472 if(tmpDaughter->GetUniqueID() == 5){
1473 if(tmpDaughter->GetPdgCode() == 11){
1475 }
else if(tmpDaughter->GetPdgCode() == -11){
1481 if(ePos == NULL || eNeg == NULL){
1485 if( TMath::Abs(ePos->Eta()) > etaMax ||
1486 TMath::Abs(eNeg->Eta()) > etaMax )
1490 if(ePos->R() > rMax){
1493 if(TMath::Abs(ePos->Vz()) > zMax){
1496 if(TMath::Abs(eNeg->Vz()) > zMax){
1501 Double_t lineCutZRSlope = tan(2*atan(exp(-etaMax)));
1503 if( ePos->R() <= ((TMath::Abs(ePos->Vz()) * lineCutZRSlope) - lineCutZValue)){
1506 if( eNeg->R() <= ((TMath::Abs(eNeg->Vz()) * lineCutZRSlope) - lineCutZValue)){
1517 const AliVVertex* primVtxMC = fMCEvent->GetPrimaryVertex();
1518 Double_t mcProdVtxX = primVtxMC->GetX();
1519 Double_t mcProdVtxY = primVtxMC->GetY();
1520 Double_t mcProdVtxZ = primVtxMC->GetZ();
1524 for(Long_t i = 0; i < fMCEvent->GetNumberOfTracks(); i++) {
1525 if (fEventCuts->IsConversionPrimaryESD( fMCEvent, i, mcProdVtxX, mcProdVtxY, mcProdVtxZ)){
1527 TParticle* particle = (TParticle *)fMCEvent->Particle(i);
1528 if (!particle)
continue;
1529 if (ParticleIsConvertedPhoton(fMCEvent, particle, 0.9, 180.,250. )){
1530 if(particle->GetFirstDaughter()<0)
continue;
1531 TParticle *tmpDaughter = fMCEvent->Particle(particle->GetFirstDaughter());
1532 if (!tmpDaughter)
continue;
1533 fHistoMCGammaPtvsR->Fill(particle->Pt(),tmpDaughter->R());
1534 fHistoMCGammaPtvsPhi->Fill(particle->Pt(),particle->Phi());
1535 fHistoMCGammaRvsPhi->Fill(tmpDaughter->R(),particle->Phi());
1537 if (ParticleIsConvertedPhoton(fMCEvent, particle, 1.4, 180.,250. )){
1538 if(particle->GetFirstDaughter()<0)
continue;
1539 TParticle *tmpDaughter = fMCEvent->Particle(particle->GetFirstDaughter());
1540 if (!tmpDaughter)
continue;
1541 fHistoMCGammaPtvsEta->Fill(particle->Pt(),particle->Eta());
1542 fHistoMCGammaRvsEta->Fill(tmpDaughter->R(),particle->Eta());
1543 fHistoMCGammaPhivsEta->Fill(particle->Phi(),particle->Eta());
1552 const AliVVertex* primVtxMC = fMCEvent->GetPrimaryVertex();
1553 Double_t mcProdVtxX = primVtxMC->GetX();
1554 Double_t mcProdVtxY = primVtxMC->GetY();
1555 Double_t mcProdVtxZ = primVtxMC->GetZ();
1558 Int_t tracklabelPos=currentV0->GetPindex();
1559 Int_t tracklabelNeg=currentV0->GetNindex();
1561 Int_t labelp=TMath::Abs(fConversionCuts->GetTrack(fInputEvent,tracklabelPos)->GetLabel());
1562 Int_t labeln=TMath::Abs(fConversionCuts->GetTrack(fInputEvent,tracklabelNeg)->GetLabel());
1564 TParticle* negPart = 0x0;
1565 if(labeln>-1) negPart = (TParticle *)fMCEvent->Particle(labeln);
1566 TParticle* posPart = 0x0;
1567 if(labelp>-1) posPart = (TParticle *)fMCEvent->Particle(labelp);
1569 if ( negPart == NULL || posPart == NULL )
return;
1572 Long_t motherlabelNeg = negPart->GetFirstMother();
1573 Long_t motherlabelPos = posPart->GetFirstMother();
1576 if (motherlabelNeg>-1 && motherlabelNeg == motherlabelPos && negPart->GetFirstMother() != -1){
1577 if (fEventCuts->IsConversionPrimaryESD( fMCEvent, negPart->GetFirstMother(), mcProdVtxX, mcProdVtxY, mcProdVtxZ)){
1579 TParticle* mother = (TParticle *)fMCEvent->Particle(motherlabelNeg);
1580 if (mother->GetPdgCode() == 22 ){
1581 if (!CheckVectorForDoubleCount(fVectorFoundGammas,motherlabelNeg ) ){
1582 if (ParticleIsConvertedPhoton(fMCEvent, mother, 0.9, 180.,250. )){
1583 fHistoRecMCGammaPtvsR->Fill(mother->Pt(),negPart->R());
1584 fHistoRecMCGammaPtvsPhi->Fill(mother->Pt(),mother->Phi());
1585 fHistoRecMCGammaRvsPhi->Fill(negPart->R(),mother->Phi());
1587 if (ParticleIsConvertedPhoton(fMCEvent, mother, 1.4, 180.,250. )){
1588 fHistoRecMCGammaPtvsEta->Fill(mother->Pt(),mother->Eta());
1589 fHistoRecMCGammaRvsEta->Fill(negPart->R(),mother->Eta());
1590 fHistoRecMCGammaPhivsEta->Fill(mother->Phi(),mother->Eta());
1594 if (ParticleIsConvertedPhoton(fMCEvent, mother, 0.9, 180.,250. )){
1595 fHistoRecMCGammaMultiPt->Fill(mother->Pt());
1596 fHistoRecMCGammaMultiPhi->Fill(mother->Phi());
1597 fHistoRecMCGammaMultiR->Fill(negPart->R());
1599 if (ParticleIsConvertedPhoton(fMCEvent, mother, 1.4, 180.,250. )){
1600 fHistoRecMCGammaMultiPtvsEta->Fill(mother->Pt(),mother->Eta());
1618 Int_t kMaxTPCV0Conflicts = 1;
1622 fCurrentV0->GetXYZ(convX,convY,convZ);
1623 Double_t convR = TMath::Sqrt(convX*convX+convY*convY);
1631 fHistoImpactParameterStudy->Fill(0);
1634 AliESDtrack* positiveTrack = (AliESDtrack*) pTrack;
1635 AliESDtrack* negativeTrack = (AliESDtrack*) nTrack;
1637 if (!positiveTrack->IsOn(AliESDtrack::kITSin) && !negativeTrack->IsOn(AliESDtrack::kITSin)){
1638 fHistoImpactParameterStudy->Fill(1);
1642 Bool_t RemovedByZcut = kFALSE;
1643 Bool_t RemovedByYcut = kFALSE;
1648 if(((TMath::Abs(positiveTrack->GetZ()))>fZmax) || ((TMath::Abs(negativeTrack->GetZ()))>fZmax)){
1649 fHistoImpactParameterStudy->Fill(2);
1650 RemovedByZcut=kTRUE;
1654 if(((TMath::Abs(positiveTrack->GetY()))>fYmax) || ((TMath::Abs(negativeTrack->GetY()))>fYmax)){
1655 fHistoImpactParameterStudy->Fill(3);
1656 RemovedByYcut=kTRUE;
1661 Bool_t RemovedByCausality=kFALSE;
1664 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,
1665 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,
1666 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,
1667 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,
1668 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,
1669 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,
1670 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,
1671 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,
1672 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,
1673 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,
1674 233.850,235.350,236.850,238.350,239.850,241.350,242.850,244.350,245.850};
1677 fHistoR->Fill(convR);
1678 fHistoRrecalc->Fill(convRrecalc);
1679 Double_t alpha = TMath::ATan2(convY,convX);
1680 if (alpha<0) alpha += TMath::Pi()*2;
1681 Int_t sec = alpha/(TMath::Pi()/9);
1682 alpha = (10.+sec*20.)*TMath::DegToRad();
1685 Double_t xsV0 = convX*cs - convY*sn;
1686 fHistoRviaAlpha->Fill(xsV0);
1687 Double_t alpha_r = TMath::ATan2(convYrecalc,convXrecalc);
1688 if (alpha_r<0) alpha_r += TMath::Pi()*2;
1689 Int_t sec_r = alpha_r/(TMath::Pi()/9);
1690 alpha_r = (10.+sec_r*20.)*TMath::DegToRad();
1691 Double_t cs_r = TMath::Cos(alpha_r);
1692 Double_t sn_r = TMath::Sin(alpha_r);
1693 Double_t xsV0_r = convXrecalc*cs_r - convYrecalc*sn_r;
1694 fHistoRviaAlphaRecalc->Fill(xsV0_r);
1697 fHistoImpactParameterStudy->Fill(4);
1699 for (
Int_t it=2;it--;) {
1700 Int_t trId = fCurrentV0->GetIndex(it);
1701 AliESDtrack* tr = fESDEvent->GetTrack(trId);
1702 const TBits& bits = tr->GetTPCClusterMap();
1703 Int_t nConflict = 0;
1704 for (
Int_t ic=0;ic<159;ic++) {
1705 if (rTPC[ic]>(xsV0-kTPCMargin))
break;
1706 if (bits.TestBitNumber(ic)){
1708 fHistoRdiff->Fill(xsV0-rTPC[ic]);
1710 if (nConflict>kMaxTPCV0Conflicts) {
1711 fHistoImpactParameterStudy->Fill(5);
1712 RemovedByCausality=kTRUE;
1720 Bool_t RemovedByAnyCut=kFALSE;
1721 if(RemovedByZcut||RemovedByYcut||RemovedByCausality){
1722 fHistoImpactParameterStudy->Fill(6);
1723 RemovedByAnyCut=kTRUE;
1736 fImpactParamTree->Branch(
"posPt",&posPt,
"posPt/F");
1737 fImpactParamTree->Branch(
"posY",&posY,
"posY/F");
1738 fImpactParamTree->Branch(
"R",&R,
"R/F");
1739 posZ = positiveTrack->GetZ();
1740 posY = positiveTrack->GetY();
1741 posX = positiveTrack->GetX();
1742 posPt = positiveTrack->Pt();
1743 negZ = negativeTrack->GetZ();
1744 negY = negativeTrack->GetY();
1745 negX = negativeTrack->GetX();
1746 negPt = negativeTrack->Pt();
1748 fImpactParamTree->Fill();
1751 fHistoPosTrackImpactParamZ->Fill(posZ);
1752 fHistoPosTrackImpactParamY->Fill(posY);
1753 fHistoPosTrackImpactParamX->Fill(posX);
1754 fHistoPosTrackImpactParamZvsPt->Fill(posPt, posZ);
1755 fHistoPosTrackImpactParamYvsPt->Fill(posPt, posY);
1756 fHistoPosTrackImpactParamXvsPt->Fill(posPt, posX);
1757 fHistoNegTrackImpactParamZ->Fill(negZ);
1758 fHistoNegTrackImpactParamY->Fill(negY);
1759 fHistoNegTrackImpactParamX->Fill(negX);
1760 fHistoNegTrackImpactParamZvsPt->Fill(negPt, negZ);
1761 fHistoNegTrackImpactParamYvsPt->Fill(negPt, negY);
1762 fHistoNegTrackImpactParamXvsPt->Fill(negPt, negX);
1765 fHistoPt->Fill(positiveTrack->Pt());
1766 fHistoImpactParamZvsR->Fill(convZrecalc,convRrecalc);
1774 fHistoDCAzPhoton->Fill(DCAzPhoton);
1775 if(!RemovedByAnyCut) {
1776 fHistoPt2->Fill(positiveTrack->Pt());
1777 fHistoImpactParamZvsR2->Fill(convZrecalc,convRrecalc);
1778 fHistoDCAzPhoton2->Fill(DCAzPhoton);
1787 if(tobechecked > -1)
1789 vector<Int_t>::iterator it;
1790 it = find (vec.begin(), vec.end(), tobechecked);
1791 if (it != vec.end())
return true;
1800 if(tobechecked > -1)
1802 vector<Int_t>::iterator it;
1803 it = find (vec.begin(), vec.end(), tobechecked);
1804 if (it != vec.end())
return true;
1806 vec.push_back(tobechecked);
1822 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