]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGJE/FlavourJetTasks/AliPicoV0Base.cxx
method Destroy added to AliGeomManager for clean removal of geometry
[u/mrichter/AliRoot.git] / PWGJE / FlavourJetTasks / AliPicoV0Base.cxx
CommitLineData
b254f323 1#include <TH2D.h>
2#include <TMath.h>
3#include <TLorentzVector.h>
4
5#include "AliPicoV0Base.h"
6
7ClassImp(AliPicoV0Base)
8
9//_____________________________________________________________________________
10const Double_t AliPicoV0Base::fgkMassPion = 0.13957;
11const Double_t AliPicoV0Base::fgkMassKshort = 0.497614;
12const Double_t AliPicoV0Base::fgkMassProton = 0.938272;
13const Double_t AliPicoV0Base::fgkMassLambda = 1.11568;
14
15//_____________________________________________________________________________
16AliPicoV0Base::AliPicoV0Base() :
17TObject(),
18fMask(0),
19fV0Radius(0.),
20fV0CosPA(0.),
21fV0DistToPVoverP(0.),
22fDausDCA(0.),
23fPosDCAtoPV(0.),
24fNegDCAtoPV(0.),
25fDauXrowsTPC(0.),
26fDauXrowsOverFindableClusTPC(0.),
27fP3Pos(),
28fP3Neg(),
29fIsPosInJC(kFALSE),
30fIsNegInJC(kFALSE)
31{
32//
33// AliPicoV0Base::AliPicoV0Base
34//
35}
36
37//_____________________________________________________________________________
38AliPicoV0Base::AliPicoV0Base(UInt_t wMask,
39 Double_t dV0Radius,
40 Double_t dV0CosPA,
41 Double_t dV0DistToPVoverP,
42 Double_t dDausDCA,
43 Double_t dPosDCAtoPV,
44 Double_t dNegDCAtoPV,
45 Float_t dDauXrowsTPC,
46 Double_t dDauXrowsOverFindableClusTPC,
47 Double_t dPosPx, Double_t dPosPy, Double_t dPosPz,
48 Double_t dNegPx, Double_t dNegPy, Double_t dNegPz,
49 Bool_t bPosInJC,
50 Bool_t bNegInJC) :
51TObject(),
52fMask(wMask),
53fV0Radius(dV0Radius),
54fV0CosPA(dV0CosPA),
55fV0DistToPVoverP(dV0DistToPVoverP),
56fDausDCA(dDausDCA),
57fPosDCAtoPV(dPosDCAtoPV),
58fNegDCAtoPV(dNegDCAtoPV),
59fDauXrowsTPC(dDauXrowsTPC),
60fDauXrowsOverFindableClusTPC(dDauXrowsOverFindableClusTPC),
61fP3Pos(dPosPx, dPosPy, dPosPz),
62fP3Neg(dNegPx, dNegPy, dNegPz),
63fIsPosInJC(bPosInJC),
64fIsNegInJC(bNegInJC)
65{
66//
67// AliPicoV0Base::AliPicoV0Base
68//
69}
70
71//_____________________________________________________________________________
72AliPicoV0Base::AliPicoV0Base(const AliPicoV0Base &src) :
73TObject(src),
74fMask(src.fMask),
75fV0Radius(src.fV0Radius),
76fV0CosPA(src.fV0CosPA),
77fV0DistToPVoverP(src.fV0DistToPVoverP),
78fDausDCA(src.fDausDCA),
79fPosDCAtoPV(src.fPosDCAtoPV),
80fNegDCAtoPV(src.fNegDCAtoPV),
81fDauXrowsTPC(src.fDauXrowsTPC),
82fDauXrowsOverFindableClusTPC(src.fDauXrowsOverFindableClusTPC),
83fP3Pos(src.fP3Pos),
84fP3Neg(src.fP3Neg),
85fIsPosInJC(src.fIsPosInJC),
86fIsNegInJC(src.fIsNegInJC)
87{
88//
89// AliPicoV0Base::AliPicoV0Base
90//
91}
92
93//_____________________________________________________________________________
94AliPicoV0Base& AliPicoV0Base::operator=(const AliPicoV0Base &src)
95{
96//
97// AliPicoV0Base::operator=
98//
99
100 if (&src==this) return *this;
101
102 TObject::operator=(src);
103
104 fMask = src.fMask;
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;
113 fP3Pos = src.fP3Pos;
114 fP3Neg = src.fP3Neg;
115 fIsPosInJC = src.fIsPosInJC;
116 fIsNegInJC = src.fIsNegInJC;
117
118 return *this;
119}
120
121//_____________________________________________________________________________
122AliPicoV0Base::~AliPicoV0Base()
123{
124//
125// AliPicoV0Base::~AliPicoV0Base
126//
127}
128
129//_____________________________________________________________________________
130Bool_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)
139{
140//
141// AliPicoV0Base::IsKa
142//
143
144 if (!IsCandidateSelected(dCutMinV0Radius,
145 dCutMinV0CosPA,
146 dCutMaxDausDCA,
147 dCutMinPosDCAtoPV,
148 dCutMinNegDCAtoPV,
149 dCutMinDauXrowsTPC,
150 dCutMinDauXrowsOverFindableClusTPC)) return kFALSE;
151
152 if (!IsKaSelected(dCutMaxV0Ctau, dCutMinDauDeltaM)) return kFALSE;
153
154 return kTRUE;
155}
156
157//_____________________________________________________________________________
158Bool_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)
167{
168//
169// AliPicoV0Base::IsLa
170//
171
172 if (!IsCandidateSelected(dCutMinV0Radius,
173 dCutMinV0CosPA,
174 dCutMaxDausDCA,
175 dCutMinPosDCAtoPV,
176 dCutMinNegDCAtoPV,
177 dCutMinDauXrowsTPC,
178 dCutMinDauXrowsOverFindableClusTPC)) return kFALSE;
179
180 if (!IsLaSelected(dCutMaxV0Ctau, dCutMinDauDeltaM)) return kFALSE;
181
182 return kTRUE;
183}
184
185//_____________________________________________________________________________
186Bool_t AliPicoV0Base::IsKaSelected(Double_t dCutMaxV0Ctau, Double_t dCutMinDauDeltaM)
187{
188//
189// AliPicoV0Base::IsKaSelected
190//
191
192 if ((fV0DistToPVoverP*fgkMassKshort)>dCutMaxV0Ctau) return kFALSE;
193
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;
199 }
200
201 return kTRUE;
202}
203
204//_____________________________________________________________________________
205Bool_t AliPicoV0Base::IsLaSelected(Double_t dCutMaxV0Ctau, Double_t dCutMinDauDeltaM)
206{
207//
208// AliPicoV0Base::IsLaSelected
209//
210
211 if ((fV0DistToPVoverP*fgkMassLambda)>dCutMaxV0Ctau) return kFALSE;
212
213 if (dCutMinDauDeltaM>0.) {
214 Double_t dMassKshort = KineKshort().M();
215 if (TMath::Abs(dMassKshort-fgkMassKshort)<dCutMinDauDeltaM) return kFALSE;
216 }
217
218 return kTRUE;
219}
220
221//_____________________________________________________________________________
222Bool_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)
229{
230//
231// AliPicoV0Base::IsCandidateSelected
232//
233
234 if (fV0Radius<dCutMinV0Radius) return kFALSE;
235 if (fV0CosPA <dCutMinV0CosPA) return kFALSE;
236
237 if (fDausDCA>dCutMaxDausDCA) return kFALSE;
238 if (fPosDCAtoPV<dCutMinPosDCAtoPV) return kFALSE;
239 if (fNegDCAtoPV<dCutMinNegDCAtoPV) return kFALSE;
240
241 if (fDauXrowsTPC<dCutMinDauXrowsTPC) return kFALSE;
242 if (fDauXrowsOverFindableClusTPC<dCutMinDauXrowsOverFindableClusTPC) return kFALSE;
243
244 return kTRUE;
245}
246
247//_____________________________________________________________________________
248void AliPicoV0Base::FillKshortPtInvM(TH2D *h)
249{
250//
251// AliPicoV0Base::FillKshortPtInvM
252//
253
254 if (!h) return;
255 if (!IsKshort()) return;
256//=============================================================================
257
258 TLorentzVector v = KineKshort();
259 Double_t dPt = v.Pt(); if (dPt<h->GetXaxis()->GetBinLowEdge(1)) return;
260
261 h->Fill(dPt, v.M());
262 return;
263}
264
265//_____________________________________________________________________________
266void AliPicoV0Base::FillLambdaPtInvM(TH2D *h)
267{
268//
269// AliPicoV0Base::FillLambdaPtInvM
270//
271
272 if (!h) return;
273 if (!IsLambda()) return;
274//=============================================================================
275
276 TLorentzVector v = KineLambda();
277 Double_t dPt = v.Pt(); if (dPt<h->GetXaxis()->GetBinLowEdge(1)) return;
278
279 h->Fill(dPt, v.M());
280 return;
281}
282
283//_____________________________________________________________________________
284void AliPicoV0Base::FillAntiLaPtInvM(TH2D *h)
285{
286//
287// AliPicoV0Base::FillAntiLaPtInvM
288//
289
290 if (!h) return;
291 if (!IsAntiLa()) return;
292//=============================================================================
293
294 TLorentzVector v = KineAntiLa();
295 Double_t dPt = v.Pt(); if (dPt<h->GetXaxis()->GetBinLowEdge(1)) return;
296
297 h->Fill(dPt, v.M());
298 return;
299}
300
301//_____________________________________________________________________________
302Bool_t AliPicoV0Base::IsKaInRapAcc(Double_t dMin, Double_t dMax)
303{
304//
305// AliPicoV0Base::IsKaInRapAcc
306//
307
308 if (!IsKshort()) return kFALSE;
309 Double_t dRap = RapidityKa(); return ((dRap>=dMin) && (dRap<dMax));
310}
311
312//_____________________________________________________________________________
313Bool_t AliPicoV0Base::IsLaInRapAcc(Double_t dMin, Double_t dMax)
314{
315//
316// AliPicoV0Base::IsLaInRapAcc
317//
318
319 if (!(IsLambda() || IsAntiLa())) return kFALSE;
320 Double_t dRap = RapidityLa(); return ((dRap>=dMin) && (dRap<dMax));
321}
322
323//_____________________________________________________________________________
324Bool_t AliPicoV0Base::IsV0InEtaAcc(Double_t dMin, Double_t dMax)
325{
326//
327// AliPicoV0Base::IsV0InEtaAcc
328//
329
330 Double_t dEta = KineRD().Eta();
331 if ((dEta<dMin) || (dEta>=dMax)) return kFALSE;
332
333 return kTRUE;
334}
335
336//_____________________________________________________________________________
337Bool_t AliPicoV0Base::IsDausInEtaAcc(Double_t dMin, Double_t dMax)
338{
339//
340// AliPicoV0Base::IsDausInEtaAcc
341//
342
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;
345
346 return kTRUE;
347}
348
349//_____________________________________________________________________________
350Double_t AliPicoV0Base::RapidityKa()
351{
352//
353// AliPicoV0Base::RapidityKa
354//
355
356 TLorentzVector v; v.SetVectM(KineRD(), fgkMassKshort);
357 return v.Rapidity();
358}
359
360//_____________________________________________________________________________
361Double_t AliPicoV0Base::RapidityLa()
362{
363//
364// AliPicoV0Base::RapidityLa
365//
366
367 TLorentzVector v; v.SetVectM(KineRD(), fgkMassLambda);
368 return v.Rapidity();
369}
370
371//_____________________________________________________________________________
372TLorentzVector AliPicoV0Base::KineKshort()
373{
374//
375// AliPicoV0Base::KineKshort
376//
377
378 TLorentzVector vPos; vPos.SetVectM(fP3Pos, fgkMassPion);
379 TLorentzVector vNeg; vNeg.SetVectM(fP3Neg, fgkMassPion);
380
381 return (vPos + vNeg);
382}
383
384//_____________________________________________________________________________
385TLorentzVector AliPicoV0Base::KineLambda()
386{
387//
388// AliPicoV0Base::KineLambda
389//
390
391 TLorentzVector vPos; vPos.SetVectM(fP3Pos, fgkMassProton);
392 TLorentzVector vNeg; vNeg.SetVectM(fP3Neg, fgkMassPion);
393
394 return (vPos + vNeg);
395}
396
397//_____________________________________________________________________________
398TLorentzVector AliPicoV0Base::KineAntiLa()
399{
400//
401// AliPicoV0Base::KineAntiLa
402//
403
404 TLorentzVector vPos; vPos.SetVectM(fP3Pos, fgkMassPion);
405 TLorentzVector vNeg; vNeg.SetVectM(fP3Neg, fgkMassProton);
406
407 return (vPos + vNeg);
408}