18 #include "TDatabasePDG.h" 22 #include "AliMCEvent.h" 23 #include "AliGenPythiaEventHeader.h" 24 #include "AliVParticle.h" 35 fTriggerDetector(), fTriggerDetectorString(),
37 fMinChargedPt(0), fMinNeutralPt(0),
39 fParton6(), fParton7(),
40 fParton6PDG(0), fParton7PDG(0),
43 fNPrimaries(0), fPtHard(0),
44 fhPtHard(0), fhPtParton(0), fhPtJet(0),
45 fhPtPartonPtHard(0), fhPtJetPtHard(0), fhPtJetPtParton(0),
46 fhPtOtherDecayMesonId(0),
47 fhPtPi0Status(0), fhPtEtaStatus(0),
48 fhPtPi0DecayStatus(0), fhPtEtaDecayStatus(0), fhPtOtherDecayStatus(0),
49 fhPtPi0Not2Gamma(0), fhPtEtaNot2Gamma(0)
70 for(
Int_t j = 0; j < 2; j++)
108 AliDebug(1,Form(
"End, not enough partons, n primaries %d",
fNPrimaries));
115 iparton = (
GetMC()->GetTrack(indexTrig))->GetMother();
116 AliVParticle * mother =
GetMC()->GetTrack(iparton);
119 iparton = mother->GetMother();
122 AliDebug(1,
"Negative index, skip AOD event");
125 mother =
GetMC()->GetTrack(iparton);
132 AliDebug(1,Form(
"This particle is not from hard process - pdg %d, parton index %d\n",partType, iparton));
143 AliDebug(1,Form(
"Trigger pdg %d pT %2.2f, phi %2.2f, eta %2.2f", partType,ptTrig,phiTrig*TMath::RadToDeg(),etaTrig));
149 AliDebug(1,Form(
"Jet 6 pT %2.2f, phi %2.2f, eta %2.2f",jetPt,jetPhi*TMath::RadToDeg(),jetEta));
155 AliDebug(1,Form(
"Jet 7 pT %2.2f, phi %2.2f, eta %2.2f",awayJetPt,awayJetPhi*TMath::RadToDeg(),awayJetEta));
170 jetPhi =
fJet7.Phi();
171 jetEta =
fJet7.Eta();
173 awayJetPt =
fJet6.Pt();
174 awayJetEta =
fJet6.Eta();
175 awayJetPhi =
fJet6.Phi();
181 Float_t deltaPhi = TMath::Abs(phiTrig-awayJetPhi) *TMath::RadToDeg();
182 AliDebug(1,Form(
"Trigger Away jet phi %2.2f\n",deltaPhi));
189 if (nearPDG == 22) near = 0;
190 else if(nearPDG == 21) near = 1;
193 if (awayPDG == 22) away = 0;
194 else if(awayPDG == 21) away = 1;
204 if( partonPt > 0 ) zPart = ptTrig / partonPt;
205 if( jetPt > 0 ) zJet = ptTrig / jetPt ;
231 if(partType ==
kmcPrimPhoton && deltaPhi < 220 && deltaPhi > 140 && TMath::Abs(awayJetEta) < 0.6)
240 AliDebug(1,
"End TRUE");
251 outputContainer->SetName(
"GenKineHistos") ;
261 fhPtHard =
new TH1F(
"hPtHard",
" pt hard for selected triggers",nptbins,ptmin,ptmax);
262 fhPtHard->SetXTitle(
"#it{p}_{T}^{hard} (GeV/#it{c})");
265 fhPtParton =
new TH1F(
"hPtParton",
" pt parton for selected triggers",nptbins,ptmin,ptmax);
266 fhPtParton->SetXTitle(
"#it{p}_{T}^{parton} (GeV/#it{c})");
269 fhPtJet =
new TH1F(
"hPtJet",
" pt jet for selected triggers",nptbins,ptmin,ptmax);
270 fhPtJet->SetXTitle(
"#it{p}_{T}^{jet} (GeV/#it{c})");
273 fhPtPartonPtHard =
new TH2F(
"hPtPartonPtHard",
"parton pt / pt hard for selected triggers",nptbins,ptmin,ptmax,200,0,2);
278 fhPtJetPtHard =
new TH2F(
"hPtJetPtHard",
"jet pt / pt hard for selected triggers",nptbins,ptmin,ptmax,200,0,2);
280 fhPtJetPtHard->SetYTitle(
"#it{p}_{T}^{jet}/#it{p}_{T}^{hard}");
283 fhPtJetPtParton =
new TH2F(
"hPtJetPtParton",
"parton pt / pt hard for selected triggers",nptbins,ptmin,ptmax,200,0,2);
288 fhPtPi0Not2Gamma =
new TH1F(
"hPtPi0Not2Gamma",
"#pi^{0} decay other than 2 #gamma",nptbins,ptmin,ptmax);
292 fhPtEtaNot2Gamma =
new TH1F(
"hPtEtaNot2Gamma",
"#eta decay other than 2 #gamma",nptbins,ptmin,ptmax);
296 fhPtGammaFromPi0Not2Gamma =
new TH1F(
"hPtGammaFromPi0Not2Gamma",
"#gamma from #pi^{0} decay other than 2 #gamma",nptbins,ptmin,ptmax);
300 fhPtGammaFromEtaNot2Gamma =
new TH1F(
"hPtGammaFromEtaNot2Gamma",
"#gamma from #eta decay other than 2 #gamma",nptbins,ptmin,ptmax);
304 fhPtPi0Status =
new TH2F(
"hPtPi0Status",
"#pi^{0} status",nptbins,ptmin,ptmax,101,-50,50);
309 fhPtEtaStatus =
new TH2F(
"hPtEtaStatus",
"#eta status",nptbins,ptmin,ptmax,101,-50,50);
314 fhPtPi0DecayStatus =
new TH2F(
"hPtPi0DecayStatus",
"#gamma from #pi^{0}, mother status",nptbins,ptmin,ptmax,101,-50,50);
319 fhPtEtaDecayStatus =
new TH2F(
"hPtEtaStatus",
"#gamma from #eta, mother status",nptbins,ptmin,ptmax,101,-50,50);
324 fhPtOtherDecayStatus =
new TH2F(
"hPtOtherDecayStatus",
"#gamma from other decay particle, mother status",nptbins,ptmin,ptmax,101,-50,50);
341 TString name [] = {
"",
"_EMC",
"_Photon",
"_EMC_Photon"};
342 TString title [] = {
"",
", neutral in EMCal",
", neutral only #gamma-like",
", neutral in EMCal and only #gamma-like"};
343 TString leading[] = {
"NotLeading",
"Leading"};
345 TString partTitl[] = {
"#gamma_{direct}",
"#gamma_{decay}^{#pi}",
"#gamma_{decay}^{#eta}",
"#gamma_{decay}^{other}",
"#pi^{0}",
"#eta"};
346 TString particle[] = {
"DirectPhoton" ,
"Pi0DecayPhoton" ,
"EtaDecayPhoton" ,
"OtherDecayPhoton" ,
"Pi0" ,
"Eta"};
350 fhPt[p] =
new TH1F(Form(
"h%sPt",particle[p].
Data()),Form(
"Input %s p_{T}",partTitl[p].
Data()),nptbins,ptmin,ptmax);
351 fhPt[p]->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
352 outputContainer->Add(
fhPt[p]);
354 fhPhi[p] =
new TH1F(Form(
"h%sPhi",particle[p].
Data()),Form(
"Input %s #varphi with #it{p}_{T} > %f GeV/c",partTitl[p].
Data(),
GetMinPt()),180,0,TMath::TwoPi());
355 fhPhi[p]->SetXTitle(
"#varphi (rad)");
356 outputContainer->Add(
fhPhi[p]);
358 fhEta[p] =
new TH1F(Form(
"h%sEta",particle[p].
Data()),Form(
"Input %s #eta with #it{p}_{T} > %f GeV/c",partTitl[p].
Data(),
GetMinPt()),200,-2,2);
359 fhEta[p]->SetXTitle(
"#eta");
360 outputContainer->Add(
fhEta[p]);
363 Form(
"Input %s #eta vs #varphi with #it{p}_{T} > %f GeV/c",partTitl[p].
Data(),
GetMinPt()),
364 200,-2,2,180,0,TMath::TwoPi());
366 fhEtaPhi[p]->SetYTitle(
"#varphi (rad)");
370 Form(
"Input %s #varphi vs status code with #it{p}_{T} > %f GeV/c",partTitl[p].
Data(),
GetMinPt()),
371 180,0,TMath::TwoPi(),101,-50,50);
377 Form(
"Input %s #eta vs status code with #it{p}_{T} > %f GeV/c",partTitl[p].
Data(),
GetMinPt()),
378 200,-2,2,101,-50,50);
384 fhPtOrigin[p] =
new TH2F(Form(
"h%sPtOrigin",particle[p].
Data()),Form(
"Input %s p_{T} vs origin",partTitl[p].
Data()),nptbins,ptmin,ptmax,11,0,11) ;
385 fhPtOrigin[p]->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
387 fhPtOrigin[p]->GetYaxis()->SetBinLabel(1 ,
"Status 21");
388 fhPtOrigin[p]->GetYaxis()->SetBinLabel(2 ,
"Quark");
389 fhPtOrigin[p]->GetYaxis()->SetBinLabel(3 ,
"qq Resonances ");
390 fhPtOrigin[p]->GetYaxis()->SetBinLabel(4 ,
"Resonances");
391 fhPtOrigin[p]->GetYaxis()->SetBinLabel(5 ,
"#rho");
392 fhPtOrigin[p]->GetYaxis()->SetBinLabel(6 ,
"#omega");
393 fhPtOrigin[p]->GetYaxis()->SetBinLabel(7 ,
"K");
394 fhPtOrigin[p]->GetYaxis()->SetBinLabel(8 ,
"Other");
395 fhPtOrigin[p]->GetYaxis()->SetBinLabel(9 ,
"#eta");
396 fhPtOrigin[p]->GetYaxis()->SetBinLabel(10 ,
"#eta prime");
399 fhPtOriginNotFinal[p] =
new TH2F(Form(
"h%sPtOriginNotFinal",particle[p].
Data()),Form(
"Input %s p_{T} vs origin, status 0",partTitl[p].
Data()),nptbins,ptmin,ptmax,11,0,11) ;
419 Form(
"%s: Leading of all particles%s",partTitl[p].
Data(),title[i].
Data()),
420 nptbins,ptmin,ptmax);
421 fhPtLeading[p][i]->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
425 Form(
"%s: Leading of all particles%s, isolated",partTitl[p].
Data(),title[i].
Data()),
426 nptbins,ptmin,ptmax);
431 Form(
"%s: Leading of all particles%s",partTitl[p].
Data(),title[i].
Data()),
432 nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
444 Form(
"#gamma-jet: %s of all particles%s", leading[j].
Data(), title[i].
Data()),
445 nptbins,ptmin,ptmax,3,0,3);
456 Form(
"%s: %s of all particles%s", partTitl[p].
Data(), leading[j].
Data(), title[i].
Data()),
457 nptbins,ptmin,ptmax,3,0,3);
466 Form(
"%s: %s of all particles%s, isolated", partTitl[p].
Data(), leading[j].
Data(), title[i].
Data()),
467 nptbins,ptmin,ptmax,3,0,3);
479 Form(
"%s: %s of all particles%s", partTitl[p].
Data(), leading[j].
Data(), title[i].
Data()),
480 nptbins,ptmin,ptmax,3,0,3);
489 Form(
"%s: %s of all particles%s, isolated", partTitl[p].
Data(), leading[j].
Data(), title[i].
Data()),
490 nptbins,ptmin,ptmax,3,0,3);
501 Form(
"#it{z}_{Hard} of %s: %s of all particles%s", partTitl[p].
Data(), leading[j].
Data(), title[i].
Data()),
502 nptbins,ptmin,ptmax,200,0,2);
503 fhZHard[p][j][i]->SetYTitle(
"#it{p}_{T}^{particle}/#it{p}_{T}^{hard}");
504 fhZHard[p][j][i]->SetXTitle(
"#it{p}_{T}^{particle} (GeV/#it{c})");
505 outputContainer->Add(
fhZHard[p][j][i]);
508 Form(
"#it{z}_{Hard} of %s: %s of all particles%s, isolated", partTitl[p].
Data(), leading[j].
Data(), title[i].
Data()),
509 nptbins,ptmin,ptmax,200,0,2);
510 fhZHardIsolated[p][j][i]->SetYTitle(
"#it{p}_{T}^{particle}/#it{p}_{T}^{hard}");
511 fhZHardIsolated[p][j][i]->SetXTitle(
"#it{p}_{T}^{particle} (GeV/#it{c})");
517 Form(
"#it{z}_{Parton} of %s: %s of all particles%s", partTitl[p].
Data(), leading[j].
Data(), title[i].
Data()),
518 nptbins,ptmin,ptmax,200,0,2);
519 fhZParton[p][j][i]->SetYTitle(
"#it{p}_{T}^{particle}/#it{p}_{T}^{hard}");
520 fhZParton[p][j][i]->SetXTitle(
"#it{p}_{T}^{particle} (GeV/#it{c})");
521 outputContainer->Add(
fhZParton[p][j][i]);
524 Form(
"#it{z}_{Parton} of %s: %s of all particles%s, isolated", partTitl[p].
Data(), leading[j].
Data(), title[i].
Data()),
525 nptbins,ptmin,ptmax,200,0,2);
526 fhZPartonIsolated[p][j][i]->SetYTitle(
"#it{p}_{T}^{particle}/#it{p}_{T}^{hard}");
534 Form(
"#it{z}_{Jet} of %s: %s of all particles%s", partTitl[p].
Data(), leading[j].
Data(), title[i].
Data()),
535 nptbins,ptmin,ptmax,200,0,2);
536 fhZJet[p][j][i]->SetYTitle(
"#it{p}_{T}^{particle}/#it{p}_{T}^{hard}");
537 fhZJet[p][j][i]->SetXTitle(
"#it{p}_{T}^{particle} (GeV/#it{c})");
538 outputContainer->Add(
fhZJet[p][j][i]);
541 Form(
"#it{z}_{Jet} of %s: %s of all particles%s, isolated", partTitl[p].
Data(), leading[j].
Data(), title[i].
Data()),
542 nptbins,ptmin,ptmax,200,0,2);
543 fhZJetIsolated[p][j][i]->SetYTitle(
"#it{p}_{T}^{particle}/#it{p}_{T}^{hard}");
544 fhZJetIsolated[p][j][i]->SetXTitle(
"#it{p}_{T}^{particle} (GeV/#it{c})");
550 fhXE[p][j][i] =
new TH2F(Form(
"h%sXE%s%s", particle[p].
Data(), leading[j].
Data(), name[i].
Data()),
551 Form(
"#it{z}_{Jet} of %s: %s of all particles%s", partTitl[p].
Data(), leading[j].
Data(), title[i].
Data()),
552 nptbins,ptmin,ptmax,200,0,2);
553 fhXE[p][j][i]->SetYTitle(
"#it{p}_{T}^{particle}/#it{p}_{T}^{hard}");
554 fhXE[p][j][i]->SetXTitle(
"#it{p}_{T}^{particle} (GeV/#it{c})");
555 outputContainer->Add(
fhXE[p][j][i]);
558 Form(
"#it{z}_{Jet} of %s: %s of all particles%s, isolated", partTitl[p].
Data(), leading[j].
Data(), title[i].
Data()),
559 nptbins,ptmin,ptmax,200,0,2);
560 fhXEIsolated[p][j][i]->SetYTitle(
"#it{p}_{T}^{particle}/#it{p}_{T}^{hard}");
561 fhXEIsolated[p][j][i]->SetXTitle(
"#it{p}_{T}^{particle} (GeV/#it{c})");
568 Form(
"#it{z}_{Jet} of %s: %s of all particles%s", partTitl[p].
Data(), leading[j].
Data(), title[i].
Data()),
569 nptbins,ptmin,ptmax,200,0,2);
570 fhXEUE[p][j][i]->SetYTitle(
"#it{p}_{T}^{particle}/#it{p}_{T}^{hard}");
571 fhXEUE[p][j][i]->SetXTitle(
"#it{p}_{T}^{particle} (GeV/#it{c})");
572 outputContainer->Add(
fhXEUE[p][j][i]);
575 Form(
"#it{z}_{Jet} of %s: %s of all particles%s, isolated", partTitl[p].
Data(), leading[j].
Data(), title[i].
Data()),
576 nptbins,ptmin,ptmax,200,0,2);
577 fhXEUEIsolated[p][j][i]->SetYTitle(
"#it{p}_{T}^{particle}/#it{p}_{T}^{hard}");
578 fhXEUEIsolated[p][j][i]->SetXTitle(
"#it{p}_{T}^{particle} (GeV/#it{c})");
584 return outputContainer;
606 if(p6phi < 0) p6phi +=TMath::TwoPi();
618 if(p7phi < 0) p7phi +=TMath::TwoPi();
625 if(!strcmp(
GetReader()->GetGenEventHeader()->ClassName(),
"AliGenPythiaEventHeader"))
633 const Int_t nTriggerJets = pygeh->NTriggerJets();
641 for(
Int_t ijet = 0; ijet< nTriggerJets; ijet++)
643 pygeh->TriggerJet(ijet, tmpjet);
645 fLVTmp.SetPxPyPzE(tmpjet[0],tmpjet[1],tmpjet[2],tmpjet[3]);
647 if(jphi < 0) jphi +=TMath::TwoPi();
705 if(phiTrig < 0 ) phiTrig += TMath::TwoPi();
709 Int_t ipartonAway = 0;
714 if(ipr==indexTrig)
continue;
716 AliVParticle * particle =
GetMC()->GetTrack(ipr) ;
719 status = particle->MCStatusCode();
722 if( status != 1) continue ;
724 particle->Momentum(
fLVTmp);
728 charge = particle->Charge();
731 if( charge == 0 )
continue;
735 if(phi < 0 ) phi += TMath::TwoPi();
746 ipartonAway = (
GetMC()->GetTrack(ipr))->GetMother();
749 AliDebug(1,
"End, no mother index");
753 AliVParticle * mother =
GetMC()->GetTrack(ipartonAway);
754 while (ipartonAway > 7)
756 ipartonAway = mother->GetMother();
757 if(ipartonAway < 0)
break;
758 mother =
GetMC()->GetTrack(ipartonAway);
765 Float_t xe = -pt/ptTrig*TMath::Cos(phi-phiTrig);
767 if((ipartonAway==6 || ipartonAway==7) && iparton!=ipartonAway)
782 if(ipartonAway!=6 && ipartonAway!=7)
828 Float_t ptMaxNeutEMCALPhot = 0;
843 if(phiTrig < 0 ) phiTrig += TMath::TwoPi();
855 Int_t nICNeutral = 0;
856 Int_t nICNeutEMCAL = 0;
857 Int_t nICNeutPhot = 0;
858 Int_t nICNeutEMCALPhot = 0;
875 if(ipr == indexTrig)
continue;
877 AliVParticle * particle =
GetMC()->GetTrack(ipr) ;
879 imother = particle->GetMother();
880 pdg = particle->PdgCode();
881 status = particle->MCStatusCode();
884 if( status != 1) continue ;
887 particle->Momentum(
fLVTmp);
890 charge = particle->Charge();
894 if( imother == indexTrig) continue ;
899 if(phi < 0 ) phi += TMath::TwoPi();
912 if( ptMaxNeutral < pt ) ptMaxNeutral = pt;
914 if( radius < rThresIC )
916 if( pt > ptThresIC ) nICNeutral++ ;
921 if(pdg==22 || pdg==111) phPDG = kTRUE;
926 if( ptMaxNeutPhot < pt) ptMaxNeutPhot = pt;
928 if( radius < rThresIC )
930 if(pt > ptThresIC) nICNeutPhot++ ;
937 if(!inCalo)
continue;
939 if( ptMaxNeutEMCAL < pt ) ptMaxNeutEMCAL = pt;
940 if( radius < rThresIC )
942 if( pt > ptThresIC ) nICNeutEMCAL++ ;
948 if( ptMaxNeutEMCALPhot < pt ) ptMaxNeutEMCALPhot = pt;
949 if( radius < rThresIC )
951 if (pt > ptThresIC) nICNeutEMCALPhot++ ;
952 sumNePtEMCPhot += pt;
960 if( ptMaxCharged < pt ) ptMaxCharged = pt;
962 if( radius < rThresIC )
966 if( pt > ptThresIC ) nICTrack++ ;
973 if(ptTrig > ptMaxCharged)
977 if(ptTrig > ptMaxNeutral ) leading[0] = kTRUE ;
978 if(ptTrig > ptMaxNeutEMCAL ) leading[1] = kTRUE ;
979 if(ptTrig > ptMaxNeutPhot ) leading[2] = kTRUE ;
980 if(ptTrig > ptMaxNeutEMCALPhot) leading[3] = kTRUE ;
992 if(nICNeutral == 0 ) isolated[0] = kTRUE ;
993 if(nICNeutEMCAL == 0 ) isolated[1] = kTRUE ;
994 if(nICNeutPhot == 0 ) isolated[2] = kTRUE ;
995 if(nICNeutEMCALPhot == 0 ) isolated[3] = kTRUE ;
1000 if(sumChPt + sumNePt < sumThresIC ) isolated[0] = kTRUE ;
1001 if(sumChPt + sumNePtEMC < sumThresIC ) isolated[1] = kTRUE ;
1002 if(sumChPt + sumNePtPhot < sumThresIC ) isolated[2] = kTRUE ;
1003 if(sumChPt + sumNePtEMCPhot < sumThresIC ) isolated[3] = kTRUE ;
1033 AliFatal(
"MCEvent not available, is the MC handler called? STOP");
1037 AliDebug(1,
"Start");
1044 AliVParticle * primary = 0;
1058 primary =
GetMC()->GetTrack(parton6);
1067 primary =
GetMC()->GetTrack(parton7);
1078 Int_t statusTrig = 0;
1081 Int_t momStatus = 0;
1083 Int_t momNDaugh = 0;
1089 Int_t nDaughters = 0;
1093 AliVParticle* particle =
GetMC()->GetTrack(ipr) ;
1095 pdgTrig = particle->PdgCode();
1096 statusTrig = particle->MCStatusCode();
1097 imother = particle->GetMother();
1098 nDaughters = particle->GetNDaughters();
1099 id0 = particle->GetDaughterLabel(0);
1100 id1 = particle->GetDaughterLabel(1);
1113 if( pdgTrig == 22 && statusTrig != 1 ) continue ;
1115 if( pdgTrig != 111 && pdgTrig != 22 && pdgTrig !=221 ) continue ;
1122 if( ptTrig <
GetMinPt() ) continue ;
1128 Int_t partType = -1;
1134 momStatus = (
GetMC()->GetTrack(imother))->MCStatusCode();
1135 momPdg = (
GetMC()->GetTrack(imother))->PdgCode();
1136 momNDaugh = (
GetMC()->GetTrack(imother))->GetNDaughters();
1137 momImom = (
GetMC()->GetTrack(imother))->GetMother();
1139 if (imother < 8 && statusTrig == 1)
1143 else if(momPdg == 111 )
1147 else if(momPdg == 221 )
1151 else if(TMath::Abs(momStatus) > 0 )
1157 else if( (pdgTrig==111 || pdgTrig==221) && nDaughters == 2 )
1159 pdg0 = (
GetMC()->GetTrack(id0))->PdgCode();
1160 pdg1 = (
GetMC()->GetTrack(id1))->PdgCode();
1162 if( pdg0 == 22 && pdg1== 22 )
1165 else if( pdgTrig==221 ) partType =
kmcPrimEta;
1168 else if( (pdgTrig==111 || pdgTrig==221) )
1172 if(! in ) continue ;
1178 if(partType < 0 ) continue ;
1185 if(phi < 0) phi+=TMath::TwoPi();
1191 if(partType < 4 && partType!=0)
1206 if(! in ) continue ;
1209 AliDebug(1,Form(
"Select trigger particle %d: pdg %d, type %d, status %d, mother index %d, pT %2.2f, eta %2.2f, phi %2.2f",
1210 ipr, pdgTrig, partType, statusTrig, imother, ptTrig,
fTrigger.Eta(),
fTrigger.Phi()*TMath::RadToDeg()));
1243 if (momPdg > 2100 && momPdg < 2210)
1249 else if(momPdg >= 310 && momPdg <= 323)
1259 Int_t momOrgPdg = -1;
1260 Int_t momOrgStatus = -1;
1261 if(momImom >=0 || imother >=0)
1263 AliVParticle* mother = 0;
1264 if(partType < 4 && partType!=0 )
1265 mother =
GetMC()->GetTrack(momImom);
1267 mother =
GetMC()->GetTrack(imother);
1269 momOrgPdg = TMath::Abs(mother->PdgCode());
1270 momOrgStatus = mother->MCStatusCode();
1275 else if(momOrgPdg > 2100 && momOrgPdg < 2210)
1281 else if(momOrgPdg >= 310 && momOrgPdg <= 323)
1284 else if(momOrgStatus == 11 || momOrgStatus == 12 )
1294 else if(momOrgPdg > 2100 && momOrgPdg < 2210)
1300 else if(momOrgPdg >= 310 && momOrgPdg <= 323)
1303 else if(momOrgStatus == 11 || momOrgStatus == 12 )
1326 GetXE(ipr,partType,leading,isolated,iparton) ;
1330 AliDebug(1,
"End fill histograms");
1345 else AliFatal(Form(
"Detector < %s > not known!", det.Data()));
1360 else AliFatal(Form(
"Detector < %d > not known!", det));
Float_t GetHistoPtMax() const
TH1F * fhPtHard
! pt of parton
TH2F * fhPtEtaDecayStatus
! Input eta decay meson status
Float_t GetHistoPtMin() const
Int_t GetICMethod() const
TLorentzVector fParton6
! Final state Parton
virtual Int_t GetCalorimeter() const
virtual void AddToHistogramsName(TString add)
TH1F * fhPtJet
! pt of jet
TH2F * fhXEIsolated[fgkNmcPrimTypes][fgkNLead][fgkNIso]
! xE away side
TH2F * fhPtPi0DecayStatus
! Input pi0 decay meson status
Float_t fPtHard
! Generated pT hard
TH2F * fhPtPi0Status
! Input pi0 status
virtual AliIsolationCut * GetIsolationCut()
TH2F * fhPtOriginNotFinal[fgkNmcPrimTypes]
! Input particle pt vs particle type originating it (if meson decay, its mother) if trigger is not fi...
TH2F * fhEtaPhi[fgkNmcPrimTypes]
! Input particle eta vs phi
TH2F * fhPtPartonPtHard
! pt of parton divided to pt hard, trigger is photon
TH2F * fhZJet[fgkNmcPrimTypes][fgkNLead][fgkNIso]
! zHard
void SetTriggerDetector(TString det)
Set the calorimeter for the analysis.
TH1F * fhPhi[fgkNmcPrimTypes]
! Input particle phi
TH1F * fhPtPi0Not2Gamma
! Input pi0 not 2 gamma decay
TH1F * fhPtGammaFromPi0Not2Gamma
! Input gamma from pi0 not 2 gamma decay
Get trigger particles/partons/jets and correlations at generator level.
Int_t fParton7PDG
! Final state Parton PDG
TH2F * fhZPartonIsolated[fgkNmcPrimTypes][fgkNLead][fgkNIso]
! isolated, zHard
TH2F * fhZHardIsolated[fgkNmcPrimTypes][fgkNLead][fgkNIso]
! isolated, zHard
TH2F * fhPtPartonTypeAway[fgkNmcPrimTypes][fgkNLead][fgkNIso]
! pt versus away side parton type
TH1F * fhPt[fgkNmcPrimTypes]
! Input particle pt
static const Int_t fgkNmcPrimTypes
Number of MC indeces for histograms arrays.
virtual AliGenEventHeader * GetGenEventHeader() const
TLorentzVector fJet7
! Pythia jet close to parton in position 7
TLorentzVector fParton7
! Final state Parton
Float_t GetPtThreshold() const
TLorentzVector fJet6
! Pythia jet close to parton in position 6
Base class for CaloTrackCorr analysis algorithms.
TString fTriggerDetectorString
Detector : EMCAL, PHOS, CTS.
virtual AliFiducialCut * GetFiducialCut()
virtual AliHistogramRanges * GetHistogramRanges()
TH2F * fhPtPartonTypeNearIsolated[fgkNmcPrimTypes][fgkNLead][fgkNIso]
! pt versus originating parton type
Float_t fMinChargedPt
! Minimum energy for charged particles in correlation
void GetPartonsAndJets()
Fill data members with partons,jets and generated pt hard.
TH2F * fhXEUEIsolated[fgkNmcPrimTypes][fgkNLead][fgkNIso]
! xE away side
TH2F * fhXE[fgkNmcPrimTypes][fgkNLead][fgkNIso]
! xE away side
TList * GetCreateOutputObjects()
Create histograms to be saved in output file.
TH1F * fhPtLeadingIsolated[fgkNmcPrimTypes][fgkNIso]
! isolated
Bool_t IsInFiducialCut(Float_t eta, Float_t phi, Int_t det) const
TH2F * fhZHard[fgkNmcPrimTypes][fgkNLead][fgkNIso]
! zHard
Int_t GetPythiaMinPartParent() const
TH2F * fhPtLeadingSumPt[fgkNmcPrimTypes][fgkNIso]
! pT vs sum in cone
TH2F * fhPhiStatus[fgkNmcPrimTypes]
! Input particle phi vs status
Int_t GetHistoNPtSumBins() const
static const Int_t fgkNIso
Number of isolation cases.
virtual Double_t GetEventWeight() const
AliAnaGeneratorKine()
Default Constructor. Initialize parameters with default values.
Int_t fTriggerDetector
Detector : EMCAL, PHOS, CTS.
AliFiducialCut * GetFiducialCutForTrigger()
TH2F * fhZParton[fgkNmcPrimTypes][fgkNLead][fgkNIso]
! zHard
Int_t fNPrimaries
! N primaries
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)
virtual AliMCEvent * GetMC() const
Float_t GetHistoPtSumMin() const
TH2F * fhXEUE[fgkNmcPrimTypes][fgkNLead][fgkNIso]
! xE away side
void MakeAnalysisFillHistograms()
Particle-Parton/Jet/Hadron Correlation Analysis, main method.
TH2F * fhEtaStatus[fgkNmcPrimTypes]
! Input particle eta vs status
TLorentzVector fTrigger
! Trigger momentum, avoid generating TLorentzVectors per event
Int_t GetHistoPtBins() const
TH2F * fhPtOrigin[fgkNmcPrimTypes]
! Input particle pt vs particle type originating it (if meson decay, its mother)
TH1F * fhPtEtaNot2Gamma
! Input eta not 2 gamma decay
TH2F * fhPtJetPtHard
! pt of jet divided to pt hard, trigger is photon
TH2F * fhPtPartonTypeAwayIsolated[fgkNmcPrimTypes][fgkNLead][fgkNIso]
! isolated, particle pt versus away side parton type
TH2F * fhPtAcceptedGammaJet[fgkNLead][fgkNIso]
! gamma-jet pair in acceptance (jet in good eta window)
TH2F * fhPtJetPtParton
! pt of parton divided to pt parton, trigger is photon
virtual AliMCAnalysisUtils * GetMCAnalysisUtils()
Int_t fParton6PDG
! Final state Parton PDG
virtual Float_t GetMinPt() const
Bool_t CorrelateWithPartonOrJet(Int_t indexTrig, Int_t pdgTrig, Bool_t leading[fgkNIso], Bool_t isolated[fgkNIso], Int_t &iparton)
Correlate trigger with partons or jets, get z.
Int_t GetPythiaMaxPartParent() const
virtual AliCaloTrackReader * GetReader() const
TH1F * fhPtParton
! pt of parton
TH1F * fhEta[fgkNmcPrimTypes]
! Input particle eta
Float_t Radius(Float_t etaCandidate, Float_t phiCandidate, Float_t eta, Float_t phi) const
TH2F * fhPtOtherDecayMesonId
! Decay photons, not originating from pi0 or eta, ID of the particle
DCal, not used so far, just in case.
void IsLeadingAndIsolated(Int_t indexTrig, Int_t pdgTrig, Bool_t leading[fgkNIso], Bool_t isolated[fgkNIso])
TH1F * fhPtGammaFromEtaNot2Gamma
! Input gamma from eta not 2 gamma decay
void InitParameters()
Initialize the parameters of the analysis.
Float_t GetHistoPtSumMax() const
void GetXE(Int_t indexTrig, Int_t pdgTrig, Bool_t leading[fgkNIso], Bool_t isolated[fgkNIso], Int_t iparton)
Calculate the real XE and the UE XE.
TH1F * fhPtLeading[fgkNmcPrimTypes][fgkNIso]
! pT
static const Int_t fgkNLead
Number of leadingness cases.
TH2F * fhPtPartonTypeNear[fgkNmcPrimTypes][fgkNLead][fgkNIso]
! particle pt versus originating parton type
Float_t fMinNeutralPt
! Minimum energy for neutral particles in correlation
Float_t GetConeSize() const
TH2F * fhPtEtaStatus
! Input eta status
TLorentzVector fLVTmp
! Momentum, avoid generating TLorentzVectors per event
TH2F * fhPtOtherDecayStatus
! Input other decay particle status
TH2F * fhZJetIsolated[fgkNmcPrimTypes][fgkNLead][fgkNIso]
! isolated, zHard