Port of new Event Mixing implementation
[u/mrichter/AliRoot.git] / ANALYSIS / EventMixing / AliMixEventCutObj.cxx
index 55bc5cbb80b2c929b4d6f412e883c856433ee4dc..618467ae68a11ec9b0a6989e94f692fb11fc7c4a 100644 (file)
@@ -4,7 +4,7 @@
 // AliMixEventCutObj object contains information about one cut on for event mixing
 // used by AliMixEventPool class
 //
-// authors: 
+// authors:
 //          Martin Vala (martin.vala@cern.ch)
 //
 
@@ -19,170 +19,202 @@ ClassImp(AliMixEventCutObj)
 
 //_________________________________________________________________________________________________
 AliMixEventCutObj::AliMixEventCutObj(EEPAxis_t type, Float_t min, Float_t max, Float_t step) : TObject(),
-    fCutType((Short_t)type),
-    fCutMin(min),
-    fCutMax(max),
-    fCutStep(step),
-    fCutSmallVal((max - min) / (step*1e6)),
-    fCurrentVal(min),
-    fNoMore(kFALSE) {
-  //
-  // Default constructor.
-  //
-
-  AliDebug(AliLog::kDebug + 2, "<-");
-
-  AliDebug(AliLog::kDebug + 2, "->");
+   fCutType((Int_t)type),
+   fCutMin(min),
+   fCutMax(max),
+   fCutStep(step),
+   fCutSmallVal(0),
+   fCurrentVal(min)
+{
+   //
+   // Default constructor
+   //
+   AliDebug(AliLog::kDebug + 5, "<-");
+   if (fCutStep < 1e-5) AliError("fCutStep is too small !!! This cut will not work !!!");
+   AliDebug(AliLog::kDebug + 5, "->");
 }
+
 //_________________________________________________________________________________________________
-AliMixEventCutObj::AliMixEventCutObj(const AliMixEventCutObj& obj) : TObject(obj),
-    fCutType(obj.fCutType),
-    fCutMin(obj.fCutMin),
-    fCutMax(obj.fCutMax),
-    fCutStep(obj.fCutStep),
-    fCutSmallVal(obj.fCutSmallVal),
-    fCurrentVal(obj.fCurrentVal),
-    fNoMore(obj.fNoMore) {
-  //
-  // Copy constructor.
-  //
+AliMixEventCutObj::AliMixEventCutObj(const AliMixEventCutObj &obj) : TObject(obj),
+   fCutType(obj.fCutType),
+   fCutMin(obj.fCutMin),
+   fCutMax(obj.fCutMax),
+   fCutStep(obj.fCutStep),
+   fCutSmallVal(obj.fCutSmallVal),
+   fCurrentVal(obj.fCurrentVal)
+{
+   //
+   // Copy constructor
+   //
+   AliDebug(AliLog::kDebug + 5, "<-");
+   AliDebug(AliLog::kDebug + 5, "->");
 }
 
 //_________________________________________________________________________________________________
-void AliMixEventCutObj::Reset() {
-  //
-  // Reset cut.
-  //
-
-  AliDebug(AliLog::kDebug + 2, "<-");
-  fCurrentVal = fCutMin - fCutStep;
-  fNoMore = kFALSE;
-  AliDebug(AliLog::kDebug + 2, "->");
+AliMixEventCutObj& AliMixEventCutObj::operator=(const AliMixEventCutObj& obj)
+{
+   //
+   // Assigned operator
+   //
+   if (&obj != this) {
+      TObject::operator=(obj);
+      fCutType = obj.fCutType;
+      fCutMin = obj.fCutMin;
+      fCutMax = obj.fCutMax;
+      fCutStep = obj.fCutStep;
+      fCutSmallVal = obj.fCutSmallVal;
+      fCurrentVal = obj.fCurrentVal;
+//       fNoMore = obj.fNoMore;
+   }
+   return *this;
 }
+
+
 //_________________________________________________________________________________________________
-Bool_t AliMixEventCutObj::HasMore() const {
-  //
-  // Return kTRUE when fCurrentVal is in interval of cut range
-  //
-  
-  return ((fCurrentVal + fCutStep) < fCutMax);
+void AliMixEventCutObj::Reset()
+{
+   //
+   // Reset cut
+   //
+   AliDebug(AliLog::kDebug + 5, "<-");
+   fCurrentVal = fCutMin - fCutStep;
+   AliDebug(AliLog::kDebug + 5, "->");
+}
+//_________________________________________________________________________________________________
+Bool_t AliMixEventCutObj::HasMore() const
+{
+   //
+   // Return kTRUE when fCurrentVal is in interval of cut range
+   //
+   return ((fCurrentVal + fCutStep) < fCutMax);
 }
 
 //_________________________________________________________________________________________________
-void AliMixEventCutObj::AddStep() {
-  //
-  // Adds step
-  //
-  
-  fCurrentVal += fCutStep;
+void AliMixEventCutObj::AddStep()
+{
+   //
+   // Adds step
+   //
+   fCurrentVal += fCutStep;
 }
 
 //_________________________________________________________________________________________________
-void AliMixEventCutObj::Print(const Option_t *) const {
-  //
-  // Prints cut information
-  //
-  
-  AliInfo(Form("%d %f %f %f", fCutType, fCutMin, fCutMax, fCutStep));
+void AliMixEventCutObj::Print(const Option_t *) const
+{
+   //
+   // Prints cut information
+   //
+   AliInfo(Form("%s %f %f %f", GetCutName(fCutType), fCutMin, fCutMax, fCutStep));
 }
 //_________________________________________________________________________________________________
-void AliMixEventCutObj::PrintCurrentInterval() {
-  //
-  // Prints current cut interval information
-  //
-  
-  AliInfo(Form("%s <%f,%f>", GetNameOfCut(fCutType), GetMin(), GetMax()));
+void AliMixEventCutObj::PrintCurrentInterval()
+{
+   //
+   // Prints current cut interval information
+   //
+   AliDebug(AliLog::kDebug, Form("%s <%f,%f>", GetCutName(fCutType), GetMin(), GetMax()));
 }
 
 //_________________________________________________________________________________________________
-Int_t AliMixEventCutObj::GetNumberOfBins() const {
-  //
-  // Returns number of bins
-  //
-  
-  if (!fCutStep) return -1;
-  return (Int_t)((fCutMax -fCutMin) / fCutStep);
+Int_t AliMixEventCutObj::GetNumberOfBins() const
+{
+   //
+   // Returns number of bins
+   //
+   if (fCutStep < 1e-5) return -1;
+   return (Int_t)((fCutMax - fCutMin) / fCutStep);
 }
 
 //_________________________________________________________________________________________________
-Int_t AliMixEventCutObj::GetBinNumber(Float_t num) const {
-  //
-  // Returns bin (index) number in current cut.
-  // Returns -1 in case of out of range
-  //
-  
-  Int_t binNum = 0;
-  for (Float_t i = fCutMin;i <= fCutMax - fCutSmallVal;i += fCutStep) {
-    binNum++;
-    if ((num >= i) && (num <= i + fCutStep - fCutSmallVal)) return binNum;
-
-  }
-  return -1;
+Int_t AliMixEventCutObj::GetBinNumber(Float_t num) const
+{
+   //
+   // Returns bin (index) number in current cut.
+   // Returns -1 in case of out of range
+   //
+   Int_t binNum = 0;
+   for (Float_t i = fCutMin; i <= fCutMax - fCutSmallVal; i += fCutStep) {
+      binNum++;
+      if ((num >= i) && (num <= i + fCutStep - fCutSmallVal)) return binNum;
+   }
+   return -1;
 }
 
 //_________________________________________________________________________________________________
-Int_t AliMixEventCutObj::GetIndex(AliVEvent* ev) {
-  //
-  // Finds bin (index) in current cut from event information.
-  //
-  
-  AliESDEvent *esd = dynamic_cast<AliESDEvent*>(ev);
-  if (esd) return GetIndex(esd);
-  AliAODEvent *aod = dynamic_cast<AliAODEvent*>(ev);
-  if (aod) return GetIndex(aod);
-  return -1;
+Int_t AliMixEventCutObj::GetIndex(AliVEvent *ev)
+{
+   //
+   // Finds bin (index) in current cut from event information.
+   //
+   AliESDEvent *esd = dynamic_cast<AliESDEvent *>(ev);
+   if (esd) return GetIndex(esd);
+   AliAODEvent *aod = dynamic_cast<AliAODEvent *>(ev);
+   if (aod) return GetIndex(aod);
+   return -1;
 }
 
 //_________________________________________________________________________________________________
-Int_t AliMixEventCutObj::GetIndex(AliESDEvent* ev) {
-  //
-  // Finds bin (index) in current cut from ESD event information.
-  //
-  switch (fCutType) {
-  case kMultiplicity:
-    return GetBinNumber((Float_t)ev->GetNumberOfTracks());
-  case kZVertex:
-    return GetBinNumber(ev->GetVertex()->GetZ());
-  case kNumberV0s:
-    return GetBinNumber(ev->GetNumberOfV0s());
-  case kNumberTracklets:
-    const AliMultiplicity* multESD = ev->GetMultiplicity();
-    return GetBinNumber(multESD->GetNumberOfTracklets());
-  }
-  return -1;
+Int_t AliMixEventCutObj::GetIndex(AliESDEvent *ev)
+{
+   //
+   // Finds bin (index) in current cut from ESD event information.
+   //
+   switch (fCutType) {
+      case kMultiplicity:
+         return GetBinNumber((Float_t)ev->GetNumberOfTracks());
+      case kZVertex:
+         return GetBinNumber(ev->GetVertex()->GetZ());
+      case kNumberV0s:
+         return GetBinNumber(ev->GetNumberOfV0s());
+      case kNumberTracklets:
+         const AliMultiplicity *multESD = ev->GetMultiplicity();
+         return GetBinNumber(multESD->GetNumberOfTracklets());
+   }
+   return -1;
 }
 
 //_________________________________________________________________________________________________
-Int_t AliMixEventCutObj::GetIndex(AliAODEvent* ev) {
-  //
-  // Finds bin (index) in current cut from AOD event information.
-  //
-  switch (fCutType) {
-  case kMultiplicity:
-    return GetBinNumber((Float_t)ev->GetNumberOfTracks());
-  case kZVertex:
-    return GetBinNumber(ev->GetVertex(0)->GetZ());
-  case kNumberV0s:
-    return GetBinNumber(ev->GetNumberOfV0s());
-  }
-  return -1;
+Int_t AliMixEventCutObj::GetIndex(AliAODEvent *ev)
+{
+   //
+   // Finds bin (index) in current cut from AOD event information.
+   //
+   switch (fCutType) {
+      case kMultiplicity:
+         return GetBinNumber((Float_t)ev->GetNumberOfTracks());
+      case kZVertex:
+         return GetBinNumber(ev->GetVertex(0)->GetZ());
+      case kNumberV0s:
+         return GetBinNumber(ev->GetNumberOfV0s());
+   }
+   return -1;
 }
 //_________________________________________________________________________________________________
-const char* AliMixEventCutObj::GetNameOfCut(Short_t index) const
+const char *AliMixEventCutObj::GetCutName(Int_t index) const
 {
-  //
-  // Retruns name of cut
-  //
-  switch ((Int_t)index) {
-    case kMultiplicity:
-      return "Multiplicity";
-    case kZVertex:
-      return "ZVertex";
-    case kNumberV0s:
-      return "NumberV0s";
-    case kNumberTracklets:
-      return "NumberTracklets";
-  }
-  return "";
+   //
+   // Retruns name of cut
+   //
+
+   if (index < 0) index = fCutType;
+   switch (index) {
+      case kMultiplicity:
+         return "Multiplicity";
+      case kZVertex:
+         return "ZVertex";
+      case kNumberV0s:
+         return "NumberV0s";
+      case kNumberTracklets:
+         return "NumberTracklets";
+   }
+   return "";
 }
 
+//_________________________________________________________________________________________________
+void AliMixEventCutObj::SetCurrentValueToIndex(Int_t index)
+{
+   //
+   // Sets current value to index
+   //
+   for (Int_t i = 0; i < index; i++) AddStep();
+}