Index: trunk/MagicSoft/Mars/mtrigger/MFTriggerPattern.cc
===================================================================
--- trunk/MagicSoft/Mars/mtrigger/MFTriggerPattern.cc	(revision 8892)
+++ trunk/MagicSoft/Mars/mtrigger/MFTriggerPattern.cc	(revision 8898)
@@ -19,5 +19,5 @@
 !   Author(s): Thomas Bretz  12/2004 <mailto:tbretz@astro.uni-wuerzburg.de>
 !
-!   Copyright: MAGIC Software Development, 2004-2007
+!   Copyright: MAGIC Software Development, 2004-2008
 !
 \* ======================================================================== */
@@ -32,4 +32,9 @@
 //
 // For more details see: MTriggerPattern
+//
+//
+// Input Containers:
+//   MTriggerPattern
+//
 //
 /////////////////////////////////////////////////////////////////////////////
@@ -67,8 +72,15 @@
     fMaskRequiredPrescaled   = trigpatt.fMaskRequiredPrescaled;
     fMaskRequiredUnprescaled = trigpatt.fMaskRequiredUnprescaled;
+
+    fMaskDeniedPrescaled     = trigpatt.fMaskDeniedPrescaled;
+    fMaskDeniedUnprescaled   = trigpatt.fMaskDeniedUnprescaled;
+
+    fDefault                 = trigpatt.fDefault;
 }
 
 
 // --------------------------------------------------------------------------
+//
+// Search for MTriggerPattern in the paremeter list.
 //
 Int_t MFTriggerPattern::PreProcess(MParList *pList)
@@ -85,4 +97,9 @@
 
 // --------------------------------------------------------------------------
+//
+// 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()
@@ -110,63 +127,67 @@
 }
 
-void MFTriggerPattern::RequireTriggerLvl1(Prescale_t prescaled)
-{
-    prescaled==kPrescaled ? (fMaskRequiredPrescaled |= MTriggerPattern::kTriggerLvl1) : (fMaskRequiredUnprescaled |= MTriggerPattern::kTriggerLvl1);
-}
-
-void MFTriggerPattern::RequireTriggerLvl2(Prescale_t prescaled)
-{
-    prescaled==kPrescaled ? (fMaskRequiredPrescaled |= MTriggerPattern::kTriggerLvl2) : (fMaskRequiredUnprescaled |= MTriggerPattern::kTriggerLvl2);
-}
-
-void MFTriggerPattern::RequireCalibration(Prescale_t prescaled)
-{
-    prescaled==kPrescaled ? (fMaskRequiredPrescaled |= MTriggerPattern::kCalibration) : (fMaskRequiredUnprescaled |= MTriggerPattern::kCalibration);
-}
-
-void MFTriggerPattern::RequirePedestal(Prescale_t prescaled)
-{
-    prescaled==kPrescaled ? (fMaskRequiredPrescaled |= MTriggerPattern::kPedestal)    : (fMaskRequiredUnprescaled |= MTriggerPattern::kPedestal);
-}
-
-void MFTriggerPattern::RequirePinDiode(Prescale_t prescaled)
-{
-    prescaled==kPrescaled ? (fMaskRequiredPrescaled |= MTriggerPattern::kPinDiode)    : (fMaskRequiredUnprescaled |= MTriggerPattern::kPinDiode);
-}
-
-void MFTriggerPattern::RequireSumTrigger(Prescale_t prescaled)
-{
-    prescaled==kPrescaled ? (fMaskRequiredPrescaled |= MTriggerPattern::kSumTrigger)  : (fMaskRequiredUnprescaled |= MTriggerPattern::kSumTrigger);
-}
-
-
-void MFTriggerPattern::DenyTriggerLvl1(Prescale_t prescaled)
-{
-    prescaled==kPrescaled ? (fMaskDeniedPrescaled |= MTriggerPattern::kTriggerLvl1) : (fMaskDeniedUnprescaled |= MTriggerPattern::kTriggerLvl1);
-}
-
-void MFTriggerPattern::DenyTriggerLvl2(Prescale_t prescaled)
-{
-    prescaled==kPrescaled ? (fMaskDeniedPrescaled |= MTriggerPattern::kTriggerLvl2) : (fMaskDeniedUnprescaled |= MTriggerPattern::kTriggerLvl2);
-}
-
-void MFTriggerPattern::DenyCalibration(Prescale_t prescaled)
-{
-    prescaled==kPrescaled ? (fMaskDeniedPrescaled |= MTriggerPattern::kCalibration) : (fMaskDeniedUnprescaled |= MTriggerPattern::kCalibration);
-}
-
-void MFTriggerPattern::DenyPedestal(Prescale_t prescaled)
-{
-    prescaled==kPrescaled ? (fMaskDeniedPrescaled |= MTriggerPattern::kPedestal)    : (fMaskDeniedUnprescaled |= MTriggerPattern::kPedestal);
-}
-
-void MFTriggerPattern::DenyPinDiode(Prescale_t prescaled)
-{
-    prescaled==kPrescaled ? (fMaskDeniedPrescaled |= MTriggerPattern::kPinDiode)    : (fMaskDeniedUnprescaled |= MTriggerPattern::kPinDiode);
-}
-
-void MFTriggerPattern::DenySumTrigger(Prescale_t prescaled)
-{
-    prescaled==kPrescaled ? (fMaskDeniedPrescaled |= MTriggerPattern::kSumTrigger)  : (fMaskDeniedUnprescaled |= MTriggerPattern::kSumTrigger);
+// -------------------------------------------------------------------------
+//
+// Require that a prescaled or unprescaled bit in the trigger pattern is
+// passed. The bit is defined by mask, the prescaling by prescaled. The
+// default is unprescaled.
+//
+// Because it doesn't make sense to require a denied bit we reset
+// the deny bit at the same time.
+//
+void MFTriggerPattern::Require(const Byte_t mask, Prescale_t prescaled=kUnPrescaled)
+{
+    prescaled==kPrescaled ? (fMaskRequiredPrescaled |=  mask) : (fMaskRequiredUnprescaled |=  mask);
+    prescaled==kPrescaled ? (fMaskDeniedPrescaled   &= ^mask) : (fMaskDeniedUnprescaled   &= ^mask);
+}
+
+// -------------------------------------------------------------------------
+//
+// Deny that a prescaled or unprescaled bit in the trigger pattern is
+// passed. The bit is defined by mask, the prescaling by prescaled. The
+// default is unprescaled.
+//
+// Because it doesn't make sense to deny a required bit we reset
+// the require bit at the same time.
+//
+void MFTriggerPatter::Deny(const Byte_t mask, Prescale_t prescaled=kUnPrescaled)
+{
+    prescaled==kPrescaled ? (fMaskDeniedPrescaled   |=  mask) : (fMaskDeniedUnprescaled   |=  mask);
+    prescaled==kPrescaled ? (fMaskRequiredPrescaled &= ^mask) : (fMaskRequiredUnprescaled &= ^mask);
+}
+
+// -------------------------------------------------------------------------
+//
+// Remove the given bits from the deny-mask. Thus you can first deny
+// all bits to pass and then define which bit you want to allow
+// to pass. The bit is defined by mask, the prescaling by prescaled. The
+// default is unprescaled.
+//
+void MFTriggerPatter::Allow(const Byte_t mask, Prescale_t prescaled=kUnPrescaled)
+{
+    prescaled==kPrescaled ? (fMaskDeniedPrescaled &= ^mask) : (fMaskDeniedUnprescaled &= ^mask);
+}
+
+
+// -------------------------------------------------------------------------
+//
+// Deny all bits (i.e. also require non bits) for the given prescaling
+// option. The prescaling is defined by prescaled. The default is
+// unprescaled.
+//
+void MFTriggerPattern::DenyAll(Prescale_t prescaled)
+{
+    Deny(0xff, prescaled);
+}
+
+// -------------------------------------------------------------------------
+//
+// Allow all bits. resets the deny mask for the given prescaling option,
+// but keeps the require mask unchanged. The prescaling is defined
+// by prescaled. The default is unprescaled.
+//
+void MFTriggerPattern::AllowAll(Prescale_t prescaled)
+{
+    prescaled==kPrescaled ? (fMaskDeniedPrescaled = 0) : (fMaskDeniedUnprescaled = 0);
 }
 
@@ -268,12 +289,12 @@
 // This method is there because is not possible to deny trigger patterns
 // using only the Require pattern. Possible arguments are (upper/lower
-// case is ignored):
-//
-//           "LT1"  : Trigger Level 1 flag
-//           "CAL"  : Calibration flag
-//           "LT2"  : Trigger Level 2 flag
-//           "PED"  : Pedestal flag
-//           "PIND" : Pin Diode flag
-//           "SUMT" : Sum Trigger flag
+// case is ignored) the flags for:
+//
+//           "LT1"  : Trigger Level 1
+//           "CAL"  : Calibration
+//           "LT2"  : Trigger Level 2
+//           "PED"  : Pedestal
+//           "PIND" : Pin Diode
+//           "SUMT" : Sum Trigger
 // 
 // concatenations of these strings are allowed and considered as 
@@ -304,9 +325,2 @@
         DenySumTrigger(prescaled);
 }
-
-// --------------------------------------------------------------------------
-//
-Bool_t MFTriggerPattern::IsExpressionTrue() const
-{
-    return fResult;
-}
Index: trunk/MagicSoft/Mars/mtrigger/MFTriggerPattern.h
===================================================================
--- trunk/MagicSoft/Mars/mtrigger/MFTriggerPattern.h	(revision 8892)
+++ trunk/MagicSoft/Mars/mtrigger/MFTriggerPattern.h	(revision 8898)
@@ -25,10 +25,17 @@
 
   Bool_t fDefault;                  // Default which is used if trigger pattern has default value (p==0&&u==0)
-  Bool_t fResult;                   //!
+  Bool_t fResult;                   //! Calculated result to be returned by IsExpressionTrue
 
+  // MFTriggerPattern
+  void Require(const Byte_t mask, Prescale_t prescaled=kUnPrescaled);
+  void Deny(const Byte_t mask, Prescale_t prescaled=kUnPrescaled);
+  void Allow(const Byte_t mask, Prescale_t prescaled=kUnPrescaled);
+
+  // MTask
   Int_t PreProcess(MParList *pList);
   Int_t Process();
 
-  Bool_t IsExpressionTrue() const;
+  // MFilter
+  Bool_t IsExpressionTrue() const { return fResult; }
 
 public:
@@ -36,17 +43,28 @@
   MFTriggerPattern(MFTriggerPattern &trigpatt);
 
-  void RequireTriggerLvl1(Prescale_t prescaled=kUnPrescaled);
-  void RequireTriggerLvl2(Prescale_t prescaled=kUnPrescaled);
-  void RequireCalibration(Prescale_t prescaled=kUnPrescaled);
-  void RequirePedestal(Prescale_t prescaled=kUnPrescaled);
-  void RequirePinDiode(Prescale_t prescaled=kUnPrescaled);
-  void RequireSumTrigger(Prescale_t prescaled=kUnPrescaled);
+  // Setter
+  void RequireTriggerLvl1(Prescale_t prescaled=kUnPrescaled) { Require(MTriggerPattern::kTriggerLvl1, prescaled); }
+  void RequireTriggerLvl2(Prescale_t prescaled=kUnPrescaled) { Require(MTriggerPattern::kTriggerLvl2, prescaled); }
+  void RequireCalibration(Prescale_t prescaled=kUnPrescaled) { Require(MTriggerPattern::kCalibration, prescaled); }
+  void RequirePedestal(Prescale_t prescaled=kUnPrescaled)    { Require(MTriggerPattern::kPedestal, prescaled);    }
+  void RequirePinDiode(Prescale_t prescaled=kUnPrescaled)    { Require(MTriggerPattern::kPinDiode, prescaled);    }
+  void RequireSumTrigger(Prescale_t prescaled=kUnPrescaled)  { Require(MTriggerPattern::kSumTrigger, prescaled);  }
 
-  void DenyTriggerLvl1(Prescale_t prescaled=kUnPrescaled);
-  void DenyTriggerLvl2(Prescale_t prescaled=kUnPrescaled);
-  void DenyCalibration(Prescale_t prescaled=kUnPrescaled);
-  void DenyPedestal(Prescale_t prescaled=kUnPrescaled);
-  void DenyPinDiode(Prescale_t prescaled=kUnPrescaled);
-  void DenySumTrigger(Prescale_t prescaled=kUnPrescaled);
+  void DenyTriggerLvl1(Prescale_t prescaled=kUnPrescaled)    { Deny(MTriggerPattern::kTriggerLvl1, prescaled); }
+  void DenyTriggerLvl2(Prescale_t prescaled=kUnPrescaled)    { Deny(MTriggerPattern::kTriggerLvl2, prescaled); }
+  void DenyCalibration(Prescale_t prescaled=kUnPrescaled)    { Deny(MTriggerPattern::kCalibration, prescaled); }
+  void DenyPedestal(Prescale_t prescaled=kUnPrescaled)       { Deny(MTriggerPattern::kPedestal, prescaled);    }
+  void DenyPinDiode(Prescale_t prescaled=kUnPrescaled)       { Deny(MTriggerPattern::kPinDiode, prescaled);    }
+  void DenySumTrigger(Prescale_t prescaled=kUnPrescaled)     { Deny(MTriggerPattern::kSumTrigger, prescaled);  }
+
+  void AllowTriggerLvl1(Prescale_t prescaled=kUnPrescaled)   { Allow(MTriggerPattern::kTriggerLvl1, prescaled); }
+  void AllowTriggerLvl2(Prescale_t prescaled=kUnPrescaled)   { Allow(MTriggerPattern::kTriggerLvl2, prescaled); }
+  void AllowCalibration(Prescale_t prescaled=kUnPrescaled)   { Allow(MTriggerPattern::kCalibration, prescaled); }
+  void AllowPedestal(Prescale_t prescaled=kUnPrescaled)      { Allow(MTriggerPattern::kPedestal, prescaled);    }
+  void AllowPinDiode(Prescale_t prescaled=kUnPrescaled)      { Allow(MTriggerPattern::kPinDiode, prescaled);    }
+  void AllowSumTrigger(Prescale_t prescaled=kUnPrescaled)    { Allow(MTriggerPattern::kSumTrigger, prescaled);  }
+
+  void DenyAll(Prescale_t prescaled=kUnPrescaled);
+  void AllowAll(Prescale_t prescaled=kUnPrescaled);
 
   void Require(TString patt, Prescale_t prescaled=kUnPrescaled);
Index: trunk/MagicSoft/Mars/mtrigger/MTriggerPattern.cc
===================================================================
--- trunk/MagicSoft/Mars/mtrigger/MTriggerPattern.cc	(revision 8892)
+++ trunk/MagicSoft/Mars/mtrigger/MTriggerPattern.cc	(revision 8898)
@@ -52,5 +52,5 @@
 // 2) The second concerns prescaled triggers.
 // 
-// The prescaler is a devise installed AFTER the LT2. It collects
+// The prescaler is a devicee installed AFTER the LT2. It collects
 // all kind of triggers and can prescale each trigger by a different
 // prescaling factor. This means that we can set the prescaler to
