Index: /trunk/Ohana/src/perl/src/mosaic.stats
===================================================================
--- /trunk/Ohana/src/perl/src/mosaic.stats	(revision 120)
+++ /trunk/Ohana/src/perl/src/mosaic.stats	(revision 121)
@@ -10,5 +10,6 @@
 # confusion on a second pass
 
-@ccds = split (" ", `cameraconfig -ccdn`);
+@ccdn = split (" ", `cameraconfig -ccdn`);
+@ccds = split (" ", `cameraconfig -ccds`);
 if ($?) { die "ERROR: configuration problem\n"; }
 
@@ -27,6 +28,27 @@
 $type = "\U$ARGV[2]\E";
 
+# load option list of ccds to skip (specific to run/camera)
+$CHIPSKIP     = `gconfig CHIP_SKIP_LIST`; chop $CHIPSKIP;
+@chipskip = ();
+if (-e $CHIPSKIP) { 
+    open (FILE, $CHIPSKIP);
+    @chipskip = <FILE>;
+    close (FILE);
+    foreach $chip (@chipskip) { chop $chip; }
+}
+
+# modify the list of ccds to exclude chipskip entries
+$N = @ccds;
+CCD: for ($i = 0; $i < $N; $i++) {
+    $ccds = shift @ccds;
+    $ccdn = shift @ccdn;
+
+    foreach $skip (@chipskip) { if ($skip eq $ccds) { next CCD; } }
+    push @ccds, $ccds;
+    push @ccdn, $ccdn;
+}
+
 # check for the existence of each input file, exit if non-existent
-foreach $ccd (@ccds) {
+foreach $ccd (@ccdn) {
     $name = $ARGV[0];
     $name =~ s/CCDNUM/$ccd/;
@@ -38,5 +60,6 @@
 
 # load in stats from files (Nlist*Nccd entries)
-foreach $ccd (@ccds) {
+# each file contains stats for a single ccd, for all N files
+foreach $ccd (@ccdn) {
     $name = $ARGV[0];
     $name =~ s/CCDNUM/$ccd/;
@@ -46,7 +69,5 @@
     close (FILE);
 
-    if ($ccd eq $ccds[0]) {
-	$Nline = @$ccd;
-    } 
+    if ($ccd eq $ccdn[0]) { $Nline = @$ccd; }
     if (@$ccd != $Nline) { die "ERROR mis-matched file lengths\n"; }
 }    
@@ -71,5 +92,5 @@
     $mbin2 = 0;
 
-    foreach $ccd (@ccds) {
+    foreach $ccd (@ccdn) {
 	$line = $$ccd[$i];
 	chop ($line);
@@ -89,5 +110,5 @@
 	$mbin2 += $words[7]*$words[7];
     }
-    $N = @ccds;
+    $N = @ccdn;
 
     # identify even or morn twilight
