#! /usr/local/bin/perl # # GetEAST- cron script to get Eastside Reservior # raw data, rinex it, and put it in the pushed area. # # to do: set up crontab, add daycheck code (or check # whether one of the two sites' files are on archive) # Roelle: do not add daycheck code # Paul F. Jamason 4/99: changed to run for all days # in /push/eastside dir instead user-supplied or current # day use strict; use DateTime::Precise; use Net::FTP; my $i; my $end_of_hdr_indicator; my $line; # file name/list variables my @raw_file_list; my @raw_file_doy_list; my @output_obs_file_list; my @output_nav_file_list; my @site_name_list = ("ESRE", "ESRW"); my $site_name; my $lc_site_name; my $final_obs_file_name; my $final_nav_file_name; my $prev_raw_file_doy; my $raw_file_doy; my $raw_file_yr; my $raw_file_name; my $raw_file_element; my $remote_file_name; my $obs_file_name; my $nav_file_name; my $cat_string; my $delete_obs_file_name; my $nav_file_count; # local directories my $RECEIVE_PUSH_DIR = "/push/eastside"; my $RAW_PUSH_DIR = "/push/raw"; my $RINEX_PUSH_DIR = "/push/rinex"; my $WORKING_DIR = "/holding/remote/esr"; my $TEQC_EXEC = "/usr/local/archive/bin/teqc"; # executable programs my $RUNPKR = "/usr/local/archive/bin/runpkr00 -deimv"; # log files my $RUNPKR_LOG_FILE = "runpkr00.log"; my $ESRE_OBS_CFG_FILE = "esre_obs.cfg"; my $ESRW_OBS_CFG_FILE = "esrw_obs.cfg"; my $ESR_NAV_CFG_FILE = "esr_nav.cfg"; # check time - five hour total download should be complete by now # run cron at UT 6,10,14,18,22 - # local is 22, 2, 6, 10, 14, 18 my $dt; $dt = DateTime::Precise->new(); my $gmtNow = $dt->stringify(); print "GetEAST: running $gmtNow\n"; my $current_doy = $dt->strftime("%j"); my $current_yr = $dt->year(); print "GetEAST: getting Eastside files from /push/eastside\n"; my $status = chdir($WORKING_DIR); if(!($status)) { print "GetEAST: error changing to $WORKING_DIR\n"; exit(-3); } print "GetEAST: changed to $WORKING_DIR\n"; # copy files from push directory to working directory system "cp -f $RECEIVE_PUSH_DIR/ESR* $WORKING_DIR"; # call remove files subroutine &remove_files($RUNPKR_LOG_FILE); # config files are already in /holding/remote/esr # do translation by site for $site_name (@site_name_list) { # create lower case site names $lc_site_name = $site_name; $lc_site_name =~ tr/[A-Z]/[a-z]/; # remove any file names in list arrays from first site run # IS THIS REQUIRED if ($site_name eq "ESRW") { splice (@raw_file_list, 0); splice (@raw_file_doy_list, 0); $prev_raw_file_doy = ""; } # EGADS will cause ftp'd files to be all in caps my @raw_file_list = glob ("${site_name}*.R00"); if (!@raw_file_list) { print "No files for site $site_name\n"; # go to next site if esre, exit if esrw if ($site_name eq "ESRE") { next; } elsif ($site_name eq "ESRW") { # call remove files subroutine &remove_files($RUNPKR_LOG_FILE); exit(0); } } # do translation by individual file (may be 2+/day) for $raw_file_element (@raw_file_list) { # convert raw file names from CAPS to lowercase my $lc_raw_file_element = $raw_file_element; $lc_raw_file_element =~ tr/[A-Z]/[a-z]/; $status = system("mv $raw_file_element $lc_raw_file_element"); if($status) { print "GetEAST: error moving $raw_file_element to $lc_raw_file_element\n"; exit(-11); } $raw_file_element =~ tr/[A-Z]/[a-z]/; # pull first eight characters of raw file name my $raw_file_prefix = substr($raw_file_element,0,7); my $raw_file_index = substr($raw_file_element,7,1); my $raw_file_index_minus_1 = $raw_file_index - 1; # pull day of year from raw file name $raw_file_doy = substr($raw_file_element,4,3); # determine if current raw file doy matches previous raw file doy if ($raw_file_doy ne $prev_raw_file_doy) {push (@raw_file_doy_list, $raw_file_doy)}; # assign year $raw_file_yr = $current_yr; # subtract year if current day is less than raw file day if ($current_doy lt $raw_file_doy) {$raw_file_yr = $raw_file_yr - 1}; # calculate gps week from raw file day name $dt->set_from_day_of_year ($raw_file_yr, $raw_file_doy); my $gps_week = $dt->strftime("%G"); # remove first two digits from 4-digit raw file year (2 digits in... # ...output filename) $raw_file_yr = substr($raw_file_yr,2,2); # create output obs file name # EAST0011.R00 -> EAST0011.99O $obs_file_name = $raw_file_element; $obs_file_name = $raw_file_prefix . $raw_file_index_minus_1 . "." . $raw_file_yr . "o"; # create nav file name $nav_file_name = $raw_file_prefix . $raw_file_index_minus_1 . "." . $raw_file_yr . "n"; print "GetEAST: runpkr00'ing $raw_file_element\n"; # run runpkr00, write output to log file $status = system("$RUNPKR $raw_file_element > $RUNPKR_LOG_FILE"); if ($status) { print "GetEAST: error runpkr00'ing $raw_file_element\n"; # error messages here if raw or raw file filename files do not exist? exit(-4); } # teqc obs file rinex translation my $obs_cfg_file; if ($site_name eq "ESRE") { $obs_cfg_file = $ESRE_OBS_CFG_FILE; } elsif($site_name eq "ESRW") { $obs_cfg_file = $ESRW_OBS_CFG_FILE; } print "GetEAST: teqc'ing $raw_file_element: \n"; print "$TEQC_EXEC -tr do -config ${obs_cfg_file} -week ${gps_week} ${raw_file_prefix}${raw_file_index}.dat > ${obs_file_name}\n"; $status = system("$TEQC_EXEC -tr do -config ${obs_cfg_file} -week ${gps_week} ${raw_file_prefix}${raw_file_index}.dat > ${obs_file_name}"); if ($status) { print "GetEAST: error in teqc obs file creation from $raw_file_element\n"; exit(-5); } print "$TEQC_EXEC -tr dn -config ${ESR_NAV_CFG_FILE} -week ${gps_week} ${raw_file_prefix}${raw_file_index}.dat > ${nav_file_name}\n"; # teqc nav file rinex translation $status = system("$TEQC_EXEC -tr dn -config $ESR_NAV_CFG_FILE -week ${gps_week} ${raw_file_prefix}${raw_file_index}.dat > ${nav_file_name}"); if ($status) { print "GetEAST: error in teqc nav file creation from $raw_file_element\n"; exit(-6); } # assign previous raw file doy $prev_raw_file_doy = $raw_file_doy; } # perform concatenation of output files (if required) by day for $raw_file_doy (@raw_file_doy_list) { # remove any files from previous day from output array lists splice (@output_obs_file_list, 0); splice (@output_nav_file_list, 0); # glob all obs files for site by day @output_obs_file_list = glob ("${lc_site_name}${raw_file_doy}*.${raw_file_yr}o"); @output_nav_file_list = glob ("${lc_site_name}${raw_file_doy}*.${raw_file_yr}n"); # final output file names $final_obs_file_name = $site_name . $raw_file_doy . "0." . $raw_file_yr . "o"; $final_nav_file_name = $site_name . $raw_file_doy . "0." . $raw_file_yr . "n"; # convert to lower case $final_nav_file_name =~ tr/[A-Z]/[a-z]/; $final_obs_file_name =~ tr/[A-Z]/[a-z]/; # count of number of obs files for day - obs files are always created my $obs_file_count = scalar(@output_obs_file_list); # single obs, nav file - no move required # combine multiple obs, nav files if they exist; obs count should suffice... # ...for both if ($obs_file_count > 1) { # need temporary file names to concatenate to my $tmp_obs_file_name = $final_obs_file_name . ".tmp"; my $tmp_nav_file_name = $final_nav_file_name . ".tmp"; # reset nav file count $nav_file_count = 0; # obs file concatenation # create string containing obs file names # reset cat string $cat_string = ""; for $obs_file_name (@output_obs_file_list) { # skip empty files next if -z $obs_file_name; $cat_string = $cat_string . " " . $obs_file_name; } print "GetEAST: teqc'ing $cat_string to $tmp_obs_file_name\n"; $status = system("$TEQC_EXEC $cat_string > $tmp_obs_file_name"); if ($status) { print "GetEAST: error teqc'ing to $tmp_obs_file_name\n"; exit(-7); } # delete individual obs files which comprise new file for $obs_file_name (@output_obs_file_list) { system("\\rm -f $obs_file_name"); } # move from temp file name to final name system("\mv -f $tmp_obs_file_name $final_obs_file_name"); # teqc will not concatenate nav files # open temp nav output file open(OUTFILE3,">$tmp_nav_file_name") or die "cannot open $tmp_nav_file_name output file\n"; print "GetEAST: concatenating nav files\n"; # manually remove headers from all but first nav file # test if it exists for $nav_file_name (@output_nav_file_list) { # skip if file is empty next if -z $nav_file_name; # open file if not empty open (INFILE1,"$nav_file_name") or die "GetEAST: cannot open $nav_file_name\n"; $nav_file_count++; # reset end-of-header indicator $end_of_hdr_indicator = 0; # write first nav file while () { $line = $_; if ($nav_file_count == 1) { printf OUTFILE3 "$line"; } # do not write headers of second, third, etc. nav files elsif ($nav_file_count > 1) { # check for "END OF HEADER" if ($line =~ /END OF HEADER/) { $end_of_hdr_indicator = 1; next; } # write all text after end of header if ($end_of_hdr_indicator) {printf OUTFILE3 "$line"}; } } # close, individual nav file close (INFILE1); system("\\rm -f $nav_file_name"); } # delete individual nav files which comprise new file for $nav_file_name (@output_nav_file_list) { system("\\rm -f $nav_file_name"); } # close temp nav output file close (OUTFILE3); # move to final nav file name system("\mv -f $tmp_nav_file_name $final_nav_file_name"); } # move obs, nav files to push dirs # obs rinex files $status = system("mv $final_obs_file_name $RINEX_PUSH_DIR"); if($status) { print "GetEAST: error moving obs file to $RINEX_PUSH_DIR\n"; exit(-9); } # nav rinex files $status = system("mv $final_nav_file_name $RINEX_PUSH_DIR"); if($status) { print "GetEAST: error moving nav file to $RINEX_PUSH_DIR\n"; exit(-10); } # call remove files subroutine - clean up # print"GetEAST: cleaning up work directory\n"; &remove_files($RUNPKR_LOG_FILE); } # move raw files to push dirs # raw files stay individual for $raw_file_element (@raw_file_list) { $status = system("mv $raw_file_element $RAW_PUSH_DIR"); if($status) { print "GetEAST: error moving $raw_file_element to $RAW_PUSH_DIR\n"; exit(-8); } } print"GetEAST: removing ${site_name} raw file(s) from /push/eastside directory\n"; system "\\rm -f $RECEIVE_PUSH_DIR/${site_name}* "; } # call remove files subroutine &remove_files($RUNPKR_LOG_FILE); ########################################################################### #remove files subroutine ########################################################################### sub remove_files { my ($RUNPKR_LOG_FILE) = @_; # remove files named above system("\\rm -f $RUNPKR_LOG_FILE"); system("\\rm -f *dat"); system("\\rm -f *eph"); system("\\rm -f *ion"); system("\\rm -f *mes"); }