29 #include <TDatabasePDG.h> 30 #include <TParticle.h> 39 #include "AliAODMCHeader.h" 40 #include "AliAODHandler.h" 41 #include "AliAnalysisManager.h" 43 #include "AliAODVertex.h" 46 #include "AliESDtrack.h" 47 #include "AliAODMCParticle.h" 50 #include "AliAnalysisDataSlot.h" 51 #include "AliAnalysisDataContainer.h" 66 fUseRejTracks(kFALSE),
78 fCombineDmesons(kFALSE),
81 fRejectQuarkNotFound(kTRUE),
83 fKeepOnlyDfromB(kFALSE),
93 fCombinedDmesonsBkg(0),
94 fMCCombinedDmesons(0),
131 for (
Int_t i=4; i--;) fPDGdaughters[i] = 0;
132 for (
Int_t i=30; i--;) fSigmaD0[i] = 0.;
134 fNeedEmcalGeom = kFALSE;
143 fUseRejTracks(kFALSE),
146 fCandidateType(candtype),
154 fInhibitTask(kFALSE),
155 fCombineDmesons(kFALSE),
158 fRejectQuarkNotFound(kTRUE),
159 fRejectDfromB(kTRUE),
160 fKeepOnlyDfromB(kFALSE),
165 fArrayDStartoD0pi(0),
170 fCombinedDmesonsBkg(0),
171 fMCCombinedDmesons(0),
208 Info(
"AliAnalysisTaskSEDmesonsFilterCJ",
"Calling Constructor");
216 Float_t defaultSigmaD013[20]={0.012, 0.012, 0.012, 0.015, 0.015,0.018,0.018,0.020,0.020,0.030,0.030,0.037,0.040,0.040,0.040,0.040,0.040,0.040,0.040,0.040};
243 AliFatal(Form(
"Default sigma D0 not enough for %d pt bins, use SetSigmaD0ForDStar to set them",nptbins));
247 Warning(
"AliAnalysisTaskSEDmesonsFilterCJ",
"%d not accepted!!",
fCandidateType);
254 DefineOutput(1, TList::Class());
255 DefineOutput(2, AliRDHFCuts::Class());
256 DefineOutput(3, TClonesArray::Class());
257 DefineOutput(4, TClonesArray::Class());
258 DefineOutput(5, TClonesArray::Class());
259 DefineOutput(6, TClonesArray::Class());
260 DefineOutput(7, TClonesArray::Class());
261 DefineOutput(8, AliNormalizationCounter::Class());
271 Info(
"~AliAnalysisTaskSEDmesonsFilterCJ",
"Calling Destructor");
314 Info(
"AnalysisTaskSEDmesonsForJetCorrelations::Init()",
"Entering method");
320 copyfCutsDzero->SetName(
"AnalysisCutsDzero");
321 PostData(2, copyfCutsDzero);
326 copyfCutsDstar->SetName(
"AnalysisCutsDStar");
327 PostData(2, copyfCutsDstar);
343 Info(
"UserCreateOutputObjects",
"CreateOutputObjects of task %s", GetName());
359 AliWarning(Form(
"Candidate type %d not recognized!",
fCandidateType));
384 fSideBandArray->SetName(GetOutputSlot(4)->GetContainer()->GetName());
406 Info(
"UserCreateOutputObjects",
"Data posted for task %s", GetName());
416 AliDebug(2,
"Entering ExecOnce()");
427 if (AODEvent() && IsStandardAOD()) {
435 AliAODHandler *aodHandler = (AliAODHandler*)((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
436 if(aodHandler->GetExtensions()) {
437 AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject(
"AliAOD.VertexingHF.root");
442 AliError(Form(
"This task need an AOD event! Task '%s' will be disabled!", GetName()));
452 if (!cls.InheritsFrom(
"AliAODRecoDecayHF2Prong")) {
453 AliError(Form(
"%s: Objects of type %s in %s are not inherited from AliAODRecoDecayHF2Prong! Task will be disabled!",
461 AliError(Form(
"Could not find array %s, skipping the event. Task '%s' will be disabled!",
fBranchName.Data(), GetName()));
467 fMCarray =
dynamic_cast<TClonesArray*
>(
fAodEvent->FindListObject(AliAODMCParticle::StdBranchName()));
469 AliError(Form(
"MC particles not found! Task '%s' will be disabled!", GetName()));
474 fMCHeader = (AliAODMCHeader*)
fAodEvent->GetList()->FindObject(AliAODMCHeader::StdBranchName());
476 AliError(Form(
"MC header not found! Task '%s' will be disabled!", GetName()));
487 fRan =
new TRandom3(0);
502 if (matchingAODdeltaAODlevel<=0) {
507 AliDebug(2,
"Entering Run()");
514 AliDebug(2,
"TClonesArray cleared");
521 if (!
fAodEvent->GetPrimaryVertex() || TMath::Abs(
fAodEvent->GetMagneticField()) < 0.001)
return kFALSE;
525 if (!iseventselected)
return kFALSE;
528 AliDebug(2,
"Event selected");
531 AliDebug(2, Form(
"Found %d vertices", nD));
535 Int_t pdgMeson = 413;
549 for (
Int_t iMCcharm = 0; iMCcharm < nDMC; iMCcharm++){
551 AliAODMCParticle* charmPart =
static_cast<AliAODMCParticle*
>(
fMCarray->At(iMCcharm));
552 if(TMath::Abs(charmPart->GetPdgCode()) != pdgMeson)
continue;
553 if(!charmPart)
continue;
557 if (origin < 0)
continue;
572 if( TMath::Abs(charmPart->GetPdgCode()) == 413 && decay !=
kDecayDStartoKpipi)
continue;
573 if( TMath::Abs(charmPart->GetPdgCode()) == 421 && decay !=
kDecayD0toKpi)
continue;
579 new ((*fMCCombinedDmesons)[0]) AliAODMCParticle(*charmPart);
585 Int_t isRecoD = kFALSE;
586 for (
Int_t icharm = 0; icharm < nD; icharm++) {
589 if (!charmCand)
continue;
592 Int_t nprongs = charmCand->GetNProngs();
593 AliDebug(2, Form(
"Candidate is %d, and nprongs = %d",
fCandidateType, nprongs));
598 Error(
"AliAnalysisTaskSEDmesonsFilterCJ::UserExec",
"Candidate type is D* but object type is wrong (should be AliAODRecoCascadeHF)");
603 Int_t pdgDgDStartoD0pi[2] = { 421, 211 };
604 Int_t pdgDgD0toKpi[2] = { 321, 211 };
610 if(mcLabel == iMCcharm) { isRecoD = kTRUE;
break; }
614 if (!charmCand)
break;
623 Int_t isSelected = 0;
625 if (!isSelected)
break;
632 fHistImpParS->Fill(dstar->Getd0Prong(0), dstar->PtProng(0));
633 fHistImpParS->Fill(D0fromDstar->Getd0Prong(0), D0fromDstar->PtProng(0));
634 fHistImpParS->Fill(D0fromDstar->Getd0Prong(1), D0fromDstar->PtProng(1));
637 fHistImpParS->Fill(charmCand->Getd0Prong(0), charmCand->PtProng(0));
638 fHistImpParS->Fill(charmCand->Getd0Prong(1), charmCand->PtProng(1));
644 Int_t isDstar = charmPart == NULL ? 0 : 1;
655 Int_t pdgCode = charmPart->GetPdgCode();
656 if (pdgCode == 421) { isD0 = 1; }
657 else if (pdgCode == -421) { isD0 = -1; }
673 for (
Int_t icharm = 0; icharm < nD; icharm++) {
674 Int_t isSelected = 0;
677 if (!charmCand)
continue;
680 Int_t nprongs = charmCand->GetNProngs();
681 AliDebug(2, Form(
"Candidate is %d, and nprongs = %d",
fCandidateType, nprongs));
688 Error(
"AliAnalysisTaskSEDmesonsFilterCJ::UserExec",
"Candidate type is D* but object type is wrong (should be AliAODRecoCascadeHF)");
703 if (!isSelected)
continue;
718 AliDebug(2,
"Loop done");
749 AliDebug(2,
"Exiting method");
760 AliAODMCParticle* charmPart = 0;
765 charmPart =
static_cast<AliAODMCParticle*
>(
fMCarray->At(mcLabel));
772 if (origin < 0)
return;
804 fHistImpParB->Fill(charmCand->Getd0Prong(0), charmCand->PtProng(0));
805 fHistImpParB->Fill(charmCand->Getd0Prong(1), charmCand->PtProng(1));
824 if(charmPart)
new ((*fMCCombinedDmesons)[0]) AliAODMCParticle(*charmPart);
828 fHistImpParS->Fill(charmCand->Getd0Prong(0), charmCand->PtProng(0));
829 fHistImpParS->Fill(charmCand->Getd0Prong(1), charmCand->PtProng(1));
835 if(!
fMultCand)
new ((*fCandidateArray)[
fNCand]) AliAODMCParticle(*charmPart);
836 else if(
fNCand==
fAnalyseCand)
new ((*fCandidateArray)[0]) AliAODMCParticle(*charmPart);
851 Int_t pdgCode = charmPart->GetPdgCode();
853 if (pdgCode == 421) {
856 else if (pdgCode == -421) {
860 AliDebug(2,
"Not a D0/D0bar meson!");
874 AliDebug(2,
"Entering method");
877 AliAODMCParticle* charmPart = 0;
880 Int_t pdgDgDStartoD0pi[2] = { 421, 211 };
881 Int_t pdgDgD0toKpi[2] = { 321, 211 };
886 charmPart =
static_cast<AliAODMCParticle*
>(
fMCarray->At(mcLabel));
893 if (origin < 0)
return;
928 fHistImpParB->Fill(dstar->Getd0Prong(0), dstar->PtProng(0));
929 fHistImpParB->Fill(D0fromDstar->Getd0Prong(0), D0fromDstar->PtProng(0));
930 fHistImpParB->Fill(D0fromDstar->Getd0Prong(1), D0fromDstar->PtProng(1));
947 if(charmPart)
new ((*fMCCombinedDmesons)[0]) AliAODMCParticle(*charmPart);
953 if(!
fMultCand)
new ((*fCandidateArray)[
fNCand]) AliAODMCParticle(*charmPart);
954 else if(
fNCand==
fAnalyseCand)
new ((*fCandidateArray)[0]) AliAODMCParticle(*charmPart);
959 fHistImpParS->Fill(dstar->Getd0Prong(0), dstar->PtProng(0));
960 fHistImpParS->Fill(D0fromDstar->Getd0Prong(0), D0fromDstar->PtProng(0));
961 fHistImpParS->Fill(D0fromDstar->Getd0Prong(1), D0fromDstar->PtProng(1));
973 Double_t mPDGD0 = TDatabasePDG::Instance()->GetParticle(421)->Mass();
974 Double_t mPDGDstar = TDatabasePDG::Instance()->GetParticle(413)->Mass();
975 Double_t invMassPDG = mPDGDstar - mPDGD0;
980 AliError(Form(
"Pt %.3f out of bounds", ptD));
984 AliDebug(1, Form(
"Pt bin %d and sigma D0 %.4f", ptDbin,
fSigmaD0[ptDbin]));
987 AliDebug(2,
"D0 mass within 3 sigma");
990 AliDebug(2,
"Filling invariant mass vs pt histogram");
995 if (TMath::Abs(invmassDelta - invMassPDG) < 0.0021) {
996 AliDebug(2,
"Filling pion pt histogram");
998 AliAODTrack *softPionTrack =
static_cast<AliAODTrack*
>(dstar->
GetBachelor());
999 if (softPionTrack)
fHistPtPion->Fill(softPionTrack->Pt());
1004 Int_t isDstar = charmPart == NULL ? 0 : 1;
1008 AliDebug(2,
"Exiting method");
1018 Double_t adaugh[2] = {charmCand->PhiProng(0), charmCand->PhiProng(1)};
1019 AliAODTrack* p0 =
static_cast<AliAODTrack*
>(charmCand->GetDaughter(0));
1020 AliAODTrack* p1 =
static_cast<AliAODTrack*
>(charmCand->GetDaughter(1));
1025 if (isSelected == 1 || isSelected == 3) {
1032 if (isSelected >= 2) {
1040 else if (isD0 == 1) {
1047 if (isSelected == 3) {
1055 else if (isD0 == -1) {
1062 if (isSelected == 3) {
1077 AliAODTrack *softPionTrack =
static_cast<AliAODTrack*
>(dstar->
GetBachelor());
1080 Double_t apis= softPionTrack->Phi();
1084 Int_t isD0 = D0fromDstar->Charge()>0 ? kTRUE : kFALSE;
1085 Double_t aK = isD0 ? D0fromDstar->PhiProng(0) : D0fromDstar->PhiProng(1);
1086 Double_t api = isD0 ? D0fromDstar->PhiProng(1) : D0fromDstar->PhiProng(0);
1089 Double_t dRDpi =
DeltaR(dstar, isD0 ? static_cast<AliVParticle*>(D0fromDstar->GetDaughter(1)) : static_cast<AliVParticle*>(D0fromDstar->GetDaughter(0)));
1090 Double_t dRDK =
DeltaR(dstar, isD0 ? static_cast<AliVParticle*>(D0fromDstar->GetDaughter(0)) : static_cast<AliVParticle*>(D0fromDstar->GetDaughter(1)));
1123 if (!isSelected)
return;
1128 AliError(Form(
"Pt %.3f out of bounds", dstar->Pt()));
1132 const Double_t mPDGD0 = TDatabasePDG::Instance()->GetParticle(421)->Mass();
1149 Float_t mass = TDatabasePDG::Instance()->GetParticle(TMath::Abs(pdg))->Mass();
1159 AliError(Form(
"Wrong mass limits! Task '%s' will be disabled!", GetName()));
1169 if (uplimit>lowlimit) {
1174 printf(
"Error! Lower limit larger than upper limit!\n");
1186 AliWarning(
"Maximum number of bins allowed is 30!");
1190 if (!width)
return kFALSE;
1202 fHistStat =
new TH1I(
"fHistStat",
"Statistics", 9, -0.5, 8.5);
1203 fHistStat->GetXaxis()->SetBinLabel(1,
"N ev anal");
1204 fHistStat->GetXaxis()->SetBinLabel(2,
"N ev sel");
1206 fHistStat->GetXaxis()->SetBinLabel(3,
"N Gen D");
1207 fHistStat->GetXaxis()->SetBinLabel(4,
"N Gen Sel D");
1208 fHistStat->GetXaxis()->SetBinLabel(5,
"N D");
1209 fHistStat->GetXaxis()->SetBinLabel(6,
"N cand sel cuts");
1210 fHistStat->GetXaxis()->SetBinLabel(7,
"N rej no quark");
1211 fHistStat->GetXaxis()->SetBinLabel(8,
"N rej from B");
1212 fHistStat->GetXaxis()->SetBinLabel(9,
"N rej from D");
1217 fHistStat->GetXaxis()->SetBinLabel(3,
"N D");
1220 fHistStat->GetXaxis()->SetBinLabel(3,
"N Gen D");
1224 fHistStat->GetXaxis()->SetBinLabel(3,
"N Cand");
1226 fHistStat->GetXaxis()->SetBinLabel(4,
"N cand sel cuts");
1228 fHistStat->GetXaxis()->SetBinLabel(5,
"N side band cand");
1231 fHistStat->GetXaxis()->SetBinLabel(6,
"N Background");
1232 fHistStat->GetXaxis()->SetBinLabel(7,
"N rej no quark");
1233 fHistStat->GetXaxis()->SetBinLabel(8,
"N rej from B");
1234 fHistStat->GetXaxis()->SetBinLabel(9,
"N rej from D");
1241 fHistNCandEv =
new TH1F(
"fHistNCandEv",
"Number of candidates per event (after cuts);# cand/ev", 100, 0., 100.);
1245 fHistNSBCandEv =
new TH1F(
"hnSBCandEv",
"Number of side bands candidates per event (after cuts);# cand/ev", 100, 0.,100.);
1250 fHistPtPion =
new TH1F(
"fHistPtPion",
"Primary pions candidates pt", 500, 0., 10.);
1252 fHistPtPion->GetXaxis()->SetTitle(
"p_{T} (GeV/c)");
1258 const Int_t nbinsmass = 200;
1259 const Int_t ptbinsD = 100;
1268 fHistImpParS =
new TH2F(
"fHistImpParS",
"Impact parameter of daughter tracks; Getd0Prong();#it{p}^{daugh}_{T} (GeV/c)",200, -0.1,0.1,ptbinsD, ptmin, ptmax);
1277 const Int_t nbinsalpha = 200;
1278 Float_t minalpha = -TMath::Pi();
1279 Float_t maxalpha = TMath::Pi();
1280 const Int_t nbinsdeltaR = 200;
1287 fHistImpParB =
new TH2F(
"fHistImpParB",
"Impact parameter of daughter tracks (Background); Getd0Prong();#it{p}^{daugh}_{T} (GeV/c)",200, -0.1,0.1,ptbinsD, ptmin, ptmax);
1298 fHistAlphaDDS =
new TH2F(
"fHistAlphaDDS",
"Angle D^{*}-D^{0} (Signal);#varphi (D^{*}) - #varphi (D0);p_{T}^{D*}",nbinsalpha, minalpha, maxalpha, ptbinsD, ptmin, ptmax);
1299 fHistAlphaDpisS =
new TH2F(
"fHistAlphaDpisS",
"Angle D^{*}-#pi_{soft} (Signal);#varphi (D^{*}) - #varphi (#pi_{soft});p_{T}^{D*}",nbinsalpha, minalpha, maxalpha, ptbinsD, ptmin, ptmax);
1300 fHistAlphaDpiS =
new TH2F(
"fHistAlphaDpiS",
"Angle D^{*}-#pi (Signal);#varphi (D^{*}) - #varphi (#pi);p_{T}^{D*}",nbinsalpha, minalpha, maxalpha, ptbinsD, ptmin, ptmax);
1301 fHistAlphaDKS =
new TH2F(
"fHistAlphaDKS",
"Angle D^{*}-K (Signal);#varphi (D^{*}) - #varphi (K);p_{T}^{D*}",nbinsalpha, minalpha, maxalpha, ptbinsD, ptmin, ptmax);
1303 fHistAlphaDDB =
new TH2F(
"fHistAlphaDDB",
"Angle D^{*}-D^{0} (Background);#varphi (D^{*}) - #varphi (D0);p_{T}^{D*}",nbinsalpha, minalpha, maxalpha, ptbinsD, ptmin, ptmax);
1304 fHistAlphaDpisB =
new TH2F(
"fHistAlphaDpisB",
"Angle D^{*}-#pi_{soft} (Background);#varphi (D^{*}) - #varphi (#pi_{soft});p_{T}^{D*}",nbinsalpha, minalpha, maxalpha, ptbinsD, ptmin, ptmax);
1305 fHistAlphaDpiB =
new TH2F(
"fHistAlphaDpiB",
"Angle D^{*}-#pi (Background);#varphi (D^{*}) - #varphi (#pi);p_{T}^{D*}",nbinsalpha, minalpha, maxalpha, ptbinsD, ptmin, ptmax);
1306 fHistAlphaDKB =
new TH2F(
"fHistAlphaDKB",
"Angle D^{*}-K (Background);#varphi (D^{*}) - #varphi (K);p_{T}^{D*}",nbinsalpha, minalpha, maxalpha, ptbinsD, ptmin, ptmax);
1308 fHistDeltaRDDS =
new TH2F(
"fHistDeltaRDDS",
"Angle D^{*}-D^{0} (Signal);#varphi (D^{*}) - #varphi (D0);p_{T}^{D*}",nbinsdeltaR, mindeltaR, maxdeltaR, ptbinsD, ptmin, ptmax);
1309 fHistDeltaRDpisS =
new TH2F(
"fHistDeltaRDpisS",
"Angle D^{*}-#pi_{soft} (Signal);#varphi (D^{*}) - #varphi (#pi_{soft});p_{T}^{D*}",nbinsdeltaR, mindeltaR, maxdeltaR, ptbinsD, ptmin, ptmax);
1310 fHistDeltaRDpiS =
new TH2F(
"fHistDeltaRDpiS",
"Angle D^{*}-#pi (Signal);#varphi (D^{*}) - #varphi (#pi);p_{T}^{D*}",nbinsdeltaR, mindeltaR, maxdeltaR, ptbinsD, ptmin, ptmax);
1311 fHistDeltaRDKS =
new TH2F(
"fHistDeltaRDKS",
"Angle D^{*}-K (Signal);#varphi (D^{*}) - #varphi (K);p_{T}^{D*}",nbinsdeltaR, mindeltaR, maxdeltaR, ptbinsD, ptmin, ptmax);
1313 fHistDeltaRDDB =
new TH2F(
"fHistDeltaRDDB",
"Angle D^{*}-D^{0} (Background);#varphi (D^{*}) - #varphi (D0);p_{T}^{D*}",nbinsdeltaR, mindeltaR, maxdeltaR, ptbinsD, ptmin, ptmax);
1314 fHistDeltaRDpisB =
new TH2F(
"fHistDeltaRDpisB",
"Angle D^{*}-#pi_{soft} (Background);#varphi (D^{*}) - #varphi (#pi_{soft});p_{T}^{D*}",nbinsdeltaR, mindeltaR, maxdeltaR, ptbinsD, ptmin, ptmax);
1315 fHistDeltaRDpiB =
new TH2F(
"fHistDeltaRDpiB",
"Angle D^{*}-#pi (Background);#varphi (D^{*}) - #varphi (#pi);p_{T}^{D*}",nbinsdeltaR, mindeltaR, maxdeltaR, ptbinsD, ptmin, ptmax);
1316 fHistDeltaRDKB =
new TH2F(
"fHistDeltaRDKB",
"Angle D^{*}-K (Background);#varphi (D^{*}) - #varphi (K);p_{T}^{D*}",nbinsdeltaR, mindeltaR, maxdeltaR, ptbinsD, ptmin, ptmax);
1338 fHistAlphaDpiS =
new TH2F(
"fHistAlphaDpiS",
"Angle D^{0}-#pi (Signal);#varphi (D^{0}) - #varphi (#pi);p_{T}^{D0}",nbinsalpha, minalpha, maxalpha, ptbinsD, ptmin, ptmax);
1339 fHistAlphaDKS =
new TH2F(
"fHistAlphaDKS",
"Angle D^{0}-K (Signal);#varphi (D^{0}) - #varphi (K);p_{T}^{D0}",nbinsalpha, minalpha, maxalpha, ptbinsD, ptmin, ptmax);
1340 fHistAlphaDpiR =
new TH2F(
"fHistAlphaDpiR",
"Angle D^{0}-#pi (Reflections);#varphi (D^{0}) - #varphi (#pi);p_{T}^{D0}",nbinsalpha, minalpha, maxalpha, ptbinsD, ptmin, ptmax);
1341 fHistAlphaDKR =
new TH2F(
"fHistAlphaDKR",
"Angle D^{0}-K (Reflections);#varphi (D^{0}) - #varphi (K);p_{T}^{D0}",nbinsalpha, minalpha, maxalpha, ptbinsD, ptmin, ptmax);
1343 fHistAlphaDpiB =
new TH2F(
"fHistAlphaDpiB",
"Angle D^{0}-#pi (Background);#varphi (D^{0}) - #varphi (#pi);p_{T}^{D0}",nbinsalpha, minalpha, maxalpha, ptbinsD, ptmin, ptmax);
1344 fHistAlphaDKB =
new TH2F(
"fHistAlphaDKB",
"Angle D^{0}-K (Background);#varphi (D^{0}) - #varphi (K);p_{T}^{D0}",nbinsalpha, minalpha, maxalpha, ptbinsD, ptmin, ptmax);
1346 fHistDeltaRDpiS =
new TH2F(
"fHistDeltaRDpiS",
"Angle D^{0}-#pi (Signal);#varphi (D^{0}) - #varphi (#pi);p_{T}^{D0}",nbinsdeltaR, mindeltaR, maxdeltaR, ptbinsD, ptmin, ptmax);
1347 fHistDeltaRDKS =
new TH2F(
"fHistDeltaRDKS",
"Angle D^{0}-K (Signal);#varphi (D^{0}) - #varphi (K);p_{T}^{D0}",nbinsdeltaR, mindeltaR, maxdeltaR, ptbinsD, ptmin, ptmax);
1348 fHistDeltaRDpiR =
new TH2F(
"fHistDeltaRDpiR",
"Angle D^{0}-#pi (Reflections);#varphi (D^{0}) - #varphi (#pi);p_{T}^{D0}",nbinsdeltaR, mindeltaR, maxdeltaR, ptbinsD, ptmin, ptmax);
1349 fHistDeltaRDKR =
new TH2F(
"fHistDeltaRDKR",
"Angle D^{0}-K (Reflections);#varphi (D^{0}) - #varphi (K);p_{T}^{D0}",nbinsdeltaR, mindeltaR, maxdeltaR, ptbinsD, ptmin, ptmax);
1351 fHistDeltaRDpiB =
new TH2F(
"fHistDeltaRDpiB",
"Angle D^{0}-#pi (Background);#varphi (D^{0}) - #varphi (#pi);p_{T}^{D0}",nbinsdeltaR, mindeltaR, maxdeltaR, ptbinsD, ptmin, ptmax);
1352 fHistDeltaRDKB =
new TH2F(
"fHistDeltaRDKB",
"Angle D^{0}-K (Background);#varphi (D^{0}) - #varphi (K);p_{T}^{D0}",nbinsdeltaR, mindeltaR, maxdeltaR, ptbinsD, ptmin, ptmax);
1378 if (!p1 || !p2)
return -1;
1386 if(dPhi < -(TMath::Pi())/2) dPhi = dPhi + TMath::TwoPi();
1387 if(dPhi > (3*(TMath::Pi()))/2) dPhi = dPhi - TMath::TwoPi();
1391 Double_t deltaR = TMath::Sqrt(dEta*dEta + dPhi*dPhi);
1403 if (!tracks)
return;
1406 allDaughters.SetOwner(kFALSE);
1410 while ((emcpart = static_cast<AliEmcalParticle*>(next()))) {
1411 AliAODRecoDecay* reco =
dynamic_cast<AliAODRecoDecay*
>(emcpart->
GetTrack());
1412 AliDebug(2, Form(
"Found a D meson candidtate with pT = %.3f, eta = %.3f, phi = %.3f", reco->Pt(), reco->Eta(), reco->Phi()));
1416 tracks->ResetCurrentID();
1417 AliVTrack* track = 0;
1418 Int_t n = coll->GetEntriesFast();
1422 AliAODTrack* aodtrack =
dynamic_cast<AliAODTrack*
>(track);
1424 if(!isInj)
continue;
1427 if (allDaughters.Remove(track) == 0) {
1434 AliDebug(2, Form(
"Track %d (pT = %.3f, eta = %.3f, phi = %.3f) is included", tracks->GetCurrentID(), track->Pt(), track->Eta(), track->Phi()));
1437 AliDebug(2, Form(
"Track %d (pT = %.3f, eta = %.3f, phi = %.3f) is excluded", tracks->GetCurrentID(), track->Pt(), track->Eta(), track->Phi()));
1447 Int_t n = cand->GetNDaughters();
1453 for (
Int_t i = 0; i < n; i++) {
1454 AliVTrack* track =
dynamic_cast<AliVTrack*
>(cand->GetDaughter(i));
1455 if (!track)
continue;
1457 AliAODRecoDecay* cand2 =
dynamic_cast<AliAODRecoDecay*
>(track);
1464 if (!track->InheritsFrom(
"AliAODTrack")) {
1465 Printf(
"Warning: One of the daughters is not of type 'AliAODTrack' nor 'AliAODRecoDecay'.");
1469 daughters.AddLast(track);
1486 if (!mctracks)
return;
1489 allMCDaughters.SetOwner(kFALSE);
1491 AliAODMCParticle* mcD = (AliAODMCParticle*)coll->At(0);
1495 mctracks->ResetCurrentID();
1496 AliAODMCParticle* mcpart = 0;
1497 Int_t n = coll->GetEntriesFast();
1499 if(TMath::Abs(mcpart->Charge())==0)
continue;
1502 if(!isInj)
continue;
1506 if (allMCDaughters.Remove(mcpart) == 0) {
1507 new ((*coll)[n]) AliAODMCParticle(*mcpart);
1509 AliDebug(2, Form(
"Track %d (pT = %.3f, eta = %.3f, phi = %.3f) is included", mctracks->GetCurrentID(), mcpart->Pt(), mcpart->Eta(), mcpart->Phi()));
1512 AliDebug(2, Form(
"Track %d (pT = %.3f, eta = %.3f, phi = %.3f) is excluded", mctracks->GetCurrentID(), mcpart->Pt(), mcpart->Eta(), mcpart->Phi()));
1522 Int_t n = mcDmeson->GetNDaughters();
1523 Int_t nD0 = mcDmeson->GetDaughter(0);
1527 for (
Int_t i = 0; i < n; i++) {
1528 AliAODMCParticle* DDaughter =
static_cast<AliAODMCParticle*
>(mcArray->At(nD0+i));
1529 if (!DDaughter)
continue;
1531 if (DDaughter->GetNDaughters()>0) {
1534 mcdaughters.AddLast(DDaughter);
1538 mcdaughters.AddLast(DDaughter);
1539 pt += DDaughter->Pt();
1552 if (!mcArray)
return -1;
1554 Int_t labDau0 =
static_cast<AliVTrack*
>(cand->GetDaughter(0))->GetLabel();
1555 if (labDau0 < 0)
return -1;
1557 AliAODMCParticle* part =
static_cast<AliAODMCParticle*
>(mcArray->At(labDau0));
1566 if (!stack)
return -1;
1568 Int_t labDau0 =
static_cast<AliVTrack*
>(cand->GetDaughter(0))->GetLabel();
1569 if (labDau0 < 0)
return -1;
1579 if (!part)
return -1;
1580 if (!mcArray)
return -1;
1582 Int_t pdgGranma = 0;
1583 Int_t mother = part->GetMother();
1585 Int_t abspdgGranma = 0;
1587 Bool_t isQuarkFound = kFALSE;
1589 while (mother >= 0) {
1591 AliAODMCParticle* mcGranma =
static_cast<AliAODMCParticle*
>(mcArray->At(mother));
1592 if (mcGranma != 0) {
1593 pdgGranma = mcGranma->GetPdgCode();
1594 abspdgGranma = TMath::Abs(pdgGranma);
1595 if ((abspdgGranma > 500 && abspdgGranma < 600) || (abspdgGranma > 5000 && abspdgGranma < 6000)) {
1599 if (abspdgGranma == 4 || abspdgGranma == 5) isQuarkFound = kTRUE;
1600 mother = mcGranma->GetMother();
1603 ::Error(
"AliAnalysisTaskSEDmesonsFilterCJ::CheckOrigin",
"Could not retrieve mother particle %d!", mother);
1626 if (!stack)
return -1;
1628 TParticle* part = stack->Particle(ipart);
1629 if (!part)
return -1;
1631 Int_t pdgGranma = 0;
1632 Int_t mother = part->GetFirstMother();
1634 Int_t abspdgGranma = 0;
1636 Bool_t isQuarkFound = kFALSE;
1638 while (mother >= 0) {
1640 TParticle* mcGranma = stack->Particle(mother);
1641 if (mcGranma != 0) {
1642 pdgGranma = mcGranma->GetPdgCode();
1643 abspdgGranma = TMath::Abs(pdgGranma);
1644 if ((abspdgGranma > 500 && abspdgGranma < 600) || (abspdgGranma > 5000 && abspdgGranma < 6000)) {
1648 if (abspdgGranma == 4 || abspdgGranma == 5) isQuarkFound = kTRUE;
1649 mother = mcGranma->GetFirstMother();
1652 ::Error(
"AliAnalysisTaskSEDmesonsFilterCJ::CheckOrigin",
"Could not retrieve mother particle %d!", mother);
1675 if (!part)
return -1;
1676 if (!mcArray)
return -1;
1680 Int_t absPdgPart = TMath::Abs(part->GetPdgCode());
1682 if (part->GetNDaughters() == 2) {
1684 AliAODMCParticle* d1 =
static_cast<AliAODMCParticle*
>(mcArray->At(part->GetDaughter(0)));
1685 AliAODMCParticle* d2 =
static_cast<AliAODMCParticle*
>(mcArray->At(part->GetDaughter(1)));
1691 Int_t absPdg1 = TMath::Abs(d1->GetPdgCode());
1692 Int_t absPdg2 = TMath::Abs(d2->GetPdgCode());
1694 if (absPdgPart == 421) {
1696 if ((absPdg1 == 211 && absPdg2 == 321) ||
1697 (absPdg1 == 321 && absPdg2 == 211)) {
1702 if (absPdgPart == 413) {
1704 if (absPdg1 == 421 && absPdg2 == 211) {
1711 if (absPdg1 == 211 && absPdg2 == 421) {
1728 if (!stack)
return -1;
1730 TParticle* part = stack->Particle(ipart);
1732 if (!part)
return -1;
1736 if (part->GetNDaughters() == 2) {
1738 Int_t id1 = part->GetDaughter(0);
1739 Int_t id2 = part->GetDaughter(1);
1741 TParticle* d1 = stack->Particle(id1);
1742 TParticle* d2 = stack->Particle(id2);
1748 Int_t absPdg1 = TMath::Abs(d1->GetPdgCode());
1749 Int_t absPdg2 = TMath::Abs(d2->GetPdgCode());
1752 if (part->GetPdgCode() == 421) {
1754 if ((absPdg1 == 211 && absPdg2 == 321) ||
1755 (absPdg1 == 321 && absPdg2 == 211)) {
1760 if (part->GetPdgCode() == 413) {
1762 if (absPdg1 == 421 && absPdg2 == 211) {
1769 if (absPdg1 == 211 && absPdg2 == 421) {
1788 Int_t lab=TMath::Abs(track->GetLabel());
1793 while(nameGen.IsWhitespace()){
1794 AliAODMCParticle *mcpart= (AliAODMCParticle*)arrayMC->At(lab);
1796 printf(
"AliAnalysisTaskMultCheck::IsTrackInjected - BREAK: No valid AliAODMCParticle at label %i\n",lab);
1799 Int_t mother = mcpart->GetMother();
1801 printf(
"AliAnalysisTaskMultCheck::IsTrackInjected - BREAK: Reached primary particle without valid mother\n");
1821 if(nameGen.IsWhitespace() || nameGen.Contains(
"ijing"))
return kFALSE;
1832 Int_t lab=TMath::Abs(track->GetLabel());
1837 while(nameGen.IsWhitespace()){
1838 AliAODMCParticle *mcpart= (AliAODMCParticle*)arrayMC->At(lab);
1840 printf(
"AliAnalysisTaskMultCheck::IsTrackInjected - BREAK: No valid AliAODMCParticle at label %i\n",lab);
1843 Int_t mother = mcpart->GetMother();
1845 printf(
"AliAnalysisTaskMultCheck::IsTrackInjected - BREAK: Reached primary particle without valid mother\n");
1865 if(nameGen.IsWhitespace() || nameGen.Contains(
"ijing"))
return kFALSE;
void ProcessDstar(AliAODRecoCascadeHF *dstar, Int_t isSelected)
static Int_t CheckOrigin(AliAODRecoDecay *cand, TClonesArray *mcArray)
virtual AliVParticle * GetNextAcceptParticle()
TClonesArray * fCombinedDmesonsBkg
contains candidates selected by AliRDHFCuts and the rest of the event tracks
Double_t DeltaInvMass() const
void ProcessD0(AliAODRecoDecayHF2Prong *charmCand, Int_t isSelected)
Int_t MatchToMC(Int_t pdgabs, Int_t pdgabs2prong, Int_t *pdgDg, Int_t *pdgDg2prong, TClonesArray *mcArray, Bool_t isV0=kFALSE) const
Base task in the EMCAL framework.
TClonesArray * fArrayDStartoD0pi
Random number generator.
static Int_t CheckMatchingAODdeltaAODevents()
static TString GetGenerator(Int_t label, AliAODMCHeader *header)
void FillD0MCTruthKinHistos(AliAODRecoDecayHF2Prong *charmCand, Int_t isSelected, Int_t isD0)
static Double_t AddDaughters(AliAODRecoDecay *cand, TObjArray &daughters)
void AddEventTracks(TClonesArray *coll, AliParticleContainer *tracks)
Bool_t FillRecoCand(AliVEvent *event, AliAODRecoDecayHF3Prong *rd3)
Double_t InvMassD0() const
AliVTrack * GetTrack() const
AliAnalysisTaskSEDmesonsFilterCJ()
void GetMCTrackPrimaryGenerator(AliAODMCParticle *track, AliAODMCHeader *header, TClonesArray *arrayMC, TString &nameGen)
void FillDStarMCTruthKinHistos(AliAODRecoCascadeHF *dstar, Int_t isSelected, Int_t isDstar)
static Double_t AddMCDaughters(AliAODMCParticle *mcDmeson, TObjArray &mcdaughters, TClonesArray *mcArray)
Container for particles within the EMCAL framework.
Bool_t Run()
Run function. This is the core function of the analysis and contains the user code. Therefore users have to implement this function.
AliParticleContainer * GetParticleContainer(Int_t i=0) const
Get particle container attached to this task.
Int_t fNCand
contains MC D0 and MC event particles
Bool_t IsTrackInjected(AliAODTrack *track, AliAODMCHeader *header, TClonesArray *arrayMC)
void FillDstarSideBands(AliAODRecoCascadeHF *dstar)
TClonesArray * fSideBandArray
contains candidates selected by AliRDHFCuts
TClonesArray * fCandidateArray
static Int_t CheckDecayChannel(AliAODMCParticle *part, TClonesArray *mcArray)
void SetMassLimits(Double_t range, Int_t pdg)
void UserCreateOutputObjects()
AliAODTrack * GetBachelor() const
TClonesArray * fMCCombinedDmesons
contains bkg candidates selected by AliRDHFCuts and the rest of the event tracks
Double_t InvMassD0bar() const
Bool_t SetD0WidthForDStar(Int_t nptbins, Float_t *width)
virtual ~AliAnalysisTaskSEDmesonsFilterCJ()
AliAODMCHeader * fMCHeader
void ExecOnce()
Perform steps needed to initialize the analysis.
Bool_t IsEventSelected(AliVEvent *event)
AliEmcalList * fOutput
!output list
Bool_t fRejectQuarkNotFound
void StoreEvent(AliVEvent *, AliRDHFCuts *, Bool_t mc=kFALSE, Int_t multiplicity=-9999, Double_t spherocity=-99.)
Int_t fNSBCand
number of selected D candidates already added to fCandidateArray
Bool_t DefineHistoForAnalysis()
Bool_t IsSelected(TObject *obj)
AliNormalizationCounter * fCounter
virtual void ExecOnce()
Perform steps needed to initialize the analysis.
Bool_t IsMCTrackInjected(AliAODMCParticle *track, AliAODMCHeader *header, TClonesArray *arrayMC)
Double_t InvMassD0() const
TH1 * fHistStat
number of selected side-band D candidates already added to fSideBandArray
TRandom3 * fRan
AliNormalizationCounter.
Float_t DeltaR(AliVParticle *p1, AliVParticle *p2) const
void AddObjectToEvent(TObject *obj, Bool_t attempt=kFALSE)
Add object to event.
void UserCreateOutputObjects()
Main initialization function on the worker.
AliAODRecoDecayHF2Prong * Get2Prong() const
virtual Bool_t IsInFiducialAcceptance(Double_t, Double_t) const
Int_t PtBin(Double_t pt) const
void AddMCEventTracks(TClonesArray *coll, AliParticleContainer *mctracks)
Bool_t fNeedEmcalGeom
whether or not the task needs the emcal geometry
void GetTrackPrimaryGenerator(AliAODTrack *track, AliAODMCHeader *header, TClonesArray *arrayMC, TString &nameGen)
TClonesArray * fCombinedDmesons
contains candidates selected by AliRDHFCuts::IsSelected(kTracks), to be used for side bands (DStar ca...