find_missing_time (version 1.0)

You can also look at:
#! /usr/bin/perl
##############################################################################
#
# SYNTAX: find_missing_time inst
#
# DESCRIPTION: This utility tries to determine the cause of the discrepancy
# DESCRIPTION: between the ISAS time and the filtered event time.
#
# VERSION: 1.0
#
# HISTORY: 0.0 -> 1.0 1999-5-07
# HISTORY: Converted from ksh to perl
#
#
##############################################################################

$inst=$ARGV[0];
$inst_letter=substr$inst,0,1;
$inst_number=substr$inst,1,1;

$FTOOL  =$ENV{"FTOOL"};
$STOOL  =$ENV{"STOOL"};
$UTIL   =$ENV{"UTIL"};
$LISTS  =$ENV{"LISTS"};
$JOBPAR =$ENV{"JOBPAR"};
$PARFILE=$ENV{"PARFILE"};

$criteria="find_time_criteria${$}.tmp";
$gti="find_time_gtis${$}.tmp";

@filters=`$UTIL/any_filename filter`;

############################################################
# subroutine to add the time for a given set of criteria 
# over all filter files
###########################################################
sub sum_times {

    $time=0.0;
    foreach $filter (@filters) {

        chomp($filter);



        unlink $gti;
        system("$UTIL/setup_parfile $FTOOL/maketime.par  \\
                             infile=${filter}     \\
                             outfile=${gti}       \\
                             expr=\@$criteria     \\
                             name=NAME            \\
                             value=VALUE          \\
                             time=TIME            \\
                             start=START          \\
                             stop=STOP            \\
                             compact=no           \\
                             histkw=yes");


        system("$FTOOL/maketime >stdout.log 2>stderr.log");
        system("$UTIL/ftool_test maketime $? $0 2 stdout.log stderr.log");

        $time += `$STOOL/compute_exposure ${gti}[1]` ;

    }

    return $time;

}

# end of sum_times function
##############################


    


#######################################################
# report times already determined
#######################################################
chomp($isas_time=`$UTIL/read_parfile $JOBPAR ${inst_letter}is_isas_time `);
chomp($evt_time =`$UTIL/read_parfile $JOBPAR ${inst}evttime `);
`$UTIL/log_entry "$inst ISAS exposure=$isas_time"`;
`$UTIL/log_entry "$inst screened exposure=$evt_time"`;


###########################################
# read event file screening parameters
###########################################
chomp($ang_dist=`$UTIL/read_parfile $PARFILE ang_dist `);

#################################################
# look for missing time according to instrument
#################################################
if( $inst =~ /g[23]/ ) {
    ##################
    # GIS
    ##################

     
    ######################
    # ANG DIST
    ######################
    unlink $criteria;

    #########################################
    # modify the ANG_DIST criterion
    #########################################
    open SCREEN, "<$LISTS/gis_isas.cri";
    open CRITERIA, ">$criteria";

    while( <SCREEN> ) {

        if(/ANG_DIST/) {
            print CRITERIA "ANG_DIST>0.0 && ANG_DIST<${ang_dist}\n";
        } else {
            print CRITERIA;
        }
    }
    close SCREEN;
    close CRITERIA;

    $time=sum_times;

    `$UTIL/log_entry "$inst ISAS exposure except ANG_DIST<${ang_dist} = $time"`;

    ######################
    # RBM_CONT
    ######################
    unlink $criteria;

    #########################################
    # modify the RBM_CONT criterion
    #########################################
    open SCREEN, "<$LISTS/gis_isas.cri";
    open CRITERIA, ">$criteria";

    while( <SCREEN> ) {

        if(/RBM_CONT/) {
            print CRITERIA "RBM_CONT<100 &&\n";
        } else {
            print CRITERIA;
        }
    }
    close SCREEN;
    close CRITERIA;



    $time=sum_times;
    `$UTIL/log_entry "$inst ISAS exposure but with RBM_CONT<100 = $time"`;

    ######################
    # H02 screening
    ######################
    unlink $criteria;

    #########################################
    # add monitor count criterion
    #########################################
    open SCREEN, "<$LISTS/gis_isas.cri";
    open CRITERIA, ">$criteria";

    print CRITERIA "(G2_H0+G2_H2+G3_H0+G3_H2<45)&&\n";
    print CRITERIA "(G2_H0+G2_H2+G3_H0+G3_H2<0.45*COR**2-13*COR+125)&&\n";

    while( <SCREEN> ) { print CRITERIA; }
    close SCREEN;
    close CRITERIA;


    $time=sum_times;
    `$UTIL/log_entry "$inst ISAS exposure but with H02 criteria = $time"`;

    #############################
    # screened like event files
    #############################
    unlink $criteria;
    open CRITERIA, ">$criteria";

    print CRITERIA "(ACS==0)&&\n";
    print CRITERIA "(COR>4)&&\n";
    print CRITERIA "(ELV>5)&&\n";
    print CRITERIA "(SAA==0)&&\n";
    print CRITERIA "(G2_H0+G2_H2+G3_H0+G3_H2<45)&&\n";
    print CRITERIA "(G2_H0+G2_H2+G3_H0+G3_H2<0.45*COR**2-13*COR+125)&&\n";
    print CRITERIA "(G2_L1>0) &&\n";
    print CRITERIA "(RBM_CONT<100)&&\n";
    print CRITERIA "(ANG_DIST>0)&& (ANG_DIST<$ang_dist)\n";

    close CRITERIA;


    $time=sum_times;
    `$UTIL/log_entry "$inst total time screened like event files = $time"`;

    ###################################
    # as event files and only PH mode
    ####################################
    open CRITERIA, ">>$criteria";
    print CRITERIA "&& GIS_MODE==0\n";
    close CRITERIA;

    $time=sum_times;
    `$UTIL/log_entry "$inst total PH time screened like event files = $time"`;


} elsif ($inst =~ /s[01]/ ) {
    #################
    # SIS
    #################


    ######################
    # Saturation
    ######################
    unlink $criteria;
    open SCREEN, "<$LISTS/sis_isas.cri";
    open CRITERIA, ">$criteria";

    print CRITERIA "S${inst_number}_SATF0!=1 && S${inst_number}_SATF1!=1 &&\n";
    print CRITERIA "S${inst_number}_SATF2!=1 && S${inst_number}_SATF3!=1 &&\n";

    while( <SCREEN> ) {  print CRITERIA;  }
    close SCREEN;
    close CRITERIA;


    $time=sum_times;
    `$UTIL/log_entry "$inst unsaturated ISAS exposure = $time"`;


    ######################
    # ANG_DIST
    ######################
    unlink $criteria;
    open SCREEN, "<$LISTS/sis_isas.cri";
    open CRITERIA, ">$criteria";

    print CRITERIA "S${inst_number}_SATF0!=1 && S${inst_number}_SATF1!=1 &&\n";
    print CRITERIA "S${inst_number}_SATF2!=1 && S${inst_number}_SATF3!=1 &&\n";

    while( <SCREEN> ) {  
        if( /ANG_DIST/ ) {
             print CRITERIA "ANG_DIST>0.0 && ANG_DIST<${ang_dist} &&\n";
        } else {
            printf CRITERIA;
        }
    }
    close SCREEN;
    close CRITERIA;


    $time=sum_times;
    `$UTIL/log_entry \\
                "$inst unsaturated ISAS exp with ANG_DIST<$ang_dist = $time"`;

    ############################
    # Roughly like Event files
    ############################
    chomp($cor     =`$UTIL/read_parfile $PARFILE cor     `);
    chomp($elv     =`$UTIL/read_parfile $PARFILE elv     `);
    chomp($br_earth=`$UTIL/read_parfile $PARFILE br_earth`);

    unlink $criteria;
    open CRITERIA, ">$criteria";
    print CRITERIA "ACS==0 &&\n";
    print CRITERIA "COR>$cor &&\n";
    print CRITERIA "ELV>$elv &&\n";
    print CRITERIA "BR_EARTH>$br_earth &&\n";
    print CRITERIA "SAA==0 &&\n";
    print CRITERIA "ANG_DIST>0 && ANG_DIST<$ang_dist &&\n";
    print CRITERIA "S${inst_number}_SATF0!=1 && S${inst_number}_SATF1!=1 &&\n";
    print CRITERIA "S${inst_number}_SATF2!=1 && S${inst_number}_SATF3!=1 &&\n";
    print CRITERIA "(S${inst_number}_PIXL0>0. || S${inst_number}_PIXL1>0. ||\n";
    print CRITERIA " S${inst_number}_PIXL2>0. || S${inst_number}_PIXL3>0.)\n";

    close CRITERIA;


    $time=sum_times;
    `$UTIL/log_entry \\
                  "$inst exposure screened roughly like event files = $time"`;

    ##################################
    # High PIXL values
    ###################################
    open CRITERIA, ">>$criteria";
    print CRITERIA "&& S${inst_number}_PIXL0<1000 && \n";
    print CRITERIA "   S${inst_number}_PIXL1<1000 &&\n";
    print CRITERIA "   S${inst_number}_PIXL2<1000 &&\n";
    print CRITERIA "   S${inst_number}_PIXL3<1000\n";

    $time=sum_times;
    `$UTIL/log_entry \\
            "$inst exp like evt files and S${inst_num}_PIXLm<1000 = $time"`;


}

unlink $criteria;
unlink $gti;