33 #include <TClonesArray.h>
34 #include <TDatabasePDG.h>
35 #include <TLorentzVector.h>
38 #include "AliAnalysisManager.h"
39 #include "AliAnalysisTaskSE.h"
42 #include "AliAODEvent.h"
43 #include "AliAODHandler.h"
44 #include "AliAODMCHeader.h"
45 #include "AliAODMCParticle.h"
48 #include "AliESDtrack.h"
49 #include "AliESDVertex.h"
51 #include "AliNeutralTrackParam.h"
54 #include "AliVertexerTracks.h"
55 #include "AliVTrack.h"
79 , fHisPidTPCKaonVsPt(0)
80 , fHisPidTOFKaonVsPt(0)
81 , fHisPidTPCTOFKaon(0)
82 , fHisPidTPCTOFKaonSel(0)
83 , fHisPidTPCKaonVsPtSel(0)
84 , fHisPidTOFKaonVsPtSel(0)
89 , fUseSelectionBit(kFALSE)
97 for (
Int_t ihis=0; ihis<3; ihis++) {
102 for (
Int_t ihis=0; ihis<5; ihis++) {
143 , fAnalysisCuts(cuts)
153 , fHisPidTPCKaonVsPt(0)
154 , fHisPidTOFKaonVsPt(0)
155 , fHisPidTPCTOFKaon(0)
156 , fHisPidTPCTOFKaonSel(0)
157 , fHisPidTPCKaonVsPtSel(0)
158 , fHisPidTOFKaonVsPtSel(0)
161 , fMassBinSize(0.002)
163 , fUseSelectionBit(kFALSE)
164 , fFillNtuple(fillNtuple)
171 for (
Int_t ihis=0; ihis<3; ihis++) {
176 for (
Int_t ihis=0; ihis<5;ihis++) {
211 DefineOutput(1, TList::Class());
214 DefineOutput(2, AliNormalizationCounter::Class());
217 DefineOutput(3, TList::Class());
221 DefineOutput(4, TList::Class());
224 DefineOutput(5, TList::Class());
228 DefineOutput(6, TList::Class());
232 DefineOutput(4, TNtuple::Class());
266 AliDebug(1,
"AliAnalysisTaskSEDstoK0sK::Init()");
273 listCuts->SetName(GetOutputSlot(1)->GetContainer()->GetName());
274 PostData(1, listCuts);
289 AliDebug(1,
"AliAnalysisTaskSEDstoK0sK::UserCreateOutputObjects()");
314 fOutputSele->SetName(GetOutputSlot(3)->GetContainer()->GetName());
317 fHisNEvents =
new TH1F(
"fHisNEvents",
";;Entries", 21, 0, 21);
318 fHisNEvents->GetXaxis()->SetBinLabel(1,
"nEvents Read");
319 fHisNEvents->GetXaxis()->SetBinLabel(2,
"nEvents Matched dAOD");
320 fHisNEvents->GetXaxis()->SetBinLabel(3,
"nEvents Mismatched dAOD");
321 fHisNEvents->GetXaxis()->SetBinLabel(4,
"Analysed events");
322 fHisNEvents->GetXaxis()->SetBinLabel(5,
"Rejection: Trigger");
323 fHisNEvents->GetXaxis()->SetBinLabel(6,
"Rejection: Vertex reco");
324 fHisNEvents->GetXaxis()->SetBinLabel(7,
"Rejection: Pileup");
325 fHisNEvents->GetXaxis()->SetBinLabel(8,
"Rejection: Centrality");
326 fHisNEvents->GetXaxis()->SetBinLabel(9,
"Rejection: VtxZ fiducial acc.");
327 fHisNEvents->GetXaxis()->SetBinLabel(10,
"Rejection: Physics Selection");
328 fHisNEvents->GetXaxis()->SetBinLabel(11,
"Selected events");
329 fHisNEvents->GetXaxis()->SetBinLabel(12,
"Read candidates");
330 fHisNEvents->GetXaxis()->SetBinLabel(13,
"FillRecoCasc fails");
331 fHisNEvents->GetXaxis()->SetBinLabel(14,
"Offline SV reco. fails");
332 fHisNEvents->GetXaxis()->SetBinLabel(15,
"Cand with sec. vertex");
333 fHisNEvents->GetXaxis()->SetBinLabel(16,
"In fiducial acceptance");
334 fHisNEvents->GetXaxis()->SetBinLabel(17,
"Selected Tracks");
335 fHisNEvents->GetXaxis()->SetBinLabel(18,
"Selected Candidates");
336 fHisNEvents->GetXaxis()->SetBinLabel(19,
"Selected PID");
337 fHisNEvents->GetXaxis()->SetBinLabel(20,
"Selected true D^{+}_{s}");
338 fHisNEvents->GetXaxis()->SetBinLabel(21,
"Selected true D^{+}");
342 fHisCentrality[0] =
new TH1F(
"fHisCentrality_all",
"; Centrality; Entries", 1000, 0., 100.);
356 fHisCentralityVsMult[0] =
new TH2F(
"fHisCentralityVsMult_all",
"; Track multiplicities; Centrality; Entries", 100, 0., 10000., 40, 0., 100.);
370 fHisRapidity =
new TH2F(
"fHisRapidity_pt",
"; #it{p}_{T}(D^{+}_{s}) (GeV/#it{c}); #it{y}(D^{+}_{s}); Entries", 40, 0., 20., 80, -2., 2.);
371 fHisRapidity->SetTitle(
"Production cuts + SV reconstruction");
380 fHisPidTPCKaonVsPt =
new TH2F(
"fHisPidTPCKaonVsPt",
"; #it{p}_{T}(D^{+}_{s}) (GeV/#it{c});; Entries", fNPtBins, ptBinsRange, 200, -10., 10.);
402 fHisPidTPCTOFKaon =
new TH2F(
"fHisPidTPCTOFKaon",
"; n#it{#sigma}_{TPC}^{K}; n#it{#sigma}_{TOF}^{K}; Entries", 200, -10., 10., 200, -10., 10.);
421 fOutputCand->SetName(GetOutputSlot(4)->GetContainer()->GetName());
425 fOutputPID->SetName(GetOutputSlot(5)->GetContainer()->GetName());
430 fOutputMC->SetName(GetOutputSlot(6)->GetContainer()->GetName());
435 Float_t massDs = TDatabasePDG::Instance()->GetParticle(431)->Mass();
436 Float_t massDplus = TDatabasePDG::Instance()->GetParticle(411)->Mass();
439 if (nBinsMass%2==1) nBinsMass++;
446 TString titleHisto(
""), nameHisto(
"");
447 TString suffixType[5] = {
"kCan",
"kPid",
"mcSig",
"mcBackg",
"mcDplusRefl" };
448 TString titleType[5] = {
"kCandidate",
"kCandidate + kPID",
"MC Signal",
"MC Background",
"MC D^{+} reflection" };
452 for (
Int_t itype=0; itype<5; itype++) {
455 if (itype>=2 && !
fReadMC)
break;
458 nameHisto = Form(
"fHisInvMassDs_%s", suffixType[itype].
Data());
459 titleHisto = Form(
"%s; #it{p}_{T}(D^{+}_{s}) (GeV/#it{c}); M_{inv}(K^{0}_{S}K^{#pm}); Entries", titleType[itype].
Data());
462 nameHisto = Form(
"fHisInvMassDplus_%s", suffixType[itype].
Data());
463 titleHisto = Form(
"%s; #it{p}_{T}(D^{+}_{s}) (GeV/#it{c}); M_{inv}(K^{0}_{S}#pi^{#pm}); Entries", titleType[itype].
Data());
466 nameHisto = Form(
"fHisInvMassK0s_%s", suffixType[itype].
Data());
467 titleHisto = Form(
"%s; #it{p}_{T}(D^{+}_{s}) (GeV/#it{c}); M_{inv}(#pi^{+},#pi^{-}); Entries", titleType[itype].
Data());
470 nameHisto = Form(
"fHisPtK0s_%s", suffixType[itype].
Data());
471 titleHisto = Form(
"%s; #it{p}_{T}(D^{+}_{s}) (GeV/#it{c}); #it{p}_{T}(K^{0}_{S}) (GeV/#it{c}); Entries", titleType[itype].
Data());
472 fHisPtK0s[itype] =
new TH2F(nameHisto.Data(), titleHisto.Data(),
fNPtBins, ptBinsRange, 160, 0., 40.);
474 nameHisto = Form(
"fHisPtBachelor_%s", suffixType[itype].
Data());
475 titleHisto = Form(
"%s; #it{p}_{T}(D^{+}_{s}) (GeV/#it{c}); #it{p}_{T}(K^{+}) (GeV/#it{c}); Entries", titleType[itype].
Data());
478 nameHisto = Form(
"fHisImpParK0s_%s", suffixType[itype].
Data());
479 titleHisto = Form(
"%s; #it{p}_{T}(D^{+}_{s}) (GeV/#it{c}); #it{d_{0}}(K^{0}_{S}) (cm); Entries", titleType[itype].
Data());
482 nameHisto = Form(
"fHisImpParBach_%s", suffixType[itype].
Data());
483 titleHisto = Form(
"%s; #it{p}_{T}(D^{+}_{s}) (GeV/#it{c}); #it{d_{0}}(K^{+}) (cm); Entries", titleType[itype].
Data());
486 nameHisto = Form(
"fHisCTauK0s_%s", suffixType[itype].
Data());
487 titleHisto = Form(
"%s; #it{p}_{T}(D^{+}_{s}) (GeV/#it{c}); #it{c#times#tau}(K^{0}_{S}); Entries", titleType[itype].
Data());
490 nameHisto = Form(
"fHisCosPointingDs_%s", suffixType[itype].
Data());
491 titleHisto = Form(
"%s; #it{p}_{T}(D^{+}_{s}) (GeV/#it{c}); cos(#it{#theta_{p}})(D_{s}^{+}); Entries", titleType[itype].
Data());
494 nameHisto = Form(
"fHisCosPointingXYDs_%s", suffixType[itype].
Data());
495 titleHisto = Form(
"%s; #it{p}_{T}(D^{+}_{s}) (GeV/#it{c}); cos(#it{#theta_{p}^{xy}})(D_{s}^{+}); Entries", titleType[itype].
Data());
498 nameHisto = Form(
"fHisCosThetaStarK0s_%s", suffixType[itype].
Data());
499 titleHisto = Form(
"%s; #it{p}_{T}(D^{+}_{s}) (GeV/#it{c}); cos(#it{#theta^{*}})(K_{S}^{0}); Entries", titleType[itype].
Data());
502 nameHisto = Form(
"fHisCosThetaStarBach_%s", suffixType[itype].
Data());
503 titleHisto = Form(
"%s; #it{p}_{T}(D^{+}_{s}) (GeV/#it{c}); cos(#it{#theta^{*}})(K^{+}); Entries", titleType[itype].
Data());
506 nameHisto = Form(
"fHisDCAK0sBach_%s", suffixType[itype].
Data());
507 titleHisto = Form(
"%s; #it{p}_{T}(D^{+}_{s}) (GeV/#it{c}); DCA(K^{0}_{S},K^{+}) (cm); Entries", titleType[itype].
Data());
510 nameHisto = Form(
"fHisDecayLxyDs_%s", suffixType[itype].
Data());
511 titleHisto = Form(
"%s; #it{p}_{T}(D^{+}_{s}) (GeV/#it{c}); #it{L_{xy}}(D^{+}_{s}) (cm); Entries", titleType[itype].
Data());
514 nameHisto = Form(
"fHisNormDecayLxyDs_%s", suffixType[itype].
Data());
515 titleHisto = Form(
"%s; #it{p}_{T}(D^{+}_{s}) (GeV/#it{c}); #it{L_{xy}}/#it{#sigma_{xy}}(D^{+}_{s}) (cm); Entries", titleType[itype].
Data());
519 TList *theOutput = 0;
550 listVar.Append(
":K0sPt");
551 listVar.Append(
":K0sRxy");
552 listVar.Append(
":K0sCTau");
553 listVar.Append(
":K0sCosPA");
554 listVar.Append(
":K0sd0");
555 listVar.Append(
":K0sd0DauPos");
556 listVar.Append(
":K0sd0DauNeg");
557 listVar.Append(
":K0sDCAdau");
558 listVar.Append(
":K0sPtDauPos");
559 listVar.Append(
":K0sPtDauNeg");
560 listVar.Append(
":BachPt");
561 listVar.Append(
":Bachd0");
562 listVar.Append(
":BachNsigmaTPCpion");
563 listVar.Append(
":BachNsigmaTPCkaon");
564 listVar.Append(
":BachNsigmaTPCproton");
565 listVar.Append(
":BachNsigmaTOFpion");
566 listVar.Append(
":BachNsigmaTOFkaon");
567 listVar.Append(
":BachNsigmaTOFproton");
568 listVar.Append(
":CanInvMassDs");
569 listVar.Append(
":CanInvMassDplus");
570 listVar.Append(
":CanPt");
571 listVar.Append(
":CanDCAProngToProng");
572 listVar.Append(
":CanCosThetaStarK0s");
573 listVar.Append(
":CanCosThetaStarBach");
574 listVar.Append(
":CanCosPA");
575 listVar.Append(
":CanCosPAxy");
576 listVar.Append(
":CanDLengthXY");
577 listVar.Append(
":CanNormDLengthXY");
578 listVar.Append(
":CanDLength3D");
579 listVar.Append(
":CanNormDLength3D");
580 listVar.Append(
":CanSigmaVtx");
581 listVar.Append(
":CanNormTopoBach");
582 listVar.Append(
":CanNormTopoK0s");
584 listVar.Append(
":mcTruth");
590 fOutputNtuple =
new TNtuple(GetOutputSlot(4)->GetContainer()->GetName(),
"TNtuple for reconstructed candidates on real data", listVar.Data());
620 AliDebug(1,
"AliAnalysisTaskSEDstoK0sK::UserExec()");
635 if (matchingAODdeltaAODlevel<0 || (matchingAODdeltaAODlevel==0 &&
fAODProtection==1)) {
644 TClonesArray *arrayCascadesHF = 0;
645 if(!aod && AODEvent() && IsStandardAOD()) {
651 AliAODHandler *aodHandler = (AliAODHandler*) ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
652 if (aodHandler->GetExtensions()) {
653 AliAODExtension *ext = (AliAODExtension*) aodHandler->GetExtensions()->FindObject(
"AliAOD.VertexingHF.root");
655 arrayCascadesHF = (TClonesArray*) aodFromExt->GetList()->FindObject(
"CascadesHF");
658 arrayCascadesHF = (TClonesArray*) aod->GetList()->FindObject(
"CascadesHF");
661 if (!aod || !arrayCascadesHF) {
662 AliWarning(
"AliAnalysisTaskSEDstoK0sK::UserExec: CascadesHF branch not found!");
668 TClonesArray *mcArray = 0;
669 AliAODMCHeader *mcHeader = 0;
672 mcArray = (TClonesArray*) aod->GetList()->FindObject(AliAODMCParticle::StdBranchName());
674 AliWarning(
"AliAnalysisTaskSEDstoK0sK::UserExec: MC particles branch not found!");
677 mcHeader = (AliAODMCHeader*) aod->GetList()->FindObject(AliAODMCHeader::StdBranchName());
679 AliWarning(
"AliAnalysisTaskSEDstoK0sK::UserExec: MC header branch not found!");
694 if (!aod->GetPrimaryVertex() || TMath::Abs(aod->GetMagneticField())<0.001)
return;
700 Float_t nTracks = aod->GetNumberOfTracks();
730 Int_t nCascades = arrayCascadesHF->GetEntriesFast();
731 AliDebug(1, Form(
"AliAnalysisTaskSEDstoK0sK::UserExec: %d Cascades found for this event!", nCascades));
747 for (
Int_t iCasc=0; iCasc<nCascades; iCasc++)
849 AliDebug(1,
"AliAnalysisTaskSEDstoK0sK::Terminate()");
855 AliWarning(
"ERROR: fOutputSele not available");
865 AliWarning(
"ERROR: fOutputCand not available");
872 AliWarning(
"ERROR: fOutputPID not available");
880 AliWarning(
"ERROR: fOutputMC not available");
890 AliWarning(
"ERROR: fOutputNtuple not available");
919 AliWarning(Form(
"Maximum number of Pt bins reached: %d",
kMaxPtBins));
930 AliInfo(Form(
"Number of Pt bins for the analysis: %d",
fNPtBins));
960 AliWarning(Form(
"%d cuts are set for %d variables in the tuple: default initialisation", nCuts,
kNTupleVars));
989 AliDebug(1,
"AliAnalysisTaskSEDstoK0sK::FillHistogramsVar()");
998 Bool_t okMCsignal = kFALSE;
999 Bool_t okMCbackg = kFALSE;
1000 Bool_t okMCreflec = kFALSE;
1003 if (!mcArray)
return;
1006 AliDebug(2,
"This candidate matches a MC signal of Ds+ -> K0S + K+");
1009 AliDebug(2,
"This candidate matches a MC signal of D+ -> K0S + pi+");
1012 AliDebug(2,
"This candidate is a MC background");
1028 for (
Int_t index=0; index<5; index++) {
1032 }
else if (index==1) {
1034 }
else if (index==2) {
1035 if (!okMCsignal)
continue;
1036 }
else if (index==3) {
1037 if (!okMCbackg)
continue;
1038 }
else if (index==4) {
1039 if (!okMCreflec)
continue;
1044 fHisInvMassK0s[index] ->Fill( ptCand, dynamic_cast<AliAODv0*>(dCan->
Getv0())->MassK0Short());
1045 fHisPtK0s[index] ->Fill( ptCand, dCan->PtProng(1) );
1073 AliDebug(2,
"AliAnalysisTaskSEDstoK0sK::FillHistogramsPID()");
1128 AliDebug(2,
"AliAnalysisTaskSEDstoK0sK::FillTheTree()");
1133 AliAODv0 *v0 = (AliAODv0*) dCan->
Getv0();
1163 Double_t diffIP[2] = {0.}, errdiffIP[2] = {1.};
1170 Float_t variableNtuple[nVarTuple];
1171 variableNtuple[ 0] = v0->MassK0Short();
1172 variableNtuple[ 1] = dCan->PtProng(1);
1173 variableNtuple[ 2] = v0->RadiusV0();
1176 variableNtuple[ 5] = dCan->Getd0Prong(1);
1177 variableNtuple[ 6] = v0->DcaPosToPrimVertex();
1178 variableNtuple[ 7] = v0->DcaNegToPrimVertex();
1179 variableNtuple[ 8] = v0->DcaV0Daughters();
1180 variableNtuple[ 9] = v0->PtProng(0);
1181 variableNtuple[10] = v0->PtProng(1);
1182 variableNtuple[11] = dCan->PtProng(0);
1183 variableNtuple[12] = dCan->Getd0Prong(0);
1184 variableNtuple[13] = nSigmaTPCpion;
1185 variableNtuple[14] = nSigmaTPCkaon;
1186 variableNtuple[15] = nSigmaTPCproton;
1187 variableNtuple[16] = nSigmaTOFpion;
1188 variableNtuple[17] = nSigmaTOFkaon;
1189 variableNtuple[18] = nSigmaTOFproton;
1192 variableNtuple[21] = dCan->Pt();
1193 variableNtuple[22] = dCan->GetDCA();
1194 variableNtuple[23] = dCan->CosThetaStar(1, 431, 321, 310);
1195 variableNtuple[24] = dCan->CosThetaStar(0, 431, 321, 310);
1203 variableNtuple[32] = diffIP[0]/errdiffIP[0];
1204 variableNtuple[33] = diffIP[1]/errdiffIP[1];
1210 AliDebug(2,
"One of the tuple variable does not pass the selection cut");
1223 variableNtuple[34] = okMCsignal ? 10
1227 if (!okMCsignal && !okMCreflec) {
1228 AliDebug(2,
"The candidate is a combinatorial background, check if the V0 is a true K0S");
1229 Int_t pdgDgK0stoPions[2] = {211, 211};
1230 if (v0->MatchToMC(310, mcArray, 2, pdgDgK0stoPions)>=0) variableNtuple[29]++;
1258 AliESDtrack *esdB =
new AliESDtrack(dCan->
GetBachelor());
1260 AliNeutralTrackParam *trackV0 = 0;
1262 const AliVTrack *trackVV0 =
dynamic_cast<const AliVTrack*
>(dCan->
Getv0());
1264 trackV0 =
new AliNeutralTrackParam(trackVV0);
1268 if (!esdB || !trackV0) {
1269 if (esdB)
delete esdB;
1270 if (trackV0)
delete trackV0;
1276 AliVertexerTracks vertexer(aod->GetMagneticField());
1279 AliAODVertex *aodV = (AliAODVertex*) aod->GetPrimaryVertex();
1281 aodV->GetCovarianceMatrix(cov);
1283 Int_t nContr = aodV->GetNContributors();
1285 AliESDVertex vprim(pos, cov, chi2, nContr);
1286 vertexer.SetVtxStart(&vprim);
1291 twoTrackArray.AddAt(esdB, 0);
1292 twoTrackArray.AddAt(trackV0, 1);
1296 AliESDVertex *secVert = vertexer.VertexForSelectedESDTracks(&twoTrackArray, kFALSE, kTRUE, kFALSE);
1297 Double_t disp = secVert->GetDispersion();
1300 twoTrackArray.Delete();
1319 AliAODv0 *v0 =
dynamic_cast<AliAODv0*
> (dCan->
Getv0());
1320 AliAODTrack *bach =
dynamic_cast<AliAODTrack*
> (dCan->
GetBachelor());
1327 Double_t eCasc = dCan->EProng(0, 321) + dCan->EProng(1, 310);
1328 Double_t pxCasc = dCan->PxProng(0) + dCan->PxProng(1);
1329 Double_t pyCasc = dCan->PyProng(0) + dCan->PyProng(1);
1330 Double_t pzCasc = dCan->PzProng(0) + dCan->PzProng(1);
1337 TVector3 vecK0sCascFrame;
1338 TLorentzVector vecK0s(dCan->PxProng(1), dCan->PyProng(1), dCan->PzProng(1), dCan->EProng(1, 310));
1339 vecK0s.Boost(-bxCasc, -byCasc, -bzCasc);
1340 vecK0s.Boost(vecK0sCascFrame);
1341 vecK0sCascFrame = vecK0s.BoostVector();
1343 TVector3 vecBachCascFrame;
1344 TLorentzVector vecBach(dCan->PxProng(0), dCan->PyProng(0), dCan->PzProng(0), dCan->EProng(0, 321));
1345 vecBach.Boost(-bxCasc, -byCasc, -bzCasc);
1346 vecBach.Boost(vecBachCascFrame);
1347 vecBachCascFrame = vecBach.BoostVector();
1351 Double_t scalProdBachK0s = vecBachCascFrame.Dot(vecK0sCascFrame);
1352 Double_t normBach = vecBachCascFrame.Mag();
1353 Double_t normK0s = vecK0sCascFrame.Mag();
1354 Double_t cosAngleCascFrame = scalProdBachK0s/(normBach*normK0s);
1357 return cosAngleCascFrame;
Bool_t fReadMC
Bin size of invariant mass histograms (GeV)
Double_t NormalizedDecayLengthXY() const
TList * fOutputCand
! Candidate level histograms: TList sent to output slot #4
Double_t NormalizedDecayLength() const
TH2F * fHisPidTOFKaonVsPtSel
!
Bool_t fUseSelectionBit
Flag for accessing MC.
virtual ~AliAnalysisTaskSEDstoK0sK()
virtual Bool_t IsInFiducialAcceptance(Double_t pt, Double_t y) const
AliRDHFCutsDstoK0sK * fAnalysisCuts
TH2F * fHisDecayLxyDs[5]
! (kCandidate, kPID, mcSignal, mcBackground, mcReflection)
AliAnalysisTaskSEDstoK0sK()
void Getd0MeasMinusExpProng(Int_t ip, Double_t magf, Double_t &d0diff, Double_t &errd0diff) const
Double_t InvMassDstoK0sK() const
Int_t GetnSigmaTOF(AliAODTrack *track, Int_t species, Double_t &sigma) const
TH2F * fHisPidTPCTOFKaonSel
!
Int_t fAODProtection
Maximum cut values for tuple variables.
Double_t Ct(UInt_t pdg) const
Float_t fMassRange
Limits of Pt bins.
Int_t GetnSigmaTPC(AliAODTrack *track, Int_t species, Double_t &sigma) const
Bool_t CheckTOFPIDStatus(AliAODTrack *track) const
virtual void UserCreateOutputObjects()
Bool_t CheckTPCPIDStatus(AliAODTrack *track) const
Float_t fMassBinSize
Size range of invariant mass histograms.
static Int_t CheckMatchingAODdeltaAODevents()
Bool_t fFillNtuple
Flag for using selection bit (to select Ds flags)
Float_t ComputeSigmaVert(const AliAODEvent *aod, AliAODRecoCascadeHF *dCan) const
AliNormalizationCounter * fCounter
Cut object for Analysis on output slot #1.
Int_t GetWhyRejection() const
Double_t CosPointingAngleXY() const
TH2F * fHisCosPointingXYDs[5]
! (kCandidate, kPID, mcSignal, mcBackground, mcReflection)
TH2F * fHisInvMassK0s[5]
! (kCandidate, kPID, mcSignal, mcBackground, mcReflection)
TList * fOutputMC
! PID level histograms: TList sent to output slot #5
TNtuple * fOutputNtuple
! TNtuple for candidates on data sent to output slot #4
Float_t fCutsMinTupleVars[kNTupleVars]
Flag for using THnSparse.
Bool_t FillRecoCasc(AliVEvent *event, AliAODRecoCascadeHF *rc, Bool_t isDStar, Bool_t recoSecVtx=kFALSE)
AliAODPidHF * GetPidHF() const
virtual void UserExec(Option_t *)
void FillHistogramsPID(AliAODRecoCascadeHF *dCan, AliRDHFCuts::ESelLevel selFlag, TClonesArray *mcArray=0)
Float_t fCutsMaxTupleVars[kNTupleVars]
Minimum cut values for tuple variables.
virtual void Terminate(Option_t *)
TH2F * fHisPidTPCKaonVsPtSel
!
TH2F * fHisCosThetaStarBach[5]
! (kCandidate, kPID, mcSignal, mcBackground, mcReflection)
Int_t GetIsFilled() const
Class for cuts on AOD reconstructed Ds->K0S+K.
void SetCutsTupleVariables(Int_t nCuts, Float_t *minCuts, Float_t *maxCuts)
AliAnalysisTaskSE to produce Ds->K0S+K invariant mass spectra and THnSparse for cut optimisations...
TH2F * fHisPidTPCTOFKaon
!
AliAODTrack * GetBachelor() const
void FillTheTree(AliAODRecoCascadeHF *dCan, AliAODEvent *aod, TClonesArray *mcArray)
Int_t MatchToMCDplustoK0spiSignal(AliAODRecoCascadeHF *dCan, TClonesArray *mcArray)
AliAODVertex * GetOwnPrimaryVtx() const
TH2F * fHisPidTPCKaonVsPt
!
Float_t GetCentrality(AliAODEvent *aodEvent)
void SetPtBins(Int_t nBins, Float_t *limitsPt)
TH2F * fHisInvMassDplus[5]
! (kCandidate, kPID, mcSignal, mcBackground, mcReflection)
Double_t CosV0PointingAngle() const
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)
Float_t CosThetaK0sBachRFrame(AliAODRecoCascadeHF *dCan) const
TH2F * fHisPidTOFKaonVsPt
!
Double_t DecayLengthXY() const
ClassImp(AliAnalysisTaskDeltaPt) AliAnalysisTaskDeltaPt
TH2F * fHisCosThetaStarK0s[5]
! (kCandidate, kPID, mcSignal, mcBackground, mcReflection)
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel)
Bool_t IsEventSelected(AliVEvent *event)
TH2F * fHisPtK0s[5]
! (kCandidate, kPID, mcSignal, mcBackground, mcReflection)
TH2F * fHisRapiditySel
! Rapidity selected (kCandidate) candidates
void StoreEvent(AliVEvent *, AliRDHFCuts *, Bool_t mc=kFALSE, Int_t multiplicity=-9999, Double_t spherocity=-99.)
TH1F * fHisCentrality[3]
! Centrality: all, selected and rejected
TList * fOutputSele
! Various histograms of selected events: TList sent to output slot #3
Float_t * GetPtBinLimits() const
Bool_t CheckCascadeFlags(AliRDHFCuts::ESele selFlag=AliRDHFCuts::kLctoV0Cuts)
TH2F * fHisDCAK0sBach[5]
! (kCandidate, kPID, mcSignal, mcBackground, mcReflection)
TH1F * fHisNEvents
! Counter: events and candidates
TH2F * fHisImpParBach[5]
! (kCandidate, kPID, mcSignal, mcBackground, mcReflection)
Float_t fPtLimits[kMaxPtBins+1]
Number of Pt bins.
TList * fOutputPID
! PID level histograms: TList sent to output slot #5
Bool_t GetIsUsePID() const
void FillHistogramsVar(AliAODRecoCascadeHF *dCan, AliRDHFCuts::ESelLevel selFlag, TClonesArray *mcArray=0)
TH2F * fHisInvMassDs[5]
! (kCandidate, kPID, mcSignal, mcBackground, mcReflection)
Double_t CosPointingAngle() const
Bool_t RecoSecondaryVertexForCascades(AliVEvent *event, AliAODRecoCascadeHF *rc)
TH2F * fHisImpParK0s[5]
! (kCandidate, kPID, mcSignal, mcBackground, mcReflection)
TH2F * fHisCTauK0s[5]
! (kCandidate, kPID, mcSignal, mcBackground, mcReflection)
TH2F * fHisCosPointingDs[5]
! (kCandidate, kPID, mcSignal, mcBackground, mcReflection)
Int_t GetUseCentrality() const
TH2F * fHisPtBachelor[5]
! (kCandidate, kPID, mcSignal, mcBackground, mcReflection)
Double_t DecayLength() const
Double_t InvMassDplustoK0spi() const
TH2F * fHisNormDecayLxyDs[5]
! (kCandidate, kPID, mcSignal, mcBackground, mcReflection)
TH2F * fHisCentralityVsMult[3]
! Centrality VS Multiplicity: all, selected and rejected
Int_t MatchToMCDstoK0sKSignal(AliAODRecoCascadeHF *dCan, TClonesArray *mcArray)
TH2F * fHisRapidity
! Rapidity all candidates