#!/usr/bin/perl 

# Near Earth Objects
# script by Arlene Ducao (arlduc@amnh.org)
# this script takes the objects from these lists:
# http://cfa-www.harvard.edu/iau/lists/Atens.html
# http://cfa-www.harvard.edu/iau/lists/Apollos.html
# http://cfa-www.harvard.edu/iau/lists/Amors.html--
# and turns them into a Celestia ssc file.




my ($Designation, $ProvDes, $q, $Q, $Mplus, $Mminus, $Nplus, $Nminus, $H, $Epoch, $M, $Peri, $Node, $Incl, $e, $a, $Opps, $Ref); #quantities used in the other files
my ($line);


open ( ATEN_IN, "Aten.html");
open ( AMOR_IN, "Amor.html");
open ( APOLLO_IN, "Apollo.html");
open ( NEO_OUT, ">NEO.ssc" );



while (defined($line = <ATEN_IN>)) { 	#search through Aten.html
	NEOprint();	
}

while (defined($line = <AMOR_IN>)) { 	#search through Amor.html if needed
	NEOprint();	
}
	
while (defined($line = <APOLLO_IN>)) { 	#search through Apollo.html if needed
	NEOprint();
}
	 


#for-loop to print the list of star names
#for ($i=0; $i<$NumOfNEOs; $i++) {
#	printf STDOUT ("%g %s %s %s %s \n", $i, $NEO[$i]{Distance}, $NEO[$i]{Date}, $NEO[$i]{PermDes}, $NEO[$i]{ProvDes2});
#}

#printf STDOUT (" %s\n %s\n %s\n %s\n", $NEO[0]{Distance}, $NEO[0]{Date}, $NEO[0]{PermDes}, $NEO[0]{ProvDes2});
printf STDOUT ("written to NEO.ssc\n");












sub NEOprint() {
	$Designation = substr($line, 0, 25);
	$Space = substr($line, 25, 2);
	$ProvDes = substr($line, 27, 10);
	$Space = substr($line, 37, 3);

	#printf STDOUT ("%s                           %s\n", $NEO[$i]{ProvDes2}, $ProvDes);	
	
	$q = substr($line, 40, 5);
	$Space = substr($line, 45, 2);
	$Q = substr($line, 47, 5);
	$Space = substr($line, 52, 2);
	$Mplus = substr($line, 54, 5);
	$Space = substr($line, 59, 2);
	$Mminus = substr($line, 61, 5);
	$Space = substr($line, 66, 2);
	$Nplus = substr($line, 68, 5);
	$Space = substr($line, 73, 2);
	$Nminus = substr($line, 75, 5);
	$Space = substr($line, 80, 2);
	$H = substr($line, 82, 4); 
	$Space = substr($line, 86, 3);
	$Epoch = substr($line, 89, 8);
	$Space = substr($line, 97, 2);
	$M = substr($line, 99, 5);
	$Space = substr($line, 104, 3);
	$Peri = substr($line, 107, 5);
	$Space = substr($line, 112, 1);
	$Node = substr($line, 113, 5);
	$Space = substr($line, 118, 2);
	$Incl = substr($line, 120, 4);
	$Space = substr($line, 124, 1);
	$e = substr($line, 125, 5);
	$Space = substr($line, 130, 3);
	$a =  substr($line, 133, 5);
	
	$ProvDes =~ s/\s$//;
	printf NEO_OUT ("\"%s\" \"Sol\"\n", $ProvDes);
	printf NEO_OUT ("{\n");
	printf NEO_OUT ("	Class \"asteroid\"\n");
	printf NEO_OUT ("	Mesh \"asteroid.cms\"\n");
	printf NEO_OUT ("	Texture \"asteroid.jpg\"\n");
	printf NEO_OUT (" 	Radius  %g \n", 0.5 * 1329 *(10 **(-($H)/5))/sqrt(.18));
			#  original equation is = 0.5 * 1329.*(10.**(-AbsMag[=H]/5.))/sqrt(albedo)) 
	printf NEO_OUT ("	EllipticalOrbit\n	{\n");
	printf NEO_OUT ("		Period %g \n", sqrt($a**3));  # real equation is sqrt(SemiMajorAxis**3) 
	printf NEO_OUT ("		SemiMajorAxis %g \n", $a);
	printf NEO_OUT ("		Eccentricity %g \n", $e);
	printf NEO_OUT ("		Inclination %g \n", $Incl);
	printf NEO_OUT ("		AscendingNode %g \n", $Node);
	printf NEO_OUT ("		ArgOfPericenter %g \n", $Peri);
	printf NEO_OUT ("		MeanAnomaly %g \n", $M);
	printf NEO_OUT ("	}\n");
	printf NEO_OUT ("	Albedo            0.7   # large because we want it visible!!! \n");
	printf NEO_OUT ("	RotationPeriod    %g   # random value (0<RP<365)\n", rand(365));
	printf NEO_OUT ("}\n\n\n"); 

}

