98420bc1e0270eedb3ba6bb53fa6dc30c2f3e9d2
[u/mrichter/AliRoot.git] / PWG0 / AliPWG0Helper.cxx
1 /* $Id$ */
2
3 #include <AliPWG0Helper.h>
4
5 #include <TParticle.h>
6 #include <TParticlePDG.h>
7
8 #include <AliLog.h>
9 #include <AliESD.h>
10 #include <AliESDVertex.h>
11
12 //____________________________________________________________________
13 ClassImp(AliPWG0Helper)
14
15 //____________________________________________________________________
16 Bool_t AliPWG0Helper::IsEventTriggered(AliESD* aEsd)
17 {
18   // check if the event was triggered
19   //
20   // MB should be
21   // ITS_SPD_GFO_L0  : 32
22   // VZERO_OR_LEFT   : 1
23   // VZERO_OR_RIGHT  : 2
24
25   ULong64_t triggerMask = aEsd->GetTriggerMask();
26
27   if (triggerMask&32 && ((triggerMask&1) || (triggerMask&2)))
28     return kTRUE;
29
30   return kFALSE;
31 }
32
33 //____________________________________________________________________
34 Bool_t AliPWG0Helper::IsVertexReconstructed(AliESD* aEsd)
35 {
36   // checks if the vertex is reasonable
37
38   const AliESDVertex* vtxESD = aEsd->GetVertex();
39
40   // the vertex should be reconstructed
41   if (strcmp(vtxESD->GetName(), "default")==0)
42     return kFALSE;
43
44   Double_t vtx_res[3];
45   vtx_res[0] = vtxESD->GetXRes();
46   vtx_res[1] = vtxESD->GetYRes();
47   vtx_res[2] = vtxESD->GetZRes();
48
49   if (vtx_res[2]==0 || vtx_res[2]>0.1)
50     return kFALSE;
51
52   return kTRUE;
53 }
54
55 //____________________________________________________________________
56 Bool_t AliPWG0Helper::IsPrimaryCharged(TParticle* aParticle, Int_t aTotalPrimaries)
57 {
58   //
59   // Returns if the given particle is a primary particle
60   // This function or a equivalent should be available in some common place of AliRoot
61   //
62
63   // if the particle has a daughter primary, we do not want to count it
64   if (aParticle->GetFirstDaughter() != -1 && aParticle->GetFirstDaughter() < aTotalPrimaries)
65   {
66     //AliDebug(AliLog::kDebug+1, "Dropping particle because it has a daughter among the primaries.");
67     return kFALSE;
68   }
69
70   Int_t pdgCode = TMath::Abs(aParticle->GetPdgCode());
71
72   // skip quarks and gluon
73   if (pdgCode <= 10 || pdgCode == 21)
74   {
75     //AliDebug(AliLog::kDebug+1, "Dropping particle because it is a quark or gluon.");
76     return kFALSE;
77   }
78
79   if (strcmp(aParticle->GetName(),"XXX") == 0)
80   {
81     //AliDebug(AliLog::kDebug, Form("WARNING: There is a particle named XXX."));
82     return kFALSE;
83   }
84
85   TParticlePDG* pdgPart = aParticle->GetPDG();
86
87   if (strcmp(pdgPart->ParticleClass(),"Unknown") == 0)
88   {
89     //AliDebug(AliLog::kDebug, Form("WARNING: There is a particle with an unknown particle class (pdg code %d).", pdgCode));
90     return kFALSE;
91   }
92
93   if (pdgPart->Charge() == 0)
94   {
95     //AliDebug(AliLog::kDebug+1, "Dropping particle because it is not charged.");
96     return kFALSE;
97   }
98
99   return kTRUE;
100 }