#!/usr/bin/perl
#-------------------------------------------------------------------------------
#Purpose     : determine statistics of a raw frames
#Author      : Robert Greimel (rgreimel@mail.com)
#Last Change : 20-Feb-2000
#-------------------------------------------------------------------------------
###### to search local directory for modules
use FindBin 1.51 qw( $RealBin );
use lib $RealBin;
######

use Scripts;
use PDL;

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

##########
# open output file
##########
open STAT,">".$dir.$filenames{"stat_file"};
printf STAT "# filename\t\t%-8s %7s %5s %3s %3s %8s %7s %s\n","meanI","rmsI","maxI","sc","ec","meanD","rmsD","saturated";

##########
# loop over raw data files and generate statistics
##########
opendir DIR,$dir."rawdat";
foreach $file ( grep /c.+_.+.[0-9]+/, readdir DIR )
  {
  $dfile = $dir."rawdat/".$file;

  print "working on $file ...";
  print STAT "rawdat/$file\t";

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

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

  # clear values (B=background, D=data, I=image)
  ($meanB,$rmsB,$medianB,$minB,$maxB) = (0,0,0,0,0);
  ($meanD,$rmsD,$medianD,$minD,$maxD) = (0,0,0,0,0);
  ($meanI,$rmsI,$medianI,$minI,$maxI) = (0,0,0,0,0);

  # find statistics for the complete image
  $uimage = ushort($image->slice(""));
  ($meanI,$rmsI,$medianI,$minI,$maxI) = $uimage->stats;
  printf STAT "%8.2f %7.2f %5d",$meanI,$rmsI,$maxI;

  # find range of data rows
  @in = qx"find_location $dfile";
  $in[-2] =~ m/scol=([0-9]+) ecol=([0-9]+)$/;
  $scol = $1;
  $ecol = $2;
  printf STAT " %3d %3d",$scol,$ecol;

  # find statistics for data region
  if ( $scol != 1 && $ecol != $na2 )
    {
    $data = ushort($image->dice_axis(1,[$scol-1..$ecol-1]));
    ($meanD,$rmsD,$medianD,$minD,$maxD) = $data->stats;
    }
  else
    {
    ($meanD,$rmsD,$medianD,$minD,$maxD) = ($meanI,$rmsI,$medianI,$minI,$maxI);
    }
  printf STAT " %8.2f %7.2f",$meanD,$rmsD;

  # find saturated columns
  @s = ();
  if ( $scol != 1 && $ecol != $na2 )
    {
    for ($i=$scol; $i <= $ecol; $i++)
      {
      $j = $i-1;
      $col = ushort( $image->slice(",($j)") );
      @num = which( $col == 65535 );
      if ($#num > 10) {push @s,$i;}
      }
    }

  # print saturated columns
  if ( $#s >= 0 )
    {
    print STAT join ",",@s;
    }

  print STAT "\n";
  print " done\n";
  }

closedir DIR;
close STAT;
