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),
92 fCombinedDmesonsBkg(0),
93 fMCCombinedDmesons(0),
130 for (
Int_t i=4; i--;) fPDGdaughters[i] = 0;
131 for (
Int_t i=30; i--;) fSigmaD0[i] = 0.;
133 fNeedEmcalGeom = kFALSE;
142 fUseRejTracks(kFALSE),
145 fCandidateType(candtype),
153 fInhibitTask(kFALSE),
154 fCombineDmesons(kFALSE),
157 fRejectQuarkNotFound(kTRUE),
158 fRejectDfromB(kTRUE),
159 fKeepOnlyDfromB(kFALSE),
163 fArrayDStartoD0pi(0),
168 fCombinedDmesonsBkg(0),
169 fMCCombinedDmesons(0),
206 Info(
"AliAnalysisTaskSEDmesonsFilterCJ",
"Calling Constructor");
214 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};
241 AliFatal(Form(
"Default sigma D0 not enough for %d pt bins, use SetSigmaD0ForDStar to set them",nptbins));
245 Warning(
"AliAnalysisTaskSEDmesonsFilterCJ",
"%d not accepted!!",
fCandidateType);
252 DefineOutput(1, TList::Class());
253 DefineOutput(2, AliRDHFCuts::Class());
254 DefineOutput(3, TClonesArray::Class());
255 DefineOutput(4, TClonesArray::Class());
256 DefineOutput(5, TClonesArray::Class());
257 DefineOutput(6, TClonesArray::Class());
258 DefineOutput(7, TClonesArray::Class());
268 Info(
"~AliAnalysisTaskSEDmesonsFilterCJ",
"Calling Destructor");
305 Info(
"AnalysisTaskSEDmesonsForJetCorrelations::Init()",
"Entering method");
311 copyfCutsDzero->SetName(
"AnalysisCutsDzero");
312 PostData(2, copyfCutsDzero);
317 copyfCutsDstar->SetName(
"AnalysisCutsDStar");
318 PostData(2, copyfCutsDstar);
334 Info(
"UserCreateOutputObjects",
"CreateOutputObjects of task %s", GetName());
350 AliWarning(Form(
"Candidate type %d not recognized!",
fCandidateType));
375 fSideBandArray->SetName(GetOutputSlot(4)->GetContainer()->GetName());
393 Info(
"UserCreateOutputObjects",
"Data posted for task %s", GetName());
403 AliDebug(2,
"Entering ExecOnce()");
414 if (AODEvent() && IsStandardAOD()) {
422 AliAODHandler *aodHandler = (AliAODHandler*)((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
423 if(aodHandler->GetExtensions()) {
424 AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject(
"AliAOD.VertexingHF.root");
429 AliError(Form(
"This task need an AOD event! Task '%s' will be disabled!", GetName()));
439 if (!cls.InheritsFrom(
"AliAODRecoDecayHF2Prong")) {
440 AliError(Form(
"%s: Objects of type %s in %s are not inherited from AliAODRecoDecayHF2Prong! Task will be disabled!",
448 AliError(Form(
"Could not find array %s, skipping the event. Task '%s' will be disabled!",
fBranchName.Data(), GetName()));
454 fMCarray =
dynamic_cast<TClonesArray*
>(
fAodEvent->FindListObject(AliAODMCParticle::StdBranchName()));
456 AliError(Form(
"MC particles not found! Task '%s' will be disabled!", GetName()));
461 fMCHeader = (AliAODMCHeader*)
fAodEvent->GetList()->FindObject(AliAODMCHeader::StdBranchName());
463 AliError(Form(
"MC header not found! Task '%s' will be disabled!", GetName()));
474 fRan =
new TRandom3(0);
489 if (matchingAODdeltaAODlevel<=0) {
494 AliDebug(2,
"Entering Run()");
501 AliDebug(2,
"TClonesArray cleared");
507 if (!
fAodEvent->GetPrimaryVertex() || TMath::Abs(
fAodEvent->GetMagneticField()) < 0.001)
return kFALSE;
511 if (!iseventselected)
return kFALSE;
514 AliDebug(2,
"Event selected");
517 AliDebug(2, Form(
"Found %d vertices", nD));
521 Int_t pdgMeson = 413;
535 for (
Int_t iMCcharm = 0; iMCcharm < nDMC; iMCcharm++){
537 AliAODMCParticle* charmPart =
static_cast<AliAODMCParticle*
>(
fMCarray->At(iMCcharm));
538 if(TMath::Abs(charmPart->GetPdgCode()) != pdgMeson)
continue;
539 if(!charmPart)
continue;
543 if (origin < 0)
continue;
558 if( TMath::Abs(charmPart->GetPdgCode()) == 413 && decay !=
kDecayDStartoKpipi)
continue;
559 if( TMath::Abs(charmPart->GetPdgCode()) == 421 && decay !=
kDecayD0toKpi)
continue;
565 new ((*fMCCombinedDmesons)[0]) AliAODMCParticle(*charmPart);
571 Int_t isRecoD = kFALSE;
572 for (
Int_t icharm = 0; icharm < nD; icharm++) {
575 if (!charmCand)
continue;
578 Int_t nprongs = charmCand->GetNProngs();
579 AliDebug(2, Form(
"Candidate is %d, and nprongs = %d",
fCandidateType, nprongs));
584 Error(
"AliAnalysisTaskSEDmesonsFilterCJ::UserExec",
"Candidate type is D* but object type is wrong (should be AliAODRecoCascadeHF)");
589 Int_t pdgDgDStartoD0pi[2] = { 421, 211 };
590 Int_t pdgDgD0toKpi[2] = { 321, 211 };
596 if(mcLabel == iMCcharm) { isRecoD = kTRUE;
break; }
600 if (!charmCand)
break;
609 Int_t isSelected = 0;
611 if (!isSelected)
break;
618 fHistImpParS->Fill(dstar->Getd0Prong(0), dstar->PtProng(0));
619 fHistImpParS->Fill(D0fromDstar->Getd0Prong(0), D0fromDstar->PtProng(0));
620 fHistImpParS->Fill(D0fromDstar->Getd0Prong(1), D0fromDstar->PtProng(1));
623 fHistImpParS->Fill(charmCand->Getd0Prong(0), charmCand->PtProng(0));
624 fHistImpParS->Fill(charmCand->Getd0Prong(1), charmCand->PtProng(1));
630 Int_t isDstar = charmPart == NULL ? 0 : 1;
641 Int_t pdgCode = charmPart->GetPdgCode();
642 if (pdgCode == 421) { isD0 = 1; }
643 else if (pdgCode == -421) { isD0 = -1; }
659 for (
Int_t icharm = 0; icharm < nD; icharm++) {
660 Int_t isSelected = 0;
663 if (!charmCand)
continue;
666 Int_t nprongs = charmCand->GetNProngs();
667 AliDebug(2, Form(
"Candidate is %d, and nprongs = %d",
fCandidateType, nprongs));
674 Error(
"AliAnalysisTaskSEDmesonsFilterCJ::UserExec",
"Candidate type is D* but object type is wrong (should be AliAODRecoCascadeHF)");
689 if (!isSelected)
continue;
704 AliDebug(2,
"Loop done");
734 AliDebug(2,
"Exiting method");
745 AliAODMCParticle* charmPart = 0;
750 charmPart =
static_cast<AliAODMCParticle*
>(
fMCarray->At(mcLabel));
757 if (origin < 0)
return;
789 fHistImpParB->Fill(charmCand->Getd0Prong(0), charmCand->PtProng(0));
790 fHistImpParB->Fill(charmCand->Getd0Prong(1), charmCand->PtProng(1));
809 if(charmPart)
new ((*fMCCombinedDmesons)[0]) AliAODMCParticle(*charmPart);
813 fHistImpParS->Fill(charmCand->Getd0Prong(0), charmCand->PtProng(0));
814 fHistImpParS->Fill(charmCand->Getd0Prong(1), charmCand->PtProng(1));
820 if(!
fMultCand)
new ((*fCandidateArray)[
fNCand]) AliAODMCParticle(*charmPart);
821 else if(
fNCand==
fAnalyseCand)
new ((*fCandidateArray)[0]) AliAODMCParticle(*charmPart);
836 Int_t pdgCode = charmPart->GetPdgCode();
838 if (pdgCode == 421) {
841 else if (pdgCode == -421) {
845 AliDebug(2,
"Not a D0/D0bar meson!");
859 AliDebug(2,
"Entering method");
862 AliAODMCParticle* charmPart = 0;
865 Int_t pdgDgDStartoD0pi[2] = { 421, 211 };
866 Int_t pdgDgD0toKpi[2] = { 321, 211 };
871 charmPart =
static_cast<AliAODMCParticle*
>(
fMCarray->At(mcLabel));
878 if (origin < 0)
return;
913 fHistImpParB->Fill(dstar->Getd0Prong(0), dstar->PtProng(0));
914 fHistImpParB->Fill(D0fromDstar->Getd0Prong(0), D0fromDstar->PtProng(0));
915 fHistImpParB->Fill(D0fromDstar->Getd0Prong(1), D0fromDstar->PtProng(1));
932 if(charmPart)
new ((*fMCCombinedDmesons)[0]) AliAODMCParticle(*charmPart);
938 if(!
fMultCand)
new ((*fCandidateArray)[
fNCand]) AliAODMCParticle(*charmPart);
939 else if(
fNCand==
fAnalyseCand)
new ((*fCandidateArray)[0]) AliAODMCParticle(*charmPart);
944 fHistImpParS->Fill(dstar->Getd0Prong(0), dstar->PtProng(0));
945 fHistImpParS->Fill(D0fromDstar->Getd0Prong(0), D0fromDstar->PtProng(0));
946 fHistImpParS->Fill(D0fromDstar->Getd0Prong(1), D0fromDstar->PtProng(1));
958 Double_t mPDGD0 = TDatabasePDG::Instance()->GetParticle(421)->Mass();
959 Double_t mPDGDstar = TDatabasePDG::Instance()->GetParticle(413)->Mass();
960 Double_t invMassPDG = mPDGDstar - mPDGD0;
965 AliError(Form(
"Pt %.3f out of bounds", ptD));
969 AliDebug(1, Form(
"Pt bin %d and sigma D0 %.4f", ptDbin,
fSigmaD0[ptDbin]));
972 AliDebug(2,
"D0 mass within 3 sigma");
975 AliDebug(2,
"Filling invariant mass vs pt histogram");
980 if (TMath::Abs(invmassDelta - invMassPDG) < 0.0021) {
981 AliDebug(2,
"Filling pion pt histogram");
983 AliAODTrack *softPionTrack =
static_cast<AliAODTrack*
>(dstar->
GetBachelor());
984 if (softPionTrack)
fHistPtPion->Fill(softPionTrack->Pt());
989 Int_t isDstar = charmPart == NULL ? 0 : 1;
993 AliDebug(2,
"Exiting method");
1003 Double_t adaugh[2] = {charmCand->PhiProng(0), charmCand->PhiProng(1)};
1004 AliAODTrack* p0 =
static_cast<AliAODTrack*
>(charmCand->GetDaughter(0));
1005 AliAODTrack* p1 =
static_cast<AliAODTrack*
>(charmCand->GetDaughter(1));
1010 if (isSelected == 1 || isSelected == 3) {
1017 if (isSelected >= 2) {
1025 else if (isD0 == 1) {
1032 if (isSelected == 3) {
1040 else if (isD0 == -1) {
1047 if (isSelected == 3) {
1062 AliAODTrack *softPionTrack =
static_cast<AliAODTrack*
>(dstar->
GetBachelor());
1065 Double_t apis= softPionTrack->Phi();
1069 Int_t isD0 = D0fromDstar->Charge()>0 ? kTRUE : kFALSE;
1070 Double_t aK = isD0 ? D0fromDstar->PhiProng(0) : D0fromDstar->PhiProng(1);
1071 Double_t api = isD0 ? D0fromDstar->PhiProng(1) : D0fromDstar->PhiProng(0);
1074 Double_t dRDpi =
DeltaR(dstar, isD0 ? static_cast<AliVParticle*>(D0fromDstar->GetDaughter(1)) : static_cast<AliVParticle*>(D0fromDstar->GetDaughter(0)));
1075 Double_t dRDK =
DeltaR(dstar, isD0 ? static_cast<AliVParticle*>(D0fromDstar->GetDaughter(0)) : static_cast<AliVParticle*>(D0fromDstar->GetDaughter(1)));
1108 if (!isSelected)
return;
1113 AliError(Form(
"Pt %.3f out of bounds", dstar->Pt()));
1117 const Double_t mPDGD0 = TDatabasePDG::Instance()->GetParticle(421)->Mass();
1134 Float_t mass = TDatabasePDG::Instance()->GetParticle(TMath::Abs(pdg))->Mass();
1144 AliError(Form(
"Wrong mass limits! Task '%s' will be disabled!", GetName()));
1154 if (uplimit>lowlimit) {
1159 printf(
"Error! Lower limit larger than upper limit!\n");
1171 AliWarning(
"Maximum number of bins allowed is 30!");
1175 if (!width)
return kFALSE;
1187 fHistStat =
new TH1I(
"fHistStat",
"Statistics", 9, -0.5, 8.5);
1188 fHistStat->GetXaxis()->SetBinLabel(1,
"N ev anal");
1189 fHistStat->GetXaxis()->SetBinLabel(2,
"N ev sel");
1191 fHistStat->GetXaxis()->SetBinLabel(3,
"N Gen D");
1192 fHistStat->GetXaxis()->SetBinLabel(4,
"N Gen Sel D");
1193 fHistStat->GetXaxis()->SetBinLabel(5,
"N D");
1194 fHistStat->GetXaxis()->SetBinLabel(6,
"N cand sel cuts");
1195 fHistStat->GetXaxis()->SetBinLabel(7,
"N rej no quark");
1196 fHistStat->GetXaxis()->SetBinLabel(8,
"N rej from B");
1197 fHistStat->GetXaxis()->SetBinLabel(9,
"N rej from D");
1202 fHistStat->GetXaxis()->SetBinLabel(3,
"N D");
1205 fHistStat->GetXaxis()->SetBinLabel(3,
"N Gen D");
1209 fHistStat->GetXaxis()->SetBinLabel(3,
"N Cand");
1211 fHistStat->GetXaxis()->SetBinLabel(4,
"N cand sel cuts");
1213 fHistStat->GetXaxis()->SetBinLabel(5,
"N side band cand");
1216 fHistStat->GetXaxis()->SetBinLabel(6,
"N Background");
1217 fHistStat->GetXaxis()->SetBinLabel(7,
"N rej no quark");
1218 fHistStat->GetXaxis()->SetBinLabel(8,
"N rej from B");
1219 fHistStat->GetXaxis()->SetBinLabel(9,
"N rej from D");
1226 fHistNCandEv =
new TH1F(
"fHistNCandEv",
"Number of candidates per event (after cuts);# cand/ev", 100, 0., 100.);
1230 fHistNSBCandEv =
new TH1F(
"hnSBCandEv",
"Number of side bands candidates per event (after cuts);# cand/ev", 100, 0.,100.);
1235 fHistPtPion =
new TH1F(
"fHistPtPion",
"Primary pions candidates pt", 500, 0., 10.);
1237 fHistPtPion->GetXaxis()->SetTitle(
"p_{T} (GeV/c)");
1243 const Int_t nbinsmass = 200;
1244 const Int_t ptbinsD = 100;
1253 fHistImpParS =
new TH2F(
"fHistImpParS",
"Impact parameter of daughter tracks; Getd0Prong();#it{p}^{daugh}_{T} (GeV/c)",200, -0.1,0.1,ptbinsD, ptmin, ptmax);
1262 const Int_t nbinsalpha = 200;
1263 Float_t minalpha = -TMath::Pi();
1264 Float_t maxalpha = TMath::Pi();
1265 const Int_t nbinsdeltaR = 200;
1272 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);
1283 fHistAlphaDDS =
new TH2F(
"fHistAlphaDDS",
"Angle D^{*}-D^{0} (Signal);#varphi (D^{*}) - #varphi (D0);p_{T}^{D*}",nbinsalpha, minalpha, maxalpha, ptbinsD, ptmin, ptmax);
1284 fHistAlphaDpisS =
new TH2F(
"fHistAlphaDpisS",
"Angle D^{*}-#pi_{soft} (Signal);#varphi (D^{*}) - #varphi (#pi_{soft});p_{T}^{D*}",nbinsalpha, minalpha, maxalpha, ptbinsD, ptmin, ptmax);
1285 fHistAlphaDpiS =
new TH2F(
"fHistAlphaDpiS",
"Angle D^{*}-#pi (Signal);#varphi (D^{*}) - #varphi (#pi);p_{T}^{D*}",nbinsalpha, minalpha, maxalpha, ptbinsD, ptmin, ptmax);
1286 fHistAlphaDKS =
new TH2F(
"fHistAlphaDKS",
"Angle D^{*}-K (Signal);#varphi (D^{*}) - #varphi (K);p_{T}^{D*}",nbinsalpha, minalpha, maxalpha, ptbinsD, ptmin, ptmax);
1288 fHistAlphaDDB =
new TH2F(
"fHistAlphaDDB",
"Angle D^{*}-D^{0} (Background);#varphi (D^{*}) - #varphi (D0);p_{T}^{D*}",nbinsalpha, minalpha, maxalpha, ptbinsD, ptmin, ptmax);
1289 fHistAlphaDpisB =
new TH2F(
"fHistAlphaDpisB",
"Angle D^{*}-#pi_{soft} (Background);#varphi (D^{*}) - #varphi (#pi_{soft});p_{T}^{D*}",nbinsalpha, minalpha, maxalpha, ptbinsD, ptmin, ptmax);
1290 fHistAlphaDpiB =
new TH2F(
"fHistAlphaDpiB",
"Angle D^{*}-#pi (Background);#varphi (D^{*}) - #varphi (#pi);p_{T}^{D*}",nbinsalpha, minalpha, maxalpha, ptbinsD, ptmin, ptmax);
1291 fHistAlphaDKB =
new TH2F(
"fHistAlphaDKB",
"Angle D^{*}-K (Background);#varphi (D^{*}) - #varphi (K);p_{T}^{D*}",nbinsalpha, minalpha, maxalpha, ptbinsD, ptmin, ptmax);
1293 fHistDeltaRDDS =
new TH2F(
"fHistDeltaRDDS",
"Angle D^{*}-D^{0} (Signal);#varphi (D^{*}) - #varphi (D0);p_{T}^{D*}",nbinsdeltaR, mindeltaR, maxdeltaR, ptbinsD, ptmin, ptmax);
1294 fHistDeltaRDpisS =
new TH2F(
"fHistDeltaRDpisS",
"Angle D^{*}-#pi_{soft} (Signal);#varphi (D^{*}) - #varphi (#pi_{soft});p_{T}^{D*}",nbinsdeltaR, mindeltaR, maxdeltaR, ptbinsD, ptmin, ptmax);
1295 fHistDeltaRDpiS =
new TH2F(
"fHistDeltaRDpiS",
"Angle D^{*}-#pi (Signal);#varphi (D^{*}) - #varphi (#pi);p_{T}^{D*}",nbinsdeltaR, mindeltaR, maxdeltaR, ptbinsD, ptmin, ptmax);
1296 fHistDeltaRDKS =
new TH2F(
"fHistDeltaRDKS",
"Angle D^{*}-K (Signal);#varphi (D^{*}) - #varphi (K);p_{T}^{D*}",nbinsdeltaR, mindeltaR, maxdeltaR, ptbinsD, ptmin, ptmax);
1298 fHistDeltaRDDB =
new TH2F(
"fHistDeltaRDDB",
"Angle D^{*}-D^{0} (Background);#varphi (D^{*}) - #varphi (D0);p_{T}^{D*}",nbinsdeltaR, mindeltaR, maxdeltaR, ptbinsD, ptmin, ptmax);
1299 fHistDeltaRDpisB =
new TH2F(
"fHistDeltaRDpisB",
"Angle D^{*}-#pi_{soft} (Background);#varphi (D^{*}) - #varphi (#pi_{soft});p_{T}^{D*}",nbinsdeltaR, mindeltaR, maxdeltaR, ptbinsD, ptmin, ptmax);
1300 fHistDeltaRDpiB =
new TH2F(
"fHistDeltaRDpiB",
"Angle D^{*}-#pi (Background);#varphi (D^{*}) - #varphi (#pi);p_{T}^{D*}",nbinsdeltaR, mindeltaR, maxdeltaR, ptbinsD, ptmin, ptmax);
1301 fHistDeltaRDKB =
new TH2F(
"fHistDeltaRDKB",
"Angle D^{*}-K (Background);#varphi (D^{*}) - #varphi (K);p_{T}^{D*}",nbinsdeltaR, mindeltaR, maxdeltaR, ptbinsD, ptmin, ptmax);
1323 fHistAlphaDpiS =
new TH2F(
"fHistAlphaDpiS",
"Angle D^{0}-#pi (Signal);#varphi (D^{0}) - #varphi (#pi);p_{T}^{D0}",nbinsalpha, minalpha, maxalpha, ptbinsD, ptmin, ptmax);
1324 fHistAlphaDKS =
new TH2F(
"fHistAlphaDKS",
"Angle D^{0}-K (Signal);#varphi (D^{0}) - #varphi (K);p_{T}^{D0}",nbinsalpha, minalpha, maxalpha, ptbinsD, ptmin, ptmax);
1325 fHistAlphaDpiR =
new TH2F(
"fHistAlphaDpiR",
"Angle D^{0}-#pi (Reflections);#varphi (D^{0}) - #varphi (#pi);p_{T}^{D0}",nbinsalpha, minalpha, maxalpha, ptbinsD, ptmin, ptmax);
1326 fHistAlphaDKR =
new TH2F(
"fHistAlphaDKR",
"Angle D^{0}-K (Reflections);#varphi (D^{0}) - #varphi (K);p_{T}^{D0}",nbinsalpha, minalpha, maxalpha, ptbinsD, ptmin, ptmax);
1328 fHistAlphaDpiB =
new TH2F(
"fHistAlphaDpiB",
"Angle D^{0}-#pi (Background);#varphi (D^{0}) - #varphi (#pi);p_{T}^{D0}",nbinsalpha, minalpha, maxalpha, ptbinsD, ptmin, ptmax);
1329 fHistAlphaDKB =
new TH2F(
"fHistAlphaDKB",
"Angle D^{0}-K (Background);#varphi (D^{0}) - #varphi (K);p_{T}^{D0}",nbinsalpha, minalpha, maxalpha, ptbinsD, ptmin, ptmax);
1331 fHistDeltaRDpiS =
new TH2F(
"fHistDeltaRDpiS",
"Angle D^{0}-#pi (Signal);#varphi (D^{0}) - #varphi (#pi);p_{T}^{D0}",nbinsdeltaR, mindeltaR, maxdeltaR, ptbinsD, ptmin, ptmax);
1332 fHistDeltaRDKS =
new TH2F(
"fHistDeltaRDKS",
"Angle D^{0}-K (Signal);#varphi (D^{0}) - #varphi (K);p_{T}^{D0}",nbinsdeltaR, mindeltaR, maxdeltaR, ptbinsD, ptmin, ptmax);
1333 fHistDeltaRDpiR =
new TH2F(
"fHistDeltaRDpiR",
"Angle D^{0}-#pi (Reflections);#varphi (D^{0}) - #varphi (#pi);p_{T}^{D0}",nbinsdeltaR, mindeltaR, maxdeltaR, ptbinsD, ptmin, ptmax);
1334 fHistDeltaRDKR =
new TH2F(
"fHistDeltaRDKR",
"Angle D^{0}-K (Reflections);#varphi (D^{0}) - #varphi (K);p_{T}^{D0}",nbinsdeltaR, mindeltaR, maxdeltaR, ptbinsD, ptmin, ptmax);
1336 fHistDeltaRDpiB =
new TH2F(
"fHistDeltaRDpiB",
"Angle D^{0}-#pi (Background);#varphi (D^{0}) - #varphi (#pi);p_{T}^{D0}",nbinsdeltaR, mindeltaR, maxdeltaR, ptbinsD, ptmin, ptmax);
1337 fHistDeltaRDKB =
new TH2F(
"fHistDeltaRDKB",
"Angle D^{0}-K (Background);#varphi (D^{0}) - #varphi (K);p_{T}^{D0}",nbinsdeltaR, mindeltaR, maxdeltaR, ptbinsD, ptmin, ptmax);
1363 if (!p1 || !p2)
return -1;
1371 if(dPhi < -(TMath::Pi())/2) dPhi = dPhi + TMath::TwoPi();
1372 if(dPhi > (3*(TMath::Pi()))/2) dPhi = dPhi - TMath::TwoPi();
1376 Double_t deltaR = TMath::Sqrt(dEta*dEta + dPhi*dPhi);
1388 if (!tracks)
return;
1391 allDaughters.SetOwner(kFALSE);
1395 while ((emcpart = static_cast<AliEmcalParticle*>(next()))) {
1396 AliAODRecoDecay* reco =
dynamic_cast<AliAODRecoDecay*
>(emcpart->
GetTrack());
1397 AliDebug(2, Form(
"Found a D meson candidtate with pT = %.3f, eta = %.3f, phi = %.3f", reco->Pt(), reco->Eta(), reco->Phi()));
1401 tracks->ResetCurrentID();
1402 AliVTrack* track = 0;
1403 Int_t n = coll->GetEntriesFast();
1407 AliAODTrack* aodtrack =
dynamic_cast<AliAODTrack*
>(track);
1409 if(!isInj)
continue;
1412 if (allDaughters.Remove(track) == 0) {
1415 AliDebug(2, Form(
"Track %d (pT = %.3f, eta = %.3f, phi = %.3f) is included", tracks->GetCurrentID(), track->Pt(), track->Eta(), track->Phi()));
1418 AliDebug(2, Form(
"Track %d (pT = %.3f, eta = %.3f, phi = %.3f) is excluded", tracks->GetCurrentID(), track->Pt(), track->Eta(), track->Phi()));
1428 Int_t n = cand->GetNDaughters();
1434 for (
Int_t i = 0; i < n; i++) {
1435 AliVTrack* track =
dynamic_cast<AliVTrack*
>(cand->GetDaughter(i));
1436 if (!track)
continue;
1438 AliAODRecoDecay* cand2 =
dynamic_cast<AliAODRecoDecay*
>(track);
1445 if (!track->InheritsFrom(
"AliAODTrack")) {
1446 Printf(
"Warning: One of the daughters is not of type 'AliAODTrack' nor 'AliAODRecoDecay'.");
1450 daughters.AddLast(track);
1467 if (!mctracks)
return;
1470 allMCDaughters.SetOwner(kFALSE);
1472 AliAODMCParticle* mcD = (AliAODMCParticle*)coll->At(0);
1476 mctracks->ResetCurrentID();
1477 AliAODMCParticle* mcpart = 0;
1478 Int_t n = coll->GetEntriesFast();
1480 if(TMath::Abs(mcpart->Charge())==0)
continue;
1483 if(!isInj)
continue;
1487 if (allMCDaughters.Remove(mcpart) == 0) {
1491 new ((*coll)[n]) AliAODMCParticle(*mcpart);
1493 AliDebug(2, Form(
"Track %d (pT = %.3f, eta = %.3f, phi = %.3f) is included", mctracks->GetCurrentID(), mcpart->Pt(), mcpart->Eta(), mcpart->Phi()));
1496 AliDebug(2, Form(
"Track %d (pT = %.3f, eta = %.3f, phi = %.3f) is excluded", mctracks->GetCurrentID(), mcpart->Pt(), mcpart->Eta(), mcpart->Phi()));
1506 Int_t n = mcDmeson->GetNDaughters();
1507 Int_t nD0 = mcDmeson->GetDaughter(0);
1511 for (
Int_t i = 0; i < n; i++) {
1512 AliAODMCParticle* DDaughter =
static_cast<AliAODMCParticle*
>(mcArray->At(nD0+i));
1513 if (!DDaughter)
continue;
1515 if (DDaughter->GetNDaughters()>0) {
1518 mcdaughters.AddLast(DDaughter);
1522 mcdaughters.AddLast(DDaughter);
1523 pt += DDaughter->Pt();
1536 if (!mcArray)
return -1;
1538 Int_t labDau0 =
static_cast<AliVTrack*
>(cand->GetDaughter(0))->GetLabel();
1539 if (labDau0 < 0)
return -1;
1541 AliAODMCParticle*
part =
static_cast<AliAODMCParticle*
>(mcArray->At(labDau0));
1550 if (!stack)
return -1;
1552 Int_t labDau0 =
static_cast<AliVTrack*
>(cand->GetDaughter(0))->GetLabel();
1553 if (labDau0 < 0)
return -1;
1563 if (!part)
return -1;
1564 if (!mcArray)
return -1;
1566 Int_t pdgGranma = 0;
1567 Int_t mother = part->GetMother();
1569 Int_t abspdgGranma = 0;
1571 Bool_t isQuarkFound = kFALSE;
1573 while (mother >= 0) {
1575 AliAODMCParticle* mcGranma =
static_cast<AliAODMCParticle*
>(mcArray->At(mother));
1576 if (mcGranma != 0) {
1577 pdgGranma = mcGranma->GetPdgCode();
1578 abspdgGranma = TMath::Abs(pdgGranma);
1579 if ((abspdgGranma > 500 && abspdgGranma < 600) || (abspdgGranma > 5000 && abspdgGranma < 6000)) {
1583 if (abspdgGranma == 4 || abspdgGranma == 5) isQuarkFound = kTRUE;
1584 mother = mcGranma->GetMother();
1587 ::Error(
"AliAnalysisTaskSEDmesonsFilterCJ::CheckOrigin",
"Could not retrieve mother particle %d!", mother);
1610 if (!stack)
return -1;
1612 TParticle*
part = stack->Particle(ipart);
1613 if (!part)
return -1;
1615 Int_t pdgGranma = 0;
1616 Int_t mother = part->GetFirstMother();
1618 Int_t abspdgGranma = 0;
1620 Bool_t isQuarkFound = kFALSE;
1622 while (mother >= 0) {
1624 TParticle* mcGranma = stack->Particle(mother);
1625 if (mcGranma != 0) {
1626 pdgGranma = mcGranma->GetPdgCode();
1627 abspdgGranma = TMath::Abs(pdgGranma);
1628 if ((abspdgGranma > 500 && abspdgGranma < 600) || (abspdgGranma > 5000 && abspdgGranma < 6000)) {
1632 if (abspdgGranma == 4 || abspdgGranma == 5) isQuarkFound = kTRUE;
1633 mother = mcGranma->GetFirstMother();
1636 ::Error(
"AliAnalysisTaskSEDmesonsFilterCJ::CheckOrigin",
"Could not retrieve mother particle %d!", mother);
1659 if (!part)
return -1;
1660 if (!mcArray)
return -1;
1664 Int_t absPdgPart = TMath::Abs(part->GetPdgCode());
1666 if (part->GetNDaughters() == 2) {
1668 AliAODMCParticle* d1 =
static_cast<AliAODMCParticle*
>(mcArray->At(part->GetDaughter(0)));
1669 AliAODMCParticle* d2 =
static_cast<AliAODMCParticle*
>(mcArray->At(part->GetDaughter(1)));
1675 Int_t absPdg1 = TMath::Abs(d1->GetPdgCode());
1676 Int_t absPdg2 = TMath::Abs(d2->GetPdgCode());
1678 if (absPdgPart == 421) {
1680 if ((absPdg1 == 211 && absPdg2 == 321) ||
1681 (absPdg1 == 321 && absPdg2 == 211)) {
1686 if (absPdgPart == 413) {
1688 if (absPdg1 == 421 && absPdg2 == 211) {
1695 if (absPdg1 == 211 && absPdg2 == 421) {
1712 if (!stack)
return -1;
1714 TParticle*
part = stack->Particle(ipart);
1716 if (!part)
return -1;
1720 if (part->GetNDaughters() == 2) {
1722 Int_t id1 = part->GetDaughter(0);
1723 Int_t id2 = part->GetDaughter(1);
1725 TParticle* d1 = stack->Particle(id1);
1726 TParticle* d2 = stack->Particle(id2);
1732 Int_t absPdg1 = TMath::Abs(d1->GetPdgCode());
1733 Int_t absPdg2 = TMath::Abs(d2->GetPdgCode());
1736 if (part->GetPdgCode() == 421) {
1738 if ((absPdg1 == 211 && absPdg2 == 321) ||
1739 (absPdg1 == 321 && absPdg2 == 211)) {
1744 if (part->GetPdgCode() == 413) {
1746 if (absPdg1 == 421 && absPdg2 == 211) {
1753 if (absPdg1 == 211 && absPdg2 == 421) {
1772 Int_t lab=TMath::Abs(track->GetLabel());
1777 while(nameGen.IsWhitespace()){
1778 AliAODMCParticle *mcpart= (AliAODMCParticle*)arrayMC->At(lab);
1780 printf(
"AliAnalysisTaskMultCheck::IsTrackInjected - BREAK: No valid AliAODMCParticle at label %i\n",lab);
1783 Int_t mother = mcpart->GetMother();
1785 printf(
"AliAnalysisTaskMultCheck::IsTrackInjected - BREAK: Reached primary particle without valid mother\n");
1805 if(nameGen.IsWhitespace() || nameGen.Contains(
"ijing"))
return kFALSE;
1816 Int_t lab=TMath::Abs(track->GetLabel());
1821 while(nameGen.IsWhitespace()){
1822 AliAODMCParticle *mcpart= (AliAODMCParticle*)arrayMC->At(lab);
1824 printf(
"AliAnalysisTaskMultCheck::IsTrackInjected - BREAK: No valid AliAODMCParticle at label %i\n",lab);
1827 Int_t mother = mcpart->GetMother();
1829 printf(
"AliAnalysisTaskMultCheck::IsTrackInjected - BREAK: Reached primary particle without valid mother\n");
1849 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)
TString part
use mixed event to constrain combinatorial background
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...