29 #include <TDatabasePDG.h>
30 #include <TParticle.h>
38 #include "AliAODMCHeader.h"
39 #include "AliAODHandler.h"
40 #include "AliAnalysisManager.h"
42 #include "AliAODVertex.h"
45 #include "AliESDtrack.h"
46 #include "AliAODMCParticle.h"
49 #include "AliAnalysisDataSlot.h"
50 #include "AliAnalysisDataContainer.h"
75 fCombineDmesons(kFALSE),
78 fRejectQuarkNotFound(kTRUE),
80 fKeepOnlyDfromB(kFALSE),
88 fCombinedDmesonsBkg(0),
89 fMCCombinedDmesons(0),
126 for (
Int_t i=4; i--;) fPDGdaughters[i] = 0;
127 for (
Int_t i=30; i--;) fSigmaD0[i] = 0.;
129 fNeedEmcalGeom = kFALSE;
139 fCandidateType(candtype),
147 fInhibitTask(kFALSE),
148 fCombineDmesons(kFALSE),
151 fRejectQuarkNotFound(kTRUE),
152 fRejectDfromB(kTRUE),
153 fKeepOnlyDfromB(kFALSE),
155 fArrayDStartoD0pi(0),
161 fCombinedDmesonsBkg(0),
162 fMCCombinedDmesons(0),
199 Info(
"AliAnalysisTaskSEDmesonsFilterCJ",
"Calling Constructor");
207 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};
234 AliFatal(Form(
"Default sigma D0 not enough for %d pt bins, use SetSigmaD0ForDStar to set them",nptbins));
238 Warning(
"AliAnalysisTaskSEDmesonsFilterCJ",
"%d not accepted!!",
fCandidateType);
245 DefineOutput(1, TList::Class());
246 DefineOutput(2, AliRDHFCuts::Class());
247 DefineOutput(3, TClonesArray::Class());
248 DefineOutput(4, TClonesArray::Class());
249 DefineOutput(5, TClonesArray::Class());
250 DefineOutput(6, TClonesArray::Class());
251 DefineOutput(7, TClonesArray::Class());
261 Info(
"~AliAnalysisTaskSEDmesonsFilterCJ",
"Calling Destructor");
298 Info(
"AnalysisTaskSEDmesonsForJetCorrelations::Init()",
"Entering method");
304 copyfCutsDzero->SetName(
"AnalysisCutsDzero");
305 PostData(2, copyfCutsDzero);
310 copyfCutsDstar->SetName(
"AnalysisCutsDStar");
311 PostData(2, copyfCutsDstar);
327 Info(
"UserCreateOutputObjects",
"CreateOutputObjects of task %s", GetName());
343 AliWarning(Form(
"Candidate type %d not recognized!",
fCandidateType));
368 fSideBandArray->SetName(GetOutputSlot(4)->GetContainer()->GetName());
386 Info(
"UserCreateOutputObjects",
"Data posted for task %s", GetName());
396 AliDebug(2,
"Entering ExecOnce()");
407 if (AODEvent() && IsStandardAOD()) {
415 AliAODHandler *aodHandler = (AliAODHandler*)((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
416 if(aodHandler->GetExtensions()) {
417 AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject(
"AliAOD.VertexingHF.root");
422 AliError(Form(
"This task need an AOD event! Task '%s' will be disabled!", GetName()));
432 if (!cls.InheritsFrom(
"AliAODRecoDecayHF2Prong")) {
433 AliError(Form(
"%s: Objects of type %s in %s are not inherited from AliAODRecoDecayHF2Prong! Task will be disabled!",
441 AliError(Form(
"Could not find array %s, skipping the event. Task '%s' will be disabled!",
fBranchName.Data(), GetName()));
447 fMCarray =
dynamic_cast<TClonesArray*
>(
fAodEvent->FindListObject(AliAODMCParticle::StdBranchName()));
449 AliError(Form(
"MC particles not found! Task '%s' will be disabled!", GetName()));
454 fMCHeader = (AliAODMCHeader*)
fAodEvent->GetList()->FindObject(AliAODMCHeader::StdBranchName());
456 AliError(Form(
"MC header not found! Task '%s' will be disabled!", GetName()));
480 if (matchingAODdeltaAODlevel<=0) {
485 AliDebug(2,
"Entering Run()");
492 AliDebug(2,
"TClonesArray cleared");
498 if (!
fAodEvent->GetPrimaryVertex() || TMath::Abs(
fAodEvent->GetMagneticField()) < 0.001)
return kFALSE;
502 if (!iseventselected)
return kFALSE;
505 AliDebug(2,
"Event selected");
508 AliDebug(2, Form(
"Found %d vertices", nD));
512 Int_t pdgMeson = 413;
526 for (
Int_t iMCcharm = 0; iMCcharm < nDMC; iMCcharm++){
528 AliAODMCParticle* charmPart =
static_cast<AliAODMCParticle*
>(
fMCarray->At(iMCcharm));
529 if(TMath::Abs(charmPart->GetPdgCode()) != pdgMeson)
continue;
530 if(!charmPart)
continue;
534 if (origin < 0)
continue;
549 if( TMath::Abs(charmPart->GetPdgCode()) == 413 && decay !=
kDecayDStartoKpipi)
continue;
550 if( TMath::Abs(charmPart->GetPdgCode()) == 421 && decay !=
kDecayD0toKpi)
continue;
556 new ((*fMCCombinedDmesons)[0]) AliAODMCParticle(*charmPart);
562 Int_t isRecoD = kFALSE;
563 for (
Int_t icharm = 0; icharm < nD; icharm++) {
566 if (!charmCand)
continue;
569 Int_t nprongs = charmCand->GetNProngs();
570 AliDebug(2, Form(
"Candidate is %d, and nprongs = %d",
fCandidateType, nprongs));
575 Error(
"AliAnalysisTaskSEDmesonsFilterCJ::UserExec",
"Candidate type is D* but object type is wrong (should be AliAODRecoCascadeHF)");
580 Int_t pdgDgDStartoD0pi[2] = { 421, 211 };
581 Int_t pdgDgD0toKpi[2] = { 321, 211 };
583 Int_t mcLabel = NULL;
587 if(mcLabel == iMCcharm) { isRecoD = kTRUE;
break; }
591 if (!charmCand)
break;
600 Int_t isSelected = 0;
602 if (!isSelected)
break;
609 fHistImpParS->Fill(dstar->Getd0Prong(0), dstar->PtProng(0));
610 fHistImpParS->Fill(D0fromDstar->Getd0Prong(0), D0fromDstar->PtProng(0));
611 fHistImpParS->Fill(D0fromDstar->Getd0Prong(1), D0fromDstar->PtProng(1));
614 fHistImpParS->Fill(charmCand->Getd0Prong(0), charmCand->PtProng(0));
615 fHistImpParS->Fill(charmCand->Getd0Prong(1), charmCand->PtProng(1));
621 Int_t isDstar = charmPart == NULL ? 0 : 1;
632 Int_t pdgCode = charmPart->GetPdgCode();
633 if (pdgCode == 421) { isD0 = 1; }
634 else if (pdgCode == -421) { isD0 = -1; }
650 for (
Int_t icharm = 0; icharm < nD; icharm++) {
651 Int_t isSelected = 0;
654 if (!charmCand)
continue;
657 Int_t nprongs = charmCand->GetNProngs();
658 AliDebug(2, Form(
"Candidate is %d, and nprongs = %d",
fCandidateType, nprongs));
665 Error(
"AliAnalysisTaskSEDmesonsFilterCJ::UserExec",
"Candidate type is D* but object type is wrong (should be AliAODRecoCascadeHF)");
680 if (!isSelected)
continue;
695 AliDebug(2,
"Loop done");
725 AliDebug(2,
"Exiting method");
736 AliAODMCParticle* charmPart = 0;
741 charmPart =
static_cast<AliAODMCParticle*
>(
fMCarray->At(mcLabel));
748 if (origin < 0)
return;
780 fHistImpParB->Fill(charmCand->Getd0Prong(0), charmCand->PtProng(0));
781 fHistImpParB->Fill(charmCand->Getd0Prong(1), charmCand->PtProng(1));
800 if(charmPart)
new ((*fMCCombinedDmesons)[0]) AliAODMCParticle(*charmPart);
804 fHistImpParS->Fill(charmCand->Getd0Prong(0), charmCand->PtProng(0));
805 fHistImpParS->Fill(charmCand->Getd0Prong(1), charmCand->PtProng(1));
811 if(!
fMultCand)
new ((*fCandidateArray)[
fNCand]) AliAODMCParticle(*charmPart);
812 else if(
fNCand==
fAnalyseCand)
new ((*fCandidateArray)[0]) AliAODMCParticle(*charmPart);
827 Int_t pdgCode = charmPart->GetPdgCode();
829 if (pdgCode == 421) {
832 else if (pdgCode == -421) {
836 AliDebug(2,
"Not a D0/D0bar meson!");
850 AliDebug(2,
"Entering method");
853 AliAODMCParticle* charmPart = 0;
856 Int_t pdgDgDStartoD0pi[2] = { 421, 211 };
857 Int_t pdgDgD0toKpi[2] = { 321, 211 };
862 charmPart =
static_cast<AliAODMCParticle*
>(
fMCarray->At(mcLabel));
869 if (origin < 0)
return;
904 fHistImpParB->Fill(dstar->Getd0Prong(0), dstar->PtProng(0));
905 fHistImpParB->Fill(D0fromDstar->Getd0Prong(0), D0fromDstar->PtProng(0));
906 fHistImpParB->Fill(D0fromDstar->Getd0Prong(1), D0fromDstar->PtProng(1));
923 if(charmPart)
new ((*fMCCombinedDmesons)[0]) AliAODMCParticle(*charmPart);
929 if(!
fMultCand)
new ((*fCandidateArray)[
fNCand]) AliAODMCParticle(*charmPart);
930 else if(
fNCand==
fAnalyseCand)
new ((*fCandidateArray)[0]) AliAODMCParticle(*charmPart);
935 fHistImpParS->Fill(dstar->Getd0Prong(0), dstar->PtProng(0));
936 fHistImpParS->Fill(D0fromDstar->Getd0Prong(0), D0fromDstar->PtProng(0));
937 fHistImpParS->Fill(D0fromDstar->Getd0Prong(1), D0fromDstar->PtProng(1));
949 Double_t mPDGD0 = TDatabasePDG::Instance()->GetParticle(421)->Mass();
950 Double_t mPDGDstar = TDatabasePDG::Instance()->GetParticle(413)->Mass();
951 Double_t invMassPDG = mPDGDstar - mPDGD0;
956 AliError(Form(
"Pt %.3f out of bounds", ptD));
960 AliDebug(1, Form(
"Pt bin %d and sigma D0 %.4f", ptDbin,
fSigmaD0[ptDbin]));
963 AliDebug(2,
"D0 mass within 3 sigma");
966 AliDebug(2,
"Filling invariant mass vs pt histogram");
971 if (TMath::Abs(invmassDelta - invMassPDG) < 0.0021) {
972 AliDebug(2,
"Filling pion pt histogram");
974 AliAODTrack *softPionTrack =
static_cast<AliAODTrack*
>(dstar->
GetBachelor());
975 if (softPionTrack)
fHistPtPion->Fill(softPionTrack->Pt());
980 Int_t isDstar = charmPart == NULL ? 0 : 1;
984 AliDebug(2,
"Exiting method");
994 Double_t adaugh[2] = {charmCand->PhiProng(0), charmCand->PhiProng(1)};
995 AliAODTrack* p0 =
static_cast<AliAODTrack*
>(charmCand->GetDaughter(0));
996 AliAODTrack* p1 =
static_cast<AliAODTrack*
>(charmCand->GetDaughter(1));
1001 if (isSelected == 1 || isSelected == 3) {
1008 if (isSelected >= 2) {
1016 else if (isD0 == 1) {
1023 if (isSelected == 3) {
1031 else if (isD0 == -1) {
1038 if (isSelected == 3) {
1053 AliAODTrack *softPionTrack =
static_cast<AliAODTrack*
>(dstar->
GetBachelor());
1056 Double_t apis= softPionTrack->Phi();
1060 Int_t isD0 = D0fromDstar->Charge()>0 ? kTRUE : kFALSE;
1061 Double_t aK = isD0 ? D0fromDstar->PhiProng(0) : D0fromDstar->PhiProng(1);
1062 Double_t api = isD0 ? D0fromDstar->PhiProng(1) : D0fromDstar->PhiProng(0);
1065 Double_t dRDpi =
DeltaR(dstar, isD0 ? static_cast<AliVParticle*>(D0fromDstar->GetDaughter(1)) : static_cast<AliVParticle*>(D0fromDstar->GetDaughter(0)));
1066 Double_t dRDK =
DeltaR(dstar, isD0 ? static_cast<AliVParticle*>(D0fromDstar->GetDaughter(0)) : static_cast<AliVParticle*>(D0fromDstar->GetDaughter(1)));
1099 if (!isSelected)
return;
1104 AliError(Form(
"Pt %.3f out of bounds", dstar->Pt()));
1108 const Double_t mPDGD0 = TDatabasePDG::Instance()->GetParticle(421)->Mass();
1125 Float_t mass = TDatabasePDG::Instance()->GetParticle(TMath::Abs(pdg))->Mass();
1135 AliError(Form(
"Wrong mass limits! Task '%s' will be disabled!", GetName()));
1145 if (uplimit>lowlimit) {
1150 printf(
"Error! Lower limit larger than upper limit!\n");
1162 AliWarning(
"Maximum number of bins allowed is 30!");
1166 if (!width)
return kFALSE;
1178 fHistStat =
new TH1I(
"fHistStat",
"Statistics", 9, -0.5, 8.5);
1179 fHistStat->GetXaxis()->SetBinLabel(1,
"N ev anal");
1180 fHistStat->GetXaxis()->SetBinLabel(2,
"N ev sel");
1182 fHistStat->GetXaxis()->SetBinLabel(3,
"N Gen D");
1183 fHistStat->GetXaxis()->SetBinLabel(4,
"N Gen Sel D");
1184 fHistStat->GetXaxis()->SetBinLabel(5,
"N D");
1185 fHistStat->GetXaxis()->SetBinLabel(6,
"N cand sel cuts");
1186 fHistStat->GetXaxis()->SetBinLabel(7,
"N rej no quark");
1187 fHistStat->GetXaxis()->SetBinLabel(8,
"N rej from B");
1188 fHistStat->GetXaxis()->SetBinLabel(9,
"N rej from D");
1193 fHistStat->GetXaxis()->SetBinLabel(3,
"N D");
1196 fHistStat->GetXaxis()->SetBinLabel(3,
"N Gen D");
1200 fHistStat->GetXaxis()->SetBinLabel(3,
"N Cand");
1202 fHistStat->GetXaxis()->SetBinLabel(4,
"N cand sel cuts");
1204 fHistStat->GetXaxis()->SetBinLabel(5,
"N side band cand");
1207 fHistStat->GetXaxis()->SetBinLabel(6,
"N Background");
1208 fHistStat->GetXaxis()->SetBinLabel(7,
"N rej no quark");
1209 fHistStat->GetXaxis()->SetBinLabel(8,
"N rej from B");
1210 fHistStat->GetXaxis()->SetBinLabel(9,
"N rej from D");
1217 fHistNCandEv =
new TH1F(
"fHistNCandEv",
"Number of candidates per event (after cuts);# cand/ev", 100, 0., 100.);
1221 fHistNSBCandEv =
new TH1F(
"hnSBCandEv",
"Number of side bands candidates per event (after cuts);# cand/ev", 100, 0.,100.);
1226 fHistPtPion =
new TH1F(
"fHistPtPion",
"Primary pions candidates pt", 500, 0., 10.);
1228 fHistPtPion->GetXaxis()->SetTitle(
"p_{T} (GeV/c)");
1234 const Int_t nbinsmass = 200;
1235 const Int_t ptbinsD = 100;
1244 fHistImpParS =
new TH2F(
"fHistImpParS",
"Impact parameter of daughter tracks; Getd0Prong();#it{p}^{daugh}_{T} (GeV/c)",200, -0.1,0.1,ptbinsD, ptmin, ptmax);
1253 const Int_t nbinsalpha = 200;
1254 Float_t minalpha = -TMath::Pi();
1255 Float_t maxalpha = TMath::Pi();
1256 const Int_t nbinsdeltaR = 200;
1263 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);
1274 fHistAlphaDDS =
new TH2F(
"fHistAlphaDDS",
"Angle D^{*}-D^{0} (Signal);#varphi (D^{*}) - #varphi (D0);p_{T}^{D*}",nbinsalpha, minalpha, maxalpha, ptbinsD, ptmin, ptmax);
1275 fHistAlphaDpisS =
new TH2F(
"fHistAlphaDpisS",
"Angle D^{*}-#pi_{soft} (Signal);#varphi (D^{*}) - #varphi (#pi_{soft});p_{T}^{D*}",nbinsalpha, minalpha, maxalpha, ptbinsD, ptmin, ptmax);
1276 fHistAlphaDpiS =
new TH2F(
"fHistAlphaDpiS",
"Angle D^{*}-#pi (Signal);#varphi (D^{*}) - #varphi (#pi);p_{T}^{D*}",nbinsalpha, minalpha, maxalpha, ptbinsD, ptmin, ptmax);
1277 fHistAlphaDKS =
new TH2F(
"fHistAlphaDKS",
"Angle D^{*}-K (Signal);#varphi (D^{*}) - #varphi (K);p_{T}^{D*}",nbinsalpha, minalpha, maxalpha, ptbinsD, ptmin, ptmax);
1279 fHistAlphaDDB =
new TH2F(
"fHistAlphaDDB",
"Angle D^{*}-D^{0} (Background);#varphi (D^{*}) - #varphi (D0);p_{T}^{D*}",nbinsalpha, minalpha, maxalpha, ptbinsD, ptmin, ptmax);
1280 fHistAlphaDpisB =
new TH2F(
"fHistAlphaDpisB",
"Angle D^{*}-#pi_{soft} (Background);#varphi (D^{*}) - #varphi (#pi_{soft});p_{T}^{D*}",nbinsalpha, minalpha, maxalpha, ptbinsD, ptmin, ptmax);
1281 fHistAlphaDpiB =
new TH2F(
"fHistAlphaDpiB",
"Angle D^{*}-#pi (Background);#varphi (D^{*}) - #varphi (#pi);p_{T}^{D*}",nbinsalpha, minalpha, maxalpha, ptbinsD, ptmin, ptmax);
1282 fHistAlphaDKB =
new TH2F(
"fHistAlphaDKB",
"Angle D^{*}-K (Background);#varphi (D^{*}) - #varphi (K);p_{T}^{D*}",nbinsalpha, minalpha, maxalpha, ptbinsD, ptmin, ptmax);
1284 fHistDeltaRDDS =
new TH2F(
"fHistDeltaRDDS",
"Angle D^{*}-D^{0} (Signal);#varphi (D^{*}) - #varphi (D0);p_{T}^{D*}",nbinsdeltaR, mindeltaR, maxdeltaR, ptbinsD, ptmin, ptmax);
1285 fHistDeltaRDpisS =
new TH2F(
"fHistDeltaRDpisS",
"Angle D^{*}-#pi_{soft} (Signal);#varphi (D^{*}) - #varphi (#pi_{soft});p_{T}^{D*}",nbinsdeltaR, mindeltaR, maxdeltaR, ptbinsD, ptmin, ptmax);
1286 fHistDeltaRDpiS =
new TH2F(
"fHistDeltaRDpiS",
"Angle D^{*}-#pi (Signal);#varphi (D^{*}) - #varphi (#pi);p_{T}^{D*}",nbinsdeltaR, mindeltaR, maxdeltaR, ptbinsD, ptmin, ptmax);
1287 fHistDeltaRDKS =
new TH2F(
"fHistDeltaRDKS",
"Angle D^{*}-K (Signal);#varphi (D^{*}) - #varphi (K);p_{T}^{D*}",nbinsdeltaR, mindeltaR, maxdeltaR, ptbinsD, ptmin, ptmax);
1289 fHistDeltaRDDB =
new TH2F(
"fHistDeltaRDDB",
"Angle D^{*}-D^{0} (Background);#varphi (D^{*}) - #varphi (D0);p_{T}^{D*}",nbinsdeltaR, mindeltaR, maxdeltaR, ptbinsD, ptmin, ptmax);
1290 fHistDeltaRDpisB =
new TH2F(
"fHistDeltaRDpisB",
"Angle D^{*}-#pi_{soft} (Background);#varphi (D^{*}) - #varphi (#pi_{soft});p_{T}^{D*}",nbinsdeltaR, mindeltaR, maxdeltaR, ptbinsD, ptmin, ptmax);
1291 fHistDeltaRDpiB =
new TH2F(
"fHistDeltaRDpiB",
"Angle D^{*}-#pi (Background);#varphi (D^{*}) - #varphi (#pi);p_{T}^{D*}",nbinsdeltaR, mindeltaR, maxdeltaR, ptbinsD, ptmin, ptmax);
1292 fHistDeltaRDKB =
new TH2F(
"fHistDeltaRDKB",
"Angle D^{*}-K (Background);#varphi (D^{*}) - #varphi (K);p_{T}^{D*}",nbinsdeltaR, mindeltaR, maxdeltaR, ptbinsD, ptmin, ptmax);
1314 fHistAlphaDpiS =
new TH2F(
"fHistAlphaDpiS",
"Angle D^{0}-#pi (Signal);#varphi (D^{0}) - #varphi (#pi);p_{T}^{D0}",nbinsalpha, minalpha, maxalpha, ptbinsD, ptmin, ptmax);
1315 fHistAlphaDKS =
new TH2F(
"fHistAlphaDKS",
"Angle D^{0}-K (Signal);#varphi (D^{0}) - #varphi (K);p_{T}^{D0}",nbinsalpha, minalpha, maxalpha, ptbinsD, ptmin, ptmax);
1316 fHistAlphaDpiR =
new TH2F(
"fHistAlphaDpiR",
"Angle D^{0}-#pi (Reflections);#varphi (D^{0}) - #varphi (#pi);p_{T}^{D0}",nbinsalpha, minalpha, maxalpha, ptbinsD, ptmin, ptmax);
1317 fHistAlphaDKR =
new TH2F(
"fHistAlphaDKR",
"Angle D^{0}-K (Reflections);#varphi (D^{0}) - #varphi (K);p_{T}^{D0}",nbinsalpha, minalpha, maxalpha, ptbinsD, ptmin, ptmax);
1319 fHistAlphaDpiB =
new TH2F(
"fHistAlphaDpiB",
"Angle D^{0}-#pi (Background);#varphi (D^{0}) - #varphi (#pi);p_{T}^{D0}",nbinsalpha, minalpha, maxalpha, ptbinsD, ptmin, ptmax);
1320 fHistAlphaDKB =
new TH2F(
"fHistAlphaDKB",
"Angle D^{0}-K (Background);#varphi (D^{0}) - #varphi (K);p_{T}^{D0}",nbinsalpha, minalpha, maxalpha, ptbinsD, ptmin, ptmax);
1322 fHistDeltaRDpiS =
new TH2F(
"fHistDeltaRDpiS",
"Angle D^{0}-#pi (Signal);#varphi (D^{0}) - #varphi (#pi);p_{T}^{D0}",nbinsdeltaR, mindeltaR, maxdeltaR, ptbinsD, ptmin, ptmax);
1323 fHistDeltaRDKS =
new TH2F(
"fHistDeltaRDKS",
"Angle D^{0}-K (Signal);#varphi (D^{0}) - #varphi (K);p_{T}^{D0}",nbinsdeltaR, mindeltaR, maxdeltaR, ptbinsD, ptmin, ptmax);
1324 fHistDeltaRDpiR =
new TH2F(
"fHistDeltaRDpiR",
"Angle D^{0}-#pi (Reflections);#varphi (D^{0}) - #varphi (#pi);p_{T}^{D0}",nbinsdeltaR, mindeltaR, maxdeltaR, ptbinsD, ptmin, ptmax);
1325 fHistDeltaRDKR =
new TH2F(
"fHistDeltaRDKR",
"Angle D^{0}-K (Reflections);#varphi (D^{0}) - #varphi (K);p_{T}^{D0}",nbinsdeltaR, mindeltaR, maxdeltaR, ptbinsD, ptmin, ptmax);
1327 fHistDeltaRDpiB =
new TH2F(
"fHistDeltaRDpiB",
"Angle D^{0}-#pi (Background);#varphi (D^{0}) - #varphi (#pi);p_{T}^{D0}",nbinsdeltaR, mindeltaR, maxdeltaR, ptbinsD, ptmin, ptmax);
1328 fHistDeltaRDKB =
new TH2F(
"fHistDeltaRDKB",
"Angle D^{0}-K (Background);#varphi (D^{0}) - #varphi (K);p_{T}^{D0}",nbinsdeltaR, mindeltaR, maxdeltaR, ptbinsD, ptmin, ptmax);
1354 if (!p1 || !p2)
return -1;
1362 if(dPhi < -(TMath::Pi())/2) dPhi = dPhi + TMath::TwoPi();
1363 if(dPhi > (3*(TMath::Pi()))/2) dPhi = dPhi - TMath::TwoPi();
1367 Double_t deltaR = TMath::Sqrt(dEta*dEta + dPhi*dPhi);
1379 if (!tracks)
return;
1382 allDaughters.SetOwner(kFALSE);
1386 while ((emcpart = static_cast<AliEmcalParticle*>(next()))) {
1387 AliAODRecoDecay* reco =
dynamic_cast<AliAODRecoDecay*
>(emcpart->
GetTrack());
1388 AliDebug(2, Form(
"Found a D meson candidtate with pT = %.3f, eta = %.3f, phi = %.3f", reco->Pt(), reco->Eta(), reco->Phi()));
1392 tracks->ResetCurrentID();
1393 AliVTrack* track = 0;
1394 Int_t n = coll->GetEntriesFast();
1398 AliAODTrack* aodtrack =
dynamic_cast<AliAODTrack*
>(track);
1400 if(!isInj)
continue;
1403 if (allDaughters.Remove(track) == 0) {
1406 AliDebug(2, Form(
"Track %d (pT = %.3f, eta = %.3f, phi = %.3f) is included", tracks->GetCurrentID(), track->Pt(), track->Eta(), track->Phi()));
1409 AliDebug(2, Form(
"Track %d (pT = %.3f, eta = %.3f, phi = %.3f) is excluded", tracks->GetCurrentID(), track->Pt(), track->Eta(), track->Phi()));
1419 Int_t n = cand->GetNDaughters();
1425 for (
Int_t i = 0; i < n; i++) {
1426 AliVTrack* track =
dynamic_cast<AliVTrack*
>(cand->GetDaughter(i));
1427 if (!track)
continue;
1429 AliAODRecoDecay* cand2 =
dynamic_cast<AliAODRecoDecay*
>(track);
1436 if (!track->InheritsFrom(
"AliAODTrack")) {
1437 Printf(
"Warning: One of the daughters is not of type 'AliAODTrack' nor 'AliAODRecoDecay'.");
1441 daughters.AddLast(track);
1458 if (!mctracks)
return;
1461 allMCDaughters.SetOwner(kFALSE);
1463 AliAODMCParticle* mcD = (AliAODMCParticle*)coll->At(0);
1467 mctracks->ResetCurrentID();
1468 AliAODMCParticle* mcpart = 0;
1469 Int_t n = coll->GetEntriesFast();
1471 if(TMath::Abs(mcpart->Charge())==0)
continue;
1474 if(!isInj)
continue;
1476 if (allMCDaughters.Remove(mcpart) == 0) {
1477 new ((*coll)[n]) AliAODMCParticle(*mcpart);
1479 AliDebug(2, Form(
"Track %d (pT = %.3f, eta = %.3f, phi = %.3f) is included", mctracks->GetCurrentID(), mcpart->Pt(), mcpart->Eta(), mcpart->Phi()));
1482 AliDebug(2, Form(
"Track %d (pT = %.3f, eta = %.3f, phi = %.3f) is excluded", mctracks->GetCurrentID(), mcpart->Pt(), mcpart->Eta(), mcpart->Phi()));
1492 Int_t n = mcDmeson->GetNDaughters();
1493 Int_t nD0 = mcDmeson->GetDaughter(0);
1497 for (
Int_t i = 0; i < n; i++) {
1498 AliAODMCParticle* DDaughter =
static_cast<AliAODMCParticle*
>(mcArray->At(nD0+i));
1499 if (!DDaughter)
continue;
1501 if (DDaughter->GetNDaughters()>0) {
1504 mcdaughters.AddLast(DDaughter);
1508 mcdaughters.AddLast(DDaughter);
1509 pt += DDaughter->Pt();
1522 if (!mcArray)
return -1;
1524 Int_t labDau0 =
static_cast<AliVTrack*
>(cand->GetDaughter(0))->GetLabel();
1525 if (labDau0 < 0)
return -1;
1527 AliAODMCParticle* part =
static_cast<AliAODMCParticle*
>(mcArray->At(labDau0));
1536 if (!stack)
return -1;
1538 Int_t labDau0 =
static_cast<AliVTrack*
>(cand->GetDaughter(0))->GetLabel();
1539 if (labDau0 < 0)
return -1;
1549 if (!part)
return -1;
1550 if (!mcArray)
return -1;
1552 Int_t pdgGranma = 0;
1553 Int_t mother = part->GetMother();
1555 Int_t abspdgGranma = 0;
1557 Bool_t isQuarkFound = kFALSE;
1559 while (mother >= 0) {
1561 AliAODMCParticle* mcGranma =
static_cast<AliAODMCParticle*
>(mcArray->At(mother));
1562 if (mcGranma >= 0) {
1563 pdgGranma = mcGranma->GetPdgCode();
1564 abspdgGranma = TMath::Abs(pdgGranma);
1565 if ((abspdgGranma > 500 && abspdgGranma < 600) || (abspdgGranma > 5000 && abspdgGranma < 6000)) {
1569 if (abspdgGranma == 4 || abspdgGranma == 5) isQuarkFound = kTRUE;
1570 mother = mcGranma->GetMother();
1573 ::Error(
"AliAnalysisTaskSEDmesonsFilterCJ::CheckOrigin",
"Could not retrieve mother particle %d!", mother);
1596 if (!stack)
return -1;
1598 TParticle* part = stack->Particle(ipart);
1599 if (!part)
return -1;
1601 Int_t pdgGranma = 0;
1602 Int_t mother = part->GetFirstMother();
1604 Int_t abspdgGranma = 0;
1606 Bool_t isQuarkFound = kFALSE;
1608 while (mother >= 0) {
1610 TParticle* mcGranma = stack->Particle(mother);
1611 if (mcGranma >= 0) {
1612 pdgGranma = mcGranma->GetPdgCode();
1613 abspdgGranma = TMath::Abs(pdgGranma);
1614 if ((abspdgGranma > 500 && abspdgGranma < 600) || (abspdgGranma > 5000 && abspdgGranma < 6000)) {
1618 if (abspdgGranma == 4 || abspdgGranma == 5) isQuarkFound = kTRUE;
1619 mother = mcGranma->GetFirstMother();
1622 ::Error(
"AliAnalysisTaskSEDmesonsFilterCJ::CheckOrigin",
"Could not retrieve mother particle %d!", mother);
1645 if (!part)
return -1;
1646 if (!mcArray)
return -1;
1650 Int_t absPdgPart = TMath::Abs(part->GetPdgCode());
1652 if (part->GetNDaughters() == 2) {
1654 AliAODMCParticle* d1 =
static_cast<AliAODMCParticle*
>(mcArray->At(part->GetDaughter(0)));
1655 AliAODMCParticle* d2 =
static_cast<AliAODMCParticle*
>(mcArray->At(part->GetDaughter(1)));
1661 Int_t absPdg1 = TMath::Abs(d1->GetPdgCode());
1662 Int_t absPdg2 = TMath::Abs(d2->GetPdgCode());
1664 if (absPdgPart == 421) {
1666 if ((absPdg1 == 211 && absPdg2 == 321) ||
1667 (absPdg1 == 321 && absPdg2 == 211)) {
1672 if (absPdgPart == 413) {
1674 if (absPdg1 == 421 && absPdg2 == 211) {
1681 if (absPdg1 == 211 && absPdg2 == 421) {
1698 if (!stack)
return -1;
1700 TParticle* part = stack->Particle(ipart);
1702 if (!part)
return -1;
1706 if (part->GetNDaughters() == 2) {
1708 Int_t id1 = part->GetDaughter(0);
1709 Int_t id2 = part->GetDaughter(1);
1711 TParticle* d1 = stack->Particle(id1);
1712 TParticle* d2 = stack->Particle(id2);
1718 Int_t absPdg1 = TMath::Abs(d1->GetPdgCode());
1719 Int_t absPdg2 = TMath::Abs(d2->GetPdgCode());
1722 if (part->GetPdgCode() == 421) {
1724 if ((absPdg1 == 211 && absPdg2 == 321) ||
1725 (absPdg1 == 321 && absPdg2 == 211)) {
1730 if (part->GetPdgCode() == 413) {
1732 if (absPdg1 == 421 && absPdg2 == 211) {
1739 if (absPdg1 == 211 && absPdg2 == 421) {
1758 Int_t lab=TMath::Abs(track->GetLabel());
1763 while(nameGen.IsWhitespace()){
1764 AliAODMCParticle *mcpart= (AliAODMCParticle*)arrayMC->At(lab);
1766 printf(
"AliAnalysisTaskMultCheck::IsTrackInjected - BREAK: No valid AliAODMCParticle at label %i\n",lab);
1769 Int_t mother = mcpart->GetMother();
1771 printf(
"AliAnalysisTaskMultCheck::IsTrackInjected - BREAK: Reached primary particle without valid mother\n");
1791 if(nameGen.IsWhitespace() || nameGen.Contains(
"ijing"))
return kFALSE;
1802 Int_t lab=TMath::Abs(track->GetLabel());
1807 while(nameGen.IsWhitespace()){
1808 AliAODMCParticle *mcpart= (AliAODMCParticle*)arrayMC->At(lab);
1810 printf(
"AliAnalysisTaskMultCheck::IsTrackInjected - BREAK: No valid AliAODMCParticle at label %i\n",lab);
1813 Int_t mother = mcpart->GetMother();
1815 printf(
"AliAnalysisTaskMultCheck::IsTrackInjected - BREAK: Reached primary particle without valid mother\n");
1835 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
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
Int_t fNSBCand
number of selected D candidates already added to fCandidateArray
Bool_t DefineHistoForAnalysis()
Bool_t IsSelected(TObject *obj)
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
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...