31 #include <TDatabasePDG.h> 32 #include <Riostream.h> 35 #include "AliAODTrack.h" 36 #include "AliESDtrack.h" 37 #include "AliAODPid.h" 38 #include "AliTPCPIDResponse.h" 39 #include "AliAODVertex.h" 40 #include "AliESDVertex.h" 62 fnVarsD0forD0ptbin(0),
63 fnPtBinsD0forD0ptbin(1),
64 fGlobalIndexD0forD0ptbin(0),
65 fCutsRDD0forD0ptbin(0x0),
66 fnPtBinLimitsD0forD0ptbin(1),
67 fPtBinLimitsD0forD0ptbin(0x0),
68 fIsUpperCutD0forD0ptbin(0x0),
69 fIsCutUsedD0forD0ptbin(0x0),
70 fVarNamesD0forD0ptbin(0x0),
72 fMinITSNclsD0FirstDaughter(0),
73 fMinTPCNclsD0FirstDaughter(0),
74 fUseITSRefitD0FirstDaughter(0),
75 fUseTPCRefitD0FirstDaughter(0),
76 fUseFilterBitD0FirstDaughter(0),
77 fFilterBitD0FirstDaughter(0),
78 fMinPtD0FirstDaughter(0),
79 fMaxAbsEtaD0FirstDaughter(999.),
80 fHardSelectionArrayITSD0FirstDaughter(),
81 fSoftSelectionArrayITSD0FirstDaughter(),
82 fNSoftITSCutD0FirstDaughter(0),
84 fMinITSNclsD0SecondDaughter(0),
85 fMinTPCNclsD0SecondDaughter(0),
86 fUseITSRefitD0SecondDaughter(0),
87 fUseTPCRefitD0SecondDaughter(0),
88 fUseFilterBitD0SecondDaughter(0),
89 fFilterBitD0SecondDaughter(0),
90 fMinPtD0SecondDaughter(0),
91 fMaxAbsEtaD0SecondDaughter(999.),
92 fHardSelectionArrayITSD0SecondDaughter(),
93 fSoftSelectionArrayITSD0SecondDaughter(),
94 fNSoftITSCutD0SecondDaughter(0),
96 fMinITSNclsBPlusPion(0),
97 fMinTPCNclsBPlusPion(0),
98 fUseITSRefitBPlusPion(0),
99 fUseTPCRefitBPlusPion(0),
100 fUseFilterBitBPlusPion(0),
101 fFilterBitBPlusPion(0),
103 fMaxAbsEtaBPlusPion(999.),
104 fHardSelectionArrayITSBPlusPion(),
105 fSoftSelectionArrayITSBPlusPion(),
106 fNSoftITSCutBPlusPion(0),
108 fMind0D0FirstDaughter(0),
109 fMind0D0SecondDaughter(0),
113 fnVariablesForCutOptimization(0),
114 fnCutsForOptimization(0),
115 fGlobalIndexCutOptimization(0),
116 fCutsRDForCutOptimization(0x0),
117 fIsUpperCutForCutOptimization(0x0),
118 fCutIndexForCutOptimization(0x0),
119 fSigmaForCutOptimization(0x0)
126 const Int_t nvars = 68;
133 varNames[iterator++] =
"inv. mass width[GeV]";
134 varNames[iterator++] =
"delta mass width [GeV]";
135 varNames[iterator++] =
"pointing angle [Cos(theta)]";
136 varNames[iterator++] =
"dca [cm]";
137 varNames[iterator++] =
"Pt D0 [GeV/c]";
138 varNames[iterator++] =
"Pt first daughter [GeV/c]";
139 varNames[iterator++] =
"Pt second daughter [GeV/c]";
140 varNames[iterator++] =
"d0 D0 [cm]";
141 varNames[iterator++] =
"d0 first daughter [cm]";
142 varNames[iterator++] =
"d0 second daughter [cm]";
143 varNames[iterator++] =
"d0d0 [cm^2]";
144 varNames[iterator++] =
"d0d0 XY [cm^2]";
146 varNames[iterator++] =
"angle between both daughters";
147 varNames[iterator++] =
"angle mother with first daughter";
148 varNames[iterator++] =
"angle mother with second daughter";
149 varNames[iterator++] =
"cosThetaStar";
150 varNames[iterator++] =
"vertexDistance";
151 varNames[iterator++] =
"pseudoProperDecayTime";
152 varNames[iterator++] =
"DecayTime";
153 varNames[iterator++] =
"normalizedDecayTime";
154 varNames[iterator++] =
"normDecayLength";
155 varNames[iterator++] =
"topomatic first daughter";
156 varNames[iterator++] =
"topomatic second daughter";
157 varNames[iterator++] =
"topomatic max";
158 varNames[iterator++] =
"topomatic min";
160 varNames[iterator++] =
"pointing angle XY [Cos(theta)]";
161 varNames[iterator++] =
"vertex distance XY [cm]";
162 varNames[iterator++] =
"normDecayLength XY";
163 varNames[iterator++] =
"Chi2 per NDF vertex";
165 varNames[iterator++] =
"pointingAngleToBPlus";
166 varNames[iterator++] =
"d0MotherToBPlus";
167 varNames[iterator++] =
"d0FirstDaughterToBPlus";
168 varNames[iterator++] =
"d0SecondDaughterToBPlus";
169 varNames[iterator++] =
"impactProductToBPlus";
170 varNames[iterator++] =
"impactProductXYToBPlus";
171 varNames[iterator++] =
"normDecayLengthToBPlus";
172 varNames[iterator++] =
"pseudoProperDecayTimeToBPlus";
173 varNames[iterator++] =
"DecayTimeToBPlus";
174 varNames[iterator++] =
"normalizedDecayTimeToBPlus";
177 varNames[iterator++] =
"inv. mass width[GeV]";
178 varNames[iterator++] =
"delta mass width [GeV]";
179 varNames[iterator++] =
"pointing angle [Cos(theta)]";
180 varNames[iterator++] =
"dca [cm]";
181 varNames[iterator++] =
"Pt BPlus [GeV/c]";
182 varNames[iterator++] =
"Pt D0 [GeV/c]";
183 varNames[iterator++] =
"Pt Pion [GeV/c]";
184 varNames[iterator++] =
"d0 BPlus [cm]";
185 varNames[iterator++] =
"d0 D0 [cm]";
186 varNames[iterator++] =
"d0 Pion [cm]";
187 varNames[iterator++] =
"d0d0 [cm^2]";
188 varNames[iterator++] =
"d0d0 XY [cm^2]";
190 varNames[iterator++] =
"angle between both daughters";
191 varNames[iterator++] =
"angle mother with first daughter";
192 varNames[iterator++] =
"angle mother with second daughter";
193 varNames[iterator++] =
"cosThetaStar";
194 varNames[iterator++] =
"vertexDistance";
195 varNames[iterator++] =
"pseudoProperDecayTime";
196 varNames[iterator++] =
"DecayTime";
197 varNames[iterator++] =
"normalizedDecayTime";
198 varNames[iterator++] =
"normDecayLength";
199 varNames[iterator++] =
"topomatic first daughter";
200 varNames[iterator++] =
"topomatic second daughter";
201 varNames[iterator++] =
"topomatic max";
202 varNames[iterator++] =
"topomatic min";
204 varNames[iterator++] =
"pointing angle XY [Cos(theta)]";
205 varNames[iterator++] =
"vertex distance XY [cm]";
206 varNames[iterator++] =
"normDecayLength XY";
207 varNames[iterator++] =
"Chi2 per NDF vertex";
209 Bool_t isUpperCut[nvars] = {0};
213 Float_t limits[2] = {0, 999999999.};
221 const Int_t nvarsD0forD0ptbin = 29;
224 TString varNamesD0forD0ptbin[nvarsD0forD0ptbin];
228 varNamesD0forD0ptbin[iterator++] =
"inv. mass width[GeV]";
229 varNamesD0forD0ptbin[iterator++] =
"delta mass width [GeV]";
230 varNamesD0forD0ptbin[iterator++] =
"pointing angle [Cos(theta)]";
231 varNamesD0forD0ptbin[iterator++] =
"dca [cm]";
232 varNamesD0forD0ptbin[iterator++] =
"Pt D0 [GeV/c]";
233 varNamesD0forD0ptbin[iterator++] =
"Pt first daughter [GeV/c]";
234 varNamesD0forD0ptbin[iterator++] =
"Pt second daughter [GeV/c]";
235 varNamesD0forD0ptbin[iterator++] =
"d0 D0 [cm]";
236 varNamesD0forD0ptbin[iterator++] =
"d0 first daughter [cm]";
237 varNamesD0forD0ptbin[iterator++] =
"d0 second daughter [cm]";
238 varNamesD0forD0ptbin[iterator++] =
"d0d0 [cm^2]";
239 varNamesD0forD0ptbin[iterator++] =
"d0d0 XY [cm^2]";
241 varNamesD0forD0ptbin[iterator++] =
"angle between both daughters";
242 varNamesD0forD0ptbin[iterator++] =
"angle mother with first daughter";
243 varNamesD0forD0ptbin[iterator++] =
"angle mother with second daughter";
244 varNamesD0forD0ptbin[iterator++] =
"cosThetaStar";
245 varNamesD0forD0ptbin[iterator++] =
"vertexDistance";
246 varNamesD0forD0ptbin[iterator++] =
"pseudoProperDecayTime";
247 varNamesD0forD0ptbin[iterator++] =
"DecayTime";
248 varNamesD0forD0ptbin[iterator++] =
"normalizedDecayTime";
249 varNamesD0forD0ptbin[iterator++] =
"normDecayLength";
250 varNamesD0forD0ptbin[iterator++] =
"topomatic first daughter";
251 varNamesD0forD0ptbin[iterator++] =
"topomatic second daughter";
252 varNamesD0forD0ptbin[iterator++] =
"topomatic max";
253 varNamesD0forD0ptbin[iterator++] =
"topomatic min";
255 varNamesD0forD0ptbin[iterator++] =
"pointing angle XY [Cos(theta)]";
256 varNamesD0forD0ptbin[iterator++] =
"vertex distance XY [cm]";
257 varNamesD0forD0ptbin[iterator++] =
"normDecayLength XY";
258 varNamesD0forD0ptbin[iterator++] =
"Chi2 per NDF vertex";
260 Bool_t isUpperCutD0forD0ptbin[nvarsD0forD0ptbin] = {0};
264 Float_t limitsD0forD0ptbin[2] = {0, 999999999.};
456 if (&source ==
this)
return *
this;
612 cout <<
"Cut matrice not inizialized. Exit..." << endl;
617 if (!candidateBPlus) {
618 cout <<
"candidateBPlus null" << endl;
624 cout <<
"candidateD0 null" << endl;
628 AliAODTrack *candidatePion = (AliAODTrack*)candidateBPlus->GetDaughter(0);
629 if (!candidatePion) {
630 cout <<
"candidatePion null 1" << endl;
634 AliAODVertex * vertexBPlus = candidateBPlus->GetSecondaryVtx();
636 cout <<
"vertexBPlus null" << endl;
640 AliAODVertex * primaryVertex = aod->GetPrimaryVertex();
641 if (!primaryVertex) {
642 cout <<
"primaryVertex null" << endl;
646 Int_t returnvalue = 1;
647 Bool_t bPassedCut = kFALSE;
658 if (ptbin == -1)
return -1;
662 Double_t mD0PDG = TDatabasePDG::Instance()->GetParticle(421)->Mass();
663 Double_t mBPlusPDG = TDatabasePDG::Instance()->GetParticle(521)->Mass();
666 Double_t deltaPDG = mBPlusPDG - mD0PDG;
670 prongs[0] = 211; prongs[1] = 421;
671 Double_t invMassBPlus = candidateBPlus->InvMass(2, prongs);
672 Double_t invMassDifference = TMath::Abs(mBPlusPDG - invMassBPlus);
676 Double_t dcaMother = candidateBPlus->GetDCA();
677 Double_t ptMother = candidateBPlus->Pt();
678 Double_t momentumMother = candidateBPlus->P();
680 Double_t ptPion = candidatePion->Pt();
682 AliExternalTrackParam motherTrack;
683 motherTrack.CopyFromVTrack(candidateBPlus);
684 Double_t d0z0[2], covd0z0[3], d0[2];
685 motherTrack.PropagateToDCA(primaryVertex, bz, 100., d0z0, covd0z0);
687 Double_t d0Mother = TMath::Abs(d0[0]);
688 Double_t d0firstTrack = TMath::Abs(candidateBPlus->Getd0Prong(0));
689 Double_t d0secondTrack = TMath::Abs(candidateBPlus->Getd0Prong(1));
694 Double_t angleBetweenBothDaughters = (candidateD0->Px() * candidatePion->Px() + candidateD0->Py() * candidatePion->Py() + candidateD0->Pz() * candidatePion->Pz()) / (candidateD0->P() * candidatePion->P());
695 Double_t angleMotherFirstDaughter = (candidateBPlus->Px() * candidatePion->Px() + candidateBPlus->Py() * candidatePion->Py() + candidateBPlus->Pz() * candidatePion->Pz()) / (candidateBPlus->P() * candidatePion->P());
696 Double_t angleMotherSecondDaughter = (candidateBPlus->Px() * candidateD0->Px() + candidateBPlus->Py() * candidateD0->Py() + candidateBPlus->Pz() * candidateD0->Pz()) / (candidateBPlus->P() * candidateD0->P());
698 Double_t cosThetaStar = candidateBPlus->CosThetaStar(0, 521, 211, 421);
699 Double_t vertexDistance = vertexBPlus->DistanceToVertex(primaryVertex);
701 Double_t pdgMassMother = TDatabasePDG::Instance()->GetParticle(521)->Mass();
702 Double_t pseudoProperDecayLength = ((vertexBPlus->GetX() - primaryVertex->GetX()) * candidateBPlus->Px() / TMath::Abs(candidateBPlus->Pt())) + ((vertexBPlus->GetY() - primaryVertex->GetY()) * candidateBPlus->Py() / TMath::Abs(candidateBPlus->Pt()));
703 Double_t pseudoProperDecayTime = pseudoProperDecayLength * pdgMassMother / ptMother;
704 Double_t decayTime = vertexDistance / (299792458 * TMath::Sqrt(1 / ((pdgMassMother * pdgMassMother / (momentumMother * momentumMother)) + 1)));
706 Double_t phi = candidateBPlus->Phi();
707 Double_t theta = candidateBPlus->Theta();
709 candidateBPlus->GetCovarianceXYZPxPyPz(covMatrix);
716 Double_t errorMomentum = covMatrix[9] * cp * cp * ct * ct
717 + covMatrix[13] * 2.*cp * sp * ct * ct
718 + covMatrix[18] * 2.*cp * ct * st
719 + covMatrix[14] * sp * sp * ct * ct
720 + covMatrix[19] * 2.*sp * ct * st
721 + covMatrix[20] * st * st;
722 Double_t normalizedDecayTime = candidateBPlus->
NormalizedDecayLength() / (299792458 * TMath::Sqrt(1 / ((pdgMassMother * pdgMassMother * errorMomentum * errorMomentum / (momentumMother * momentumMother)) + 1)));
725 Double_t distanceXYToVertex = vertexBPlus->DistanceXYToVertex(primaryVertex);
727 Double_t chi2Vertex = vertexBPlus->GetChi2perNDF();
734 for (
Int_t ipr = 0; ipr < 2; ipr++)
739 if (errdiffIP > 0.) normdd0 = diffIP / errdiffIP;
740 if (ipr == 0) dd0pr1 = normdd0;
741 if (ipr == 1) dd0pr2 = normdd0;
743 if (TMath::Abs(dd0pr1) > TMath::Abs(dd0pr2)) {dd0max = dd0pr1; dd0min = dd0pr2;}
744 else {dd0max = dd0pr2; dd0min = dd0pr1;}
753 cutVariableValue = invMassDifference;
760 cutVariableValue = invMassDelta;
767 cutVariableValue = pointingAngle;
774 cutVariableValue = dcaMother;
781 cutVariableValue = ptMother;
788 cutVariableValue = ptD0;
795 cutVariableValue = ptPion;
802 cutVariableValue = d0Mother;
809 cutVariableValue = d0firstTrack;
816 cutVariableValue = d0secondTrack;
823 cutVariableValue = impactProduct;
830 cutVariableValue = impactProductXY;
837 cutVariableValue = angleBetweenBothDaughters;
844 cutVariableValue = angleMotherFirstDaughter;
851 cutVariableValue = angleMotherSecondDaughter;
858 cutVariableValue = cosThetaStar;
865 cutVariableValue = vertexDistance;
872 cutVariableValue = pseudoProperDecayTime;
879 cutVariableValue = decayTime;
886 cutVariableValue = normalizedDecayTime;
893 cutVariableValue = normDecayLength;
900 cutVariableValue = dd0pr1;
907 cutVariableValue = dd0pr2;
914 cutVariableValue = dd0max;
921 cutVariableValue = dd0min;
928 cutVariableValue = cosPointingAngleXY;
935 cutVariableValue = distanceXYToVertex;
942 cutVariableValue = normalizedDecayLengthXY;
949 cutVariableValue = chi2Vertex;
959 if (bPassedCut == kFALSE)
964 for (
Int_t i = 39; i < 68; ++i)
966 if (bCutArray[i] == kTRUE) {
984 cout <<
"Cut matrice not inizialized. Exit..." << endl;
989 if (!candidateBPlus) {
990 cout <<
"candidateBPlus null" << endl;
996 cout <<
"candidateD0 null" << endl;
1000 AliAODTrack *candidatePion = (AliAODTrack*)candidateD0->GetDaughter(0);
1001 if (!candidatePion) {
1002 cout <<
"candidatePion null 2" << endl;
1006 AliAODTrack *candidateKaon = (AliAODTrack*)candidateD0->GetDaughter(1);
1007 if (!candidateKaon) {
1008 cout <<
"candidateKaon null" << endl;
1012 AliAODVertex * vertexBPlus = candidateBPlus->GetSecondaryVtx();
1014 cout <<
"vertexBPlus null" << endl;
1018 AliAODVertex * vertexD0 = candidateD0->GetSecondaryVtx();
1020 cout <<
"vertexD0 null" << endl;
1024 AliAODVertex * primaryVertex = aod->GetPrimaryVertex();
1025 if (!primaryVertex) {
1026 cout <<
"primaryVertex null" << endl;
1030 Int_t returnvalue = 1;
1031 Bool_t bPassedCut = kFALSE;
1044 Double_t mD0PDG = TDatabasePDG::Instance()->GetParticle(421)->Mass();
1047 Int_t chargeBPlus = candidateBPlus->Charge();
1049 if (chargeBPlus == 1)
1054 else if (chargeBPlus == -1)
1061 cout <<
"Wrong charge BPlus." << endl;
1064 Double_t invMassD0 = candidateD0->InvMass(2, prongs);
1065 Double_t invMassDifference = TMath::Abs(mD0PDG - invMassD0);
1068 Double_t dcaMother = candidateD0->GetDCA();
1069 Double_t ptMother = candidateD0->Pt();
1070 Double_t momentumMother = candidateD0->P();
1071 Double_t ptPion = candidatePion->Pt();
1072 Double_t ptKaon = candidateKaon->Pt();
1074 AliExternalTrackParam motherTrack;
1075 motherTrack.CopyFromVTrack(candidateD0);
1076 Double_t d0z0[2], covd0z0[3], d0[2];
1077 motherTrack.PropagateToDCA(primaryVertex, bz, 100., d0z0, covd0z0);
1079 Double_t d0Mother = TMath::Abs(d0[0]);
1080 Double_t d0firstTrack = TMath::Abs(candidateD0->Getd0Prong(0));
1081 Double_t d0secondTrack = TMath::Abs(candidateD0->Getd0Prong(1));
1086 Double_t angleBetweenBothDaughters = (candidateKaon->Px() * candidatePion->Px() + candidateKaon->Py() * candidatePion->Py() + candidateKaon->Pz() * candidatePion->Pz()) / (candidateKaon->P() * candidatePion->P());
1087 Double_t angleMotherFirstDaughter = (candidateD0->Px() * candidatePion->Px() + candidateD0->Py() * candidatePion->Py() + candidateD0->Pz() * candidatePion->Pz()) / (candidateD0->P() * candidatePion->P());
1088 Double_t angleMotherSecondDaughter = (candidateD0->Px() * candidateKaon->Px() + candidateD0->Py() * candidateKaon->Py() + candidateD0->Pz() * candidateKaon->Pz()) / (candidateD0->P() * candidateKaon->P());
1090 Double_t cosThetaStar = candidateD0->CosThetaStar(0, 421, 211, 321);
1091 Double_t vertexDistance = vertexD0->DistanceToVertex(primaryVertex);
1093 Double_t pdgMassMother = TDatabasePDG::Instance()->GetParticle(421)->Mass();
1094 Double_t pseudoProperDecayLength = ((vertexD0->GetX() - primaryVertex->GetX()) * candidateD0->Px() / TMath::Abs(candidateD0->Pt())) + ((vertexD0->GetY() - primaryVertex->GetY()) * candidateD0->Py() / TMath::Abs(candidateD0->Pt()));
1095 Double_t pseudoProperDecayTime = pseudoProperDecayLength * pdgMassMother / ptMother;
1096 Double_t decayTime = vertexDistance / (299792458 * TMath::Sqrt(1 / ((pdgMassMother * pdgMassMother / (momentumMother * momentumMother)) + 1)));
1099 Double_t theta = candidateD0->Theta();
1101 candidateD0->GetCovarianceXYZPxPyPz(covMatrix);
1108 Double_t errorMomentum = covMatrix[9] * cp * cp * ct * ct
1109 + covMatrix[13] * 2.*cp * sp * ct * ct
1110 + covMatrix[18] * 2.*cp * ct * st
1111 + covMatrix[14] * sp * sp * ct * ct
1112 + covMatrix[19] * 2.*sp * ct * st
1113 + covMatrix[20] * st * st;
1114 Double_t normalizedDecayTime = candidateD0->
NormalizedDecayLength() / (299792458 * TMath::Sqrt(1 / ((pdgMassMother * pdgMassMother * errorMomentum * errorMomentum / (momentumMother * momentumMother)) + 1)));
1117 Double_t distanceXYToVertex = vertexD0->DistanceXYToVertex(primaryVertex);
1119 Double_t chi2Vertex = vertexD0->GetChi2perNDF();
1127 for (
Int_t ipr = 0; ipr < 2; ipr++)
1132 if (errdiffIP > 0.) normdd0 = diffIP / errdiffIP;
1133 if (ipr == 0) dd0pr1 = normdd0;
1134 if (ipr == 1) dd0pr2 = normdd0;
1136 if (TMath::Abs(dd0pr1) > TMath::Abs(dd0pr2)) {dd0max = dd0pr1; dd0min = dd0pr2;}
1137 else {dd0max = dd0pr2; dd0min = dd0pr1;}
1141 Int_t nCutIndex = 0;
1146 cutVariableValue = invMassDifference;
1160 cutVariableValue = pointingAngle;
1167 cutVariableValue = dcaMother;
1174 cutVariableValue = ptMother;
1181 cutVariableValue = ptKaon;
1188 cutVariableValue = ptPion;
1195 cutVariableValue = d0Mother;
1202 cutVariableValue = d0firstTrack;
1209 cutVariableValue = d0secondTrack;
1216 cutVariableValue = impactProduct;
1223 cutVariableValue = impactProductXY;
1230 cutVariableValue = angleBetweenBothDaughters;
1237 cutVariableValue = angleMotherFirstDaughter;
1244 cutVariableValue = angleMotherSecondDaughter;
1251 cutVariableValue = cosThetaStar;
1258 cutVariableValue = vertexDistance;
1265 cutVariableValue = pseudoProperDecayTime;
1272 cutVariableValue = decayTime;
1279 cutVariableValue = normalizedDecayTime;
1286 cutVariableValue = normDecayLength;
1293 cutVariableValue = dd0pr1;
1300 cutVariableValue = dd0pr2;
1307 cutVariableValue = dd0max;
1314 cutVariableValue = dd0min;
1321 cutVariableValue = cosPointingAngleXY;
1328 cutVariableValue = distanceXYToVertex;
1335 cutVariableValue = normalizedDecayLengthXY;
1342 cutVariableValue = chi2Vertex;
1349 AliAODRecoDecay* candidateD0toBPlus = (AliAODRecoDecay*)candidateD0;
1350 AliExternalTrackParam pionD0Track;
1351 AliExternalTrackParam kaonD0Track;
1353 Double_t d0z0DSVert[2], covd0z0DSVert[3], d0DSVert[2];
1355 pionD0Track.CopyFromVTrack(candidatePion);
1356 pionD0Track.PropagateToDCA(vertexBPlus, bz, 100., d0z0DSVert, covd0z0DSVert);
1357 d0DSVert[0] = d0z0DSVert[0];
1359 kaonD0Track.CopyFromVTrack(candidateKaon);
1360 kaonD0Track.PropagateToDCA(vertexBPlus, bz, 100., d0z0DSVert, covd0z0DSVert);
1361 d0DSVert[1] = d0z0DSVert[0];
1363 AliExternalTrackParam D0Track;
1364 D0Track.CopyFromVTrack(candidateD0);
1365 Double_t d0z0D0DSVert[2], covd0z0D0DSVert[3], d0D0DSVert;
1366 motherTrack.PropagateToDCA(vertexBPlus, bz, 100., d0z0D0DSVert, covd0z0D0DSVert);
1367 d0D0DSVert = TMath::Abs(d0z0D0DSVert[0]);
1369 Double_t impactProductToBPlus = d0DSVert[0] * d0DSVert[1];
1370 Double_t impactProductXYToBPlus = candidateD0toBPlus->ImpParXY(vertexBPlus);
1372 Double_t pointingAngleToBPlus = candidateD0toBPlus->CosPointingAngle(vertexBPlus);
1373 Double_t d0FirstDaughterToBPlus = TMath::Abs(d0DSVert[0]);
1374 Double_t d0SecondDaughterToBPlus = TMath::Abs(d0DSVert[1]);
1375 Double_t normDecayLengthToBPlus = candidateD0toBPlus->NormalizedDecayLength(vertexBPlus);
1377 Double_t pseudoProperDecayLengthDSVert = ((vertexD0->GetX() - vertexBPlus->GetX()) * candidateD0->Px() / TMath::Abs(candidateD0->Pt())) + ((vertexD0->GetY() - vertexBPlus->GetY()) * candidateD0->Py() / TMath::Abs(candidateD0->Pt()));
1378 Double_t pseudoProperDecayTimeToBPlus = pseudoProperDecayLengthDSVert * pdgMassMother / ptMother;
1379 Double_t DecayTimeToBPlus = vertexDistance / (299792458 * TMath::Sqrt(1 / ((pdgMassMother * pdgMassMother / (momentumMother * momentumMother)) + 1)));
1381 Double_t phiDSVert = candidateD0->Phi();
1382 Double_t thetaDSVert = candidateD0->Theta();
1384 candidateD0->GetCovarianceXYZPxPyPz(covMatrixDSVert);
1386 cp = TMath::Cos(phiDSVert);
1387 sp = TMath::Sin(phiDSVert);
1388 ct = TMath::Cos(thetaDSVert);
1389 st = TMath::Sin(thetaDSVert);
1391 errorMomentum = covMatrix[9] * cp * cp * ct * ct
1392 + covMatrix[13] * 2.*cp * sp * ct * ct
1393 + covMatrix[18] * 2.*cp * ct * st
1394 + covMatrix[14] * sp * sp * ct * ct
1395 + covMatrix[19] * 2.*sp * ct * st
1396 + covMatrix[20] * st * st;
1397 Double_t normalizedDecayTimeToBPlus = candidateD0toBPlus->NormalizedDecayLength(vertexBPlus) / (299792458 * TMath::Sqrt(1 / ((pdgMassMother * pdgMassMother * errorMomentum * errorMomentum / (momentumMother * momentumMother)) + 1)));
1401 cutVariableValue = pointingAngleToBPlus;
1408 cutVariableValue = d0D0DSVert;
1415 cutVariableValue = d0FirstDaughterToBPlus;
1422 cutVariableValue = d0SecondDaughterToBPlus;
1429 cutVariableValue = impactProductToBPlus;
1436 cutVariableValue = impactProductXYToBPlus;
1443 cutVariableValue = normDecayLengthToBPlus;
1450 cutVariableValue = pseudoProperDecayTimeToBPlus;
1457 cutVariableValue = DecayTimeToBPlus;
1464 cutVariableValue = normalizedDecayTimeToBPlus;
1470 for (
Int_t i = 0; i < 39; ++i)
1472 if (bCutArray[i] == kTRUE) {
1487 cout <<
"Cut matrice not inizialized. Exit..." << endl;
1493 cout <<
"candidateD0 null" << endl;
1497 AliAODTrack *candidatePion = (AliAODTrack*)candidateD0->GetDaughter(0);
1498 if (!candidatePion) {
1499 cout <<
"candidatePion null 3" << endl;
1503 AliAODTrack *candidateKaon = (AliAODTrack*)candidateD0->GetDaughter(1);
1504 if (!candidateKaon) {
1505 cout <<
"candidateKaon null" << endl;
1509 AliAODVertex * vertexD0 = candidateD0->GetSecondaryVtx();
1511 cout <<
"vertexD0 null" << endl;
1515 AliAODVertex * primaryVertex = aod->GetPrimaryVertex();
1516 if (!primaryVertex) {
1517 cout <<
"primaryVertex null" << endl;
1521 Int_t returnvalue = 1;
1522 Bool_t bPassedCut = kFALSE;
1533 if (ptbin == -1)
return -1;
1536 Double_t mD0PDG = TDatabasePDG::Instance()->GetParticle(421)->Mass();
1540 prongs[0] = 211; prongs[1] = 321;
1541 Double_t invMassD0 = candidateD0->InvMass(2, prongs);
1542 Double_t invMassDifference = TMath::Abs(mD0PDG - invMassD0);
1545 prongs2[1] = 211; prongs2[0] = 321;
1546 Double_t invMassD02 = candidateD0->InvMass(2, prongs2);
1547 Double_t invMassDifference2 = TMath::Abs(mD0PDG - invMassD02);
1549 if (invMassDifference > invMassDifference2) invMassDifference = invMassDifference2;
1552 Double_t dcaMother = candidateD0->GetDCA();
1553 Double_t ptMother = candidateD0->Pt();
1554 Double_t momentumMother = candidateD0->P();
1555 Double_t ptPion = candidatePion->Pt();
1556 Double_t ptKaon = candidateKaon->Pt();
1558 AliExternalTrackParam motherTrack;
1559 motherTrack.CopyFromVTrack(candidateD0);
1560 Double_t d0z0[2], covd0z0[3], d0[2];
1561 motherTrack.PropagateToDCA(primaryVertex, bz, 100., d0z0, covd0z0);
1563 Double_t d0Mother = TMath::Abs(d0[0]);
1564 Double_t d0firstTrack = TMath::Abs(candidateD0->Getd0Prong(0));
1565 Double_t d0secondTrack = TMath::Abs(candidateD0->Getd0Prong(1));
1570 Double_t angleBetweenBothDaughters = (candidateKaon->Px() * candidatePion->Px() + candidateKaon->Py() * candidatePion->Py() + candidateKaon->Pz() * candidatePion->Pz()) / (candidateKaon->P() * candidatePion->P());
1571 Double_t angleMotherFirstDaughter = (candidateD0->Px() * candidatePion->Px() + candidateD0->Py() * candidatePion->Py() + candidateD0->Pz() * candidatePion->Pz()) / (candidateD0->P() * candidatePion->P());
1572 Double_t angleMotherSecondDaughter = (candidateD0->Px() * candidateKaon->Px() + candidateD0->Py() * candidateKaon->Py() + candidateD0->Pz() * candidateKaon->Pz()) / (candidateD0->P() * candidateKaon->P());
1574 Double_t cosThetaStar = candidateD0->CosThetaStar(0, 421, 211, 321);
1575 Double_t vertexDistance = vertexD0->DistanceToVertex(primaryVertex);
1577 Double_t pdgMassMother = TDatabasePDG::Instance()->GetParticle(421)->Mass();
1578 Double_t pseudoProperDecayLength = ((vertexD0->GetX() - primaryVertex->GetX()) * candidateD0->Px() / TMath::Abs(candidateD0->Pt())) + ((vertexD0->GetY() - primaryVertex->GetY()) * candidateD0->Py() / TMath::Abs(candidateD0->Pt()));
1579 Double_t pseudoProperDecayTime = pseudoProperDecayLength * pdgMassMother / ptMother;
1580 Double_t decayTime = vertexDistance / (299792458 * TMath::Sqrt(1 / ((pdgMassMother * pdgMassMother / (momentumMother * momentumMother)) + 1)));
1583 Double_t theta = candidateD0->Theta();
1585 candidateD0->GetCovarianceXYZPxPyPz(covMatrix);
1592 Double_t errorMomentum = covMatrix[9] * cp * cp * ct * ct
1593 + covMatrix[13] * 2.*cp * sp * ct * ct
1594 + covMatrix[18] * 2.*cp * ct * st
1595 + covMatrix[14] * sp * sp * ct * ct
1596 + covMatrix[19] * 2.*sp * ct * st
1597 + covMatrix[20] * st * st;
1598 Double_t normalizedDecayTime = candidateD0->
NormalizedDecayLength() / (299792458 * TMath::Sqrt(1 / ((pdgMassMother * pdgMassMother * errorMomentum * errorMomentum / (momentumMother * momentumMother)) + 1)));
1601 Double_t distanceXYToVertex = vertexD0->DistanceXYToVertex(primaryVertex);
1603 Double_t chi2Vertex = vertexD0->GetChi2perNDF();
1610 for (
Int_t ipr = 0; ipr < 2; ipr++)
1615 if (errdiffIP > 0.) normdd0 = diffIP / errdiffIP;
1616 if (ipr == 0) dd0pr1 = normdd0;
1617 if (ipr == 1) dd0pr2 = normdd0;
1619 if (TMath::Abs(dd0pr1) > TMath::Abs(dd0pr2)) {dd0max = dd0pr1; dd0min = dd0pr2;}
1620 else {dd0max = dd0pr2; dd0min = dd0pr1;}
1624 Int_t nCutIndex = 0;
1629 cutVariableValue = invMassDifference;
1643 cutVariableValue = pointingAngle;
1650 cutVariableValue = dcaMother;
1657 cutVariableValue = ptMother;
1664 cutVariableValue = ptKaon;
1671 cutVariableValue = ptPion;
1678 cutVariableValue = d0Mother;
1685 cutVariableValue = d0firstTrack;
1692 cutVariableValue = d0secondTrack;
1699 cutVariableValue = impactProduct;
1706 cutVariableValue = impactProductXY;
1713 cutVariableValue = angleBetweenBothDaughters;
1720 cutVariableValue = angleMotherFirstDaughter;
1727 cutVariableValue = angleMotherSecondDaughter;
1734 cutVariableValue = cosThetaStar;
1741 cutVariableValue = vertexDistance;
1748 cutVariableValue = pseudoProperDecayTime;
1755 cutVariableValue = decayTime;
1762 cutVariableValue = normalizedDecayTime;
1769 cutVariableValue = normDecayLength;
1776 cutVariableValue = dd0pr1;
1783 cutVariableValue = dd0pr2;
1790 cutVariableValue = dd0max;
1797 cutVariableValue = dd0min;
1804 cutVariableValue = cosPointingAngleXY;
1811 cutVariableValue = distanceXYToVertex;
1818 cutVariableValue = normalizedDecayLengthXY;
1825 cutVariableValue = chi2Vertex;
1832 for (
Int_t i = 0; i < 29; ++i)
1834 if (bCutArray[i] == kTRUE) {
1851 cout <<
"Cut matrice not inizialized. Exit..." << endl;
1856 if (!candidateBPlus) {
1857 cout <<
"candidateBPlus null" << endl;
1863 cout <<
"candidateD0 null" << endl;
1867 AliAODTrack *candidatePion = (AliAODTrack*)candidateBPlus->GetDaughter(0);
1868 if (!candidatePion) {
1869 cout <<
"candidatePion null 1" << endl;
1873 AliAODVertex * vertexBPlus = candidateBPlus->GetSecondaryVtx();
1875 cout <<
"vertexBPlus null" << endl;
1879 AliAODVertex * primaryVertex = aod->GetPrimaryVertex();
1880 if (!primaryVertex) {
1881 cout <<
"primaryVertex null" << endl;
1894 if (ptbin == -1)
return -1;
1898 Double_t mD0PDG = TDatabasePDG::Instance()->GetParticle(421)->Mass();
1899 Double_t mBPlusPDG = TDatabasePDG::Instance()->GetParticle(521)->Mass();
1902 Double_t deltaPDG = mBPlusPDG - mD0PDG;
1906 prongs[0] = 211; prongs[1] = 421;
1907 Double_t invMassBPlus = candidateBPlus->InvMass(2, prongs);
1908 Double_t invMassDifference = TMath::Abs(mBPlusPDG - invMassBPlus);
1912 Double_t dcaMother = candidateBPlus->GetDCA();
1913 Double_t ptMother = candidateBPlus->Pt();
1914 Double_t momentumMother = candidateBPlus->P();
1916 Double_t ptPion = candidatePion->Pt();
1918 AliExternalTrackParam motherTrack;
1919 motherTrack.CopyFromVTrack(candidateBPlus);
1920 Double_t d0z0[2], covd0z0[3], d0[2];
1921 motherTrack.PropagateToDCA(primaryVertex, bz, 100., d0z0, covd0z0);
1923 Double_t d0Mother = TMath::Abs(d0[0]);
1924 Double_t d0firstTrack = TMath::Abs(candidateBPlus->Getd0Prong(0));
1925 Double_t d0secondTrack = TMath::Abs(candidateBPlus->Getd0Prong(1));
1930 Double_t angleBetweenBothDaughters = (candidateD0->Px() * candidatePion->Px() + candidateD0->Py() * candidatePion->Py() + candidateD0->Pz() * candidatePion->Pz()) / (candidateD0->P() * candidatePion->P());
1931 Double_t angleMotherFirstDaughter = (candidateBPlus->Px() * candidatePion->Px() + candidateBPlus->Py() * candidatePion->Py() + candidateBPlus->Pz() * candidatePion->Pz()) / (candidateBPlus->P() * candidatePion->P());
1932 Double_t angleMotherSecondDaughter = (candidateBPlus->Px() * candidateD0->Px() + candidateBPlus->Py() * candidateD0->Py() + candidateBPlus->Pz() * candidateD0->Pz()) / (candidateBPlus->P() * candidateD0->P());
1934 Double_t cosThetaStar = candidateBPlus->CosThetaStar(0, 521, 211, 421);
1935 Double_t vertexDistance = vertexBPlus->DistanceToVertex(primaryVertex);
1937 Double_t pdgMassMother = TDatabasePDG::Instance()->GetParticle(521)->Mass();
1938 Double_t pseudoProperDecayLength = ((vertexBPlus->GetX() - primaryVertex->GetX()) * candidateBPlus->Px() / TMath::Abs(candidateBPlus->Pt())) + ((vertexBPlus->GetY() - primaryVertex->GetY()) * candidateBPlus->Py() / TMath::Abs(candidateBPlus->Pt()));
1939 Double_t pseudoProperDecayTime = pseudoProperDecayLength * pdgMassMother / ptMother;
1940 Double_t decayTime = vertexDistance / (299792458 * TMath::Sqrt(1 / ((pdgMassMother * pdgMassMother / (momentumMother * momentumMother)) + 1)));
1942 Double_t phi = candidateBPlus->Phi();
1943 Double_t theta = candidateBPlus->Theta();
1945 candidateBPlus->GetCovarianceXYZPxPyPz(covMatrix);
1952 Double_t errorMomentum = covMatrix[9] * cp * cp * ct * ct
1953 + covMatrix[13] * 2.*cp * sp * ct * ct
1954 + covMatrix[18] * 2.*cp * ct * st
1955 + covMatrix[14] * sp * sp * ct * ct
1956 + covMatrix[19] * 2.*sp * ct * st
1957 + covMatrix[20] * st * st;
1958 Double_t normalizedDecayTime = candidateBPlus->
NormalizedDecayLength() / (299792458 * TMath::Sqrt(1 / ((pdgMassMother * pdgMassMother * errorMomentum * errorMomentum / (momentumMother * momentumMother)) + 1)));
1961 Double_t distanceXYToVertex = vertexBPlus->DistanceXYToVertex(primaryVertex);
1963 Double_t chi2Vertex = vertexBPlus->GetChi2perNDF();
1970 for (
Int_t ipr = 0; ipr < 2; ipr++)
1975 if (errdiffIP > 0.) normdd0 = diffIP / errdiffIP;
1976 if (ipr == 0) dd0pr1 = normdd0;
1977 if (ipr == 1) dd0pr2 = normdd0;
1979 if (TMath::Abs(dd0pr1) > TMath::Abs(dd0pr2)) {dd0max = dd0pr1; dd0min = dd0pr2;}
1980 else {dd0max = dd0pr2; dd0min = dd0pr1;}
1984 Int_t nCutIndex = 0;
1989 cutVariableValue = invMassDifference;
1995 cutVariableValue = invMassDelta;
2001 cutVariableValue = pointingAngle;
2007 cutVariableValue = dcaMother;
2013 cutVariableValue = ptMother;
2019 cutVariableValue = ptD0;
2025 cutVariableValue = ptPion;
2031 cutVariableValue = d0Mother;
2037 cutVariableValue = d0firstTrack;
2043 cutVariableValue = d0secondTrack;
2049 cutVariableValue = impactProduct;
2055 cutVariableValue = impactProductXY;
2061 cutVariableValue = angleBetweenBothDaughters;
2067 cutVariableValue = angleMotherFirstDaughter;
2073 cutVariableValue = angleMotherSecondDaughter;
2079 cutVariableValue = cosThetaStar;
2085 cutVariableValue = vertexDistance;
2091 cutVariableValue = pseudoProperDecayTime;
2097 cutVariableValue = decayTime;
2103 cutVariableValue = normalizedDecayTime;
2109 cutVariableValue = normDecayLength;
2115 cutVariableValue = dd0pr1;
2121 cutVariableValue = dd0pr2;
2127 cutVariableValue = dd0max;
2133 cutVariableValue = dd0min;
2139 cutVariableValue = cosPointingAngleXY;
2145 cutVariableValue = distanceXYToVertex;
2151 cutVariableValue = normalizedDecayLengthXY;
2157 cutVariableValue = chi2Vertex;
2174 cout <<
"Cut matrice not inizialized. Exit..." << endl;
2179 if (!candidateBPlus) {
2180 cout <<
"candidateBPlus null" << endl;
2186 cout <<
"candidateD0 null" << endl;
2190 AliAODTrack *candidatePion = (AliAODTrack*)candidateD0->GetDaughter(0);
2191 if (!candidatePion) {
2192 cout <<
"candidatePion null 2" << endl;
2196 AliAODTrack *candidateKaon = (AliAODTrack*)candidateD0->GetDaughter(1);
2197 if (!candidateKaon) {
2198 cout <<
"candidateKaon null" << endl;
2202 AliAODVertex * vertexBPlus = candidateBPlus->GetSecondaryVtx();
2204 cout <<
"vertexBPlus null" << endl;
2208 AliAODVertex * vertexD0 = candidateD0->GetSecondaryVtx();
2210 cout <<
"vertexD0 null" << endl;
2214 if (!primaryVertex) {
2215 cout <<
"primaryVertex null" << endl;
2226 Double_t mD0PDG = TDatabasePDG::Instance()->GetParticle(421)->Mass();
2229 Int_t chargeBPlus = candidateBPlus->Charge();
2231 if (chargeBPlus == 1)
2236 else if (chargeBPlus == -1)
2243 cout <<
"Wrong charge BPlus." << endl;
2246 Double_t invMassD0 = candidateD0->InvMass(2, prongs);
2247 Double_t invMassDifference = TMath::Abs(mD0PDG - invMassD0);
2250 Double_t dcaMother = candidateD0->GetDCA();
2251 Double_t ptMother = candidateD0->Pt();
2252 Double_t momentumMother = candidateD0->P();
2253 Double_t ptPion = candidatePion->Pt();
2254 Double_t ptKaon = candidateKaon->Pt();
2256 AliExternalTrackParam motherTrack;
2257 motherTrack.CopyFromVTrack(candidateD0);
2258 Double_t d0z0[2], covd0z0[3], d0[2];
2259 motherTrack.PropagateToDCA(primaryVertex, bz, 100., d0z0, covd0z0);
2261 Double_t d0Mother = TMath::Abs(d0[0]);
2262 Double_t d0firstTrack = TMath::Abs(candidateD0->Getd0Prong(0));
2263 Double_t d0secondTrack = TMath::Abs(candidateD0->Getd0Prong(1));
2268 Double_t angleBetweenBothDaughters = (candidateKaon->Px() * candidatePion->Px() + candidateKaon->Py() * candidatePion->Py() + candidateKaon->Pz() * candidatePion->Pz()) / (candidateKaon->P() * candidatePion->P());
2269 Double_t angleMotherFirstDaughter = (candidateD0->Px() * candidatePion->Px() + candidateD0->Py() * candidatePion->Py() + candidateD0->Pz() * candidatePion->Pz()) / (candidateD0->P() * candidatePion->P());
2270 Double_t angleMotherSecondDaughter = (candidateD0->Px() * candidateKaon->Px() + candidateD0->Py() * candidateKaon->Py() + candidateD0->Pz() * candidateKaon->Pz()) / (candidateD0->P() * candidateKaon->P());
2272 Double_t cosThetaStar = candidateD0->CosThetaStar(0, 421, 211, 321);
2273 Double_t vertexDistance = vertexD0->DistanceToVertex(primaryVertex);
2275 Double_t pdgMassMother = TDatabasePDG::Instance()->GetParticle(421)->Mass();
2276 Double_t pseudoProperDecayLength = ((vertexD0->GetX() - primaryVertex->GetX()) * candidateD0->Px() / TMath::Abs(candidateD0->Pt())) + ((vertexD0->GetY() - primaryVertex->GetY()) * candidateD0->Py() / TMath::Abs(candidateD0->Pt()));
2277 Double_t pseudoProperDecayTime = pseudoProperDecayLength * pdgMassMother / ptMother;
2278 Double_t decayTime = vertexDistance / (299792458 * TMath::Sqrt(1 / ((pdgMassMother * pdgMassMother / (momentumMother * momentumMother)) + 1)));
2281 Double_t theta = candidateD0->Theta();
2283 candidateD0->GetCovarianceXYZPxPyPz(covMatrix);
2290 Double_t errorMomentum = covMatrix[9] * cp * cp * ct * ct
2291 + covMatrix[13] * 2.*cp * sp * ct * ct
2292 + covMatrix[18] * 2.*cp * ct * st
2293 + covMatrix[14] * sp * sp * ct * ct
2294 + covMatrix[19] * 2.*sp * ct * st
2295 + covMatrix[20] * st * st;
2296 Double_t normalizedDecayTime = candidateD0->
NormalizedDecayLength() / (299792458 * TMath::Sqrt(1 / ((pdgMassMother * pdgMassMother * errorMomentum * errorMomentum / (momentumMother * momentumMother)) + 1)));
2299 Double_t distanceXYToVertex = vertexD0->DistanceXYToVertex(primaryVertex);
2301 Double_t chi2Vertex = vertexD0->GetChi2perNDF();
2309 for (
Int_t ipr = 0; ipr < 2; ipr++)
2314 if (errdiffIP > 0.) normdd0 = diffIP / errdiffIP;
2315 if (ipr == 0) dd0pr1 = normdd0;
2316 if (ipr == 1) dd0pr2 = normdd0;
2318 if (TMath::Abs(dd0pr1) > TMath::Abs(dd0pr2)) {dd0max = dd0pr1; dd0min = dd0pr2;}
2319 else {dd0max = dd0pr2; dd0min = dd0pr1;}
2323 Int_t nCutIndex = 0;
2328 cutVariableValue = invMassDifference;
2340 cutVariableValue = pointingAngle;
2346 cutVariableValue = dcaMother;
2352 cutVariableValue = ptMother;
2358 cutVariableValue = ptKaon;
2364 cutVariableValue = ptPion;
2370 cutVariableValue = d0Mother;
2376 cutVariableValue = d0firstTrack;
2382 cutVariableValue = d0secondTrack;
2388 cutVariableValue = impactProduct;
2394 cutVariableValue = impactProductXY;
2400 cutVariableValue = angleBetweenBothDaughters;
2406 cutVariableValue = angleMotherFirstDaughter;
2412 cutVariableValue = angleMotherSecondDaughter;
2418 cutVariableValue = cosThetaStar;
2424 cutVariableValue = vertexDistance;
2430 cutVariableValue = pseudoProperDecayTime;
2436 cutVariableValue = decayTime;
2442 cutVariableValue = normalizedDecayTime;
2448 cutVariableValue = normDecayLength;
2454 cutVariableValue = dd0pr1;
2460 cutVariableValue = dd0pr2;
2466 cutVariableValue = dd0max;
2472 cutVariableValue = dd0min;
2478 cutVariableValue = cosPointingAngleXY;
2484 cutVariableValue = distanceXYToVertex;
2490 cutVariableValue = normalizedDecayLengthXY;
2496 cutVariableValue = chi2Vertex;
2502 AliAODRecoDecay* candidateD0toBPlus = (AliAODRecoDecay*)candidateD0;
2503 AliExternalTrackParam pionD0Track;
2504 AliExternalTrackParam kaonD0Track;
2506 Double_t d0z0DSVert[2], covd0z0DSVert[3], d0DSVert[2];
2508 pionD0Track.CopyFromVTrack(candidatePion);
2509 pionD0Track.PropagateToDCA(vertexBPlus, bz, 100., d0z0DSVert, covd0z0DSVert);
2510 d0DSVert[0] = d0z0DSVert[0];
2512 kaonD0Track.CopyFromVTrack(candidateKaon);
2513 kaonD0Track.PropagateToDCA(vertexBPlus, bz, 100., d0z0DSVert, covd0z0DSVert);
2514 d0DSVert[1] = d0z0DSVert[0];
2516 AliExternalTrackParam D0Track;
2517 D0Track.CopyFromVTrack(candidateD0);
2518 Double_t d0z0D0DSVert[2], covd0z0D0DSVert[3], d0D0DSVert;
2519 motherTrack.PropagateToDCA(vertexBPlus, bz, 100., d0z0D0DSVert, covd0z0D0DSVert);
2520 d0D0DSVert = TMath::Abs(d0z0D0DSVert[0]);
2522 Double_t impactProductToBPlus = d0DSVert[0] * d0DSVert[1];
2523 Double_t impactProductXYToBPlus = candidateD0toBPlus->ImpParXY(vertexBPlus);
2525 Double_t pointingAngleToBPlus = candidateD0toBPlus->CosPointingAngle(vertexBPlus);
2526 Double_t d0FirstDaughterToBPlus = TMath::Abs(d0DSVert[0]);
2527 Double_t d0SecondDaughterToBPlus = TMath::Abs(d0DSVert[1]);
2528 Double_t normDecayLengthToBPlus = candidateD0toBPlus->NormalizedDecayLength(vertexBPlus);
2530 Double_t pseudoProperDecayLengthDSVert = ((vertexD0->GetX() - vertexBPlus->GetX()) * candidateD0->Px() / TMath::Abs(candidateD0->Pt())) + ((vertexD0->GetY() - vertexBPlus->GetY()) * candidateD0->Py() / TMath::Abs(candidateD0->Pt()));
2531 Double_t pseudoProperDecayTimeToBPlus = pseudoProperDecayLengthDSVert * pdgMassMother / ptMother;
2532 Double_t DecayTimeToBPlus = vertexDistance / (299792458 * TMath::Sqrt(1 / ((pdgMassMother * pdgMassMother / (momentumMother * momentumMother)) + 1)));
2534 Double_t phiDSVert = candidateD0->Phi();
2535 Double_t thetaDSVert = candidateD0->Theta();
2537 candidateD0->GetCovarianceXYZPxPyPz(covMatrixDSVert);
2539 cp = TMath::Cos(phiDSVert);
2540 sp = TMath::Sin(phiDSVert);
2541 ct = TMath::Cos(thetaDSVert);
2542 st = TMath::Sin(thetaDSVert);
2544 errorMomentum = covMatrix[9] * cp * cp * ct * ct
2545 + covMatrix[13] * 2.*cp * sp * ct * ct
2546 + covMatrix[18] * 2.*cp * ct * st
2547 + covMatrix[14] * sp * sp * ct * ct
2548 + covMatrix[19] * 2.*sp * ct * st
2549 + covMatrix[20] * st * st;
2550 Double_t normalizedDecayTimeToBPlus = candidateD0toBPlus->NormalizedDecayLength(vertexBPlus) / (299792458 * TMath::Sqrt(1 / ((pdgMassMother * pdgMassMother * errorMomentum * errorMomentum / (momentumMother * momentumMother)) + 1)));
2554 cutVariableValue = pointingAngleToBPlus;
2560 cutVariableValue = d0D0DSVert;
2566 cutVariableValue = d0FirstDaughterToBPlus;
2572 cutVariableValue = d0SecondDaughterToBPlus;
2578 cutVariableValue = impactProductToBPlus;
2584 cutVariableValue = impactProductXYToBPlus;
2590 cutVariableValue = normDecayLengthToBPlus;
2596 cutVariableValue = pseudoProperDecayTimeToBPlus;
2602 cutVariableValue = DecayTimeToBPlus;
2608 cutVariableValue = normalizedDecayTimeToBPlus;
2622 cout <<
"Cut matrice not inizialized. Exit..." << endl;
2628 cout <<
"candidateD0 null" << endl;
2632 AliAODTrack *candidatePion = (AliAODTrack*)candidateD0->GetDaughter(0);
2633 if (!candidatePion) {
2634 cout <<
"candidatePion null 3" << endl;
2638 AliAODTrack *candidateKaon = (AliAODTrack*)candidateD0->GetDaughter(1);
2639 if (!candidateKaon) {
2640 cout <<
"candidateKaon null" << endl;
2644 AliAODVertex * vertexD0 = candidateD0->GetSecondaryVtx();
2646 cout <<
"vertexD0 null" << endl;
2650 if (!primaryVertex) {
2651 cout <<
"primaryVertex null" << endl;
2655 Bool_t bPassedCut = kFALSE;
2662 if (ptbin == -1)
return -1;
2665 Double_t mD0PDG = TDatabasePDG::Instance()->GetParticle(421)->Mass();
2669 prongs[0] = 211; prongs[1] = 321;
2670 Double_t invMassD0 = candidateD0->InvMass(2, prongs);
2671 Double_t invMassDifference = TMath::Abs(mD0PDG - invMassD0);
2674 prongs2[1] = 211; prongs2[0] = 321;
2675 Double_t invMassD02 = candidateD0->InvMass(2, prongs2);
2676 Double_t invMassDifference2 = TMath::Abs(mD0PDG - invMassD02);
2678 if (invMassDifference > invMassDifference2) invMassDifference = invMassDifference2;
2681 Double_t dcaMother = candidateD0->GetDCA();
2682 Double_t ptMother = candidateD0->Pt();
2683 Double_t momentumMother = candidateD0->P();
2684 Double_t ptPion = candidatePion->Pt();
2685 Double_t ptKaon = candidateKaon->Pt();
2687 AliExternalTrackParam motherTrack;
2688 motherTrack.CopyFromVTrack(candidateD0);
2689 Double_t d0z0[2], covd0z0[3], d0[2];
2690 motherTrack.PropagateToDCA(primaryVertex, bz, 100., d0z0, covd0z0);
2692 Double_t d0Mother = TMath::Abs(d0[0]);
2693 Double_t d0firstTrack = TMath::Abs(candidateD0->Getd0Prong(0));
2694 Double_t d0secondTrack = TMath::Abs(candidateD0->Getd0Prong(1));
2699 Double_t angleBetweenBothDaughters = (candidateKaon->Px() * candidatePion->Px() + candidateKaon->Py() * candidatePion->Py() + candidateKaon->Pz() * candidatePion->Pz()) / (candidateKaon->P() * candidatePion->P());
2700 Double_t angleMotherFirstDaughter = (candidateD0->Px() * candidatePion->Px() + candidateD0->Py() * candidatePion->Py() + candidateD0->Pz() * candidatePion->Pz()) / (candidateD0->P() * candidatePion->P());
2701 Double_t angleMotherSecondDaughter = (candidateD0->Px() * candidateKaon->Px() + candidateD0->Py() * candidateKaon->Py() + candidateD0->Pz() * candidateKaon->Pz()) / (candidateD0->P() * candidateKaon->P());
2703 Double_t cosThetaStar = candidateD0->CosThetaStar(0, 421, 211, 321);
2704 Double_t vertexDistance = vertexD0->DistanceToVertex(primaryVertex);
2706 Double_t pdgMassMother = TDatabasePDG::Instance()->GetParticle(421)->Mass();
2707 Double_t pseudoProperDecayLength = ((vertexD0->GetX() - primaryVertex->GetX()) * candidateD0->Px() / TMath::Abs(candidateD0->Pt())) + ((vertexD0->GetY() - primaryVertex->GetY()) * candidateD0->Py() / TMath::Abs(candidateD0->Pt()));
2708 Double_t pseudoProperDecayTime = pseudoProperDecayLength * pdgMassMother / ptMother;
2709 Double_t decayTime = vertexDistance / (299792458 * TMath::Sqrt(1 / ((pdgMassMother * pdgMassMother / (momentumMother * momentumMother)) + 1)));
2712 Double_t theta = candidateD0->Theta();
2714 candidateD0->GetCovarianceXYZPxPyPz(covMatrix);
2721 Double_t errorMomentum = covMatrix[9] * cp * cp * ct * ct
2722 + covMatrix[13] * 2.*cp * sp * ct * ct
2723 + covMatrix[18] * 2.*cp * ct * st
2724 + covMatrix[14] * sp * sp * ct * ct
2725 + covMatrix[19] * 2.*sp * ct * st
2726 + covMatrix[20] * st * st;
2727 Double_t normalizedDecayTime = candidateD0->
NormalizedDecayLength() / (299792458 * TMath::Sqrt(1 / ((pdgMassMother * pdgMassMother * errorMomentum * errorMomentum / (momentumMother * momentumMother)) + 1)));
2730 Double_t distanceXYToVertex = vertexD0->DistanceXYToVertex(primaryVertex);
2732 Double_t chi2Vertex = vertexD0->GetChi2perNDF();
2739 for (
Int_t ipr = 0; ipr < 2; ipr++)
2744 if (errdiffIP > 0.) normdd0 = diffIP / errdiffIP;
2745 if (ipr == 0) dd0pr1 = normdd0;
2746 if (ipr == 1) dd0pr2 = normdd0;
2748 if (TMath::Abs(dd0pr1) > TMath::Abs(dd0pr2)) {dd0max = dd0pr1; dd0min = dd0pr2;}
2749 else {dd0max = dd0pr2; dd0min = dd0pr1;}
2753 Int_t nCutIndex = 0;
2758 cutVariableValue = invMassDifference;
2770 cutVariableValue = pointingAngle;
2776 cutVariableValue = dcaMother;
2782 cutVariableValue = ptMother;
2788 cutVariableValue = ptKaon;
2794 cutVariableValue = ptPion;
2800 cutVariableValue = d0Mother;
2806 cutVariableValue = d0firstTrack;
2812 cutVariableValue = d0secondTrack;
2818 cutVariableValue = impactProduct;
2824 cutVariableValue = impactProductXY;
2830 cutVariableValue = angleBetweenBothDaughters;
2836 cutVariableValue = angleMotherFirstDaughter;
2842 cutVariableValue = angleMotherSecondDaughter;
2848 cutVariableValue = cosThetaStar;
2854 cutVariableValue = vertexDistance;
2860 cutVariableValue = pseudoProperDecayTime;
2866 cutVariableValue = decayTime;
2872 cutVariableValue = normalizedDecayTime;
2878 cutVariableValue = normDecayLength;
2884 cutVariableValue = dd0pr1;
2890 cutVariableValue = dd0pr2;
2896 cutVariableValue = dd0max;
2902 cutVariableValue = dd0min;
2908 cutVariableValue = cosPointingAngleXY;
2914 cutVariableValue = distanceXYToVertex;
2920 cutVariableValue = normalizedDecayLengthXY;
2926 cutVariableValue = chi2Vertex;
2935 AliExternalTrackParam particleTrack;
2936 particleTrack.CopyFromVTrack(candidatePion);
2938 particleTrack.PropagateToDCA(primaryVertex, bz, 100., d0, covd0);
2942 AliExternalTrackParam particleTrack2;
2943 particleTrack2.CopyFromVTrack(candidateKaon);
2945 particleTrack2.PropagateToDCA(primaryVertex, bz, 100., d02, covd02);
2963 AliAODTrack* candidatePion = (AliAODTrack*)obj;
2964 if (!candidatePion) {
2965 cout <<
"candidatePion null" << endl;
2973 if (candidatePion->GetITSNcls() < 1)
return 0;
2974 if (candidatePion->GetTPCNcls() < 1)
return 0;
2975 if (candidatePion->GetStatus()&AliESDtrack::kITSpureSA)
return 0;
2976 if (!(candidatePion->GetStatus()&AliESDtrack::kITSin))
return 0;
2977 if (candidatePion->GetID() < 0)
return 0;
2979 if (!candidatePion->GetCovarianceXYZPxPyPz(covtest))
return 0;
2982 primaryVertex->GetXYZ(pos);
2983 primaryVertex->GetCovarianceMatrix(cov);
2984 const AliESDVertex vESD(pos,cov,100.,100);
2988 AliExternalTrackParam particleTrack;
2989 particleTrack.CopyFromVTrack(candidatePion);
2991 particleTrack.PropagateToDCA(primaryVertex, bz, 100., d0, covd0);
3002 if (!(
SelectPID(candidatePion, 2)))
return 0;
3027 cout <<
"Cut matrice not inizialized. Exit..." << endl;
3032 cout <<
"candidate D0 null" << endl;
3037 cout <<
"candidate Pion null" << endl;
3041 if (!primaryVertex) {
3042 cout <<
"primaryVertex null" << endl;
3046 if(selLevel > 4 || selLevel < 0){
3047 AliWarning(Form(
"selLevel %d is not supported. return -1.",selLevel));
3051 Int_t returnvaluePID = 1;
3052 Int_t returnvalueD0 = 1;
3053 Int_t returnvalueBplus = 1;
3056 if(selLevel == 0 || selLevel == 1 || selLevel == 4){
3057 AliAODTrack* track0 = (AliAODTrack*)d->GetDaughter(0);
3058 AliAODTrack* track1 = (AliAODTrack*)d->GetDaughter(1);
3060 if (pion->Charge() == -1) {
3063 else returnvaluePID = -1;
3064 }
else if (pion->Charge() == 1) {
3067 else returnvaluePID = -1;
3069 returnvaluePID = -1;
3074 if(selLevel == 0 || selLevel == 2 || selLevel == 4){
3075 Double_t pdgMassD0 = TDatabasePDG::Instance()->GetParticle(421)->Mass();
3077 if(ptbin == -1) returnvalueD0 = -1;
3079 if (pion->Charge() == -1) {
3082 }
else if (pion->Charge() == 1) {
3091 if(selLevel == 0 || selLevel == 3){
3092 AliExternalTrackParam firstTrack;
3093 firstTrack.CopyFromVTrack(pion);
3094 AliExternalTrackParam secondTrack;
3095 secondTrack.CopyFromVTrack(d);
3097 Double_t d0z0[2], covd0z0[3], d0[2], d0err[2];
3098 firstTrack.PropagateToDCA(primaryVertex, bz, 100., d0z0, covd0z0);
3099 d0[0] = d0z0[0]; d0err[0] = TMath::Sqrt(covd0z0[0]);
3100 secondTrack.PropagateToDCA(primaryVertex, bz, 100., d0z0, covd0z0);
3101 d0[1] = d0z0[0]; d0err[1] = TMath::Sqrt(covd0z0[0]);
3103 Double_t px[2],py[2],pz[2],momentum[3];
3104 firstTrack.GetPxPyPz(momentum);
3105 px[0] = momentum[0]; py[0] = momentum[1]; pz[0] = momentum[2];
3106 secondTrack.GetPxPyPz(momentum);
3107 px[1] = momentum[0]; py[1] = momentum[1]; pz[1] = momentum[2];
3110 Double_t dca = secondTrack.GetDCA(&firstTrack, bz, xdummy, ydummy);
3114 UInt_t pdg2[2] = {211,421};
3115 Double_t invMassBPlus = trackBPlus.InvMass(2,pdg2);
3116 Double_t mBPlusPDG = TDatabasePDG::Instance()->GetParticle(521)->Mass();
3117 Double_t invMassDifference = TMath::Abs(mBPlusPDG - invMassBPlus) - 0.1;
3120 if (ptbin == -1) returnvalueBplus = -1;
3126 if(returnvaluePID == 1 && returnvalueD0 == 1 && returnvalueBplus == 1)
return 1;
3127 else if(returnvaluePID == 0 && returnvalueD0 == 1 && returnvalueBplus == 1)
return 0;
3191 Bool_t isParticle = kTRUE;
3192 if (!
fUsePID)
return isParticle;
3196 Bool_t TPCon = TMath::Abs(2) > 1e-4 ? kTRUE : kFALSE;
3197 Bool_t TOFon = TMath::Abs(3) > 1e-4 ? kTRUE : kFALSE;
3221 isParticle = isTPC && isTOF;
3226 Double_t prob[5] = {1., 1., 1., 1., 1.};
3233 for (
Int_t i = 0; i < 5; i++) {
3234 if (prob[i] > max) {k = i; max = prob[i];}
3236 isParticle =
Bool_t(k == type);
3239 if (match == 10 || match == 11) {
3243 isParticle = checkTPC >= 0 && checkTOF >= 0 ? kTRUE : kFALSE;
3245 isParticle = isParticle && checkTPC + checkTOF >= 1 ? kTRUE : kFALSE;
3259 if (TPCok != -1 && TOFok != -1) {
3261 isParticle = TMath::Sqrt(nSigmaTPC * nSigmaTPC + nSigmaTOF * nSigmaTOF) <= radius ? kTRUE : kFALSE;
3266 isParticle = nSigmaTPC <= radius ? kTRUE : kFALSE;
3269 isParticle = nSigmaTOF <= radius ? kTRUE : kFALSE;
3288 if (BPlus->Charge() == -1)
3290 e[0] = D0->EProng(0, 211);
3291 e[1] = D0->EProng(1, 321);
3292 }
else if (BPlus->Charge() == 1) {
3293 e[0] = D0->EProng(0, 321);
3294 e[1] = D0->EProng(1, 211);
3296 e[2] = BPlus->EProng(0, 211);
3298 Double_t esum = e[0] + e[1] + e[2];
3299 Double_t invMassBPlus = TMath::Sqrt(esum * esum - BPlus->P2());
3303 if (BPlus->Charge() == -1) {invMassD0 = D0->
InvMassD0();}
3305 if (invMassD0 == -1) {cout <<
"wrong invmass delta D0 BPlus" << endl;}
3307 return invMassBPlus - invMassD0;
3324 AliFatal(
"exiting");
3328 AliFatal(
"exiting");
3342 cout <<
"Overflow, exit..." << endl;
3360 AliFatal(
"exiting");
3391 printf(
"Changing the pt bins\n");
3395 cout <<
"Warning: ptBinLimits dimension " << nPtBinLimits <<
" != nPtBins+1 (" <<
fnPtBinsD0forD0ptbin + 1 <<
")\nSetting nPtBins to " << nPtBinLimits - 1 << endl;
3421 if (bCut == kTRUE) {bCutArray[nCutIndex] = 1;
return 0;}
3439 if (bCut == kTRUE) {bCutArray[nCutIndex] = 1;
return 0;}
3489 for (
Int_t iv = 0; iv < nVars; iv++) {
3519 cout <<
"Overflow, exit..." << endl;
3551 cout <<
"Overflow, exit..." << endl;
3624 cout <<
"Overflow, exit..." << endl;
3642 AliFatal(
"exiting");
Bool_t GetIsCutUsed(Int_t nCutIndex, Int_t ptbin) const
Double_t NormalizedDecayLengthXY() const
Int_t fIsSelectedCuts
fix the daughter track references
Double_t fMaxAbsEtaBPlusPion
Int_t IsD0FromBPlusSelected(Double_t ptBPlus, TObject *obj, Int_t selectionLevel, AliAODEvent *aod, Bool_t bCutArray[68])
Double_t NormalizedDecayLength() const
Bool_t fUseTPCRefitD0FirstDaughter
Bool_t fUseFilterBitD0FirstDaughter
Int_t fFilterBitBPlusPion
Bool_t GetIsCutUsedD0forD0ptbin(Int_t nCutIndex, Int_t ptbin) const
virtual ~AliRDHFCutsBPlustoD0Pi()
Bool_t GetIsUpperCutD0forD0ptbin(Int_t nCutIndex)
void SetHardSelectionArrayITSD0SecondDaughter(const Bool_t array[7]=0)
void Getd0MeasMinusExpProng(Int_t ip, Double_t magf, Double_t &d0diff, Double_t &errd0diff) const
Int_t fnVariablesForCutOptimization
Int_t GetnSigmaTOF(AliAODTrack *track, Int_t species, Double_t &sigma) const
Int_t GetGlobalIndexD0forD0ptbin(Int_t iVar, Int_t iPtBin) const
Bool_t fUseITSRefitD0SecondDaughter
Bool_t IsKaonRaw(AliAODTrack *track, TString detector) const
virtual Bool_t IsInFiducialAcceptance(Double_t pt, Double_t y) const
Bool_t fUseITSRefitD0FirstDaughter
Int_t fNSoftITSCutD0SecondDaughter
Float_t * fPtBinLimitsD0forD0ptbin
AliESDtrackCuts * fTrackCutsSoftPi
Int_t GetnSigmaTPC(AliAODTrack *track, Int_t species, Double_t &sigma) const
Bool_t fUseFilterBitBPlusPion
Double_t DeltaInvMassBPlusKpipi(AliAODRecoDecayHF2Prong *BPlus) const
Int_t fMinTPCNclsD0FirstDaughter
Double_t ImpParXY() const
Int_t GetFilterBitD0SecondDaughter()
void SetVarNamesD0forD0ptbin(Int_t nVars, TString *varNames, Bool_t *isUpperCut)
Int_t fFilterBitD0FirstDaughter
Int_t ApplyCutOnVariableMVA(Int_t nCutIndex, Int_t ptbin, Float_t cutVariableValue)
Bool_t fHardSelectionArrayITSD0SecondDaughter[7]
Bool_t fUseITSRefitBPlusPion
void SetNVars(Int_t nVars)
Bool_t fUseTPCRefitBPlusPion
Int_t fMinTPCNclsBPlusPion
Double_t CosPointingAngleXY() const
Bool_t * fIsUpperCutD0forD0ptbin
void SetIsCutUsedD0forD0ptbin(Int_t nCutIndex, Int_t ptbin, Bool_t isCutUsed)
Double_t InvMassD0() const
Int_t IsD0forD0ptbinSelected(TObject *obj, Int_t selectionLevel, AliAODEvent *aod, Bool_t *bCutArray)
Double_t Prodd0d0() const
Int_t fMinITSNclsD0FirstDaughter
Int_t GetnVariablesForCutOptimization()
AliRDHFCuts & operator=(const AliRDHFCuts &source)
Int_t fFilterBitD0SecondDaughter
Int_t GetFilterBitBPlusPion()
Int_t fGlobalIndexD0forD0ptbin
Bool_t fHardSelectionArrayITSD0FirstDaughter[7]
Int_t fnPtBinLimitsD0forD0ptbin
virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d, Float_t *vars, Int_t nvars, Int_t *pdgdaughters)
void AddTrackCutsSoftPi(const AliESDtrackCuts *cuts)
virtual AliESDtrackCuts * GetTrackCutsSoftPi() const
Int_t ApplyCutOnVariableD0forD0ptbin(Int_t nCutIndex, Int_t ptbin, Float_t cutVariableValue, Bool_t bCutArray[29])
Bool_t UseFilterBitD0FirstDaughter()
Int_t CheckBands(AliPID::EParticleType specie, AliPIDResponse::EDetector detector, AliAODTrack *track)
void SetNPtBinsD0forD0ptbin(Int_t nptBins)
Int_t fMinITSNclsBPlusPion
Int_t PtBinD0forD0ptbin(Double_t pt) const
Bool_t GetIsUpperCutForCutOptimization(Int_t nVariable) const
Bool_t * fIsUpperCutForCutOptimization
Bool_t * GetIsUpperCut() const
Bool_t UseFilterBitBPlusPion()
Int_t IsD0forD0ptbinSelectedMVA(TObject *obj, Int_t selectionLevel, AliAODEvent *aod, AliAODVertex *primaryVertex, Double_t bz)
Int_t fNSoftITSCutD0FirstDaughter
virtual Int_t IsSelectedPID(AliAODRecoDecayHF *rd)
Int_t fMinTPCNclsD0SecondDaughter
void SetSoftSelectionArrayITSD0SecondDaughter(const Bool_t array[7]=0)
Int_t fnPtBinsD0forD0ptbin
void SetGlobalIndexD0forD0ptbin()
Bool_t fHardSelectionArrayITSBPlusPion[7]
Int_t fnCutsForOptimization
void SetCut(Int_t nCutIndex, Int_t ptBin, AliRDHFCutsBPlustoD0Pi::EUpperCut cutDirection, Float_t cutValue)
Bool_t CheckStatus(AliAODTrack *track, TString detectors) const
Bool_t fSoftSelectionArrayITSD0FirstDaughter[7]
Double_t GetMind0D0SecondDaughter()
Float_t fMaxPtPid
cuts for pion from Bplus (AOD converted to ESD on the flight!)
void SetIsCutUsed(Int_t nCutIndex, Int_t ptbin, Bool_t isCutUsed)
void InitializeCutsForCutOptimization(Int_t nCutsForOptimization, Int_t nVariables)
AliRDHFCutsBPlustoD0Pi(const char *name="BPlustoD0PiCuts")
virtual Int_t SelectPID(AliAODTrack *track, Int_t type)
Int_t fNSoftITSCutBPlusPion
Bool_t * fIsCutUsedD0forD0ptbin
void SetSoftSelectionArrayITSBPlusPion(const Bool_t array[7]=0)
Int_t fIsSelectedPID
outcome of cuts selection
Bool_t fUseFilterBitD0SecondDaughter
Double_t fMaxAbsEtaD0FirstDaughter
Double_t InvMassD0bar() const
Int_t ApplyCutOnVariableD0forD0ptbinMVA(Int_t nCutIndex, Int_t ptbin, Float_t cutVariableValue)
Double_t fMind0D0SecondDaughter
Bool_t fUseTPCRefitD0SecondDaughter
Float_t * fCutsRD
fnVars*fnPtBins
Int_t IsBplusPionSelectedMVA(TObject *obj, Int_t selectionLevel, AliAODEvent *aod, AliAODVertex *primaryVertex, Double_t bz)
void SetHardSelectionArrayITSD0FirstDaughter(const Bool_t array[7]=0)
Double_t GetMind0D0FirstDaughter()
void SetVarsForOpt(Int_t nVars, Bool_t *forOpt)
Double_t fMinPtD0FirstDaughter
void SetVarNames(Int_t nVars, TString *varNames, Bool_t *isUpperCut)
Int_t fGlobalIndexCutOptimization
void SetCutForCutOptimization(Int_t nCutIndex, Int_t nVariable, Int_t ptBin, AliRDHFCutsBPlustoD0Pi::EUpperCut cutDirection, Float_t *cutValues)
Bool_t AreDaughtersSelected(AliAODRecoDecayHF *rd, const AliAODEvent *aod=0x0) const
void SetIsUpperCutForCutOptimization(Int_t nVariable, Bool_t isUpperCut)
Int_t GetNVarsD0forD0ptbin() const
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel, AliAODEvent *aod)
Bool_t IsPionRaw(AliAODTrack *track, TString detector) const
Int_t IsD0FromBPlusSelectedMVA(Double_t ptBPlus, TObject *obj, Int_t selectionLevel, AliAODEvent *aod, AliAODVertex *primaryVertex, Double_t bz)
Bool_t fSoftSelectionArrayITSBPlusPion[7]
Int_t GetGlobalIndexForCutOptimization(Int_t iCut, Int_t iVar, Int_t iPtBin)
Double_t GetFiducialYCut() const
void SetGlobalIndexForCutOptimization()
Int_t fMinITSNclsD0SecondDaughter
void SetPtBins(Int_t nPtBinLimits, Float_t *ptBinLimits)
void SetHardSelectionArrayITSBPlusPion(const Bool_t array[7]=0)
void SetSoftSelectionArrayITSD0FirstDaughter(const Bool_t array[7]=0)
Int_t IsD0SelectedPreRecVtxMVA(AliAODRecoDecayHF2Prong *d, AliAODTrack *pion, AliAODVertex *primaryVertex, Double_t bz, Int_t selLevel)
Double_t GetSigmaForCutOptimization(Int_t iPtBin) const
Double_t fMaxAbsEtaD0SecondDaughter
Int_t * fCutIndexForCutOptimization
Int_t GetFilterBitD0FirstDaughter()
void SetCutsForCutOptimization(Int_t glIndex, Float_t *cutsRDForCutOptimization)
Double_t fMinPtD0SecondDaughter
void SetNVarsD0forD0ptbin(Int_t nVars)
void SetPtBinsD0forD0ptbin(Int_t nPtBinLimits, Float_t *ptBinLimits)
AliRDHFCutsBPlustoD0Pi & operator=(const AliRDHFCutsBPlustoD0Pi &source)
Int_t GetCutIndexForCutOptimization(Int_t nVariable) const
Double_t CosPointingAngle() const
Int_t fnPtBins
cuts on the candidate
Float_t * fCutsRDForCutOptimization
TString * fVarNamesD0forD0ptbin
Double_t fMind0D0FirstDaughter
Double_t GetMind0BPlusPion()
AliAODPidHF * fPidHF
enable AOD049 centrality cleanup
Int_t GetNPtBinsD0forD0ptbin() const
Float_t * fCutsRDD0forD0ptbin
Int_t PtBin(Double_t pt) const
Bool_t fSoftSelectionArrayITSD0SecondDaughter[7]
void SetSigmaForCutOptimization(Double_t value, Int_t iPtBin)
void SetCutD0forD0ptbin(Int_t nCutIndex, Int_t ptBin, AliRDHFCutsBPlustoD0Pi::EUpperCut cutDirection, Float_t cutValue)
Int_t GetGlobalIndex(Int_t iVar, Int_t iPtBin) const
Int_t ApplyCutOnVariable(Int_t nCutIndex, Int_t ptbin, Float_t cutVariableValue, Bool_t bCutArray[68])
void SetCutsD0forD0ptbin(Int_t nVars, Int_t nPtBins, Float_t **cutsRDD0forD0ptbin)
Bool_t fGetCutInfo
Radius for circular PID nsigma cut.
Bool_t IsDaughterSelected(AliAODTrack *track, const AliESDVertex *primary, AliESDtrackCuts *cuts, const AliAODEvent *aod=0x0) const
Float_t * fSigmaForCutOptimization
void SetCutIndexForCutOptimization(Int_t nVariable, Int_t nCutIndex)