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 "AliAODMCParticle.h" 69 #include "AliPIDResponse.h" 74 #include "TMatrixDEigen.h" 75 #include "TObjArray.h" 85 kAddv0sInESDFilter(kFALSE),
87 fConversionCuts(NULL),
89 fConversionGammas(NULL),
90 fUseImprovedVertex(kTRUE),
91 fUseOwnXYZCalculation(kTRUE),
92 fUseConstructGamma(kFALSE),
93 kUseAODConversionPhoton(kTRUE),
95 fDeltaAODBranchName("GammaConv"),
96 fDeltaAODFilename("AliAODGammaConversion.root"),
98 fPreviousV0ReaderPerformsAODRelabeling(0),
99 fEventIsSelected(kFALSE),
100 fNumberOfPrimaryTracks(0),
101 fNumberOfTPCoutTracks(0),
103 fSphericityAxisMainPhi(0),
104 fSphericityAxisSecondaryPhi(0),
105 fInEMCalAcceptance(kFALSE),
106 fNumberOfRecTracks(0),
111 fNumberOfTruePrimaryTracks(0),
113 fCalcSphericity(kFALSE),
117 fUseMassToZero(kTRUE),
118 fProduceV0findingEffi(kFALSE),
119 fProduceImpactParamHistograms(kFALSE),
120 fCurrentInvMassPair(0),
123 fImpactParamHistograms(NULL),
124 fHistoMCGammaPtvsR(NULL),
125 fHistoMCGammaPtvsPhi(NULL),
126 fHistoMCGammaPtvsEta(NULL),
127 fHistoMCGammaRvsPhi(NULL),
128 fHistoMCGammaRvsEta(NULL),
129 fHistoMCGammaPhivsEta(NULL),
130 fHistoRecMCGammaPtvsR(NULL),
131 fHistoRecMCGammaPtvsPhi(NULL),
132 fHistoRecMCGammaPtvsEta(NULL),
133 fHistoRecMCGammaRvsPhi(NULL),
134 fHistoRecMCGammaRvsEta(NULL),
135 fHistoRecMCGammaPhivsEta(NULL),
136 fHistoRecMCGammaMultiPt(NULL),
137 fHistoRecMCGammaMultiPtvsEta(NULL),
138 fHistoRecMCGammaMultiR(NULL),
139 fHistoRecMCGammaMultiPhi(NULL),
140 fHistoPosTrackImpactParamZ(NULL),
141 fHistoPosTrackImpactParamY(NULL),
142 fHistoPosTrackImpactParamX(NULL),
143 fHistoPosTrackImpactParamZvsPt(NULL),
144 fHistoPosTrackImpactParamYvsPt(NULL),
145 fHistoPosTrackImpactParamXvsPt(NULL),
146 fHistoNegTrackImpactParamZ(NULL),
147 fHistoNegTrackImpactParamY(NULL),
148 fHistoNegTrackImpactParamX(NULL),
149 fHistoNegTrackImpactParamZvsPt(NULL),
150 fHistoNegTrackImpactParamYvsPt(NULL),
151 fHistoNegTrackImpactParamXvsPt(NULL),
152 fHistoImpactParamZvsR(NULL),
153 fHistoImpactParamZvsR2(NULL),
156 fHistoDCAzPhoton(NULL),
157 fHistoDCAzPhoton2(NULL),
160 fHistoRviaAlpha(NULL),
161 fHistoRviaAlphaRecalc(NULL),
163 fHistoImpactParameterStudy(NULL),
164 fImpactParamTree(NULL),
165 fVectorFoundGammas(0),
166 fCurrentFileName(""),
167 fMCFileChecked(kFALSE)
171 DefineInput(0, TChain::Class());
172 DefineOutput(1,TBits::Class());
180 if(fConversionGammas){
181 fConversionGammas->Delete();
182 delete fConversionGammas;
183 fConversionGammas=0x0;
196 if(fConversionGammas && (index < fConversionGammas->GetEntriesFast())) {
197 TObject *tmp = fConversionGammas->At(index);
198 if(tmp->IsA() == AliAODConversionPhoton::Class()){
254 if(fConversionCuts==NULL){
255 if(fConversionCuts==NULL)AliError(
"No Conversion Cut Selection initialized");
257 if(fEventCuts==NULL){
258 if(fEventCuts==NULL)AliError(
"No Event Cut Selection initialized");
261 if(fCreateAOD){kUseAODConversionPhoton=kTRUE;}
263 if(fConversionGammas != NULL){
264 delete fConversionGammas;
265 fConversionGammas=NULL;
268 if(fConversionGammas == NULL){
269 if(kUseAODConversionPhoton){
270 fConversionGammas =
new TClonesArray(
"AliAODConversionPhoton",100);}
272 fConversionGammas =
new TClonesArray(
"AliKFConversionPhoton",100);}
274 fConversionGammas->Delete();
283 fPCMv0BitField =
new TBits();
286 fDeltaAODBranchName.Append(
"_");
287 fDeltaAODBranchName.Append(fEventCuts->GetCutNumber());
290 fDeltaAODBranchName.Append(
"_");
291 fDeltaAODBranchName.Append(fConversionCuts->GetCutNumber());
292 fDeltaAODBranchName.Append(
"_gamma");
294 fConversionGammas->SetName(fDeltaAODBranchName.Data());
296 AddAODBranch(
"TClonesArray", &fConversionGammas, fDeltaAODFilename.Data());
297 AliAnalysisManager::GetAnalysisManager()->RegisterExtraFile(fDeltaAODFilename.Data());
300 if(fProduceImpactParamHistograms){
301 if(fImpactParamHistograms != NULL){
302 delete fImpactParamHistograms;
303 fImpactParamHistograms = NULL;
305 if(fImpactParamHistograms==NULL){
306 fImpactParamHistograms =
new TList();
307 fImpactParamHistograms->SetOwner(kTRUE);
308 fImpactParamHistograms->SetName(Form(
"ImpactParamHistograms_%s_%s",fEventCuts->GetCutNumber().Data(),fConversionCuts->GetCutNumber().Data()));
310 fHistoPosTrackImpactParamZ =
new TH1F(
"fHistoPosTrackImpactParamZ",
"",480,-80,80);
311 fHistoPosTrackImpactParamZ->SetXTitle(
"Z (cm)");
312 fImpactParamHistograms->Add(fHistoPosTrackImpactParamZ);
314 fHistoPosTrackImpactParamY =
new TH1F(
"fHistoPosTrackImpactParamY",
"",720,-120,120);
315 fHistoPosTrackImpactParamY->SetXTitle(
"Y (cm)");
316 fImpactParamHistograms->Add(fHistoPosTrackImpactParamY);
318 fHistoPosTrackImpactParamX =
new TH1F(
"fHistoPosTrackImpactParamX",
"",30,-3,3);
319 fHistoPosTrackImpactParamX->SetXTitle(
"X (cm)");
320 fImpactParamHistograms->Add(fHistoPosTrackImpactParamX);
322 fHistoNegTrackImpactParamZ =
new TH1F(
"fHistoNegTrackImpactParamZ",
"",480,-80,80);
323 fHistoNegTrackImpactParamZ->SetXTitle(
"Z (cm)");
324 fImpactParamHistograms->Add(fHistoNegTrackImpactParamZ);
326 fHistoNegTrackImpactParamY =
new TH1F(
"fHistoNegTrackImpactParamY",
"",720,-120,120);
327 fHistoNegTrackImpactParamY->SetXTitle(
"Y (cm)");
328 fImpactParamHistograms->Add(fHistoNegTrackImpactParamY);
330 fHistoNegTrackImpactParamX =
new TH1F(
"fHistoNegTrackImpactParamX",
"",30,-3,3);
331 fHistoNegTrackImpactParamX->SetXTitle(
"X (cm)");
332 fImpactParamHistograms->Add(fHistoNegTrackImpactParamX);
334 fHistoPosTrackImpactParamZvsPt =
new TH2F(
"fHistoPosTrackImpactParamZvsPt",
"",100,0,10,480,-80,80);
335 fHistoPosTrackImpactParamZvsPt->SetYTitle(
"Z (cm)");
336 fHistoPosTrackImpactParamZvsPt->SetXTitle(
"Pt (GeV)");
337 fImpactParamHistograms->Add(fHistoPosTrackImpactParamZvsPt);
339 fHistoPosTrackImpactParamYvsPt =
new TH2F(
"fHistoPosTrackImpactParamYvsPt",
"",100,0,10,720,-120,120);
340 fHistoPosTrackImpactParamYvsPt->SetYTitle(
"Y (cm)");
341 fHistoPosTrackImpactParamYvsPt->SetXTitle(
"Pt (GeV)");
342 fImpactParamHistograms->Add(fHistoPosTrackImpactParamYvsPt);
344 fHistoPosTrackImpactParamXvsPt =
new TH2F(
"fHistoPosTrackImpactParamXvsPt",
"",100,0,10,30,-3,5);
345 fHistoPosTrackImpactParamXvsPt->SetYTitle(
"X (cm)");
346 fHistoPosTrackImpactParamXvsPt->SetXTitle(
"Pt (GeV)");
347 fImpactParamHistograms->Add(fHistoPosTrackImpactParamXvsPt);
349 fHistoNegTrackImpactParamZvsPt =
new TH2F(
"fHistoNegTrackImpactParamZvsPt",
"",100,0,10,480,-80,80);
350 fHistoNegTrackImpactParamZvsPt->SetYTitle(
"Z (cm)");
351 fHistoNegTrackImpactParamZvsPt->SetXTitle(
"Pt (GeV)");
352 fImpactParamHistograms->Add(fHistoNegTrackImpactParamZvsPt);
354 fHistoNegTrackImpactParamYvsPt =
new TH2F(
"fHistoNegTrackImpactParamYvsPt",
"",100,0,10,720,-120,120);
355 fHistoNegTrackImpactParamYvsPt->SetYTitle(
"Y (cm)");
356 fHistoNegTrackImpactParamYvsPt->SetXTitle(
"Pt (GeV)");
357 fImpactParamHistograms->Add(fHistoNegTrackImpactParamYvsPt);
359 fHistoNegTrackImpactParamXvsPt =
new TH2F(
"fHistoNegTrackImpactParamXvsPt",
"",100,0,10,30,-3,3);
360 fHistoNegTrackImpactParamXvsPt->SetYTitle(
"X (cm)");
361 fHistoNegTrackImpactParamXvsPt->SetXTitle(
"Pt (GeV)");
362 fImpactParamHistograms->Add(fHistoNegTrackImpactParamXvsPt);
364 fHistoImpactParamZvsR =
new TH2F(
"fHistoImpactParamZvsR",
"Before cuts",300,-150,150,200,0,200);
365 fHistoImpactParamZvsR->SetXTitle(
"Z (cm)");
366 fHistoImpactParamZvsR->SetYTitle(
"R (cm)");
367 fImpactParamHistograms->Add(fHistoImpactParamZvsR);
369 fHistoImpactParamZvsR2 =
new TH2F(
"fHistoImpactParamZvsR2",
"After cuts",300,-150,150,200,0,200);
370 fHistoImpactParamZvsR2->SetXTitle(
"Z (cm)");
371 fHistoImpactParamZvsR2->SetYTitle(
"R (cm)");
372 fImpactParamHistograms->Add(fHistoImpactParamZvsR2);
374 fHistoPt =
new TH1F(
"fHistoPt",
"Before all cuts",100,0,10);
375 fHistoPt->SetXTitle(
"Pt (GeV)");
376 fImpactParamHistograms->Add(fHistoPt);
378 fHistoPt2 =
new TH1F(
"fHistoPt2",
"After all cuts",100,0,10);
379 fHistoPt2->SetXTitle(
"Pt (GeV)");
380 fImpactParamHistograms->Add(fHistoPt2);
382 fHistoDCAzPhoton =
new TH1F(
"fHistoDCAzPhoton",
"Before cuts",20,-2,2);
383 fHistoDCAzPhoton->SetXTitle(
"DCAz photon (cm)");
384 fImpactParamHistograms->Add(fHistoDCAzPhoton);
386 fHistoDCAzPhoton2 =
new TH1F(
"fHistoDCAzPhoton2",
"After cuts",20,-2,2);
387 fHistoDCAzPhoton2->SetXTitle(
"DCAz photon (cm)");
388 fImpactParamHistograms->Add(fHistoDCAzPhoton2);
390 fHistoR =
new TH1F(
"fHistoR",
"",200,0,200);
391 fHistoR->SetXTitle(
"Conversion radius (cm)");
392 fImpactParamHistograms->Add(fHistoR);
394 fHistoRrecalc =
new TH1F(
"fHistoRrecalc",
"",200,0,200);
395 fHistoRrecalc->SetXTitle(
"conversion radius (cm)");
396 fImpactParamHistograms->Add(fHistoRrecalc);
398 fHistoRviaAlpha =
new TH1F(
"fHistoRviaAlpha",
"",200,0,200);
399 fHistoRviaAlpha->SetXTitle(
"Conversion radius (cm)");
400 fImpactParamHistograms->Add(fHistoRviaAlpha);
402 fHistoRviaAlphaRecalc =
new TH1F(
"fHistoRviaAlphaRecalc",
"",200,0,200);
403 fHistoRviaAlphaRecalc->SetXTitle(
"conversion radius (cm)");
404 fImpactParamHistograms->Add(fHistoRviaAlphaRecalc);
406 fHistoRdiff =
new TH1F(
"fHistoRdiff",
"",200,0,200);
407 fHistoRdiff->SetXTitle(
"R_conv - R_cluster conflict (cm)");
408 fImpactParamHistograms->Add(fHistoRdiff);
410 fHistoImpactParameterStudy =
new TH1F(
"fHistoImpactParameterStudy",
"",7,-0.5,6.5);
411 fHistoImpactParameterStudy->GetXaxis()->SetBinLabel(1,
"# V0s");
412 fHistoImpactParameterStudy->GetXaxis()->SetBinLabel(2,
"two TPC-only tracks");
413 fHistoImpactParameterStudy->GetXaxis()->SetBinLabel(3,
"Z cut not passed");
414 fHistoImpactParameterStudy->GetXaxis()->SetBinLabel(4,
"Y cut not passed");
415 fHistoImpactParameterStudy->GetXaxis()->SetBinLabel(5,
"R>80cm");
416 fHistoImpactParameterStudy->GetXaxis()->SetBinLabel(6,
"causality cut not p.");
417 fHistoImpactParameterStudy->GetXaxis()->SetBinLabel(7,
"# removed V0s");
418 fImpactParamHistograms->Add(fHistoImpactParameterStudy);
420 fImpactParamTree =
new TTree(
"fImpactParamTree",
"");
421 fImpactParamHistograms->Add(fImpactParamTree);
424 if (fProduceV0findingEffi){
425 TH1::AddDirectory(kFALSE);
426 if(fHistograms != NULL){
430 if(fHistograms==NULL){
431 fHistograms =
new TList();
432 fHistograms->SetOwner(kTRUE);
433 fHistograms->SetName(Form(
"V0FindingEfficiencyInput_%s_%s",fEventCuts->GetCutNumber().Data(),fConversionCuts->GetCutNumber().Data()));
436 fHistoMCGammaPtvsR =
new TH2F(
"MCconvGamma_Pt_R",
"MC converted gamma Pt vs R (|eta| < 0.9)",250,0.0,25,400,0,200);
437 fHistoMCGammaPtvsR->SetXTitle(
"p_{MC,T} (GeV/c)");
438 fHistoMCGammaPtvsR->SetYTitle(
"R_{MC,conv} (cm)");
439 fHistograms->Add(fHistoMCGammaPtvsR);
441 fHistoMCGammaPtvsEta =
new TH2F(
"MCconvGamma_Pt_Eta",
"MC converted gamma Pt vs Eta ",250,0.0,25,280,-1.4,1.4);
442 fHistoMCGammaPtvsEta->SetXTitle(
"p_{MC,T} (GeV/c)");
443 fHistoMCGammaPtvsEta->SetYTitle(
"#eta_{MC}");
444 fHistograms->Add(fHistoMCGammaPtvsEta);
446 fHistoMCGammaPtvsPhi =
new TH2F(
"MCconvGamma_Pt_Phi",
"MC converted gamma Pt vs Phi (|eta| < 0.9) ",250,0.0,25,400,0,2*TMath::Pi());
447 fHistoMCGammaPtvsPhi->SetXTitle(
"p_{MC,T} (GeV/c)");
448 fHistoMCGammaPtvsPhi->SetYTitle(
"#varphi_{MC} (rad)");
449 fHistograms->Add(fHistoMCGammaPtvsPhi);
451 fHistoMCGammaRvsPhi =
new TH2F(
"MCconvGamma_R_Phi",
"MC converted gamma R vs Phi (|eta| < 0.9) ",400,0,200,400,0,2*TMath::Pi());
452 fHistoMCGammaRvsPhi->SetXTitle(
"R_{MC,conv} (cm)");
453 fHistoMCGammaRvsPhi->SetYTitle(
"#varphi_{MC} (rad)");
454 fHistograms->Add(fHistoMCGammaRvsPhi);
456 fHistoMCGammaRvsEta =
new TH2F(
"MCconvGamma_R_Eta",
"MC converted gamma R vs Eta ",400,0,200,280,-1.4,1.4);
457 fHistoMCGammaRvsEta->SetXTitle(
"R_{MC,conv} (cm)");
458 fHistoMCGammaRvsEta->SetYTitle(
"#eta_{MC}");
459 fHistograms->Add(fHistoMCGammaRvsEta);
461 fHistoMCGammaPhivsEta =
new TH2F(
"MCconvGamma_Phi_Eta",
"MC converted gamma Phi vs Eta ",400,0,2*TMath::Pi(),280,-1.4,1.4);
462 fHistoMCGammaPhivsEta->SetXTitle(
"#phi_{MC} (rad)");
463 fHistoMCGammaPhivsEta->SetYTitle(
"#eta_{MC}");
464 fHistograms->Add(fHistoMCGammaPhivsEta);
466 fHistoRecMCGammaPtvsR =
new TH2F(
"RecMCconvGamma_Pt_R",
"rec MC converted gamma Pt vs R (|eta| < 0.9)",250,0.0,25,400,0,200);
467 fHistoRecMCGammaPtvsR->SetXTitle(
"p_{MC,T} (GeV/c)");
468 fHistoRecMCGammaPtvsR->SetYTitle(
"R_{MC,conv} (cm)");
469 fHistograms->Add(fHistoRecMCGammaPtvsR);
471 fHistoRecMCGammaPtvsEta =
new TH2F(
"RecMCconvGamma_Pt_Eta",
"rec MC converted gamma Pt vs Eta ",250,0.0,25,280,-1.4,1.4);
472 fHistoRecMCGammaPtvsEta->SetXTitle(
"p_{MC,T} (GeV/c)");
473 fHistoRecMCGammaPtvsEta->SetYTitle(
"#eta_{MC}");
474 fHistograms->Add(fHistoRecMCGammaPtvsEta);
476 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());
477 fHistoRecMCGammaPtvsPhi->SetXTitle(
"p_{MC,T} (GeV/c)");
478 fHistoRecMCGammaPtvsPhi->SetYTitle(
"#varphi_{MC} (rad)");
479 fHistograms->Add(fHistoRecMCGammaPtvsPhi);
481 fHistoRecMCGammaRvsPhi =
new TH2F(
"RecMCconvGamma_R_Phi",
"rec MC converted gamma R vs Phi (|eta| < 0.9) ",400,0,200,400,0,2*TMath::Pi());
482 fHistoRecMCGammaRvsPhi->SetXTitle(
"R_{MC,conv} (cm)");
483 fHistoRecMCGammaRvsPhi->SetYTitle(
"#varphi_{MC} (rad)");
484 fHistograms->Add(fHistoRecMCGammaRvsPhi);
486 fHistoRecMCGammaRvsEta =
new TH2F(
"RecMCconvGamma_R_Eta",
"rec MC converted gamma R vs Eta ",400,0,200,280,-1.4,1.4);
487 fHistoRecMCGammaRvsEta->SetXTitle(
"R_{MC,conv} (cm)");
488 fHistoRecMCGammaRvsEta->SetYTitle(
"#eta_{MC}");
489 fHistograms->Add(fHistoRecMCGammaRvsEta);
491 fHistoRecMCGammaPhivsEta =
new TH2F(
"RecMCconvGamma_Phi_Eta",
"rec MC converted gamma Phi vs Eta ",400,0,2*TMath::Pi(),280,-1.4,1.4);
492 fHistoRecMCGammaPhivsEta->SetXTitle(
"#phi_{MC} (rad)");
493 fHistoRecMCGammaPhivsEta->SetYTitle(
"#eta_{MC}");
494 fHistograms->Add(fHistoRecMCGammaPhivsEta);
496 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);
497 fHistoRecMCGammaMultiPtvsEta->SetXTitle(
"p_{MC,T} (GeV/c)");
498 fHistoRecMCGammaMultiPtvsEta->SetYTitle(
"#eta_{MC}");
499 fHistograms->Add(fHistoRecMCGammaMultiPtvsEta);
501 fHistoRecMCGammaMultiPt =
new TH1F(
"RecMCconvGammaMulti_Pt",
"rec MC converted gamma (at least double counted) Pt (|eta| < 0.9)",250,0.0,25);
502 fHistoRecMCGammaMultiPt->SetXTitle(
"p_{MC,T} (GeV/c)");
503 fHistograms->Add(fHistoRecMCGammaMultiPt);
505 fHistoRecMCGammaMultiR =
new TH1F(
"RecMCconvGammaMulti_R",
"rec MC converted gamma (at least double counted) R (|eta| < 0.9)",400,0,200);
506 fHistoRecMCGammaMultiR->SetXTitle(
"R_{MC,conv} (cm)");
507 fHistograms->Add(fHistoRecMCGammaMultiR);
509 fHistoRecMCGammaMultiPhi =
new TH1F(
"RecMCconvGammaMulti_Phi",
"rec MC converted gamma (at least double counted) Phi (|eta| < 0.9)",400,0,2*TMath::Pi());
510 fHistoRecMCGammaMultiPhi->SetXTitle(
"#phi_{MC} (rad)");
511 fHistograms->Add(fHistoRecMCGammaMultiPhi);
513 fVectorFoundGammas.clear();
521 fCurrentFileName =
"";
522 fMCFileChecked = kFALSE;
527 AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
529 TTree* tree = (
TTree*) inputHandler->GetTree();
530 TFile*
file = (TFile*) tree->GetCurrentFile();
531 fCurrentFileName = file->GetName();
536 if (fPeriodName.CompareTo(
"") == 0){
537 TObjArray *arr = fCurrentFileName.Tokenize(
"/");
539 for (
Int_t i = 0; i < arr->GetEntriesFast();i++ ){
540 TObjString* testObjString = (TObjString*)arr->At(i);
541 if (testObjString->GetString().BeginsWith(
"LHC")){
542 fPeriodName = testObjString->GetString();
543 i = arr->GetEntriesFast();
546 if (fPeriodName.CompareTo(
"")==0){
547 TObjArray *arr2 = fCurrentFileName.Tokenize(
"__");
548 for (
Int_t i = 0; i < arr->GetEntriesFast();i++ ){
549 TObjString* testObjString = (TObjString*)arr2->At(i);
550 if (testObjString->GetString().BeginsWith(
"LHC")){
551 fPeriodName = testObjString->GetString();
552 i = arr2->GetEntriesFast();
557 fEventCuts->SetPeriodEnum (fPeriodName);
561 fEventCuts->SetPeriodEnum (fPeriodName);
575 TObjArray *arr = fCurrentFileName.Tokenize(
"/");
577 for (
Int_t i = 0; i < arr->GetEntriesFast();i++ ){
578 TObjString* testObjString = (TObjString*)arr->At(i);
579 if (testObjString->GetString().BeginsWith(
"LHC")){
580 TObjString* testObjString2 = (TObjString*)arr->At(i+1);
581 fPtHardBin = testObjString2->GetString().Atoi();
582 i = arr->GetEntriesFast();
587 if(!fEventCuts->GetDoEtaShift())
return kTRUE;
588 if(fEventCuts->GetEtaShift() == 0.0){
589 fEventCuts->GetCorrectEtaShiftFromPeriod();
590 fEventCuts->DoEtaShift(kFALSE);
593 printf(
" Gamma Conversion Reader %s_%s :: Eta Shift Manually Set to %f \n\n",
594 (fEventCuts->GetCutNumber()).
Data(),(fConversionCuts->GetCutNumber()).
Data(),fEventCuts->GetEtaShift());
595 fEventCuts->DoEtaShift(kFALSE);
602 if (!fConversionCuts->GetPIDResponse()) fConversionCuts->InitPIDResponse();
606 if (!TGeoGlobalMagField::Instance()->GetField()) esdEvent->InitMagneticField();
610 if(!fConversionGammas)Init();
613 fEventIsSelected=ProcessEvent(fInputEvent,fMCEvent);
623 if (!fConversionCuts->GetPIDResponse()) fConversionCuts->InitPIDResponse();
625 fConversionGammas->Delete();
628 if (kAddv0sInESDFilter){fPCMv0BitField->Clear();}
630 fInputEvent = inputEvent;
634 AliError(
"No Input event");
637 if(!fEventCuts){AliError(
"No EventCuts");
return kFALSE;}
638 if(!fConversionCuts){AliError(
"No ConversionCuts");
return kFALSE;}
648 if(fCalcSphericity) CalculateSphericity();
649 if(fCalcSphericity && fMCEvent) CalculateSphericityMCTrue(fInputEvent);
650 if(fCalcSector) CalculatePtMaxSector();
653 if(!fEventCuts->EventIsSelected(fInputEvent,fMCEvent)){
654 if (fEventCuts->GetEventQuality() == 2 && !fMCFileChecked ){
655 cout <<
"ERROR with MC reading for: "<< fCurrentFileName.Data() << endl;
656 fMCFileChecked = kTRUE;
661 AliKFParticle::SetField(fInputEvent->GetMagneticField());
663 if(fInputEvent->IsA()==AliAODEvent::Class() && fProduceV0findingEffi){
664 fProduceV0findingEffi = kFALSE;
665 AliWarning(
"V0finding effi cannot be run on AODs ");
668 if(fProduceV0findingEffi){
669 CreatePureMCHistosForV0FinderEffiESD();
670 fVectorFoundGammas.clear();
673 if(fInputEvent->IsA()==AliESDEvent::Class()){
676 if(fInputEvent->IsA()==AliAODEvent::Class()){
677 GetAODConversionGammas();
687 if(fInputEvent->IsA()==AliESDEvent::Class()){
690 PostData(1, fPCMv0BitField);
691 AliAODHandler * aodhandler =
dynamic_cast<AliAODHandler*
>(AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler());
692 if (aodhandler && aodhandler->GetFillAOD()) {
693 AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler()->SetFillExtension(kTRUE);
706 if(!(charge==1||charge==-1)){AliError(
"Charge not defined");
return 0x0;}
708 if(fConversionCuts->GetV0FinderSameSign()==1){
710 if((fConversionCuts->GetTrack(fInputEvent,fCurrentV0->GetPindex()))->Charge()!=(fConversionCuts->GetTrack(fInputEvent,fCurrentV0->GetNindex()))->Charge())
return 0x0;
711 if((fConversionCuts->GetTrack(fInputEvent,fCurrentV0->GetPindex()))->Charge()==(fConversionCuts->GetTrack(fInputEvent,fCurrentV0->GetNindex()))->Charge()){
713 tracklabel=fCurrentV0->GetPindex();
714 return fCurrentV0->GetParamP();
716 tracklabel=fCurrentV0->GetNindex();
717 return fCurrentV0->GetParamN();
721 }
else if(fConversionCuts->GetV0FinderSameSign()==2){
724 tracklabel=fCurrentV0->GetPindex();
725 return fCurrentV0->GetParamP();
727 tracklabel=fCurrentV0->GetNindex();
728 return fCurrentV0->GetParamN();
734 if(!fCurrentV0->GetParamN()||!fCurrentV0->GetParamP())
return 0x0;
735 if(!fConversionCuts->GetTrack(fInputEvent,fCurrentV0->GetNindex())||!fConversionCuts->GetTrack(fInputEvent,fCurrentV0->GetPindex()))
return 0x0;
736 if((fConversionCuts->GetTrack(fInputEvent,fCurrentV0->GetPindex()))->Charge()==
charge){
737 tracklabel=fCurrentV0->GetPindex();
738 return fCurrentV0->GetParamP();}
739 if((fConversionCuts->GetTrack(fInputEvent,fCurrentV0->GetNindex()))->Charge()==
charge){
740 tracklabel=fCurrentV0->GetNindex();
741 return fCurrentV0->GetParamN();}
757 for(
Int_t currentV0Index=0;currentV0Index<fESDEvent->GetNumberOfV0s();currentV0Index++){
758 AliESDv0 *fCurrentV0=(AliESDv0*)(fESDEvent->GetV0(currentV0Index));
760 printf(
"Requested V0 does not exist");
764 fCurrentMotherKFCandidate=ReconstructV0(fCurrentV0,currentV0Index);
766 if(fCurrentMotherKFCandidate){
769 if(kUseAODConversionPhoton){
770 new((*fConversionGammas)[fConversionGammas->GetEntriesFast()])
AliAODConversionPhoton(fCurrentMotherKFCandidate);
772 currentConversionPhoton->
SetMass(fCurrentMotherKFCandidate->
M());
773 if (fUseMassToZero) currentConversionPhoton->
SetMassToZero();
775 if(kAddv0sInESDFilter){fPCMv0BitField->SetBitNumber(currentV0Index, kTRUE);}
777 new((*fConversionGammas)[fConversionGammas->GetEntriesFast()])
AliKFConversionPhoton(*fCurrentMotherKFCandidate);
780 delete fCurrentMotherKFCandidate;
781 fCurrentMotherKFCandidate=NULL;
784 if(kAddv0sInESDFilter){fPCMv0BitField->Compact();}
797 if(!fConversionCuts->SelectV0Finder(fCurrentV0->GetOnFlyStatus())){
802 if (fMCEvent && fProduceV0findingEffi ) FillRecMCHistosForV0FinderEffiESD(fCurrentV0);
805 Int_t currentTrackLabels[2]={-1,-1};
809 const AliExternalTrackParam *fCurrentExternalTrackParamPositive=GetExternalTrackParamP(fCurrentV0,currentTrackLabels[0]);
811 const AliExternalTrackParam *fCurrentExternalTrackParamNegative=GetExternalTrackParamN(fCurrentV0,currentTrackLabels[1]);
813 if(!fCurrentExternalTrackParamPositive||!fCurrentExternalTrackParamNegative)
return 0x0;
817 AliVTrack * posTrack = fConversionCuts->GetTrack(fInputEvent,currentTrackLabels[0]);
818 AliVTrack * negTrack = fConversionCuts->GetTrack(fInputEvent,currentTrackLabels[1]);
819 if(!negTrack || !posTrack) {
824 if(!fConversionCuts->TracksAreSelected(negTrack, posTrack)){
829 fConversionCuts->FillV0EtaBeforedEdxCuts(fCurrentV0->Eta());
835 AliKFParticle fCurrentNegativeKFParticle(*(fCurrentExternalTrackParamNegative),11);
837 AliKFParticle fCurrentPositiveKFParticle(*(fCurrentExternalTrackParamPositive),-11);
843 if(fUseConstructGamma){
845 fCurrentMotherKF->
ConstructGamma(fCurrentNegativeKFParticle,fCurrentPositiveKFParticle);
848 fCurrentMotherKF->SetMassConstraint(0,0.0001);
852 if (!fConversionCuts->dEdxCuts(posTrack,fCurrentMotherKF)) {
857 if(!fConversionCuts->dEdxCuts(negTrack,fCurrentMotherKF)) {
861 fConversionCuts->FillV0EtaAfterdEdxCuts(fCurrentV0->Eta());
866 fCurrentMotherKF->
SetTrackLabels(currentTrackLabels[0],currentTrackLabels[1]);
882 TParticle *fNegativeMCParticle = 0x0;
883 if(labeln>-1) fNegativeMCParticle = fMCEvent->Particle(labeln);
884 TParticle *fPositiveMCParticle = 0x0;
885 if(labelp>-1) fPositiveMCParticle = fMCEvent->Particle(labelp);
887 if(fPositiveMCParticle&&fNegativeMCParticle){
895 if(fUseImprovedVertex == kTRUE){
896 AliKFVertex primaryVertexImproved(*fInputEvent->GetPrimaryVertex());
898 primaryVertexImproved+=*fCurrentMotherKF;
899 fCurrentMotherKF->SetProductionVertex(primaryVertexImproved);
903 if (fImprovedPsiPair == 0){
904 Double_t PsiPair=GetPsiPair(fCurrentV0,fCurrentExternalTrackParamPositive,fCurrentExternalTrackParamNegative, convpos);
910 if(fUseOwnXYZCalculation){
912 if(!GetConversionPoint(fCurrentExternalTrackParamPositive,fCurrentExternalTrackParamNegative,convpos,dca)){
914 delete fCurrentMotherKF;
915 fCurrentMotherKF=NULL;
924 if (fImprovedPsiPair >= 1){
926 Double_t PsiPair=GetPsiPair(fCurrentV0,fCurrentExternalTrackParamPositive,fCurrentExternalTrackParamNegative,convpos);
931 if(fCurrentMotherKF->GetNDF() > 0.)
932 fCurrentMotherKF->
SetChi2perNDF(fCurrentMotherKF->GetChi2()/fCurrentMotherKF->GetNDF());
936 fCurrentMotherKF->
SetMass(fCurrentMotherKF->
M());
939 Double_t mass=-99.0, mass_width=-99.0, Pt=-99.0, Pt_width=-99.0;
940 AliKFParticle fCurrentMotherKFForMass(fCurrentNegativeKFParticle,fCurrentPositiveKFParticle);
941 fCurrentMotherKFForMass.GetMass(mass,mass_width);
942 fCurrentMotherKFForMass.GetPt(Pt,Pt_width);
943 fCurrentInvMassPair=
mass;
946 if (!fConversionCuts->KappaCuts(fCurrentMotherKF,fInputEvent)){
948 delete fCurrentMotherKF;
949 fCurrentMotherKF=NULL;
954 if(!fConversionCuts->PhotonCuts(fCurrentMotherKF,fInputEvent)){
956 delete fCurrentMotherKF;
957 fCurrentMotherKF=NULL;
963 if(fProduceImpactParamHistograms) FillImpactParamHistograms(posTrack, negTrack, fCurrentV0, fCurrentMotherKF);
966 return fCurrentMotherKF;
975 AliExternalTrackParam nt(*negativeparam);
976 AliExternalTrackParam pt(*positiveparam);
978 Float_t magField = fInputEvent->GetMagneticField();
981 if (fImprovedPsiPair==0 ) {
982 v0->GetXYZ(xyz[0],xyz[1],xyz[2]);
983 }
else if (fImprovedPsiPair>=1 ) {
1050 v0->GetNPxPyPz(mn[0],mn[1],mn[2]);
1051 v0->GetPPxPyPz(mp[0],mp[1],mp[2]);
1054 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));
1055 Double_t radiussum = TMath::Sqrt(xyz[0]*xyz[0] + xyz[1]*xyz[1]) + 50;
1066 if (fImprovedPsiPair==1 || fImprovedPsiPair==0 ){
1067 if(nt.PropagateTo(radiussum,magField) == 0)
return psiPair;
1068 if(pt.PropagateTo(radiussum,magField) == 0)
return psiPair;
1070 pt.GetPxPyPz(momPosProp);
1071 nt.GetPxPyPz(momNegProp);
1072 }
else if (fImprovedPsiPair>=2) {
1073 momPosProp[0] = pt.GetParameterAtRadius(radiussum,magField,3);
1074 momPosProp[1] = pt.GetParameterAtRadius(radiussum,magField,4);
1075 momPosProp[2] = pt.GetParameterAtRadius(radiussum,magField,5);
1077 momNegProp[0] = nt.GetParameterAtRadius(radiussum,magField,3);
1078 momNegProp[1] = nt.GetParameterAtRadius(radiussum,magField,4);
1079 momNegProp[2] = nt.GetParameterAtRadius(radiussum,magField,5);
1080 pEle = TMath::Sqrt(momNegProp[0]*momNegProp[0]+momNegProp[1]*momNegProp[1]+momNegProp[2]*momNegProp[2]);
1082 pPos = TMath::Sqrt(momPosProp[0]*momPosProp[0]+momPosProp[1]*momPosProp[1]+momPosProp[2]*momPosProp[2]);
1084 if ( (pEle==0 || pPos==0) && fImprovedPsiPair==3) {
1085 radiussum = TMath::Sqrt(xyz[0]*xyz[0] + xyz[1]*xyz[1]) + 30;
1086 momPosProp[0] = pt.GetParameterAtRadius(radiussum,magField,3);
1087 momPosProp[1] = pt.GetParameterAtRadius(radiussum,magField,4);
1088 momPosProp[2] = pt.GetParameterAtRadius(radiussum,magField,5);
1090 momNegProp[0] = nt.GetParameterAtRadius(radiussum,magField,3);
1091 momNegProp[1] = nt.GetParameterAtRadius(radiussum,magField,4);
1092 momNegProp[2] = nt.GetParameterAtRadius(radiussum,magField,5);
1097 pEle = TMath::Sqrt(momNegProp[0]*momNegProp[0]+momNegProp[1]*momNegProp[1]+momNegProp[2]*momNegProp[2]);
1098 pPos = TMath::Sqrt(momPosProp[0]*momPosProp[0]+momPosProp[1]*momPosProp[1]+momPosProp[2]*momPosProp[2]);
1101 momPosProp[0]*momNegProp[0]+momPosProp[1]*momNegProp[1]+momPosProp[2]*momNegProp[2];
1103 if (pEle==0 || pPos==0)
return psiPair;
1106 Double_t chipair = TMath::ACos(scalarproduct/(pEle*pPos));
1109 psiPair = TMath::ASin(deltat/chipair);
1119 Double_t b=fInputEvent->GetMagneticField();
1122 track->GetHelixParameters(helix,b);
1126 Double_t radius = TMath::Abs(1./helix[4]);
1130 phi = phi + 2*TMath::Pi();
1133 phi -= TMath::Pi()/2.;
1134 Double_t xpoint = radius * TMath::Cos(phi);
1135 Double_t ypoint = radius * TMath::Sin(phi);
1149 center[0] = xpos + xpoint;
1150 center[1] = ypos + ypoint;
1159 if(!pparam||!nparam)
return kFALSE;
1162 GetHelixCenter(pparam,helixcenterpos);
1165 GetHelixCenter(nparam,helixcenterneg);
1168 pparam->GetHelixParameters(helixpos,fInputEvent->GetMagneticField());
1169 Double_t posradius = TMath::Abs(1./helixpos[4]);
1172 nparam->GetHelixParameters(helixneg,fInputEvent->GetMagneticField());
1173 Double_t negradius = TMath::Abs(1./helixneg[4]);
1182 convpos[0] = (xpos*negradius + xneg*posradius)/(negradius+posradius);
1183 convpos[1] = (ypos*negradius+ yneg*posradius)/(negradius+posradius);
1188 Double_t deltaXPos = convpos[0] - xpos;
1189 Double_t deltaYPos = convpos[1] - ypos;
1191 Double_t deltaXNeg = convpos[0] - xneg;
1192 Double_t deltaYNeg = convpos[1] - yneg;
1194 Double_t alphaPos = TMath::Pi() + TMath::ATan2(-deltaYPos,-deltaXPos);
1195 Double_t alphaNeg = TMath::Pi() + TMath::ATan2(-deltaYNeg,-deltaXNeg);
1197 Double_t vertexXNeg = xneg + TMath::Abs(negradius)*TMath::Cos(alphaNeg);
1198 Double_t vertexYNeg = yneg + TMath::Abs(negradius)*TMath::Sin(alphaNeg);
1200 Double_t vertexXPos = xpos + TMath::Abs(posradius)*TMath::Cos(alphaPos);
1201 Double_t vertexYPos = ypos + TMath::Abs(posradius)*TMath::Sin(alphaPos);
1203 AliExternalTrackParam p(*pparam);
1204 AliExternalTrackParam n(*nparam);
1206 TVector2 vertexPos(vertexXPos,vertexYPos);
1207 TVector2 vertexNeg(vertexXNeg,vertexYNeg);
1210 TVector2 vertexPosRot=vertexPos.Rotate(-p.GetAlpha());
1211 TVector2 vertexNegRot=vertexNeg.Rotate(-n.GetAlpha());
1215 if(!p.PropagateTo(vertexPosRot.X(),fInputEvent->GetMagneticField()))
return kFALSE;
1216 if(!n.PropagateTo(vertexNegRot.X(),fInputEvent->GetMagneticField()))
return kFALSE;
1220 if(TMath::Abs(vertexPos.Mod()-TMath::Sqrt(p.GetX()*p.GetX()+p.GetY()*p.GetY()))>0.01)
return kFALSE;
1221 if(TMath::Abs(vertexNeg.Mod()-TMath::Sqrt(n.GetX()*n.GetX()+n.GetY()*n.GetY()))>0.01)
return kFALSE;
1225 convpos[2] = (p.GetZ()*negradius+n.GetZ()*posradius)/(negradius+posradius);
1228 TVector2 vdca=vertexPos-vertexNeg;
1230 dca[1]=TMath::Abs(n.GetZ()-p.GetZ());
1244 if(fConversionGammas == NULL){
1245 fConversionGammas =
new TClonesArray(
"AliAODConversionPhoton",100);
1247 fConversionGammas->Delete();
1253 TClonesArray *fInputGammas=
dynamic_cast<TClonesArray*
>(fAODEvent->FindListObject(fDeltaAODBranchName.Data()));
1256 FindDeltaAODBranchName();
1257 fInputGammas=
dynamic_cast<TClonesArray*
>(fAODEvent->FindListObject(fDeltaAODBranchName.Data()));}
1258 if(!fInputGammas){AliError(
"No Gamma Satellites found");
return kFALSE;}
1261 for(
Int_t i=0;i<fInputGammas->GetEntriesFast();i++){
1264 if(fRelabelAODs)RelabelAODPhotonCandidates(gamma);
1265 if(fConversionCuts->PhotonIsSelected(gamma,fInputEvent)){
1272 if(fConversionGammas->GetEntries()){
return kTRUE;}
1282 TList *list=fInputEvent->GetList();
1283 for(
Int_t ii=0;ii<list->GetEntries();ii++){
1284 TString name((list->At(ii))->GetName());
1285 if(name.BeginsWith(fDeltaAODBranchName)&&name.EndsWith(
"gamma")){
1286 fDeltaAODBranchName=name;
1287 AliInfo(Form(
"Set DeltaAOD BranchName to: %s",fDeltaAODBranchName.Data()));
1296 if(fPreviousV0ReaderPerformsAODRelabeling == 2)
return;
1297 else if(fPreviousV0ReaderPerformsAODRelabeling == 0){
1298 printf(
"Running AODs! Determine if V0Reader '%s' should perform relabeling\n",this->GetName());
1300 Int_t iPosition = obj->IndexOf(
this);
1301 Bool_t prevV0ReaderRunningButNotRelabeling = kFALSE;
1302 for(
Int_t i=iPosition-1; i>=0; i--){
1303 if( (obj->At(i))->IsA() == AliV0ReaderV1::Class()){
1306 fPreviousV0ReaderPerformsAODRelabeling = 2;
1307 prevV0ReaderRunningButNotRelabeling = kFALSE;
1308 printf(
"V0Reader '%s' is running before this V0Reader '%s': do _NOT_ relabel AODs by current reader!\n",tempReader->GetName(),this->GetName());
1310 }
else prevV0ReaderRunningButNotRelabeling = kTRUE;
1313 if(prevV0ReaderRunningButNotRelabeling) AliFatal(Form(
"There are V0Readers before '%s', but none of them is relabeling!",this->GetName()));
1315 if(fPreviousV0ReaderPerformsAODRelabeling == 2)
return;
1317 printf(
"This V0Reader '%s' is first to be processed: do relabel AODs by current reader!\n",this->GetName());
1318 fPreviousV0ReaderPerformsAODRelabeling = 1;
1322 if(fPreviousV0ReaderPerformsAODRelabeling != 1) AliFatal(Form(
"In %s: fPreviousV0ReaderPerformsAODRelabeling = '%i' - while it should be impossible it is something different than '1'!",this->GetName(),fPreviousV0ReaderPerformsAODRelabeling));
1327 Bool_t AODLabelPos = kFALSE;
1328 Bool_t AODLabelNeg = kFALSE;
1330 for(
Int_t i = 0; i<fInputEvent->GetNumberOfTracks();i++){
1331 AliAODTrack *tempDaughter =
static_cast<AliAODTrack*
>(fInputEvent->GetTrack(i));
1336 AODLabelPos = kTRUE;
1343 AODLabelNeg = kTRUE;
1346 if(AODLabelNeg && AODLabelPos){
1350 if(!AODLabelPos || !AODLabelNeg){
1383 if(fInputEvent->IsA()==AliESDEvent::Class()){
1384 static AliESDtrackCuts *EsdTrackCuts = 0x0;
1385 static int prevRun = -1;
1387 Int_t runNumber = fInputEvent->GetRunNumber();
1389 if (prevRun!=runNumber) {
1390 delete EsdTrackCuts;
1392 prevRun = runNumber;
1394 if (!EsdTrackCuts) {
1396 if( (runNumber<=146860) || (runNumber>=197470 && runNumber<=197692) || (runNumber>=172440 && runNumber<=193766) ){
1397 EsdTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010();
1399 }
else if (runNumber>=209122){
1402 EsdTrackCuts =
new AliESDtrackCuts();
1404 EsdTrackCuts->AliESDtrackCuts::SetMinNCrossedRowsTPC(70);
1405 EsdTrackCuts->AliESDtrackCuts::SetMinRatioCrossedRowsOverFindableClustersTPC(0.8);
1406 EsdTrackCuts->SetCutGeoNcrNcl(2., 130., 1.5, 0.0, 0.0);
1408 EsdTrackCuts->AliESDtrackCuts::SetMaxChi2PerClusterTPC(4);
1409 EsdTrackCuts->AliESDtrackCuts::SetAcceptKinkDaughters(kFALSE);
1410 EsdTrackCuts->AliESDtrackCuts::SetRequireTPCRefit(kTRUE);
1412 EsdTrackCuts->AliESDtrackCuts::SetRequireITSRefit(kTRUE);
1413 EsdTrackCuts->AliESDtrackCuts::SetClusterRequirementITS(AliESDtrackCuts::kSPD,
1414 AliESDtrackCuts::kAny);
1415 EsdTrackCuts->AliESDtrackCuts::SetMaxDCAToVertexXYPtDep(
"0.0105+0.0350/pt^1.1");
1416 EsdTrackCuts->AliESDtrackCuts::SetMaxChi2TPCConstrainedGlobal(36);
1417 EsdTrackCuts->AliESDtrackCuts::SetMaxDCAToVertexZ(2);
1418 EsdTrackCuts->AliESDtrackCuts::SetDCAToVertex2D(kFALSE);
1419 EsdTrackCuts->AliESDtrackCuts::SetRequireSigmaToVertex(kFALSE);
1420 EsdTrackCuts->AliESDtrackCuts::SetMaxChi2PerClusterITS(36);
1423 EsdTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011();
1425 EsdTrackCuts->SetMaxDCAToVertexZ(2);
1426 EsdTrackCuts->SetEtaRange(-0.8, 0.8);
1427 EsdTrackCuts->SetPtRange(0.15);
1429 fNumberOfPrimaryTracks = 0;
1430 for(
Int_t iTracks = 0; iTracks < fInputEvent->GetNumberOfTracks(); iTracks++){
1431 AliESDtrack* curTrack = (AliESDtrack*) fInputEvent->GetTrack(iTracks);
1432 if(!curTrack)
continue;
1433 if(!EsdTrackCuts->AcceptTrack(curTrack))
continue;
1435 fNumberOfPrimaryTracks++;
1438 else if(fInputEvent->IsA()==AliAODEvent::Class()){
1439 fNumberOfPrimaryTracks = 0;
1440 for(
Int_t iTracks = 0; iTracks<fInputEvent->GetNumberOfTracks(); iTracks++){
1441 AliAODTrack* curTrack = (AliAODTrack*) fInputEvent->GetTrack(iTracks);
1442 if(curTrack->GetID()<0)
continue;
1443 if(!curTrack->IsHybridGlobalConstrainedGlobal())
continue;
1444 if(TMath::Abs(curTrack->Eta())>0.8)
continue;
1445 if(curTrack->Pt()<0.15)
continue;
1448 fNumberOfPrimaryTracks++;
1457 fNumberOfTPCoutTracks = 0;
1459 for (
Int_t itrk = 0; itrk < fInputEvent->GetNumberOfTracks(); itrk++) {
1460 AliVTrack *trk =
dynamic_cast<AliVTrack*
>(fInputEvent->GetTrack(itrk));
1464 if (!(trk->Pt() < 0.15) && (TMath::Abs(trk->Eta()) < 0.8)) {
1465 if ((trk->GetStatus() & AliVTrack::kTPCout) == AliVTrack::kTPCout) {
1466 fNumberOfTPCoutTracks++;
1479 fNumberOfRecTracks = 0;
1481 TMatrixD EigenV(2,2);
1482 TVector2* EigenVector;
1483 fSphericityAxisMainPhi = 0;
1484 Double_t MirroredMainSphericityAxis = 0;
1485 fSphericityAxisSecondaryPhi = 0;
1486 fInEMCalAcceptance = kFALSE;
1490 if(fInputEvent->IsA()==AliESDEvent::Class()){
1491 static AliESDtrackCuts *EsdTrackCuts = 0x0;
1492 static int prevRun = -1;
1494 Int_t runNumber = fInputEvent->GetRunNumber();
1496 if (prevRun!=runNumber) {
1497 delete EsdTrackCuts;
1499 prevRun = runNumber;
1501 if (!EsdTrackCuts) {
1503 if( (runNumber<=146860) || (runNumber>=197470 && runNumber<=197692) || (runNumber>=172440 && runNumber<=193766) ){
1504 EsdTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010();
1506 }
else if (runNumber>=209122){
1509 EsdTrackCuts =
new AliESDtrackCuts();
1511 EsdTrackCuts->AliESDtrackCuts::SetMinNCrossedRowsTPC(70);
1512 EsdTrackCuts->AliESDtrackCuts::SetMinRatioCrossedRowsOverFindableClustersTPC(0.8);
1513 EsdTrackCuts->SetCutGeoNcrNcl(2., 130., 1.5, 0.0, 0.0);
1515 EsdTrackCuts->AliESDtrackCuts::SetMaxChi2PerClusterTPC(4);
1516 EsdTrackCuts->AliESDtrackCuts::SetAcceptKinkDaughters(kFALSE);
1517 EsdTrackCuts->AliESDtrackCuts::SetRequireTPCRefit(kTRUE);
1519 EsdTrackCuts->AliESDtrackCuts::SetRequireITSRefit(kTRUE);
1520 EsdTrackCuts->AliESDtrackCuts::SetClusterRequirementITS(AliESDtrackCuts::kSPD,
1521 AliESDtrackCuts::kAny);
1522 EsdTrackCuts->AliESDtrackCuts::SetMaxDCAToVertexXYPtDep(
"0.0105+0.0350/pt^1.1");
1523 EsdTrackCuts->AliESDtrackCuts::SetMaxChi2TPCConstrainedGlobal(36);
1524 EsdTrackCuts->AliESDtrackCuts::SetMaxDCAToVertexZ(2);
1525 EsdTrackCuts->AliESDtrackCuts::SetDCAToVertex2D(kFALSE);
1526 EsdTrackCuts->AliESDtrackCuts::SetRequireSigmaToVertex(kFALSE);
1527 EsdTrackCuts->AliESDtrackCuts::SetMaxChi2PerClusterITS(36);
1530 EsdTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011();
1532 EsdTrackCuts->SetMaxDCAToVertexZ(2);
1533 EsdTrackCuts->SetEtaRange(-0.8, 0.8);
1534 EsdTrackCuts->SetPtRange(0.5);
1537 fNumberOfRecTracks = 0;
1538 for(
Int_t iTracks = 0; iTracks < fInputEvent->GetNumberOfTracks(); iTracks++){
1539 AliESDtrack* curTrack = (AliESDtrack*) fInputEvent->GetTrack(iTracks);
1540 if(!curTrack)
continue;
1541 if(!EsdTrackCuts->AcceptTrack(curTrack))
continue;
1542 fNumberOfRecTracks++;
1544 Si(0,0)=pow(curTrack->Px(),2);
1545 Si(0,1)=curTrack->Px()*curTrack->Py();
1546 Si(1,0)=curTrack->Py()*curTrack->Px();
1547 Si(1,1)=pow(curTrack->Py(),2);
1548 S += (1/curTrack->Pt())*Si;
1549 P += curTrack->Pt();
1550 if(curTrack->Pt()>fHighestPt) fHighestPt = curTrack->Pt();
1552 if(P==0 || fNumberOfRecTracks<3){
1556 fSphericity = (2*TMatrixDEigen(St).GetEigenValues()(1,1))/(TMatrixDEigen(St).GetEigenValues()(0,0)+TMatrixDEigen(St).GetEigenValues()(1,1));
1558 EigenV = TMatrixDEigen(St).GetEigenVectors();
1559 EigenVector =
new TVector2(EigenV(0,0), EigenV(1,0));
1560 fSphericityAxisMainPhi = EigenVector->Phi();
1561 MirroredMainSphericityAxis = fSphericityAxisMainPhi + TMath::Pi();
1562 if(MirroredMainSphericityAxis > 2*TMath::Pi()) MirroredMainSphericityAxis -= 2*TMath::Pi();
1563 EigenVector =
new TVector2(EigenV(0,1), EigenV(1,1));
1564 fSphericityAxisSecondaryPhi = EigenVector->Phi();
1565 if(fSphericityAxisMainPhi > 1.396263 && fSphericityAxisMainPhi < 3.263766){
1566 fInEMCalAcceptance = kTRUE;
1567 }
else if((MirroredMainSphericityAxis > 1.396263) && (MirroredMainSphericityAxis < 3.263766)){
1568 fInEMCalAcceptance = kTRUE;
1571 fMeanPt = P/fNumberOfRecTracks;
1574 else if(fInputEvent->IsA()==AliAODEvent::Class()){
1576 fNumberOfRecTracks = 0;
1577 for(
Int_t iTracks = 0; iTracks<fInputEvent->GetNumberOfTracks(); iTracks++){
1578 AliAODTrack* curTrack = (AliAODTrack*) fInputEvent->GetTrack(iTracks);
1579 if(curTrack->GetID()<0)
continue;
1580 if(!curTrack->IsHybridGlobalConstrainedGlobal())
continue;
1581 if(TMath::Abs(curTrack->Eta())>0.8)
continue;
1582 if(curTrack->Pt()<0.5)
continue;
1583 fNumberOfRecTracks++;
1585 Si(0,0)=pow(curTrack->Px(),2);
1586 Si(0,1)=curTrack->Px()*curTrack->Py();
1587 Si(1,0)=curTrack->Py()*curTrack->Px();
1588 Si(1,1)=pow(curTrack->Py(),2);
1589 S += (1/curTrack->Pt())*Si;
1590 P += curTrack->Pt();
1591 if(curTrack->Pt()>fHighestPt) fHighestPt = curTrack->Pt();
1593 if(P==0 || fNumberOfRecTracks<3){
1597 fSphericity = (2*TMatrixDEigen(St).GetEigenValues()(1,1))/(TMatrixDEigen(St).GetEigenValues()(0,0)+TMatrixDEigen(St).GetEigenValues()(1,1));
1599 EigenV = TMatrixDEigen(St).GetEigenVectors();
1600 EigenVector =
new TVector2(EigenV(0,0), EigenV(1,0));
1601 fSphericityAxisMainPhi = EigenVector->Phi();
1602 MirroredMainSphericityAxis = fSphericityAxisMainPhi + TMath::Pi();
1603 if(MirroredMainSphericityAxis > 2*TMath::Pi()) MirroredMainSphericityAxis -= 2*TMath::Pi();
1604 EigenVector =
new TVector2(EigenV(0,1), EigenV(1,1));
1605 fSphericityAxisSecondaryPhi = EigenVector->Phi();
1606 if(fSphericityAxisMainPhi > 1.396263 && fSphericityAxisMainPhi < 3.263766){
1607 fInEMCalAcceptance = kTRUE;
1608 }
else if((MirroredMainSphericityAxis > 1.396263) && (MirroredMainSphericityAxis < 3.263766)){
1609 fInEMCalAcceptance = kTRUE;
1612 fMeanPt = P/fNumberOfRecTracks;
1623 fNumberOfTruePrimaryTracks = 0;
1624 fSphericityTrue = -1;
1625 if(inputEvent->IsA()==AliAODEvent::Class()){
1626 TClonesArray *AODMCTrackArray =
dynamic_cast<TClonesArray*
>(inputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
1627 if (AODMCTrackArray == NULL)
return;
1628 for(Long_t i = 0; i < AODMCTrackArray->GetEntriesFast(); i++) {
1629 AliAODMCParticle* particle =
static_cast<AliAODMCParticle*
>(AODMCTrackArray->At(i));
1630 if (!particle)
continue;
1631 if (!particle->IsPhysicalPrimary())
continue;
1632 if (!particle->Pt())
continue;
1633 if(particle->Pt()<0.5)
continue;
1634 if(TMath::Abs(particle->Eta())>0.8)
continue;
1635 fNumberOfTruePrimaryTracks++;
1637 Si(0,0)=pow(particle->Px(),2);
1638 Si(0,1)=particle->Px()*particle->Py();
1639 Si(1,0)=particle->Py()*particle->Px();
1640 Si(1,1)=pow(particle->Py(),2);
1641 S += (1/particle->Pt())*Si;
1642 P += particle->Pt();
1644 }
else if(inputEvent->IsA()==AliESDEvent::Class()){
1645 fSphericityTrue = -1;
1647 if(P==0 || fNumberOfTruePrimaryTracks<3){
1648 fSphericityTrue = -1;
1651 fSphericityTrue = (2*TMatrixDEigen(St).GetEigenValues()(1,1))/(TMatrixDEigen(St).GetEigenValues()(0,0)+TMatrixDEigen(St).GetEigenValues()(1,1));
1659 if(fInputEvent->IsA()==AliESDEvent::Class()){
1660 static AliESDtrackCuts *EsdTrackCuts = 0x0;
1661 static int prevRun = -1;
1663 Int_t runNumber = fInputEvent->GetRunNumber();
1665 if (prevRun!=runNumber) {
1666 delete EsdTrackCuts;
1668 prevRun = runNumber;
1670 if (!EsdTrackCuts) {
1672 if( (runNumber<=146860) || (runNumber>=197470 && runNumber<=197692) || (runNumber>=172440 && runNumber<=193766) ){
1673 EsdTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010();
1675 }
else if (runNumber>=209122){
1678 EsdTrackCuts =
new AliESDtrackCuts();
1680 EsdTrackCuts->AliESDtrackCuts::SetMinNCrossedRowsTPC(70);
1681 EsdTrackCuts->AliESDtrackCuts::SetMinRatioCrossedRowsOverFindableClustersTPC(0.8);
1682 EsdTrackCuts->SetCutGeoNcrNcl(2., 130., 1.5, 0.0, 0.0);
1684 EsdTrackCuts->AliESDtrackCuts::SetMaxChi2PerClusterTPC(4);
1685 EsdTrackCuts->AliESDtrackCuts::SetAcceptKinkDaughters(kFALSE);
1686 EsdTrackCuts->AliESDtrackCuts::SetRequireTPCRefit(kTRUE);
1688 EsdTrackCuts->AliESDtrackCuts::SetRequireITSRefit(kTRUE);
1689 EsdTrackCuts->AliESDtrackCuts::SetClusterRequirementITS(AliESDtrackCuts::kSPD,
1690 AliESDtrackCuts::kAny);
1691 EsdTrackCuts->AliESDtrackCuts::SetMaxDCAToVertexXYPtDep(
"0.0105+0.0350/pt^1.1");
1692 EsdTrackCuts->AliESDtrackCuts::SetMaxChi2TPCConstrainedGlobal(36);
1693 EsdTrackCuts->AliESDtrackCuts::SetMaxDCAToVertexZ(2);
1694 EsdTrackCuts->AliESDtrackCuts::SetDCAToVertex2D(kFALSE);
1695 EsdTrackCuts->AliESDtrackCuts::SetRequireSigmaToVertex(kFALSE);
1696 EsdTrackCuts->AliESDtrackCuts::SetMaxChi2PerClusterITS(36);
1699 EsdTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011();
1701 EsdTrackCuts->SetMaxDCAToVertexZ(2);
1702 EsdTrackCuts->SetEtaRange(-0.8, 0.8);
1703 EsdTrackCuts->SetPtRange(0.15);
1708 for(
Int_t iTracks = 0; iTracks < fInputEvent->GetNumberOfTracks(); iTracks++){
1709 AliESDtrack* curTrack = (AliESDtrack*) fInputEvent->GetTrack(iTracks);
1710 if(!curTrack)
continue;
1711 if(!EsdTrackCuts->AcceptTrack(curTrack))
continue;
1714 tempPt = curTrack->Pt();
1716 if(curTrack->Pt() > tempPt){
1718 tempPt = curTrack->Pt();
1721 AliESDtrack* PtMaxTrack = (AliESDtrack*) fInputEvent->GetTrack(PtMaxID);
1722 if(tempPt!=0 && PtMaxTrack){
1723 Double_t PtMaxPhi = PtMaxTrack->Phi();
1725 if((PtMaxPhi > (TMath::Pi()/4.)) && (PtMaxPhi < (3*TMath::Pi()/4.))) fPtMaxSector = 1;
1726 if((PtMaxPhi > (3*TMath::Pi()/4.)) && (PtMaxPhi < (5*TMath::Pi()/4.))) fPtMaxSector = 2;
1727 if((PtMaxPhi > (5*TMath::Pi()/4.)) && (PtMaxPhi < (7*TMath::Pi()/4.))) fPtMaxSector = 3;
1728 if((PtMaxPhi > (7*TMath::Pi()/4.)) && (PtMaxPhi < (TMath::Pi()/4.))) fPtMaxSector = 4;
1729 if(PtMaxTrack->Eta()>0) fPtMaxSector += 4;
1731 }
else if(fInputEvent->IsA()==AliAODEvent::Class()){
1735 for(
Int_t iTracks = 0; iTracks<fInputEvent->GetNumberOfTracks(); iTracks++){
1736 AliAODTrack* curTrack = (AliAODTrack*) fInputEvent->GetTrack(iTracks);
1737 if(curTrack->GetID()<0)
continue;
1738 if(!curTrack->IsHybridGlobalConstrainedGlobal())
continue;
1739 if(TMath::Abs(curTrack->Eta())>0.8)
continue;
1740 if(curTrack->Pt()<0.15)
continue;
1743 tempPt = curTrack->Pt();
1745 if(curTrack->Pt() > tempPt){
1747 tempPt = curTrack->Pt();
1750 AliAODTrack* PtMaxTrack = (AliAODTrack*) fInputEvent->GetTrack(PtMaxID);
1751 if(tempPt!=0 && PtMaxTrack){
1752 Double_t PtMaxPhi = PtMaxTrack->Phi();
1754 if((PtMaxPhi > (TMath::Pi()/4.)) && (PtMaxPhi < (3*TMath::Pi()/4.))) fPtMaxSector = 1;
1755 if((PtMaxPhi > (3*TMath::Pi()/4.)) && (PtMaxPhi < (5*TMath::Pi()/4.))) fPtMaxSector = 2;
1756 if((PtMaxPhi > (5*TMath::Pi()/4.)) && (PtMaxPhi < (7*TMath::Pi()/4.))) fPtMaxSector = 3;
1757 if((PtMaxPhi > (7*TMath::Pi()/4.)) && (PtMaxPhi < (TMath::Pi()/4.))) fPtMaxSector = 4;
1758 if(PtMaxTrack->Eta()>0) fPtMaxSector += 4;
1766 if(!mcEvent)
return kFALSE;
1768 if (particle->GetPdgCode() == 22){
1770 if( TMath::Abs(particle->Eta()) > etaMax )
return kFALSE;
1772 if(particle->GetMother(0) >-1 && mcEvent->Particle(particle->GetMother(0))->GetPdgCode() == 22){
1776 TParticle* ePos = NULL;
1777 TParticle* eNeg = NULL;
1778 if(particle->GetNDaughters() >= 2){
1779 for(
Int_t daughterIndex=particle->GetFirstDaughter();daughterIndex<=particle->GetLastDaughter();daughterIndex++){
1780 if(daughterIndex<0)
continue;
1781 TParticle *tmpDaughter = mcEvent->Particle(daughterIndex);
1782 if(tmpDaughter->GetUniqueID() == 5){
1783 if(tmpDaughter->GetPdgCode() == 11){
1785 }
else if(tmpDaughter->GetPdgCode() == -11){
1791 if(ePos == NULL || eNeg == NULL){
1795 if( TMath::Abs(ePos->Eta()) > etaMax ||
1796 TMath::Abs(eNeg->Eta()) > etaMax )
1800 if(ePos->R() > rMax){
1803 if(TMath::Abs(ePos->Vz()) > zMax){
1806 if(TMath::Abs(eNeg->Vz()) > zMax){
1811 Double_t lineCutZRSlope = tan(2*atan(exp(-etaMax)));
1813 if( ePos->R() <= ((TMath::Abs(ePos->Vz()) * lineCutZRSlope) - lineCutZValue)){
1816 if( eNeg->R() <= ((TMath::Abs(eNeg->Vz()) * lineCutZRSlope) - lineCutZValue)){
1827 const AliVVertex* primVtxMC = fMCEvent->GetPrimaryVertex();
1828 Double_t mcProdVtxX = primVtxMC->GetX();
1829 Double_t mcProdVtxY = primVtxMC->GetY();
1830 Double_t mcProdVtxZ = primVtxMC->GetZ();
1834 for(Long_t i = 0; i < fMCEvent->GetNumberOfTracks(); i++) {
1835 if (fEventCuts->IsConversionPrimaryESD( fMCEvent, i, mcProdVtxX, mcProdVtxY, mcProdVtxZ)){
1837 TParticle* particle = (TParticle *)fMCEvent->Particle(i);
1838 if (!particle)
continue;
1839 if (ParticleIsConvertedPhoton(fMCEvent, particle, 0.9, 180.,250. )){
1840 if(particle->GetFirstDaughter()<0)
continue;
1841 TParticle *tmpDaughter = fMCEvent->Particle(particle->GetFirstDaughter());
1842 if (!tmpDaughter)
continue;
1843 fHistoMCGammaPtvsR->Fill(particle->Pt(),tmpDaughter->R());
1844 fHistoMCGammaPtvsPhi->Fill(particle->Pt(),particle->Phi());
1845 fHistoMCGammaRvsPhi->Fill(tmpDaughter->R(),particle->Phi());
1847 if (ParticleIsConvertedPhoton(fMCEvent, particle, 1.4, 180.,250. )){
1848 if(particle->GetFirstDaughter()<0)
continue;
1849 TParticle *tmpDaughter = fMCEvent->Particle(particle->GetFirstDaughter());
1850 if (!tmpDaughter)
continue;
1851 fHistoMCGammaPtvsEta->Fill(particle->Pt(),particle->Eta());
1852 fHistoMCGammaRvsEta->Fill(tmpDaughter->R(),particle->Eta());
1853 fHistoMCGammaPhivsEta->Fill(particle->Phi(),particle->Eta());
1862 const AliVVertex* primVtxMC = fMCEvent->GetPrimaryVertex();
1863 Double_t mcProdVtxX = primVtxMC->GetX();
1864 Double_t mcProdVtxY = primVtxMC->GetY();
1865 Double_t mcProdVtxZ = primVtxMC->GetZ();
1868 Int_t tracklabelPos=currentV0->GetPindex();
1869 Int_t tracklabelNeg=currentV0->GetNindex();
1871 Int_t labelp=TMath::Abs(fConversionCuts->GetTrack(fInputEvent,tracklabelPos)->GetLabel());
1872 Int_t labeln=TMath::Abs(fConversionCuts->GetTrack(fInputEvent,tracklabelNeg)->GetLabel());
1874 TParticle* negPart = 0x0;
1875 if(labeln>-1) negPart = (TParticle *)fMCEvent->Particle(labeln);
1876 TParticle* posPart = 0x0;
1877 if(labelp>-1) posPart = (TParticle *)fMCEvent->Particle(labelp);
1879 if ( negPart == NULL || posPart == NULL )
return;
1882 Long_t motherlabelNeg = negPart->GetFirstMother();
1883 Long_t motherlabelPos = posPart->GetFirstMother();
1886 if (motherlabelNeg>-1 && motherlabelNeg == motherlabelPos && negPart->GetFirstMother() != -1){
1887 if (fEventCuts->IsConversionPrimaryESD( fMCEvent, negPart->GetFirstMother(), mcProdVtxX, mcProdVtxY, mcProdVtxZ)){
1889 TParticle* mother = (TParticle *)fMCEvent->Particle(motherlabelNeg);
1890 if (mother->GetPdgCode() == 22 ){
1891 if (!CheckVectorForDoubleCount(fVectorFoundGammas,motherlabelNeg ) ){
1892 if (ParticleIsConvertedPhoton(fMCEvent, mother, 0.9, 180.,250. )){
1893 fHistoRecMCGammaPtvsR->Fill(mother->Pt(),negPart->R());
1894 fHistoRecMCGammaPtvsPhi->Fill(mother->Pt(),mother->Phi());
1895 fHistoRecMCGammaRvsPhi->Fill(negPart->R(),mother->Phi());
1897 if (ParticleIsConvertedPhoton(fMCEvent, mother, 1.4, 180.,250. )){
1898 fHistoRecMCGammaPtvsEta->Fill(mother->Pt(),mother->Eta());
1899 fHistoRecMCGammaRvsEta->Fill(negPart->R(),mother->Eta());
1900 fHistoRecMCGammaPhivsEta->Fill(mother->Phi(),mother->Eta());
1904 if (ParticleIsConvertedPhoton(fMCEvent, mother, 0.9, 180.,250. )){
1905 fHistoRecMCGammaMultiPt->Fill(mother->Pt());
1906 fHistoRecMCGammaMultiPhi->Fill(mother->Phi());
1907 fHistoRecMCGammaMultiR->Fill(negPart->R());
1909 if (ParticleIsConvertedPhoton(fMCEvent, mother, 1.4, 180.,250. )){
1910 fHistoRecMCGammaMultiPtvsEta->Fill(mother->Pt(),mother->Eta());
1928 Int_t kMaxTPCV0Conflicts = 1;
1932 fCurrentV0->GetXYZ(convX,convY,convZ);
1933 Double_t convR = TMath::Sqrt(convX*convX+convY*convY);
1941 fHistoImpactParameterStudy->Fill(0);
1944 AliESDtrack* positiveTrack = (AliESDtrack*) pTrack;
1945 AliESDtrack* negativeTrack = (AliESDtrack*) nTrack;
1947 if (!positiveTrack->IsOn(AliESDtrack::kITSin) && !negativeTrack->IsOn(AliESDtrack::kITSin)){
1948 fHistoImpactParameterStudy->Fill(1);
1952 Bool_t RemovedByZcut = kFALSE;
1953 Bool_t RemovedByYcut = kFALSE;
1958 if(((TMath::Abs(positiveTrack->GetZ()))>fZmax) || ((TMath::Abs(negativeTrack->GetZ()))>fZmax)){
1959 fHistoImpactParameterStudy->Fill(2);
1960 RemovedByZcut=kTRUE;
1964 if(((TMath::Abs(positiveTrack->GetY()))>fYmax) || ((TMath::Abs(negativeTrack->GetY()))>fYmax)){
1965 fHistoImpactParameterStudy->Fill(3);
1966 RemovedByYcut=kTRUE;
1971 Bool_t RemovedByCausality=kFALSE;
1974 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,
1975 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,
1976 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,
1977 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,
1978 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,
1979 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,
1980 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,
1981 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,
1982 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,
1983 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,
1984 233.850,235.350,236.850,238.350,239.850,241.350,242.850,244.350,245.850};
1987 fHistoR->Fill(convR);
1988 fHistoRrecalc->Fill(convRrecalc);
1989 Double_t alpha = TMath::ATan2(convY,convX);
1990 if (alpha<0) alpha += TMath::Pi()*2;
1991 Int_t sec = alpha/(TMath::Pi()/9);
1992 alpha = (10.+sec*20.)*TMath::DegToRad();
1995 Double_t xsV0 = convX*cs - convY*sn;
1996 fHistoRviaAlpha->Fill(xsV0);
1997 Double_t alpha_r = TMath::ATan2(convYrecalc,convXrecalc);
1998 if (alpha_r<0) alpha_r += TMath::Pi()*2;
1999 Int_t sec_r = alpha_r/(TMath::Pi()/9);
2000 alpha_r = (10.+sec_r*20.)*TMath::DegToRad();
2001 Double_t cs_r = TMath::Cos(alpha_r);
2002 Double_t sn_r = TMath::Sin(alpha_r);
2003 Double_t xsV0_r = convXrecalc*cs_r - convYrecalc*sn_r;
2004 fHistoRviaAlphaRecalc->Fill(xsV0_r);
2007 fHistoImpactParameterStudy->Fill(4);
2009 for (
Int_t it=2;it--;) {
2010 Int_t trId = fCurrentV0->GetIndex(it);
2011 AliESDtrack* tr = fESDEvent->GetTrack(trId);
2012 const TBits& bits = tr->GetTPCClusterMap();
2013 Int_t nConflict = 0;
2014 for (
Int_t ic=0;ic<159;ic++) {
2015 if (rTPC[ic]>(xsV0-kTPCMargin))
break;
2016 if (bits.TestBitNumber(ic)){
2018 fHistoRdiff->Fill(xsV0-rTPC[ic]);
2020 if (nConflict>kMaxTPCV0Conflicts) {
2021 fHistoImpactParameterStudy->Fill(5);
2022 RemovedByCausality=kTRUE;
2030 Bool_t RemovedByAnyCut=kFALSE;
2031 if(RemovedByZcut||RemovedByYcut||RemovedByCausality){
2032 fHistoImpactParameterStudy->Fill(6);
2033 RemovedByAnyCut=kTRUE;
2046 fImpactParamTree->Branch(
"posPt",&posPt,
"posPt/F");
2047 fImpactParamTree->Branch(
"posY",&posY,
"posY/F");
2048 fImpactParamTree->Branch(
"R",&R,
"R/F");
2049 posZ = positiveTrack->GetZ();
2050 posY = positiveTrack->GetY();
2051 posX = positiveTrack->GetX();
2052 posPt = positiveTrack->Pt();
2053 negZ = negativeTrack->GetZ();
2054 negY = negativeTrack->GetY();
2055 negX = negativeTrack->GetX();
2056 negPt = negativeTrack->Pt();
2058 fImpactParamTree->Fill();
2061 fHistoPosTrackImpactParamZ->Fill(posZ);
2062 fHistoPosTrackImpactParamY->Fill(posY);
2063 fHistoPosTrackImpactParamX->Fill(posX);
2064 fHistoPosTrackImpactParamZvsPt->Fill(posPt, posZ);
2065 fHistoPosTrackImpactParamYvsPt->Fill(posPt, posY);
2066 fHistoPosTrackImpactParamXvsPt->Fill(posPt, posX);
2067 fHistoNegTrackImpactParamZ->Fill(negZ);
2068 fHistoNegTrackImpactParamY->Fill(negY);
2069 fHistoNegTrackImpactParamX->Fill(negX);
2070 fHistoNegTrackImpactParamZvsPt->Fill(negPt, negZ);
2071 fHistoNegTrackImpactParamYvsPt->Fill(negPt, negY);
2072 fHistoNegTrackImpactParamXvsPt->Fill(negPt, negX);
2075 fHistoPt->Fill(positiveTrack->Pt());
2076 fHistoImpactParamZvsR->Fill(convZrecalc,convRrecalc);
2084 fHistoDCAzPhoton->Fill(DCAzPhoton);
2085 if(!RemovedByAnyCut) {
2086 fHistoPt2->Fill(positiveTrack->Pt());
2087 fHistoImpactParamZvsR2->Fill(convZrecalc,convRrecalc);
2088 fHistoDCAzPhoton2->Fill(DCAzPhoton);
2097 if(tobechecked > -1)
2099 vector<Int_t>::iterator it;
2100 it = find (vec.begin(), vec.end(), tobechecked);
2101 if (it != vec.end())
return true;
2110 if(tobechecked > -1)
2112 vector<Int_t>::iterator it;
2113 it = find (vec.begin(), vec.end(), tobechecked);
2114 if (it != vec.end())
return true;
2116 vec.push_back(tobechecked);
2132 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 CalculateSphericityMCTrue(AliVEvent *inputEvent)
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
void CalculateSphericity()
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
void CalculatePtMaxSector()
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