From 727498350ee97618f5a23f93addaef43e7d950af Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Sat, 7 Mar 2015 23:42:46 -0500 Subject: Massive fixes. Adding the rest of the code. --- src/cal/get_tle/make_cvzramtool.pl.in | 215 ++++++++++++++++++++++++++++++++++ 1 file changed, 215 insertions(+) create mode 100644 src/cal/get_tle/make_cvzramtool.pl.in (limited to 'src/cal/get_tle/make_cvzramtool.pl.in') diff --git a/src/cal/get_tle/make_cvzramtool.pl.in b/src/cal/get_tle/make_cvzramtool.pl.in new file mode 100644 index 0000000..d11b75e --- /dev/null +++ b/src/cal/get_tle/make_cvzramtool.pl.in @@ -0,0 +1,215 @@ +#!/usr/bin/env 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 = "@DATADIR@/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; +} -- cgit