Index: trunk/MagicSoft/Mars/Changelog
===================================================================
--- trunk/MagicSoft/Mars/Changelog	(revision 2445)
+++ trunk/MagicSoft/Mars/Changelog	(revision 2446)
@@ -1,3 +1,14 @@
                                                  -*-*- END OF LINE -*-*-
+  2003/10/30: Antonio Stamerra
+
+  * manalysis/MMcTriggerLvl2.[h,cc]
+    - Added method CalcTriggerPattern to check which x-NN compact
+      pattern the event satisfies. The variable member fTriggerPattern 
+      contains the number x (x=3,4,5,6,7). 
+    - Inline function GetTriggerPattern added.
+
+  * manalysis/MMcTriggerLvl2Calc.cc
+    - Added call to the MMcTriggerLvl2::CalcTriggerPattern in Process().
+
 
   2003/10/30: Thomas Bretz
Index: trunk/MagicSoft/Mars/manalysis/MMcTriggerLvl2.cc
===================================================================
--- trunk/MagicSoft/Mars/manalysis/MMcTriggerLvl2.cc	(revision 2445)
+++ trunk/MagicSoft/Mars/manalysis/MMcTriggerLvl2.cc	(revision 2446)
@@ -69,4 +69,6 @@
 // the standard spiral counting 
 // (Note: Pixels start to count from 1 instead of 0)
+//
+// This correspondence is valid only for MAGIC-like geometries!
 //
 const  Int_t  MMcTriggerLvl2::gsPixelsInCell[36][19] = {
@@ -123,5 +125,5 @@
 //  Default constructor
 //
-MMcTriggerLvl2::MMcTriggerLvl2(const char *name, const char *title)
+MMcTriggerLvl2::MMcTriggerLvl2(const char *name, const char *title):fCompactNN(2),fTriggerPattern(0)
 {
   fName = name ? name : ClassName();
@@ -138,4 +140,5 @@
   // create a new camera
   SetNewCamera(new MGeomCamMagic);
+
 }
 
@@ -181,5 +184,5 @@
 	    } 
 	  *fLog << endl;
-	}
+	}      
     }
   else if (str.Contains("cell", TString::kIgnoreCase)) 
@@ -201,4 +204,5 @@
       *fLog << "   - PseudoSize     = " << fPseudoSize << endl;
       *fLog << "   - BiggerCellSize = " << fSizeBiggerCell << endl;
+      *fLog << "   - TriggerPattern = " << fTriggerPattern << endl;
     }
   
@@ -755,5 +759,10 @@
 
 
-void MMcTriggerLvl2::CalcEnergy(MMcEvt *fMcEvt)
+// --------------------------------------------------------------------------
+//  
+//  The Energy has to be given by this class to the Energy-PSSize correlation 
+//   histogram (MHMcTriggerLvl2)  
+//
+void MMcTriggerLvl2::GetEnergy(MMcEvt *fMcEvt)
 {
   const MMcEvt &h = *(MMcEvt *)fMcEvt;
@@ -762,3 +771,53 @@
 
 
-
+// --------------------------------------------------------------------------
+//  
+//   Looks for a x-NN compact pattern in the whole camera
+//   We have x-NN compact pattern when a triggered pix has
+//   x-1 triggered neighbor pixels.  
+//   The variable fTriggerPattern = x is computed
+//   (x= 3,4,5,6,7)  
+//
+//   x=3   * *
+//          *        *
+//            x=4   * *
+//                   *       
+//                       * *
+//                 x=5  * * *
+//          * 
+//   x=6   * * *
+//          * *
+//               * *
+//          x=7 * * *
+//               * *
+//
+void MMcTriggerLvl2::CalcTriggerPattern(MGeomCam *geom)
+{
+  fTriggerPattern=0; //initialize
+
+  for(UInt_t pixid=0;pixid<397;pixid++)
+    {
+      // Look if the pixel is fired, otherwise continue
+      if (!fFiredPixel[pixid])
+	continue;
+      
+      const MGeomPix &pix=(*geom)[pixid];
+      
+      // Look for x-NN compact pattern
+      // If a x-NN pattern exists then a pixel must have 
+      // at least x-1 adjacent neighbors (look at patterns)
+      // For each triggered pixel the number of adjacent triggered pixels is counted.
+      //
+      int j=1;
+      for (int i=0;i<pix.GetNumNeighbors();i++)
+	if (fFiredPixel[pix.GetNeighbor(i)]==1) j++;
+	     
+      if (j > fTriggerPattern) 
+	fTriggerPattern=j;	 
+
+      if (fTriggerPattern==7) 
+	  break;	 // the 7-NN (max) pattern was found: exit  
+
+    } // next pixel
+}
+
Index: trunk/MagicSoft/Mars/manalysis/MMcTriggerLvl2.h
===================================================================
--- trunk/MagicSoft/Mars/manalysis/MMcTriggerLvl2.h	(revision 2445)
+++ trunk/MagicSoft/Mars/manalysis/MMcTriggerLvl2.h	(revision 2446)
@@ -39,4 +39,5 @@
   Double_t fEnergy;  // Energy of the shower
 
+  Int_t fTriggerPattern; // x-NN compact trigger pattern;
 
   MMcTrig *fMcTrig;
@@ -74,7 +75,10 @@
   void CalcCompactPixels(MGeomCam *fCam);
 
-  void CalcEnergy(MMcEvt *fMcEvt = NULL);
+  void GetEnergy(MMcEvt *fMcEvt = NULL);
 
   Double_t GetEnergy() const    {return fEnergy;}
+ 
+  void CalcTriggerPattern(MGeomCam *fCam);
+  Int_t GetTriggerPattern() const {return fTriggerPattern;}
 
 
Index: trunk/MagicSoft/Mars/manalysis/MMcTriggerLvl2Calc.cc
===================================================================
--- trunk/MagicSoft/Mars/manalysis/MMcTriggerLvl2Calc.cc	(revision 2445)
+++ trunk/MagicSoft/Mars/manalysis/MMcTriggerLvl2Calc.cc	(revision 2446)
@@ -95,5 +95,11 @@
         return kFALSE;
     }
-
+    // Check if fCam is a Magic geometry: only MGeomCamMagic geometry and 
+    // geometries with 577 pixels are now accepted by MMcTriggerLvl2
+    if (fCam->GetNumPixels()!= 577)
+      {
+        *fLog << dbginf << "MGeomCam has a wrong geometry; only MAGIC geometry (577 pixels) is accepted by now... aborting" <<endl;
+	return kFALSE;
+      }
     fMMcTriggerLvl2 = (MMcTriggerLvl2*)pList->FindObject("MMcTriggerLvl2");
     if (!fMMcTriggerLvl2)
@@ -132,5 +138,5 @@
 Int_t MMcTriggerLvl2Calc::Process()
 {
-  fMMcTriggerLvl2->CalcEnergy(fMcEvt);
+  fMMcTriggerLvl2->GetEnergy(fMcEvt);
 
   fMMcTriggerLvl2->SetLv1(fMcTrig);
@@ -139,4 +145,6 @@
 
   fMMcTriggerLvl2->Calc();
+
+  fMMcTriggerLvl2->CalcTriggerPattern(fCam);
 
   return kTRUE;
