29 #include <TDatabasePDG.h> 30 #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" 57 fCutsRDD0forD0ptbin(0),
58 fnPtBinsD0forD0ptbin(1),
59 fnPtBinLimitsD0forD0ptbin(1),
60 fPtBinLimitsD0forD0ptbin(0),
61 fIsUpperCutD0forD0ptbin(0),
62 fIsCutUsedD0forD0ptbin(0),
63 fVarNamesD0forD0ptbin(0),
64 fCutsRDD0forDStarptbin(0),
65 fnPtBinsD0forDStarptbin(1),
66 fnPtBinLimitsD0forDStarptbin(1),
67 fPtBinLimitsD0forDStarptbin(0),
68 fIsUpperCutD0forDStarptbin(0),
69 fIsCutUsedD0forDStarptbin(0),
70 fVarNamesD0forDStarptbin(0),
71 fCutsRDDStarforDStarptbin(0),
72 fnPtBinsDStarforDStarptbin(1),
73 fnPtBinLimitsDStarforDStarptbin(1),
74 fPtBinLimitsDStarforDStarptbin(0),
75 fIsUpperCutDStarforDStarptbin(0),
76 fIsCutUsedDStarforDStarptbin(0),
77 fVarNamesDStarforDStarptbin(0)
91 varNames[iterator++]=
"inv. mass width[GeV]";
92 varNames[iterator++]=
"delta mass width [GeV]";
93 varNames[iterator++]=
"pointing angle [Cos(theta)]";
94 varNames[iterator++]=
"dca [cm]";
95 varNames[iterator++]=
"Pt D0 [GeV/c]";
96 varNames[iterator++]=
"Pt Kaon [GeV/c]";
97 varNames[iterator++]=
"Pt Pion [GeV/c]";
98 varNames[iterator++]=
"d0 D0 [cm]";
99 varNames[iterator++]=
"d0 Kaon [cm]";
100 varNames[iterator++]=
"d0 Pion [cm]";
101 varNames[iterator++]=
"d0d0 [cm^2]";
102 varNames[iterator++]=
"d0d0 XY [cm^2]";
104 varNames[iterator++]=
"angle between both daughters";
105 varNames[iterator++]=
"angle mother with first daughter";
106 varNames[iterator++]=
"angle mother with second daughter";
107 varNames[iterator++]=
"cosThetaStar";
108 varNames[iterator++]=
"vertexDistance";
109 varNames[iterator++]=
"pseudoProperDecayTime";
110 varNames[iterator++]=
"DecayTime";
111 varNames[iterator++]=
"normalizedDecayTime";
112 varNames[iterator++]=
"normDecayLength";
113 varNames[iterator++]=
"topomatic first daughter";
114 varNames[iterator++]=
"topomatic second daughter";
115 varNames[iterator++]=
"topomatic max";
116 varNames[iterator++]=
"topomatic min";
119 varNames[iterator++]=
"pointingAngleToDStar";
120 varNames[iterator++]=
"d0MotherToDStar";
121 varNames[iterator++]=
"d0FirstDaughterToDStar";
122 varNames[iterator++]=
"d0SecondDaughterToDStar";
123 varNames[iterator++]=
"impactProductToDStar";
124 varNames[iterator++]=
"impactProductXYToDStar";
125 varNames[iterator++]=
"normDecayLengthToDStar";
126 varNames[iterator++]=
"pseudoProperDecayTimeToDStar";
127 varNames[iterator++]=
"DecayTimeToDStar";
128 varNames[iterator++]=
"normalizedDecayTimeToDStar";
132 varNames[iterator++]=
"inv. mass width[GeV]";
133 varNames[iterator++]=
"delta mass width [GeV]";
134 varNames[iterator++]=
"pointing angle [Cos(theta)]";
135 varNames[iterator++]=
"dca [cm]";
136 varNames[iterator++]=
"Pt DStar [GeV/c]";
137 varNames[iterator++]=
"Pt D0 [GeV/c]";
138 varNames[iterator++]=
"Pt Pion [GeV/c]";
139 varNames[iterator++]=
"d0 DStar [cm]";
140 varNames[iterator++]=
"d0 D0 [cm]";
141 varNames[iterator++]=
"d0 Pion [cm]";
142 varNames[iterator++]=
"d0d0 [cm^2]";
143 varNames[iterator++]=
"d0d0 XY [cm^2]";
145 varNames[iterator++]=
"angle between both daughters";
146 varNames[iterator++]=
"angle mother with first daughter";
147 varNames[iterator++]=
"angle mother with second daughter";
148 varNames[iterator++]=
"cosThetaStar";
149 varNames[iterator++]=
"vertexDistance";
150 varNames[iterator++]=
"pseudoProperDecayTime";
151 varNames[iterator++]=
"DecayTime";
152 varNames[iterator++]=
"normalizedDecayTime";
153 varNames[iterator++]=
"normDecayLength";
154 varNames[iterator++]=
"topomatic first daughter";
155 varNames[iterator++]=
"topomatic second daughter";
156 varNames[iterator++]=
"topomatic max";
157 varNames[iterator++]=
"topomatic min";
161 varNames[iterator++]=
"inv. mass width[GeV]";
162 varNames[iterator++]=
"delta mass width [GeV]";
163 varNames[iterator++]=
"pointing angle [Cos(theta)]";
164 varNames[iterator++]=
"dca [cm]";
165 varNames[iterator++]=
"Pt B0 [GeV/c]";
166 varNames[iterator++]=
"Pt DStar [GeV/c]";
167 varNames[iterator++]=
"Pt Pion [GeV/c]";
168 varNames[iterator++]=
"d0 B0 [cm]";
169 varNames[iterator++]=
"d0 DStar [cm]";
170 varNames[iterator++]=
"d0 Pion [cm]";
171 varNames[iterator++]=
"d0d0 [cm^2]";
172 varNames[iterator++]=
"d0d0 XY [cm^2]";
174 varNames[iterator++]=
"angle between both daughters";
175 varNames[iterator++]=
"angle mother with first daughter";
176 varNames[iterator++]=
"angle mother with second daughter";
177 varNames[iterator++]=
"cosThetaStar";
178 varNames[iterator++]=
"vertexDistance";
179 varNames[iterator++]=
"pseudoProperDecayTime";
180 varNames[iterator++]=
"DecayTime";
181 varNames[iterator++]=
"normalizedDecayTime";
182 varNames[iterator++]=
"normDecayLength";
183 varNames[iterator++]=
"topomatic first daughter";
184 varNames[iterator++]=
"topomatic second daughter";
185 varNames[iterator++]=
"topomatic max";
186 varNames[iterator++]=
"topomatic min";
188 Bool_t isUpperCut[nvars]={0};
192 Float_t limits[2]={0,999999999.};
200 const Int_t nvarsD0forD0ptbin=25;
203 TString varNamesD0forD0ptbin[nvarsD0forD0ptbin];
207 varNamesD0forD0ptbin[iterator++]=
"inv. mass width[GeV]";
208 varNamesD0forD0ptbin[iterator++]=
"delta mass width [GeV]";
209 varNamesD0forD0ptbin[iterator++]=
"pointing angle [Cos(theta)]";
210 varNamesD0forD0ptbin[iterator++]=
"dca [cm]";
211 varNamesD0forD0ptbin[iterator++]=
"Pt D0 [GeV/c]";
212 varNamesD0forD0ptbin[iterator++]=
"Pt Kaon [GeV/c]";
213 varNamesD0forD0ptbin[iterator++]=
"Pt Pion [GeV/c]";
214 varNamesD0forD0ptbin[iterator++]=
"d0 D0 [cm]";
215 varNamesD0forD0ptbin[iterator++]=
"d0 Kaon [cm]";
216 varNamesD0forD0ptbin[iterator++]=
"d0 Pion [cm]";
217 varNamesD0forD0ptbin[iterator++]=
"d0d0 [cm^2]";
218 varNamesD0forD0ptbin[iterator++]=
"d0d0 XY [cm^2]";
220 varNamesD0forD0ptbin[iterator++]=
"angle between both daughters";
221 varNamesD0forD0ptbin[iterator++]=
"angle mother with first daughter";
222 varNamesD0forD0ptbin[iterator++]=
"angle mother with second daughter";
223 varNamesD0forD0ptbin[iterator++]=
"cosThetaStar";
224 varNamesD0forD0ptbin[iterator++]=
"vertexDistance";
225 varNamesD0forD0ptbin[iterator++]=
"pseudoProperDecayTime";
226 varNamesD0forD0ptbin[iterator++]=
"DecayTime";
227 varNamesD0forD0ptbin[iterator++]=
"normalizedDecayTime";
228 varNamesD0forD0ptbin[iterator++]=
"normDecayLength";
229 varNamesD0forD0ptbin[iterator++]=
"topomatic first daughter";
230 varNamesD0forD0ptbin[iterator++]=
"topomatic second daughter";
231 varNamesD0forD0ptbin[iterator++]=
"topomatic max";
232 varNamesD0forD0ptbin[iterator++]=
"topomatic min";
234 Bool_t isUpperCutD0forD0ptbin[nvarsD0forD0ptbin]={0};
238 Float_t limitsD0forD0ptbin[2]={0,999999999.};
246 const Int_t nvarsD0forDStarptbin=35;
249 TString varNamesD0forDStarptbin[nvarsD0forDStarptbin];
253 varNamesD0forDStarptbin[iterator++]=
"inv. mass width[GeV]";
254 varNamesD0forDStarptbin[iterator++]=
"delta mass width [GeV]";
255 varNamesD0forDStarptbin[iterator++]=
"pointing angle [Cos(theta)]";
256 varNamesD0forDStarptbin[iterator++]=
"dca [cm]";
257 varNamesD0forDStarptbin[iterator++]=
"Pt D0 [GeV/c]";
258 varNamesD0forDStarptbin[iterator++]=
"Pt Kaon [GeV/c]";
259 varNamesD0forDStarptbin[iterator++]=
"Pt Pion [GeV/c]";
260 varNamesD0forDStarptbin[iterator++]=
"d0 D0 [cm]";
261 varNamesD0forDStarptbin[iterator++]=
"d0 Kaon [cm]";
262 varNamesD0forDStarptbin[iterator++]=
"d0 Pion [cm]";
263 varNamesD0forDStarptbin[iterator++]=
"d0d0 [cm^2]";
264 varNamesD0forDStarptbin[iterator++]=
"d0d0 XY [cm^2]";
266 varNamesD0forDStarptbin[iterator++]=
"angle between both daughters";
267 varNamesD0forDStarptbin[iterator++]=
"angle mother with first daughter";
268 varNamesD0forDStarptbin[iterator++]=
"angle mother with second daughter";
269 varNamesD0forDStarptbin[iterator++]=
"cosThetaStar";
270 varNamesD0forDStarptbin[iterator++]=
"vertexDistance";
271 varNamesD0forDStarptbin[iterator++]=
"pseudoProperDecayTime";
272 varNamesD0forDStarptbin[iterator++]=
"DecayTime";
273 varNamesD0forDStarptbin[iterator++]=
"normalizedDecayTime";
274 varNamesD0forDStarptbin[iterator++]=
"normDecayLength";
275 varNamesD0forDStarptbin[iterator++]=
"topomatic first daughter";
276 varNamesD0forDStarptbin[iterator++]=
"topomatic second daughter";
277 varNamesD0forDStarptbin[iterator++]=
"topomatic max";
278 varNamesD0forDStarptbin[iterator++]=
"topomatic min";
280 varNamesD0forDStarptbin[iterator++]=
"pointingAngleToDStar";
281 varNamesD0forDStarptbin[iterator++]=
"d0MotherToDStar";
282 varNamesD0forDStarptbin[iterator++]=
"d0FirstDaughterToDStar";
283 varNamesD0forDStarptbin[iterator++]=
"d0SecondDaughterToDStar";
284 varNamesD0forDStarptbin[iterator++]=
"impactProductToDStar";
285 varNamesD0forDStarptbin[iterator++]=
"impactProductXYToDStar";
286 varNamesD0forDStarptbin[iterator++]=
"normDecayLengthToDStar";
287 varNamesD0forDStarptbin[iterator++]=
"pseudoProperDecayTimeToDStar";
288 varNamesD0forDStarptbin[iterator++]=
"DecayTimeToDStar";
289 varNamesD0forDStarptbin[iterator++]=
"normalizedDecayTimeToDStar";
291 Bool_t isUpperCutD0forDStarptbin[nvarsD0forDStarptbin]={0};
295 Float_t limitsD0forDStarptbin[2]={0,999999999.};
303 const Int_t nvarsDStarforDStarptbin=25;
306 TString varNamesDStarforDStarptbin[nvarsDStarforDStarptbin];
310 varNamesDStarforDStarptbin[iterator++]=
"inv. mass width[GeV]";
311 varNamesDStarforDStarptbin[iterator++]=
"delta mass width [GeV]";
312 varNamesDStarforDStarptbin[iterator++]=
"pointing angle [Cos(theta)]";
313 varNamesDStarforDStarptbin[iterator++]=
"dca [cm]";
314 varNamesDStarforDStarptbin[iterator++]=
"Pt DStar [GeV/c]";
315 varNamesDStarforDStarptbin[iterator++]=
"Pt D0 [GeV/c]";
316 varNamesDStarforDStarptbin[iterator++]=
"Pt Pion [GeV/c]";
317 varNamesDStarforDStarptbin[iterator++]=
"d0 DStar [cm]";
318 varNamesDStarforDStarptbin[iterator++]=
"d0 D0 [cm]";
319 varNamesDStarforDStarptbin[iterator++]=
"d0 Pion [cm]";
320 varNamesDStarforDStarptbin[iterator++]=
"d0d0 [cm^2]";
321 varNamesDStarforDStarptbin[iterator++]=
"d0d0 XY [cm^2]";
323 varNamesDStarforDStarptbin[iterator++]=
"angle between both daughters";
324 varNamesDStarforDStarptbin[iterator++]=
"angle mother with first daughter";
325 varNamesDStarforDStarptbin[iterator++]=
"angle mother with second daughter";
326 varNamesDStarforDStarptbin[iterator++]=
"cosThetaStar";
327 varNamesDStarforDStarptbin[iterator++]=
"vertexDistance";
328 varNamesDStarforDStarptbin[iterator++]=
"pseudoProperDecayTime";
329 varNamesDStarforDStarptbin[iterator++]=
"DecayTime";
330 varNamesDStarforDStarptbin[iterator++]=
"normalizedDecayTime";
331 varNamesDStarforDStarptbin[iterator++]=
"normDecayLength";
332 varNamesDStarforDStarptbin[iterator++]=
"topomatic first daughter";
333 varNamesDStarforDStarptbin[iterator++]=
"topomatic second daughter";
334 varNamesDStarforDStarptbin[iterator++]=
"topomatic max";
335 varNamesDStarforDStarptbin[iterator++]=
"topomatic min";
337 Bool_t isUpperCutDStarforDStarptbin[nvarsDStarforDStarptbin]={0};
341 Float_t limitsDStarforDStarptbin[2]={0,999999999.};
414 if(&source ==
this)
return *
this;
438 cout<<
"Cut matrice not inizialized. Exit..."<<endl;
444 cout<<
"candidateB0 null"<<endl;
450 cout<<
"candidateDStar null"<<endl;
454 AliAODTrack *candidatePion = (AliAODTrack*)candidateB0->GetDaughter(0);
456 cout<<
"candidatePion null"<<endl;
460 AliAODVertex * vertexB0 = candidateB0->GetSecondaryVtx();
462 cout<<
"vertexB0 null"<<endl;
466 AliAODVertex * primaryVertex = aod->GetPrimaryVertex();
468 cout<<
"primaryVertex null"<<endl;
473 Bool_t bPassedCut = kFALSE;
484 if(ptbin==-1)
return -1;
488 Double_t mD0PDG = TDatabasePDG::Instance()->GetParticle(421)->Mass();
489 Double_t mB0PDG = TDatabasePDG::Instance()->GetParticle(511)->Mass();
496 prongs[0] = 211; prongs[1] = 413;
497 Double_t invMassB0 = candidateB0->InvMass(2,prongs);
498 Double_t invMassDifference = TMath::Abs(mB0PDG - invMassB0);
502 Double_t dcaMother = candidateB0->GetDCA();
503 Double_t ptMother = candidateB0->Pt();
504 Double_t momentumMother = candidateB0->P();
505 Double_t ptDStar = candidateDStar->Pt();
506 Double_t ptPion = candidatePion->Pt();
508 AliExternalTrackParam motherTrack;
509 motherTrack.CopyFromVTrack(candidateB0);
511 motherTrack.PropagateToDCA(primaryVertex,bz,100.,d0z0,covd0z0);
513 Double_t d0Mother = TMath::Abs(d0[0]);
514 Double_t d0firstTrack = TMath::Abs(candidateB0->Getd0Prong(0));
515 Double_t d0secondTrack = TMath::Abs(candidateB0->Getd0Prong(1));
520 Double_t angleBetweenBothDaughters = (candidateDStar->Px() * candidatePion->Px() + candidateDStar->Py() * candidatePion->Py() + candidateDStar->Pz() * candidatePion->Pz()) /(candidateDStar->P() * candidatePion->P());
521 Double_t angleMotherFirstDaughter = (candidateB0->Px() * candidatePion->Px() + candidateB0->Py() * candidatePion->Py() + candidateB0->Pz() * candidatePion->Pz()) /(candidateB0->P() * candidatePion->P());
522 Double_t angleMotherSecondDaughter = (candidateB0->Px() * candidateDStar->Px() + candidateB0->Py() * candidateDStar->Py() + candidateB0->Pz() * candidateDStar->Pz()) /(candidateB0->P() * candidateDStar->P());
524 Double_t cosThetaStar = candidateB0->CosThetaStar(0,511,211,413);
525 Double_t vertexDistance = vertexB0->DistanceToVertex(primaryVertex);
527 Double_t pdgMassMother = TDatabasePDG::Instance()->GetParticle(511)->Mass();
528 Double_t pseudoProperDecayLength = ((vertexB0->GetX() - primaryVertex->GetX()) * candidateB0->Px() / TMath::Abs(candidateB0->Pt())) + ((vertexB0->GetY() - primaryVertex->GetY()) * candidateB0->Py() / TMath::Abs(candidateB0->Pt()));
529 Double_t pseudoProperDecayTime = pseudoProperDecayLength * pdgMassMother/ptMother;
530 Double_t decayTime = vertexDistance / (299792458 * TMath::Sqrt(1/((pdgMassMother*pdgMassMother/(momentumMother*momentumMother)) + 1)));
533 Double_t theta = candidateB0->Theta();
535 candidateB0->GetCovarianceXYZPxPyPz(covMatrix);
542 Double_t errorMomentum = covMatrix[9]*cp*cp*ct*ct
543 +covMatrix[13]*2.*cp*sp*ct*ct
544 +covMatrix[18]*2.*cp*ct*st
545 +covMatrix[14]*sp*sp*ct*ct
546 +covMatrix[19]*2.*sp*ct*st
547 +covMatrix[20]*st*st;
548 Double_t normalizedDecayTime = candidateB0->
NormalizedDecayLength() / (299792458 * TMath::Sqrt(1/((pdgMassMother*pdgMassMother*errorMomentum*errorMomentum/(momentumMother*momentumMother)) + 1)));
555 for(
Int_t ipr=0; ipr<2; ipr++)
560 if(errdiffIP>0.) normdd0=diffIP/errdiffIP;
561 if(ipr==0) dd0pr1=normdd0;
562 if(ipr==1) dd0pr2=normdd0;
564 if(TMath::Abs(dd0pr1)>TMath::Abs(dd0pr2)) {dd0max=dd0pr1; dd0min=dd0pr2;}
565 else {dd0max=dd0pr2; dd0min=dd0pr1;}
574 cutVariableValue = invMassDifference;
581 cutVariableValue = invMassDelta;
588 cutVariableValue = pointingAngle;
595 cutVariableValue = dcaMother;
602 cutVariableValue = ptMother;
609 cutVariableValue = ptDStar;
616 cutVariableValue = ptPion;
623 cutVariableValue = d0Mother;
630 cutVariableValue = d0firstTrack;
637 cutVariableValue = d0secondTrack;
644 cutVariableValue = impactProduct;
651 cutVariableValue = impactProductXY;
658 cutVariableValue = angleBetweenBothDaughters;
665 cutVariableValue = angleMotherFirstDaughter;
672 cutVariableValue = angleMotherSecondDaughter;
679 cutVariableValue = cosThetaStar;
686 cutVariableValue = vertexDistance;
693 cutVariableValue = pseudoProperDecayTime;
700 cutVariableValue = decayTime;
707 cutVariableValue = normalizedDecayTime;
714 cutVariableValue = normDecayLength;
721 cutVariableValue = dd0pr1;
728 cutVariableValue = dd0pr2;
735 cutVariableValue = dd0max;
742 cutVariableValue = dd0min;
752 if(bPassedCut==kFALSE)
757 for (
Int_t i = 60; i < 85; ++i)
759 if(bCutArray[i]==kTRUE){
777 cout<<
"Cut matrice not inizialized. Exit..."<<endl;
783 cout<<
"candidateDStar null"<<endl;
789 cout<<
"candidateD0 null"<<endl;
793 AliAODTrack *candidatePion = (AliAODTrack*)candidateDStar->GetDaughter(0);
795 cout<<
"candidatePion null"<<endl;
799 AliAODVertex * vertexDStar = candidateDStar->GetSecondaryVtx();
801 cout<<
"vertexDStar null"<<endl;
805 AliAODVertex * primaryVertex = aod->GetPrimaryVertex();
807 cout<<
"primaryVertex null"<<endl;
812 Bool_t bPassedCut = kFALSE;
824 Double_t mDSPDG = TDatabasePDG::Instance()->GetParticle(413)->Mass();
825 Double_t mD0PDG = TDatabasePDG::Instance()->GetParticle(421)->Mass();
832 prongs[0] = 211; prongs[1] = 421;
833 Double_t invMassDStar = candidateDStar->InvMass(2,prongs);
834 Double_t invMassDifference = TMath::Abs(mDSPDG - invMassDStar);
838 Double_t dcaMother = candidateDStar->GetDCA();
839 Double_t ptMother = candidateDStar->Pt();
840 Double_t momentumMother = candidateDStar->P();
842 Double_t ptPion = candidatePion->Pt();
844 AliExternalTrackParam motherTrack;
845 motherTrack.CopyFromVTrack(candidateDStar);
847 motherTrack.PropagateToDCA(primaryVertex,bz,100.,d0z0,covd0z0);
849 Double_t d0Mother = TMath::Abs(d0[0]);
850 Double_t d0firstTrack = TMath::Abs(candidateDStar->Getd0Prong(0));
851 Double_t d0secondTrack = TMath::Abs(candidateDStar->Getd0Prong(1));
856 Double_t angleBetweenBothDaughters = (candidateD0->Px() * candidatePion->Px() + candidateD0->Py() * candidatePion->Py() + candidateD0->Pz() * candidatePion->Pz()) /(candidateD0->P() * candidatePion->P());
857 Double_t angleMotherFirstDaughter = (candidateDStar->Px() * candidatePion->Px() + candidateDStar->Py() * candidatePion->Py() + candidateDStar->Pz() * candidatePion->Pz()) /(candidateDStar->P() * candidatePion->P());
858 Double_t angleMotherSecondDaughter = (candidateDStar->Px() * candidateD0->Px() + candidateDStar->Py() * candidateD0->Py() + candidateDStar->Pz() * candidateD0->Pz()) /(candidateDStar->P() * candidateD0->P());
860 Double_t cosThetaStar = candidateDStar->CosThetaStar(0,413,211,421);
861 Double_t vertexDistance = vertexDStar->DistanceToVertex(primaryVertex);
863 Double_t pdgMassMother = TDatabasePDG::Instance()->GetParticle(413)->Mass();
864 Double_t pseudoProperDecayLength = ((vertexDStar->GetX() - primaryVertex->GetX()) * candidateDStar->Px() / TMath::Abs(candidateDStar->Pt())) + ((vertexDStar->GetY() - primaryVertex->GetY()) * candidateDStar->Py() / TMath::Abs(candidateDStar->Pt()));
865 Double_t pseudoProperDecayTime = pseudoProperDecayLength * pdgMassMother/ptMother;
866 Double_t decayTime = vertexDistance / (299792458 * TMath::Sqrt(1/((pdgMassMother*pdgMassMother/(momentumMother*momentumMother)) + 1)));
868 Double_t phi = candidateDStar->Phi();
869 Double_t theta = candidateDStar->Theta();
871 candidateDStar->GetCovarianceXYZPxPyPz(covMatrix);
878 Double_t errorMomentum = covMatrix[9]*cp*cp*ct*ct
879 +covMatrix[13]*2.*cp*sp*ct*ct
880 +covMatrix[18]*2.*cp*ct*st
881 +covMatrix[14]*sp*sp*ct*ct
882 +covMatrix[19]*2.*sp*ct*st
883 +covMatrix[20]*st*st;
884 Double_t normalizedDecayTime = candidateDStar->
NormalizedDecayLength() / (299792458 * TMath::Sqrt(1/((pdgMassMother*pdgMassMother*errorMomentum*errorMomentum/(momentumMother*momentumMother)) + 1)));
891 for(
Int_t ipr=0; ipr<2; ipr++)
896 if(errdiffIP>0.) normdd0=diffIP/errdiffIP;
897 if(ipr==0) dd0pr1=normdd0;
898 if(ipr==1) dd0pr2=normdd0;
900 if(TMath::Abs(dd0pr1)>TMath::Abs(dd0pr2)) {dd0max=dd0pr1; dd0min=dd0pr2;}
901 else {dd0max=dd0pr2; dd0min=dd0pr1;}
910 cutVariableValue = invMassDifference;
917 cutVariableValue = invMassDelta;
924 cutVariableValue = pointingAngle;
931 cutVariableValue = dcaMother;
938 cutVariableValue = ptMother;
945 cutVariableValue = ptD0;
952 cutVariableValue = ptPion;
959 cutVariableValue = d0Mother;
966 cutVariableValue = d0firstTrack;
973 cutVariableValue = d0secondTrack;
980 cutVariableValue = impactProduct;
987 cutVariableValue = impactProductXY;
994 cutVariableValue = angleBetweenBothDaughters;
1001 cutVariableValue = angleMotherFirstDaughter;
1008 cutVariableValue = angleMotherSecondDaughter;
1015 cutVariableValue = cosThetaStar;
1022 cutVariableValue = vertexDistance;
1029 cutVariableValue = pseudoProperDecayTime;
1036 cutVariableValue = decayTime;
1043 cutVariableValue = normalizedDecayTime;
1050 cutVariableValue = normDecayLength;
1057 cutVariableValue = dd0pr1;
1064 cutVariableValue = dd0pr2;
1071 cutVariableValue = dd0max;
1078 cutVariableValue = dd0min;
1088 if(bPassedCut==kFALSE)
1093 for (
Int_t i = 35; i < 60; ++i)
1095 if(bCutArray[i]==kTRUE){
1113 cout<<
"Cut matrice not inizialized. Exit..."<<endl;
1118 if(!candidateDStar){
1119 cout<<
"candidateDStar null"<<endl;
1125 cout<<
"candidateD0 null"<<endl;
1129 AliAODTrack *candidatePion = (AliAODTrack*)candidateD0->GetDaughter(0);
1131 cout<<
"candidatePion null"<<endl;
1135 AliAODTrack *candidateKaon = (AliAODTrack*)candidateD0->GetDaughter(1);
1137 cout<<
"candidateKaon null"<<endl;
1141 AliAODVertex * vertexDStar = candidateDStar->GetSecondaryVtx();
1143 cout<<
"vertexDStar null"<<endl;
1147 AliAODVertex * vertexD0 = candidateD0->GetSecondaryVtx();
1149 cout<<
"vertexD0 null"<<endl;
1153 AliAODVertex * primaryVertex = aod->GetPrimaryVertex();
1155 cout<<
"primaryVertex null"<<endl;
1159 Int_t returnvalue=1;
1160 Bool_t bPassedCut = kFALSE;
1173 Double_t mD0PDG = TDatabasePDG::Instance()->GetParticle(421)->Mass();
1177 prongs[0] = 211; prongs[1] = 321;
1178 Double_t invMassD0 = candidateD0->InvMass(2,prongs);
1179 Double_t invMassDifference = TMath::Abs(mD0PDG - invMassD0);
1182 Double_t dcaMother = candidateD0->GetDCA();
1183 Double_t ptMother = candidateD0->Pt();
1184 Double_t momentumMother = candidateD0->P();
1185 Double_t ptPion = candidatePion->Pt();
1186 Double_t ptKaon = candidateKaon->Pt();
1188 AliExternalTrackParam motherTrack;
1189 motherTrack.CopyFromVTrack(candidateD0);
1191 motherTrack.PropagateToDCA(primaryVertex,bz,100.,d0z0,covd0z0);
1193 Double_t d0Mother = TMath::Abs(d0[0]);
1194 Double_t d0firstTrack = TMath::Abs(candidateD0->Getd0Prong(0));
1195 Double_t d0secondTrack = TMath::Abs(candidateD0->Getd0Prong(1));
1200 Double_t angleBetweenBothDaughters = (candidateKaon->Px() * candidatePion->Px() + candidateKaon->Py() * candidatePion->Py() + candidateKaon->Pz() * candidatePion->Pz()) /(candidateKaon->P() * candidatePion->P());
1201 Double_t angleMotherFirstDaughter = (candidateD0->Px() * candidatePion->Px() + candidateD0->Py() * candidatePion->Py() + candidateD0->Pz() * candidatePion->Pz()) /(candidateD0->P() * candidatePion->P());
1202 Double_t angleMotherSecondDaughter = (candidateD0->Px() * candidateKaon->Px() + candidateD0->Py() * candidateKaon->Py() + candidateD0->Pz() * candidateKaon->Pz()) /(candidateD0->P() * candidateKaon->P());
1204 Double_t cosThetaStar = candidateD0->CosThetaStar(0,421,211,321);
1205 Double_t vertexDistance = vertexD0->DistanceToVertex(primaryVertex);
1207 Double_t pdgMassMother = TDatabasePDG::Instance()->GetParticle(421)->Mass();
1208 Double_t pseudoProperDecayLength = ((vertexD0->GetX() - primaryVertex->GetX()) * candidateD0->Px() / TMath::Abs(candidateD0->Pt())) + ((vertexD0->GetY() - primaryVertex->GetY()) * candidateD0->Py() / TMath::Abs(candidateD0->Pt()));
1209 Double_t pseudoProperDecayTime = pseudoProperDecayLength * pdgMassMother/ptMother;
1210 Double_t decayTime = vertexDistance / (299792458 * TMath::Sqrt(1/((pdgMassMother*pdgMassMother/(momentumMother*momentumMother)) + 1)));
1213 Double_t theta = candidateD0->Theta();
1215 candidateD0->GetCovarianceXYZPxPyPz(covMatrix);
1222 Double_t errorMomentum = covMatrix[9]*cp*cp*ct*ct
1223 +covMatrix[13]*2.*cp*sp*ct*ct
1224 +covMatrix[18]*2.*cp*ct*st
1225 +covMatrix[14]*sp*sp*ct*ct
1226 +covMatrix[19]*2.*sp*ct*st
1227 +covMatrix[20]*st*st;
1228 Double_t normalizedDecayTime = candidateD0->
NormalizedDecayLength() / (299792458 * TMath::Sqrt(1/((pdgMassMother*pdgMassMother*errorMomentum*errorMomentum/(momentumMother*momentumMother)) + 1)));
1235 for(
Int_t ipr=0; ipr<2; ipr++)
1240 if(errdiffIP>0.) normdd0=diffIP/errdiffIP;
1241 if(ipr==0) dd0pr1=normdd0;
1242 if(ipr==1) dd0pr2=normdd0;
1244 if(TMath::Abs(dd0pr1)>TMath::Abs(dd0pr2)) {dd0max=dd0pr1; dd0min=dd0pr2;}
1245 else {dd0max=dd0pr2; dd0min=dd0pr1;}
1249 Int_t nCutIndex = 0;
1254 cutVariableValue = invMassDifference;
1268 cutVariableValue = pointingAngle;
1275 cutVariableValue = dcaMother;
1282 cutVariableValue = ptMother;
1289 cutVariableValue = ptKaon;
1296 cutVariableValue = ptPion;
1303 cutVariableValue = d0Mother;
1310 cutVariableValue = d0firstTrack;
1317 cutVariableValue = d0secondTrack;
1324 cutVariableValue = impactProduct;
1331 cutVariableValue = impactProductXY;
1338 cutVariableValue = angleBetweenBothDaughters;
1345 cutVariableValue = angleMotherFirstDaughter;
1352 cutVariableValue = angleMotherSecondDaughter;
1359 cutVariableValue = cosThetaStar;
1366 cutVariableValue = vertexDistance;
1373 cutVariableValue = pseudoProperDecayTime;
1380 cutVariableValue = decayTime;
1387 cutVariableValue = normalizedDecayTime;
1394 cutVariableValue = normDecayLength;
1401 cutVariableValue = dd0pr1;
1408 cutVariableValue = dd0pr2;
1415 cutVariableValue = dd0max;
1422 cutVariableValue = dd0min;
1427 AliAODRecoDecay* candidateD0toDStar = (AliAODRecoDecay*)candidateD0;
1428 AliExternalTrackParam pionD0Track;
1429 AliExternalTrackParam kaonD0Track;
1431 Double_t d0z0DSVert[2],covd0z0DSVert[3],d0DSVert[2];
1433 pionD0Track.CopyFromVTrack(candidatePion);
1434 pionD0Track.PropagateToDCA(vertexDStar,bz,100.,d0z0DSVert,covd0z0DSVert);
1435 d0DSVert[0] = d0z0DSVert[0];
1437 kaonD0Track.CopyFromVTrack(candidateKaon);
1438 kaonD0Track.PropagateToDCA(vertexDStar,bz,100.,d0z0DSVert,covd0z0DSVert);
1439 d0DSVert[1] = d0z0DSVert[0];
1441 AliExternalTrackParam D0Track;
1442 D0Track.CopyFromVTrack(candidateD0);
1443 Double_t d0z0D0DSVert[2],covd0z0D0DSVert[3],d0D0DSVert;
1444 motherTrack.PropagateToDCA(vertexDStar,bz,100.,d0z0D0DSVert,covd0z0D0DSVert);
1445 d0D0DSVert = TMath::Abs(d0z0D0DSVert[0]);
1447 Double_t impactProductToDStar = d0DSVert[0]*d0DSVert[1];
1448 Double_t impactProductXYToDStar = candidateD0toDStar->ImpParXY(vertexDStar);
1450 Double_t pointingAngleToDStar = candidateD0toDStar->CosPointingAngle(vertexDStar);
1451 Double_t d0FirstDaughterToDStar = TMath::Abs(d0DSVert[0]);
1452 Double_t d0SecondDaughterToDStar = TMath::Abs(d0DSVert[1]);
1453 Double_t normDecayLengthToDStar = candidateD0toDStar->NormalizedDecayLength(vertexDStar);
1455 Double_t pseudoProperDecayLengthDSVert = ((vertexD0->GetX() - vertexDStar->GetX()) * candidateD0->Px() / TMath::Abs(candidateD0->Pt())) + ((vertexD0->GetY() - vertexDStar->GetY()) * candidateD0->Py() / TMath::Abs(candidateD0->Pt()));
1456 Double_t pseudoProperDecayTimeToDStar = pseudoProperDecayLengthDSVert * pdgMassMother/ptMother;
1457 Double_t DecayTimeToDStar = vertexDistance / (299792458 * TMath::Sqrt(1/((pdgMassMother*pdgMassMother/(momentumMother*momentumMother)) + 1)));
1459 Double_t phiDSVert = candidateD0->Phi();
1460 Double_t thetaDSVert = candidateD0->Theta();
1462 candidateD0->GetCovarianceXYZPxPyPz(covMatrixDSVert);
1464 cp = TMath::Cos(phiDSVert);
1465 sp = TMath::Sin(phiDSVert);
1466 ct = TMath::Cos(thetaDSVert);
1467 st = TMath::Sin(thetaDSVert);
1469 errorMomentum = covMatrix[9]*cp*cp*ct*ct
1470 +covMatrix[13]*2.*cp*sp*ct*ct
1471 +covMatrix[18]*2.*cp*ct*st
1472 +covMatrix[14]*sp*sp*ct*ct
1473 +covMatrix[19]*2.*sp*ct*st
1474 +covMatrix[20]*st*st;
1475 Double_t normalizedDecayTimeToDStar = candidateD0toDStar->NormalizedDecayLength(vertexDStar) / (299792458 * TMath::Sqrt(1/((pdgMassMother*pdgMassMother*errorMomentum*errorMomentum/(momentumMother*momentumMother)) + 1)));
1479 cutVariableValue = pointingAngleToDStar;
1486 cutVariableValue = d0D0DSVert;
1493 cutVariableValue = d0FirstDaughterToDStar;
1500 cutVariableValue = d0SecondDaughterToDStar;
1507 cutVariableValue = impactProductToDStar;
1514 cutVariableValue = impactProductXYToDStar;
1521 cutVariableValue = normDecayLengthToDStar;
1528 cutVariableValue = pseudoProperDecayTimeToDStar;
1535 cutVariableValue = DecayTimeToDStar;
1542 cutVariableValue = normalizedDecayTimeToDStar;
1548 for (
Int_t i = 0; i < 35; ++i)
1550 if(bCutArray[i]==kTRUE){
1565 cout<<
"Cut matrice not inizialized. Exit..."<<endl;
1571 cout<<
"candidateD0 null"<<endl;
1575 AliAODTrack *candidatePion = (AliAODTrack*)candidateD0->GetDaughter(0);
1577 cout<<
"candidatePion null"<<endl;
1581 AliAODTrack *candidateKaon = (AliAODTrack*)candidateD0->GetDaughter(1);
1583 cout<<
"candidateKaon null"<<endl;
1587 AliAODVertex * vertexD0 = candidateD0->GetSecondaryVtx();
1589 cout<<
"vertexD0 null"<<endl;
1593 AliAODVertex * primaryVertex = aod->GetPrimaryVertex();
1595 cout<<
"primaryVertex null"<<endl;
1599 Int_t returnvalue=1;
1600 Bool_t bPassedCut = kFALSE;
1611 if(ptbin==-1)
return -1;
1614 Double_t mD0PDG = TDatabasePDG::Instance()->GetParticle(421)->Mass();
1618 prongs[0] = 211; prongs[1] = 321;
1619 Double_t invMassD0 = candidateD0->InvMass(2,prongs);
1620 Double_t invMassDifference = TMath::Abs(mD0PDG - invMassD0);
1623 Double_t dcaMother = candidateD0->GetDCA();
1624 Double_t ptMother = candidateD0->Pt();
1625 Double_t momentumMother = candidateD0->P();
1626 Double_t ptPion = candidatePion->Pt();
1627 Double_t ptKaon = candidateKaon->Pt();
1629 AliExternalTrackParam motherTrack;
1630 motherTrack.CopyFromVTrack(candidateD0);
1632 motherTrack.PropagateToDCA(primaryVertex,bz,100.,d0z0,covd0z0);
1634 Double_t d0Mother = TMath::Abs(d0[0]);
1635 Double_t d0firstTrack = TMath::Abs(candidateD0->Getd0Prong(0));
1636 Double_t d0secondTrack = TMath::Abs(candidateD0->Getd0Prong(1));
1641 Double_t angleBetweenBothDaughters = (candidateKaon->Px() * candidatePion->Px() + candidateKaon->Py() * candidatePion->Py() + candidateKaon->Pz() * candidatePion->Pz()) /(candidateKaon->P() * candidatePion->P());
1642 Double_t angleMotherFirstDaughter = (candidateD0->Px() * candidatePion->Px() + candidateD0->Py() * candidatePion->Py() + candidateD0->Pz() * candidatePion->Pz()) /(candidateD0->P() * candidatePion->P());
1643 Double_t angleMotherSecondDaughter = (candidateD0->Px() * candidateKaon->Px() + candidateD0->Py() * candidateKaon->Py() + candidateD0->Pz() * candidateKaon->Pz()) /(candidateD0->P() * candidateKaon->P());
1645 Double_t cosThetaStar = candidateD0->CosThetaStar(0,421,211,321);
1646 Double_t vertexDistance = vertexD0->DistanceToVertex(primaryVertex);
1648 Double_t pdgMassMother = TDatabasePDG::Instance()->GetParticle(421)->Mass();
1649 Double_t pseudoProperDecayLength = ((vertexD0->GetX() - primaryVertex->GetX()) * candidateD0->Px() / TMath::Abs(candidateD0->Pt())) + ((vertexD0->GetY() - primaryVertex->GetY()) * candidateD0->Py() / TMath::Abs(candidateD0->Pt()));
1650 Double_t pseudoProperDecayTime = pseudoProperDecayLength * pdgMassMother/ptMother;
1651 Double_t decayTime = vertexDistance / (299792458 * TMath::Sqrt(1/((pdgMassMother*pdgMassMother/(momentumMother*momentumMother)) + 1)));
1654 Double_t theta = candidateD0->Theta();
1656 candidateD0->GetCovarianceXYZPxPyPz(covMatrix);
1663 Double_t errorMomentum = covMatrix[9]*cp*cp*ct*ct
1664 +covMatrix[13]*2.*cp*sp*ct*ct
1665 +covMatrix[18]*2.*cp*ct*st
1666 +covMatrix[14]*sp*sp*ct*ct
1667 +covMatrix[19]*2.*sp*ct*st
1668 +covMatrix[20]*st*st;
1669 Double_t normalizedDecayTime = candidateD0->
NormalizedDecayLength() / (299792458 * TMath::Sqrt(1/((pdgMassMother*pdgMassMother*errorMomentum*errorMomentum/(momentumMother*momentumMother)) + 1)));
1676 for(
Int_t ipr=0; ipr<2; ipr++)
1681 if(errdiffIP>0.) normdd0=diffIP/errdiffIP;
1682 if(ipr==0) dd0pr1=normdd0;
1683 if(ipr==1) dd0pr2=normdd0;
1685 if(TMath::Abs(dd0pr1)>TMath::Abs(dd0pr2)) {dd0max=dd0pr1; dd0min=dd0pr2;}
1686 else {dd0max=dd0pr2; dd0min=dd0pr1;}
1690 Int_t nCutIndex = 0;
1695 cutVariableValue = invMassDifference;
1709 cutVariableValue = pointingAngle;
1716 cutVariableValue = dcaMother;
1723 cutVariableValue = ptMother;
1730 cutVariableValue = ptKaon;
1737 cutVariableValue = ptPion;
1744 cutVariableValue = d0Mother;
1751 cutVariableValue = d0firstTrack;
1758 cutVariableValue = d0secondTrack;
1765 cutVariableValue = impactProduct;
1772 cutVariableValue = impactProductXY;
1779 cutVariableValue = angleBetweenBothDaughters;
1786 cutVariableValue = angleMotherFirstDaughter;
1793 cutVariableValue = angleMotherSecondDaughter;
1800 cutVariableValue = cosThetaStar;
1807 cutVariableValue = vertexDistance;
1814 cutVariableValue = pseudoProperDecayTime;
1821 cutVariableValue = decayTime;
1828 cutVariableValue = normalizedDecayTime;
1835 cutVariableValue = normDecayLength;
1842 cutVariableValue = dd0pr1;
1849 cutVariableValue = dd0pr2;
1856 cutVariableValue = dd0max;
1863 cutVariableValue = dd0min;
1870 for (
Int_t i = 0; i < 25; ++i)
1872 if(bCutArray[i]==kTRUE){
1887 cout<<
"Cut matrice not inizialized. Exit..."<<endl;
1892 if(!candidateDStar){
1893 cout<<
"candidateDStar null"<<endl;
1899 cout<<
"candidateD0 null"<<endl;
1903 AliAODTrack *candidatePion = (AliAODTrack*)candidateD0->GetDaughter(0);
1905 cout<<
"candidatePion null"<<endl;
1909 AliAODTrack *candidateKaon = (AliAODTrack*)candidateD0->GetDaughter(1);
1911 cout<<
"candidateKaon null"<<endl;
1915 AliAODVertex * vertexDStar = candidateDStar->GetSecondaryVtx();
1917 cout<<
"vertexDStar null"<<endl;
1921 AliAODVertex * vertexD0 = candidateD0->GetSecondaryVtx();
1923 cout<<
"vertexD0 null"<<endl;
1927 AliAODVertex * primaryVertex = aod->GetPrimaryVertex();
1929 cout<<
"primaryVertex null"<<endl;
1933 Int_t returnvalue=1;
1934 Bool_t bPassedCut = kFALSE;
1945 if(ptbin==-1)
return -1;
1947 Double_t mD0PDG = TDatabasePDG::Instance()->GetParticle(421)->Mass();
1951 prongs[0] = 211; prongs[1] = 321;
1952 Double_t invMassD0 = candidateD0->InvMass(2,prongs);
1953 Double_t invMassDifference = TMath::Abs(mD0PDG - invMassD0);
1956 Double_t dcaMother = candidateD0->GetDCA();
1957 Double_t ptMother = candidateD0->Pt();
1958 Double_t momentumMother = candidateD0->P();
1959 Double_t ptPion = candidatePion->Pt();
1960 Double_t ptKaon = candidateKaon->Pt();
1962 AliExternalTrackParam motherTrack;
1963 motherTrack.CopyFromVTrack(candidateD0);
1965 motherTrack.PropagateToDCA(primaryVertex,bz,100.,d0z0,covd0z0);
1967 Double_t d0Mother = TMath::Abs(d0[0]);
1968 Double_t d0firstTrack = TMath::Abs(candidateD0->Getd0Prong(0));
1969 Double_t d0secondTrack = TMath::Abs(candidateD0->Getd0Prong(1));
1974 Double_t angleBetweenBothDaughters = (candidateKaon->Px() * candidatePion->Px() + candidateKaon->Py() * candidatePion->Py() + candidateKaon->Pz() * candidatePion->Pz()) /(candidateKaon->P() * candidatePion->P());
1975 Double_t angleMotherFirstDaughter = (candidateD0->Px() * candidatePion->Px() + candidateD0->Py() * candidatePion->Py() + candidateD0->Pz() * candidatePion->Pz()) /(candidateD0->P() * candidatePion->P());
1976 Double_t angleMotherSecondDaughter = (candidateD0->Px() * candidateKaon->Px() + candidateD0->Py() * candidateKaon->Py() + candidateD0->Pz() * candidateKaon->Pz()) /(candidateD0->P() * candidateKaon->P());
1978 Double_t cosThetaStar = candidateD0->CosThetaStar(0,421,211,321);
1979 Double_t vertexDistance = vertexD0->DistanceToVertex(primaryVertex);
1981 Double_t pdgMassMother = TDatabasePDG::Instance()->GetParticle(421)->Mass();
1982 Double_t pseudoProperDecayLength = ((vertexD0->GetX() - primaryVertex->GetX()) * candidateD0->Px() / TMath::Abs(candidateD0->Pt())) + ((vertexD0->GetY() - primaryVertex->GetY()) * candidateD0->Py() / TMath::Abs(candidateD0->Pt()));
1983 Double_t pseudoProperDecayTime = pseudoProperDecayLength * pdgMassMother/ptMother;
1984 Double_t decayTime = vertexDistance / (299792458 * TMath::Sqrt(1/((pdgMassMother*pdgMassMother/(momentumMother*momentumMother)) + 1)));
1987 Double_t theta = candidateD0->Theta();
1989 candidateD0->GetCovarianceXYZPxPyPz(covMatrix);
1996 Double_t errorMomentum = covMatrix[9]*cp*cp*ct*ct
1997 +covMatrix[13]*2.*cp*sp*ct*ct
1998 +covMatrix[18]*2.*cp*ct*st
1999 +covMatrix[14]*sp*sp*ct*ct
2000 +covMatrix[19]*2.*sp*ct*st
2001 +covMatrix[20]*st*st;
2002 Double_t normalizedDecayTime = candidateD0->
NormalizedDecayLength() / (299792458 * TMath::Sqrt(1/((pdgMassMother*pdgMassMother*errorMomentum*errorMomentum/(momentumMother*momentumMother)) + 1)));
2009 for(
Int_t ipr=0; ipr<2; ipr++)
2014 if(errdiffIP>0.) normdd0=diffIP/errdiffIP;
2015 if(ipr==0) dd0pr1=normdd0;
2016 if(ipr==1) dd0pr2=normdd0;
2018 if(TMath::Abs(dd0pr1)>TMath::Abs(dd0pr2)) {dd0max=dd0pr1; dd0min=dd0pr2;}
2019 else {dd0max=dd0pr2; dd0min=dd0pr1;}
2023 Int_t nCutIndex = 0;
2028 cutVariableValue = invMassDifference;
2042 cutVariableValue = pointingAngle;
2049 cutVariableValue = dcaMother;
2056 cutVariableValue = ptMother;
2063 cutVariableValue = ptKaon;
2070 cutVariableValue = ptPion;
2077 cutVariableValue = d0Mother;
2084 cutVariableValue = d0firstTrack;
2091 cutVariableValue = d0secondTrack;
2098 cutVariableValue = impactProduct;
2105 cutVariableValue = impactProductXY;
2112 cutVariableValue = angleBetweenBothDaughters;
2119 cutVariableValue = angleMotherFirstDaughter;
2126 cutVariableValue = angleMotherSecondDaughter;
2133 cutVariableValue = cosThetaStar;
2140 cutVariableValue = vertexDistance;
2147 cutVariableValue = pseudoProperDecayTime;
2154 cutVariableValue = decayTime;
2161 cutVariableValue = normalizedDecayTime;
2168 cutVariableValue = normDecayLength;
2175 cutVariableValue = dd0pr1;
2182 cutVariableValue = dd0pr2;
2189 cutVariableValue = dd0max;
2196 cutVariableValue = dd0min;
2201 AliAODRecoDecay* candidateD0toDStar = (AliAODRecoDecay*)candidateD0;
2202 AliExternalTrackParam pionD0Track;
2203 AliExternalTrackParam kaonD0Track;
2205 Double_t d0z0DSVert[2],covd0z0DSVert[3],d0DSVert[2];
2207 pionD0Track.CopyFromVTrack(candidatePion);
2208 pionD0Track.PropagateToDCA(vertexDStar,bz,100.,d0z0DSVert,covd0z0DSVert);
2209 d0DSVert[0] = d0z0DSVert[0];
2211 kaonD0Track.CopyFromVTrack(candidateKaon);
2212 kaonD0Track.PropagateToDCA(vertexDStar,bz,100.,d0z0DSVert,covd0z0DSVert);
2213 d0DSVert[1] = d0z0DSVert[0];
2215 AliExternalTrackParam D0Track;
2216 D0Track.CopyFromVTrack(candidateD0);
2217 Double_t d0z0D0DSVert[2],covd0z0D0DSVert[3],d0D0DSVert;
2218 motherTrack.PropagateToDCA(vertexDStar,bz,100.,d0z0D0DSVert,covd0z0D0DSVert);
2219 d0D0DSVert = TMath::Abs(d0z0D0DSVert[0]);
2221 Double_t impactProductToDStar = d0DSVert[0]*d0DSVert[1];
2222 Double_t impactProductXYToDStar = candidateD0toDStar->ImpParXY(vertexDStar);
2224 Double_t pointingAngleToDStar = candidateD0toDStar->CosPointingAngle(vertexDStar);
2225 Double_t d0FirstDaughterToDStar = TMath::Abs(d0DSVert[0]);
2226 Double_t d0SecondDaughterToDStar = TMath::Abs(d0DSVert[1]);
2227 Double_t normDecayLengthToDStar = candidateD0toDStar->NormalizedDecayLength(vertexDStar);
2229 Double_t pseudoProperDecayLengthDSVert = ((vertexD0->GetX() - vertexDStar->GetX()) * candidateD0->Px() / TMath::Abs(candidateD0->Pt())) + ((vertexD0->GetY() - vertexDStar->GetY()) * candidateD0->Py() / TMath::Abs(candidateD0->Pt()));
2230 Double_t pseudoProperDecayTimeToDStar = pseudoProperDecayLengthDSVert * pdgMassMother/ptMother;
2231 Double_t DecayTimeToDStar = vertexDistance / (299792458 * TMath::Sqrt(1/((pdgMassMother*pdgMassMother/(momentumMother*momentumMother)) + 1)));
2233 Double_t phiDSVert = candidateD0->Phi();
2234 Double_t thetaDSVert = candidateD0->Theta();
2236 candidateD0->GetCovarianceXYZPxPyPz(covMatrixDSVert);
2238 cp = TMath::Cos(phiDSVert);
2239 sp = TMath::Sin(phiDSVert);
2240 ct = TMath::Cos(thetaDSVert);
2241 st = TMath::Sin(thetaDSVert);
2243 errorMomentum = covMatrix[9]*cp*cp*ct*ct
2244 +covMatrix[13]*2.*cp*sp*ct*ct
2245 +covMatrix[18]*2.*cp*ct*st
2246 +covMatrix[14]*sp*sp*ct*ct
2247 +covMatrix[19]*2.*sp*ct*st
2248 +covMatrix[20]*st*st;
2249 Double_t normalizedDecayTimeToDStar = candidateD0toDStar->NormalizedDecayLength(vertexDStar) / (299792458 * TMath::Sqrt(1/((pdgMassMother*pdgMassMother*errorMomentum*errorMomentum/(momentumMother*momentumMother)) + 1)));
2253 cutVariableValue = pointingAngleToDStar;
2260 cutVariableValue = d0D0DSVert;
2267 cutVariableValue = d0FirstDaughterToDStar;
2274 cutVariableValue = d0SecondDaughterToDStar;
2281 cutVariableValue = impactProductToDStar;
2288 cutVariableValue = impactProductXYToDStar;
2295 cutVariableValue = normDecayLengthToDStar;
2302 cutVariableValue = pseudoProperDecayTimeToDStar;
2309 cutVariableValue = DecayTimeToDStar;
2316 cutVariableValue = normalizedDecayTimeToDStar;
2322 for (
Int_t i = 0; i < 35; ++i)
2324 if(bCutArray[i]==kTRUE){
2339 cout<<
"Cut matrice not inizialized. Exit..."<<endl;
2344 if(!candidateDStar){
2345 cout<<
"candidateDStar null"<<endl;
2351 cout<<
"candidateD0 null"<<endl;
2355 AliAODTrack *candidatePion = (AliAODTrack*)candidateDStar->GetDaughter(0);
2357 cout<<
"candidatePion null"<<endl;
2361 AliAODVertex * vertexDStar = candidateDStar->GetSecondaryVtx();
2363 cout<<
"vertexDStar null"<<endl;
2367 AliAODVertex * primaryVertex = aod->GetPrimaryVertex();
2369 cout<<
"primaryVertex null"<<endl;
2373 Int_t returnvalue=1;
2374 Bool_t bPassedCut = kFALSE;
2384 if(ptbin==-1)
return -1;
2387 Double_t mDSPDG = TDatabasePDG::Instance()->GetParticle(413)->Mass();
2388 Double_t mD0PDG = TDatabasePDG::Instance()->GetParticle(421)->Mass();
2395 prongs[0] = 211; prongs[1] = 421;
2396 Double_t invMassDStar = candidateDStar->InvMass(2,prongs);
2397 Double_t invMassDifference = TMath::Abs(mDSPDG - invMassDStar);
2401 Double_t dcaMother = candidateDStar->GetDCA();
2402 Double_t ptMother = candidateDStar->Pt();
2403 Double_t momentumMother = candidateDStar->P();
2405 Double_t ptPion = candidatePion->Pt();
2407 AliExternalTrackParam motherTrack;
2408 motherTrack.CopyFromVTrack(candidateDStar);
2410 motherTrack.PropagateToDCA(primaryVertex,bz,100.,d0z0,covd0z0);
2412 Double_t d0Mother = TMath::Abs(d0[0]);
2413 Double_t d0firstTrack = TMath::Abs(candidateDStar->Getd0Prong(0));
2414 Double_t d0secondTrack = TMath::Abs(candidateDStar->Getd0Prong(1));
2419 Double_t angleBetweenBothDaughters = (candidateD0->Px() * candidatePion->Px() + candidateD0->Py() * candidatePion->Py() + candidateD0->Pz() * candidatePion->Pz()) /(candidateD0->P() * candidatePion->P());
2420 Double_t angleMotherFirstDaughter = (candidateDStar->Px() * candidatePion->Px() + candidateDStar->Py() * candidatePion->Py() + candidateDStar->Pz() * candidatePion->Pz()) /(candidateDStar->P() * candidatePion->P());
2421 Double_t angleMotherSecondDaughter = (candidateDStar->Px() * candidateD0->Px() + candidateDStar->Py() * candidateD0->Py() + candidateDStar->Pz() * candidateD0->Pz()) /(candidateDStar->P() * candidateD0->P());
2423 Double_t cosThetaStar = candidateDStar->CosThetaStar(0,413,211,421);
2424 Double_t vertexDistance = vertexDStar->DistanceToVertex(primaryVertex);
2426 Double_t pdgMassMother = TDatabasePDG::Instance()->GetParticle(413)->Mass();
2427 Double_t pseudoProperDecayLength = ((vertexDStar->GetX() - primaryVertex->GetX()) * candidateDStar->Px() / TMath::Abs(candidateDStar->Pt())) + ((vertexDStar->GetY() - primaryVertex->GetY()) * candidateDStar->Py() / TMath::Abs(candidateDStar->Pt()));
2428 Double_t pseudoProperDecayTime = pseudoProperDecayLength * pdgMassMother/ptMother;
2429 Double_t decayTime = vertexDistance / (299792458 * TMath::Sqrt(1/((pdgMassMother*pdgMassMother/(momentumMother*momentumMother)) + 1)));
2431 Double_t phi = candidateDStar->Phi();
2432 Double_t theta = candidateDStar->Theta();
2434 candidateDStar->GetCovarianceXYZPxPyPz(covMatrix);
2441 Double_t errorMomentum = covMatrix[9]*cp*cp*ct*ct
2442 +covMatrix[13]*2.*cp*sp*ct*ct
2443 +covMatrix[18]*2.*cp*ct*st
2444 +covMatrix[14]*sp*sp*ct*ct
2445 +covMatrix[19]*2.*sp*ct*st
2446 +covMatrix[20]*st*st;
2447 Double_t normalizedDecayTime = candidateDStar->
NormalizedDecayLength() / (299792458 * TMath::Sqrt(1/((pdgMassMother*pdgMassMother*errorMomentum*errorMomentum/(momentumMother*momentumMother)) + 1)));
2454 for(
Int_t ipr=0; ipr<2; ipr++)
2459 if(errdiffIP>0.) normdd0=diffIP/errdiffIP;
2460 if(ipr==0) dd0pr1=normdd0;
2461 if(ipr==1) dd0pr2=normdd0;
2463 if(TMath::Abs(dd0pr1)>TMath::Abs(dd0pr2)) {dd0max=dd0pr1; dd0min=dd0pr2;}
2464 else {dd0max=dd0pr2; dd0min=dd0pr1;}
2468 Int_t nCutIndex = 0;
2473 cutVariableValue = invMassDifference;
2480 cutVariableValue = invMassDelta;
2487 cutVariableValue = pointingAngle;
2494 cutVariableValue = dcaMother;
2501 cutVariableValue = ptMother;
2508 cutVariableValue = ptD0;
2515 cutVariableValue = ptPion;
2522 cutVariableValue = d0Mother;
2529 cutVariableValue = d0firstTrack;
2536 cutVariableValue = d0secondTrack;
2543 cutVariableValue = impactProduct;
2550 cutVariableValue = impactProductXY;
2557 cutVariableValue = angleBetweenBothDaughters;
2564 cutVariableValue = angleMotherFirstDaughter;
2571 cutVariableValue = angleMotherSecondDaughter;
2578 cutVariableValue = cosThetaStar;
2585 cutVariableValue = vertexDistance;
2592 cutVariableValue = pseudoProperDecayTime;
2599 cutVariableValue = decayTime;
2606 cutVariableValue = normalizedDecayTime;
2613 cutVariableValue = normDecayLength;
2620 cutVariableValue = dd0pr1;
2627 cutVariableValue = dd0pr2;
2634 cutVariableValue = dd0max;
2641 cutVariableValue = dd0min;
2647 for (
Int_t i = 0; i < 25; ++i)
2649 if(bCutArray[i]==kTRUE){
2740 Bool_t TPCon=TMath::Abs(2)>1e-4?kTRUE:kFALSE;
2741 Bool_t TOFon=TMath::Abs(3)>1e-4?kTRUE:kFALSE;
2765 isParticle = isTPC&&isTOF;
2777 for (
Int_t i=0; i<5; i++) {
2778 if (prob[i]>max) {k=i; max=prob[i];}
2780 isParticle =
Bool_t(k==type);
2783 if (match == 10 || match == 11) {
2787 isParticle = checkTPC >= 0 && checkTOF >= 0 ? kTRUE : kFALSE;
2789 isParticle = isParticle && checkTPC+checkTOF >= 1 ? kTRUE : kFALSE;
2803 if (TPCok != -1 && TOFok != -1) {
2805 isParticle = TMath::Sqrt(nSigmaTPC*nSigmaTPC + nSigmaTOF*nSigmaTOF) <= radius ? kTRUE : kFALSE;
2810 isParticle = nSigmaTPC <= radius ? kTRUE : kFALSE;
2813 isParticle = nSigmaTOF <= radius ? kTRUE : kFALSE;
2831 e[2]=DStar->EProng(0,211);
2834 Double_t invMassDStar = TMath::Sqrt(esum*esum-DStar->P()*DStar->P());
2838 return invMassDStar - invMassD0;
2850 e[0]=DStar->EProng(0,211);
2853 e[3]=B0->EProng(0,211);
2855 Double_t esum = e[0]+e[1]+e[2]+e[3];
2856 Double_t invMassB0 = TMath::Sqrt(esum*esum-B0->P()*B0->P());
2864 return invMassB0 - invMassD0;
2881 AliFatal(
"exiting");
2885 AliFatal(
"exiting");
2899 cout<<
"Overflow, exit..."<<endl;
2932 printf(
"Changing the pt bins\n");
2936 cout<<
"Warning: ptBinLimits dimension "<<nPtBinLimits<<
" != nPtBins+1 ("<<
fnPtBinsD0forD0ptbin+1<<
")\nSetting nPtBins to "<<nPtBinLimits-1<<endl;
2965 AliFatal(
"exiting");
2969 AliFatal(
"exiting");
2982 cout<<
"Overflow, exit..."<<endl;
3014 printf(
"Changing the pt bins\n");
3018 cout<<
"Warning: ptBinLimits dimension "<<nPtBinLimits<<
" != nPtBins+1 ("<<
fnPtBinsD0forDStarptbin+1<<
")\nSetting nPtBins to "<<nPtBinLimits-1<<endl;
3048 AliFatal(
"exiting");
3052 AliFatal(
"exiting");
3065 cout<<
"Overflow, exit..."<<endl;
3097 printf(
"Changing the pt bins\n");
3101 cout<<
"Warning: ptBinLimits dimension "<<nPtBinLimits<<
" != nPtBins+1 ("<<
fnPtBinsDStarforDStarptbin+1<<
")\nSetting nPtBins to "<<nPtBinLimits-1<<endl;
3126 if(bCut == kTRUE) {bCutArray[nCutIndex] = 1;
return 0;}
3144 if(bCut == kTRUE) {bCutArray[nCutIndex] = 1;
return 0;}
3161 if(bCut == kTRUE) {bCutArray[nCutIndex] = 1;
return 0;}
3178 if(bCut == kTRUE) {bCutArray[nCutIndex] = 1;
return 0;}
3198 for(
Int_t iv=0; iv<nVars; iv++) {
3221 for(
Int_t iv=0; iv<nVars; iv++) {
3244 for(
Int_t iv=0; iv<nVars; iv++) {
3274 cout<<
"Overflow, exit..."<<endl;
3306 cout<<
"Overflow, exit..."<<endl;
3336 cout<<
"Overflow, exit..."<<endl;
3367 cout<<
"Overflow, exit..."<<endl;
Int_t fIsSelectedCuts
fix the daughter track references
Int_t fnPtBinsD0forD0ptbin
void SetVarNamesDStarforDStarptbin(Int_t nVars, TString *varNames, Bool_t *isUpperCut)
Double_t NormalizedDecayLength() const
Int_t GetGlobalIndexDStarforDStarptbin(Int_t iVar, Int_t iPtBin) const
Bool_t GetIsUpperCutDStarforDStarptbin(Int_t nCutIndex)
virtual Int_t SelectPID(AliAODTrack *track, Int_t type)
void Getd0MeasMinusExpProng(Int_t ip, Double_t magf, Double_t &d0diff, Double_t &errd0diff) const
Int_t GetnSigmaTOF(AliAODTrack *track, Int_t species, Double_t &sigma) const
void SetNPtBinsD0forD0ptbin(Int_t nptBins)
void SetNPtBinsD0forDStarptbin(Int_t nptBins)
void SetCutsD0forDStarptbin(Int_t nVars, Int_t nPtBins, Float_t **cutsRDD0forDStarptbin)
Float_t * fCutsRDDStarforDStarptbin
Float_t * fCutsRDD0forD0ptbin
virtual Int_t IsSelectedPID(AliAODRecoDecayHF *rd)
void SetCutsDStarforDStarptbin(Int_t nVars, Int_t nPtBins, Float_t **cutsRDDStarforDStarptbin)
Bool_t IsKaonRaw(AliAODTrack *track, TString detector) const
Int_t fGlobalIndexDStarforDStarptbin
Int_t fnPtBinsDStarforDStarptbin
Bool_t GetIsCutUsedD0forD0ptbin(Int_t nCutIndex, Int_t ptbin)
Int_t GetnSigmaTPC(AliAODTrack *track, Int_t species, Double_t &sigma) const
Int_t GetNVarsDStarforDStarptbin() const
Bool_t GetIsCutUsed(Int_t nCutIndex, Int_t ptbin)
Double_t ImpParXY() const
Int_t IsDStarFromB0Selected(Double_t pt, TObject *obj, Int_t selectionLevel, AliAODEvent *aod, Bool_t *bCutArray)
Int_t ApplyCutOnVariableDStarforDStarptbin(Int_t nCutIndex, Int_t ptbin, Float_t cutVariableValue, Bool_t bCutArray[25])
Bool_t GetIsUpperCutD0forD0ptbin(Int_t nCutIndex)
void SetNVars(Int_t nVars)
Int_t PtBinDStarforDStarptbin(Double_t pt) const
Bool_t * fIsCutUsedDStarforDStarptbin
void SetPtBinsDStarforDStarptbin(Int_t nPtBinLimits, Float_t *ptBinLimits)
void SetCutsD0forD0ptbin(Int_t nVars, Int_t nPtBins, Float_t **cutsRDD0forD0ptbin)
Int_t IsD0forD0ptbinSelected(TObject *obj, Int_t selectionLevel, AliAODEvent *aod, Bool_t *bCutArray)
virtual ~AliRDHFCutsB0toDStarPi()
Double_t InvMassD0() const
Bool_t * fIsUpperCutD0forD0ptbin
Double_t Prodd0d0() const
TString * fVarNamesDStarforDStarptbin
void SetCutD0forD0ptbin(Int_t nCutIndex, Int_t ptBin, AliRDHFCutsB0toDStarPi::EUpperCut cutDirection, Float_t cutValue)
AliRDHFCuts & operator=(const AliRDHFCuts &source)
void SetNVarsD0forDStarptbin(Int_t nVars)
void SetNVarsD0forD0ptbin(Int_t nVars)
Int_t PtBinD0forDStarptbin(Double_t pt) const
Double_t DeltaInvMassDStarKpipi(AliAODRecoCascadeHF *DStar) const
void SetPtBinsD0forD0ptbin(Int_t nPtBinLimits, Float_t *ptBinLimits)
void SetGlobalIndexDStarforDStarptbin()
Bool_t * fIsCutUsedD0forD0ptbin
AliRDHFCutsB0toDStarPi(const char *name="CutsB0toDStarPi")
Bool_t GetIsCutUsedD0forDStarptbin(Int_t nCutIndex, Int_t ptbin)
Int_t CheckBands(AliPID::EParticleType specie, AliPIDResponse::EDetector detector, AliAODTrack *track)
Bool_t * GetIsUpperCut() const
Int_t ApplyCutOnVariableD0forD0ptbin(Int_t nCutIndex, Int_t ptbin, Float_t cutVariableValue, Bool_t bCutArray[25])
void SetCut(Int_t nCutIndex, Int_t ptBin, AliRDHFCutsB0toDStarPi::EUpperCut cutDirection, Float_t cutValue)
Int_t fnPtBinsD0forDStarptbin
void SetGlobalIndexD0forD0ptbin()
Bool_t * fIsUpperCutDStarforDStarptbin
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel, AliAODEvent *aod, Bool_t *bCutArray)
Int_t ApplyCutOnVariable(Int_t nCutIndex, Int_t ptbin, Float_t cutVariableValue, Bool_t bCutArray[85])
TString * fVarNamesD0forD0ptbin
void SetPtBinsD0forDStarptbin(Int_t nPtBinLimits, Float_t *ptBinLimits)
Bool_t * fIsUpperCutD0forDStarptbin
AliRDHFCutsB0toDStarPi & operator=(const AliRDHFCutsB0toDStarPi &source)
Int_t ApplyCutOnVariableD0forDStarptbin(Int_t nCutIndex, Int_t ptbin, Float_t cutVariableValue, Bool_t bCutArray[35])
Bool_t CheckStatus(AliAODTrack *track, TString detectors) const
Int_t IsDStarforDStarptbinSelected(TObject *obj, Int_t selectionLevel, AliAODEvent *aod, Bool_t *bCutArray)
Int_t fnVarsDStarforDStarptbin
Int_t GetNPtBinsD0forD0ptbin() const
void SetNVarsDStarforDStarptbin(Int_t nVars)
Int_t fIsSelectedPID
outcome of cuts selection
Bool_t GetIsCutUsedDStarforDStarptbin(Int_t nCutIndex, Int_t ptbin)
void SetCutD0forDStarptbin(Int_t nCutIndex, Int_t ptBin, AliRDHFCutsB0toDStarPi::EUpperCut cutDirection, Float_t cutValue)
Float_t * fCutsRDD0forDStarptbin
virtual Bool_t IsInFiducialAcceptance(Double_t pt, Double_t y) const
Float_t * fCutsRD
fnVars*fnPtBins
Float_t * fPtBinLimitsDStarforDStarptbin
Float_t * fPtBinLimitsD0forDStarptbin
Int_t fnPtBinLimitsDStarforDStarptbin
void SetGlobalIndexD0forDStarptbin()
void SetVarsForOpt(Int_t nVars, Bool_t *forOpt)
void SetVarNames(Int_t nVars, TString *varNames, Bool_t *isUpperCut)
Int_t fGlobalIndexD0forDStarptbin
Bool_t GetIsUpperCutD0forDStarptbin(Int_t nCutIndex)
Int_t GetNVarsD0forD0ptbin() const
Int_t IsD0FromDStarSelected(Double_t pt, TObject *obj, Int_t selectionLevel, AliAODEvent *aod, Bool_t *bCutArray)
Bool_t IsPionRaw(AliAODTrack *track, TString detector) const
Int_t fnPtBinLimitsD0forD0ptbin
Int_t PtBinD0forD0ptbin(Double_t pt) const
void SetVarNamesD0forDStarptbin(Int_t nVars, TString *varNames, Bool_t *isUpperCut)
void SetVarNamesD0forD0ptbin(Int_t nVars, TString *varNames, Bool_t *isUpperCut)
Bool_t * fIsCutUsedD0forDStarptbin
virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d, Float_t *vars, Int_t nvars, Int_t *pdgdaughters)
Int_t GetGlobalIndexD0forD0ptbin(Int_t iVar, Int_t iPtBin) const
Float_t * fPtBinLimitsD0forD0ptbin
void SetCutDStarforDStarptbin(Int_t nCutIndex, Int_t ptBin, AliRDHFCutsB0toDStarPi::EUpperCut cutDirection, Float_t cutValue)
Int_t GetNPtBinsDStarforDStarptbin() const
void SetPtBins(Int_t nPtBinLimits, Float_t *ptBinLimits)
void SetNPtBinsDStarforDStarptbin(Int_t nptBins)
Int_t GetGlobalIndexD0forDStarptbin(Int_t iVar, Int_t iPtBin) const
Double_t DeltaInvMassB0Kpipipi(AliAODRecoCascadeHF *B0) const
Int_t GetNVarsD0forDStarptbin() const
Int_t IsD0forDStarptbinSelected(TObject *obj, Int_t selectionLevel, AliAODEvent *aod, Bool_t *bCutArray)
Int_t GetNPtBinsD0forDStarptbin() const
Int_t fnPtBinLimitsD0forDStarptbin
Double_t CosPointingAngle() const
Int_t fnPtBins
cuts on the candidate
TString * fVarNamesD0forDStarptbin
Bool_t fGetCutInfo
Radius for circular PID nsigma cut.
Int_t fGlobalIndexD0forD0ptbin
AliAODRecoDecayHF2Prong * Get2Prong() const
AliAODPidHF * fPidHF
enable AOD049 centrality cleanup
Int_t PtBin(Double_t pt) const
Int_t GetGlobalIndex(Int_t iVar, Int_t iPtBin) const
Int_t fnVarsD0forDStarptbin