#!/usr/bin/perl

# Convert individual IMACS chip files into a single multi-extension
# FITS (MEF) file.

# History
#  08mar05  DSNR  created

use Getopt::Long;

if ($#ARGV lt 0) {die "v1.0  DSNR  12mar2008\n\nUsage: imacsmef File [--list=FileList]\n\nFile is the image base name, minus the chip ID and .fits extension (e.g., ccd0001).\n\nThe optional FileList is a list of base names, one per line, on which to perform the conversion.  If the --list=FileList option is triggered, the File argument is ignored.\n\n"}

# Get optional arguments.
$list = '';
GetOptions ('list=s' => \$list);

# Proper DETSEC keyword values for each chip.
@detsec = ("[1:2048,1:4096]",
	   "[2049:4096,1:4096]",
	   "[4097:6144,1:4096]",
	   "[6145:8192,1:4096]",
	   "[4096:2049,8192:4097]",
	   "[2048:1,8192:4097]",
	   "[8192:6145,8192:4097]",
	   "[6144:4097,8192:4097]");

# Get file base names
$files[0]=$ARGV[0];
if ($list ne '') {
    open IN, $list;
    chomp(@files = <IN>);
    close IN;
}

# Cycle thru files
@out = ();
foreach (@files) {
    # Check for existing MEF files
    if (-e "$_.fits") {
	print "IMACSMEF: This script will delete the old $_.fits first.\n";
	push @out, "imdel $_.fits\n";
    }
    $goodfile = 1;
    @outtmp = ();
    $i = 0;
    # Cycle thru chips
    while ($goodfile && $i le 7) {
	$i = $i + 1;
	$cfile = $_ . "c$i";
	# Make sure individual chip files exist.
	unless (-e "$cfile.fits") {
	    print "IMACSMEF: $cfile.fits does not exist; ignoring this base name.\n";
	    $goodfile = 0;
	}
	# Write IRAF commands
	push @outtmp, "hedit $cfile DETSEC $detsec[$i-1] add+ verify-\n";
	push @outtmp, "imcopy $cfile $_\[chip$i";
	if ($i ne 1) {push @outtmp, ",append\]\n"} else {push @outtmp, "\]\n"}
	push @outtmp, "hedit $_\[chip$i\] IMAGEID $i add+ verify-\n";
    }
    if ($goodfile) {push @out, @outtmp}
}

# Write IRAF script
if ($#files ne 0) {$outfile = "imacsmef_$list.cl"} else {$outfile = "imacsmef_$files[0].cl"}
open OUT, ">$outfile";
print OUT @out;
close OUT;

print "\nNow run the script in IRAF:\ncl> cl < $outfile\n\n";
