3 #include <TLorentzVector.h>
5 #include "AliPicoV0Base.h"
7 ClassImp(AliPicoV0Base)
9 //_____________________________________________________________________________
10 const Double_t AliPicoV0Base::fgkMassPion = 0.13957;
11 const Double_t AliPicoV0Base::fgkMassKshort = 0.497614;
12 const Double_t AliPicoV0Base::fgkMassProton = 0.938272;
13 const Double_t AliPicoV0Base::fgkMassLambda = 1.11568;
15 //_____________________________________________________________________________
16 AliPicoV0Base::AliPicoV0Base() :
26 fDauXrowsOverFindableClusTPC(0.),
33 // AliPicoV0Base::AliPicoV0Base
37 //_____________________________________________________________________________
38 AliPicoV0Base::AliPicoV0Base(UInt_t wMask,
41 Double_t dV0DistToPVoverP,
46 Double_t dDauXrowsOverFindableClusTPC,
47 Double_t dPosPx, Double_t dPosPy, Double_t dPosPz,
48 Double_t dNegPx, Double_t dNegPy, Double_t dNegPz,
55 fV0DistToPVoverP(dV0DistToPVoverP),
57 fPosDCAtoPV(dPosDCAtoPV),
58 fNegDCAtoPV(dNegDCAtoPV),
59 fDauXrowsTPC(dDauXrowsTPC),
60 fDauXrowsOverFindableClusTPC(dDauXrowsOverFindableClusTPC),
61 fP3Pos(dPosPx, dPosPy, dPosPz),
62 fP3Neg(dNegPx, dNegPy, dNegPz),
67 // AliPicoV0Base::AliPicoV0Base
71 //_____________________________________________________________________________
72 AliPicoV0Base::AliPicoV0Base(const AliPicoV0Base &src) :
75 fV0Radius(src.fV0Radius),
76 fV0CosPA(src.fV0CosPA),
77 fV0DistToPVoverP(src.fV0DistToPVoverP),
78 fDausDCA(src.fDausDCA),
79 fPosDCAtoPV(src.fPosDCAtoPV),
80 fNegDCAtoPV(src.fNegDCAtoPV),
81 fDauXrowsTPC(src.fDauXrowsTPC),
82 fDauXrowsOverFindableClusTPC(src.fDauXrowsOverFindableClusTPC),
85 fIsPosInJC(src.fIsPosInJC),
86 fIsNegInJC(src.fIsNegInJC)
89 // AliPicoV0Base::AliPicoV0Base
93 //_____________________________________________________________________________
94 AliPicoV0Base& AliPicoV0Base::operator=(const AliPicoV0Base &src)
97 // AliPicoV0Base::operator=
100 if (&src==this) return *this;
102 TObject::operator=(src);
105 fV0Radius = src.fV0Radius;
106 fV0CosPA = src.fV0CosPA;
107 fV0DistToPVoverP = src.fV0DistToPVoverP;
108 fDausDCA = src.fDausDCA;
109 fPosDCAtoPV = src.fPosDCAtoPV;
110 fNegDCAtoPV = src.fNegDCAtoPV;
111 fDauXrowsTPC = src.fDauXrowsTPC;
112 fDauXrowsOverFindableClusTPC = src.fDauXrowsOverFindableClusTPC;
115 fIsPosInJC = src.fIsPosInJC;
116 fIsNegInJC = src.fIsNegInJC;
121 //_____________________________________________________________________________
122 AliPicoV0Base::~AliPicoV0Base()
125 // AliPicoV0Base::~AliPicoV0Base
129 //_____________________________________________________________________________
130 Bool_t AliPicoV0Base::IsKa(Double_t dCutMinV0Radius,
131 Double_t dCutMinV0CosPA,
132 Double_t dCutMaxV0Ctau,
133 Double_t dCutMaxDausDCA,
134 Double_t dCutMinPosDCAtoPV,
135 Double_t dCutMinNegDCAtoPV,
136 Float_t dCutMinDauXrowsTPC,
137 Double_t dCutMinDauXrowsOverFindableClusTPC,
138 Double_t dCutMinDauDeltaM)
141 // AliPicoV0Base::IsKa
144 if (!IsCandidateSelected(dCutMinV0Radius,
150 dCutMinDauXrowsOverFindableClusTPC)) return kFALSE;
152 if (!IsKaSelected(dCutMaxV0Ctau, dCutMinDauDeltaM)) return kFALSE;
157 //_____________________________________________________________________________
158 Bool_t AliPicoV0Base::IsLa(Double_t dCutMinV0Radius,
159 Double_t dCutMinV0CosPA,
160 Double_t dCutMaxV0Ctau,
161 Double_t dCutMaxDausDCA,
162 Double_t dCutMinPosDCAtoPV,
163 Double_t dCutMinNegDCAtoPV,
164 Float_t dCutMinDauXrowsTPC,
165 Double_t dCutMinDauXrowsOverFindableClusTPC,
166 Double_t dCutMinDauDeltaM)
169 // AliPicoV0Base::IsLa
172 if (!IsCandidateSelected(dCutMinV0Radius,
178 dCutMinDauXrowsOverFindableClusTPC)) return kFALSE;
180 if (!IsLaSelected(dCutMaxV0Ctau, dCutMinDauDeltaM)) return kFALSE;
185 //_____________________________________________________________________________
186 Bool_t AliPicoV0Base::IsKaSelected(Double_t dCutMaxV0Ctau, Double_t dCutMinDauDeltaM)
189 // AliPicoV0Base::IsKaSelected
192 if ((fV0DistToPVoverP*fgkMassKshort)>dCutMaxV0Ctau) return kFALSE;
194 if (dCutMinDauDeltaM>0.) {
195 Double_t dMassLambda = KineLambda().M();
196 Double_t dMassAntiLa = KineAntiLa().M();
197 if ((TMath::Abs(dMassLambda-fgkMassLambda)<dCutMinDauDeltaM) ||
198 (TMath::Abs(dMassAntiLa-fgkMassLambda)<dCutMinDauDeltaM)) return kFALSE;
204 //_____________________________________________________________________________
205 Bool_t AliPicoV0Base::IsLaSelected(Double_t dCutMaxV0Ctau, Double_t dCutMinDauDeltaM)
208 // AliPicoV0Base::IsLaSelected
211 if ((fV0DistToPVoverP*fgkMassLambda)>dCutMaxV0Ctau) return kFALSE;
213 if (dCutMinDauDeltaM>0.) {
214 Double_t dMassKshort = KineKshort().M();
215 if (TMath::Abs(dMassKshort-fgkMassKshort)<dCutMinDauDeltaM) return kFALSE;
221 //_____________________________________________________________________________
222 Bool_t AliPicoV0Base::IsCandidateSelected(Double_t dCutMinV0Radius,
223 Double_t dCutMinV0CosPA,
224 Double_t dCutMaxDausDCA,
225 Double_t dCutMinPosDCAtoPV,
226 Double_t dCutMinNegDCAtoPV,
227 Float_t dCutMinDauXrowsTPC,
228 Double_t dCutMinDauXrowsOverFindableClusTPC)
231 // AliPicoV0Base::IsCandidateSelected
234 if (fV0Radius<dCutMinV0Radius) return kFALSE;
235 if (fV0CosPA <dCutMinV0CosPA) return kFALSE;
237 if (fDausDCA>dCutMaxDausDCA) return kFALSE;
238 if (fPosDCAtoPV<dCutMinPosDCAtoPV) return kFALSE;
239 if (fNegDCAtoPV<dCutMinNegDCAtoPV) return kFALSE;
241 if (fDauXrowsTPC<dCutMinDauXrowsTPC) return kFALSE;
242 if (fDauXrowsOverFindableClusTPC<dCutMinDauXrowsOverFindableClusTPC) return kFALSE;
247 //_____________________________________________________________________________
248 void AliPicoV0Base::FillKshortPtInvM(TH2D *h)
251 // AliPicoV0Base::FillKshortPtInvM
255 if (!IsKshort()) return;
256 //=============================================================================
258 TLorentzVector v = KineKshort();
259 Double_t dPt = v.Pt(); if (dPt<h->GetXaxis()->GetBinLowEdge(1)) return;
265 //_____________________________________________________________________________
266 void AliPicoV0Base::FillLambdaPtInvM(TH2D *h)
269 // AliPicoV0Base::FillLambdaPtInvM
273 if (!IsLambda()) return;
274 //=============================================================================
276 TLorentzVector v = KineLambda();
277 Double_t dPt = v.Pt(); if (dPt<h->GetXaxis()->GetBinLowEdge(1)) return;
283 //_____________________________________________________________________________
284 void AliPicoV0Base::FillAntiLaPtInvM(TH2D *h)
287 // AliPicoV0Base::FillAntiLaPtInvM
291 if (!IsAntiLa()) return;
292 //=============================================================================
294 TLorentzVector v = KineAntiLa();
295 Double_t dPt = v.Pt(); if (dPt<h->GetXaxis()->GetBinLowEdge(1)) return;
301 //_____________________________________________________________________________
302 Bool_t AliPicoV0Base::IsKaInRapAcc(Double_t dMin, Double_t dMax)
305 // AliPicoV0Base::IsKaInRapAcc
308 if (!IsKshort()) return kFALSE;
309 Double_t dRap = RapidityKa(); return ((dRap>=dMin) && (dRap<dMax));
312 //_____________________________________________________________________________
313 Bool_t AliPicoV0Base::IsLaInRapAcc(Double_t dMin, Double_t dMax)
316 // AliPicoV0Base::IsLaInRapAcc
319 if (!(IsLambda() || IsAntiLa())) return kFALSE;
320 Double_t dRap = RapidityLa(); return ((dRap>=dMin) && (dRap<dMax));
323 //_____________________________________________________________________________
324 Bool_t AliPicoV0Base::IsV0InEtaAcc(Double_t dMin, Double_t dMax)
327 // AliPicoV0Base::IsV0InEtaAcc
330 Double_t dEta = KineRD().Eta();
331 if ((dEta<dMin) || (dEta>=dMax)) return kFALSE;
336 //_____________________________________________________________________________
337 Bool_t AliPicoV0Base::IsDausInEtaAcc(Double_t dMin, Double_t dMax)
340 // AliPicoV0Base::IsDausInEtaAcc
343 Double_t dPosEta = fP3Pos.Eta(); if ((dPosEta<dMin) || (dPosEta>=dMax)) return kFALSE;
344 Double_t dNegEta = fP3Neg.Eta(); if ((dNegEta<dMin) || (dNegEta>=dMax)) return kFALSE;
349 //_____________________________________________________________________________
350 Double_t AliPicoV0Base::RapidityKa()
353 // AliPicoV0Base::RapidityKa
356 TLorentzVector v; v.SetVectM(KineRD(), fgkMassKshort);
360 //_____________________________________________________________________________
361 Double_t AliPicoV0Base::RapidityLa()
364 // AliPicoV0Base::RapidityLa
367 TLorentzVector v; v.SetVectM(KineRD(), fgkMassLambda);
371 //_____________________________________________________________________________
372 TLorentzVector AliPicoV0Base::KineKshort()
375 // AliPicoV0Base::KineKshort
378 TLorentzVector vPos; vPos.SetVectM(fP3Pos, fgkMassPion);
379 TLorentzVector vNeg; vNeg.SetVectM(fP3Neg, fgkMassPion);
381 return (vPos + vNeg);
384 //_____________________________________________________________________________
385 TLorentzVector AliPicoV0Base::KineLambda()
388 // AliPicoV0Base::KineLambda
391 TLorentzVector vPos; vPos.SetVectM(fP3Pos, fgkMassProton);
392 TLorentzVector vNeg; vNeg.SetVectM(fP3Neg, fgkMassPion);
394 return (vPos + vNeg);
397 //_____________________________________________________________________________
398 TLorentzVector AliPicoV0Base::KineAntiLa()
401 // AliPicoV0Base::KineAntiLa
404 TLorentzVector vPos; vPos.SetVectM(fP3Pos, fgkMassPion);
405 TLorentzVector vNeg; vNeg.SetVectM(fP3Neg, fgkMassProton);
407 return (vPos + vNeg);