package hirondelle.starfield.catalog.parser;
import hirondelle.starfield.physics.Star;
import hirondelle.starfield.util.Util;
final class HenryDraperCatalog implements RecordParser {
public Star parse(String aLine) {
Star result = null;
if ( aLine.length() < 43 ){
Util.logVerbose("Skipping record. Truncated.");
}
else {
Chomper chomper = new Chomper(aLine);
String spectralClass = chomper.forText(43); if (! Util.textHasContent(spectralClass) ){
Util.logVerbose("Skipping record. Missing spectral class.");
}
else if (spectralClass.startsWith("N") || spectralClass.startsWith("P") || spectralClass.startsWith("R") || spectralClass.startsWith("C") || spectralClass.startsWith("S")){
Util.logVerbose("Skipping record. Not in the set of expected spectral classes: " + spectralClass);
}
else if ( chomper.isMissing(30,34) ){
Util.logVerbose("Skipping record. Missing magnitude.");
}
else {
result = new Star();
result.Temperature = Star.spectralTypeToTemperature(spectralClass);
int hour = chomper.forInt(19, 20);
int min = chomper.forInt(21, 23);
double hours = hour + min/600.0D; result.RightAscension = Util.radians(hours*15.0D);
int deg = chomper.forInt(25, 26);
int arcmin = chomper.forInt(27, 28);
double degrees = deg + arcmin/60.0D; if ( "-".equals(chomper.forText(24)) ){
degrees = -1 * degrees;
}
result.Declination = Util.radians(degrees);
result.Magnitude = chomper.forMagnitude(30,34);
}
}
return result;
}
}