#!/usr/bin/perl 

# Main Belt Asteroids
# script by Arlene Ducao (arlduc@amnh.org)
# this script takes the objects from the list "MPCORB.DAT"
# (ftp://cfa-ftp.harvard.edu/pub/MPCORB/)
# whose semi-major axis (a) is between 2.15 and 3.3 AU -- placing them between Mars and Jupiter
# and turns them into a Celestia ssc file.



#to reduce file size, we only take the biggest asteroids (radius > 2.1 AU)
#and we add modified Aten/Amor/Apollo NEO asteroids in as well!


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


#############subroutines##########################################



sub OtherAsteroidGet() {
	$Designation = substr($line, 0, 5);
	$Space = substr($line, 5, 3);
	$H = substr($line, 8, 5);
	$Space = substr($line, 13, 2);
	$G = substr($line, 15, 4);
	$Space = substr($line, 19, 1);
	$Epoch = substr($line, 20, 5);
	$Space = substr($line, 25, 1);
	$M = substr($line, 26, 9);
	$Space = substr($line, 35, 2);
	$Peri = substr($line, 37, 9);
	$Space = substr($line, 46, 2);
	$Node = substr($line, 48, 9);
	$Space = substr($line, 57, 3);
	$Incl = substr($line, 60, 8);
	$Space = substr($line, 68, 2);
	$e = substr($line, 70, 9);
	$Space = substr($line, 79, 2);
	$n = substr($line, 81, 10);
	$Space = substr($line, 91, 3);
	$a = substr($line, 94, 9);
	
	
}


sub asteroidPrint() {
		$Radius = 0.5 * 1329 *(10 **(-($H)/5))/sqrt(1) * 5000;   	
		#  original equation is = 0.5 * 1329.*(10.**(-AbsMag[=H]/5.))/sqrt(albedo)) 
	
		printf NEO_OUT ("\"%s\" \"Sol\"\n", $Designation);
		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", $Radius);
		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            1   # large because we want it visible!!! \n");
		printf NEO_OUT ("	RotationPeriod    %g   # random value (0<RP<365)\n", rand(100));
		printf NEO_OUT ("}\n\n\n"); 
}




#############main routine##########################################



open ( NEO_IN, "MPCORB.DAT");
open ( NEO_OUT, ">MainBeltAsteroids.ssc" );
$count = 0;


while (defined($line = <NEO_IN>)) {
	OtherAsteroidGet();
	$count++;
	if (($a > 2.15) && ($a < 3.3) && ($H < 12)){
		#printf NEO_OUT ("#FROM MPCORB\n");
		asteroidPrint();
	}
}

printf STDOUT ("written to MainBeltAsteroids.ssc\n");





