#!/usr/local/bin/perl use FileHandle; # This program will read in the latest FUSE TLE and recreate the # cvz_ram_tool.html web page. $output_filename = "/data2/violet/htdocs/support/tools/cvz_ram_tool.html"; open (OUTF, ">$output_filename") || die "Cannot open cvz_ram_tool.html file"; system("chmod ug+rw $output_filename"); system("chgrp www $output_filename"); $input_filename = "/data1/fuse/calfuse/calfiles/FUSE.TLE"; open (INP_TLE, "<$input_filename") || die "Cannot open FUSE.TLE file"; $line1 = ; $line2 = ; $line3 = ; $id2 = substr($line2, 2, 5); $id3 = substr($line3, 2, 5); if (($id2 != 25791) || ($id3 != 25791)) { print STDOUT "Error in TLE:\n"; print STDOUT $line1; print STDOUT $line2; print STDOUT $line3; die "Error in TLE"; } close (INP_TLE); $year = substr($line2, 18, 2); $doy = substr($line2, 20, 3); $dayfrac = substr($line2, 23, 9); $incl = substr($line3, 9, 8); $raan = substr($line3, 17,8); $eccen = substr($line3, 26, 7); $eccen = "0." . $eccen; $mean_mot = substr($line3, 52, 11); if ($year > 50) { $year += 1900; } else { $year += 2000; } $dayfrac = "0".$dayfrac; &convert_doy; &convert_dayfrac; &calculate_a0; $now=`date`; $datest = substr($now,4,3)." ".substr($now,8,2).", ".substr($now,24,4); print OUTF "FUSE CVZ/Ram Calculator\n"; print OUTF "

FUSE Continuous Viewing Zone and Orbit Ram Calculator V1.3

\n"; print OUTF "

June 12, 1999

\n"; print OUTF "The FUSE Continuous Viewing Zone and Orbit Ram \n"; print OUTF "Calculator can determine when a given target \n"; print OUTF "direction is in the continuous viewing zone. \n"; print OUTF "It also calculates when a given target lies \n"; print OUTF "within 20 degrees of the orbital plane and \n"; print OUTF "cannot be observed due to ram avoidance\n"; print OUTF "constraints. The default orbital elements \n"; print OUTF "were last updated on $month $day, $year. \n"; print OUTF "
\n"; print OUTF "

\n"; print OUTF "

\n"; print OUTF "\n"; print OUTF "\n"; print OUTF "
\n"; print OUTF "
\n"; print OUTF "Target Parameters:\n"; print OUTF "
\n"; print OUTF "
\n"; print OUTF "Right Ascension (format HH:MM:SS.SS):\n"; print OUTF " (J2000.0)\n"; print OUTF "
\n"; print OUTF "Declination (format -DD:MM:SS.S):\n"; print OUTF " (J2000.0)\n"; print OUTF "
\n"; print OUTF "
\n"; print OUTF "
\n"; print OUTF "Output table parameters:\n"; print OUTF "
\n"; print OUTF " Minimum Earth limb angle: \n"; print OUTF "(deg)\n"; print OUTF "
\n"; print OUTF "Start Date:\n"; print OUTF "\n"; print OUTF "\n"; print OUTF "\n"; print OUTF "
\n"; print OUTF "Time step:days
\n"; print OUTF "Number of steps:
\n"; print OUTF "
\n"; print OUTF "
\n"; print OUTF "FUSE classical Keplarian orbital elements:\n"; print OUTF "
\n"; print OUTF "Epoch date of elements:\n"; print OUTF "\n"; print OUTF "\n"; print OUTF "\n"; print OUTF "
\n"; print OUTF "Epoch UT time of elements (format HH:MM:SS.SS):\n"; printf OUTF "\n",$hour,$minute,$second; print OUTF "
\n"; print OUTF "Semi-major axis (km):\n"; printf OUTF " \n",$semiax; print OUTF "
\n"; print OUTF "Right ascension of the ascending node (degrees):\n"; print OUTF "\n"; print OUTF "
\n"; print OUTF "Orbit inclination (degrees):\n"; print OUTF "\n"; print OUTF "
\n"; print OUTF "Eccentricity:\n"; print OUTF " \n"; print OUTF "
\n"; print OUTF "
\n"; print OUTF "\n"; print OUTF "\n"; print OUTF "
\n"; print OUTF "
\n"; print OUTF "This page uses the STARLINK \n"; print OUTF "set of astronomical subroutines.\n"; print OUTF "
\n"; print OUTF "This page was automatically generated on $now"; print OUTF "
\n"; print OUTF "
emurphy\@pha.jhu.edu
\n"; close (OUTF); ### end of Perl script sub convert_doy { @daytab1 = (0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); @daytab2 = (0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); @monthstr = ("", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"); if ((($year%4 == 0) && ($year%100 != 0)) || ($year%400 == 0)) { # $year is a leap year use daytab1 for ($i = 1; $doy > $daytab1[$i]; $i++) { $doy -= $daytab1[$i]; } } else { # $year is not a leap year, use daytab2 for ($i = 1; $doy > $daytab2[$i]; $i++) { $doy -= $daytab2[$i]; } } $month = $monthstr[$i]; $day = $doy; } sub convert_dayfrac { $dayfrac *= 24.0; $hour = int($dayfrac); $minute = int(($dayfrac-$hour)*60.0); $second = ((($dayfrac-$hour)*60.0)-$minute)*60.0; } sub calculate_a0 { $mu = 3.986005E5; $pi = 3.14159265358979; $radian = 0.0174532925200; $mm=2.0*$pi*$mean_mot/(24.0*60.0); $ke=0.74366916E-1; $k2=5.413080E-4; $a1=($ke/$mm)**(2.0/3.0); $inrad = $incl * $radian; $d1=3.0/2.0*$k2/($a1*$a1)*(3.0*cos($inrad)*cos($inrad)-1.0)/((1.0-$eccen*$eccen)**(3.0/2.0)); $a0=$a1*(1.0-$d1/3.0-$d1*$d1-134.0/81.0*$d1*$d1*$d1); $d0=3.0/2.0*$k2/($a0*$a0)*(3.0*cos($inrad)*cos($inrad)-1.0)/((1.0-$eccen*$eccen)**(3.0/2.0)); $semiax=$a0/(1-$d0)*6378.135; }