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 first daughter [GeV/c]";
97 varNames[iterator++]=
"Pt second daughter [GeV/c]";
98 varNames[iterator++]=
"d0 D0 [cm]";
99 varNames[iterator++]=
"d0 first daughter [cm]";
100 varNames[iterator++]=
"d0 second daughter [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 first daughter [GeV/c]";
213 varNamesD0forD0ptbin[iterator++]=
"Pt second daughter [GeV/c]";
214 varNamesD0forD0ptbin[iterator++]=
"d0 D0 [cm]";
215 varNamesD0forD0ptbin[iterator++]=
"d0 first daughter [cm]";
216 varNamesD0forD0ptbin[iterator++]=
"d0 second daughter [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 first daughter [GeV/c]";
259 varNamesD0forDStarptbin[iterator++]=
"Pt second daughter [GeV/c]";
260 varNamesD0forDStarptbin[iterator++]=
"d0 D0 [cm]";
261 varNamesD0forDStarptbin[iterator++]=
"d0 first daughter [cm]";
262 varNamesD0forDStarptbin[iterator++]=
"d0 second daughter [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();
1176 Int_t chargeDStar = candidateDStar->Charge();
1183 else if (chargeDStar==-1)
1190 cout <<
"Wrong charge DStar." << endl;
1193 Double_t invMassD0 = candidateD0->InvMass(2,prongs);
1194 Double_t invMassDifference = TMath::Abs(mD0PDG - invMassD0);
1197 Double_t dcaMother = candidateD0->GetDCA();
1198 Double_t ptMother = candidateD0->Pt();
1199 Double_t momentumMother = candidateD0->P();
1200 Double_t ptPion = candidatePion->Pt();
1201 Double_t ptKaon = candidateKaon->Pt();
1203 AliExternalTrackParam motherTrack;
1204 motherTrack.CopyFromVTrack(candidateD0);
1206 motherTrack.PropagateToDCA(primaryVertex,bz,100.,d0z0,covd0z0);
1208 Double_t d0Mother = TMath::Abs(d0[0]);
1209 Double_t d0firstTrack = TMath::Abs(candidateD0->Getd0Prong(0));
1210 Double_t d0secondTrack = TMath::Abs(candidateD0->Getd0Prong(1));
1215 Double_t angleBetweenBothDaughters = (candidateKaon->Px() * candidatePion->Px() + candidateKaon->Py() * candidatePion->Py() + candidateKaon->Pz() * candidatePion->Pz()) /(candidateKaon->P() * candidatePion->P());
1216 Double_t angleMotherFirstDaughter = (candidateD0->Px() * candidatePion->Px() + candidateD0->Py() * candidatePion->Py() + candidateD0->Pz() * candidatePion->Pz()) /(candidateD0->P() * candidatePion->P());
1217 Double_t angleMotherSecondDaughter = (candidateD0->Px() * candidateKaon->Px() + candidateD0->Py() * candidateKaon->Py() + candidateD0->Pz() * candidateKaon->Pz()) /(candidateD0->P() * candidateKaon->P());
1219 Double_t cosThetaStar = candidateD0->CosThetaStar(0,421,211,321);
1220 Double_t vertexDistance = vertexD0->DistanceToVertex(primaryVertex);
1222 Double_t pdgMassMother = TDatabasePDG::Instance()->GetParticle(421)->Mass();
1223 Double_t pseudoProperDecayLength = ((vertexD0->GetX() - primaryVertex->GetX()) * candidateD0->Px() / TMath::Abs(candidateD0->Pt())) + ((vertexD0->GetY() - primaryVertex->GetY()) * candidateD0->Py() / TMath::Abs(candidateD0->Pt()));
1224 Double_t pseudoProperDecayTime = pseudoProperDecayLength * pdgMassMother/ptMother;
1225 Double_t decayTime = vertexDistance / (299792458 * TMath::Sqrt(1/((pdgMassMother*pdgMassMother/(momentumMother*momentumMother)) + 1)));
1228 Double_t theta = candidateD0->Theta();
1230 candidateD0->GetCovarianceXYZPxPyPz(covMatrix);
1237 Double_t errorMomentum = covMatrix[9]*cp*cp*ct*ct
1238 +covMatrix[13]*2.*cp*sp*ct*ct
1239 +covMatrix[18]*2.*cp*ct*st
1240 +covMatrix[14]*sp*sp*ct*ct
1241 +covMatrix[19]*2.*sp*ct*st
1242 +covMatrix[20]*st*st;
1243 Double_t normalizedDecayTime = candidateD0->
NormalizedDecayLength() / (299792458 * TMath::Sqrt(1/((pdgMassMother*pdgMassMother*errorMomentum*errorMomentum/(momentumMother*momentumMother)) + 1)));
1250 for(
Int_t ipr=0; ipr<2; ipr++)
1255 if(errdiffIP>0.) normdd0=diffIP/errdiffIP;
1256 if(ipr==0) dd0pr1=normdd0;
1257 if(ipr==1) dd0pr2=normdd0;
1259 if(TMath::Abs(dd0pr1)>TMath::Abs(dd0pr2)) {dd0max=dd0pr1; dd0min=dd0pr2;}
1260 else {dd0max=dd0pr2; dd0min=dd0pr1;}
1264 Int_t nCutIndex = 0;
1269 cutVariableValue = invMassDifference;
1283 cutVariableValue = pointingAngle;
1290 cutVariableValue = dcaMother;
1297 cutVariableValue = ptMother;
1304 cutVariableValue = ptKaon;
1311 cutVariableValue = ptPion;
1318 cutVariableValue = d0Mother;
1325 cutVariableValue = d0firstTrack;
1332 cutVariableValue = d0secondTrack;
1339 cutVariableValue = impactProduct;
1346 cutVariableValue = impactProductXY;
1353 cutVariableValue = angleBetweenBothDaughters;
1360 cutVariableValue = angleMotherFirstDaughter;
1367 cutVariableValue = angleMotherSecondDaughter;
1374 cutVariableValue = cosThetaStar;
1381 cutVariableValue = vertexDistance;
1388 cutVariableValue = pseudoProperDecayTime;
1395 cutVariableValue = decayTime;
1402 cutVariableValue = normalizedDecayTime;
1409 cutVariableValue = normDecayLength;
1416 cutVariableValue = dd0pr1;
1423 cutVariableValue = dd0pr2;
1430 cutVariableValue = dd0max;
1437 cutVariableValue = dd0min;
1442 AliAODRecoDecay* candidateD0toDStar = (AliAODRecoDecay*)candidateD0;
1443 AliExternalTrackParam pionD0Track;
1444 AliExternalTrackParam kaonD0Track;
1446 Double_t d0z0DSVert[2],covd0z0DSVert[3],d0DSVert[2];
1448 pionD0Track.CopyFromVTrack(candidatePion);
1449 pionD0Track.PropagateToDCA(vertexDStar,bz,100.,d0z0DSVert,covd0z0DSVert);
1450 d0DSVert[0] = d0z0DSVert[0];
1452 kaonD0Track.CopyFromVTrack(candidateKaon);
1453 kaonD0Track.PropagateToDCA(vertexDStar,bz,100.,d0z0DSVert,covd0z0DSVert);
1454 d0DSVert[1] = d0z0DSVert[0];
1456 AliExternalTrackParam D0Track;
1457 D0Track.CopyFromVTrack(candidateD0);
1458 Double_t d0z0D0DSVert[2],covd0z0D0DSVert[3],d0D0DSVert;
1459 motherTrack.PropagateToDCA(vertexDStar,bz,100.,d0z0D0DSVert,covd0z0D0DSVert);
1460 d0D0DSVert = TMath::Abs(d0z0D0DSVert[0]);
1462 Double_t impactProductToDStar = d0DSVert[0]*d0DSVert[1];
1463 Double_t impactProductXYToDStar = candidateD0toDStar->ImpParXY(vertexDStar);
1465 Double_t pointingAngleToDStar = candidateD0toDStar->CosPointingAngle(vertexDStar);
1466 Double_t d0FirstDaughterToDStar = TMath::Abs(d0DSVert[0]);
1467 Double_t d0SecondDaughterToDStar = TMath::Abs(d0DSVert[1]);
1468 Double_t normDecayLengthToDStar = candidateD0toDStar->NormalizedDecayLength(vertexDStar);
1470 Double_t pseudoProperDecayLengthDSVert = ((vertexD0->GetX() - vertexDStar->GetX()) * candidateD0->Px() / TMath::Abs(candidateD0->Pt())) + ((vertexD0->GetY() - vertexDStar->GetY()) * candidateD0->Py() / TMath::Abs(candidateD0->Pt()));
1471 Double_t pseudoProperDecayTimeToDStar = pseudoProperDecayLengthDSVert * pdgMassMother/ptMother;
1472 Double_t DecayTimeToDStar = vertexDistance / (299792458 * TMath::Sqrt(1/((pdgMassMother*pdgMassMother/(momentumMother*momentumMother)) + 1)));
1474 Double_t phiDSVert = candidateD0->Phi();
1475 Double_t thetaDSVert = candidateD0->Theta();
1477 candidateD0->GetCovarianceXYZPxPyPz(covMatrixDSVert);
1479 cp = TMath::Cos(phiDSVert);
1480 sp = TMath::Sin(phiDSVert);
1481 ct = TMath::Cos(thetaDSVert);
1482 st = TMath::Sin(thetaDSVert);
1484 errorMomentum = covMatrix[9]*cp*cp*ct*ct
1485 +covMatrix[13]*2.*cp*sp*ct*ct
1486 +covMatrix[18]*2.*cp*ct*st
1487 +covMatrix[14]*sp*sp*ct*ct
1488 +covMatrix[19]*2.*sp*ct*st
1489 +covMatrix[20]*st*st;
1490 Double_t normalizedDecayTimeToDStar = candidateD0toDStar->NormalizedDecayLength(vertexDStar) / (299792458 * TMath::Sqrt(1/((pdgMassMother*pdgMassMother*errorMomentum*errorMomentum/(momentumMother*momentumMother)) + 1)));
1494 cutVariableValue = pointingAngleToDStar;
1501 cutVariableValue = d0D0DSVert;
1508 cutVariableValue = d0FirstDaughterToDStar;
1515 cutVariableValue = d0SecondDaughterToDStar;
1522 cutVariableValue = impactProductToDStar;
1529 cutVariableValue = impactProductXYToDStar;
1536 cutVariableValue = normDecayLengthToDStar;
1543 cutVariableValue = pseudoProperDecayTimeToDStar;
1550 cutVariableValue = DecayTimeToDStar;
1557 cutVariableValue = normalizedDecayTimeToDStar;
1563 for (
Int_t i = 0; i < 35; ++i)
1565 if(bCutArray[i]==kTRUE){
1580 cout<<
"Cut matrice not inizialized. Exit..."<<endl;
1586 cout<<
"candidateD0 null"<<endl;
1590 AliAODTrack *candidatePion = (AliAODTrack*)candidateD0->GetDaughter(0);
1592 cout<<
"candidatePion null"<<endl;
1596 AliAODTrack *candidateKaon = (AliAODTrack*)candidateD0->GetDaughter(1);
1598 cout<<
"candidateKaon null"<<endl;
1602 AliAODVertex * vertexD0 = candidateD0->GetSecondaryVtx();
1604 cout<<
"vertexD0 null"<<endl;
1608 AliAODVertex * primaryVertex = aod->GetPrimaryVertex();
1610 cout<<
"primaryVertex null"<<endl;
1614 Int_t returnvalue=1;
1615 Bool_t bPassedCut = kFALSE;
1626 if(ptbin==-1)
return -1;
1629 Double_t mD0PDG = TDatabasePDG::Instance()->GetParticle(421)->Mass();
1633 prongs[0] = 211; prongs[1] = 321;
1634 Double_t invMassD0 = candidateD0->InvMass(2,prongs);
1635 Double_t invMassDifference = TMath::Abs(mD0PDG - invMassD0);
1638 Double_t dcaMother = candidateD0->GetDCA();
1639 Double_t ptMother = candidateD0->Pt();
1640 Double_t momentumMother = candidateD0->P();
1641 Double_t ptPion = candidatePion->Pt();
1642 Double_t ptKaon = candidateKaon->Pt();
1644 AliExternalTrackParam motherTrack;
1645 motherTrack.CopyFromVTrack(candidateD0);
1647 motherTrack.PropagateToDCA(primaryVertex,bz,100.,d0z0,covd0z0);
1649 Double_t d0Mother = TMath::Abs(d0[0]);
1650 Double_t d0firstTrack = TMath::Abs(candidateD0->Getd0Prong(0));
1651 Double_t d0secondTrack = TMath::Abs(candidateD0->Getd0Prong(1));
1656 Double_t angleBetweenBothDaughters = (candidateKaon->Px() * candidatePion->Px() + candidateKaon->Py() * candidatePion->Py() + candidateKaon->Pz() * candidatePion->Pz()) /(candidateKaon->P() * candidatePion->P());
1657 Double_t angleMotherFirstDaughter = (candidateD0->Px() * candidatePion->Px() + candidateD0->Py() * candidatePion->Py() + candidateD0->Pz() * candidatePion->Pz()) /(candidateD0->P() * candidatePion->P());
1658 Double_t angleMotherSecondDaughter = (candidateD0->Px() * candidateKaon->Px() + candidateD0->Py() * candidateKaon->Py() + candidateD0->Pz() * candidateKaon->Pz()) /(candidateD0->P() * candidateKaon->P());
1660 Double_t cosThetaStar = candidateD0->CosThetaStar(0,421,211,321);
1661 Double_t vertexDistance = vertexD0->DistanceToVertex(primaryVertex);
1663 Double_t pdgMassMother = TDatabasePDG::Instance()->GetParticle(421)->Mass();
1664 Double_t pseudoProperDecayLength = ((vertexD0->GetX() - primaryVertex->GetX()) * candidateD0->Px() / TMath::Abs(candidateD0->Pt())) + ((vertexD0->GetY() - primaryVertex->GetY()) * candidateD0->Py() / TMath::Abs(candidateD0->Pt()));
1665 Double_t pseudoProperDecayTime = pseudoProperDecayLength * pdgMassMother/ptMother;
1666 Double_t decayTime = vertexDistance / (299792458 * TMath::Sqrt(1/((pdgMassMother*pdgMassMother/(momentumMother*momentumMother)) + 1)));
1669 Double_t theta = candidateD0->Theta();
1671 candidateD0->GetCovarianceXYZPxPyPz(covMatrix);
1678 Double_t errorMomentum = covMatrix[9]*cp*cp*ct*ct
1679 +covMatrix[13]*2.*cp*sp*ct*ct
1680 +covMatrix[18]*2.*cp*ct*st
1681 +covMatrix[14]*sp*sp*ct*ct
1682 +covMatrix[19]*2.*sp*ct*st
1683 +covMatrix[20]*st*st;
1684 Double_t normalizedDecayTime = candidateD0->
NormalizedDecayLength() / (299792458 * TMath::Sqrt(1/((pdgMassMother*pdgMassMother*errorMomentum*errorMomentum/(momentumMother*momentumMother)) + 1)));
1691 for(
Int_t ipr=0; ipr<2; ipr++)
1696 if(errdiffIP>0.) normdd0=diffIP/errdiffIP;
1697 if(ipr==0) dd0pr1=normdd0;
1698 if(ipr==1) dd0pr2=normdd0;
1700 if(TMath::Abs(dd0pr1)>TMath::Abs(dd0pr2)) {dd0max=dd0pr1; dd0min=dd0pr2;}
1701 else {dd0max=dd0pr2; dd0min=dd0pr1;}
1705 Int_t nCutIndex = 0;
1710 cutVariableValue = invMassDifference;
1724 cutVariableValue = pointingAngle;
1731 cutVariableValue = dcaMother;
1738 cutVariableValue = ptMother;
1745 cutVariableValue = ptKaon;
1752 cutVariableValue = ptPion;
1759 cutVariableValue = d0Mother;
1766 cutVariableValue = d0firstTrack;
1773 cutVariableValue = d0secondTrack;
1780 cutVariableValue = impactProduct;
1787 cutVariableValue = impactProductXY;
1794 cutVariableValue = angleBetweenBothDaughters;
1801 cutVariableValue = angleMotherFirstDaughter;
1808 cutVariableValue = angleMotherSecondDaughter;
1815 cutVariableValue = cosThetaStar;
1822 cutVariableValue = vertexDistance;
1829 cutVariableValue = pseudoProperDecayTime;
1836 cutVariableValue = decayTime;
1843 cutVariableValue = normalizedDecayTime;
1850 cutVariableValue = normDecayLength;
1857 cutVariableValue = dd0pr1;
1864 cutVariableValue = dd0pr2;
1871 cutVariableValue = dd0max;
1878 cutVariableValue = dd0min;
1885 for (
Int_t i = 0; i < 25; ++i)
1887 if(bCutArray[i]==kTRUE){
1902 cout<<
"Cut matrice not inizialized. Exit..."<<endl;
1907 if(!candidateDStar){
1908 cout<<
"candidateDStar null"<<endl;
1914 cout<<
"candidateD0 null"<<endl;
1918 AliAODTrack *candidatePion = (AliAODTrack*)candidateD0->GetDaughter(0);
1920 cout<<
"candidatePion null"<<endl;
1924 AliAODTrack *candidateKaon = (AliAODTrack*)candidateD0->GetDaughter(1);
1926 cout<<
"candidateKaon null"<<endl;
1930 AliAODVertex * vertexDStar = candidateDStar->GetSecondaryVtx();
1932 cout<<
"vertexDStar null"<<endl;
1936 AliAODVertex * vertexD0 = candidateD0->GetSecondaryVtx();
1938 cout<<
"vertexD0 null"<<endl;
1942 AliAODVertex * primaryVertex = aod->GetPrimaryVertex();
1944 cout<<
"primaryVertex null"<<endl;
1948 Int_t returnvalue=1;
1949 Bool_t bPassedCut = kFALSE;
1960 if(ptbin==-1)
return -1;
1962 Double_t mD0PDG = TDatabasePDG::Instance()->GetParticle(421)->Mass();
1966 prongs[0] = 211; prongs[1] = 321;
1967 Double_t invMassD0 = candidateD0->InvMass(2,prongs);
1968 Double_t invMassDifference = TMath::Abs(mD0PDG - invMassD0);
1971 Double_t dcaMother = candidateD0->GetDCA();
1972 Double_t ptMother = candidateD0->Pt();
1973 Double_t momentumMother = candidateD0->P();
1974 Double_t ptPion = candidatePion->Pt();
1975 Double_t ptKaon = candidateKaon->Pt();
1977 AliExternalTrackParam motherTrack;
1978 motherTrack.CopyFromVTrack(candidateD0);
1980 motherTrack.PropagateToDCA(primaryVertex,bz,100.,d0z0,covd0z0);
1982 Double_t d0Mother = TMath::Abs(d0[0]);
1983 Double_t d0firstTrack = TMath::Abs(candidateD0->Getd0Prong(0));
1984 Double_t d0secondTrack = TMath::Abs(candidateD0->Getd0Prong(1));
1989 Double_t angleBetweenBothDaughters = (candidateKaon->Px() * candidatePion->Px() + candidateKaon->Py() * candidatePion->Py() + candidateKaon->Pz() * candidatePion->Pz()) /(candidateKaon->P() * candidatePion->P());
1990 Double_t angleMotherFirstDaughter = (candidateD0->Px() * candidatePion->Px() + candidateD0->Py() * candidatePion->Py() + candidateD0->Pz() * candidatePion->Pz()) /(candidateD0->P() * candidatePion->P());
1991 Double_t angleMotherSecondDaughter = (candidateD0->Px() * candidateKaon->Px() + candidateD0->Py() * candidateKaon->Py() + candidateD0->Pz() * candidateKaon->Pz()) /(candidateD0->P() * candidateKaon->P());
1993 Double_t cosThetaStar = candidateD0->CosThetaStar(0,421,211,321);
1994 Double_t vertexDistance = vertexD0->DistanceToVertex(primaryVertex);
1996 Double_t pdgMassMother = TDatabasePDG::Instance()->GetParticle(421)->Mass();
1997 Double_t pseudoProperDecayLength = ((vertexD0->GetX() - primaryVertex->GetX()) * candidateD0->Px() / TMath::Abs(candidateD0->Pt())) + ((vertexD0->GetY() - primaryVertex->GetY()) * candidateD0->Py() / TMath::Abs(candidateD0->Pt()));
1998 Double_t pseudoProperDecayTime = pseudoProperDecayLength * pdgMassMother/ptMother;
1999 Double_t decayTime = vertexDistance / (299792458 * TMath::Sqrt(1/((pdgMassMother*pdgMassMother/(momentumMother*momentumMother)) + 1)));
2002 Double_t theta = candidateD0->Theta();
2004 candidateD0->GetCovarianceXYZPxPyPz(covMatrix);
2011 Double_t errorMomentum = covMatrix[9]*cp*cp*ct*ct
2012 +covMatrix[13]*2.*cp*sp*ct*ct
2013 +covMatrix[18]*2.*cp*ct*st
2014 +covMatrix[14]*sp*sp*ct*ct
2015 +covMatrix[19]*2.*sp*ct*st
2016 +covMatrix[20]*st*st;
2017 Double_t normalizedDecayTime = candidateD0->
NormalizedDecayLength() / (299792458 * TMath::Sqrt(1/((pdgMassMother*pdgMassMother*errorMomentum*errorMomentum/(momentumMother*momentumMother)) + 1)));
2024 for(
Int_t ipr=0; ipr<2; ipr++)
2029 if(errdiffIP>0.) normdd0=diffIP/errdiffIP;
2030 if(ipr==0) dd0pr1=normdd0;
2031 if(ipr==1) dd0pr2=normdd0;
2033 if(TMath::Abs(dd0pr1)>TMath::Abs(dd0pr2)) {dd0max=dd0pr1; dd0min=dd0pr2;}
2034 else {dd0max=dd0pr2; dd0min=dd0pr1;}
2038 Int_t nCutIndex = 0;
2043 cutVariableValue = invMassDifference;
2057 cutVariableValue = pointingAngle;
2064 cutVariableValue = dcaMother;
2071 cutVariableValue = ptMother;
2078 cutVariableValue = ptKaon;
2085 cutVariableValue = ptPion;
2092 cutVariableValue = d0Mother;
2099 cutVariableValue = d0firstTrack;
2106 cutVariableValue = d0secondTrack;
2113 cutVariableValue = impactProduct;
2120 cutVariableValue = impactProductXY;
2127 cutVariableValue = angleBetweenBothDaughters;
2134 cutVariableValue = angleMotherFirstDaughter;
2141 cutVariableValue = angleMotherSecondDaughter;
2148 cutVariableValue = cosThetaStar;
2155 cutVariableValue = vertexDistance;
2162 cutVariableValue = pseudoProperDecayTime;
2169 cutVariableValue = decayTime;
2176 cutVariableValue = normalizedDecayTime;
2183 cutVariableValue = normDecayLength;
2190 cutVariableValue = dd0pr1;
2197 cutVariableValue = dd0pr2;
2204 cutVariableValue = dd0max;
2211 cutVariableValue = dd0min;
2216 AliAODRecoDecay* candidateD0toDStar = (AliAODRecoDecay*)candidateD0;
2217 AliExternalTrackParam pionD0Track;
2218 AliExternalTrackParam kaonD0Track;
2220 Double_t d0z0DSVert[2],covd0z0DSVert[3],d0DSVert[2];
2222 pionD0Track.CopyFromVTrack(candidatePion);
2223 pionD0Track.PropagateToDCA(vertexDStar,bz,100.,d0z0DSVert,covd0z0DSVert);
2224 d0DSVert[0] = d0z0DSVert[0];
2226 kaonD0Track.CopyFromVTrack(candidateKaon);
2227 kaonD0Track.PropagateToDCA(vertexDStar,bz,100.,d0z0DSVert,covd0z0DSVert);
2228 d0DSVert[1] = d0z0DSVert[0];
2230 AliExternalTrackParam D0Track;
2231 D0Track.CopyFromVTrack(candidateD0);
2232 Double_t d0z0D0DSVert[2],covd0z0D0DSVert[3],d0D0DSVert;
2233 motherTrack.PropagateToDCA(vertexDStar,bz,100.,d0z0D0DSVert,covd0z0D0DSVert);
2234 d0D0DSVert = TMath::Abs(d0z0D0DSVert[0]);
2236 Double_t impactProductToDStar = d0DSVert[0]*d0DSVert[1];
2237 Double_t impactProductXYToDStar = candidateD0toDStar->ImpParXY(vertexDStar);
2239 Double_t pointingAngleToDStar = candidateD0toDStar->CosPointingAngle(vertexDStar);
2240 Double_t d0FirstDaughterToDStar = TMath::Abs(d0DSVert[0]);
2241 Double_t d0SecondDaughterToDStar = TMath::Abs(d0DSVert[1]);
2242 Double_t normDecayLengthToDStar = candidateD0toDStar->NormalizedDecayLength(vertexDStar);
2244 Double_t pseudoProperDecayLengthDSVert = ((vertexD0->GetX() - vertexDStar->GetX()) * candidateD0->Px() / TMath::Abs(candidateD0->Pt())) + ((vertexD0->GetY() - vertexDStar->GetY()) * candidateD0->Py() / TMath::Abs(candidateD0->Pt()));
2245 Double_t pseudoProperDecayTimeToDStar = pseudoProperDecayLengthDSVert * pdgMassMother/ptMother;
2246 Double_t DecayTimeToDStar = vertexDistance / (299792458 * TMath::Sqrt(1/((pdgMassMother*pdgMassMother/(momentumMother*momentumMother)) + 1)));
2248 Double_t phiDSVert = candidateD0->Phi();
2249 Double_t thetaDSVert = candidateD0->Theta();
2251 candidateD0->GetCovarianceXYZPxPyPz(covMatrixDSVert);
2253 cp = TMath::Cos(phiDSVert);
2254 sp = TMath::Sin(phiDSVert);
2255 ct = TMath::Cos(thetaDSVert);
2256 st = TMath::Sin(thetaDSVert);
2258 errorMomentum = covMatrix[9]*cp*cp*ct*ct
2259 +covMatrix[13]*2.*cp*sp*ct*ct
2260 +covMatrix[18]*2.*cp*ct*st
2261 +covMatrix[14]*sp*sp*ct*ct
2262 +covMatrix[19]*2.*sp*ct*st
2263 +covMatrix[20]*st*st;
2264 Double_t normalizedDecayTimeToDStar = candidateD0toDStar->NormalizedDecayLength(vertexDStar) / (299792458 * TMath::Sqrt(1/((pdgMassMother*pdgMassMother*errorMomentum*errorMomentum/(momentumMother*momentumMother)) + 1)));
2268 cutVariableValue = pointingAngleToDStar;
2275 cutVariableValue = d0D0DSVert;
2282 cutVariableValue = d0FirstDaughterToDStar;
2289 cutVariableValue = d0SecondDaughterToDStar;
2296 cutVariableValue = impactProductToDStar;
2303 cutVariableValue = impactProductXYToDStar;
2310 cutVariableValue = normDecayLengthToDStar;
2317 cutVariableValue = pseudoProperDecayTimeToDStar;
2324 cutVariableValue = DecayTimeToDStar;
2331 cutVariableValue = normalizedDecayTimeToDStar;
2337 for (
Int_t i = 0; i < 35; ++i)
2339 if(bCutArray[i]==kTRUE){
2354 cout<<
"Cut matrice not inizialized. Exit..."<<endl;
2359 if(!candidateDStar){
2360 cout<<
"candidateDStar null"<<endl;
2366 cout<<
"candidateD0 null"<<endl;
2370 AliAODTrack *candidatePion = (AliAODTrack*)candidateDStar->GetDaughter(0);
2372 cout<<
"candidatePion null"<<endl;
2376 AliAODVertex * vertexDStar = candidateDStar->GetSecondaryVtx();
2378 cout<<
"vertexDStar null"<<endl;
2382 AliAODVertex * primaryVertex = aod->GetPrimaryVertex();
2384 cout<<
"primaryVertex null"<<endl;
2388 Int_t returnvalue=1;
2389 Bool_t bPassedCut = kFALSE;
2399 if(ptbin==-1)
return -1;
2402 Double_t mDSPDG = TDatabasePDG::Instance()->GetParticle(413)->Mass();
2403 Double_t mD0PDG = TDatabasePDG::Instance()->GetParticle(421)->Mass();
2410 prongs[0] = 211; prongs[1] = 421;
2411 Double_t invMassDStar = candidateDStar->InvMass(2,prongs);
2412 Double_t invMassDifference = TMath::Abs(mDSPDG - invMassDStar);
2416 Double_t dcaMother = candidateDStar->GetDCA();
2417 Double_t ptMother = candidateDStar->Pt();
2418 Double_t momentumMother = candidateDStar->P();
2420 Double_t ptPion = candidatePion->Pt();
2422 AliExternalTrackParam motherTrack;
2423 motherTrack.CopyFromVTrack(candidateDStar);
2425 motherTrack.PropagateToDCA(primaryVertex,bz,100.,d0z0,covd0z0);
2427 Double_t d0Mother = TMath::Abs(d0[0]);
2428 Double_t d0firstTrack = TMath::Abs(candidateDStar->Getd0Prong(0));
2429 Double_t d0secondTrack = TMath::Abs(candidateDStar->Getd0Prong(1));
2434 Double_t angleBetweenBothDaughters = (candidateD0->Px() * candidatePion->Px() + candidateD0->Py() * candidatePion->Py() + candidateD0->Pz() * candidatePion->Pz()) /(candidateD0->P() * candidatePion->P());
2435 Double_t angleMotherFirstDaughter = (candidateDStar->Px() * candidatePion->Px() + candidateDStar->Py() * candidatePion->Py() + candidateDStar->Pz() * candidatePion->Pz()) /(candidateDStar->P() * candidatePion->P());
2436 Double_t angleMotherSecondDaughter = (candidateDStar->Px() * candidateD0->Px() + candidateDStar->Py() * candidateD0->Py() + candidateDStar->Pz() * candidateD0->Pz()) /(candidateDStar->P() * candidateD0->P());
2438 Double_t cosThetaStar = candidateDStar->CosThetaStar(0,413,211,421);
2439 Double_t vertexDistance = vertexDStar->DistanceToVertex(primaryVertex);
2441 Double_t pdgMassMother = TDatabasePDG::Instance()->GetParticle(413)->Mass();
2442 Double_t pseudoProperDecayLength = ((vertexDStar->GetX() - primaryVertex->GetX()) * candidateDStar->Px() / TMath::Abs(candidateDStar->Pt())) + ((vertexDStar->GetY() - primaryVertex->GetY()) * candidateDStar->Py() / TMath::Abs(candidateDStar->Pt()));
2443 Double_t pseudoProperDecayTime = pseudoProperDecayLength * pdgMassMother/ptMother;
2444 Double_t decayTime = vertexDistance / (299792458 * TMath::Sqrt(1/((pdgMassMother*pdgMassMother/(momentumMother*momentumMother)) + 1)));
2446 Double_t phi = candidateDStar->Phi();
2447 Double_t theta = candidateDStar->Theta();
2449 candidateDStar->GetCovarianceXYZPxPyPz(covMatrix);
2456 Double_t errorMomentum = covMatrix[9]*cp*cp*ct*ct
2457 +covMatrix[13]*2.*cp*sp*ct*ct
2458 +covMatrix[18]*2.*cp*ct*st
2459 +covMatrix[14]*sp*sp*ct*ct
2460 +covMatrix[19]*2.*sp*ct*st
2461 +covMatrix[20]*st*st;
2462 Double_t normalizedDecayTime = candidateDStar->
NormalizedDecayLength() / (299792458 * TMath::Sqrt(1/((pdgMassMother*pdgMassMother*errorMomentum*errorMomentum/(momentumMother*momentumMother)) + 1)));
2469 for(
Int_t ipr=0; ipr<2; ipr++)
2474 if(errdiffIP>0.) normdd0=diffIP/errdiffIP;
2475 if(ipr==0) dd0pr1=normdd0;
2476 if(ipr==1) dd0pr2=normdd0;
2478 if(TMath::Abs(dd0pr1)>TMath::Abs(dd0pr2)) {dd0max=dd0pr1; dd0min=dd0pr2;}
2479 else {dd0max=dd0pr2; dd0min=dd0pr1;}
2483 Int_t nCutIndex = 0;
2488 cutVariableValue = invMassDifference;
2495 cutVariableValue = invMassDelta;
2502 cutVariableValue = pointingAngle;
2509 cutVariableValue = dcaMother;
2516 cutVariableValue = ptMother;
2523 cutVariableValue = ptD0;
2530 cutVariableValue = ptPion;
2537 cutVariableValue = d0Mother;
2544 cutVariableValue = d0firstTrack;
2551 cutVariableValue = d0secondTrack;
2558 cutVariableValue = impactProduct;
2565 cutVariableValue = impactProductXY;
2572 cutVariableValue = angleBetweenBothDaughters;
2579 cutVariableValue = angleMotherFirstDaughter;
2586 cutVariableValue = angleMotherSecondDaughter;
2593 cutVariableValue = cosThetaStar;
2600 cutVariableValue = vertexDistance;
2607 cutVariableValue = pseudoProperDecayTime;
2614 cutVariableValue = decayTime;
2621 cutVariableValue = normalizedDecayTime;
2628 cutVariableValue = normDecayLength;
2635 cutVariableValue = dd0pr1;
2642 cutVariableValue = dd0pr2;
2649 cutVariableValue = dd0max;
2656 cutVariableValue = dd0min;
2662 for (
Int_t i = 0; i < 25; ++i)
2664 if(bCutArray[i]==kTRUE){
2755 Bool_t TPCon=TMath::Abs(2)>1e-4?kTRUE:kFALSE;
2756 Bool_t TOFon=TMath::Abs(3)>1e-4?kTRUE:kFALSE;
2780 isParticle = isTPC&&isTOF;
2792 for (
Int_t i=0; i<5; i++) {
2793 if (prob[i]>max) {k=i; max=prob[i];}
2795 isParticle =
Bool_t(k==type);
2798 if (match == 10 || match == 11) {
2802 isParticle = checkTPC >= 0 && checkTOF >= 0 ? kTRUE : kFALSE;
2804 isParticle = isParticle && checkTPC+checkTOF >= 1 ? kTRUE : kFALSE;
2818 if (TPCok != -1 && TOFok != -1) {
2820 isParticle = TMath::Sqrt(nSigmaTPC*nSigmaTPC + nSigmaTOF*nSigmaTOF) <= radius ? kTRUE : kFALSE;
2825 isParticle = nSigmaTPC <= radius ? kTRUE : kFALSE;
2828 isParticle = nSigmaTOF <= radius ? kTRUE : kFALSE;
2843 Int_t chargeDStar = DStar->Charge();
2853 else if (chargeDStar==-1)
2862 cout <<
"Wrong charge DStar." << endl;
2865 e[2]=DStar->EProng(0,211);
2868 Double_t invMassDStar = TMath::Sqrt(esum*esum-DStar->P()*DStar->P());
2871 return invMassDStar - invMassD0;
2881 Int_t chargeDStar = DStar->Charge();
2891 else if (chargeDStar==-1)
2900 cout <<
"Wrong charge DStar." << endl;
2903 e[0]=DStar->EProng(0,211);
2904 e[3]=B0->EProng(0,211);
2906 Double_t esum = e[0]+e[1]+e[2]+e[3];
2907 Double_t invMassB0 = TMath::Sqrt(esum*esum-B0->P()*B0->P());
2911 return invMassB0 - invMassD0;
2928 AliFatal(
"exiting");
2932 AliFatal(
"exiting");
2946 cout<<
"Overflow, exit..."<<endl;
2979 printf(
"Changing the pt bins\n");
2983 cout<<
"Warning: ptBinLimits dimension "<<nPtBinLimits<<
" != nPtBins+1 ("<<
fnPtBinsD0forD0ptbin+1<<
")\nSetting nPtBins to "<<nPtBinLimits-1<<endl;
3012 AliFatal(
"exiting");
3016 AliFatal(
"exiting");
3029 cout<<
"Overflow, exit..."<<endl;
3061 printf(
"Changing the pt bins\n");
3065 cout<<
"Warning: ptBinLimits dimension "<<nPtBinLimits<<
" != nPtBins+1 ("<<
fnPtBinsD0forDStarptbin+1<<
")\nSetting nPtBins to "<<nPtBinLimits-1<<endl;
3095 AliFatal(
"exiting");
3099 AliFatal(
"exiting");
3112 cout<<
"Overflow, exit..."<<endl;
3144 printf(
"Changing the pt bins\n");
3148 cout<<
"Warning: ptBinLimits dimension "<<nPtBinLimits<<
" != nPtBins+1 ("<<
fnPtBinsDStarforDStarptbin+1<<
")\nSetting nPtBins to "<<nPtBinLimits-1<<endl;
3173 if(bCut == kTRUE) {bCutArray[nCutIndex] = 1;
return 0;}
3191 if(bCut == kTRUE) {bCutArray[nCutIndex] = 1;
return 0;}
3208 if(bCut == kTRUE) {bCutArray[nCutIndex] = 1;
return 0;}
3225 if(bCut == kTRUE) {bCutArray[nCutIndex] = 1;
return 0;}
3245 for(
Int_t iv=0; iv<nVars; iv++) {
3268 for(
Int_t iv=0; iv<nVars; iv++) {
3291 for(
Int_t iv=0; iv<nVars; iv++) {
3321 cout<<
"Overflow, exit..."<<endl;
3353 cout<<
"Overflow, exit..."<<endl;
3383 cout<<
"Overflow, exit..."<<endl;
3414 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)
Double_t DeltaInvMassDStarKpipi(AliAODRecoDecayHF2Prong *DStar) const
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 InvMass(Int_t icalo, TString particle, TString fileName)
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()
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
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
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
Double_t DeltaInvMassB0Kpipipi(AliAODRecoDecayHF2Prong *B0) const
Bool_t fGetCutInfo
Radius for circular PID nsigma cut.
Int_t fGlobalIndexD0forD0ptbin
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