diff options
author | lim <lim@stsci.edu> | 2012-03-29 11:31:13 -0400 |
---|---|---|
committer | lim <lim@stsci.edu> | 2012-03-29 11:31:13 -0400 |
commit | af99439c057871ea8974f5e4cdd674b8c6110dfe (patch) | |
tree | f82170a77c8cb63691f1f235e46ee14664895eb7 /doc/source | |
parent | 69e439b92cece8d8a2def7d38c2cb38b639eab0d (diff) | |
download | stsci.sphere-af99439c057871ea8974f5e4cdd674b8c6110dfe.tar.gz |
lim added files to sphere branch
git-svn-id: http://svn.stsci.edu/svn/ssb/stsci_python/stsci_python/branches/sphere@15878 fe389314-cf27-0410-b35b-8c050e845b92
Former-commit-id: b51412b5b545598ae101152eeaed470b08616176
Diffstat (limited to 'doc/source')
-rw-r--r-- | doc/source/api.rst | 30 | ||||
-rw-r--r-- | doc/source/conf.py | 246 | ||||
-rw-r--r-- | doc/source/cutlines.png | bin | 0 -> 54023 bytes | |||
-rw-r--r-- | doc/source/index.rst | 23 | ||||
-rw-r--r-- | doc/source/inside.png | bin | 0 -> 86567 bytes | |||
-rw-r--r-- | doc/source/user.rst | 160 |
6 files changed, 459 insertions, 0 deletions
diff --git a/doc/source/api.rst b/doc/source/api.rst new file mode 100644 index 0000000..5cce592 --- /dev/null +++ b/doc/source/api.rst @@ -0,0 +1,30 @@ +API Documentation +================= + +Vectors +------- + +.. automodule:: vector + :members: + +Great circle arcs +----------------- + +.. automodule:: great_circle_arc + :members: + +Spherical polygons +------------------ + +.. currentmodule:: polygon + +.. automodule:: polygon + :members: + +Graph operations on polygons +---------------------------- + +.. currentmodule:: graph + +.. automodule:: graph + :members: diff --git a/doc/source/conf.py b/doc/source/conf.py new file mode 100644 index 0000000..5ee1814 --- /dev/null +++ b/doc/source/conf.py @@ -0,0 +1,246 @@ +# -*- coding: utf-8 -*- +# +# Spherical Geometry Toolkit documentation build configuration file, created by +# sphinx-quickstart on Tue Oct 11 09:04:48 2011. +# +# This file is execfile()d with the current directory set to its containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +from stsci.sphinxext.conf import * + +import sys, os + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +#sys.path.insert(0, os.path.abspath('.')) + +# -- General configuration ----------------------------------------------------- + +# If your documentation needs a minimal Sphinx version, state it here. +#needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be extensions +# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. +#extensions += ['sphinx.ext.autodoc', 'sphinx.ext.intersphinx', 'sphinx.ext.mathjax', 'sphinx.ext.viewcode'] +extensions += ['sphinx.ext.autodoc', 'sphinx.ext.intersphinx', 'sphinx.ext.pngmath', 'sphinx.ext.viewcode'] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix of source filenames. +source_suffix = '.rst' + +# The encoding of source files. +#source_encoding = 'utf-8-sig' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u'Spherical Geometry Toolkit' +copyright = u'2011, Michael Droettboom, STScI' + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = '0.1' +# The full version, including alpha/beta/rc tags. +release = '0.1' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +#language = None + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +#today = '' +# Else, today_fmt is used as the format for a strftime call. +#today_fmt = '%B %d, %Y' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +exclude_patterns = [] + +# The reST default role (used for this markup: `text`) to use for all documents. +#default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +#add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +#add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +#show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# A list of ignored prefixes for module index sorting. +#modindex_common_prefix = [] + + +# -- Options for HTML output --------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +#html_theme = 'default' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +#html_theme_options = {} + +# Add any paths that contain custom themes here, relative to this directory. +#html_theme_path = [] + +# The name for this set of Sphinx documents. If None, it defaults to +# "<project> v<release> documentation". +#html_title = None + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +#html_logo = None + +# The name of an image file (within the static path) to use as favicon of the +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +#html_favicon = None + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +#html_last_updated_fmt = '%b %d, %Y' + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +#html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +#html_sidebars = {} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +#html_additional_pages = {} + +# If false, no module index is generated. +#html_domain_indices = True + +# If false, no index is generated. +#html_use_index = True + +# If true, the index is split into individual pages for each letter. +#html_split_index = False + +# If true, links to the reST sources are added to the pages. +#html_show_sourcelink = True + +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. +#html_show_sphinx = True + +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. +#html_show_copyright = True + +# If true, an OpenSearch description file will be output, and all pages will +# contain a <link> tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +#html_use_opensearch = '' + +# This is the file name suffix for HTML files (e.g. ".xhtml"). +#html_file_suffix = None + +# Output file base name for HTML help builder. +htmlhelp_basename = 'SphericalGeometryToolkitdoc' + + +# -- Options for LaTeX output -------------------------------------------------- + +# The paper size ('letter' or 'a4'). +#latex_paper_size = 'letter' + +# The font size ('10pt', '11pt' or '12pt'). +#latex_font_size = '10pt' + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, author, documentclass [howto/manual]). +latex_documents = [ + ('index', 'SphericalGeometryToolkit.tex', u'Spherical Geometry Toolkit Documentation', + u'Michael Droettboom, STScI', 'manual'), +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +#latex_logo = None + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +#latex_use_parts = False + +# If true, show page references after internal links. +#latex_show_pagerefs = False + +# If true, show URL addresses after external links. +#latex_show_urls = False + +# Additional stuff for the LaTeX preamble. +#latex_preamble = '' + +# Documents to append as an appendix to all manuals. +#latex_appendices = [] + +# If false, no module index is generated. +#latex_domain_indices = True + + +# -- Options for manual page output -------------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + ('index', 'sphericalgeometrytoolkit', u'Spherical Geometry Toolkit Documentation', + [u'Michael Droettboom, STScI'], 1) +] + +# If true, show URL addresses after external links. +#man_show_urls = False + + +# -- Options for Texinfo output ------------------------------------------------ + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ('index', 'SphericalGeometryToolkit', u'Spherical Geometry Toolkit Documentation', u'Michael Droettboom, STScI', + 'SphericalGeometryToolkit', 'One line description of project.', 'Miscellaneous'), +] + +# Documents to append as an appendix to all manuals. +#texinfo_appendices = [] + +# If false, no module index is generated. +#texinfo_domain_indices = True + +# How to display URL addresses: 'footnote', 'no', or 'inline'. +#texinfo_show_urls = 'footnote' + + +# Example configuration for intersphinx: refer to the Python standard library. +intersphinx_mapping = {'http://docs.python.org/': None} diff --git a/doc/source/cutlines.png b/doc/source/cutlines.png Binary files differnew file mode 100644 index 0000000..6766848 --- /dev/null +++ b/doc/source/cutlines.png diff --git a/doc/source/index.rst b/doc/source/index.rst new file mode 100644 index 0000000..680a41a --- /dev/null +++ b/doc/source/index.rst @@ -0,0 +1,23 @@ +.. Spherical Geometry Toolkit documentation master file, created by + sphinx-quickstart on Tue Oct 11 09:04:48 2011. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to Spherical Geometry Toolkit's documentation! +====================================================== + +Contents: + +.. toctree:: + :maxdepth: 2 + + user + api + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + diff --git a/doc/source/inside.png b/doc/source/inside.png Binary files differnew file mode 100644 index 0000000..a56246f --- /dev/null +++ b/doc/source/inside.png diff --git a/doc/source/user.rst b/doc/source/user.rst new file mode 100644 index 0000000..e17db6f --- /dev/null +++ b/doc/source/user.rst @@ -0,0 +1,160 @@ +User documentation +================== + +.. currentmodule:: sphere + +The `sphere` library is a pure Python package for handling spherical +polygons that represent arbitrary regions of the sky. + +Requirements +------------ + +- Python 2.7 + +- Numpy 1.4 or later + +Coordinate representation +------------------------- + +Coordinates in world space are traditionally represented by right +ascension and declination (*ra* and *dec*), or longitude and latitude. +While these representations are convenient, they have discontinuities +at the poles, making operations on them trickier at arbitrary +locations on the sky sphere. Therefore, all internal operations of +this library are done in 3D vector space, where coordinates are +represented as (*x*, *y*, *z*) vectors. The `sphere.vector` module +contains functions to convert between (*ra*, *dec*) and (*x*, *y*, +*z*) representations. + +While any (*x*, *y*, *z*) triple represents a vector and therefore a +location on the sky sphere, a distinction must be made between +normalized coordinates fall exactly on the unit sphere, and +unnormalized coordinates which do not. A normalized coordinate is +defined as a vector whose length is 1, i.e.: + +.. math:: + + \sqrt{x^2 + y^2 + z^2} = 1 + +To prevent unnecessary recomputation, many methods in this library +assume that the vectors passed in are already normalized. If this is +not the case, `sphere.vector.normalize_vector` can be used to +normalize an array of vectors. + +The library allows the user to work in either degrees or radians. All +methods that require or return an angular value have a `degrees` +keyword argument. When `degrees` is `True`, these measurements are in +degrees, otherwise they are in radians. + +Spherical polygons +------------------ + +Spherical polygons are arbitrary areas on the sky sphere enclosed by +great circle arcs. They are represented by the +`~sphere.polygon.SphericalPolygon` class. + +Representation +`````````````` + +The points defining the polygon are available from the +`~polygon.SphericalPolygon.points` property. It is a Nx3 array where +each row is an (*x*, *y*, *z*) vector, normalized. The polygon points +are explicitly closed, i.e., the first and last points are the same. + +Where is the inside? +^^^^^^^^^^^^^^^^^^^^ + +The edges of a polygon serve to separate the “inside” from the +“outside” area. On a traditional 2D planar surface, the “inside” is +defined as the finite area and the “outside” is the infinite area. +However, since the surface of a sphere is cyclical, i.e., it wraps +around on itself, the a spherical polygon actually defines two finite +areas. To specify which should be considered the “inside” vs. the +“outside”, the definition of the polygon also has an “inside point” +which is just any point that should be considered inside of the +polygon. + +In the following image, the inside point (marked with the red dot) +declares that the area of the polygon is the green region, and not the +white region. + +.. image:: inside.png + +The inside point of the the polygon can be obtained from the +`~polygon.SphericalPolygon.inside` property. + +Cut lines +^^^^^^^^^ + +If the polygon represents two disjoint areas or the polygon has holes, +those areas will be connected by cut lines. The following image shows +a polygon made from the union of a number of cone areas which has both +a hole and a disjoint region connected by cut lines. + +.. image:: cutlines.png + +Creating spherical polygons +``````````````````````````` + +.. currentmodule:: sphere.polygon + +`SphericalPolygon` objects have 4 different constructors: + + - `SphericalPolygon`: Takes an array of (*x*, *y*, *z*) + points and an inside point. + + - `SphericalPolygon.from_radec`: Takes an array of (*ra*, *dec*) + points and an inside point. + + - `SphericalPolygon.from_cone`: Creates a polygon from a cone on the + sky shere. Takes (*ra*, *dec*, *radius*). + + - `SphericalPolygon.from_wcs`: Creates a polygon from the footprint + of a FITS image using its WCS header keywords. Takes a FITS + filename or a `pyfits.Header` object. + +Operations on Spherical Polygons +```````````````````````````````` + +Once one has a `SphericalPolygon` object, there are a number of +operations available: + + - `~SphericalPolygon.contains_point`: Determines if the given point is inside the polygon. + + - `~SphericalPolygon.intersects_poly`: Determines if one polygon intersects with another. + + - `~SphericalPolygon.area`: Determine the area of a polygon. + + - `~SphericalPolygon.union` and `~SphericalPolygon.multi_union`: + Return a new polygon that is the union of two or more polygons. + + - `~SphericalPolygon.intersection` and + `~SphericalPolygon.multi_intersection`: Return a new polygon that + is the intersection of two or more polygons. + + - `~SphericalPolygon.overlap`: Determine how much a given polygon + overlaps another. + + - `~SphericalPolygon.draw`: Plots the polygon using matplotlib’s + Basemap toolkit. This feature is rather bare and intended + primarily for debugging purposes. + +Great circle arcs +----------------- + +.. currentmodule:: sphere.great_circle_arc + +As seen above, great circle arcs are used to define the edges of the +polygon. The `sphere.great_circle_arc` module contains a number of +functions that are useful for dealing with them. + +- `length`: Returns the angular distance between two points on the sphere. + +- `intersection`: Returns the intersection point between two great + circle arcs. + +- `intersects`: Determines if two great circle arcs intersect. + +- `angle`: Calculate the angle between two great circle arcs. + +- `midpoint`: Calculate the midpoint along a great circle arc. |