Index: /trunk/Ohana/src/perl/src/mkfringe
===================================================================
--- /trunk/Ohana/src/perl/src/mkfringe	(revision 115)
+++ /trunk/Ohana/src/perl/src/mkfringe	(revision 116)
@@ -289,51 +289,74 @@
     if ((@ARGV != 1) && (@ARGV != 2)) { &escape ("USAGE: $MKFRINGE cleanup [mode]"); }
 
-    $DEBUG = 0;
-    $mode = "partial";
-
-    if (@ARGV == 2) {
-	$mode = $ARGV[1];
-    }
-    if (($mode ne "partial") && ($mode ne "total") && ($mode ne "test1") && ($mode ne "test2")) {
-	&escape ("invalid cleanup mode $mode: use 'partial', 'total', 'test1', 'test2'");
-    }
-    if ($mode eq "test1") { $mode = partial; $DEBUG = 1; }
-    if ($mode eq "test2") { $mode = total; $DEBUG = 1; }
-
-    # partial: fringe/*.fr.fits, fringe/*.sm.fits, proc/*.tenbin, proc/*.medbin
-    # total: fringe/*.fr.fits, fringe/*.sm.fits, proc/*
-
-    $fringe = mkfiles ("fringe");
-    $proc   = mkfiles ("proc");
-
-    if ($mode eq "partial") {
-	@dlist = ("$fringe/*.fr.fits", "$fringe/*.sm.fits", "$proc/*.tenbin", "$proc/*.medbin");
-    } else {
-	@dlist = ("$fringe/*.fr.fits", "$fringe/*.sm.fits", "$proc/*");
-    }
-
-    @list = ();
-    foreach $name (@dlist) {
-	@list1 = glob ($name);
-	@list = (@list, @list1);
-    }
-
-    @flist = ();
-    foreach $name (@list) {
-	if ($DEBUG) {
-	    print STDOUT "$name\n";
-	} else {
-	    if (system ("rm -f $name")) {
-		@flist = (@flist, $name);
+    @list = load_config ();
+
+    $detdir = mkfiles ("detdir");
+    open (CF, ">$detdir/clean.fail");
+
+    $Nmiss = 0;
+    $Nfail = 0;
+    $Ngood = 0;
+
+    $mode = "partial"; 
+    if (@ARGV == 2) { $mode = $ARGV[1]; }
+
+    if (($mode ne "partial") && ($mode ne "total")) { &escape ("invalid cleanup mode $mode: use 'partial' or 'total'"); }
+
+    foreach $confline (@list) {
+	$status = gtconfig ($confline, "status");
+	if ($status ne "done") { next; }
+
+	print STDERR "deleting files from $confline\n";
+	$confline = stconfig ($confline, "status", "running.clean");
+	save_config (@list);
+
+	foreach $ccd (@ccds) { 
+	    @dlist = ();
+
+	    # delete these specific files:
+	    push @dlist, &mknames ("frfile", $confline, $ccd); 
+	    push @dlist, &mknames ("smfile", $confline, $ccd); 
+
+	    # delete file, if it exists
+	    foreach $file (@dlist) { 
+		if (! -e $file) { $Nmiss ++; next; }
+		if (!unlink $file) { $Nfail ++; print CF "$file\n"; next; }
+		$Ngood ++;
 	    }
 	}
-    }
-
-    if (@flist) {
-	print STDERR "files which could not be deleted:\n";
-	foreach $name (@flist) {
-	    print STDERR "$name\n";
-	}
-    }
+
+	# delete final MEF image
+	@dlist = ();
+	push @dlist, &mknames ("mef", $confline); 
+
+	# delete proc defringe, medbin images
+	$name = &mknames ("detrend", $confline);
+	open (FILE, $name);
+	@deflist = <FILE>;
+	close (FILE);
+
+	$proc = &mkfiles ("proc");
+	foreach $line (@deflist) {
+	    ($tmp, $root) = split (" ", $line);
+	    push @dlist, <$proc/$root.med/*.fits>;
+	    push @dlist, <$proc/$root.def/*.fits>;
+	}	    
+
+	# delete file, if it exists
+	foreach $file (@dlist) { 
+	    if (! -e $file) { $Nmiss ++; next; }
+	    if (!unlink $file) { $Nfail ++; print CF "$file\n"; next; }
+	    $Ngood ++;
+	}
+
+	$confline = stconfig ($confline, "status", "clean");
+	save_config (@list);
+    }
+    close (CF);
+
+    print STDERR "$Ngood files deleted\n";
+    print STDERR "$Nmiss files already removed\n";
+    print STDERR "$Nfail files not deleted, see '$detdir/clean.fail'\n";
+
     &goodbye;
 }
@@ -2223,4 +2246,10 @@
 	    last;
 	}
+	# raw fringe image
+	if ($type eq "frfile") {
+	    $dir = mkfiles ("fringe");
+	    $value = sprintf "$dir/$words[0].$words[1].$words[2].$ccd.$words[3].fr.fits";
+	    last;
+	}
 	# master list of input images
 	if ($type eq "master") {
