change build number calculation to be more accurate
[spider.git] / perl / Sun.pm
index 4bb349f6ee77d93e5168a69005b77667ece4ee4f..13f7d20cdc1bc7cb60cca01cae1466bfd20bf144 100644 (file)
@@ -28,12 +28,36 @@ require Exporter;
 @EXPORT = qw($pi $d2r $r2d );
 
 use strict;
-use vars qw($pi $d2r $r2d );
+
+use vars qw($VERSION $BRANCH);
+$VERSION = sprintf( "%d.%03d", q$Revision$ =~ /(\d+)\.(\d+)/ );
+$BRANCH = sprintf( "%d.%03d", q$Revision$ =~ /\d+\.\d+\.(\d+)\.(\d+)/ ) || 0;
+$main::build += $VERSION;
+$main::branch += $BRANCH;
+
+use vars qw($pi $d2r $r2d);
  
 $pi = 3.141592653589;
 $d2r = ($pi/180);
 $r2d = (180/$pi);
 
+use vars qw(%keps);
+use Keps;
+use DXVars;
+use DXUtil;
+
+# reload the keps data
+sub load
+{
+       my @out;
+       my $s = readfilestr("$main::root/local/Keps.pm");
+       if ($s) {
+               eval $s;
+               push @out, $@ if $@;
+       }
+    return @out;
+}
+
 sub Julian_Day
 {
        my $year = shift;
@@ -563,50 +587,6 @@ sub get_satellite_pos
 #
 #Temporary keps database...
 #
-my %keps = (
-       noaa15 => {
-               number => 25338,
-               id => 98030,
-               epoch => 99341.00000000,
-               mm1 => .00000376,
-               mm2 => .00000e-0,
-               bstar => .18612e-3,
-               inclination => 98.6601,  
-               raan => 8.2003,
-               eccentricity => .0011401,
-               argperigee => 112.4684,
-               meananomaly => 42.5140,
-               meanmotion => 14.23047277081382,
-       },
-       tdrs5 => {
-               number => 21639,
-               id => 91054,
-               epoch => 99341.34471854,
-               mm1 => .00000095,
-               mm2 => .00000e-0,
-               bstar => .10000e-3,
-               inclination => 1.5957,  
-               raan => 88.4884,
-               eccentricity => .003028,
-               argperigee => 161.6582,
-               meananomaly => 135.4323,
-               meanmotion => 1.00277774,
-       },
-       oscar16 => {
-               number => 20439,
-               id => 90005,
-               epoch => 99341.14501399,
-               mm1 => .00000343,
-               mm2 => .00000e-0,
-               bstar => .14841e-3,
-               inclination => 98.4690,  
-               raan => 55.0032,
-               eccentricity => .0012163,
-               argperigee => 66.4615,
-               meananomaly => 293.7842,
-               meanmotion => 14.303202855,
-       },
-);
        my $jtime = shift;
        my $lat = shift;
        my $lon = shift;
@@ -635,9 +615,9 @@ my %keps = (
        my $epoch_day=$epoch-int(1000*$epoch_year);
 #printf("epoch_year = %10.2f\n",$epoch_year);
 #printf("epoch_day = %17.12f\n",$epoch_day);
-       $epoch_year=$epoch_year+2000 if ($epoch_year < 57);
-       $epoch_year=$epoch_year+1900 if ($epoch_year >= 57);
-       my $jt_epoch=Julian_Date_of_Year($epoch_year);
+       my $ep_year=$epoch_year+2000 if ($epoch_year < 57);
+       $ep_year=$epoch_year+1900 if ($epoch_year >= 57);
+       my $jt_epoch=Julian_Date_of_Year($ep_year);
        $jt_epoch=$jt_epoch+$epoch_day;
 #printf("JT for epoch = %17.12f\n",$jt_epoch);
        my $tsince=($jtime-$jt_epoch)*24*60;
@@ -700,16 +680,15 @@ my %keps = (
        my $xl=mod2p($xls-$c5/$p*$axnsl);
 
        my $u=mod2p($xl-$xnodes);
-       my $item3=0;    
+       my $item3;
        my $eo1=$u;
        my $tem5=1;
        my $coseo1=0;
        my $sineo1=0;
-       while ( abs($tem5) >= 1e-6 && $item3 < 10 )
+       for ($item3=0; abs($tem5) >= 1e-6 && $item3 < 10; $item3++ )
        {
                $sineo1=sin($eo1);
                $coseo1=cos($eo1);
-               $item3 = $item3+1;
                $tem5=1-$coseo1*$axnsl-$sineo1*$aynsl;
                $tem5=($u-$aynsl*$coseo1+$axnsl*$sineo1-$eo1)/$tem5;
                my $tem2=abs($tem5);
@@ -901,6 +880,10 @@ sub Calendar_date_and_time_from_JD
        $yr = $c-4715 if( $mon == 1 || $mon == 2 );
        $hr = int($frac*24);
        $min= int(($frac*24 - $hr)*60+0.5);
+       if ($min == 60) {   # this may well prove inadequate DJK
+               $hr += 1;
+               $min = 0;
+       }
        return ($yr,$mon,$day,$hr,$min);
 }