Index: trunk/MagicSoft/Mars/mtrigger/MFTriggerPattern.cc
===================================================================
--- trunk/MagicSoft/Mars/mtrigger/MFTriggerPattern.cc	(revision 8903)
+++ trunk/MagicSoft/Mars/mtrigger/MFTriggerPattern.cc	(revision 8929)
@@ -93,4 +93,6 @@
     }
 
+    memset(fCounter, 0, sizeof(fCounter));
+
     return kTRUE;
 }
@@ -103,5 +105,5 @@
 // If any bit matches the fMasDenied* mask fResult is forced to be false.
 //
-Int_t MFTriggerPattern::Process()
+Int_t MFTriggerPattern::Eval() const
 {
     const Byte_t p = fPattern->GetPrescaled();
@@ -109,18 +111,56 @@
     if (p==0 && u==0)
     {
-        fResult = fDefault;
-        return kTRUE;
+        return fDefault;
     }
 
-    fResult = kFALSE;
+    Bool_t rc = kFALSE;
 
     // Check whether all the bits required are ON
     if ( ((p & fMaskRequiredPrescaled)   == fMaskRequiredPrescaled) &&
          ((u & fMaskRequiredUnprescaled) == fMaskRequiredUnprescaled))
-      fResult = kTRUE;
+      rc = kTRUE;
 
     // Now overwrite the result if one of the bits is denied
     if ( (p & fMaskDeniedPrescaled) || (u & fMaskDeniedUnprescaled) )
-      fResult = kFALSE;
+        return kFALSE;
+
+    return rc;
+}
+
+// --------------------------------------------------------------------------
+//
+// If Prescaled and Unprescaled pattern is 0 return default.
+// If all bits of the fMaskRequired* mask are found in the pattern set
+// fResult to true.
+// If any bit matches the fMasDenied* mask fResult is forced to be false.
+//
+Int_t MFTriggerPattern::Process()
+{
+    fResult = Eval();
+    fCounter[fResult ? 0 : 1]++;
+
+    return kTRUE;
+}
+
+// --------------------------------------------------------------------------
+//
+Int_t MFTriggerPattern::PostProcess()
+{
+    const UInt_t n = GetNumExecutions();
+    if (n==0)
+        return kTRUE;
+
+    *fLog << inf << endl;
+    *fLog << GetDescriptor() << " execution statistics:" << endl;
+    *fLog << dec << setfill(' ');
+
+    *fLog << " " << setw(7) << fCounter[0] << " (" << setw(3) ;
+    *fLog << (int)(fCounter[0]*100/n);
+    *fLog << "%) Accepted trigger pattern." << endl;
+
+    *fLog << " " << setw(7) << fCounter[1] << " (" << setw(3) ;
+    *fLog << (int)(fCounter[1]*100/n);
+    *fLog << "%) Rejected trigger pattern!" << endl;
+    *fLog << endl;
 
     return kTRUE;
Index: trunk/MagicSoft/Mars/mtrigger/MFTriggerPattern.h
===================================================================
--- trunk/MagicSoft/Mars/mtrigger/MFTriggerPattern.h	(revision 8903)
+++ trunk/MagicSoft/Mars/mtrigger/MFTriggerPattern.h	(revision 8929)
@@ -29,5 +29,7 @@
 
   Bool_t fDefault;                  // Default which is used if trigger pattern has default value (p==0&&u==0)
+
   Bool_t fResult;                   //! Calculated result to be returned by IsExpressionTrue
+  Int_t  fCounter[2];               //! Counter for results
 
   // MFTriggerPattern
@@ -36,7 +38,10 @@
   void Allow(const Byte_t mask, Prescale_t prescaled=kUnPrescaled);
 
+  Int_t Eval() const;
+
   // MTask
   Int_t PreProcess(MParList *pList);
   Int_t Process();
+  Int_t PostProcess();
 
   // MFilter
