file_io.Obs80Reader
Attributes
Classes
A class to read in object data files stored in the MPC's obs80 |
Functions
|
Checks if the MPC Obs80 line is a deleted/replaced observation (note 2 |
|
Checks if the MPC Obs80 line is the first line of a two-line row format. |
Checks if the MPC Obs80 line is the second (continuation) line of a |
|
|
Checks that |
|
Converts the Obs80 RA string to degrees. |
|
Converts the Obs80 Dec string to degrees. |
|
Converts from the MPC time formatted string to ISO time format. |
Module Contents
- deleted_observation(line)[source]
Checks if the MPC Obs80 line is a deleted/replaced observation (note 2 code X or x), which should be skipped entirely.
- two_line_row_start(line)[source]
Checks if the MPC Obs80 line is the first line of a two-line row format.
A line bearing an upper-case S, R or V in note 2 (column 15) is the first of a two-line record.
- two_line_row_continuation(line)[source]
Checks if the MPC Obs80 line is the second (continuation) line of a two-line record.
The continuation line repeats note 2 in lower case (s / r / v) and carries the observer position rather than an astrometric measurement. It must never be emitted as a standalone observation: on its own its position columns would be misread as RA/Dec and it would carry no observatory position.
- two_line_rows_match(first_line, second_line)[source]
Checks that
second_lineis the continuation line belonging tofirst_line: it is a continuation line, repeats the same designation (columns 1-14) and reports the same observatory code (columns 78-80).This guards against a desynchronised file (an orphan continuation line, or a first line whose continuation is missing) silently mis-pairing.
- mpctime_to_isotime(mpc_time)[source]
Converts from the MPC time formatted string to ISO time format.
- class Obs80DataReader(filename, **kwargs)[source]
Bases:
layup.utilities.file_io.ObjectDataReader.ObjectDataReaderA class to read in object data files stored in the MPC’s obs80 format.
Note that we will ignore the header lines that might accompany the file.
- _is_header_row(line)[source]
Check if the line is a header row.
- Parameters:
line (str) – The line to check.
- Returns:
True if the line is a header row, False otherwise.
- Return type:
bool
- get_reader_info()[source]
Return a string identifying the current reader name and input information (for logging and output).
- Returns:
name – The reader information.
- Return type:
string
- _iter_records(f)[source]
Yield one
(main_line, second_line)tuple per logical obs80 record.This is the single source of truth for how the raw lines of the file group into records; every read path (
get_row_count,read_rows,read_objects) walks it so their record counts and ordering always agree. It pairs each two-line record (S/R/V first line + its lower-case s/r/v continuation line) and, crucially, refuses to emit a malformed observation:a deleted/replaced observation (note 2 code X / x) is skipped;
an orphan continuation line (one with no matching preceding first line) is skipped – it carries no astrometry of its own and would otherwise be emitted as a positionless observation whose position columns are misread as RA/Dec;
a first line whose continuation is missing is dropped rather than paired with the next unrelated line.
main_lineis the astrometry line;second_lineis the observer-position line, orNonefor a single-line observation.
- get_row_count()[source]
Return the total number of rows in the file.
Note that the obs 80 format allows for two-line rows, so the number of lines used to store the data is not the same as the number of rows.
- Returns:
Total rows in the file.
- Return type:
int
- _read_rows_internal(block_start=0, block_size=None, **kwargs)[source]
Reads in a set number of rows from the input.
- Parameters:
block_start (integer, optional) – The 0-indexed row number from which to start reading the data. For example in a CSV file block_start=2 would skip the first two lines after the header and return data starting on row=2. Default =0
block_size (integer, optional, default=None) – The number of rows to read in. Use block_size=None to read in all available data. default =None
**kwargs (dictionary, optional) – Extra arguments
- Returns:
res – The data read in from the file.
- Return type:
numpy structured array
- _read_objects_internal(obj_ids, **kwargs)[source]
Read in a chunk of data for given object IDs.
- Parameters:
obj_ids (list) – A list of object IDs to use.
**kwargs (dictionary, optional) – Extra arguments
- Returns:
res – The data read in from the file.
- Return type:
numpy structured array
- _process_and_validate_input_table(input_table, **kwargs)[source]
Perform any input-specific processing and validation on the input table. Modifies the input table in place.
Notes
The base implementation includes filtering that is common to most input types. Subclasses should call super.process_and_validate() to ensure that the ancestor’s validation is also applied.
- Parameters:
input_table (numpy structured array) – A loaded table.
**kwargs (dictionary, optional) – Extra arguments
- Returns:
input_table – Returns the input table modified in-place.
- Return type:
numpy structured array
- get_obs80_id(line)[source]
Get the object ID from the Obs80 line. Note that we have already confirmed that self.primary_id_column_name is in self.col_names. :param line: The line of obs80 data to extract the object ID from. :type line: str
- Returns:
The object ID extracted from the line.
- Return type:
str
- convert_obs80(line, second_line=None)[source]
Converts a row of obs80 data to a tuple of values. The second line is optional and may contain the observatory position.
- Parameters:
line (str) – The line of obs80 data to convert.
second_line (str, optional) – The optional second line of obs80 data to convert. Default is None.
- Returns:
A tuple of values containing the object ID, ISO time, RA in degrees, Dec in degrees, magnitude, filter, observatory code, catalog, program, and observatory position (x, y, z).
- Return type:
tuple