Index: trunk/MagicSoft/Mars/mbase/BaseLinkDef.h
===================================================================
--- trunk/MagicSoft/Mars/mbase/BaseLinkDef.h	(revision 857)
+++ trunk/MagicSoft/Mars/mbase/BaseLinkDef.h	(revision 858)
@@ -24,4 +24,7 @@
 #pragma link C++ class MParList;
 
+#pragma link C++ class MFilter;
+#pragma link C++ class MFilterList;
+
 #pragma link C++ class MEvtLoop;
 
Index: trunk/MagicSoft/Mars/mbase/MArray.cc
===================================================================
--- trunk/MagicSoft/Mars/mbase/MArray.cc	(revision 857)
+++ trunk/MagicSoft/Mars/mbase/MArray.cc	(revision 858)
@@ -38,4 +38,4 @@
 #include "MArray.h"
 
-ClassImp(MArray)
+ClassImp(MArray);
 
Index: trunk/MagicSoft/Mars/mbase/MArrayB.cc
===================================================================
--- trunk/MagicSoft/Mars/mbase/MArrayB.cc	(revision 857)
+++ trunk/MagicSoft/Mars/mbase/MArrayB.cc	(revision 858)
@@ -19,4 +19,4 @@
 #include "MArrayB.h"
 
-ClassImp(MArrayB)
+ClassImp(MArrayB);
 
Index: trunk/MagicSoft/Mars/mbase/MArrayS.cc
===================================================================
--- trunk/MagicSoft/Mars/mbase/MArrayS.cc	(revision 857)
+++ trunk/MagicSoft/Mars/mbase/MArrayS.cc	(revision 858)
@@ -35,4 +35,4 @@
 #include "MArrayS.h"
 
-ClassImp(MArrayS)
+ClassImp(MArrayS);
 
Index: trunk/MagicSoft/Mars/mbase/MEvtLoop.cc
===================================================================
--- trunk/MagicSoft/Mars/mbase/MEvtLoop.cc	(revision 857)
+++ trunk/MagicSoft/Mars/mbase/MEvtLoop.cc	(revision 858)
@@ -59,5 +59,5 @@
 #include "MTaskList.h"
 
-ClassImp(MEvtLoop)
+ClassImp(MEvtLoop);
 
 // --------------------------------------------------------------------------
Index: trunk/MagicSoft/Mars/mbase/MFilter.cc
===================================================================
--- trunk/MagicSoft/Mars/mbase/MFilter.cc	(revision 858)
+++ trunk/MagicSoft/Mars/mbase/MFilter.cc	(revision 858)
@@ -0,0 +1,100 @@
+/* ======================================================================== *\
+!
+! *
+! * This file is part of MARS, the MAGIC Analysis and Reconstruction
+! * Software. It is distributed to you in the hope that it can be a useful
+! * and timesaving tool in analysing Data of imaging Cerenkov telescopes.
+! * It is distributed WITHOUT ANY WARRANTY.
+! *
+! * Permission to use, copy, modify and distribute this software and its
+! * documentation for any purpose is hereby granted without fee,
+! * provided that the above copyright notice appear in all copies and
+! * that both that copyright notice and this permission notice appear
+! * in supporting documentation. It is provided "as is" without express
+! * or implied warranty.
+! *
+!
+!
+!   Author(s): Thomas Bretz  07/2001 (tbretz@uni-sw.gwdg.de)
+!
+!   Copyright: MAGIC Software Development, 2000-2001
+!
+!
+\* ======================================================================== */
+
+/////////////////////////////////////////////////////////////////////////////
+//                                                                         //
+//   MFilter                                                               //
+//                                                                         //
+//   This is a base class which defines an interface to create your own    //
+//   filters. To do it derive a class from MFilter.                        //
+//                                                                         //
+//   You can create two types of Filters:                                  //
+//    - static Filters and                                                 //
+//    - dynamic Filters                                                    //
+//                                                                         //
+//   Static Filters:                                                       //
+//    A static filter is a filter which value doesn't change dynamically,  //
+//    which mean only once while running through your tasklist. To create  //
+//    a static filter override the Process-function of MFilter (this is    //
+//    the function in which the filer-value should be updated). If         //
+//    necessary you can also overwrite Pre-/PostProcess. The process       //
+//    function should calculate the return value of IsExpressionTrue.      //
+//    IsExpressionTrue should simply return this value. This kind of       //
+//    filter must be added to the tasklist at a point which is forseen to  //
+//    update the value of the filter (eg. after the reading task).         //
+//                                                                         //
+//   Dynamic Filters:                                                      //
+//    A dynamic filter is a filter which returns a value which must be     //
+//    calculated at the time the filter is called. To create such a        //
+//    filter you have to overwrite IsExpressionTrue only. If there is      //
+//    no need for a 'one-point' update this filter must not be added to    //
+//    the tasklist.                                                        //
+//                                                                         //
+//   Usage:                                                                //
+//    A Filter is connected to a task by calling MTask::SetFilter. The     //
+//    task is now executed when IsExpressionTrue returns a value           //
+//    (different from kFALSE) only.                                        //
+//                                                                         //
+//   Remarks:                                                              //
+//    - Make sure, that all tasks which depends on this filter are either  //
+//      collected in a MTaskList-object or are conected to the same        //
+//      filter.                                                            //
+//    - If you want to use different filters for one task please look for  //
+//      the MFilterList class.                                             //
+//    - Be careful, the return value of IsExpressionTrue is NOT a real     //
+//      boolean. You can return other values, too.                         //
+//                                                                         //
+/////////////////////////////////////////////////////////////////////////////
+
+#include "MFilter.h"
+
+ClassImp(MFilter);
+
+// --------------------------------------------------------------------------
+//
+Bool_t MFilter::IsExpressionTrue() const
+{
+    return kTRUE;
+}
+
+// --------------------------------------------------------------------------
+//
+Bool_t MFilter::PreProcess(MParList *pList)
+{
+    return kTRUE;
+}
+
+// --------------------------------------------------------------------------
+//
+Bool_t MFilter::Process()
+{
+    return kTRUE;
+}
+
+// --------------------------------------------------------------------------
+//
+Bool_t MFilter::PostProcess()
+{
+    return kTRUE;
+}
Index: trunk/MagicSoft/Mars/mbase/MFilter.h
===================================================================
--- trunk/MagicSoft/Mars/mbase/MFilter.h	(revision 858)
+++ trunk/MagicSoft/Mars/mbase/MFilter.h	(revision 858)
@@ -0,0 +1,35 @@
+#ifndef MFILTER_H
+#define MFILTER_H
+
+/////////////////////////////////////////////////////////////////////////////
+//                                                                         //
+// MFilter                                                                 //
+//                                                                         //
+// Abstract base class for the filters                                     //
+//                                                                         //
+/////////////////////////////////////////////////////////////////////////////
+
+#ifndef MTASK_H
+#include "MTask.h"
+#endif
+
+class MParList;
+
+class MFilter : public MTask
+{
+public:
+    MFilter() {}
+    ~MFilter()
+    {
+    }
+
+    virtual Bool_t IsExpressionTrue() const;
+
+    virtual Bool_t PreProcess(MParList *pList);
+    virtual Bool_t Process();
+    virtual Bool_t PostProcess();
+
+    ClassDef(MFilter, 0)		// Abstract base class for the filters
+};
+
+#endif
Index: trunk/MagicSoft/Mars/mbase/MFilterList.cc
===================================================================
--- trunk/MagicSoft/Mars/mbase/MFilterList.cc	(revision 858)
+++ trunk/MagicSoft/Mars/mbase/MFilterList.cc	(revision 858)
@@ -0,0 +1,283 @@
+/* ======================================================================== *\
+!
+! *
+! * This file is part of MARS, the MAGIC Analysis and Reconstruction
+! * Software. It is distributed to you in the hope that it can be a useful
+! * and timesaving tool in analysing Data of imaging Cerenkov telescopes.
+! * It is distributed WITHOUT ANY WARRANTY.
+! *
+! * Permission to use, copy, modify and distribute this software and its
+! * documentation for any purpose is hereby granted without fee,
+! * provided that the above copyright notice appear in all copies and
+! * that both that copyright notice and this permission notice appear
+! * in supporting documentation. It is provided "as is" without express
+! * or implied warranty.
+! *
+!
+!
+!   Author(s): Thomas Bretz  07/2001 (tbretz@uni-sw.gwdg.de)
+!
+!   Copyright: MAGIC Software Development, 2000-2001
+!
+!
+\* ======================================================================== */
+
+/////////////////////////////////////////////////////////////////////////////
+//                                                                         //
+//   MFilterList                                                           //
+//                                                                         //
+/////////////////////////////////////////////////////////////////////////////
+
+#include "MFilterList.h"
+
+#include <TString.h>
+
+#include "MLog.h"
+#include "MLogManip.h"
+
+ClassImp(MFilterList);
+
+// --------------------------------------------------------------------------
+//
+//   Constructor.
+//
+//   Specify the boolean operation which is used to evaluate the
+//   result of this list. If no operation is specified "land" is
+//   used.
+//
+//   Options:
+//      and, &   : is a bitwise and
+//      or, |    : is a bitwise or
+//      xor, ^   : is a bitwise exclusive or
+//      land, && : is a logical and
+//      lor, ||  : is a logical or
+//
+MFilterList::MFilterList(const char *type)
+{
+    fFilterType = kEAnd;
+
+    TString str(type);
+
+    if (str.CompareTo("OR", TString::kIgnoreCase)  || str.CompareTo("|"))
+        fFilterType = kEOr;
+    if (str.CompareTo("XOR", TString::kIgnoreCase) || str.CompareTo("^"))
+        fFilterType = kEXor;
+    if (str.CompareTo("LAND", TString::kIgnoreCase) || str.CompareTo("&&"))
+        fFilterType = kELAnd;
+    if (str.CompareTo("LOR", TString::kIgnoreCase) || str.CompareTo("||"))
+        fFilterType = kELOr;
+}
+
+// --------------------------------------------------------------------------
+//
+//   CopyConstructor
+//
+MFilterList::MFilterList(MFilterList &ts)
+{
+    fFilters.AddAll(&ts.fFilters);
+    fFilterType = ts.fFilterType;
+}
+
+// --------------------------------------------------------------------------
+//
+//  Evaluates and returns the result of the filter list.
+//  The expression is evaluated step by step, eg:
+//  ((filter[0] # filter[1]) # filter[3]) # filter[4])
+//  The '#' stands for the boolean operation which is specified in
+//  the constructor.
+//
+Bool_t MFilterList::IsExpressionTrue() const
+{
+    TIter Next(&fFilters);
+
+    MFilter *filter=(MFilter*)Next();
+
+    if (!filter)
+        return kTRUE;
+
+    Bool_t rc = filter->IsExpressionTrue();
+
+    //
+    // loop over all filters
+    //
+    switch (fFilterType)
+    {
+    case kEAnd:
+        while ((filter=(MFilter*)Next()))
+            rc &= filter->IsExpressionTrue();
+        break;
+
+    case kEOr:
+        while ((filter=(MFilter*)Next()))
+            rc |= filter->IsExpressionTrue();
+        break;
+
+    case kEXor:
+        while ((filter=(MFilter*)Next()))
+            rc ^= filter->IsExpressionTrue();
+        break;
+
+    case kELAnd:
+        while ((filter=(MFilter*)Next()))
+            rc = (rc && filter->IsExpressionTrue());
+        break;
+
+    case kELOr:
+        while ((filter=(MFilter*)Next()))
+            rc = (rc || filter->IsExpressionTrue());
+        break;
+    }
+    return rc;
+}
+
+// --------------------------------------------------------------------------
+//
+// If you want to add a new filter to the list call this function with the
+// pointer to the filter to be added. 
+//
+Bool_t MFilterList::AddToList(MFilter *filter)
+{
+    if (!filter)
+        return kTRUE;
+
+    const char *name = filter->GetName();
+
+    // FIXME: We agreed to put the task into list in an ordered way.
+
+    if (fFilters.FindObject(filter))
+    {
+        *fLog << dbginf << "Filter already existing." << endl;
+        return kTRUE;
+    }
+
+    if (fFilters.FindObject(name))
+    {
+        *fLog << dbginf << "'" << name << "' exists in List already." << endl;
+        return kTRUE;
+    }
+
+    *fLog << "Adding " << name << " to " << GetName() << "... " << flush;
+
+    fFilters.Add(filter);
+
+    *fLog << "Done." << endl;
+
+    return kTRUE;
+}
+
+
+// --------------------------------------------------------------------------
+//
+// PreProcesses all filters in the list
+//
+Bool_t MFilterList::PreProcess(MParList *pList)
+{
+    TIter Next(&fFilters);
+
+    MFilter *filter=NULL;
+
+    //
+    // loop over all filters
+    //
+    while ((filter=(MFilter*)Next()))
+        if (!filter->PreProcess(pList))
+            return kFALSE;
+
+    return kTRUE;
+}
+
+// --------------------------------------------------------------------------
+//
+// Processes (updates) all filters in the list.
+//
+Bool_t MFilterList::Process()
+{
+    TIter Next(&fFilters);
+
+    MFilter *filter=NULL;
+
+    //
+    // loop over all filters
+    //
+    while ((filter=(MFilter*)Next()))
+        if (!filter->Process())
+            return kFALSE;
+
+    return kTRUE;
+}
+
+// --------------------------------------------------------------------------
+//
+// PostProcesses all filters in the list.
+//
+Bool_t MFilterList::PostProcess()
+{
+    TIter Next(&fFilters);
+
+    MFilter *filter=NULL;
+
+    //
+    // loop over all filters
+    //
+    while ((filter=(MFilter*)Next()))
+        if (!filter->PostProcess())
+            return kFALSE;
+
+    return kTRUE;
+}
+
+// --------------------------------------------------------------------------
+//
+// If you want to use a verbose output ("and") instead of a symbolic ("&")
+// one the option string must conatin a "v"
+//
+void MFilterList::Print(Option_t *opt)
+{
+    TString str(opt);
+    const Bool_t verbose = str.Contains("V", TString::kIgnoreCase);
+
+    *fLog << "(";
+
+    TIter Next(&fFilters);
+
+    MFilter *filter=(MFilter*)Next();
+
+    //
+    // loop over all filters
+    //
+    if (!filter)
+    {
+        *fLog << "<empty>)" << flush;
+        return;
+    }
+
+    do
+    {
+        switch (fFilterType)
+        {
+        case kEAnd:
+            *fLog << (verbose?" and ":"&");
+            break;
+
+        case kEOr:
+            *fLog << (verbose?" or ":"|");
+            break;
+
+        case kEXor:
+            *fLog << (verbose?" xor ":"^");
+            break;
+
+        case kELAnd:
+            *fLog << (verbose?" land ":"&&");
+            break;
+
+        case kELOr:
+            *fLog << (verbose?" lor ":"||");
+            break;
+        }
+
+        filter->Print();
+    } while ((filter=(MFilter*)Next()));
+
+    *fLog << ")" << flush;
+}
Index: trunk/MagicSoft/Mars/mbase/MFilterList.h
===================================================================
--- trunk/MagicSoft/Mars/mbase/MFilterList.h	(revision 858)
+++ trunk/MagicSoft/Mars/mbase/MFilterList.h	(revision 858)
@@ -0,0 +1,49 @@
+#ifndef MFILTERLIST_H
+#define MFILTERLIST_H
+
+/////////////////////////////////////////////////////////////////////////////
+//                                                                         //
+//  MFilterList                                                            //
+//                                                                         //
+//  List of several filters                                                //
+//                                                                         //
+/////////////////////////////////////////////////////////////////////////////
+
+#ifndef ROOT_TOrdCollection
+#include <TOrdCollection.h>
+#endif
+#ifndef MFILTER_H
+#include "MFilter.h"
+#endif
+
+class MParList;
+
+class MFilterList : public MFilter
+{
+private:
+    TOrdCollection fFilters;	// Container for the filters
+
+    typedef enum { kEAnd, kEOr, kEXor, kELAnd, kELOr } FilterType_t;
+    FilterType_t fFilterType;
+
+public:
+    MFilterList(const char *type="&&");
+    ~MFilterList()
+    {
+    }
+    MFilterList(MFilterList &ts);
+
+    Bool_t AddToList(MFilter *filter);
+
+    Bool_t IsExpressionTrue() const;
+
+    Bool_t PreProcess(MParList *pList);
+    Bool_t Process();
+    Bool_t PostProcess();
+
+    void Print(Option_t *opt = "");
+
+    ClassDef(MFilterList, 0)		// List of several filters
+};
+
+#endif
Index: trunk/MagicSoft/Mars/mbase/MLog.cc
===================================================================
--- trunk/MagicSoft/Mars/mbase/MLog.cc	(revision 857)
+++ trunk/MagicSoft/Mars/mbase/MLog.cc	(revision 858)
@@ -48,5 +48,5 @@
 #include "MLogManip.h"
 
-ClassImp(MLog)
+ClassImp(MLog);
 
 //
@@ -108,4 +108,15 @@
     AllocateFile(fname);
     CheckFlag(eFile, flag);
+}
+
+// --------------------------------------------------------------------------
+//
+// copyt constructor
+//
+MLog::MLog(MLog &log)
+{
+    fOutputLevel  = log.fOutputLevel;
+    fDebugLevel   = log.fDebugLevel;
+    fDevice       = log.fDevice;
 }
 
Index: trunk/MagicSoft/Mars/mbase/MLog.h
===================================================================
--- trunk/MagicSoft/Mars/mbase/MLog.h	(revision 857)
+++ trunk/MagicSoft/Mars/mbase/MLog.h	(revision 858)
@@ -51,5 +51,5 @@
     MLog(const char *fname, int flag=-1);
 
-    MLog(MLog &log) { }
+    MLog(MLog &log);
 
     ~MLog()
Index: trunk/MagicSoft/Mars/mbase/MParContainer.h
===================================================================
--- trunk/MagicSoft/Mars/mbase/MParContainer.h	(revision 857)
+++ trunk/MagicSoft/Mars/mbase/MParContainer.h	(revision 858)
@@ -48,5 +48,5 @@
     MParContainer& operator=(const MParContainer& rhs);
 
-    void SetLogStream(MLog *log) { fLog = log; }
+    void SetLogStream(MLog *lg) { fLog = lg; }
 
     virtual ~MParContainer() { 
Index: trunk/MagicSoft/Mars/mbase/MParList.cc
===================================================================
--- trunk/MagicSoft/Mars/mbase/MParList.cc	(revision 857)
+++ trunk/MagicSoft/Mars/mbase/MParList.cc	(revision 858)
@@ -47,5 +47,5 @@
 #include "MLogManip.h"
 
-ClassImp(MParList)
+ClassImp(MParList);
 
 // --------------------------------------------------------------------------
@@ -144,5 +144,14 @@
 TObject *MParList::FindObject(const char *name) const
 {
-    return (TObject*)fContainer.FindObject(name);
+    return fContainer.FindObject(name);
+}
+
+// --------------------------------------------------------------------------
+//
+//  check if the object is in the list or not
+//
+TObject *MParList::FindObject(TObject *obj) const
+{
+    return fContainer.FindObject(obj);
 }
 
@@ -282,5 +291,4 @@
 void MParList::Reset()
 {
-    return;
     TIter Next(&fContainer);
 
@@ -290,5 +298,5 @@
     // loop over all tasks for preproccesing
     //
-    while ( (cont=(MParContainer*)Next()) )
+    while ((cont=(MParContainer*)Next()))
         cont->Reset();
 }
Index: trunk/MagicSoft/Mars/mbase/MParList.h
===================================================================
--- trunk/MagicSoft/Mars/mbase/MParList.h	(revision 857)
+++ trunk/MagicSoft/Mars/mbase/MParList.h	(revision 858)
@@ -42,4 +42,5 @@
 
     TObject       *FindObject(const char *name) const;
+    TObject       *FindObject(TObject *obj) const;
     MParContainer *FindCreateObj(const char *classname, const char *objname=NULL);
 
Index: trunk/MagicSoft/Mars/mbase/MReadTree.cc
===================================================================
--- trunk/MagicSoft/Mars/mbase/MReadTree.cc	(revision 857)
+++ trunk/MagicSoft/Mars/mbase/MReadTree.cc	(revision 858)
@@ -55,5 +55,5 @@
 #include "MParList.h"
 
-ClassImp(MReadTree)
+ClassImp(MReadTree);
 
 // --------------------------------------------------------------------------
Index: trunk/MagicSoft/Mars/mbase/MTask.cc
===================================================================
--- trunk/MagicSoft/Mars/mbase/MTask.cc	(revision 857)
+++ trunk/MagicSoft/Mars/mbase/MTask.cc	(revision 858)
@@ -61,5 +61,5 @@
 #include "MTask.h"
 
-ClassImp(MTask)
+ClassImp(MTask);
 
 // --------------------------------------------------------------------------
Index: trunk/MagicSoft/Mars/mbase/MTask.h
===================================================================
--- trunk/MagicSoft/Mars/mbase/MTask.h	(revision 857)
+++ trunk/MagicSoft/Mars/mbase/MTask.h	(revision 858)
@@ -14,12 +14,20 @@
 #endif
 
+class MFilter;
 class MParList;
 
 class MTask : public MInputStreamID
 {
+private:
+    const MFilter *fFilter;
+
 public:
+    MTask() : fFilter(NULL) {}
     ~MTask()
     {
     }
+
+    const MFilter *GetFilter() const { return fFilter; }
+    void SetFilter(const MFilter *filter) { fFilter=filter; }
 
     virtual Bool_t PreProcess(MParList *pList);
Index: trunk/MagicSoft/Mars/mbase/MTaskList.cc
===================================================================
--- trunk/MagicSoft/Mars/mbase/MTaskList.cc	(revision 857)
+++ trunk/MagicSoft/Mars/mbase/MTaskList.cc	(revision 858)
@@ -34,8 +34,10 @@
 
 #include "MLog.h"
+#include "MLogManip.h"
+#include "MFilter.h"
 #include "MParList.h"
 #include "MInputStreamID.h"
 
-ClassImp(MTaskList)
+ClassImp(MTaskList);
 
 // --------------------------------------------------------------------------
@@ -79,5 +81,5 @@
     // loop over all tasks for preproccesing
     //
-    while ( (task=(MTask*)Next()) )
+    while ((task=(MTask*)Next()))
         task->SetLogStream(log);
 
@@ -102,5 +104,5 @@
     if (fTasks.FindObject(task))
     {
-        *fLog << "WARNING: MTaskList::AddToList: Task already existing." << endl;
+        *fLog << dbginf << "Task already existing." << endl;
         return kTRUE;
     }
@@ -108,5 +110,5 @@
     if (fTasks.FindObject(name))
     {
-        *fLog << "WARNING: MTaskList::AddToList: '" << name << "' exists in List already." << endl;
+        *fLog << dbginf << "'" << name << "' exists in List already." << endl;
         return kTRUE;
     }
@@ -116,5 +118,5 @@
         if (!fTasks.FindObject(where))
         {
-            printf("ERROR: MTaskList::AddToList: Cannot find task after which the new task should be scheduled!\n");
+            *fLog << dbginf << "Cannot find task after which the new task should be scheduled!" << endl;
             return kFALSE;
         }
@@ -135,5 +137,5 @@
 // do pre processing (before eventloop) of all tasks in the task-list
 //
-Bool_t MTaskList::PreProcess( MParList *pList )
+Bool_t MTaskList::PreProcess(MParList *pList)
 { 
     *fLog << "Preprocessing... " << flush;
@@ -199,4 +201,16 @@
 
         //
+        // Check for the existance of a filter. If a filter is existing
+        // check for its value. If the value is kFALSE don't execute
+        // this task.
+        //
+        const MFilter *filter = task->GetFilter();
+
+        const Bool_t rc = filter ? filter->IsExpressionTrue() : kTRUE;
+
+        if (!rc)
+            continue;
+
+        //
         // if it has the right stream id execute the Process() function
         // and check what the result of it is.
@@ -273,9 +287,9 @@
 void MTaskList::Print(Option_t *t)
 {
-  *fLog << "TaskList: " << this->GetName() << " <" <<  this->GetTitle() << ">" << endl;
-  
-  fTasks.Print();
-
-  *fLog << endl;
-}
-
+    *fLog << "TaskList: " << this->GetName() << " <" <<  this->GetTitle() << ">" << endl;
+
+    fTasks.Print();
+
+    *fLog << endl;
+}
+
Index: trunk/MagicSoft/Mars/mbase/MTaskList.h
===================================================================
--- trunk/MagicSoft/Mars/mbase/MTaskList.h	(revision 857)
+++ trunk/MagicSoft/Mars/mbase/MTaskList.h	(revision 858)
@@ -40,5 +40,5 @@
     Bool_t PostProcess();
 
-    void Print(Option_t *t = NULL);
+    void Print(Option_t *opt = "");
 
     ClassDef(MTaskList, 0)	//collection of tasks to be performed in the eventloop
Index: trunk/MagicSoft/Mars/mbase/MTime.cc
===================================================================
--- trunk/MagicSoft/Mars/mbase/MTime.cc	(revision 857)
+++ trunk/MagicSoft/Mars/mbase/MTime.cc	(revision 858)
@@ -37,5 +37,5 @@
 #include "MLog.h"
 
-ClassImp(MTime)
+ClassImp(MTime);
 
 void MTime::Print(Option_t *)
Index: trunk/MagicSoft/Mars/mbase/MWriteAsciiFile.cc
===================================================================
--- trunk/MagicSoft/Mars/mbase/MWriteAsciiFile.cc	(revision 857)
+++ trunk/MagicSoft/Mars/mbase/MWriteAsciiFile.cc	(revision 858)
@@ -46,5 +46,5 @@
 #include "MParList.h"
 
-ClassImp(MWriteAsciiFile)
+ClassImp(MWriteAsciiFile);
 
 // --------------------------------------------------------------------------
Index: trunk/MagicSoft/Mars/mbase/MWriteFile.cc
===================================================================
--- trunk/MagicSoft/Mars/mbase/MWriteFile.cc	(revision 857)
+++ trunk/MagicSoft/Mars/mbase/MWriteFile.cc	(revision 858)
@@ -44,5 +44,5 @@
 #include "MParList.h"
 
-ClassImp(MWriteFile)
+ClassImp(MWriteFile);
 
 // --------------------------------------------------------------------------
Index: trunk/MagicSoft/Mars/mbase/MWriteRootFile.cc
===================================================================
--- trunk/MagicSoft/Mars/mbase/MWriteRootFile.cc	(revision 857)
+++ trunk/MagicSoft/Mars/mbase/MWriteRootFile.cc	(revision 858)
@@ -43,5 +43,5 @@
 #include "MParList.h"
 
-ClassImp(MWriteRootFile)
+ClassImp(MWriteRootFile);
 
 // --------------------------------------------------------------------------
Index: trunk/MagicSoft/Mars/mbase/Makefile
===================================================================
--- trunk/MagicSoft/Mars/mbase/Makefile	(revision 857)
+++ trunk/MagicSoft/Mars/mbase/Makefile	(revision 858)
@@ -35,4 +35,6 @@
            MParContainer.cc \
 	   MParList.cc \
+           MFilter.cc \
+           MFilterList.cc \
 	   MInputStreamID.cc \
            MEvtLoop.cc \
