#!/usr/bin/perl -w
#
# ut_xrtgrblc
#
# Modification History:
#
#       2007-11-20: V0.1 initial version, adapted from ut_xrtmkarf
#
use strict;
use lib ".";
use ut_xrtobj;

# main
{
    # Object Istances
    my $ut = ut_xrtobj->new(
			    name    => "aepipeline",
			    utname  => "ut_aepipeline",
			    version => "1.0",
			   );
    
    # Set Parameters
    my $input   = $ut->getParam( "input_dir" );
    my $output  = $ut->getParam( "output_dir" ) . "/" . $ut->getParam( "utname" );
    my $chat    = $ut->getParam( "chatter" );
    my $clobber = $ut->getParam( "clobber" );

    # I/O Directory Check
    $ut->checkIODirectory( )
    if $ut->isValid;

    # Environment check
    my @chk_env = ( "LHEASOFT", "HEADAS", "CALDB" );
 
    $ut->checkEnvironment( @chk_env )
    if $ut->isValid;
    
    my $ArchDir = "ut_aepipeline";
    
    # Input Files Check
    my @chk_inp = ( 
		   "$input/$ArchDir/input/ae502063120.hk.gz",
		   "$input/$ArchDir/input/ae502063120.att.gz",
		   "$input/$ArchDir/input/ae502063120.orb.gz",
		   "$input/$ArchDir/input/ae502063120.ehk.gz",
		   "$input/$ArchDir/input/ae502063120.mkf.gz",
		   "$input/$ArchDir/input/ae502063120.tim.gz",
		   "$input/$ArchDir/input/ae502063120xi1_0_tel_uf.gti.gz",
		   "$input/$ArchDir/input/ae502063120xi0_0_conf_uf.gti.gz",
		   "$input/$ArchDir/input/ae502063120xi3_0_tel_uf.gti.gz",
		   "$input/$ArchDir/input/ae502063120xi3_0.hk.gz",
		   "$input/$ArchDir/input/ae502063120xi3_0_conf_uf.gti.gz",
		   "$input/$ArchDir/input/ae502063120xi0_0_tel_uf.gti.gz",
		   "$input/$ArchDir/input/ae502063120xi0_0.hk.gz",
		   "$input/$ArchDir/input/ae502063120xi1_0.hk.gz",
		   "$input/$ArchDir/input/ae502063120xi1_0_conf_uf.gti.gz",
		   "$input/$ArchDir/input/ae502063120xi0_0_3x3n066z_uf.evt.gz",
		   "$input/$ArchDir/input/ae502063120xi3_0_3x3n066z_uf.evt.gz",
		   "$input/$ArchDir/input/ae502063120xi1_0_3x3n069z_uf.evt.gz",
		   "$input/$ArchDir/input/ae502063120hxd_0_tel_uf.gti.gz",
		   "$input/$ArchDir/input/ae502063120hxd_0.hk.gz",
		   "$input/$ArchDir/input/ae502063120hxd_0_wel_uf.gti.gz",
		   "$input/$ArchDir/input/ae502063120hxd_0_wel_uf.evt.gz"
		  );

    $ut->checkExist( "Input", @chk_inp )
    if $ut->isValid;
    
    # Prototype Check ( Prototype = known valid output)

    my @prototype_files = ("$input/$ArchDir/prototypes/ae502063120hxd_0_gsono_cl.evt.gz",
			   "$input/$ArchDir/prototypes/ae502063120hxd_0_pinno_cl.evt.gz",
			   "$input/$ArchDir/prototypes/ae502063120hxd_0_pse_cl.evt.gz",
			   "$input/$ArchDir/prototypes/ae502063120hxd_0_tel_uf.gti.gz",
			   "$input/$ArchDir/prototypes/ae502063120hxd_0_wel_uf.evt.gz",
			   "$input/$ArchDir/prototypes/ae502063120xi0_0_3x3n066a_cl.evt.gz",
			   "$input/$ArchDir/prototypes/ae502063120xi0_0_3x3n066z_uf.evt.gz",
			   "$input/$ArchDir/prototypes/ae502063120xi0_0_conf_uf.gti.gz",
			   "$input/$ArchDir/prototypes/ae502063120xi0_0_tel_uf.gti.gz",
			   "$input/$ArchDir/prototypes/ae502063120xi1_0_3x3n069b_cl.evt.gz",
			   "$input/$ArchDir/prototypes/ae502063120xi1_0_3x3n069z_uf.evt.gz",
			   "$input/$ArchDir/prototypes/ae502063120xi1_0_conf_uf.gti.gz",
			   "$input/$ArchDir/prototypes/ae502063120xi1_0_tel_uf.gti.gz",
			   "$input/$ArchDir/prototypes/ae502063120xi3_0_3x3n066a_cl.evt.gz",
			   "$input/$ArchDir/prototypes/ae502063120xi3_0_3x3n066z_uf.evt.gz",
			   "$input/$ArchDir/prototypes/ae502063120xi3_0_conf_uf.gti.gz",
			   "$input/$ArchDir/prototypes/ae502063120xi3_0_tel_uf.gti.gz");

    $ut->checkExist( "Prototype", @prototype_files)
    if $ut->isValid;

    my @output_files = ("$output/ae502063120hxd_0_gsono_cl.evt",
			"$output/ae502063120hxd_0_pinno_cl.evt",
			"$output/ae502063120hxd_0_pse_cl.evt",
			"$output/ae502063120hxd_0_tel_uf.gti",
			"$output/ae502063120hxd_0_wel_uf.evt",
			"$output/ae502063120xi0_0_3x3n066a_cl.evt",
			"$output/ae502063120xi0_0_3x3n066z_uf.evt",
			"$output/ae502063120xi0_0_conf_uf.gti",
			"$output/ae502063120xi0_0_tel_uf.gti",
			"$output/ae502063120xi1_0_3x3n069b_cl.evt",
			"$output/ae502063120xi1_0_3x3n069z_uf.evt",
			"$output/ae502063120xi1_0_conf_uf.gti",
			"$output/ae502063120xi1_0_tel_uf.gti",
			"$output/ae502063120xi3_0_3x3n066a_cl.evt",
			"$output/ae502063120xi3_0_3x3n066z_uf.evt",
			"$output/ae502063120xi3_0_conf_uf.gti",
			"$output/ae502063120xi3_0_tel_uf.gti");


    # Executables Files Check
    my @chk_exe = ( "aepipeline.pl", "ftdiff", "fverify", "pquery2" );
    $ut->checkExecutable( @chk_exe )
    if $ut->isValid;

    # Task Files Check

    my %par_task = (
		    indir             => "$input/$ArchDir/input", 
		    outdir            => $output, 
		    steminputs        => "ae502063120", 
		    entry_stage       => 1, 
		    exit_stage        => 2, 
		    instrument        => "ALL",
                    report            => "no",
		    clobber           => "yes", 
		    remove_temp_files => "yes",
                    xisconflist       => './aexisconf.list'
		   );

    $ut->runTask( %par_task )
    if $ut->isValid;
        
    if ( $ut->isValid ) {
	
	# fverify

        foreach my $test_output_file ( @output_files ) {
            $ut->fverify( $test_output_file );
        }
	
	# ftdiff

        foreach my $list ( map( [ $prototype_files[$_] , $output_files[$_] ] , 0..$#prototype_files  ) ) {
            $ut->ftdiff( @$list );
        }
    }    

    $ut->delete( );
}
