#!/usr/bin/perl
#-------------------------------------------------------------------------------
#Purpose     : generates image statistics
#Author      : Robert Greimel (greimel@uvastro.phys.uvic.ca,greimel@ing.iac.es)
#Last Change : 18-Oct-1999
#-------------------------------------------------------------------------------
# recognizes : flat, bias, arc, object
########################################################################
use PDL;
use Scripts;
use POSIX;

die("usage: $0 <dir>\n") if ($#ARGV != 0);

##
# 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" ;

##########
#read data rows
##########
open IN,$dir.$filenames{"data_rows"};
while(<IN>) {$in=$_}
close IN;
chomp $in;
@default_imrow=split " ",$in;

##########
# read type file and generate statistics accordingly
##########
open STAT,">".$dir.$filenames{"stat_file"};
open TYPES,$dir.$filenames{"type_file"};
printf STAT "# filename\t\tT %-8s %-5s %-8s %-5s\n","meanB","rmsB","meanD","rmsD";
while (<TYPES>)
  {
  $file=(split)[0];
  $type=(split)[2];
  print "working on $file ...";
  print STAT "$file\t".substr($type,0,1)." ";

  #read FITS file
  $image = rfits($dir.$file);
  $header = $image->gethdr;

  $na2  = ${$header}{"NAXIS2"};

  $uimage = ushort($image->slice(""));
  $background = ushort($image->dice_axis(1,[0..$default_imrow[0]-2,$default_imrow[-1]..$na2-1]));
  $data = ushort($image->dice_axis(1,[$default_imrow[0]-1..$default_imrow[-1]-1]));
  if ( $type eq "flat"  )
    {
    ($meanB,$rmsB,$medianB,$minB,$maxB) = $background->stats;
    ($meanD,$rmsD,$medianD,$minD,$maxD) = $data->stats;
    }
  if ( $type eq "arc" )
    {
    ($meanB,$rmsB,$medianB,$minB,$maxB) = $background->stats;
    ($meanD,$rmsD,$medianD,$minD,$maxD) = $data->stats;
    }
  if ( $type eq "bias" )
    {
    ($meanB,$rmsB,$medianB,$minB,$maxB) = $uimage->stats;
    ($meanD,$rmsD,$medianD,$minD,$maxD) = (0,0,0,0,0);
    }
  if ( $type eq "object" )
    {
    ($meanB,$rmsB,$medianB,$minB,$maxB) = $background->stats;
    ($meanD,$rmsD,$medianD,$minD,$maxD) = $data->stats;
    }
  printf STAT "%8.2f %5.2f %8.2f %5.2f",$meanB,$rmsB,$meanD,$rmsD;
  print STAT "\n";
  print " done\n";
  }
close TYPES;
close STAT;
