Class Overview

Since the Science Archive is based on an object-oriented database, we have classes for each object, not tables as opposed to objects in a relational database. The classes are linked to each other either by inheritance or by association.

Inheritance is a way to specialize a class. Every data member of the base class is also member of the inherited class, but the inherited class may have additional data members. In the schemata below, inheritance is represented by a large empty arrowhead between the classes.

Associations link classes to one another. There are one-to-one, one-to-many and many-to-many associations. Through the associations one can access the data members of the associated class through the dereferencing operator '.' (dot). In the schemata below, associations are the thick lines connecting classes, -to-many links represented as blobs at the corresponding end.

Photometric Survey Objects

Objects of the photometric survey are all members of the base class PhotoObj. It is specialized into primary, secondary and bad objects:

PhotoPrimary objects are the primary survey catalog objects. Secondaries are secondary observations of objects (in the overlap area of the stripes). More than 10% of all objects have secondaries. There is a many-to-many link between primary and secondary objects. A secondary object may be associated to more than one primary if the secondary observation is of a bad quality and could not be resolved into two or more objects. And obviously primaries can have associations to several secondary observations.

The link of the PhotoObj to itself is the one-to-many parent-child link. Each object may belong to a family of objects (the deblender was at work here).

Bad objects are kept only if they are member of a family, for example spiral arms of a galaxy that have been deblended.

Photomeric Survey Structure

The photometric survey is strucutred into Chunk > Segment > Field > PhotoObj, all linked by a one-to-many association. The Tag object contains the coordinates and model magnitudes of each object along with the object flags. Each PhotoObj object has exactly one Tag associated with it through a one-to-one link.

Spectroscopic Survey Objects

The spectra are taken on spectroscopic plates, to each of which we have a corresponding Plate object. The SpecObj objects correspond to each spectroscopic survey object, and they have associations to the found and identified spectral lines as well as the emission and cross-correlation redshifts measured. Spectral line indices are not included yet but a placeholder is there.

External Catalog Objects

Some objects are identified in external catalogs too and have some extracted quantity in those catalogs. There are links to ROSAT, FIRST and USNO catalogs.

Additional Classes

The Profile class has a one-to-one association to the PhotoObj class and contains the profile bins for each object. This has been splitted off the main PhotoObj to save space.

The SDSSConstants class contains global survey constants of interest.

There are two placeholder classes for photometric redshifts to come.

Tag Objects

Tag objects have been introduced as a lightweight object to actually do the database searches on. Most queries will have a cut either in coordinate or in color space so we suggest querying on a Tag object to enhance query speed significantly.

The Tag objects are specialized using inheritance into several classes depending on their type:

Tag objects are chosen based on the following selection criteria:

      if ( ( ( ( obj->status & AR_OBJECT_STATUS_FIRST_FIELD ) && gotFirst_ ) ||
            ( !( obj->status & AR_OBJECT_STATUS_FIRST_FIELD ) && !gotFirst_ ) )
           && (  obj->status & AR_OBJECT_STATUS_PRIMARY  )
           && (  segH->status == AR_SEGMENT_STATUS_PRIMARY  )  ) {

             ---> Primary

       if ( ( obj->objc_type == AR_OBJECT_TYPE_STAR) ) {

                ---> Star

        } else if ( ( obj->objc_type == AR_OBJECT_TYPE_GALAXY) ) {

                ---> Galaxy

        } else if ( ( obj->objc_type == AR_OBJECT_TYPE_SKY) ) {

                ---> Sky

        } else {

                ---> Unknown

      } else if (
           ( ( ( obj->status & AR_OBJECT_STATUS_FIRST_FIELD ) && gotFirst_ ) ||
            ( !( obj->status & AR_OBJECT_STATUS_FIRST_FIELD ) && !gotFirst_ ) )
           && (  obj->status & AR_OBJECT_STATUS_SECONDARY  ) ) {

             ---> Secondary

       if ( ( obj->objc_type == AR_OBJECT_TYPE_STAR) ) {

                ---> StarSecondary

        } else if ( ( obj->objc_type == AR_OBJECT_TYPE_GALAXY) ) {

                ---> GalaxySecondary

        } else if ( ( obj->objc_type == AR_OBJECT_TYPE_SKY) ) {

                ---> SkySecondary

        } else {

                ---> UnknownSecondary

      } else {

             --> Family

Try to use the Tag object and its inherited classes whenever possible as your query object.

© Copyright 2000 Peter Z. Kunszt, Alex S. Szalay , Ani R. Thakar
and The SDSS Collaboration