2 // Class AliMixEventCutObj
4 // AliMixEventCutObj object contains information about one cut on for event mixing
5 // used by AliMixEventPool class
8 // Martin Vala (martin.vala@cern.ch)
12 #include "AliESDEvent.h"
13 #include "AliAODEvent.h"
14 #include "AliMultiplicity.h"
16 #include "AliMixEventCutObj.h"
18 ClassImp(AliMixEventCutObj)
20 //_________________________________________________________________________________________________
21 AliMixEventCutObj::AliMixEventCutObj(EEPAxis_t type, Float_t min, Float_t max, Float_t step) : TObject(),
22 fCutType((Int_t)type),
30 // Default constructor
32 AliDebug(AliLog::kDebug + 5, "<-");
33 if (fCutStep < 1e-5) AliError("fCutStep is too small !!! This cut will not work !!!");
34 AliDebug(AliLog::kDebug + 5, "->");
37 //_________________________________________________________________________________________________
38 AliMixEventCutObj::AliMixEventCutObj(const AliMixEventCutObj &obj) : TObject(obj),
39 fCutType(obj.fCutType),
42 fCutStep(obj.fCutStep),
43 fCutSmallVal(obj.fCutSmallVal),
44 fCurrentVal(obj.fCurrentVal)
49 AliDebug(AliLog::kDebug + 5, "<-");
50 AliDebug(AliLog::kDebug + 5, "->");
53 //_________________________________________________________________________________________________
54 AliMixEventCutObj& AliMixEventCutObj::operator=(const AliMixEventCutObj& obj)
60 TObject::operator=(obj);
61 fCutType = obj.fCutType;
62 fCutMin = obj.fCutMin;
63 fCutMax = obj.fCutMax;
64 fCutStep = obj.fCutStep;
65 fCutSmallVal = obj.fCutSmallVal;
66 fCurrentVal = obj.fCurrentVal;
67 // fNoMore = obj.fNoMore;
73 //_________________________________________________________________________________________________
74 void AliMixEventCutObj::Reset()
79 AliDebug(AliLog::kDebug + 5, "<-");
80 fCurrentVal = fCutMin - fCutStep;
81 AliDebug(AliLog::kDebug + 5, "->");
83 //_________________________________________________________________________________________________
84 Bool_t AliMixEventCutObj::HasMore() const
87 // Return kTRUE when fCurrentVal is in interval of cut range
89 return ((fCurrentVal + fCutStep) < fCutMax);
92 //_________________________________________________________________________________________________
93 void AliMixEventCutObj::AddStep()
98 fCurrentVal += fCutStep;
101 //_________________________________________________________________________________________________
102 void AliMixEventCutObj::Print(const Option_t *) const
105 // Prints cut information
107 AliInfo(Form("%s %f %f %f", GetCutName(fCutType), fCutMin, fCutMax, fCutStep));
109 //_________________________________________________________________________________________________
110 void AliMixEventCutObj::PrintCurrentInterval()
113 // Prints current cut interval information
115 AliDebug(AliLog::kDebug, Form("%s <%f,%f>", GetCutName(fCutType), GetMin(), GetMax()));
118 //_________________________________________________________________________________________________
119 Int_t AliMixEventCutObj::GetNumberOfBins() const
122 // Returns number of bins
124 if (fCutStep < 1e-5) return -1;
125 return (Int_t)((fCutMax - fCutMin) / fCutStep);
128 //_________________________________________________________________________________________________
129 Int_t AliMixEventCutObj::GetBinNumber(Float_t num) const
132 // Returns bin (index) number in current cut.
133 // Returns -1 in case of out of range
136 for (Float_t i = fCutMin; i <= fCutMax - fCutSmallVal; i += fCutStep) {
138 if ((num >= i) && (num <= i + fCutStep - fCutSmallVal)) return binNum;
143 //_________________________________________________________________________________________________
144 Int_t AliMixEventCutObj::GetIndex(AliVEvent *ev)
147 // Finds bin (index) in current cut from event information.
149 AliESDEvent *esd = dynamic_cast<AliESDEvent *>(ev);
150 if (esd) return GetIndex(esd);
151 AliAODEvent *aod = dynamic_cast<AliAODEvent *>(ev);
152 if (aod) return GetIndex(aod);
156 //_________________________________________________________________________________________________
157 Int_t AliMixEventCutObj::GetIndex(AliESDEvent *ev)
160 // Finds bin (index) in current cut from ESD event information.
164 return GetBinNumber((Float_t)ev->GetNumberOfTracks());
166 return GetBinNumber(ev->GetVertex()->GetZ());
168 return GetBinNumber(ev->GetNumberOfV0s());
169 case kNumberTracklets:
170 const AliMultiplicity *multESD = ev->GetMultiplicity();
171 return GetBinNumber(multESD->GetNumberOfTracklets());
176 //_________________________________________________________________________________________________
177 Int_t AliMixEventCutObj::GetIndex(AliAODEvent *ev)
180 // Finds bin (index) in current cut from AOD event information.
184 return GetBinNumber((Float_t)ev->GetNumberOfTracks());
186 return GetBinNumber(ev->GetVertex(0)->GetZ());
188 return GetBinNumber(ev->GetNumberOfV0s());
192 //_________________________________________________________________________________________________
193 const char *AliMixEventCutObj::GetCutName(Int_t index) const
196 // Retruns name of cut
199 if (index < 0) index = fCutType;
202 return "Multiplicity";
207 case kNumberTracklets:
208 return "NumberTracklets";
213 //_________________________________________________________________________________________________
214 void AliMixEventCutObj::SetCurrentValueToIndex(Int_t index)
217 // Sets current value to index
219 for (Int_t i = 0; i < index; i++) AddStep();