Index: trunk/MagicSoft/Mars/manalysis/MMcTriggerLvl2.cc
===================================================================
--- trunk/MagicSoft/Mars/manalysis/MMcTriggerLvl2.cc	(revision 3794)
+++ trunk/MagicSoft/Mars/manalysis/MMcTriggerLvl2.cc	(revision 3795)
@@ -68,5 +68,5 @@
 // Correspondence TABLE between pixel numbering in the trigger cells and
 // the standard spiral counting 
-// (Note: Pixels start to count from 1 instead of 0)
+// (*Note*: Pixels start to count ** from 1 ** instead of 0)
 //
 // This correspondence is valid only for MAGIC-like geometries!
@@ -812,7 +812,7 @@
 void MMcTriggerLvl2::GetEnergy(MMcEvt *fMcEvt)
 {
-  const MMcEvt &h = *(MMcEvt *)fMcEvt; 
-  fEnergy = h.GetEnergy();
-  return;
+   const MMcEvt &h = *(MMcEvt *)fMcEvt; 
+   fEnergy = h.GetEnergy();
+   return;
 }
 
@@ -1007,2 +1007,34 @@
 }
 
+//---------------------------------------------------------------------
+//  Check if a given pixel is in the trigger region
+//
+Bool_t MMcTriggerLvl2::IsPixelInTrigger(Int_t pixel) const
+{
+  for (int cell=0; cell<gsNCells; cell++)
+    for (int i=0; i<gsNPixInCell; i++)
+      if ((gsPixelsInCell[i][cell]-1) == pixel)
+	return kTRUE;
+  
+  return kFALSE;
+}
+
+// --------------------------------------------------------------------------
+//
+// Returns, depending on the type flag:
+//
+//  0: 1,0 if the pixel is triggered (1) or not (0)
+// 
+//
+Bool_t MMcTriggerLvl2::GetPixelContent(Double_t &val, Int_t idx, const MGeomCam &cam, Int_t type) const
+{
+  // Pixel in no-trigger region are set to 0
+  val = this->IsPixelInTrigger(idx) ?  fFiredPixel[idx]+fCompactPixel[idx] : 0;
+
+  return kTRUE;
+}
+
+void MMcTriggerLvl2::DrawPixelContent(Int_t num) const
+{
+    *fLog << "MMcTriggerLvl2::DrawPixelContent - not available." << endl;
+}
Index: trunk/MagicSoft/Mars/manalysis/MMcTriggerLvl2.h
===================================================================
--- trunk/MagicSoft/Mars/manalysis/MMcTriggerLvl2.h	(revision 3794)
+++ trunk/MagicSoft/Mars/manalysis/MMcTriggerLvl2.h	(revision 3795)
@@ -1,4 +1,8 @@
 #ifndef MARS_MMcTriggerLvl2
 #define MARS_MMcTriggerLvl2
+
+#ifndef MARS_MCamEvent
+#include "MCamEvent.h"
+#endif
 
 #ifndef MARS_MParContainer
@@ -12,5 +16,5 @@
 class MGeomPix;
 
-class MMcTriggerLvl2 : public MParContainer
+class MMcTriggerLvl2 : public MParContainer, public MCamEvent
 {
  private:
@@ -86,8 +90,13 @@
   Int_t GetTriggerPattern() const {return fTriggerPattern;}    
 
-  void GetEnergy(MMcEvt *fMcEvt = NULL);    
-  Double_t GetEnergy() const    {return fEnergy;}     
+  void GetEnergy(MMcEvt *fMcEvt = NULL);     
+  Double_t GetEnergy() const    {return fEnergy;}      
 
   Bool_t IsPixelInCell(Int_t pixel, Int_t cell);    
+  Bool_t IsPixelInTrigger(Int_t pixel) const;    
+
+  Bool_t GetPixelContent(Double_t &val, Int_t idx, const MGeomCam &cam, Int_t type=0) const;
+  void DrawPixelContent(Int_t num) const;
+
 
   ClassDef(MMcTriggerLvl2,0) // Container for 2nd Level Trigger selection parameters 
Index: trunk/MagicSoft/Mars/manalysis/MMcTriggerLvl2Calc.cc
===================================================================
--- trunk/MagicSoft/Mars/manalysis/MMcTriggerLvl2Calc.cc	(revision 3794)
+++ trunk/MagicSoft/Mars/manalysis/MMcTriggerLvl2Calc.cc	(revision 3795)
@@ -43,6 +43,7 @@
 #include "MLogManip.h"
 
-#include "MMcEvt.hxx"
+//#include "MMcEvt.hxx"
 #include "MMcTrig.hxx"
+#include "MRawRunHeader.h"
 #include "MMcRunHeader.hxx"
 
@@ -61,24 +62,50 @@
 {
   fName  = name  ? name  : "MMcTriggerLvl2Calc";
-  fTitle = title ? title : "Task to Fill the MMcTriggerLvl2 object";
+  fTitle = title ? title : "Task to Fill the MMcTriggerLvl2 object";  
+} 
+
+ // --------------------------------------------------------------------------
+//
+// Check for the run type. Return kTRUE if it is a MC run or if there
+// is no MC run header (old camera files) kFALSE in case of a different
+// run type
+//
+Bool_t MMcTriggerLvl2Calc::CheckRunType(MParList *pList) const
+{
+  const MRawRunHeader *run = (MRawRunHeader*)pList->FindObject("MRawRunHeader");
+  if (!run)
+    {
+      *fLog << warn << dbginf << "Warning - cannot check file type, MRawRunHeader not found." << endl;
+      return kTRUE;
+    }
   
-} 
-
-
-// --------------------------------------------------------------------------
-//                                                                         
-//  PreProcess
-//
-//
-Int_t MMcTriggerLvl2Calc::PreProcess (MParList *pList)
-{
-    // connect the raw data with this task
-
+  return run->IsMonteCarloRun();
+}
+
+// --------------------------------------------------------------------------
+//
+// Check for the runtype.
+// Search for .
+//
+Bool_t MMcTriggerLvl2Calc::ReInit(MParList *pList)
+{
+    //
+    // If it is no MC file skip this function...
+    //
+    if (!CheckRunType(pList))
+    {
+        *fLog << inf << "This is no MC file... skipping." << endl;
+        return kTRUE;
+    }
+        
+    //
+    // Check all necessary containers
+    //
     fMcEvt = (MMcEvt*)pList->FindObject("MMcEvt");
-    if (!fMcEvt)
-    {
-        *fLog << err << dbginf << "MMcEvt not found... exit." << endl;
-        return kFALSE;
-    }
+     if (!fMcEvt)
+     {
+         *fLog << err << dbginf << "MMcEvt not found... exit." << endl;
+         return kFALSE;
+     }
 
     fMcTrig = (MMcTrig*)pList->FindObject("MMcTrig");
@@ -102,5 +129,20 @@
 	return kFALSE;
       }
-    fMMcTriggerLvl2 = (MMcTriggerLvl2*)pList->FindObject("MMcTriggerLvl2");
+
+    return kTRUE;
+}
+
+
+// --------------------------------------------------------------------------
+//                                                                         
+//  PreProcess
+//  Check the exxistence of the MMcTriggerLvl2 containers and the correct 
+//    setting of the fCompactNN that defines a compact pixel
+//
+Int_t MMcTriggerLvl2Calc::PreProcess (MParList *pList)
+{
+
+    //    fMMcTriggerLvl2 = (MMcTriggerLvl2*)pList->FindObject("MMcTriggerLvl2");
+    fMMcTriggerLvl2 = (MMcTriggerLvl2*)pList->FindCreateObj("MMcTriggerLvl2");
     if (!fMMcTriggerLvl2)
     {
@@ -138,5 +180,5 @@
 Int_t MMcTriggerLvl2Calc::Process()
 {
-  fMMcTriggerLvl2->GetEnergy(fMcEvt);
+  //  fMMcTriggerLvl2->GetEnergy(fMcEvt);
 
   fMMcTriggerLvl2->SetLv1(fMcTrig);
Index: trunk/MagicSoft/Mars/manalysis/MMcTriggerLvl2Calc.h
===================================================================
--- trunk/MagicSoft/Mars/manalysis/MMcTriggerLvl2Calc.h	(revision 3794)
+++ trunk/MagicSoft/Mars/manalysis/MMcTriggerLvl2Calc.h	(revision 3795)
@@ -32,4 +32,7 @@
   Int_t PostProcess();
 
+  Bool_t ReInit(MParList *pList);
+  Bool_t CheckRunType(MParList *pList) const;
+
  public:
     MMcTriggerLvl2Calc(const char *name=NULL, const char *title=NULL);   
