Index: /trunk/MagicSoft/include-Classes/MBase/MArray.h
===================================================================
--- /trunk/MagicSoft/include-Classes/MBase/MArray.h	(revision 490)
+++ /trunk/MagicSoft/include-Classes/MBase/MArray.h	(revision 490)
@@ -0,0 +1,31 @@
+#ifndef MARRAY_H
+#define MARRAY_H
+
+#ifndef MAGIC_H
+#include "MAGIC.h"
+#endif
+
+#ifndef ROOT_TObject
+#include <TObject.h>
+#endif
+
+class MArray : public TObject
+{
+protected:
+    Int_t fN; // Number of array elements
+
+public:
+   MArray()                              { fN = 0; }
+   MArray(Int_t n)                       { fN = n; }
+   MArray(const MArray &a)               { fN = a.fN; }
+   virtual ~MArray()                     { fN = 0; }
+
+   MArray &operator=(const MArray &rhs)  { fN = rhs.fN; return *this; }
+
+   Int_t        GetSize() const          { return fN; }
+   virtual void Set(Int_t n) = 0;
+
+   ClassDef(MArray, 1)  //Abstract array base class for TObject derived Arrays
+};
+
+#endif
Index: /trunk/MagicSoft/include-Classes/MBase/MArrayB.cc
===================================================================
--- /trunk/MagicSoft/include-Classes/MBase/MArrayB.cc	(revision 490)
+++ /trunk/MagicSoft/include-Classes/MBase/MArrayB.cc	(revision 490)
@@ -0,0 +1,4 @@
+#include "MArrayB.h"
+
+ClassImp(MArrayB)
+
Index: /trunk/MagicSoft/include-Classes/MBase/MArrayB.h
===================================================================
--- /trunk/MagicSoft/include-Classes/MBase/MArrayB.h	(revision 490)
+++ /trunk/MagicSoft/include-Classes/MBase/MArrayB.h	(revision 490)
@@ -0,0 +1,167 @@
+#ifndef MARRAYB_H
+#define MARRAYB_H
+
+#ifndef MARRAY_H
+#include "MArray.h"
+#endif
+
+#include <string.h>
+
+
+class MArrayB : public MArray
+{
+private:
+    Byte_t *fArray; //[fN] Array of fN chars
+
+public:
+
+    MArrayB()
+    {
+        fN = 0;
+        fArray = NULL;
+    }
+
+    MArrayB(Int_t n)
+    {
+        fN = 0;
+        fArray = NULL;
+        if (n > 0)
+            Set(n);
+    }
+
+    MArrayB(Int_t n, Byte_t *array)
+    {
+        // Create TArrayC object and initialize it with values of array.
+        fN = 0;
+        fArray = NULL;
+        Set(n, array);
+    }
+
+    MArrayB(const MArrayB &array)
+    {
+        // Copy constructor.
+        fArray = NULL;
+        Set(array.fN, array.fArray);
+    }
+
+    Int_t GetSize() const
+    {
+        return fN;
+    }
+
+    MArrayB &operator=(const MArrayB &rhs)
+    {
+        // TArrayC assignment operator.
+        if (this != &rhs)
+            Set(rhs.fN, rhs.fArray);
+        return *this;
+    }
+
+    virtual ~MArrayB()
+    {
+        // Delete TArrayC object.
+        delete [] fArray;
+        fArray = NULL;
+    }
+
+    void Adopt(Int_t n, Byte_t *array)
+    {
+        // Adopt array arr into TArrayC, i.e. don't copy arr but use it directly
+        // in TArrayC. User may not delete arr, TArrayC dtor will do it.
+        if (fArray)
+            delete [] fArray;
+
+        fN     = n;
+        fArray = array;
+    }
+
+    void AddAt(Byte_t c, Int_t i)
+    {
+        // Add char c at position i. Check for out of bounds.
+        fArray[i] = c;
+    }
+
+    void AddAt(Byte_t *array, Int_t i, Int_t n)
+    {
+        // Add char c at position i. Check for out of bounds.
+        memcpy(fArray+i, array, n*sizeof(Byte_t));
+    }
+
+    Byte_t     At(Int_t i)
+    {
+        return fArray[i];
+    }
+
+    Byte_t    *GetArray() const
+    {
+        return fArray;
+    }
+
+    void Reset()
+    {
+        memset(fArray, 0, fN*sizeof(Byte_t));
+    }
+
+    void Set(Int_t n)
+    {
+        // Set size of this array to n chars.
+        // A new array is created, the old contents copied to the new array,
+        // then the old array is deleted.
+
+        if (n < 0 || n==fN)
+            return;
+
+        Byte_t *temp = fArray;
+        if (n != 0)
+        {
+            fArray = new Byte_t[n];
+            if (n < fN)
+                memcpy(fArray,temp, n*sizeof(Byte_t));
+            else
+            {
+                memcpy(fArray,temp,fN*sizeof(Byte_t));
+                memset(&fArray[fN],0,(n-fN)*sizeof(Byte_t));
+            }
+        }
+        else
+        {
+            fArray = 0;
+        }
+
+        if (fN)
+            delete [] temp;
+
+        fN = n;
+    }
+
+    void Set(Int_t n, Byte_t *array)
+    {
+        // Set size of this array to n chars and set the contents.
+        if (n < 0 || array == 0)
+            return;
+
+        if (fArray && fN != n)
+        {
+            delete [] fArray;
+            fArray = 0;
+        }
+        fN = n;
+
+        if (fN == 0)
+            return;
+
+        if (!fArray)
+            fArray = new Byte_t[fN];
+
+        memcpy(fArray,array, n*sizeof(Byte_t));
+    }
+
+    Byte_t &operator[](Int_t i)
+    {
+        return fArray[i];
+    }
+
+    ClassDef(MArrayB, 1)  //Array of Byte_t
+};
+
+#endif
Index: /trunk/MagicSoft/include-Classes/MBase/MArrayS.cc
===================================================================
--- /trunk/MagicSoft/include-Classes/MBase/MArrayS.cc	(revision 490)
+++ /trunk/MagicSoft/include-Classes/MBase/MArrayS.cc	(revision 490)
@@ -0,0 +1,4 @@
+#include "MArrayS.h"
+
+ClassImp(MArrayS)
+
Index: /trunk/MagicSoft/include-Classes/MBase/MArrayS.h
===================================================================
--- /trunk/MagicSoft/include-Classes/MBase/MArrayS.h	(revision 490)
+++ /trunk/MagicSoft/include-Classes/MBase/MArrayS.h	(revision 490)
@@ -0,0 +1,160 @@
+#ifndef MARRAYS_H
+#define MARRAYS_H
+
+#ifndef MARRAY_H
+#include "MArray.h"
+#endif
+
+#include <string.h>
+
+class MArrayS : public MArray
+{
+private:
+    UShort_t *fArray; //[fN] Array of fN chars
+
+public:
+
+    MArrayS()
+    {
+        fN = 0;
+        fArray = NULL;
+    }
+
+    MArrayS(Int_t n)
+    {
+        fN = 0;
+        fArray = NULL;
+        if (n > 0)
+            Set(n);
+    }
+
+    MArrayS(Int_t n, UShort_t *array)
+    {
+        // Create TArrayC object and initialize it with values of array.
+        fN = 0;
+        fArray = NULL;
+        Set(n, array);
+    }
+
+    MArrayS(const MArrayS &array)
+    {
+        // Copy constructor.
+        fArray = NULL;
+        Set(array.fN, array.fArray);
+    }
+
+    Int_t GetSize() const
+    {
+        return fN;
+    }
+
+    MArrayS &operator=(const MArrayS &rhs)
+    {
+        // TArrayC assignment operator.
+        if (this != &rhs)
+            Set(rhs.fN, rhs.fArray);
+        return *this;
+    }
+
+    virtual ~MArrayS()
+    {
+        // Delete TArrayC object.
+        delete [] fArray;
+        fArray = NULL;
+    }
+
+    void Adopt(Int_t n, UShort_t *array)
+    {
+        // Adopt array arr into TArrayC, i.e. don't copy arr but use it directly
+        // in TArrayC. User may not delete arr, TArrayC dtor will do it.
+        if (fArray)
+            delete [] fArray;
+
+        fN     = n;
+        fArray = array;
+    }
+
+    void AddAt(UShort_t c, Int_t i)
+    {
+        // Add char c at position i. Check for out of bounds.
+        fArray[i] = c;
+    }
+
+    UShort_t     At(Int_t i)
+    {
+        return fArray[i];
+    }
+
+    UShort_t    *GetArray() const
+    {
+        return fArray;
+    }
+
+    void Reset()
+    {
+        memset(fArray, 0, fN*sizeof(UShort_t));
+    }
+
+    void Set(Int_t n)
+    {
+        // Set size of this array to n chars.
+        // A new array is created, the old contents copied to the new array,
+        // then the old array is deleted.
+
+        if (n < 0 || n==fN)
+            return;
+
+        UShort_t *temp = fArray;
+        if (n != 0)
+        {
+            fArray = new UShort_t[n];
+            if (n < fN)
+                memcpy(fArray, temp, n*sizeof(UShort_t));
+            else
+            {
+                memcpy(fArray, temp, fN*sizeof(UShort_t));
+                memset(&fArray[fN], 0, (n-fN)*sizeof(UShort_t));
+            }
+        }
+        else
+        {
+            fArray = NULL;
+        }
+
+        if (fN)
+            delete [] temp;
+
+        fN = n;
+    }
+
+    void Set(Int_t n, UShort_t *array)
+    {
+        // Set size of this array to n chars and set the contents.
+        if (n < 0 || array == 0)
+            return;
+
+        if (fArray && fN != n)
+        {
+            delete [] fArray;
+            fArray = 0;
+        }
+        fN = n;
+
+        if (fN == 0)
+            return;
+
+        if (!fArray)
+            fArray = new UShort_t[fN];
+
+        memcpy(fArray, array, n*sizeof(UShort_t));
+    }
+
+    UShort_t &operator[](Int_t i)
+    {
+        return fArray[i];
+    }
+
+    ClassDef(MArrayS, 1)  //Array of UShort_t
+};
+
+#endif
Index: /trunk/MagicSoft/include-Classes/MBase/MParContainer.cc
===================================================================
--- /trunk/MagicSoft/include-Classes/MBase/MParContainer.cc	(revision 490)
+++ /trunk/MagicSoft/include-Classes/MBase/MParContainer.cc	(revision 490)
@@ -0,0 +1,137 @@
+//////////////////////////////////////////////////////////////////////////
+//                                                                      //
+// TNamed                                                               //
+//                                                                      //
+// The TNamed class is the base class for all named ROOT classes        //
+// A TNamed contains the essential elements (name, title)               //
+// to identify a derived object in containers, directories and files.   //
+// Most member functions defined in this base class are in general      //
+// overridden by the derived classes.                                   //
+//                                                                      //
+//////////////////////////////////////////////////////////////////////////
+#include "MParContainer.h"
+
+#include <iostream.h>    // cout
+
+#include "TClass.h"      // IsA
+#include "TROOT.h"       // TROOT::Identlevel
+#include "TVirtualPad.h" // gPad
+
+ClassImp(MParContainer)
+
+//______________________________________________________________________________
+MParContainer::MParContainer(const MParContainer &named)
+{
+   // TNamed copy ctor.
+   *fName = *(named.fName);
+   *fTitle = *(named.fTitle);
+}
+
+//______________________________________________________________________________
+MParContainer& MParContainer::operator=(const MParContainer& rhs)
+{
+   // TNamed assignment operator.
+
+   if (this != &rhs) {
+      TObject::operator=(rhs);
+      *fName  = *(rhs.fName);
+      *fTitle = *(rhs.fTitle);
+   }
+   return *this;
+}
+
+//______________________________________________________________________________
+Int_t MParContainer::Compare(TObject *obj)
+{
+   // Compare two TNamed objects. Returns 0 when equal, -1 when this is
+   // smaller and +1 when bigger (like strcmp).
+
+   if (this == obj) return 0;
+   return fName->CompareTo(obj->GetName());
+}
+
+//______________________________________________________________________________
+void MParContainer::Copy(TObject &obj)
+{
+   // Copy this to obj.
+
+   TObject::Copy(obj);
+   *(((MParContainer&)obj).fName)  = *fName;
+   *(((MParContainer&)obj).fTitle) = *fTitle;
+}
+
+//______________________________________________________________________________
+void MParContainer::FillBuffer(char *&buffer)
+{
+   // Encode TNamed into output buffer.
+
+   fName->FillBuffer(buffer);
+   fTitle->FillBuffer(buffer);
+}
+
+//______________________________________________________________________________
+void MParContainer::ls(Option_t *)
+{
+   // List TNamed name and title.
+
+   TROOT::IndentLevel();
+   cout <<"OBJ: " << IsA()->GetName() << "\t" << GetName() << "\t" << GetTitle() << " : "
+        << Int_t(TestBit(kCanDelete)) << endl;
+}
+
+//______________________________________________________________________________
+void MParContainer::Print(Option_t *)
+{
+   // Print TNamed name and title.
+
+   cout <<"OBJ: " << IsA()->GetName() << "\t" << GetName() << "\t" << GetTitle() << endl;
+}
+
+//______________________________________________________________________________
+void MParContainer::SetName(const char *name)
+{
+   // Change (i.e. set) the name of the TNamed.
+   // WARNING !!
+   // If the object is a member of a THashTable, THashList container
+   // The HashTable must be Rehashed after SetName
+   // For example the list of objects in the current directory is a THashList
+
+   *fName = name;
+   if (gPad && TestBit(kMustCleanup)) gPad->Modified();
+}
+
+//______________________________________________________________________________
+void MParContainer::SetObject(const char *name, const char *title)
+{
+   // Change (i.e. set) all the TNamed parameters (name and title).
+   // See also WARNING in SetName
+
+   *fName  = name;
+   *fTitle = title;
+   if (gPad && TestBit(kMustCleanup)) gPad->Modified();
+}
+
+//______________________________________________________________________________
+void MParContainer::SetTitle(const char *title)
+{
+   // Change (i.e. set) the title of the TNamed.
+
+   *fTitle = title;
+   if (gPad && TestBit(kMustCleanup)) gPad->Modified();
+}
+
+//______________________________________________________________________________
+Int_t MParContainer::Sizeof() const
+{
+   // Return size of the TNamed part of the TObject.
+
+   Int_t nbytes = fName->Sizeof() + fTitle->Sizeof();
+   return nbytes;
+}
+
+
+
+
+
+
+
Index: /trunk/MagicSoft/include-Classes/MBase/MParContainer.h
===================================================================
--- /trunk/MagicSoft/include-Classes/MBase/MParContainer.h	(revision 490)
+++ /trunk/MagicSoft/include-Classes/MBase/MParContainer.h	(revision 490)
@@ -0,0 +1,61 @@
+#ifndef MPARCONTAINER_H
+#define MPARCONTAINER_H
+
+//////////////////////////////////////////////////////////////////////////
+//                                                                      //
+// TNamed                                                               //
+//                                                                      //
+// The basis for a named object (name, title).                          //
+//                                                                      //
+//////////////////////////////////////////////////////////////////////////
+#include <iostream.h>    // cout
+
+#ifndef ROOT_TObject
+#include <TObject.h>
+#endif
+#ifndef ROOT_TString
+#include <TString.h>
+#endif
+
+class MParContainer : public TObject
+{
+ private:
+    void Init(const char *name, const char *title)
+	{
+	  fName = new TString;
+	  (*fName) = name;
+	  fTitle = new TString;
+	  (*fTitle) = title;
+	}
+ protected:
+    TString   *fName;            //! object identifier
+    TString   *fTitle;           //! object title
+    
+ public:
+    MParContainer(const char *name="", const char *title="") { Init(name, title); }
+     MParContainer(const TString &name, const TString &title)  { Init(name, title); }
+     MParContainer(const MParContainer &named);
+     MParContainer& operator=(const MParContainer& rhs);
+     virtual ~MParContainer() { 
+       //delete fName; delete fTitle;
+     }
+     virtual Int_t    Compare(TObject *obj);
+     virtual void     Copy(TObject &named);
+     virtual void     FillBuffer(char *&buffer);
+     virtual const char  *GetName() const {return fName->Data();}
+     virtual const char  *GetTitle() const {return fTitle->Data();}
+     virtual ULong_t  Hash() { return fName->Hash(); }
+     virtual Bool_t   IsSortable() const { return kTRUE; }
+     virtual void     SetName(const char *name); // *MENU*
+     virtual void     SetObject(const char *name, const char *title);
+     virtual void     SetTitle(const char *title=""); // *MENU*
+     virtual void     ls(Option_t *option="");
+     virtual void     Print(Option_t *option="");
+     virtual Int_t    Sizeof() const;
+     
+     ClassDef(MParContainer, 1)  //The basis for Parameter Containers
+};
+
+#endif
+
+
Index: /trunk/MagicSoft/include-Classes/MBase/MParList.cc
===================================================================
--- /trunk/MagicSoft/include-Classes/MBase/MParList.cc	(revision 490)
+++ /trunk/MagicSoft/include-Classes/MBase/MParList.cc	(revision 490)
@@ -0,0 +1,100 @@
+///////////////////////////////////////////////////////////////////////
+//
+// MParList
+//
+// This class contains a list of different Parameter and Data
+// Containers. 
+//
+// You can add every parameter Container (Named object) to the
+// instance and access it from somewhere else via its Name.
+//
+///////////////////////////////////////////////////////////////////////
+
+#include "MParList.h"
+
+#include <TNamed.h>
+
+#include "MParContainer.h"
+
+ClassImp(MParList)
+
+MParList::MParList() : fNext(NULL)
+{
+  //
+  //  default constructor 
+  //  creates an empty list 
+  //
+
+}
+
+MParList::MParList(MParList &ts)
+{
+  //
+  // copy constructor 
+  //
+
+  fContainer.AddAll(&ts.fContainer);
+}
+
+
+Bool_t MParList::AddToList(MParContainer *obj, MParContainer *where)
+{
+  // 
+  //  Add an Container to the list.
+  // 
+  //  If 'where' is given, the object will be added after this.
+  //
+  
+  //
+  //  check if the object (you want to add) exists
+  //
+  if (!obj) return kTRUE;
+
+  cout << "Adding " << obj->GetName() << " to " << GetName() << "... " << flush;
+  //
+  //  check if it is in the list yet
+  //
+  if (fContainer.FindObject(obj))
+  {
+      cout << "WARNING: MParList::add: Container already added" << endl;
+      return kTRUE;
+  }
+
+  //
+  //  check if you want to add the new parameter container somewhere 
+  //  special (in that case you specify "where") 
+  //  
+  if (where)
+  {
+      if (!fContainer.FindObject(where))
+      {
+          cout << "ERROR: MParList::add: Cannot find parameter container after which the new one should be added!" << endl;
+          return kFALSE;
+      }
+  }
+
+  fContainer.Add(obj);
+  cout << "Done." << endl;
+
+  return kTRUE;
+}
+
+TObject *MParList::FindObject(const char *name) const
+{
+    //
+    //  Find an object in the list.
+    //  'name' is the name of the object you are searching for.
+    //
+    return (TObject*)fContainer.FindObject(name);
+}
+
+
+void MParList::Print(Option_t *t)
+{
+    //
+    //   print some information about the current status of MParList
+    //
+    cout << "ParList: " << this->GetName() << " <" << this->GetTitle() << ">" << endl;
+    cout << endl;
+}
+
Index: /trunk/MagicSoft/include-Classes/MBase/MParList.h
===================================================================
--- /trunk/MagicSoft/include-Classes/MBase/MParList.h	(revision 490)
+++ /trunk/MagicSoft/include-Classes/MBase/MParList.h	(revision 490)
@@ -0,0 +1,51 @@
+#ifndef MPARLIST_H
+#define MPARLIST_H
+
+#ifndef MAGIC_H
+#include "MAGIC.h"
+#endif
+
+#include <iostream.h>
+
+#ifndef ROOT_TOrdCollection
+#include "TOrdCollection.h"
+#endif
+
+class MParContainer;
+
+class MParList : public TObject
+{
+private:
+    TIter *fNext;               //!
+    TOrdCollection fContainer;	// Collection of Parameter and Data Containers
+
+public:
+    MParList();
+    MParList(MParList &ts);
+
+    ~MParList()
+    {
+        if (fNext)
+            delete fNext;
+    }
+
+    Bool_t AddToList(MParContainer *obj, MParContainer *where = NULL);
+
+    TObject *FindObject(const char *name) const;
+
+    void Reset()
+    {
+        fNext = new TIter(&fContainer);
+    }
+
+    MParContainer *Next()
+    {
+        return (MParContainer*)(*fNext)();
+    }
+
+    void Print(Option_t *t = NULL);
+
+    ClassDef(MParList, 1)	// list of Parameter Containers
+};
+
+#endif
Index: /trunk/MagicSoft/include-Classes/MBase/MTime.cc
===================================================================
--- /trunk/MagicSoft/include-Classes/MBase/MTime.cc	(revision 490)
+++ /trunk/MagicSoft/include-Classes/MBase/MTime.cc	(revision 490)
@@ -0,0 +1,45 @@
+///////////////////////////////////////////////////////////////////////
+//
+//   MTime
+//
+///////////////////////////////////////////////////////////////////////
+
+#include "MTime.h"
+
+#include <iostream.h>
+#include <iomanip.h>
+
+ClassImp(MTime)
+
+void MTime::Print(Option_t *)
+{ 
+    cout << "MTime Information:  " << hex
+        << " 0x" <<setfill('0') << setw(2) << fTimeStamp[0]
+        << " 0x" <<setfill('0') << setw(2) << fTimeStamp[1] << endl << endl;
+} 
+    /*
+inline Bool_t operator<(MTime &t1, MTime &t2)
+{
+    return (t1.GetTimeHi()<=t2.GetTimeHi()) && (t1.GetTimeLo()<t2.GetTimeLo());
+}
+
+inline Bool_t operator>(MTime &t1, MTime &t2)
+{
+    return (t1.GetTimeHi()>=t2.GetTimeHi()) && (t1.GetTimeLo()>t2.GetTimeLo());
+}
+
+inline Bool_t operator<=(MTime &t1, MTime &t2)
+{
+    return (t1.GetTimeHi()<=t2.GetTimeHi()) && (t1.GetTimeLo()<=t2.GetTimeLo());
+}
+
+inline Bool_t operator>=(MTime &t1, MTime &t2)
+{
+    return (t1.GetTimeHi()>=t2.GetTimeHi()) && (t1.GetTimeLo()>=t2.GetTimeLo());
+}
+
+inline Bool_t operator==(MTime &t1, MTime &t2)
+{
+    return (t1.GetTimeLo()==t2.GetTimeLo()) && (t1.GetTimeHi()==t2.GetTimeHi());
+}
+*/
Index: /trunk/MagicSoft/include-Classes/MBase/MTime.h
===================================================================
--- /trunk/MagicSoft/include-Classes/MBase/MTime.h	(revision 490)
+++ /trunk/MagicSoft/include-Classes/MBase/MTime.h	(revision 490)
@@ -0,0 +1,105 @@
+#ifndef MTIME_H
+#define MTIME_H
+
+#ifndef MPARCONTAINER_H
+#include "MParContainer.h"
+#endif
+
+class MTime : public MParContainer
+{
+private:
+    UInt_t fTimeStamp[2]; // type of raw event which should be processed by this task
+    UInt_t fDuration;     // time of validity
+
+public:
+
+    MTime(const char *name=NULL, const char *title=NULL)
+    {
+        *fName = name ? name : ClassName();
+        *fTitle = title;
+
+        SetTime(0,0);
+    }
+
+    MTime(UInt_t t1, UInt_t t0) 
+    {
+        SetTime(t1, t0);
+    }
+
+    MTime(MTime& t)
+    {
+        fTimeStamp[0] = t.fTimeStamp[0];
+        fTimeStamp[1] = t.fTimeStamp[1];
+        fDuration = t.fDuration;
+    }
+
+    void operator=(MTime &t)
+    {
+        fTimeStamp[0] = t.fTimeStamp[0];
+        fTimeStamp[1] = t.fTimeStamp[1];
+        fDuration = t.fDuration;
+    }
+
+    ~MTime() {}
+
+    void Print(Option_t *t=NULL);
+
+    void SetTime(UInt_t t1, UInt_t t0)
+    {
+	fTimeStamp[0] = t1;
+	fTimeStamp[1] = t0;
+    }
+
+    void SetDuration(UInt_t t)
+    {
+	fDuration = t;
+    }
+
+    MTime *GetTime()
+    {
+        return this;
+    }
+
+    UInt_t GetTimeLo()
+    {
+	return fTimeStamp[0];
+    }
+    UInt_t GetTimeHi()
+    {
+	return fTimeStamp[1];
+    }
+
+    UInt_t GetDuration()
+    {
+	return fDuration;
+    }
+
+    ClassDef(MTime, 1)	// A general Mars time stamp
+};
+
+inline Bool_t operator<(MTime &t1, MTime &t2)
+{
+    return (t1.GetTimeHi()<=t2.GetTimeHi()) && (t1.GetTimeLo()<t2.GetTimeLo());
+}
+
+inline Bool_t operator>(MTime &t1, MTime &t2)
+{
+    return (t1.GetTimeHi()>=t2.GetTimeHi()) && (t1.GetTimeLo()>t2.GetTimeLo());
+}
+
+inline Bool_t operator<=(MTime &t1, MTime &t2)
+{
+    return (t1.GetTimeHi()<=t2.GetTimeHi()) && (t1.GetTimeLo()<=t2.GetTimeLo());
+}
+
+inline Bool_t operator>=(MTime &t1, MTime &t2)
+{
+    return (t1.GetTimeHi()>=t2.GetTimeHi()) && (t1.GetTimeLo()>=t2.GetTimeLo());
+}
+
+inline Bool_t operator==(MTime &t1, MTime &t2)
+{
+    return (t1.GetTimeLo()==t2.GetTimeLo()) && (t1.GetTimeHi()==t2.GetTimeHi());
+}
+
+#endif
