]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG2/RESONANCES/AliRsnValue.cxx
fix for bug #70582 (change from L. Molnar)
[u/mrichter/AliRoot.git] / PWG2 / RESONANCES / AliRsnValue.cxx
CommitLineData
b9bbd271 1//
2// Class AliRsnValue
3//
4// Definition of a single value which can be computed
5// from any of the defined input objects implemented
6// in the resonance package.
7//
8
9#include "AliRsnEvent.h"
10#include "AliRsnDaughter.h"
11#include "AliRsnPairParticle.h"
12#include "AliRsnPairDef.h"
13
14#include "AliRsnValue.h"
15
16ClassImp(AliRsnValue)
17
18//_____________________________________________________________________________
19AliRsnValue::AliRsnValue(EAxisType type) : fType(type)
20{
21//
22// Constructor
23//
24}
25
26//_____________________________________________________________________________
27const char* AliRsnValue::GetName() const
28{
29//
30// Return the name of this object defined by the type
31//
32
33 switch (fType)
34 {
35 case kTrackPt: return "PT";
36 case kTrackEta: return "ETA";
37 case kTrack1P: return "P1";
38 case kTrack2P: return "P2";
39 case kTrack1Pt: return "PT1";
40 case kTrack2Pt: return "PT2";
41 case kPairInvMass: return "IM";
42 case kPairInvMassMC: return "IMMC";
43 case kPairInvMassRes: return "IMRES";
44 case kPairPt: return "PT";
45 case kPairEta: return "ETA";
46 case kPairMt: return "MT";
47 case kPairY: return "Y";
48 case kEventMult: return "MULT";
49 default: return "UNDEF";
50 }
51}
52
53//_____________________________________________________________________________
54AliRsnValue::EAxisObject AliRsnValue::GetAxisObject() const
55{
56//
57// Tells what kind of object must be evaluated for this axis
58//
59
60 switch (fType)
61 {
62 // values coming from single track
63 case kTrackPt:
64 case kTrackEta:
65 return kParticle;
66 // values coming from pair
67 case kTrack1P:
68 case kTrack2P:
69 case kTrack1Pt:
70 case kTrack2Pt:
71 case kPairInvMass:
72 case kPairInvMassMC:
73 case kPairInvMassRes:
74 case kPairPt:
75 case kPairEta:
76 case kPairMt:
77 case kPairY:
78 return kPair;
79 // values coming from event
80 case kEventMult:
81 return kEvent;
82 default:
83 return kNone;
84 }
85}
86
87//_____________________________________________________________________________
88Double_t AliRsnValue::Eval(TObject * const obj, const AliRsnPairDef *pairDef) const
89{
90//
91// Evaluation of the required value.
92// Checks that the passed object is of the right type
93// and if this check is successful, returns the required value.
94// The output of the function tells if it was successful,
95// and the values must be taken with GetValue().
96//
97
98 // dynamic casting
99 AliRsnDaughter *track = dynamic_cast<AliRsnDaughter*>(obj);
100 AliRsnPairParticle *pair = dynamic_cast<AliRsnPairParticle*>(obj);
101 AliRsnEvent *event = dynamic_cast<AliRsnEvent*>(obj);
102
103 // check that the object type and required input match
104 EAxisObject requiredInput = GetAxisObject();
105 Double_t mass = pairDef->GetMotherMass();
106 if (requiredInput == kParticle && !track)
107 return 0.0;
108 else if (requiredInput == kPair)
109 {
110 if (!pair)
111 return 0.0;
112 else
113 {
114 // if we are filling a pair, we need the pair def
115 if (pairDef)
116 mass = pairDef->GetMotherMass();
117 else
118 {
119 AliError("Cannot compute a 'pair' value if I don't have a vaild PairDef");
120 return 0.0;
121 }
122 }
123 }
124 else if (requiredInput == kEvent && !event)
125 {
126 return 0.0;
127 }
128 else
129 {
130 AliError(Form("Failed computation: expected type %d, passed a '%s'", (Int_t)requiredInput, obj->ClassName()));
131 return 0.0;
132 }
133
134 switch (fType)
135 {
136 case kTrackPt:
137 return track->Pt();
138 case kTrackEta:
139 return track->Eta();
140 case kTrack1P:
141 return pair->GetDaughter(0)->P();
142 case kTrack2P:
143 return pair->GetDaughter(1)->P();
144 case kTrack1Pt:
145 return pair->GetDaughter(0)->Pt();
146 case kTrack2Pt:
147 return pair->GetDaughter(1)->Pt();
148 case kPairInvMass:
149 return pair->GetInvMass(pairDef->GetMass(0), pairDef->GetMass(1));
150 case kPairInvMassMC:
151 return pair->GetInvMassMC(pairDef->GetMass(0), pairDef->GetMass(1));
152 case kPairInvMassRes:
153 {
154 Double_t value;
155 value = pair->GetInvMass (pairDef->GetMass(0), pairDef->GetMass(1));
156 value -= pair->GetInvMassMC(pairDef->GetMass(0), pairDef->GetMass(1));
157 value /= pair->GetInvMassMC(pairDef->GetMass(0), pairDef->GetMass(1));
158 return value;
159 }
160 case kPairPt:
161 return pair->GetPt();
162 case kPairEta:
163 return pair->GetEta();
164 case kPairMt:
165 if (TMath::Abs(mass) < 1E-5) AliWarning(Form("Suspicious mass value specified: %f", mass));
166 return (TMath::Sqrt(pair->GetPt()*pair->GetPt() + mass*mass) - mass);
167 case kPairY:
168 if (TMath::Abs(mass) < 1E-5) AliWarning(Form("Suspicious mass value specified: %f", mass));
169 return pair->GetY(mass);
170 case kEventMult:
171 return (Double_t)event->GetMultiplicity();
172 default:
173 AliWarning("Invalid value type");
174 return 0.0;
175 }
176}