1 /**************************************************************************
2 * Author: Paraskevi Ganoti, University of Athens (pganoti@phys.uoa.gr) *
3 * Contributors are mentioned in the code where appropriate. *
5 * Permission to use, copy, modify and distribute this software and its *
6 * documentation strictly for non-commercial purposes is hereby granted *
7 * without fee, provided that the above copyright notice appears in all *
8 * copies and that both the copyright notice and this permission notice *
9 * appear in the supporting documentation. The authors make no claims *
10 * about the suitability of this software for any purpose. It is *
11 * provided "as is" without express or implied warranty. *
12 **************************************************************************/
14 //----------------------------------------------------------------------------------------------------------------
15 // class AliResonanceKink
16 // Example of an analysis task for reconstructing resonances having at least one kaon-kink in their decay
17 // products. It provides basic plots as well as plots helping to calculate the corrections.
18 // Usage: To analyse a resonance having a kaon in its decay products, one has to modify the integer
19 // variables resonancePDG, fdaughter1pdg and fdaughter2pdg accordingly as well as daughter1pdgMass and daughter2pdgMass.
20 // Also, depending on the analysis mode (ESD or MC), fAnalysisType in the constructor must also be changed
21 //-----------------------------------------------------------------------------------------------------------------
26 #include "TParticle.h"
28 #include <TDatabasePDG.h>
29 #include <TParticlePDG.h>
33 #include "AliMCEventHandler.h"
34 #include "AliMCEvent.h"
35 #include "AliResonanceKink.h"
36 #include "AliESDkink.h"
38 #include "AliESDtrack.h"
39 #include "AliESDEvent.h"
41 ClassImp(AliResonanceKink)
43 //________________________________________________________________________
44 AliResonanceKink::AliResonanceKink()
45 : TObject(), fListOfHistos(0), fOpeningAngle(0), fInvariantMass(0), fInvMassTrue(0), fPhiBothKinks(0), fRecPt(0), fRecEta(0), fRecEtaPt(0), fSimPt(0), fSimEta(0), fSimEtaPt(0), fSimPtKink(0), fSimEtaKink(0), fSimEtaPtKink(0),
46 fhdr(0), fhdz(0), f1(0), f2(0), fAnalysisType(), fvtxz(0), fNbins(0), fLowX(0), fHighX(0), fdaughter1pdg(0), fdaughter2pdg(0), fresonancePDGcode(0)
52 //________________________________________________________________________
53 AliResonanceKink::AliResonanceKink(Int_t nbins, Float_t nlowx, Float_t nhighx, Int_t daughter1, Int_t daughter2, Int_t resonancePDG)
54 : TObject(), fListOfHistos(0), fOpeningAngle(0), fInvariantMass(0), fInvMassTrue(0), fPhiBothKinks(0), fRecPt(0), fRecEta(0), fRecEtaPt(0), fSimPt(0), fSimEta(0), fSimEtaPt(0), fSimPtKink(0), fSimEtaKink(0), fSimEtaPtKink(0),
55 fhdr(0), fhdz(0), f1(0), f2(0), fAnalysisType(), fvtxz(0), fNbins(nbins), fLowX(nlowx), fHighX(nhighx), fdaughter1pdg(daughter1), fdaughter2pdg(daughter2), fresonancePDGcode(resonancePDG)
60 fOpeningAngle=new TH1D("fOpeningAngle"," ", 100,-1.0,1.0);
62 fInvariantMass=new TH1D("fInvariantMass"," ",fNbins,fLowX,fHighX);
63 fInvMassTrue=new TH1D("fInvMassTrue"," ",fNbins,fLowX,fHighX);
64 fPhiBothKinks=new TH1D("fPhiBothKinks"," ",fNbins,fLowX,fHighX); // Applicable for phi(1020)
66 fRecPt=new TH1D("fRecPt"," ", 50,0.0,5.0);
67 fRecEta=new TH1D("fRecEta"," ", 44,-1.1,1.1);
68 fRecEtaPt=new TH2D("fRecEtaPt"," ", 50,0.0,5.0, 44,-1.1,1.1);
69 fSimPt=new TH1D("fSimPt"," ", 50,0.0,5.0);
70 fSimEta=new TH1D("fSimEta"," ", 44,-1.1,1.1);
71 fSimEtaPt=new TH2D("fSimEtaPt"," ", 50,0.0,5.0, 44,-1.1,1.1);
72 fSimPtKink=new TH1D("fSimPtKink"," ", 50,0.0,5.0);
73 fSimEtaKink=new TH1D("fSimEtaKink"," ", 44,-1.1,1.1);
74 fSimEtaPtKink=new TH2D("fSimEtaPtKink"," ", 50,0.0,5.0, 44,-1.1,1.1);
75 fhdr=new TH1D("fhdr"," ", 100,0.0,5.0);
76 fhdz=new TH1D("fhdz"," ", 100,0.0,5.0);
78 f1=new TF1("f1","((atan([0]*[1]*(1.0/(sqrt((x^2)*(1.0-([1]^2))-([0]^2)*([1]^2))))))*180.)/[2]",1.1,10.0);
79 f1->SetParameter(0,0.493677);
80 f1->SetParameter(1,0.9127037);
81 f1->SetParameter(2,TMath::Pi());
83 f2=new TF1("f2","((atan([0]*[1]*(1.0/(sqrt((x^2)*(1.0-([1]^2))-([0]^2)*([1]^2))))))*180.)/[2]",0.1,10.0);
84 f2->SetParameter(0,0.13957018);
85 f2->SetParameter(1,0.2731374);
86 f2->SetParameter(2,TMath::Pi());
88 fvtxz=new TH1D("fvtxz"," ", 100,-20.0,20.0);
92 //________________________________________________________________________
93 AliResonanceKink:: ~AliResonanceKink()
96 if(fOpeningAngle) delete fOpeningAngle;
97 if(fInvariantMass) delete fInvariantMass;
98 if(fInvMassTrue) delete fInvMassTrue;
99 if(fPhiBothKinks) delete fPhiBothKinks;
100 if(fRecPt) delete fRecPt;
101 if(fRecEta) delete fRecEta;
102 if(fRecEtaPt) delete fRecEtaPt;
103 if(fSimPt) delete fSimPt;
104 if(fSimEta) delete fSimEta;
105 if(fSimEtaPt) delete fSimEtaPt;
106 if(fSimPtKink) delete fSimPtKink;
107 if(fSimEtaKink) delete fSimEtaKink;
108 if(fSimEtaPtKink) delete fSimEtaPtKink;
109 if(fhdr) delete fhdr;
110 if(fhdz) delete fhdz;
111 if(fvtxz) delete fvtxz;
113 //________________________________________________________________________
114 TList* AliResonanceKink::GetHistogramList()
116 // Adding histograms to the list
117 fListOfHistos=new TList();
119 fListOfHistos->Add(fOpeningAngle);
120 fListOfHistos->Add(fInvariantMass);
121 fListOfHistos->Add(fInvMassTrue);
122 fListOfHistos->Add(fPhiBothKinks);
123 fListOfHistos->Add(fRecPt);
124 fListOfHistos->Add(fRecEta);
125 fListOfHistos->Add(fRecEtaPt);
126 fListOfHistos->Add(fSimPt);
127 fListOfHistos->Add(fSimEta);
128 fListOfHistos->Add(fSimEtaPt);
129 fListOfHistos->Add(fSimPtKink);
130 fListOfHistos->Add(fSimEtaKink);
131 fListOfHistos->Add(fSimEtaPtKink);
132 fListOfHistos->Add(fhdr);
133 fListOfHistos->Add(fhdz);
134 fListOfHistos->Add(fvtxz);
136 return fListOfHistos;
139 //________________________________________________________________________
140 void AliResonanceKink::InitOutputHistograms(Int_t nbins, Float_t nlowx, Float_t nhighx)
142 // Initialisation of the output histograms
147 fOpeningAngle=new TH1D("fOpeningAngle"," ", 100,-1.0,1.0);
149 fInvariantMass=new TH1D("fInvariantMass"," ",fNbins,fLowX,fHighX);
150 fInvMassTrue=new TH1D("fInvMassTrue"," ",fNbins,fLowX,fHighX);
151 fPhiBothKinks=new TH1D("fPhiBothKinks"," ",fNbins,fLowX,fHighX); // Applicable for phi(1020)
153 fRecPt=new TH1D("fRecPt"," ", 50,0.0,5.0);
154 fRecEta=new TH1D("fRecEta"," ", 44,-1.1,1.1);
155 fRecEtaPt=new TH2D("fRecEtaPt"," ", 50,0.0,5.0, 44,-1.1,1.1);
156 fSimPt=new TH1D("fSimPt"," ", 50,0.0,5.0);
157 fSimEta=new TH1D("fSimEta"," ", 44,-1.1,1.1);
158 fSimEtaPt=new TH2D("fSimEtaPt"," ", 50,0.0,5.0, 44,-1.1,1.1);
159 fSimPtKink=new TH1D("fSimPtKink"," ", 50,0.0,5.0);
160 fSimEtaKink=new TH1D("fSimEtaKink"," ", 44,-1.1,1.1);
161 fSimEtaPtKink=new TH2D("fSimEtaPtKink"," ", 50,0.0,5.0, 44,-1.1,1.1);
162 fhdr=new TH1D("fhdr"," ", 100,0.0,5.0);
163 fhdz=new TH1D("fhdz"," ", 100,0.0,5.0);
165 f1=new TF1("f1","((atan([0]*[1]*(1.0/(sqrt((x^2)*(1.0-([1]^2))-([0]^2)*([1]^2))))))*180.)/[2]",1.1,10.0);
166 f1->SetParameter(0,0.493677);
167 f1->SetParameter(1,0.9127037);
168 f1->SetParameter(2,TMath::Pi());
170 f2=new TF1("f2","((atan([0]*[1]*(1.0/(sqrt((x^2)*(1.0-([1]^2))-([0]^2)*([1]^2))))))*180.)/[2]",0.1,10.0);
171 f2->SetParameter(0,0.13957018);
172 f2->SetParameter(1,0.2731374);
173 f2->SetParameter(2,TMath::Pi());
175 fvtxz=new TH1D("fvtxz"," ", 100,-20.0,20.0);
178 //________________________________________________________________________
179 void AliResonanceKink::Analyse(AliESDEvent* esd, AliMCEvent* mcEvent)
182 // Called for each event
183 Int_t resonancePDGcode, antiresonancePDGcode;
185 if (fdaughter1pdg==kdaughterKaon) {
186 resonancePDGcode=fresonancePDGcode;
187 antiresonancePDGcode=-fresonancePDGcode;
189 if (fdaughter1pdg!=kdaughterKaon) {
190 resonancePDGcode=-fresonancePDGcode;
191 antiresonancePDGcode=fresonancePDGcode;
193 if (fdaughter1pdg==fdaughter2pdg) {
194 resonancePDGcode=fresonancePDGcode;
195 antiresonancePDGcode=fresonancePDGcode;
198 Double_t daughter1pdgMass=TDatabasePDG::Instance()->GetParticle(fdaughter1pdg)->Mass();
199 Double_t daughter2pdgMass=TDatabasePDG::Instance()->GetParticle(fdaughter2pdg)->Mass();
202 Printf("ERROR: fESD not available");
207 Printf("ERROR: mcEvent not available");
211 AliStack* stack=mcEvent->Stack();
213 if(fAnalysisType == "MC") {
214 for (Int_t iMc = 0; iMc < stack->GetNprimary(); ++iMc)
216 TParticle* particle = stack->Particle(iMc);
220 Printf("UNEXPECTED: particle with label %d not found in stack (mc loop)", iMc);
224 if(TMath::Abs(particle->GetPdgCode())==fresonancePDGcode) {
225 Int_t firstD=particle->GetFirstDaughter();
226 Int_t lastD=particle->GetLastDaughter();
227 TParticle *daughterParticle1=stack->Particle(firstD);
228 TParticle *daughterParticle2=stack->Particle(lastD);
230 TParticle* kaonFirstDaughter;
231 Int_t mcProcessKaonFirstDaughter = -999;
233 for(Int_t ia=0; ia<daughterParticle1->GetNDaughters(); ia++){
234 if ((daughterParticle1->GetFirstDaughter()+ia)!=-1) {
235 kaonFirstDaughter=stack->Particle(daughterParticle1->GetFirstDaughter()+ia);
236 mcProcessKaonFirstDaughter=kaonFirstDaughter->GetUniqueID();
240 if((daughterParticle1->Pt()>0.25)&&(daughterParticle2->Pt()>0.25)&&(TMath::Abs(daughterParticle1->Eta())<1.1)&& (TMath::Abs(daughterParticle2->Eta())<1.1)&&(TMath::Abs(particle->Eta())<1.1)) {
241 fSimEta->Fill(particle->Eta());
242 fSimPt->Fill(particle->Pt());
243 fSimEtaPt->Fill(particle->Pt(), particle->Eta());
244 if(mcProcessKaonFirstDaughter==4) {
245 fSimPtKink->Fill(particle->Pt());
246 fSimEtaKink->Fill(particle->Eta());
247 fSimEtaPtKink->Fill(particle->Pt(), particle->Eta());
253 } // end fAnalysisType==MC
256 if(fAnalysisType == "ESD") {
257 const AliESDVertex* vertex = GetEventVertex(esd);
262 Double_t ptrackpos[3], ptrackneg[3];
264 TLorentzVector p4pos, anp4pos;
265 TLorentzVector p4neg, anp4neg;
266 TLorentzVector p4comb, anp4comb;
268 for (Int_t iTracks = 0; iTracks < esd->GetNumberOfTracks(); iTracks++) {
269 AliESDtrack* trackpos = esd->GetTrack(iTracks);
271 Printf("ERROR: Could not receive track %d", iTracks);
274 if (trackpos->GetSign() < 0) continue;
276 trackpos->GetPxPyPz(ptrackpos);
278 Float_t nSigmaToVertex = GetSigmaToVertex(trackpos);
282 trackpos->GetImpactParameters(bpos,bCovpos);
284 if (bCovpos[0]<=0 || bCovpos[2]<=0) {
285 Printf("Estimated b resolution lower or equal zero!");
286 bCovpos[0]=0; bCovpos[2]=0;
289 Float_t dcaToVertexXYpos = bpos[0];
290 Float_t dcaToVertexZpos = bpos[1];
292 fhdr->Fill(dcaToVertexXYpos);
293 fhdz->Fill(dcaToVertexZpos);
295 if(nSigmaToVertex>=4) continue;
296 if((dcaToVertexXYpos>3.0)||(dcaToVertexZpos>3.0)) continue;
298 TVector3 posTrackMom(ptrackpos[0],ptrackpos[1],ptrackpos[2]);
300 if(posTrackMom.Perp()<=0.25) continue;
302 TParticle * partpos = stack->Particle(TMath::Abs(trackpos->GetLabel()));
303 if (!partpos) continue;
304 Int_t pdgpos = partpos->GetPdgCode();
305 Int_t mumlabelpos=partpos->GetFirstMother();
306 mumlabelpos = TMath::Abs(mumlabelpos);
307 TParticle * mumpos=stack->Particle(mumlabelpos);
308 if (!mumpos) continue;
309 Int_t mumpdgpos = mumpos->GetPdgCode();
311 Int_t indexKinkPos=trackpos->GetKinkIndex(0);
312 Int_t kaonKinkFlag=0;
315 AliESDkink *poskink=esd->GetKink(TMath::Abs(indexKinkPos)-1);
316 const TVector3 motherMfromKinkPos(poskink->GetMotherP());
317 const TVector3 daughterMKinkPos(poskink->GetDaughterP());
318 Float_t posQt=poskink->GetQt();
320 Double_t maxDecAngKmuPos=f1->Eval(motherMfromKinkPos.Mag(),0.,0.,0.);
321 Double_t maxDecAngpimuPos=f2->Eval(motherMfromKinkPos.Mag(),0.,0.,0.);
323 Float_t kinkAnglePos=TMath::RadToDeg()*poskink->GetAngle(2);
325 Float_t energyDaughterMu=TMath::Sqrt(daughterMKinkPos.Mag()*daughterMKinkPos.Mag()+0.105658*0.105658);
326 Float_t p1XM= motherMfromKinkPos.Px();
327 Float_t p1YM= motherMfromKinkPos.Py();
328 Float_t p1ZM= motherMfromKinkPos.Pz();
329 Float_t p2XM= daughterMKinkPos.Px();
330 Float_t p2YM= daughterMKinkPos.Py();
331 Float_t p2ZM= daughterMKinkPos.Pz();
332 Float_t p3Daughter=TMath::Sqrt(((p1XM-p2XM)*(p1XM-p2XM))+((p1YM-p2YM)*(p1YM-p2YM))+((p1ZM-p2ZM)*(p1ZM-p2ZM)));
333 Double_t invariantMassKmuPos= TMath::Sqrt((energyDaughterMu+p3Daughter)*(energyDaughterMu+p3Daughter)-motherMfromKinkPos.Mag()*motherMfromKinkPos.Mag());
335 if((kinkAnglePos>maxDecAngpimuPos)&&(posQt>0.05)&&(posQt<0.25)&&((poskink->GetR()>110.)&&(poskink->GetR()<230.))&&(TMath::Abs(posTrackMom.Eta())<1.1)&&(invariantMassKmuPos<0.6)) {
337 if(posTrackMom.Mag()<=1.1) {
341 if (kinkAnglePos<maxDecAngKmuPos) {
346 } //End Kink Information
348 if(kaonKinkFlag==1) anp4pos.SetVectM(posTrackMom,daughter1pdgMass);
350 if(indexKinkPos==0) {
351 UInt_t status=trackpos->GetStatus();
352 if((status&AliESDtrack::kTPCrefit)==0) continue;
353 if(trackpos->GetTPCclusters(0)<50) continue;
354 if((trackpos->GetTPCchi2()/trackpos->GetTPCclusters(0))>3.5) continue;
355 Double_t extCovPos[15];
356 trackpos->GetExternalCovariance(extCovPos);
357 if(extCovPos[0]>2) continue;
358 if(extCovPos[2]>2) continue;
359 if(extCovPos[5]>0.5) continue;
360 if(extCovPos[9]>0.5) continue;
361 if(extCovPos[14]>2) continue;
363 p4pos.SetVectM(posTrackMom, daughter2pdgMass);
367 for (Int_t j=0; j<esd->GetNumberOfTracks(); j++) {
368 if(iTracks==j) continue;
369 AliESDtrack* trackneg=esd->GetTrack(j);
370 if (trackneg->GetSign() > 0) continue;
372 trackneg->GetPxPyPz(ptrackneg);
373 Float_t negSigmaToVertex = GetSigmaToVertex(trackneg);
377 trackneg->GetImpactParameters(bneg,bCovneg);
378 if (bCovneg[0]<=0 || bCovneg[2]<=0) {
379 Printf("Estimated b resolution lower or equal zero!");
380 bCovneg[0]=0; bCovneg[2]=0;
383 Float_t dcaToVertexXYneg = bneg[0];
384 Float_t dcaToVertexZneg = bneg[1];
386 fhdr->Fill(dcaToVertexXYneg);
387 fhdz->Fill(dcaToVertexZneg);
389 if(negSigmaToVertex>=4) continue;
390 if((dcaToVertexXYneg>3.0)||(dcaToVertexZneg>3.0)) continue;
392 TVector3 negTrackMom(ptrackneg[0],ptrackneg[1],ptrackneg[2]);
394 if(negTrackMom.Perp()<=0.25) continue;
396 TParticle * partneg = stack->Particle(TMath::Abs(trackneg->GetLabel()));
397 if (!partneg) continue;
398 Int_t pdgneg = partneg->GetPdgCode();
399 Int_t mumlabelneg=partneg->GetFirstMother();
400 mumlabelneg = TMath::Abs(mumlabelneg);
401 TParticle * mumneg=stack->Particle(mumlabelneg);
402 if (!mumneg) continue;
403 Int_t mumpdgneg = mumneg->GetPdgCode();
405 Int_t indexKinkNeg=trackneg->GetKinkIndex(0);
406 Int_t negKaonKinkFlag=0;
409 AliESDkink *negkink=esd->GetKink(TMath::Abs(indexKinkNeg)-1);
410 const TVector3 motherMfromKinkNeg(negkink->GetMotherP());
411 const TVector3 daughterMKinkNeg(negkink->GetDaughterP());
412 Float_t negQt=negkink->GetQt();
414 Double_t maxDecAngKmuNeg=f1->Eval(motherMfromKinkNeg.Mag(),0.,0.,0.);
415 Double_t maxDecAngpimuNeg=f2->Eval(motherMfromKinkNeg.Mag(),0.,0.,0.);
417 Float_t kinkAngleNeg=TMath::RadToDeg()*negkink->GetAngle(2);
419 Float_t energyDaughterMuNeg=TMath::Sqrt(daughterMKinkNeg.Mag()*daughterMKinkNeg.Mag()+0.105658*0.105658);
420 Float_t p1XMNeg= motherMfromKinkNeg.Px();
421 Float_t p1YMNeg= motherMfromKinkNeg.Py();
422 Float_t p1ZMNeg= motherMfromKinkNeg.Pz();
423 Float_t p2XMNeg= daughterMKinkNeg.Px();
424 Float_t p2YMNeg= daughterMKinkNeg.Py();
425 Float_t p2ZMNeg= daughterMKinkNeg.Pz();
426 Float_t p3DaughterNeg=TMath::Sqrt(((p1XMNeg-p2XMNeg)*(p1XMNeg-p2XMNeg))+((p1YMNeg-p2YMNeg)*(p1YMNeg-p2YMNeg))+((p1ZMNeg-p2ZMNeg)*(p1ZMNeg-p2ZMNeg)));
427 Double_t invariantMassKmuNeg= TMath::Sqrt((energyDaughterMuNeg+p3DaughterNeg)*(energyDaughterMuNeg+p3DaughterNeg)-motherMfromKinkNeg.Mag()*motherMfromKinkNeg.Mag());
429 if((kinkAngleNeg>maxDecAngpimuNeg)&&(negQt>0.05)&&(negQt<0.25)&&((negkink->GetR()>110.)&&(negkink->GetR()<230.))&&(TMath::Abs(negTrackMom.Eta())<1.1)&&(invariantMassKmuNeg<0.6)) {
431 if(negTrackMom.Mag()<=1.1) {
435 if (kinkAngleNeg<maxDecAngKmuNeg) {
440 } //End Kink Information
442 if(negKaonKinkFlag==1) p4neg.SetVectM(negTrackMom,daughter1pdgMass);
444 if(indexKinkNeg==0) {
445 UInt_t statusneg=trackneg->GetStatus();
447 if((statusneg&AliESDtrack::kTPCrefit)==0) continue;
449 if(trackneg->GetTPCclusters(0)<50) continue;
450 if((trackneg->GetTPCchi2()/trackneg->GetTPCclusters(0))>3.5) continue;
451 Double_t extCovneg[15];
452 trackneg->GetExternalCovariance(extCovneg);
453 if(extCovneg[0]>2) continue;
454 if(extCovneg[2]>2) continue;
455 if(extCovneg[5]>0.5) continue;
456 if(extCovneg[9]>0.5) continue;
457 if(extCovneg[14]>2) continue;
459 anp4neg.SetVectM(negTrackMom, daughter2pdgMass);
463 Double_t openingAngle=(ptrackpos[0]*ptrackneg[0]+ptrackpos[1]*ptrackneg[1]+ptrackpos[2]*ptrackneg[2])/(posTrackMom.Mag()*negTrackMom.Mag());
465 if((kaonKinkFlag==1)&&(negKaonKinkFlag==1)) {
468 if(openingAngle>0.6) fPhiBothKinks->Fill(p4comb.M());
471 if(negKaonKinkFlag==1) {
474 fInvariantMass->Fill(p4comb.M());
475 if ((mumpdgpos==(antiresonancePDGcode))&&(mumpdgneg==(antiresonancePDGcode))&&(mumlabelpos==mumlabelneg)
476 &&(pdgpos==fdaughter2pdg)&&(pdgneg==(-fdaughter1pdg))&&(TMath::Abs(trackpos->GetLabel())>=0)&&(TMath::Abs(trackneg->GetLabel())>=0)&&(mumlabelpos>=0)&&(mumlabelneg>=0)) {
477 fOpeningAngle->Fill(openingAngle);
478 fInvMassTrue->Fill(p4comb.M());
479 if((TMath::Abs(p4pos.Vect().Eta())<1.1)&&(TMath::Abs(p4neg.Vect().Eta())<1.1)&&(p4comb.Vect().Eta()<1.1)) {
480 fRecPt->Fill(p4comb.Vect().Pt());
481 fRecEta->Fill(p4comb.Vect().Eta());
482 fRecEtaPt->Fill(p4comb.Vect().Perp(),p4comb.Vect().Eta());
490 if(kaonKinkFlag==1) {
493 fInvariantMass->Fill(anp4comb.M());
494 if ((mumpdgpos==resonancePDGcode)&&(mumpdgneg==resonancePDGcode)&&(mumlabelpos==mumlabelneg)
495 &&(pdgpos==fdaughter1pdg)&&(pdgneg==(-fdaughter2pdg))&&(TMath::Abs(trackpos->GetLabel())>=0)&&(TMath::Abs(trackneg->GetLabel())>=0)&&(mumlabelpos>=0) &&(mumlabelneg>=0)) {
496 fOpeningAngle->Fill(openingAngle);
497 fInvMassTrue->Fill(p4comb.M());
498 if((TMath::Abs(anp4neg.Vect().Eta())<1.1)&&(TMath::Abs(anp4pos.Vect().Eta())<1.1)&&(anp4comb.Vect().Eta()<1.1)) {
499 fRecPt->Fill(anp4comb.Vect().Pt());
500 fRecEta->Fill(anp4comb.Vect().Eta());
501 fRecEtaPt->Fill(anp4comb.Vect().Pt(), anp4comb.Vect().Eta());
512 } // end fAnalysisType == ESD
516 //____________________________________________________________________//
517 Float_t AliResonanceKink::GetSigmaToVertex(AliESDtrack* esdTrack) const {
518 // Calculates the number of sigma to the vertex.
524 esdTrack->GetImpactParameters(b,bCov);
526 if (bCov[0]<=0 || bCov[2]<=0) {
527 bCov[0]=0; bCov[2]=0;
530 bRes[0] = TMath::Sqrt(bCov[0]);
531 bRes[1] = TMath::Sqrt(bCov[2]);
533 if (bRes[0] == 0 || bRes[1] ==0) return -1;
535 Float_t d = TMath::Sqrt(TMath::Power(b[0]/bRes[0],2) + TMath::Power(b[1]/bRes[1],2));
537 if (TMath::Exp(-d * d / 2) < 1e-10) return 1000;
539 d = TMath::ErfInverse(1 - TMath::Exp(-d * d / 2)) * TMath::Sqrt(2);
544 //________________________________________________________________________
545 const AliESDVertex* AliResonanceKink::GetEventVertex(const AliESDEvent* esd) const
549 const AliESDVertex* vertex = esd->GetPrimaryVertex();
551 if((vertex->GetStatus()==kTRUE)&&(vertex->GetNContributors()>2)) return vertex;
554 vertex = esd->GetPrimaryVertexSPD();
555 if((vertex->GetStatus()==kTRUE)&&(vertex->GetNContributors()>2)) return vertex;