]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/mapping/AliMpArrayI.cxx
Update HFE v2 analyses
[u/mrichter/AliRoot.git] / MUON / mapping / AliMpArrayI.cxx
index ad73de0dc767ce4ba49d04e7877da190c1763c40..52b85e75ac1245bc3437a1bb0afc95b1c84796e2 100644 (file)
 // $Id$
 // $MpId: AliMpArrayI.cxx,v 1.5 2006/05/24 13:58:29 ivana Exp $
 // Category: basic
-// ------------------------
+
+//-----------------------------------------------------------------------------
 // Class AliMpArrayI
 // ------------------------
 // Helper class for sorted integer array
 // Author:Ivana Hrivnacova; IPN Orsay
+//-----------------------------------------------------------------------------
 
 #include "AliMpArrayI.h"
 
@@ -33,6 +35,7 @@
 #include <stdlib.h>
 #include <limits.h>
 
+using std::endl;
 /// \cond CLASSIMP
 ClassImp(AliMpArrayI)
 /// \endcond
@@ -45,7 +48,8 @@ AliMpArrayI::AliMpArrayI(Bool_t sort)
     fSort(sort),
     fNofValues(0),
     fValues(fgkDefaultSize),
-    fLimits(INT_MIN,INT_MAX)
+    fMinValue(INT_MAX),
+    fMaxValue(INT_MIN)
 {
 /// Standard & default constructor
 
@@ -57,7 +61,8 @@ AliMpArrayI::AliMpArrayI(TRootIOCtor* /*ioCtor*/)
     fSort(),
     fNofValues(),
     fValues(),
-    fLimits()
+    fMinValue(),
+    fMaxValue()
 {
 /// IO constructor
 }
@@ -89,17 +94,20 @@ Int_t  AliMpArrayI::GetPosition(Int_t value) const
 //
 
 //_____________________________________________________________________________
-Bool_t AliMpArrayI::Add(Int_t value)
+Bool_t AliMpArrayI::Add(Int_t value, Bool_t warn)
 {
 /// Add object with its key to the map and arrays
   
   // Resize array if needed
-  if ( fValues.GetSize() == fNofValues ) {
-   fValues.Set(2*fValues.GetSize());
-   AliWarningStream() << "Resized array." << endl;
+  if ( fValues.GetSize() == fNofValues ) 
+  {
+    fValues.Set(2*fValues.GetSize());
+    if ( warn ) 
+    {
+      AliWarningStream() << "Resized array." << endl;
+    }
   }
   
-  
   // The position for the new value  
   Int_t pos;
   if ( fSort ) {
@@ -117,8 +125,8 @@ Bool_t AliMpArrayI::Add(Int_t value)
   ++fNofValues;
   
   // Update linits
-  if ( value < fLimits.GetFirst() )  fLimits.SetFirst(value);
-  if ( value > fLimits.GetSecond() ) fLimits.SetSecond(value);
+  if ( value < fMinValue )  fMinValue = value;
+  if ( value > fMaxValue )  fMaxValue = value;;
   
   return true;
 }
@@ -144,6 +152,41 @@ Bool_t AliMpArrayI::Remove(Int_t value)
   return true;
 }
 
+//_____________________________________________________________________________
+Bool_t  AliMpArrayI::Revert()
+{
+/// Revert the order of elements
+
+  if ( fSort ) {
+    AliErrorStream() << "Cannot revert sorted array." << endl;
+    return false;
+  }  
+
+  Int_t size = GetSize();
+  TArrayI newArray(size);
+  Int_t idx = 0 ;
+  for ( Int_t i = size-1 ; i >= 0 ; i--) {
+    Int_t value = GetValue(i);
+    newArray.AddAt(value,idx++);
+  }
+
+  for (Int_t i = 0; i < size ; i++) {
+    fValues[i]=newArray.At(i);
+  }
+  return true;
+}  
+
+//_____________________________________________________________________________
+void AliMpArrayI::Reset()
+{
+/// Reset the array
+
+  fValues.Set(fgkDefaultSize);
+  fNofValues = 0;
+  fMinValue = INT_MAX;
+  fMaxValue = INT_MIN;
+} 
+
 //_____________________________________________________________________________
 void AliMpArrayI::SetSize(Int_t size)
 {
@@ -180,7 +223,7 @@ Bool_t AliMpArrayI::HasValue(Int_t value) const
 
   if ( ! fNofValues ) return false;
 
-  if ( value < fLimits.GetFirst() || value > fLimits.GetSecond() ) 
+  if ( value < fMinValue || value > fMaxValue ) 
     return false;
 
   for ( Int_t i=0; i<fNofValues; i++ )