Index: trunk/MagicSoft/Mars/Changelog
===================================================================
--- trunk/MagicSoft/Mars/Changelog	(revision 5802)
+++ trunk/MagicSoft/Mars/Changelog	(revision 5803)
@@ -20,4 +20,42 @@
 
                                                  -*-*- END OF LINE -*-*-
+ 2005/01/11 Thomas Bretz
+
+   * callisto.cc, callisto.rc:
+     - changed such, that all three kinds of pedestals are calcualted 
+       (usefull for studies)
+
+   * manalysis/MMatrixLoop.[h,cc]:
+     - derived from MRead
+     - implemented some basic functions from MRead
+
+   * mfilter/MFCosmics.[h,cc]:
+     - allow setting of name of MPedestalCam
+
+   * mhbase/MBinning.[h,cc]:
+     - added SetEdges taking MParList as input
+
+   * mhflux/MHAlpha.cc:
+     - use new function from MBinning
+
+   * mjobs/MJCalibrateSignal.[h,cc]:
+     - changed to calculate all three kinds of pedestals
+     - added filters for trigger pattern and illuminated events
+
+   * mjobs/MJPedestal.cc:
+     - give different names to tabs with different pedestals
+
+   * mjobs/MJStar.cc:
+     - on request changed used pedestal from "FromExtractor" to
+       "FromExtractorRndm"
+
+   * mtrigger/MTriggerPattern.h:
+     - added Reset function
+
+   * mtrigger/MTriggerPatternDecode.[h,cc]:
+     - added using file format version number
+
+
+
  2005/01/11 Markus Gaug
 
@@ -34,4 +72,5 @@
      - added pointer to MRawEvtHeader to deny cosmics events in case
        of 'interlaced' flag is set. No changes for 'normal' calibration
+
 
 
@@ -93,4 +132,5 @@
 
 
+
  2005/01/10 Thomas Bretz
 
Index: trunk/MagicSoft/Mars/callisto.cc
===================================================================
--- trunk/MagicSoft/Mars/callisto.cc	(revision 5802)
+++ trunk/MagicSoft/Mars/callisto.cc	(revision 5803)
@@ -439,5 +439,5 @@
             return 1;
         }
-        /*
+
         //
         // Calculate pedestal and pedestal resolution
@@ -472,5 +472,5 @@
             return 1;
         }
-        */
+
         //
         // Extract signal and calibrate it
@@ -487,5 +487,5 @@
 
         // Where to search for calibration files
-        if (!job4.ProcessFile(job1.GetPedestalCam(), job2.GetPedestalCam()/*, job3.GetPedestalCam()*/))
+        if (!job4.ProcessFile(job1.GetPedestalCam(), job2.GetPedestalCam(), job3.GetPedestalCam()))
             return -1;
 
Index: trunk/MagicSoft/Mars/callisto.rc
===================================================================
--- trunk/MagicSoft/Mars/callisto.rc	(revision 5802)
+++ trunk/MagicSoft/Mars/callisto.rc	(revision 5803)
@@ -59,4 +59,5 @@
 MJPedetslaC2.ExtractSignal.WeightsFile:      msignal/calibration_weights_UV.dat
 MJPedetslaY2.ExtractSignal.WeightsFile:      msignal/calibration_weights_UV.dat
+MJPedetslaY3.ExtractSignal.WeightsFile:      msignal/calibration_weights_UV.dat
 MJCalibration.ExtractSignal.WeightsFile:     msignal/calibration_weights_UV.dat
 MJCalibrateSignal.ExtractSignal.WeightsFile: msignal/cosmics_weights.dat
@@ -200,6 +201,8 @@
 #MJPedestalY1.PathOut:        .
 #MJPedestalY2.PathOut:        .
+#MJPedestalY3.PathOut:        .
 #MJPedestalY1.PathData:      /data/MAGIC/Period016/
 #MJPedestalY2.PathData:      /data/MAGIC/Period016/
+#MJPedestalY3.PathData:      /data/MAGIC/Period016/
 #MJCalibrateSignal.PathData: /data/MAGIC/Period016/
 #MJCalibrateSignal.PathIn:   .
@@ -210,6 +213,8 @@
 #MJPedestalY1.UseData: Yes
 #MJPedestalY2.UseData: Yes
+#MJPedestalY3.UseData: Yes
 MJPedestalY1.MaxEvents: 500
 MJPedestalY2.MaxEvents: 500
+MJPedestalY3.MaxEvents: 500
 
 #MJPedestalY.ExtractPedestal: MPedCalcFromLoGain
@@ -244,5 +249,6 @@
 # Setup level for determining of bad pixels
 # -------------------------------------------------------------------------
-#MJCalibrateSignal.MBadPixelsCalc.PedestalLevel:      3.0
+MJCalibrateSignal.MBadPixelsCalc.PedestalLevel:         3.0
+MJCalibrateSignal.MBadPixelsCalc.PedestalLevelVariance: 3.0
 #MJCalibrateSignal.MBadPixelsTreat.NumMinNeighbors:    2
 #MJCalibrateSignal.MBadPixelsTreat.UseInterpolation:   yes
Index: trunk/MagicSoft/Mars/manalysis/MMatrixLoop.cc
===================================================================
--- trunk/MagicSoft/Mars/manalysis/MMatrixLoop.cc	(revision 5802)
+++ trunk/MagicSoft/Mars/manalysis/MMatrixLoop.cc	(revision 5803)
@@ -54,4 +54,22 @@
 // --------------------------------------------------------------------------
 //
+// Return the number of events (rows) in the matrix
+//
+UInt_t MMatrixLoop::GetEntries()
+{
+    return fMatrix ? fMatrix->GetNumRows() : 0;
+}
+
+// --------------------------------------------------------------------------
+//
+// Return name of MHMatrix, <n/a> if not available
+//
+TString MMatrixLoop::GetFileName() const
+{
+    return fMatrix ? fMatrix->GetName() : "<n/a>";
+}
+
+// --------------------------------------------------------------------------
+//
 Int_t MMatrixLoop::PreProcess(MParList *plist)
 {
Index: trunk/MagicSoft/Mars/manalysis/MMatrixLoop.h
===================================================================
--- trunk/MagicSoft/Mars/manalysis/MMatrixLoop.h	(revision 5802)
+++ trunk/MagicSoft/Mars/manalysis/MMatrixLoop.h	(revision 5803)
@@ -2,26 +2,34 @@
 #define MARS_MMatrixLoop
 
-#ifndef MARS_MTask
-#include "MTask.h"
+#ifndef MARS_MRead
+#include "MRead.h"
 #endif
-
 
 class MHMatrix;
 
-class MMatrixLoop : public MTask
+class MMatrixLoop : public MRead
 {
 private:
+    // MMatrixLoop
     static const TString gsDefName;
     static const TString gsDefTitle;
 
-protected:
     MHMatrix *fMatrix;
     Int_t     fNumRow;    //! Number of dimensions of histogram
 
+    // MRead
+    UInt_t  GetEntries();
+    TString GetFileName() const;
+    Bool_t  Rewind() { fNumRow=0; return kTRUE; }
+
+    virtual Int_t AddFile(const char *fname, Int_t entries=-1) { return 0; }
+    Int_t AddFiles(MDirIter &dir) { return 0; }
+
+    // MTask
+    Int_t PreProcess(MParList *plist);
+    Int_t Process();
+
 public:
     MMatrixLoop(MHMatrix *mat, const char *name=NULL, const char *title=NULL);
-
-    Int_t PreProcess(MParList *plist);
-    Int_t Process();
 
     ClassDef(MMatrixLoop, 0) // Task 'reading' events from a MHMatrix
Index: trunk/MagicSoft/Mars/mfilter/MFCosmics.cc
===================================================================
--- trunk/MagicSoft/Mars/mfilter/MFCosmics.cc	(revision 5802)
+++ trunk/MagicSoft/Mars/mfilter/MFCosmics.cc	(revision 5803)
@@ -61,4 +61,7 @@
 
 using namespace std;
+
+const TString MFCosmics::fgNamePedestalCam = "MPedestalCam";
+
 // --------------------------------------------------------------------------
 //
@@ -66,6 +69,6 @@
 //
 MFCosmics::MFCosmics(const char *name, const char *title)
-    : fPedestals(NULL), fSignals(NULL),
-      fRawEvt(NULL), fMaxEmptyPixels(0.2)
+    : fPedestals(NULL), fSignals(NULL), fRawEvt(NULL),
+    fNamePedestalCam(fgNamePedestalCam), fMaxEmptyPixels(0.2)
 {
     fName  = name  ? name  : "MFCosmics";
@@ -89,8 +92,8 @@
     }
 
-    fPedestals = (MPedestalCam*)pList->FindObject("MPedestalCam");
+    fPedestals = (MPedestalCam*)pList->FindObject(fNamePedestalCam, "MPedestalCam");
     if (!fPedestals)
     {
-        *fLog << err << "MPedestalCam not found... aborting." << endl;
+        *fLog << err << fNamePedestalCam << " [MPedestalCam] not found... aborting." << endl;
         return kFALSE;
     }
Index: trunk/MagicSoft/Mars/mfilter/MFCosmics.h
===================================================================
--- trunk/MagicSoft/Mars/mfilter/MFCosmics.h	(revision 5802)
+++ trunk/MagicSoft/Mars/mfilter/MFCosmics.h	(revision 5803)
@@ -14,8 +14,12 @@
 {
 private:
+    static const TString fgNamePedestalCam;
+
     MPedestalCam        *fPedestals; // Pedestals of all pixels in the camera
     MExtractedSignalCam *fSignals;   // Calibration events of all pixels in the camera
 
     MRawEvtData         *fRawEvt;    // raw event data (time slices)
+
+    TString fNamePedestalCam;
 
     Int_t   fCut[2];
@@ -40,4 +44,6 @@
     Float_t GetMaxEmptyPixels() const          { return fMaxEmptyPixels; }
 
+    void SetNamePedestalCam(const char *name) { fNamePedestalCam = name; }
+
     ClassDef(MFCosmics, 0)   // Filter to perform a cosmics rejection
 };
Index: trunk/MagicSoft/Mars/mhbase/MBinning.cc
===================================================================
--- trunk/MagicSoft/Mars/mhbase/MBinning.cc	(revision 5802)
+++ trunk/MagicSoft/Mars/mhbase/MBinning.cc	(revision 5803)
@@ -48,4 +48,6 @@
 #include "MLogManip.h"
 
+#include "MParList.h"
+
 #include "MH.h"
 
@@ -85,4 +87,20 @@
 
     SetEdges(nbins, lo, hi, opt);
+}
+
+// --------------------------------------------------------------------------
+//
+// Search in the parameter list for the binning with name "name". If found,
+// set the edges and title accordingly. Default is name of object.
+// return kTRUE if object found, kFALSE otherwise.
+//
+Bool_t MBinning::SetEdges(const MParList &list, const char *name)
+{
+    MBinning *bins = (MBinning*)list.FindObject(name ? name : fName.Data(), "MBinning");
+    if (!bins)
+        return kFALSE;
+
+    SetEdges(*bins);
+    return kTRUE;
 }
 
Index: trunk/MagicSoft/Mars/mhbase/MBinning.h
===================================================================
--- trunk/MagicSoft/Mars/mhbase/MBinning.h	(revision 5802)
+++ trunk/MagicSoft/Mars/mhbase/MBinning.h	(revision 5803)
@@ -12,4 +12,6 @@
 class TH1;
 class TAxis;
+
+class MParList;
 
 class MBinning : public MParContainer
@@ -52,6 +54,7 @@
     }
 
+    Bool_t SetEdges(const MParList &list, const char *name=0);
     void SetEdges(const TAxis &axe);
-    void SetEdges(const MBinning &bins) { SetEdges(bins.fEdges); fType = bins.fType; }
+    void SetEdges(const MBinning &bins) { SetEdges(bins.fEdges); fType = bins.fType; fTitle = bins.fTitle; }
     void SetEdges(const TH1 &h, const Char_t axis='x');
     void SetEdges(const Int_t nbins, const Axis_t lo, Axis_t up);
Index: trunk/MagicSoft/Mars/mhflux/MHAlpha.cc
===================================================================
--- trunk/MagicSoft/Mars/mhflux/MHAlpha.cc	(revision 5802)
+++ trunk/MagicSoft/Mars/mhflux/MHAlpha.cc	(revision 5803)
@@ -306,19 +306,15 @@
     if (!fOffData)
     {
-        MBinning *bins = (MBinning*)pl->FindObject("BinningTheta", "MBinning");
-        if (fPointPos && bins)
-            binst.SetEdges(*bins);
         if (!fPointPos)
             binst.SetEdges(1, 0, 60);
-
-        bins = (MBinning*)pl->FindObject("BinningEnergyEst", "MBinning");
-        if ((fEnergy||fHillas) && bins)
-            binse.SetEdges(*bins);
+        else
+            binst.SetEdges(*pl, "BinningTheta");
+
         if (!fEnergy && !fHillas)
             binse.SetEdges(1, 10, 100000);
-
-        bins = (MBinning*)pl->FindObject("BinningAlpha", "MBinning");
-        if (bins)
-            binsa.SetEdges(*bins);
+        else
+            binse.SetEdges(*pl, "BinningEnergyEst");
+
+        binsa.SetEdges(*pl, "BinningAlpha");
     }
 
Index: trunk/MagicSoft/Mars/mjobs/MJCalibrateSignal.cc
===================================================================
--- trunk/MagicSoft/Mars/mjobs/MJCalibrateSignal.cc	(revision 5802)
+++ trunk/MagicSoft/Mars/mjobs/MJCalibrateSignal.cc	(revision 5803)
@@ -64,4 +64,7 @@
 #include "MReadMarsFile.h"
 #include "MRawFileRead.h"
+#include "MContinue.h"
+#include "MTriggerPatternDecode.h"
+#include "MFTriggerPattern.h"
 #include "MGeomApply.h"
 #include "MMcPedestalCopy.h"
@@ -69,4 +72,5 @@
 #include "MPedCalcFromLoGain.h"
 #include "MExtractor.h"
+#include "MFCosmics.h"
 #include "MTaskEnv.h"
 #include "MCalibrateData.h"
@@ -180,5 +184,5 @@
 }
 
-Bool_t MJCalibrateSignal::ProcessFile(MPedestalCam &pedcamab, MPedestalCam &pedcam2/*, MPedestalCam &pedcam*/)
+Bool_t MJCalibrateSignal::ProcessFile(MPedestalCam &pedcamab, MPedestalCam &pedcam2, MPedestalCam &pedcam)
 {
     if (!fSequence.IsValid())
@@ -324,20 +328,31 @@
     // Make sure that pedcamab has the correct name
     pedcamab.SetName("MPedestalFundamental");
-    //pedcam.SetName("MPedestalFromExtractorRndm");
+    pedcam.SetName("MPedestalFromExtractorRndm");
     pedcam2.SetName("MPedestalFromExtractor");
-    //plist.AddToList(&pedcam);
+    plist.AddToList(&pedcam);
     plist.AddToList(&pedcam2);
     plist.AddToList(&pedcamab);
 
+    // Check for interleaved events
+    MTriggerPatternDecode decode;
+
+    MFTriggerPattern ftp;
+    ftp.DenyCalibration();
+    ftp.DenyPedestal();
+    ftp.DenyPinDiode();
+
+    MContinue conttp(&ftp, "ContTrigPattern");
+    // --> tlist2
+
+    // Do signal and pedestal calculation
     MPedCalcFromLoGain     pedlo1("MPedCalcFundamental");
     pedlo1.SetPedestalUpdate(kTRUE);
     pedlo1.SetNamePedestalCamOut("MPedestalFundamental");
-    /*
-     MPedCalcFromLoGain     pedlo2("MPedCalcWithExtractorRndm");
-     pedlo2.SetPedestalUpdate(kTRUE);
-     pedlo2.SetRandomCalculation(kTRUE);
-     pedlo2.SetNamePedestalCamIn("MPedestalFundamental");
-     pedlo2.SetNamePedestalCamOut("MPedestalFromExtractorRndm");
-     */
+
+    MPedCalcFromLoGain     pedlo2("MPedCalcWithExtractorRndm");
+    pedlo2.SetPedestalUpdate(kTRUE);
+    pedlo2.SetRandomCalculation(kTRUE);
+    pedlo2.SetNamePedestalCamIn("MPedestalFundamental");
+    pedlo2.SetNamePedestalCamOut("MPedestalFromExtractorRndm");
 
     MPedCalcFromLoGain     pedlo3("MPedCalcWithExtractor");
@@ -352,10 +367,10 @@
         const Float_t win = extractor1->GetNumHiGainSamples();
         pedlo1.SetExtractWindow(15, (UShort_t)TMath::Nint(win));
-        //pedlo2.SetExtractWindow(15, (UShort_t)TMath::Nint(win));
+        pedlo2.SetExtractWindow(15, (UShort_t)TMath::Nint(win));
         pedlo3.SetExtractWindow(15, (UShort_t)TMath::Nint(win));
 
         if (extractor1->InheritsFrom("MExtractTimeAndCharge"))
         {
-            //pedlo2.SetExtractor((MExtractTimeAndCharge*)extractor1);
+            pedlo2.SetExtractor((MExtractTimeAndCharge*)extractor1);
             pedlo3.SetExtractor((MExtractTimeAndCharge*)extractor1);
             extractor1->SetPedestals(&pedcamab);
@@ -363,5 +378,10 @@
     }
 
-    MMcPedestalCopy        pcopy;
+    MFCosmics fcosmics;
+    fcosmics.SetNamePedestalCam("MPedestalFundamental");
+    MContinue contcos(&fcosmics, "ContTrigEvts");
+    contcos.SetInverted();
+
+    MMcPedestalCopy pcopy;
     MTaskEnv taskenv1("ExtractSignal");
     MTaskEnv taskenv2("ExtractTime");
@@ -376,5 +396,5 @@
         calib.AddPedestal("MPedestalCam", "MPedPhotFundamental");
         calib.AddPedestal("MPedestalCam", "MPedPhotFromExtractor");
-        //calib.AddPedestal("MPedestalCam", "MPedPhotFromExtractorRndm");
+        calib.AddPedestal("MPedestalCam", "MPedPhotFromExtractorRndm");
     }
     else
@@ -382,5 +402,5 @@
         calib.AddPedestal("Fundamental");
         calib.AddPedestal("FromExtractor");
-        //calib.AddPedestal("FromExtractorRndm");
+        calib.AddPedestal("FromExtractorRndm");
         calib.SetPedestalFlag(MCalibrateData::kEvent);
     }
@@ -393,5 +413,5 @@
     treat.AddNamePedPhotCam("MPedPhotFundamental");
     treat.AddNamePedPhotCam("MPedPhotFromExtractor");
-    //treat.AddNamePedPhotCam("MPedPhotFromExtractorRndm");
+    treat.AddNamePedPhotCam("MPedPhotFromExtractorRndm");
 
 
@@ -438,5 +458,5 @@
     write.AddContainer("MPedPhotFundamental",       "Events");
     write.AddContainer("MPedPhotFromExtractor",     "Events");
-    //write.AddContainer("MPedPhotFromExtractorRndm", "Events");
+    write.AddContainer("MPedPhotFromExtractorRndm", "Events");
     write.AddContainer("MTime",                     "Events",     kFALSE);
     write.AddContainer("MRawEvtHeader",             "Events");
@@ -468,4 +488,6 @@
     // Now setup tasklist for events
     MTaskList tlist2;
+    tlist2.AddToList(&decode);
+    tlist2.AddToList(&conttp);
     tlist2.AddToList(&apply);
     tlist2.AddToList(&merge);
@@ -475,5 +497,5 @@
     {
         tlist2.AddToList(&pedlo1);
-        //tlist2.AddToList(&pedlo2);
+        tlist2.AddToList(&pedlo2);
         tlist2.AddToList(&pedlo3);
     }
@@ -484,4 +506,5 @@
     if (extractor2)
         tlist2.AddToList(&taskenv2);
+    tlist2.AddToList(&contcos);
     tlist2.AddToList(&fill2);
     tlist2.AddToList(&calib);
Index: trunk/MagicSoft/Mars/mjobs/MJCalibrateSignal.h
===================================================================
--- trunk/MagicSoft/Mars/mjobs/MJCalibrateSignal.h	(revision 5802)
+++ trunk/MagicSoft/Mars/mjobs/MJCalibrateSignal.h	(revision 5803)
@@ -34,5 +34,5 @@
     MJCalibrateSignal(const char *name=NULL, const char *title=NULL);
 
-    Bool_t ProcessFile(MPedestalCam &camab, MPedestalCam &cam2/*, MPedestalCam &cam2*/);
+    Bool_t ProcessFile(MPedestalCam &camab, MPedestalCam &cam1, MPedestalCam &cam2);
 
     ClassDef(MJCalibrateSignal, 0) // Tool to create a pedestal file (MPedestalCam)
Index: trunk/MagicSoft/Mars/mjobs/MJPedestal.cc
===================================================================
--- trunk/MagicSoft/Mars/mjobs/MJPedestal.cc	(revision 5802)
+++ trunk/MagicSoft/Mars/mjobs/MJPedestal.cc	(revision 5803)
@@ -537,16 +537,16 @@
       {
             
-        TCanvas &c3 = fDisplay->AddTab("PedExtrd");
-        c3.Divide(2,3);
-        
-        disp0.CamDraw(c3, 1, 2, 1);
-        disp1.CamDraw(c3, 2, 2, 6);
-        
-        TCanvas &c13 = fDisplay->AddTab("PedDiff");
-        c13.Divide(2,3);
-        
-        disp9.CamDraw(c13, 1, 2, 5);
-        disp10.CamDraw(c13, 2, 2, 5);
-        return;
+          TCanvas &c3 = fDisplay->AddTab(fExtractionType==kWithExtractor?"PedExtrd":"PedRndm");
+          c3.Divide(2,3);
+
+          disp0.CamDraw(c3, 1, 2, 1);
+          disp1.CamDraw(c3, 2, 2, 6);
+
+          TCanvas &c13 = fDisplay->AddTab(fExtractionType==kWithExtractor?"PedDiff":"DiffRndm");
+          c13.Divide(2,3);
+
+          disp9.CamDraw(c13, 1, 2, 5);
+          disp10.CamDraw(c13, 2, 2, 5);
+          return;
       }
 }
Index: trunk/MagicSoft/Mars/mjobs/MJStar.cc
===================================================================
--- trunk/MagicSoft/Mars/mjobs/MJStar.cc	(revision 5802)
+++ trunk/MagicSoft/Mars/mjobs/MJStar.cc	(revision 5803)
@@ -186,5 +186,5 @@
     //MBadPixelsMerge        merge(&badpix);
     MImgCleanStd           clean;
-    clean.SetNamePedPhotCam("MPedPhotFromExtractor");
+    clean.SetNamePedPhotCam("MPedPhotFromExtractorRndm");
 
     MHillasCalc            hcalc;
Index: trunk/MagicSoft/Mars/mtrigger/MTriggerPattern.h
===================================================================
--- trunk/MagicSoft/Mars/mtrigger/MTriggerPattern.h	(revision 5802)
+++ trunk/MagicSoft/Mars/mtrigger/MTriggerPattern.h	(revision 5803)
@@ -27,5 +27,7 @@
 
 public:
-    MTriggerPattern(const char *name, const char *title);
+    MTriggerPattern(const char *name=0, const char *title=0);
+
+    void Reset() { fPrescaled=0; fUnprescaled=0; }
 
     Byte_t GetPrescaled() const   { return fPrescaled; }
Index: trunk/MagicSoft/Mars/mtrigger/MTriggerPatternDecode.cc
===================================================================
--- trunk/MagicSoft/Mars/mtrigger/MTriggerPatternDecode.cc	(revision 5802)
+++ trunk/MagicSoft/Mars/mtrigger/MTriggerPatternDecode.cc	(revision 5803)
@@ -17,5 +17,5 @@
 !
 !   Author(s): Nicola Galante  12/2004 <mailto:nicola.galante@pi.infn.it>
-!   Author(s): Nicola Galante  12/2004 <mailto:tbretz@astro.uni-wuerzburg.de>
+!   Author(s): Thomas Bretz 12/2004 <mailto:tbretz@astro.uni-wuerzburg.de>
 !
 !   Copyright: MAGIC Software Development, 2004
@@ -43,4 +43,5 @@
 #include "MParList.h"
 #include "MRawEvtHeader.h"
+#include "MRawRunHeader.h"
 #include "MTriggerPattern.h"
 
@@ -54,4 +55,5 @@
 //
 MTriggerPatternDecode::MTriggerPatternDecode(const char *name, const char *title)
+    : fRunHeader(0), fEvtHeader(0), fPattern(0)
 {
     fName  = name  ? name  : "MTriggerPatternDecode";
@@ -63,4 +65,11 @@
 Int_t MTriggerPatternDecode::PreProcess(MParList *pList)
 {
+    fRunHeader = (MRawRunHeader*)pList->FindCreateObj("MRawRunHeader");
+    if (!fRunHeader)
+    {
+	*fLog << err << "MRawRunHeader not found... abort." << endl;
+	return kFALSE;
+    }
+
     fEvtHeader = (MRawEvtHeader *)pList->FindObject("MRawEvtHeader");
     if (!fEvtHeader)
@@ -84,4 +93,7 @@
 Int_t MTriggerPatternDecode::Process()
 {
+    if (fRunHeader->GetFormatVersion()<5)
+        return kTRUE;
+
     UInt_t pattern = ~fEvtHeader->GetTriggerID();
 
Index: trunk/MagicSoft/Mars/mtrigger/MTriggerPatternDecode.h
===================================================================
--- trunk/MagicSoft/Mars/mtrigger/MTriggerPatternDecode.h	(revision 5802)
+++ trunk/MagicSoft/Mars/mtrigger/MTriggerPatternDecode.h	(revision 5803)
@@ -2,70 +2,27 @@
 #define MARS_MTriggerPatternDecode
 
-/////////////////////////////////////////////////////////////////////////////
-//                                                                         //
-// MTriggerPatternDecode
-//
-// auth. N.Galante 
-// created 17.11.04                                                       //
-//                                                                         //
-/////////////////////////////////////////////////////////////////////////////
-
-#ifndef MARS_MFilter
-#include "MFilter.h"
+#ifndef MARS_MTask
+#include "MTask.h"
 #endif
 
 class MParList;
 class MRawEvtHeader;
+class MRawRunHeader;
 class MTriggerPattern;
 
-class MTriggerPatternDecode : public MFilter
+class MTriggerPatternDecode : public MTask
 {
 private:
-//  enum pattern {PLT1=1, PCAL=2, PLT2=4, PPED=8, PPIND=16, 
-//		ULT1=256, UCAL=512, ULT2=1024, UPED=2048, UPIND=4096};
+    MRawRunHeader   *fRunHeader;
+    MRawEvtHeader   *fEvtHeader;
+    MTriggerPattern *fPattern;
 
-   MRawEvtHeader   *fEvtHeader;
-   MTriggerPattern *fPattern;
-
-//  UInt_t fMaskAllowed;   // Mask for filtering Trigger Pattern allowed
-//  UInt_t fMaskDenied;    // Mask for filtering Trigger Pattern denied
-//  UInt_t fPattern;       // Trigger Pattern stored into event
-//  UInt_t fMachArch;      
-
-//  Bool_t fBitInv;        // Flag to invert bits of Pattern (1=yes,0=no)
-                         // default 1=yes
-  //Bool_t fPrescaled;     // Flag to set if using prescaled (=1) or
-                         // unprescaled (=0) pattern. Default 1
-//  Bool_t fResult;
-
-  Int_t PreProcess(MParList *pList);
-  Int_t Process();
+    Int_t PreProcess(MParList *pList);
+    Int_t Process();
 
 public:
+    MTriggerPatternDecode(const char *name=0, const char *title=0);
 
-  MTriggerPatternDecode(const char *name, const char *title);
-  MTriggerPatternDecode(MTriggerPatternDecode &trigpatt);
-
-//  Bool_t IsExpressionTrue() const;
-
-//  void AllowPresTrigger(TString patt);
-//  void DenyPresTrigger(TString patt);
-//  void AllowUnpresTrigger(TString patt);
-//  void DenyUnpresTrigger(TString patt);
-//
-////  UInt_t GetMaskAllowed() const { return fMaskAllowed; };
-//  UInt_t GetMaskDenied() const { return fMaskDenied; };
-  //Bool_t GetPrescaled() const { return fPrescaled; };
-//  Bool_t GetBitInv() const { return fBitInv; }
-
-//  void SetBitInv(const Bool_t inv) { fBitInv = inv; }
-  //void SetPrescaled() { fPrescaled = kTRUE; };
-  //void SetUnprescaled() { fPrescaled = kFALSE; };
-
-  // Low level settings. USE THESE ONLY IF YOU ARE AN EXPERT!
-//  void SetMaskAllowed(const UInt_t mask) { fMaskAllowed = mask; }
-//  void SetMaskDenied(const UInt_t mask) { fMaskDenied = mask; }
-
-  ClassDef(MTriggerPatternDecode, 1) // Task to decode the Trigger Pattern
+    ClassDef(MTriggerPatternDecode, 1) // Task to decode the Trigger Pattern
 };
 
