Index: trunk/MagicSoft/Mars/Changelog
===================================================================
--- trunk/MagicSoft/Mars/Changelog	(revision 7977)
+++ trunk/MagicSoft/Mars/Changelog	(revision 7978)
@@ -18,4 +18,12 @@
 
                                                  -*-*- END OF LINE -*-*-
+
+ 2006/09/28 Thomas Bretz
+
+   * mfilter/MFMagicCuts.[h,cc]:
+     - implemented a hadronness cut as an option
+     - updated class reference
+
+
 
  2006/09/27 Daniela Dorner
Index: trunk/MagicSoft/Mars/NEWS
===================================================================
--- trunk/MagicSoft/Mars/NEWS	(revision 7977)
+++ trunk/MagicSoft/Mars/NEWS	(revision 7978)
@@ -114,5 +114,11 @@
      with the colz draw-option
 
-   - ganymed: now pruduces valid error codes if failed
+   - ganymed: now produces valid error codes if failed
+
+   - ganymed: MFMagicCuts now supports a hadronness cut. Switch it on
+     with the option "hadronness" instead of "area" or "both" if
+     you want to use both cuts. The hadronness cut includes a fixed
+     cut in hadronness (index 8) and a fixed cut in size (index 9).
+
 
 
Index: trunk/MagicSoft/Mars/mfilter/MFMagicCuts.cc
===================================================================
--- trunk/MagicSoft/Mars/mfilter/MFMagicCuts.cc	(revision 7977)
+++ trunk/MagicSoft/Mars/mfilter/MFMagicCuts.cc	(revision 7978)
@@ -29,7 +29,16 @@
 //  Predefinitions:
 //  ---------------
-//
-//      m3long     = MHillasExt.fM3Long*sign(MHillasSrc.fCosDeltaAlpha)*fMM2Deg
-//      antim3long = MHillasExt.fM3Long*sign(MHillasSrcAnti.fCosDeltaAlpha)*fMM2Deg
+//      width/length = MHillas.fWidth/MHillas.fLength
+//      area         = MHillas.GetArea*fMm2Deg*fMm2Deg
+//      lgsize       = log10(MHillas.fSize)
+//
+//      alpha        = MHillasSrc.fAlpha
+//      dist         = MHillasSrc.fDist*fMm2Deg
+//      leakage1     = log10(MNewImagePar.fLeakage1+1)
+//
+//      m3long       = MHillasExt.fM3Long*sign(MHillasSrc.fCosDeltaAlpha)*fMm2Deg
+//      antim3long   = MHillasExt.fM3Long*sign(MHillasSrcAnti.fCosDeltaAlpha)*fMm2Deg
+//
+//      had          = Hadronness.fVal
 //
 //  Coefficients/Cuts:
@@ -37,5 +46,5 @@
 //
 //    c[0], c[5], c[6], c[7]:
-//          xi          = c[0]+c[6]*pow(Leakage1, c[7]);
+//          xi          = c[0]+c[6]*pow(leakage1, c[7]);
 //          p           = xi*(1-width/length);
 //          disp        = TMath::Sign(disp, m3long-c[5])
@@ -47,7 +56,13 @@
 //          thetasq < c[1]*c[1]
 //
+//    AreaCut:
 //    c[2], c[3], c[4]:
 //          A = c[2]*(1 - c[4]*(lgsize-c[3])*(lgsize-c[3]))
 //          area < A
+//
+//    HadronnessCut:
+//    c[8], c[9]:
+//          had       <= c[8]
+//          10^lgsize >= c[9]
 //
 //
@@ -113,6 +128,6 @@
 MFMagicCuts::MFMagicCuts(const char *name, const char *title)
     : fHil(0), fHilSrc(0), fHilAnti(0), fHilExt(0), fNewImgPar(0),
-    fThetaSq(0), fDisp(0), fMatrix(0), fVariables(30), fThetaCut(kNone),
-    fHadronnessCut(kAll)
+    fThetaSq(0), fDisp(0), fHadronness(0), fMatrix(0), fVariables(30),
+    fThetaCut(kNone), fHadronnessCut(kArea)
 {
     fName  = name  ? name  : "MFMagicCuts";
@@ -129,5 +144,6 @@
     AddToBranchList("MHillasExt.fM3Long");
     AddToBranchList("MNewImagePar.fLeakage1");
-
+    AddToBranchList("Hadronness.fVal");
+/*
     fVariables[0] =  1.42547;      // Xi
     fVariables[1] =  0.233773;     // Theta^2
@@ -137,4 +153,6 @@
     fVariables[5] = -0.0889;       // M3long
     fVariables[6] =  0.18;         // Xi(theta)
+    fVariables[7] =  0.18;         // Xi(theta)
+    */
 }
 
@@ -214,4 +232,14 @@
     }
 
+    if (fHadronnessCut&kHadronness)
+    {
+        fHadronness = (MParameterD*)pList->FindObject("Hadronness", "MParameterD");
+        if (!fHadronness)
+        {
+            *fLog << warn << "Hadronness [MParameterD] not found... aborting." << endl;
+            return kFALSE;
+        }
+    }
+
     return kTRUE;
 }
@@ -258,4 +286,7 @@
         fMap[kEDistAnti]   = fMatrix->AddColumn("MHillasSrcAnti.fDist*MGeomCam.fConvMm2Deg");
     }
+
+    if (fHadronnessCut&kHadronness)
+        fMap[kEHadronness] = fMatrix->AddColumn("Hadronness.fVal");
 }
 
@@ -294,5 +325,4 @@
     const Double_t wdivl  = fMatrix ? GetVal(kEWdivL)   : fHil->GetWidth()/fHil->GetLength();
     const Double_t lgsize = fMatrix ? GetVal(kESize)    : TMath::Log10(fHil->GetSize());
-    //const Double_t zd     = fMatrix ? GetVal(kEZd)      : fPointing->GetZdRad();
     const Double_t leak   = fMatrix ? GetVal(kELeakage) : TMath::Log10(fNewImgPar->GetLeakage1()+1);
 
@@ -337,8 +367,17 @@
         if (area>=A)
             return kTRUE;
-
-        //const Double_t m3t  = fMatrix ? GetVal(kEM3Trans) : TMath::Abs(fHilExt->GetM3Trans())*fMm2Deg;
-        //if (m3t>c[8])
-        //    return kTRUE;
+    }
+
+    // ---------------------------------------------------------------
+    // ---------------------------------------------------------------
+
+    if (fHadronnessCut&kHadronness)
+    {
+        const Double_t had = fMatrix ? GetVal(kEHadronness) : fHadronness->GetVal();
+        if (had>c[8])
+            return kTRUE;
+
+        if (TMath::Power(10, lgsize)<c[9])
+            return kTRUE;
     }
 
@@ -408,7 +447,10 @@
         *fLog << "none" << endl;
         break;
-    //case kArea:
-    //    *fLog << "area" << endl;
-    //    break;
+    case kArea:
+        *fLog << "area" << endl;
+        break;
+    case kHadronness:
+        *fLog << "hadronness" << endl;
+        break;
     case kAll:
         *fLog << "all" << endl;
@@ -499,4 +541,6 @@
         if (str==(TString)"area")
             fHadronnessCut = kArea;
+        if (str==(TString)"hadronness")
+            fHadronnessCut = kHadronness;
         if (str==(TString)"all")
             fHadronnessCut = kAll;
Index: trunk/MagicSoft/Mars/mfilter/MFMagicCuts.h
===================================================================
--- trunk/MagicSoft/Mars/mfilter/MFMagicCuts.h	(revision 7977)
+++ trunk/MagicSoft/Mars/mfilter/MFMagicCuts.h	(revision 7978)
@@ -32,7 +32,8 @@
     // Possible kind of hadronness cuts
     enum HadronnessCut_t {
-        kNoCut =BIT(0),
-        kArea  =BIT(1),
-        kAll   =kArea
+        kNoCut     =BIT(0),
+        kArea      =BIT(1),
+        kHadronness=BIT(2),
+        kAll       =kArea|kHadronness
     };
 
@@ -41,7 +42,7 @@
     // the last on in the list. It is used as counter for fMap.
     enum {
-        kESize, kEAlpha, kEAlphaAnti, kEArea, kEDist, kEM3Long,
-        kEM3LongAnti, kEM3Trans, kEDistAnti, kEWdivL, //kEZd,
-        kELeakage, kESrcSign, //kEDelta, //kEMeanX, kEMeanY, kEDelta,
+        kESize, kEAlpha, kEAlphaAnti, kEArea, kEDist,
+        kEM3Long, kEM3LongAnti, kEM3Trans, kEDistAnti, kEWdivL,
+        kELeakage, kESrcSign, kEHadronness,
         kLastElement
     };
@@ -54,4 +55,5 @@
     MParameterD    *fThetaSq;           //! Pointer to MParameterD container called ThetaSq
     MParameterD    *fDisp;              //! Pointer to MParameterD container called Disp
+    MParameterD    *fHadronness;        //! Pointer to MParameterD container called Hadronness
 
     Float_t         fMm2Deg;            //! Conversion factor from mm to deg, from MGeomCam
