#!/usr/bin/perl
#-------------------------------------------------------------------------------
#Purpose     : find bad pixels in image
#Author      : Robert Greimel (greimel@uvastro.phys.uvic.ca,greimel@ing.iac.es)
#Last Change : 17-Oct-1999
#-------------------------------------------------------------------------------
###### to search local directory for modules
use FindBin 1.51 qw( $RealBin );
use lib $RealBin;
######

use PDL;
#use PDL::Lite;
#use PDL::IO::Misc;

use Scripts;

# check usage
if ($#ARGV <= 1);
  {die("usage: find_badpix.perl <dir> <datafile> [<datafile> ...]\n");}

##
# make sure directory ends with a "/"
##
$dir = $ARGV[0];
if ($dir !~ m|/$|) {$dir = $dir."/"};

##########
#read generation options
##########
%filenames=();
print "$0: reading filename configuration ... ";
&Scripts::read_filenames(\%filenames,"config.names");
print "done\n";

%options=();
print "$0: reading default options ... ";
( &Scripts::read_options(\%options,$filenames{"default_options"}) ) ? print "successful\n" : print "failed\n" ;

print "$0: reading directory specific options ... ";
( &Scripts::read_options(\%options,$dir.$filenames{"custom_options"}) ) ? print "successful\n" : print "failed\n" ;

if ($options{"directory"} eq "yes")
  {
  print "directory option is on\n";
  $dir_inout=$filenames{"dir_inout"}."/";
  if ( ! -e $dir.$dir_inout ) {mkdir $dir.$dir_inout,0755;}
  }
else
  {
  print "directory option is off\n";
  $dir_inout="";
  }

$threshold = 0.05;
$first = 1;

foreach $file ( @ARGV )
  {
  $image = rfits ($file);
  $header = $image->gethdr;

  if ( $first )
    {
    $na1 = ${$header}{"NAXIS1"};
    $na2 = ${$header}{"NAXIS2"};
    print "image dimensions: $na1 x $na2\n";

    $a1s = int($na1*0.5-5);
    $a1e = int($na1*0.5+5);
    print "sample range: $a1s-$a1e x 1-$na2\n";

    $first = 0;
    }

  $slice = ushort($image->slice(($a1s-1).':'.($a1e-1).',0:'.($na2-1)));

  $cut = oddmedover($slice);
  $max = max($cut);
  $min = min($cut);
  $signal = $min + $threshold*($max-$min);
  $cols = which($cut > $signal);
  $cols = $cols + 1;

  push @amin,$cols->min;
  push @amax,$cols->max;

  @fname = split "/",$file;
  print $fname[-1],' : min=',$min," max=",$max," signal=",$signal," scol=",$cols->min," ecol=",$cols->max,"\n";
  }

foreach $num ( @amin ) { $a += $num; }
foreach $num ( @amax ) { $b += $num; }

print join " ",(int($a/($#amin+1)+0.5)..int($b/($#amax+1)+0.5));
