Index: trunk/Mars/macros/fact/underflow.C
===================================================================
--- trunk/Mars/macros/fact/underflow.C	(revision 16892)
+++ trunk/Mars/macros/fact/underflow.C	(revision 16892)
@@ -0,0 +1,60 @@
+int underflow(const char *filename="/raid10/raw/2013/06/21/20130621_062.fits", const char *outname="underflow-check.root")
+{
+    // The input file must be a drs-gain file
+    // The return value is
+    //  0) Success
+    //  1) Underflow detected
+    //  3) Event loop stopped
+    //  4) Display closed
+    // ======================================================
+
+    gLog.Separator("Underflow check");
+
+    // ------------------------------------------------------
+
+    MStatusDisplay *d = new MStatusDisplay;
+
+    MParList plist;
+
+    MTaskList tlist;
+    plist.AddToList(&tlist);
+
+    MEvtLoop loop;
+    loop.SetParList(&plist);
+    loop.SetDisplay(d);
+
+    // --------------------------------------------------------
+
+    MRawFitsRead read1(filename);
+
+    MGeomApply apply;
+
+    tlist.AddToList(&read1);
+    tlist.AddToList(&apply);
+
+    MHDrsCalibration hcalib;
+
+    MFillH fill(&hcalib);
+    fill.SetNameTab("Check");
+
+    tlist.AddToList(&fill);
+
+    if (!loop.Eventloop())
+        return 3;
+
+    if (!loop.GetDisplay())
+        return 4;
+
+    // --------------------------------------------------------
+
+    TString title = "--  Underflow check ";
+    title += " (";
+    title += filename;
+    title += ")  --";
+    d->SetTitle(title, kFALSE);
+    d->SaveAs(outname);
+
+    // --------------------------------------------------------
+
+    return hcalib.GetNumUnderflows(1.3)>0 ? 1 : 0;
+}
