Index: trunk/MagicSoft/Mars/mdata/MData.cc
===================================================================
--- trunk/MagicSoft/Mars/mdata/MData.cc	(revision 1299)
+++ trunk/MagicSoft/Mars/mdata/MData.cc	(revision 1304)
@@ -27,4 +27,21 @@
 //   MData
 //
+//   This base class defines an interface to a generalized value.
+//   This value can be a simple number, it can also be a data member
+//   of a class or some kind of concatenation of MData objects.
+//
+//   A class inheriting from MData must implement:
+//
+//    - Double_t GetValue() const
+//      which return the value corresponding to the object
+//
+//    - Bool_t IsValid() const
+//      should tell whether the object is valid (eg if the object parses
+//      a string the result might be invalid)
+//
+//    - Bool_t PreProcess(const MParList *plist)
+//      which can be used to get some necessary data (befor processing)
+//      from the parlist.
+//
 /////////////////////////////////////////////////////////////////////////////
 
Index: trunk/MagicSoft/Mars/mdata/MData.h
===================================================================
--- trunk/MagicSoft/Mars/mdata/MData.h	(revision 1299)
+++ trunk/MagicSoft/Mars/mdata/MData.h	(revision 1304)
@@ -4,5 +4,5 @@
 /////////////////////////////////////////////////////////////////////////////
 //                                                                         //
-//  MDataList                                                              //
+//  MData                                                                  //
 //                                                                         //
 /////////////////////////////////////////////////////////////////////////////
@@ -18,7 +18,8 @@
 public:
     virtual Double_t GetValue() const = 0;
+    virtual Bool_t IsValid() const = 0;
     virtual Bool_t PreProcess(const MParList *plist) = 0;
 
-    ClassDef(MData, 0) // A Filter for cuts in any data member
+    ClassDef(MData, 0) // A Base class for a generalized value
 };
 
Index: trunk/MagicSoft/Mars/mdata/MDataChain.cc
===================================================================
--- trunk/MagicSoft/Mars/mdata/MDataChain.cc	(revision 1299)
+++ trunk/MagicSoft/Mars/mdata/MDataChain.cc	(revision 1304)
@@ -48,5 +48,5 @@
     fTitle = title ? title : rule;
 
-    *fLog << inf << "Trying to resolve rule..." << endl;
+    *fLog << inf << "Trying to resolve rule... " << flush;
     if (!(fMember=ParseString(rule, 1)))
     {
@@ -54,10 +54,7 @@
         return;
     }
-
-    *fLog << inf << endl;
-    *fLog << "Using Filter rule " << fMember->GetName();
-    *fLog << " for " << fName << ":" << endl;
+    *fLog << inf << "found: " << flush;
     fMember->Print();
-    *fLog << endl << endl;
+    *fLog << endl;
 
 }
@@ -267,2 +264,7 @@
     return fMember ? fMember->GetValue() : 0;
 }
+
+void MDataChain::Print(Option_t *opt = "") const
+{
+    fMember->Print();
+}
Index: trunk/MagicSoft/Mars/mdata/MDataChain.h
===================================================================
--- trunk/MagicSoft/Mars/mdata/MDataChain.h	(revision 1299)
+++ trunk/MagicSoft/Mars/mdata/MDataChain.h	(revision 1304)
@@ -32,4 +32,6 @@
     Bool_t IsValid() const { return fMember ? kTRUE : kFALSE; }
 
+    void Print(Option_t *opt = "") const;
+
     ClassDef(MDataChain, 0) // A Filter for cuts in any data member
 };
Index: trunk/MagicSoft/Mars/mdata/MDataList.cc
===================================================================
--- trunk/MagicSoft/Mars/mdata/MDataList.cc	(revision 1299)
+++ trunk/MagicSoft/Mars/mdata/MDataList.cc	(revision 1304)
@@ -158,6 +158,4 @@
     fMembers.Add(member);
 
-    *fLog << "Done." << endl;
-
     return kTRUE;
 }
Index: trunk/MagicSoft/Mars/mdata/MDataList.h
===================================================================
--- trunk/MagicSoft/Mars/mdata/MDataList.h	(revision 1299)
+++ trunk/MagicSoft/Mars/mdata/MDataList.h	(revision 1304)
@@ -40,4 +40,6 @@
     void SetOwner(Bool_t enable=kTRUE) { enable ? SetBit(kIsOwner) : ResetBit(kIsOwner); }
 
+    Bool_t IsValid() const { return fMembers.GetSize() ? kTRUE : kFALSE; }
+
     Double_t GetValue() const;
     Bool_t PreProcess(const MParList *plist);
Index: trunk/MagicSoft/Mars/mdata/MDataMember.cc
===================================================================
--- trunk/MagicSoft/Mars/mdata/MDataMember.cc	(revision 1299)
+++ trunk/MagicSoft/Mars/mdata/MDataMember.cc	(revision 1304)
@@ -25,6 +25,13 @@
 /////////////////////////////////////////////////////////////////////////////
 //
-//   MDataList
-//   Chain, catenation ?
+//   MDataMember
+//
+//   This objects corresponds to the data member of another object.
+//   You can either specify the object as a string, eg "MHillas.fWidth"
+//   where MHillas is the name of the container in the parameterlist
+//   and fWidth is it's data member, or you can specify it by giving
+//   the pointer corresponding to the instance of your object and
+//   a TMethodCall pointer corresponding to the Member function returning
+//   the requested value.
 //
 /////////////////////////////////////////////////////////////////////////////
@@ -41,4 +48,11 @@
 ClassImp(MDataMember);
 
+// --------------------------------------------------------------------------
+//
+//  obj is a pointer to the instance of your class from which the data
+//  should be requested. TMethodCall (s. root dox) is a pointer
+//  to a TMethodCall object which should be the getter function for
+//  the data you want to get.
+//
 MDataMember::MDataMember(MParContainer *obj, TMethodCall *call)
 {
@@ -47,4 +61,8 @@
 }
 
+// --------------------------------------------------------------------------
+//
+// returns the value you requested
+//
 Double_t MDataMember::GetValue() const
 {
@@ -71,6 +89,18 @@
 }
 
+// --------------------------------------------------------------------------
+//
+// If a string was given PreProcess try to resolv the object name and
+// tries to get it from the parlist. And also tries to resolve
+// the data member (variable) name you requested and tries to get a
+// corresponding TMethodCall from the root Dictionary.
+// Remark: If your Data Member is called fDataMember the corresponding
+//         getter Method in your class must be calles fDataMember
+//
 Bool_t MDataMember::PreProcess(const MParList *plist)
 {
+    if (fCall)
+        return kTRUE;
+
     TString cname(fName);
     TString mname(fName);
@@ -98,4 +128,8 @@
 }
 
+// --------------------------------------------------------------------------
+//
+// Print the name of the data member without an CR.
+//
 void MDataMember::Print(Option_t *opt = "") const
 {
Index: trunk/MagicSoft/Mars/mdata/MDataMember.h
===================================================================
--- trunk/MagicSoft/Mars/mdata/MDataMember.h	(revision 1299)
+++ trunk/MagicSoft/Mars/mdata/MDataMember.h	(revision 1304)
@@ -28,4 +28,6 @@
     Bool_t PreProcess(const MParList *plist);
 
+    Bool_t IsValid() const { return fCall ? kTRUE : kFALSE; }
+
     void Print(Option_t *opt = "") const;
 
Index: trunk/MagicSoft/Mars/mdata/MDataValue.cc
===================================================================
--- trunk/MagicSoft/Mars/mdata/MDataValue.cc	(revision 1299)
+++ trunk/MagicSoft/Mars/mdata/MDataValue.cc	(revision 1304)
@@ -26,5 +26,6 @@
 //
 //   MDataValue
-//   Chain, catenation ?
+//
+//   An MData object which corresponds to a simple value like 5.5, or 7.9
 //
 /////////////////////////////////////////////////////////////////////////////
Index: trunk/MagicSoft/Mars/mdata/MDataValue.h
===================================================================
--- trunk/MagicSoft/Mars/mdata/MDataValue.h	(revision 1299)
+++ trunk/MagicSoft/Mars/mdata/MDataValue.h	(revision 1304)
@@ -25,4 +25,6 @@
     Bool_t PreProcess(const MParList *plist) { return kTRUE; }
 
+    Bool_t IsValid() const { return kTRUE; }
+
     void Print(Option_t *opt = "") const;
 
