# HG changeset patch # User ulalume3@yahoo.com # Date 1336735505 -7200 # Node ID 79fea414527871134994436350669dace39ae464 # Parent f6927689a3b2532e46c8daa7bd98a4a21daab2d8 Restructuring the repository. diff -r f6927689a3b2 -r 79fea4145278 Makefile --- a/Makefile Fri May 11 13:22:25 2012 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,153 +0,0 @@ -# Makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -PAPER = -BUILDDIR = _build - -# Internal variables. -PAPEROPT_a4 = -D latex_paper_size=a4 -PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . -# the i18n builder cannot share the environment and doctrees with the others -I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . - -.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext - -help: - @echo "Please use \`make ' where is one of" - @echo " html to make standalone HTML files" - @echo " dirhtml to make HTML files named index.html in directories" - @echo " singlehtml to make a single large HTML file" - @echo " pickle to make pickle files" - @echo " json to make JSON files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " qthelp to make HTML files and a qthelp project" - @echo " devhelp to make HTML files and a Devhelp project" - @echo " epub to make an epub" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " latexpdf to make LaTeX files and run them through pdflatex" - @echo " text to make text files" - @echo " man to make manual pages" - @echo " texinfo to make Texinfo files" - @echo " info to make Texinfo files and run them through makeinfo" - @echo " gettext to make PO message catalogs" - @echo " changes to make an overview of all changed/added/deprecated items" - @echo " linkcheck to check all external links for integrity" - @echo " doctest to run all doctests embedded in the documentation (if enabled)" - -clean: - -rm -rf $(BUILDDIR)/* - -html: - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." - -dirhtml: - $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." - -singlehtml: - $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml - @echo - @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." - -pickle: - $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle - @echo - @echo "Build finished; now you can process the pickle files." - -json: - $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json - @echo - @echo "Build finished; now you can process the JSON files." - -htmlhelp: - $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp - @echo - @echo "Build finished; now you can run HTML Help Workshop with the" \ - ".hhp project file in $(BUILDDIR)/htmlhelp." - -qthelp: - $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp - @echo - @echo "Build finished; now you can run "qcollectiongenerator" with the" \ - ".qhcp project file in $(BUILDDIR)/qthelp, like this:" - @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/SingleCalculusChaininterface.qhcp" - @echo "To view the help file:" - @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/SingleCalculusChaininterface.qhc" - -devhelp: - $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp - @echo - @echo "Build finished." - @echo "To view the help file:" - @echo "# mkdir -p $$HOME/.local/share/devhelp/SingleCalculusChaininterface" - @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/SingleCalculusChaininterface" - @echo "# devhelp" - -epub: - $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub - @echo - @echo "Build finished. The epub file is in $(BUILDDIR)/epub." - -latex: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo - @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." - @echo "Run \`make' in that directory to run these through (pdf)latex" \ - "(use \`make latexpdf' here to do that automatically)." - -latexpdf: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through pdflatex..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -text: - $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text - @echo - @echo "Build finished. The text files are in $(BUILDDIR)/text." - -man: - $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man - @echo - @echo "Build finished. The manual pages are in $(BUILDDIR)/man." - -texinfo: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo - @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." - @echo "Run \`make' in that directory to run these through makeinfo" \ - "(use \`make info' here to do that automatically)." - -info: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo "Running Texinfo files through makeinfo..." - make -C $(BUILDDIR)/texinfo info - @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." - -gettext: - $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale - @echo - @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." - -changes: - $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes - @echo - @echo "The overview file is in $(BUILDDIR)/changes." - -linkcheck: - $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck - @echo - @echo "Link check complete; look for any errors in the above output " \ - "or in $(BUILDDIR)/linkcheck/output.txt." - -doctest: - $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest - @echo "Testing of doctests in the sources finished, look at the " \ - "results in $(BUILDDIR)/doctest/output.txt." diff -r f6927689a3b2 -r 79fea4145278 conf.py --- a/conf.py Fri May 11 13:22:25 2012 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,289 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Single Calculus Chain documentation build configuration file, created by -# sphinx-quickstart on Thu Mar 15 10:35:01 2012. -# -# 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. - -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.todo', 'sphinx.ext.mathjax'] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['aux_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'Single Calculus Chain' -copyright = u'2012, SCC team' - -# 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.2' -# The full version, including alpha/beta/rc tags. -release = '0.2' - -# 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 = ['aux_build'] - -# 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 = 'nature' - -# 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 -# " v 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 = ['aux_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 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 = 'SingleCalculusChaindoc' - - -# -- Options for LaTeX output -------------------------------------------------- - -latex_elements = { -# The paper size ('letterpaper' or 'a4paper'). -#'papersize': 'letterpaper', - -# The font size ('10pt', '11pt' or '12pt'). -#'pointsize': '10pt', - -# Additional stuff for the LaTeX preamble. -#'preamble': '', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, author, documentclass [howto/manual]). -latex_documents = [ - ('index', 'SingleCalculusChain.tex', u'Single Calculus Chain Documentation', - u'SCC team', '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 - -# 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', 'singlecalculuschain', u'Single Calculus Chain Documentation', - [u'SCC team'], 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', 'SingleCalculusChain', u'Single Calculus Chain Documentation', - u'SCC team', 'SingleCalculusChain', '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' - - -# -- Options for Epub output --------------------------------------------------- - -# Bibliographic Dublin Core info. -epub_title = u'Single Calculus Chain' -epub_author = u'SCC team' -epub_publisher = u'SCC team' -epub_copyright = u'2012, SCC team' - -# The language of the text. It defaults to the language option -# or en if the language is not set. -#epub_language = '' - -# The scheme of the identifier. Typical schemes are ISBN or URL. -#epub_scheme = '' - -# The unique identifier of the text. This can be a ISBN number -# or the project homepage. -#epub_identifier = '' - -# A unique identification for the text. -#epub_uid = '' - -# A tuple containing the cover image and cover page html template filenames. -#epub_cover = () - -# HTML files that should be inserted before the pages created by sphinx. -# The format is a list of tuples containing the path and title. -#epub_pre_files = [] - -# HTML files shat should be inserted after the pages created by sphinx. -# The format is a list of tuples containing the path and title. -#epub_post_files = [] - -# A list of files that should not be packed into the epub file. -#epub_exclude_files = [] - -# The depth of the table of contents in toc.ncx. -#epub_tocdepth = 3 - -# Allow duplicate toc entries. -#epub_tocdup = True - - -# Example configuration for intersphinx: refer to the Python standard library. -intersphinx_mapping = {'http://docs.python.org/': None} diff -r f6927689a3b2 -r 79fea4145278 details/adding_channels.rst --- a/details/adding_channels.rst Fri May 11 13:22:25 2012 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,10 +0,0 @@ -Adding channels -=============== - - - -.. _signal-types: - -Signal types -~~~~~~~~~~~~ -(explain here all the signal type abreviations). diff -r f6927689a3b2 -r 79fea4145278 details/adding_otherequipment.rst --- a/details/adding_otherequipment.rst Fri May 11 13:22:25 2012 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,2 +0,0 @@ -Adding other equipment -====================== diff -r f6927689a3b2 -r 79fea4145278 details/adding_products.rst --- a/details/adding_products.rst Fri May 11 13:22:25 2012 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,2 +0,0 @@ -Adding products -=============== diff -r f6927689a3b2 -r 79fea4145278 details/adding_station.rst --- a/details/adding_station.rst Fri May 11 13:22:25 2012 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,14 +0,0 @@ -Adding stations -=============== - - - -You can add the definition of new systems that belong to the station by clicking on the Hoi System blue line that -appears bollow the main station fields. For more details on the filed you need to fill in see the :ref:`add_new_system` section. -You can add more stations by clicking on the "Add another Hoi System" option. - -.. note:: - - You need to have *Javascript* enebled to add a new station from this page. - - diff -r f6927689a3b2 -r 79fea4145278 details/adding_system.rst --- a/details/adding_system.rst Fri May 11 13:22:25 2012 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,4 +0,0 @@ -.. _add_new_system: - -Adding systems -============== diff -r f6927689a3b2 -r 79fea4145278 details/handbook_of_instruments.rst --- a/details/handbook_of_instruments.rst Fri May 11 13:22:25 2012 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,2 +0,0 @@ -The Handbook of instruments -=========================== diff -r f6927689a3b2 -r 79fea4145278 details/introduction.rst --- a/details/introduction.rst Fri May 11 13:22:25 2012 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,2 +0,0 @@ -Introduction -============ diff -r f6927689a3b2 -r 79fea4145278 details/uploading_measurements.rst --- a/details/uploading_measurements.rst Fri May 11 13:22:25 2012 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3 +0,0 @@ -Uploading measuremnents -======================= -123 diff -r f6927689a3b2 -r 79fea4145278 details/viewing_measurements.rst --- a/details/viewing_measurements.rst Fri May 11 13:22:25 2012 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,4 +0,0 @@ -View processing results -======================= - -123 diff -r f6927689a3b2 -r 79fea4145278 docs/Makefile --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/Makefile Fri May 11 13:25:05 2012 +0200 @@ -0,0 +1,153 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = +BUILDDIR = _build + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . +# the i18n builder cannot share the environment and doctrees with the others +I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . + +.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext + +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " singlehtml to make a single large HTML file" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " devhelp to make HTML files and a Devhelp project" + @echo " epub to make an epub" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " latexpdf to make LaTeX files and run them through pdflatex" + @echo " text to make text files" + @echo " man to make manual pages" + @echo " texinfo to make Texinfo files" + @echo " info to make Texinfo files and run them through makeinfo" + @echo " gettext to make PO message catalogs" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + +clean: + -rm -rf $(BUILDDIR)/* + +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + +singlehtml: + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml + @echo + @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." + +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo + @echo "Build finished; now you can process the JSON files." + +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in $(BUILDDIR)/htmlhelp." + +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/SingleCalculusChaininterface.qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/SingleCalculusChaininterface.qhc" + +devhelp: + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp + @echo + @echo "Build finished." + @echo "To view the help file:" + @echo "# mkdir -p $$HOME/.local/share/devhelp/SingleCalculusChaininterface" + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/SingleCalculusChaininterface" + @echo "# devhelp" + +epub: + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub + @echo + @echo "Build finished. The epub file is in $(BUILDDIR)/epub." + +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." + @echo "Run \`make' in that directory to run these through (pdf)latex" \ + "(use \`make latexpdf' here to do that automatically)." + +latexpdf: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through pdflatex..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +text: + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text + @echo + @echo "Build finished. The text files are in $(BUILDDIR)/text." + +man: + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man + @echo + @echo "Build finished. The manual pages are in $(BUILDDIR)/man." + +texinfo: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo + @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." + @echo "Run \`make' in that directory to run these through makeinfo" \ + "(use \`make info' here to do that automatically)." + +info: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo "Running Texinfo files through makeinfo..." + make -C $(BUILDDIR)/texinfo info + @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." + +gettext: + $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale + @echo + @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." + +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." + +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." + +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." diff -r f6927689a3b2 -r 79fea4145278 docs/_build/doctrees/details/adding_channels.doctree Binary file docs/_build/doctrees/details/adding_channels.doctree has changed diff -r f6927689a3b2 -r 79fea4145278 docs/_build/doctrees/details/adding_otherequipment.doctree Binary file docs/_build/doctrees/details/adding_otherequipment.doctree has changed diff -r f6927689a3b2 -r 79fea4145278 docs/_build/doctrees/details/adding_products.doctree Binary file docs/_build/doctrees/details/adding_products.doctree has changed diff -r f6927689a3b2 -r 79fea4145278 docs/_build/doctrees/details/adding_station.doctree Binary file docs/_build/doctrees/details/adding_station.doctree has changed diff -r f6927689a3b2 -r 79fea4145278 docs/_build/doctrees/details/adding_system.doctree Binary file docs/_build/doctrees/details/adding_system.doctree has changed diff -r f6927689a3b2 -r 79fea4145278 docs/_build/doctrees/details/handbook_of_instruments.doctree Binary file docs/_build/doctrees/details/handbook_of_instruments.doctree has changed diff -r f6927689a3b2 -r 79fea4145278 docs/_build/doctrees/details/introduction.doctree Binary file docs/_build/doctrees/details/introduction.doctree has changed diff -r f6927689a3b2 -r 79fea4145278 docs/_build/doctrees/details/uploading_measurements.doctree Binary file docs/_build/doctrees/details/uploading_measurements.doctree has changed diff -r f6927689a3b2 -r 79fea4145278 docs/_build/doctrees/details/viewing_measurements.doctree Binary file docs/_build/doctrees/details/viewing_measurements.doctree has changed diff -r f6927689a3b2 -r 79fea4145278 docs/_build/doctrees/environment.pickle Binary file docs/_build/doctrees/environment.pickle has changed diff -r f6927689a3b2 -r 79fea4145278 docs/_build/doctrees/index.doctree Binary file docs/_build/doctrees/index.doctree has changed diff -r f6927689a3b2 -r 79fea4145278 docs/_build/doctrees/interface_details.doctree Binary file docs/_build/doctrees/interface_details.doctree has changed diff -r f6927689a3b2 -r 79fea4145278 docs/_build/doctrees/introduction.doctree Binary file docs/_build/doctrees/introduction.doctree has changed diff -r f6927689a3b2 -r 79fea4145278 docs/_build/doctrees/netcdf_file.doctree Binary file docs/_build/doctrees/netcdf_file.doctree has changed diff -r f6927689a3b2 -r 79fea4145278 docs/_build/doctrees/tutorial.doctree Binary file docs/_build/doctrees/tutorial.doctree has changed diff -r f6927689a3b2 -r 79fea4145278 docs/_build/doctrees/tutorial/adding_channels.doctree Binary file docs/_build/doctrees/tutorial/adding_channels.doctree has changed diff -r f6927689a3b2 -r 79fea4145278 docs/_build/doctrees/tutorial/adding_products.doctree Binary file docs/_build/doctrees/tutorial/adding_products.doctree has changed diff -r f6927689a3b2 -r 79fea4145278 docs/_build/doctrees/tutorial/adding_station.doctree Binary file docs/_build/doctrees/tutorial/adding_station.doctree has changed diff -r f6927689a3b2 -r 79fea4145278 docs/_build/doctrees/tutorial/adding_system.doctree Binary file docs/_build/doctrees/tutorial/adding_system.doctree has changed diff -r f6927689a3b2 -r 79fea4145278 docs/_build/doctrees/tutorial/adding_telescopelaser.doctree Binary file docs/_build/doctrees/tutorial/adding_telescopelaser.doctree has changed diff -r f6927689a3b2 -r 79fea4145278 docs/_build/doctrees/tutorial/introduction.doctree Binary file docs/_build/doctrees/tutorial/introduction.doctree has changed diff -r f6927689a3b2 -r 79fea4145278 docs/_build/doctrees/tutorial/processing_data.doctree Binary file docs/_build/doctrees/tutorial/processing_data.doctree has changed diff -r f6927689a3b2 -r 79fea4145278 docs/_build/doctrees/user_management.doctree Binary file docs/_build/doctrees/user_management.doctree has changed diff -r f6927689a3b2 -r 79fea4145278 docs/_build/html/.buildinfo --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/_build/html/.buildinfo Fri May 11 13:25:05 2012 +0200 @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: ff6387f999f946e1c2dc51a7aa84e58d +tags: fbb0d17656682115ca4d033fb2f83ba1 diff -r f6927689a3b2 -r 79fea4145278 docs/_build/html/_sources/details/adding_channels.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/_build/html/_sources/details/adding_channels.txt Fri May 11 13:25:05 2012 +0200 @@ -0,0 +1,10 @@ +Adding channels +=============== + + + +.. _signal-types: + +Signal types +~~~~~~~~~~~~ +(explain here all the signal type abreviations). diff -r f6927689a3b2 -r 79fea4145278 docs/_build/html/_sources/details/adding_otherequipment.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/_build/html/_sources/details/adding_otherequipment.txt Fri May 11 13:25:05 2012 +0200 @@ -0,0 +1,2 @@ +Adding other equipment +====================== diff -r f6927689a3b2 -r 79fea4145278 docs/_build/html/_sources/details/adding_products.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/_build/html/_sources/details/adding_products.txt Fri May 11 13:25:05 2012 +0200 @@ -0,0 +1,2 @@ +Adding products +=============== diff -r f6927689a3b2 -r 79fea4145278 docs/_build/html/_sources/details/adding_station.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/_build/html/_sources/details/adding_station.txt Fri May 11 13:25:05 2012 +0200 @@ -0,0 +1,14 @@ +Adding stations +=============== + + + +You can add the definition of new systems that belong to the station by clicking on the Hoi System blue line that +appears bollow the main station fields. For more details on the filed you need to fill in see the :ref:`add_new_system` section. +You can add more stations by clicking on the "Add another Hoi System" option. + +.. note:: + + You need to have *Javascript* enebled to add a new station from this page. + + diff -r f6927689a3b2 -r 79fea4145278 docs/_build/html/_sources/details/adding_system.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/_build/html/_sources/details/adding_system.txt Fri May 11 13:25:05 2012 +0200 @@ -0,0 +1,4 @@ +.. _add_new_system: + +Adding systems +============== diff -r f6927689a3b2 -r 79fea4145278 docs/_build/html/_sources/details/handbook_of_instruments.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/_build/html/_sources/details/handbook_of_instruments.txt Fri May 11 13:25:05 2012 +0200 @@ -0,0 +1,2 @@ +The Handbook of instruments +=========================== diff -r f6927689a3b2 -r 79fea4145278 docs/_build/html/_sources/details/introduction.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/_build/html/_sources/details/introduction.txt Fri May 11 13:25:05 2012 +0200 @@ -0,0 +1,2 @@ +Introduction +============ diff -r f6927689a3b2 -r 79fea4145278 docs/_build/html/_sources/details/uploading_measurements.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/_build/html/_sources/details/uploading_measurements.txt Fri May 11 13:25:05 2012 +0200 @@ -0,0 +1,3 @@ +Uploading measuremnents +======================= +123 diff -r f6927689a3b2 -r 79fea4145278 docs/_build/html/_sources/details/viewing_measurements.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/_build/html/_sources/details/viewing_measurements.txt Fri May 11 13:25:05 2012 +0200 @@ -0,0 +1,4 @@ +View processing results +======================= + +123 diff -r f6927689a3b2 -r 79fea4145278 docs/_build/html/_sources/index.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/_build/html/_sources/index.txt Fri May 11 13:25:05 2012 +0200 @@ -0,0 +1,29 @@ +.. Single Calculus Chain interface documentation master file, created by + sphinx-quickstart on Tue Feb 7 13:17:19 2012. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to Single Calculus Chain interface's documentation! +=========================================================== + +Contents: + +.. toctree:: + :maxdepth: 1 + :titlesonly: + + introduction + tutorial + interface_details + netcdf_file + user_management + + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + diff -r f6927689a3b2 -r 79fea4145278 docs/_build/html/_sources/interface_details.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/_build/html/_sources/interface_details.txt Fri May 11 13:25:05 2012 +0200 @@ -0,0 +1,24 @@ +.. Single Calculus Chain interface documentation master file, created by + sphinx-quickstart on Tue Feb 7 13:17:19 2012. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Detailed documentation +====================== + +Contents: + +.. toctree:: + :maxdepth: 2 + + /details/introduction + /details/adding_station + /details/adding_system + /details/adding_channels + /details/adding_products + /details/adding_otherequipment + /details/handbook_of_instruments + /details/uploading_measurements + /details/viewing_measurements + + diff -r f6927689a3b2 -r 79fea4145278 docs/_build/html/_sources/introduction.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/_build/html/_sources/introduction.txt Fri May 11 13:25:05 2012 +0200 @@ -0,0 +1,10 @@ +Introduction +============ + +* The Single calculus chain is made of different modules. These modules don't interact directly but only change value in a database. +* This interface will allow Earlinet memebers to interact with parts of the database. +* One part of the interface (the "Station admin" section) permits registering a new station, registerring new lidar systems and configuration, fill in details for the channels that constitute the system and finnaly define the products (extinction, backscatter e.t.c.) that need to be calculated by the SCC. +* The second part of the interface is dedicated to the uploading of new measurement files, the configuration of the measurement specific paramters and, finally, the retrieval of the calculated products. +* Different types of users, with different level of access permissions can have access in the interface. In this way, higher level of flexibility and security can be achived. + + diff -r f6927689a3b2 -r 79fea4145278 docs/_build/html/_sources/netcdf_file.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/_build/html/_sources/netcdf_file.txt Fri May 11 13:25:05 2012 +0200 @@ -0,0 +1,1187 @@ +The SCC netCDF file format +========================== + +Rationale +--------- + +The Single Calculus Chain (SCC) is composed by two different modules: + +- pre-processing module ( scc\_preprocessing) + +- optical processing module ( ELDA) + +To perfom aerosol optical retrievals the SCC needs not only the raw +lidar data but also a certain number of parameters to use in both +pre-processing and optical processing stages. The SCC gets these +parameters looking at two different locations: + +- Single Calculus Chain relational database (SCC\_DB) + +- Input files + +There are some paramenters that can be found only in the input files +(those ones changing from measurement to measurement), others that can +be found only in the SCC\_DB and other ones that can be found in both +these locations. In the last case, if a particular parameter is needed, +the SCC will search first in the input files and then in SCC\_DB. If the +parameter is found in the input files the SCC will keep it without +looking into SCC\_DB. + +The input files have to be submitted to the SCC in NetCDF format. At the +present the SCC can handle four different types of input files: + +1. Raw Lidar Data +2. Sounding Data +3. Overlap +4. Lidar Ratio + + +As already mentioned, the Raw Lidar Data file contains not only the +raw lidar data but also other parameters to use to perform the +pre-processing and optical processing. The Sounding Data file +contains the data coming from a correlative radiosounding and it is used +by the SCC for molecular density calculation. The Overlap file +contains the measured overlap function. The Lidar Ratio file contains +a lidar ratio profile to use in elastic backscatter retrievals. The +Raw Lidar Data file is of course mandatory and the Sounding Data, +Overlap and Lidar Ratio files are optional. If Sounding Data file +is not submitted by the user, the molecular density will be calculated +by the SCC using the “US Standard Atmosphere 1976”. If the Overlap +file is not submitted by the user, the SCC will get the full overlap +height from SCC\_DB and it will produce optical results starting from +this height. If Lidar Ratio file is not submitted by the user, the +SCC will consider a fixed value for lidar ratio got from SCC\_DB. + +The user can decide to submit all these files or any number of them (of +course the file Raw Lidar Data is mandatory). For example the user +can submit together with the Raw Lidar Data file only the Sounding +Data file or only the Overlap file. + +This document provides a detailed explanation about the structure of the +NetCDF input files to use for SCC data submission. All Earlinet groups +should read it carefully because they have to produce such kind of input +files if they want to use the SCC for their standard lidar retrievals. +Every comments or suggestions regarding this document can be sent to +Giuseppe D’Amico by e-mail at ``damico@imaa.cnr.it`` + +This document is available for downloading at ``www.earlinetasos.org`` + +In table tab:rawdata is reported a list of dimensions, variables and +global attributes that can be used in the NetCDF Raw Lidar Data input +file. For each of them it is indicated: + +- The name. For the multidimensional variables also the corresponding + dimensions are reported + +- A description explaining the meaning + +- The type + +- If it is mandatory or optional + +As already mentioned, the SCC can get some parameters looking first in +the Raw Lidar Data input file and then into SCC\_DB. This means that +to use the parameters stored in SCC\_DB the optional variables or +optional global attributes must not appear within Raw Lidar Data +file. This is the suggested and recommended way to use the SCC. Please +include optional parameters in the Raw Lidar Data only as an +exception. + +In table tab:sounding, tab:overlap and tab:lr are reported all the +information about the structure of Sounding Data, Overlap and +Lidar Ratio input files respectively. + +Example +------- + +Let’s now consider an example of Raw Lidar Data input file. Suppose +we want to generate NetCDF input file corresponding to a measurement +with the following properties: + ++----------------------+-------------------------------------------+ +| Start Date | :math:`30^{th}` January 2009 | ++----------------------+-------------------------------------------+ +| Start Time UT | 00:00:01 | ++----------------------+-------------------------------------------+ +| Stop Time UT | 00:05:01 | ++----------------------+-------------------------------------------+ +| Station Name | Dummy station | ++----------------------+-------------------------------------------+ +| Earlinet call-sign | cc | ++----------------------+-------------------------------------------+ +| Pointing angle | 5 degrees with respect to the zenith | ++----------------------+-------------------------------------------+ + +Moreover suppose that this measurement is composed by the following +lidar channels: + +1. 1064 lidar channel + + +------------------------------+-------------------------------+ + | Emission wavelength=1064nm | Detection wavelength=1064nm | + +------------------------------+-------------------------------+ + | Time resolution=30s | Number of laser shots=1500 | + +------------------------------+-------------------------------+ + | Number of bins=3000 | Detection mode=analog | + +------------------------------+-------------------------------+ + | Range resolution=7.5m | Polarization state=total | + +------------------------------+-------------------------------+ + +2. 532 cross lidar channel + + +-----------------------------+---------------------------------+ + | Emission wavelength=532nm | Detection wavelength=532nm | + +-----------------------------+---------------------------------+ + | Time resolution=60s | Number of laser shots=3000 | + +-----------------------------+---------------------------------+ + | Number of bins=5000 | Detection mode=photoncounting | + +-----------------------------+---------------------------------+ + | Range resolution=15m | Polarization state=cross | + +-----------------------------+---------------------------------+ + +3. 532 parallel lidar channel + + +-----------------------------+---------------------------------+ + | Emission wavelength=532nm | Detection wavelength=532nm | + +-----------------------------+---------------------------------+ + | Time resolution=60s | Number of laser shots=3000 | + +-----------------------------+---------------------------------+ + | Number of bins=5000 | Detection mode=photoncounting | + +-----------------------------+---------------------------------+ + | Range resolution=15m | Polarization state=parallel | + +-----------------------------+---------------------------------+ + +4. 607 :math:`N_2` vibrational Raman channel + + +-----------------------------+---------------------------------+ + | Emission wavelength=532nm | Detection wavelength=607nm | + +-----------------------------+---------------------------------+ + | Time resolution=60s | Number of laser shots=3000 | + +-----------------------------+---------------------------------+ + | Number of bins=5000 | Detection mode=photoncounting | + +-----------------------------+---------------------------------+ + | Range resolution=15m | + +-----------------------------+---------------------------------+ + +Finally let’s assume we have also performed dark measurements before the +lidar measurements from the 23:50:01 UT up to 23:53:01 UT of +29:math:`^\mathrmth` January 2009. + +Dimensions +~~~~~~~~~~ + +Looking at table tab:rawdata we have to fix the following dimensions: + +:: + + points + channels + time + nb_of_time_scales + scan_angles + time_bck + +The dimension ``time`` is unlimited so we don’t have to fix it. + +We have 4 lidar channels so: + +:: + + channels=4 + +Regarding the dimension ``points`` we have only one channel with a +number of vertical bins equal to 3000 (the 1064nm) and all other +channels with 5000 vertical bins. In cases like this the dimension +``points`` has to be fixed to the maximum number of vertical bins so: + +:: + + points=5000 + +Moreover only one channel (1064nm) is acquired with a time resolution of +30 seconds, all the other channels have a time resolution of 60 seconds. +This means that we have to define two different time scales. We have to +set: + +:: + + nb_of_time_scales=2 + +The measurement is performed only at one scan angle (5 degrees with +respect to the zenith) so: + +:: + + scan_angles=1 + +We have 3 minutes of dark measurements and two different time scales one +with 60 seconds time resolution and the other one with 30 seconds time +resolution. So we will have 3 different dark profiles for the channels +acquired with the first time scale and 6 for the lidar channels acquired +with the second time scale. We have to fix the dimension ``time_bck`` as +the maximum between these values: + +:: + + time_bck=6 + +Variables +~~~~~~~~~ + +In this section it will be explained how to fill all the possible +variables either mandatory or optional of Raw Lidar Data input file. + +Raw_Data_Start_Time(time, nb_of_time_scales) + This 2 dimensional mandatory array has to contain the acquisition + start time (in seconds from the time given by the global attribute + ``RawData_Start_Time_UT``) of each lidar profile. In this example we + have two different time scales: one is characterized by steps of 30 + seconds (the 1064nm is acquired with this time scale) the other by + steps of 60 seconds (532cross, 532parallel and 607nm). Moreover the + measurement start time is 00:00:01 UT and the measurement stop time + is 00:05:01 UT. In this case we have to define: + + :: + + Raw_Data_Start_Time = + 0, 0, + 60, 30, + 120, 60, + 180, 90, + 240, 120, + _, 150, + _, 180, + _, 210, + _, 240, + _, 270 ; + + The order used to fill this array defines the correspondence between + the different time scales and the time scale index. In this example + we have a time scale index of 0 for the time scale with steps of 60 + seconds and a time scale index of 1 for the other one. + +Raw_Data_Stop_Time(time, nb_of_time_scales) + The same as previous item but for the data acquisition stop time. + Following a similar procedure we have to define: + + :: + + Raw_Data_Stop_Time = + 60, 30, + 120, 60, + 180, 90, + 240, 120, + 300, 150, + _, 180, + _, 210, + _, 240, + _, 270, + _, 300 ; + +Raw_Lidar_Data(time, channels, points) + This 3 dimensional mandatory array has to be filled with the + time-series of raw lidar data. The photoncounting profiles have to + submitted in counts (so as integers) while the analog ones in mV. The + order the user chooses to fill this array defines the correspondence + between channel index and lidar data. + + For example if we fill this array in such way that: + + +-------------------------------------+------------------------------------------------------------+ + | Raw_Lidar_Data(time,0,points | :math:`\rightarrow` is the time-series of 1064 nm | + +-------------------------------------+------------------------------------------------------------+ + | Raw_Lidar_Data(time,1,points | :math:`\rightarrow` is the time-series of 532 cross | + +-------------------------------------+------------------------------------------------------------+ + | Raw_Lidar_Data(time,2,points | :math:`\rightarrow` is the time-series of 532 parallel | + +-------------------------------------+------------------------------------------------------------+ + | Raw_Lidar_Data(time,3,points | :math:`\rightarrow` is the time-series of 607 nm | + +-------------------------------------+------------------------------------------------------------+ + + from now on the channel index 0 is associated to the 1064 channel, + 1 to the 532 cross, 2 to the 532 parallel and 3 to the 607nm. + +Raw_Bck_Start_Time(time_bck, nb_of_time_scales) + This 2 dimensional optional array has to contain the acquisition + start time (in seconds from the time given by the global attribute + ``RawBck_Start_Time_UT``) of each dark measurements profile. + Following the same procedure used for the variable + ``Raw_Data_Start_Time`` we have to define: + + :: + + Raw_Bck_Start_Time = + 0, 0, + 60, 30, + 120, 60, + _, 90, + _, 120, + _, 150; + +Raw_Bck_Stop_Time(time_bck, nb_of_time_scales) + The same as previous item but for the dark acquisition stop time. + Following a similar procedure we have to define: + + :: + + Raw_Bck_Stop_Time = + 60, 30, + 120, 60, + 180, 90, + _, 120, + _, 150, + _, 180 ; + + +Background_Profile(time_bck, channels, points) + This 3 dimensional optional array has to be filled with the + time-series of the dark measurements data. The photoncounting + profiles have to submitted in counts (so as integers) while the + analog ones in mV. The user has to fill this array following the same + order used in filling the array ``Raw_Lidar_Data``: + + +---------------------------------------------+----------------------------------------------------------+ + | Background_Profile(time_bck,0,points | :math:`\rightarrow` dark time-series at 1064 nm | + +---------------------------------------------+----------------------------------------------------------+ + | Background_Profile(time_bck,1,points | :math:`\rightarrow` dark time-series at 532 cross | + +---------------------------------------------+----------------------------------------------------------+ + | Background_Profile(time_bck,2,points | :math:`\rightarrow` dark time-series at 532 parallel | + +---------------------------------------------+----------------------------------------------------------+ + | Background_Profile(time_bck,3,points | :math:`\rightarrow` dark time-series at 607 nm | + +---------------------------------------------+----------------------------------------------------------+ + + +channel_ID(channels) + This mandatory array provides the link between the channel index + within the Raw Lidar Data input file and the channel ID in + SCC\_DB. To fill this variable the user has to know which channel IDs + in SCC\_DB correspond to his lidar channels. For this purpose the + SCC, in its final version will provide to the user a special tool to + get these channel IDs through a Web interface. At the moment this + interface is not yet available and these channel IDs will be + communicated directly to the user by the NA5 people. + + Anyway to continue the example let’s suppose that the four lidar + channels taken into account are mapped into SCC\_DB with the + following channel IDs: + + +----------------+--------------------------------------+ + | 1064 nm | :math:`\rightarrow` channel ID=7 | + +----------------+--------------------------------------+ + | 532 cross | :math:`\rightarrow` channel ID=5 | + +----------------+--------------------------------------+ + | 532 parallel | :math:`\rightarrow` channel ID=6 | + +----------------+--------------------------------------+ + | 607 nm | :math:`\rightarrow` channel ID=8 | + +----------------+--------------------------------------+ + + In this case we have to define: + + :: + + channel_ID = 7, 5, 6, 8 ; + +id_timescale(channels) + This mandatory array is introduced to determine which time scale is + used for the acquisition of each lidar channel. In particular this + array defines the link between the channel index and the time scale + index. In our example we have two different time scales. Filling the + arrays ``Raw_Data_Start_Time`` and ``Raw_Data_Stop_Time`` we have + defined a time scale index of 0 for the time scale with steps of 60 + seconds and a time scale index of 1 for the other one with steps of + 30 seconds. In this way this array has to be set as: + + :: + + id_timescale = 1, 0, 0, 0 ; + +Laser_Pointing_Angle(scan_angles + This mandatory array contains all the scan angles used in the + measurement. In our example we have only one scan angle of 5 degrees + with respect to the zenith, so we have to define: + + :: + + Laser_Pointing_Angle = 5 ; + +Laser_Pointing_Angle_of_Profiles(time, nb_of_time_scales) + This mandatory array is introduced to determine which scan angle is + used for the acquisition of each lidar profile. In particular this + array defines the link between the time and time scales indexes and + the scan angle index. In our example we have a single scan angle that + has to correspond to the scan angle index 0. So this array has to be + defined as: + + :: + + Laser_Pointing_Angle_of_Profiles = + 0, 0, + 0, 0, + 0, 0, + 0, 0, + 0, 0, + _, 0, + _, 0, + _, 0, + _, 0, + _, 0 ; + +Laser_Shots(time, channels) + This mandatory array stores the laser shots accumulated at each time + for each channel. In our example the number of laser shots + accumulated is 1500 for the 1064nm channels and 3000 for all the + other channels. Moreover the laser shots do not change with the time. + So we have to define this array as: + + :: + + Laser_Shots = + 1500, 3000, 3000, 3000, + 1500, 3000, 3000, 3000, + 1500, 3000, 3000, 3000, + 1500, 3000, 3000, 3000, + 1500, 3000, 3000, 3000, + 1500, _, _, _, + 1500, _, _, _, + 1500, _, _, _, + 1500, _, _, _, + 1500, _, _, _ ; + +Emitted_Wavelength(channels) + This optional array defines the link between the channel index and + the emission wavelength for each lidar channel. The wavelength has to + be expressed in nm. This information can be also taken from SCC\_DB. + In our example we have: + + :: + + Emitted_Wavelength = 1064, 532, 532, 532 ; + +Detected_Wavelength(channels) + This optional array defines the link between the channel index and + the detected wavelength for each lidar channel. Here detected + wavelength means the value of center of interferential filter + expressed in nm. This information can be also taken from SCC\_DB. In + our example we have: + + :: + + Detected_Wavelength = 1064, 532, 532, 607 ; + +Raw_Data_Range_Resolution(channels) + This optional array defines the link between the channel index and + the raw range resolution for each channel. If the scan angle is + different from zero this quantity is different from the vertical + resolution. More precisely if :math:`\alpha` is the scan angle used + and :math:`\Delta z` is the range resolution the vertical + resolution is calculated as :math:`\Delta + z'=\Delta z \cos\alpha`. This array has to be filled with + :math:`\Delta z` and not with :math:`\Delta z'`. The unit is + meters. This information can be also taken from SCC\_DB. In our + example we have: + + :: + + Raw_Data_Range_Resolution = 7.5, 15.0, 15.0, 15.0 ; + +ID_Range(channels) + This optional array defines if a particular channel is configured as + high, low or ultranear range channel. In particular a value 0 + indicates a low range channel, a value 1 a high range channel and a + value of 2 an ultranear range channel. If for a particular channel + you don’t separate between high and low range channel, please set the + corresponding value to 1. This information can be also taken from + SCC\_DB. In our case we have to set: + + :: + + ID_Range = 1, 1, 1, 1 ; + +Scattering_Mechanism(channels) + This optional array defines the scattering mechanism involved in + each lidar channel. In particular the following values are adopted: + + +------+---------------------------------------------------------------------------------------------+ + | 0 | :math:`\rightarrow` Total elastic backscatter | + +------+---------------------------------------------------------------------------------------------+ + | 1 | :math:`\rightarrow` :math:`N_2` vibrational Raman backscatter | + +------+---------------------------------------------------------------------------------------------+ + | 2 | :math:`\rightarrow` Cross polarization elastic backscatter | + +------+---------------------------------------------------------------------------------------------+ + | 3 | :math:`\rightarrow` Parallel polarization elastic backscatter | + +------+---------------------------------------------------------------------------------------------+ + | 4 | :math:`\rightarrow` :math:`H_2O` vibrational Raman backscatter | + +------+---------------------------------------------------------------------------------------------+ + | 5 | :math:`\rightarrow` Rotational Raman Stokes line close to elastic line | + +------+---------------------------------------------------------------------------------------------+ + | 6 | :math:`\rightarrow` Rotational Raman Stokes line far from elastic line | + +------+---------------------------------------------------------------------------------------------+ + | 7 | :math:`\rightarrow` Rotational Raman anti-Stokes line close to elastic line | + +------+---------------------------------------------------------------------------------------------+ + | 8 | :math:`\rightarrow` Rotational Raman anti-Stokes line far from elastic line | + +------+---------------------------------------------------------------------------------------------+ + | 9 | :math:`\rightarrow` Rotational Raman Stokes and anti-Stokes lines close to elastic line | + +------+---------------------------------------------------------------------------------------------+ + | 10 | :math:`\rightarrow` Rotational Raman Stokes and anti-Stokes lines far from elastic line | + +------+---------------------------------------------------------------------------------------------+ + + This information can be also taken from SCC\_DB. In our example we have: + + :: + + Scattering_Mechanism = 0, 2, 3, 1 ; + +Acquisition_Mode(channels) + This optional array defines the acquisition mode (analog or + photoncounting) involved in each lidar channel. In particular a value + of 0 means analog mode and 1 photoncounting mode. This information + can be also taken from SCC\_DB. In our example we have: + + :: + + Acquisition_Mode = 0, 1, 1, 1 ; + +Laser_Repetition_Rate(channels) + This optional array defines the repetition rate in Hz used to + acquire each lidar channel. This information can be also taken from + SCC\_DB. In our example we are supposing we have only one laser with + a repetition rate of 50 Hz so we have to set: + + :: + + Laser_Repetition_Rate = 50, 50, 50, 50 ; + +Dead_Time(channels) + This optional array defines the dead time in ns associated to each + lidar channel. The SCC will use the values given by this array to + correct the photoncounting signals for dead time. Of course for + analog signals no dead time correction will be applied (for analog + channels the corresponding dead time values have to be set to + undefined value). This information can be also taken from SCC\_DB. In + our example the 1064 nm channel is acquired in analog mode so the + corresponding dead time value has to be undefined. If we suppose a + dead time of 10 ns for all other channels we have to set: + + :: + + Dead_Time = _, 10, 10, 10 ; + +Dead_Time_Corr_Type(channels + This optional array defines which kind of dead time correction has + to be applied on each photoncounting channel. The SCC will correct + the data supposing a not-paralyzable channel if a value of 0 is found + while a paralyzable channel is supposed if a value of 1 is found. Of + course for analog signals no dead time correction will be applied and + so the corresponding values have to be set to undefined value. This + information can be also taken from SCC\_DB. In our example the 1064 + nm channel is acquired in analog mode so the corresponding has to be + undefined. If we want to consider all the photoncounting signals as + not-paralyzable ones: we have to set: + + :: + + Dead_Time_Corr_Type = _, 0, 0, 0 ; + +Trigger_Delay(channels) + This optional array defines the delay (in ns) of the middle of the + first rangebin with respect to the output laser pulse for each lidar + channel. The SCC will use the values given by this array to correct + for trigger delay. This information can be also taken from SCC\_DB. + Let’s suppose that in our example all the photoncounting channels are + not affected by this delay and only the analog channel at 1064nm is + acquired with a delay of 50ns. In this case we have to set: + + :: + + Trigger_Delay = 50, 0, 0, 0 ; + +Background_Mode(channels + This optional array defines how the atmospheric background has to be + subtracted from the lidar channel. Two options are available for the + calculation of atmospheric background: + + #. Average in the far field of lidar channel. In this case the value + of this variable has to be 1 + + #. Average within pre-trigger bins. In this case the value of this + variable has to be 0 + + This information can be also taken from SCC\_DB. Let’s suppose in our + example we use the pre-trigger for the 1064nm channel and the far + field for all other channels. In this case we have to set: + + :: + + Background_Mode = 0, 1, 1, 1 ; + +Background_Low(channels) + This mandatory array defines the minimum altitude (in meters) to + consider in calculating the atmospheric background for each channel. + In case pre-trigger mode is used the corresponding value has to be + set to the rangebin to be used as lower limit (within pre-trigger + region) for background calculation. In our example, if we want to + calculate the background between 30000 and 50000 meters for all + photoncounting channels and we want to use the first 500 pre-trigger + bins for the background calculation for the 1064nm channel we have to + set: + + :: + + Background_Low= 0, 30000, 30000, 30000 ; + +Background_High(channels) + This mandatory array defines the maximum altitude (in meters) to + consider in calculating the atmospheric background for each channel. + In case pre-trigger mode is used the corresponding value has to be + set to the rangebin to be used as upper limit (within pre-trigger + region) for background calculation. In our example, if we want to + calculate the background between 30000 and 50000 meters for all + photoncounting channels and we want to use the first 500 pre-trigger + bins for the background calculation for the 1064nm channel we have to + set: + + :: + + Background_High = 500, 50000, 50000, 50000 ; + +Molecular_Calc + This mandatory variable defines the way used by SCC to calculate the + molecular density profile. At the moment two options are available: + + #. US Standard Atmosphere 1976. In this case the value of this + variable has to be 0 + + #. Radiosounding. In this case the value of this variable has to be 1 + + If we decide to use the option 1. we have to provide also the + measured pressure and temperature at lidar station level. Indeed if + we decide to use the option 2. a radiosounding file has to be + submitted separately in NetCDF format (the structure of this file is + summarized in table tab:sounding). Let’s suppose we want to use the + option 1. so: + + :: + + Molecular_Calc = 0 ; + +Pressure_at_Lidar_Station + Because we have chosen the US Standard Atmosphere for calculation of + the molecular density profile we have to give the pressure in hPa at + lidar station level: + + :: + + Pressure_at_Lidar_Station = 1010 ; + +Temperature_at_Lidar_Station + Because we have chosen the US Standard Atmosphere for calculation of + the molecular density profile we have to give the temperature in C at + lidar station level: + + :: + + Temperature_at_Lidar_Station = 19.8 ; + +Depolarization_Factor(channels) + This array is required only for lidar systems that use the two + depolarization channels for the backscatter retrieval. It represents + the factor :math:`f` to calculate the total backscatter signal + :math:`S_t` combining its cross :math:`S_c` and parallel + :math:`S_p` components: :math:`S_t=S_p+fS_c`. This factor is + mandatory only for systems acquiring :math:`S_c` and :math:`S_p` + and not :math:`S_t`. For systems acquiring :math:`S_c`, + :math:`S_p` and :math:`S_t` this factor is optional and it will + be used only for depolarizaton ratio calculation. Moreover only the + values of the array corresponding to cross polarization channels will + be considered; all other values will be not taken into account and + should be set to undefined value. In our example for the wavelength + 532nm we have only the cross and the parallel components and not the + total one. So we have to give the value of this factor only in + correspondence of the 532nm cross polarization channel that + corresponds to the channel index 1. Suppose that this factor is 0.88. + Moreover, because we don’t have any other depolarization channels we + have also to set all other values of the array to undefined value. + + :: + + Depolarization_Factor = _,0.88,_,_ ; + +LR_Input(channels) + This array is required only for lidar channels for which elastic + backscatter retrieval has to be performed. It defines the lidar ratio + to be used within this retrieval. Two options are available: + + #. The user can submit a lidar ratio profile. In this case the value + of this variable has to be 0. + + #. A fixed value of lidar ratio can be used. In this case the value + of this variable has to be 1. + + If we decide to use the option 1. a lidar ratio file has to be + submitted separately in NetCDF format (the structure of this file is + summarized in table tab:lr). If we decide to use the option 2. the + fixed value of lidar ratio will be taken from SCC\_DB. In our example + we have to give a value of this array only for the 1064nm lidar + channel because for the 532nm we will be able to retrieve a Raman + backscatter coefficient. In case we want to use the fixed value + stored in SCC\_DB we have to set: + + :: + + LR_Input = 1,_,_,_ ; + +DAQ_Range(channels) + This array is required only if one or more lidar signals are + acquired in analog mode. It gives the analog scale in mV used to + acquire the analog signals. In our example we have only the 1064nm + channel acquired in analog mode. If we have used a 100mV analog scale + to acquire this channel we have to set: + + :: + + DAQ_Range = 100,_,_,_ ; + +Global attributes +~~~~~~~~~~~~~~~~~ + +Measurement_ID + This mandatory global attribute defines the measurement ID + corresponding to the actual lidar measurement. It is a string + composed by 12 characters. The first 8 characters give the start date + of measurement in the format YYYYMMDD. The next 2 characters give the + Earlinet call-sign of the station. The last 2 characters are used to + distinguish between different time-series within the same date. In + our example we have to set: + + :: + + Measurement_ID= "20090130cc00" ; + +RawData_Start_Date + This mandatory global attribute defines the start date of lidar + measurements in the format YYYYMMDD. In our case we have: + + :: + + RawData_Start_Date = "20090130" ; + +RawData_Start_Time_UT + This mandatory global attribute defines the UT start time of lidar + measurements in the format HHMMSS. In our case we have: + + :: + + RawData_Start_Time_UT = "000001" ; + +RawData_Stop_Time_UT`` + This mandatory global attribute defines the UT stop time of lidar + measurements in the format HHMMSS. In our case we have: + + :: + + RawData_Stop_Time_UT = "000501" ; + +RawBck_Start_Date + This optional global attribute defines the start date of dark + measurements in the format YYYYMMDD. In our case we have: + + :: + + RawBck_Start_Date = "20090129" ; + +RawBck_Start_Time_UT + This optional global attribute defines the UT start time of dark + measurements in the format HHMMSS. In our case we have: + + :: + + RawBck_Start_Time_UT = "235001" ; + +RawBck_Stop_Time_UT + This optional global attribute defines the UT stop time of dark + measurements in the format HHMMSS. In our case we have: + + :: + + RawBck_Stop_Time_UT = "235301" ; + +Example of file (CDL format) +---------------------------- + +To summarize we have the following NetCDF Raw Lidar Data file (in CDL +format): + +:: + + dimensions: + points = 5000 ; + channels = 4 ; + time = UNLIMITED ; // (10 currently) + nb_of_time_scales = 2 ; + scan_angles = 1 ; + time_bck = 6 ; + variables: + int channel_ID(channels) ; + int Laser_Repetition_Rate(channels) ; + double Laser_Pointing_Angle(scan_angles) ; + int ID_Range(channels) ; + int Scattering_Mechanism(channels) ; + double Emitted_Wavelength(channels) ; + double Detected_Wavelength(channels) ; + double Raw_Data_Range_Resolution(channels) ; + int Background_Mode(channels) ; + double Background_Low(channels) ; + double Background_High(channels) ; + int Molecular_Calc ; + double Pressure_at_Lidar_Station ; + double Temperature_at_Lidar_Station ; + int id_timescale(channels) ; + double Dead_Time(channels) ; + int Dead_Time_Corr_Type(channels) ; + int Acquisition_Mode(channels) ; + double Trigger_Delay(channels) ; + int LR_Input(channels) ; + int Laser_Pointing_Angle_of_Profiles(time, nb_of_time_scales) ; + int Raw_Data_Start_Time(time, nb_of_time_scales) ; + int Raw_Data_Stop_Time(time, nb_of_time_scales) ; + int Raw_Bck_Start_Time(time_bck, nb_of_time_scales) ; + int Raw_Bck_Stop_Time(time_bck, nb_of_time_scales) ; + int Laser_Shots(time, channels) ; + double Raw_Lidar_Data(time, channels, points) ; + double Background_Profile(time_bck, channels, points) ; + double DAQ_Range(channels) ; + + // global attributes: + :Measurement_ID = "20090130cc00" ; + :RawData_Start_Date = "20090130" ; + :RawData_Start_Time_UT = "000001" ; + :RawData_Stop_Time_UT = "000501" ; + :RawBck_Start_Date = "20090129" ; + :RawBck_Start_Time_UT = "235001" ; + :RawBck_Stop_Time_UT = "235301" ; + + data: + + channel_ID = 7, 5, 6, 8 ; + + Laser_Repetition_Rate = 50, 50, 50, 50 ; + + Laser_Pointing_Angle = 5 ; + + ID_Range = 1, 1, 1, 1 ; + + Scattering_Mechanism = 0, 2, 3, 1 ; + + Emitted_Wavelength = 1064, 532, 532, 532 ; + + Detected_Wavelength = 1064, 532, 532, 607 ; + + Raw_Data_Range_Resolution = 7.5, 15, 15, 15 ; + + Background_Mode = 0, 1, 1, 1 ; + + Background_Low = 0, 30000, 30000, 30000 ; + + Background_High = 500, 50000, 50000, 50000 ; + + Molecular_Calc = 0 ; + + Pressure_at_Lidar_Station = 1010 ; + + Temperature_at_Lidar_Station = 19.8 ; + + id_timescale = 1, 0, 0, 0 ; + + Dead_Time = _, 10, 10, 10 ; + + Dead_Time_Corr_Type = _, 0, 0, 0 ; + + Acquisition_Mode = 0, 1, 1, 1 ; + + Trigger_Delay = 50, 0, 0, 0 ; + + LR_Input = 1,_,_,_ ; + + DAQ_Range = 100,_,_,_ ; + + Laser_Pointing_Angle_of_Profiles = + 0, 0, + 0, 0, + 0, 0, + 0, 0, + 0, 0, + _, 0, + _, 0, + _, 0, + _, 0, + _, 0 ; + + + Raw_Data_Start_Time = + 0, 0, + 60, 30, + 120, 60, + 180, 90, + 240, 120, + _, 150, + _, 180, + _, 210, + _, 240, + _, 270 ; + + Raw_Data_Stop_Time = + 60, 30, + 120, 60, + 180, 90, + 240, 120, + 300, 150, + _, 180, + _, 210, + _, 240, + _, 270, + _, 300 ; + + + Raw_Bck_Start_Time = + 0, 0, + 60, 30, + 120, 60, + _, 90, + _, 120, + _, 150; + + + Raw_Bck_Stop_Time = + 60, 30, + 120, 60, + 180, 90, + _, 120, + _, 150, + _, 180 ; + + + Laser_Shots = + 1500, 3000, 3000, 3000, + 1500, 3000, 3000, 3000, + 1500, 3000, 3000, 3000, + 1500, 3000, 3000, 3000, + 1500, 3000, 3000, 3000, + 1500, _, _, _, + 1500, _, _, _, + 1500, _, _, _, + 1500, _, _, _, + 1500, _, _, _ ; + + + Raw_Lidar_Data = ... + + Background_Profile = ... + +Please keep in mind that in case you submit a file like the previous one +all the parameters present in it will be used by the SCC even if you +have different values for the same parameters within the SCC\_DB. If you +want to use the values already stored in SCC\_DB (this should be the +usual way to use SCC) the Raw Lidar Data input file has to be +modified as follows: + +:: + + dimensions: + points = 5000 ; + channels = 4 ; + time = UNLIMITED ; // (10 currently) + nb_of_time_scales = 2 ; + scan_angles = 1 ; + time_bck = 6 ; + variables: + int channel_ID(channels) ; + double Laser_Pointing_Angle(scan_angles) ; + double Background_Low(channels) ; + double Background_High(channels) ; + int Molecular_Calc ; + double Pressure_at_Lidar_Station ; + double Temperature_at_Lidar_Station ; + int id_timescale(channels) ; + int Laser_Pointing_Angle_of_Profiles(time, nb_of_time_scales) ; + int Raw_Data_Start_Time(time, nb_of_time_scales) ; + int Raw_Data_Stop_Time(time, nb_of_time_scales) ; + int Raw_Bck_Start_Time(time_bck, nb_of_time_scales) ; + int Raw_Bck_Stop_Time(time_bck, nb_of_time_scales) ; + int LR_Input(channels) ; + int Laser_Shots(time, channels) ; + double Raw_Lidar_Data(time, channels, points) ; + double Background_Profile(time_bck, channels, points) ; + double DAQ_Range(channels) ; + + // global attributes: + :Measurement_ID = "20090130cc00" ; + :RawData_Start_Date = "20090130" ; + :RawData_Start_Time_UT = "000001" ; + :RawData_Stop_Time_UT = "000501" ; + :RawBck_Start_Date = "20090129" ; + :RawBck_Start_Time_UT = "235001" ; + :RawBck_Stop_Time_UT = "235301" ; + + data: + + channel_ID = 7, 5, 6, 8 ; + + Laser_Pointing_Angle = 5 ; + + Background_Low = 0, 30000, 30000, 30000 ; + + Background_High = 500, 50000, 50000, 50000 ; + + Molecular_Calc = 0 ; + + Pressure_at_Lidar_Station = 1010 ; + + Temperature_at_Lidar_Station = 19.8 ; + + id_timescale = 1, 0, 0, 0 ; + + LR_Input = 1,_,_,_ ; + + DAQ_Range = 100,_,_,_ ; + + Laser_Pointing_Angle_of_Profiles = + 0, 0, + 0, 0, + 0, 0, + 0, 0, + 0, 0, + _, 0, + _, 0, + _, 0, + _, 0, + _, 0 ; + + + Raw_Data_Start_Time = + 0, 0, + 60, 30, + 120, 60, + 180, 90, + 240, 120, + _, 150, + _, 180, + _, 210, + _, 240, + _, 270 ; + + Raw_Data_Stop_Time = + 60, 30, + 120, 60, + 180, 90, + 240, 120, + 300, 150, + _, 180, + _, 210, + _, 240, + _, 270, + _, 300 ; + + + Raw_Bck_Start_Time = + 0, 0, + 60, 30, + 120, 60, + _, 90, + _, 120, + _, 150; + + + Raw_Bck_Stop_Time = + 60, 30, + 120, 60, + 180, 90, + _, 120, + _, 150, + _, 180 ; + + + Laser_Shots = + 1500, 3000, 3000, 3000, + 1500, 3000, 3000, 3000, + 1500, 3000, 3000, 3000, + 1500, 3000, 3000, 3000, + 1500, 3000, 3000, 3000, + 1500, _, _, _, + 1500, _, _, _, + 1500, _, _, _, + 1500, _, _, _, + 1500, _, _, _ ; + + + Raw_Lidar_Data = ... + + Background_Profile = ... + +This example file contains the minimum collection of mandatory +information that has to be found within the Raw Lidar Data input +file. If it is really necessary, the user can decide to add to these +mandatory parameters any number of additional parameters considered in +the previous example. + +Finally, suppose we want to make the following changes with respect to +the previous example: + +#. use a sounding file for molecular density calculation instead of “US + Standar Atmosphere 1976” + +#. supply a lidar ratio profile to use in elastic backscatter retrieval + instead of a fixed value + +#. provide a overlap function for overlap correction + +In this case we have to generate the following NetCDF additional files: + +rs_20090130cc00.nc + The name of Sounding Data file has to be computed as follows: + ``"rs_"``+``Measurement_ID`` + The structure of this file is summarized in table tab:sounding. + +ov_20090130cc00.nc + The name of Overlap file has to be computed as follows: + ``"ov_"``+``Measurement_ID`` + The structure of this file is summarized in table tab:overlap. + +lr_20090130cc00.nc + The name of Lidar Ratio file has to be computed as follows: + ``"lr_"``+``Measurement_ID`` + The structure of this file is summarized in table tab:lr. + +Moreover we need to apply the following changes to the Raw Lidar Data +input file: + +1. Change the value of the variable ``Molecular_Calc`` as follows: + + :: + + Molecular_Calc = 1 ; + + Of course the variables ``Pressure_at_Lidar_Station`` and + ``Temperature_at_Lidar_Station`` are not necessary anymore. + +2. Change the values of the array ``LR_Input`` as follows: + + :: + + LR_Input = 0,_,_,_ ; + +3. Add the global attribute ``Sounding_File_Name`` + + :: + + Sounding_File_Name = "rs_20090130cc00.nc" ; + +5. Add the global attribute ``LR_File_Name`` + + :: + + LR_File_Name = "lr_20090130cc00.nc" ; + +6. Add the global attribute ``Overlap_File_Name`` + + :: + + Overlap_File_Name = "ov_20090130cc00.nc" ; diff -r f6927689a3b2 -r 79fea4145278 docs/_build/html/_sources/tutorial.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/_build/html/_sources/tutorial.txt Fri May 11 13:25:05 2012 +0200 @@ -0,0 +1,20 @@ +.. Single Calculus Chain interface documentation master file, created by + sphinx-quickstart on Tue Feb 7 13:17:19 2012. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Tutorial +======== + +.. toctree:: + :maxdepth: 2 + + tutorial/introduction + tutorial/adding_station + tutorial/adding_system + tutorial/adding_telescopelaser + tutorial/adding_channels + tutorial/adding_products + tutorial/processing_data + + diff -r f6927689a3b2 -r 79fea4145278 docs/_build/html/_sources/tutorial/adding_channels.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/_build/html/_sources/tutorial/adding_channels.txt Fri May 11 13:25:05 2012 +0200 @@ -0,0 +1,86 @@ +Adding a channel +=============== + +After adding a system, a telescope and a laser to the database, you need to add a new channel. +To do this, click on the **HOI channels** in the *System settings* panel. +This will take you to a page with a list of all availabe channels that are connected with your lidar systems. +This list should be empty if this is the first time you add a system. + +To add a new channel to the database click on **Add HOI channel** at the top right of the screen. +This will take you to a new page were you can fill in the needed information. As before, the fields in **bold** +are mandatory and you will need to fill them before you can save you new system. + +The fileds you have to fill here are more, as many of these are used during the processing of measurements. + +.. warning:: + + There is a last step, different from the previous cases, when saving a new channel. You need to connect your channel with + a lidar system before you save, or else all your entry will be lost. Read carefully through this document (or directly + the :ref:`last section `) to avoid any problems. + + +Fill in the fields +------------------ + +To start using the single calculus chain you will need to fill the following fields: + +Name + The name of the channel ex. "355", "1064 analog" etc. + +Telescope + The telescope that is used for this channel + +Laser + The laser that is used for this channel + +Interference filter center + The center of the interference filter in nm + +Interference filter FWHM + The FWHM of the interference filter in nm + +Emission wavelength + The emission wavelength of the laser used for this channel + +Field of view + The field of view realated to this channel in mrad + +Raw range resolution + The raw range resolution of the measured data in m + +Dead time + The dead of the detector in ns. You should fill in this in case + of a photon counting detector. + +Trigger delay + The trigger delay value for the channel in ns. Fill in 0 if not needed. + +Scattering mechanism + The scattering mechanism that is involved in this channel. Select the appropriate value from the drop-down list. + +Dead time correction type + The dead time correction type to be applied. Select *Not defined* if none needs to be defined. + +Background mode + The way to calculate the singal background. Select *Not defined* if none needs to be defined. + +Signal type + The type of the singal that is measured, ex. "elT" for total elastic, "vrRN2" for vibrational-rotational + Raman signal from Nitrogen melecules etc. See :ref:`signal-types` for details. + +Detection mode + The detection mode of this channel. + +.. _connect-channel-to-system: + +Connecting to a system +---------------------- + +Before you finish, you need to attach your channel to one of your systems. To do this, go at the bottom of the page and +select your system from the drop-down list in the **System channels** area. + +When you are done, press the **save** button at the bottom right of the page. +This will take you back to the list of your channels. +If everything went OK your new channel you just added should appear in the list. + + diff -r f6927689a3b2 -r 79fea4145278 docs/_build/html/_sources/tutorial/adding_products.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/_build/html/_sources/tutorial/adding_products.txt Fri May 11 13:25:05 2012 +0200 @@ -0,0 +1,32 @@ +Adding products +=============== + +After completing all the information related to the your system, we need to specify which +product we need to acquire. +To do this, click on the **Products** in the *Product settings* panel. +This will take you to a page with a list of all availabe products that are connected with your stations. This list should +be empty if this is the first time you add a product. + +To add a new product to the database click on **Add Products** at the top right of the screen. +This will take you to a new page were you can fill in the needed information. As before, the fields in **bold** +are mandatory and you will need to fill them before you can save you new system. + +For now you will need to fill in the following fields: + +Product type + The type of this product. (ex. exitinction only) + +Usecase + The use-case number (an integer) based on the documentation. (ex. 0) + + +[...] + + +You can leave all the other fields empty. When you are done, press the **save** button at the bottom right of the page. +This will take you back to the list of your systems. If everything went OK your new system you just added should appear +in the list. + +We don't have to make any more changes in this part, so you can click on **Home** +on the top left of the page to return to the starting page of the *admin section*. + diff -r f6927689a3b2 -r 79fea4145278 docs/_build/html/_sources/tutorial/adding_station.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/_build/html/_sources/tutorial/adding_station.txt Fri May 11 13:25:05 2012 +0200 @@ -0,0 +1,50 @@ +Adding a station +================ + +You can change all your settings throught the *admin section* of the website. +To reach it, click on **Station admin** link at the main menu of the site. + +.. note:: + + You will need to have an account with admin access privilages to access this part of the site. + See :ref:`user-management` for details. + +The first you have to do to start using the single calculus chain is to register your station. +To do this, go the the admin section and click on the **HOI stations** in the *System settings* panel. +This will take you to a page with a list of all stations that you account has access to. This list should +be empty if this is the first time you add a station. + +To add a new station to the database click on **Add HOI station** at the top right of the screen. +This will take you to a new page were you can fill in the needed information. The fields in **bold** +are mandatory and you will need to fill them before you can save you new station. + +For now you will need to fill in the following fields: + +Name + The name of the station + +Id + The earlinet call sign with exactly 2 characters. + +Institute name + The name of the institute that own the system + +Latitude + In degrees north is the latitude of the station. + +Longitude + In degrees east is the longitude of the station. + +Height asl + The altitude of the station in meters above sea level. + +PI + The name of the Principal Investigator of the station. + +You can leave all the other fields empty. When you are done, press the **save** button at the bottom right of the page. +This will take you back to the list of your stations. If everything went OK your station you just added should appear +in the list. + +We don't have to make any more changes in this part, so you can click on **Home** +on the top left of the page to return to the starting page of the *admin section*. + diff -r f6927689a3b2 -r 79fea4145278 docs/_build/html/_sources/tutorial/adding_system.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/_build/html/_sources/tutorial/adding_system.txt Fri May 11 13:25:05 2012 +0200 @@ -0,0 +1,53 @@ +Adding a system +=============== + +After adding a station to the database, we need to add a new system. +To do this, click on the **HOI systems** in the *System settings* panel. +This will take you to a page with a list of all availabe systems that are connected with your stations. This list should +be empty if this is the first time you add a system. + +.. note:: + + In the Single Calculus Chain, a *HOI System* represents a specific configuration of a lidar system. + For example, if you are operating a lidar system and you use different channels during daytime and nightime, + you will need to register *two different* systems in the database, one for each different configuration you use. + + +To add a new system to the database click on **Add HOI system** at the top right of the screen. +This will take you to a new page were you can fill in the needed information. As before, the fields in **bold** +are mandatory and you will need to fill them before you can save you new system. + +.. note:: + + Not every field that is present in the database is used in the in the Single Calculs Chain. + Many of them are part of the Handbook of Instruments. + +For now you will need to fill in the following fields: + +Name + The name of your system. + +Station (owner) + From the drop-down list, select the station which this system belongs to. + +Configuration + The name of the specific configuration. For example you could specify "night time" if the system you are registering + correspond to the night-time configuration of your system + +Pi + The principle investigator of this system + +Height asl + The altitude of the system above sea level (in meters). + +You can leave all the other fields empty. When you are done, press the **save** button at the bottom right of the page. +This will take you back to the list of your systems. If everything went OK your new system you just added should appear +in the list. + +We don't have to make any more changes in this part, so you can click on **Home** +on the top left of the page to return to the starting page of the *admin section*. + + + + + diff -r f6927689a3b2 -r 79fea4145278 docs/_build/html/_sources/tutorial/adding_telescopelaser.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/_build/html/_sources/tutorial/adding_telescopelaser.txt Fri May 11 13:25:05 2012 +0200 @@ -0,0 +1,64 @@ +Adding equipment +================ + +After adding a system to the database, we need to add at least one telescope and one laser before you add a channel. + +Telescope +--------- + +To add a new telescope, click on the **HOI telescopes** in the *System settings* panel. +This will take you to a page with a list of all availabe telescopes that are connected with your station. +This list should be empty if this is the first time you add a telescope. + +To add a new telescope to the database click on **Add HOI telescope** at the top right of the screen. +This will take you to a new page were you can fill in the needed information. Once again, the fields in **bold** +are mandatory and you will need to fill them before you can save you new telescope. + + +The fields you need to add are: + +Type + The telescope type + +Diameter + The diameter of the primary mirror in mm + +Focal length + The equivalent focal length of the telescope in mm + +Full overlap height + The height where the full overlap is achieved. + +When you are done, press the **save** button at the bottom right of the page. If no errors are present, you will return to +the telescope list page. Your new telescope should appear in the list. + + +Laser +----- + +To add a new laser, click on the **HOI Laser** in the *System settings* panel. +This will take you to a page with a list of all availabe lasers that are connected with your station. +This list should be empty if this is the first time you add a laser. + +To add a new telescope to the database click on **Add HOI laser** at the top right of the screen. +This will take you to a new page were you can fill in the needed information. The fields in **bold** +are mandatory and you will need to fill them before you can save you new telescope. + +The fields you need to add are: + +Manufacturer + The manufacturer of the telescope + +Model + The model of the telescope + +Repetition rate + The repetition rate in Hz + +Type + The type of the laser (ex. Nd:YAG) + +When you are done, press the **save** button at the bottom right of the page. If no errors are present, you will return to +the laser list page. The new laser you added should be present there. + + diff -r f6927689a3b2 -r 79fea4145278 docs/_build/html/_sources/tutorial/introduction.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/_build/html/_sources/tutorial/introduction.txt Fri May 11 13:25:05 2012 +0200 @@ -0,0 +1,10 @@ +Introduction +============ + +* The Single calculus chain is made of different modules. These modules don't interact directly but only change value in a database. +* This interface will allow Earlinet memebers to interact with parts of the database. +* One part of the interface (the "Station admin" section) permits registering a new station, registerring new lidar systems and configuration, fill in details for the channels that constitute the system and finnaly define the products (extinction, backscatter e.t.c.) that need to be calculated by the SCC. +* The second part of the interface is dedicated to the uploading of new measurement files, the configuration of the measurement specific paramters and, finally, the retrieval of the calculated products. +* Different types of users, with different level of access permissions can have access in the interface. In this way, higher level of flexibility and security can be achived. + + diff -r f6927689a3b2 -r 79fea4145278 docs/_build/html/_sources/tutorial/processing_data.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/_build/html/_sources/tutorial/processing_data.txt Fri May 11 13:25:05 2012 +0200 @@ -0,0 +1,4 @@ +Processing data +=============== + +Walk-through of how to upload a file and seeing the results. diff -r f6927689a3b2 -r 79fea4145278 docs/_build/html/_sources/user_management.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/_build/html/_sources/user_management.txt Fri May 11 13:25:05 2012 +0200 @@ -0,0 +1,13 @@ +.. _user-management: + +User management +=============== +Acount types +------------ + +Requesting a new account +------------------------ + +User account security +--------------------- + diff -r f6927689a3b2 -r 79fea4145278 docs/_build/html/_static/ajax-loader.gif Binary file docs/_build/html/_static/ajax-loader.gif has changed diff -r f6927689a3b2 -r 79fea4145278 docs/_build/html/_static/basic.css --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/_build/html/_static/basic.css Fri May 11 13:25:05 2012 +0200 @@ -0,0 +1,540 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar input[type="text"] { + width: 170px; +} + +div.sphinxsidebar input[type="submit"] { + width: 30px; +} + +img { + border: 0; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li div.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable dl, table.indextable dd { + margin-top: 0; + margin-bottom: 0; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- general body styles --------------------------------------------------- */ + +a.headerlink { + visibility: hidden; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.field-list ul { + padding-left: 1em; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px 7px 0 7px; + background-color: #ffe; + width: 40%; + float: right; +} + +p.sidebar-title { + font-weight: bold; +} + +/* -- topics ---------------------------------------------------------------- */ + +div.topic { + border: 1px solid #ccc; + padding: 7px 7px 0 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +div.admonition dl { + margin-bottom: 0; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + border: 0; + border-collapse: collapse; +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +table.field-list td, table.field-list th { + border: 0 !important; +} + +table.footnote td, table.footnote th { + border: 0 !important; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +dl { + margin-bottom: 15px; +} + +dd p { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dt:target, .highlighted { + background-color: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.refcount { + color: #060; +} + +.optional { + font-size: 1.3em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +td.linenos pre { + padding: 5px 0px; + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + margin-left: 0.5em; +} + +table.highlighttable td { + padding: 0 0.5em 0 0.5em; +} + +tt.descname { + background-color: transparent; + font-weight: bold; + font-size: 1.2em; +} + +tt.descclassname { + background-color: transparent; +} + +tt.xref, a tt { + background-color: transparent; + font-weight: bold; +} + +h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff -r f6927689a3b2 -r 79fea4145278 docs/_build/html/_static/comment-bright.png Binary file docs/_build/html/_static/comment-bright.png has changed diff -r f6927689a3b2 -r 79fea4145278 docs/_build/html/_static/comment-close.png Binary file docs/_build/html/_static/comment-close.png has changed diff -r f6927689a3b2 -r 79fea4145278 docs/_build/html/_static/comment.png Binary file docs/_build/html/_static/comment.png has changed diff -r f6927689a3b2 -r 79fea4145278 docs/_build/html/_static/doctools.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/_build/html/_static/doctools.js Fri May 11 13:25:05 2012 +0200 @@ -0,0 +1,247 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for all documentation. + * + * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/** + * select a different prefix for underscore + */ +$u = _.noConflict(); + +/** + * make the code below compatible with browsers without + * an installed firebug like debugger +if (!window.console || !console.firebug) { + var names = ["log", "debug", "info", "warn", "error", "assert", "dir", + "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", + "profile", "profileEnd"]; + window.console = {}; + for (var i = 0; i < names.length; ++i) + window.console[names[i]] = function() {}; +} + */ + +/** + * small helper function to urldecode strings + */ +jQuery.urldecode = function(x) { + return decodeURIComponent(x).replace(/\+/g, ' '); +} + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s == 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * small function to check if an array contains + * a given item. + */ +jQuery.contains = function(arr, item) { + for (var i = 0; i < arr.length; i++) { + if (arr[i] == item) + return true; + } + return false; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node) { + if (node.nodeType == 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && !jQuery(node.parentNode).hasClass(className)) { + var span = document.createElement("span"); + span.className = className; + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this); + }); + } + } + return this.each(function() { + highlight(this); + }); +}; + +/** + * Small JavaScript module for the documentation. + */ +var Documentation = { + + init : function() { + this.fixFirefoxAnchorBug(); + this.highlightSearchWords(); + this.initIndexTable(); + }, + + /** + * i18n support + */ + TRANSLATIONS : {}, + PLURAL_EXPR : function(n) { return n == 1 ? 0 : 1; }, + LOCALE : 'unknown', + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext : function(string) { + var translated = Documentation.TRANSLATIONS[string]; + if (typeof translated == 'undefined') + return string; + return (typeof translated == 'string') ? translated : translated[0]; + }, + + ngettext : function(singular, plural, n) { + var translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated == 'undefined') + return (n == 1) ? singular : plural; + return translated[Documentation.PLURALEXPR(n)]; + }, + + addTranslations : function(catalog) { + for (var key in catalog.messages) + this.TRANSLATIONS[key] = catalog.messages[key]; + this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); + this.LOCALE = catalog.locale; + }, + + /** + * add context elements like header anchor links + */ + addContextElements : function() { + $('div[id] > :header:first').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this headline')). + appendTo(this); + }); + $('dt[id]').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this definition')). + appendTo(this); + }); + }, + + /** + * workaround a firefox stupidity + */ + fixFirefoxAnchorBug : function() { + if (document.location.hash && $.browser.mozilla) + window.setTimeout(function() { + document.location.href += ''; + }, 10); + }, + + /** + * highlight the search words provided in the url in the text + */ + highlightSearchWords : function() { + var params = $.getQueryParameters(); + var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; + if (terms.length) { + var body = $('div.body'); + window.setTimeout(function() { + $.each(terms, function() { + body.highlightText(this.toLowerCase(), 'highlighted'); + }); + }, 10); + $('') + .appendTo($('#searchbox')); + } + }, + + /** + * init the domain index toggle buttons + */ + initIndexTable : function() { + var togglers = $('img.toggler').click(function() { + var src = $(this).attr('src'); + var idnum = $(this).attr('id').substr(7); + $('tr.cg-' + idnum).toggle(); + if (src.substr(-9) == 'minus.png') + $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); + else + $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); + }).css('display', ''); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { + togglers.click(); + } + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords : function() { + $('#searchbox .highlight-link').fadeOut(300); + $('span.highlighted').removeClass('highlighted'); + }, + + /** + * make the url absolute + */ + makeURL : function(relativeURL) { + return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; + }, + + /** + * get the current relative url + */ + getCurrentURL : function() { + var path = document.location.pathname; + var parts = path.split(/\//); + $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { + if (this == '..') + parts.pop(); + }); + var url = parts.join('/'); + return path.substring(url.lastIndexOf('/') + 1, path.length - 1); + } +}; + +// quick alias for translations +_ = Documentation.gettext; + +$(document).ready(function() { + Documentation.init(); +}); diff -r f6927689a3b2 -r 79fea4145278 docs/_build/html/_static/down-pressed.png Binary file docs/_build/html/_static/down-pressed.png has changed diff -r f6927689a3b2 -r 79fea4145278 docs/_build/html/_static/down.png Binary file docs/_build/html/_static/down.png has changed diff -r f6927689a3b2 -r 79fea4145278 docs/_build/html/_static/file.png Binary file docs/_build/html/_static/file.png has changed diff -r f6927689a3b2 -r 79fea4145278 docs/_build/html/_static/jquery.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/_build/html/_static/jquery.js Fri May 11 13:25:05 2012 +0200 @@ -0,0 +1,154 @@ +/*! + * jQuery JavaScript Library v1.4.2 + * http://jquery.com/ + * + * Copyright 2010, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2010, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Sat Feb 13 22:33:48 2010 -0500 + */ +(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/, +Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&& +(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this, +a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b=== +"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this, +function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b
a"; +var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected, +parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent= +false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n= +s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true, +applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando]; +else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this, +a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b=== +w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i, +cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected= +c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed"); +a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g, +function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split("."); +k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a), +C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B=0){a.type= +e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&& +f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive; +if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data", +e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a, +"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a, +d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, +e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift(); +t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D|| +g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()}, +CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m, +g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)}, +text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}}, +setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return hl[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h= +h[3];l=0;for(m=h.length;l=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m=== +"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g, +h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&& +q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML=""; +if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="

";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}(); +(function(){var g=s.createElement("div");g.innerHTML="
";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}: +function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f0)for(var j=d;j0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j= +{},i;if(f&&a.length){e=0;for(var o=a.length;e-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a=== +"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode", +d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")? +a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType=== +1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/"},F={option:[1,""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div
","
"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= +c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, +wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})}, +prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b, +this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); +return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja, +""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]); +return this}else{e=0;for(var j=d.length;e0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["", +""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]===""&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e= +c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]? +c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja= +function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter= +Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a, +"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f= +a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b= +a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=//gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!== +"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("
").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this}, +serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), +function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href, +global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&& +e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)? +"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache=== +false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B= +false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since", +c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E|| +d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x); +g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status=== +1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b=== +"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional; +if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration=== +"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]|| +c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start; +this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now= +this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem, +e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b
"; +a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b); +c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a, +d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top- +f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset": +"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in +e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window); diff -r f6927689a3b2 -r 79fea4145278 docs/_build/html/_static/minus.png Binary file docs/_build/html/_static/minus.png has changed diff -r f6927689a3b2 -r 79fea4145278 docs/_build/html/_static/nature.css --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/_build/html/_static/nature.css Fri May 11 13:25:05 2012 +0200 @@ -0,0 +1,245 @@ +/* + * nature.css_t + * ~~~~~~~~~~~~ + * + * Sphinx stylesheet -- nature theme. + * + * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +@import url("basic.css"); + +/* -- page layout ----------------------------------------------------------- */ + +body { + font-family: Arial, sans-serif; + font-size: 100%; + background-color: #111; + color: #555; + margin: 0; + padding: 0; +} + +div.documentwrapper { + float: left; + width: 100%; +} + +div.bodywrapper { + margin: 0 0 0 230px; +} + +hr { + border: 1px solid #B1B4B6; +} + +div.document { + background-color: #eee; +} + +div.body { + background-color: #ffffff; + color: #3E4349; + padding: 0 30px 30px 30px; + font-size: 0.9em; +} + +div.footer { + color: #555; + width: 100%; + padding: 13px 0; + text-align: center; + font-size: 75%; +} + +div.footer a { + color: #444; + text-decoration: underline; +} + +div.related { + background-color: #6BA81E; + line-height: 32px; + color: #fff; + text-shadow: 0px 1px 0 #444; + font-size: 0.9em; +} + +div.related a { + color: #E2F3CC; +} + +div.sphinxsidebar { + font-size: 0.75em; + line-height: 1.5em; +} + +div.sphinxsidebarwrapper{ + padding: 20px 0; +} + +div.sphinxsidebar h3, +div.sphinxsidebar h4 { + font-family: Arial, sans-serif; + color: #222; + font-size: 1.2em; + font-weight: normal; + margin: 0; + padding: 5px 10px; + background-color: #ddd; + text-shadow: 1px 1px 0 white +} + +div.sphinxsidebar h4{ + font-size: 1.1em; +} + +div.sphinxsidebar h3 a { + color: #444; +} + + +div.sphinxsidebar p { + color: #888; + padding: 5px 20px; +} + +div.sphinxsidebar p.topless { +} + +div.sphinxsidebar ul { + margin: 10px 20px; + padding: 0; + color: #000; +} + +div.sphinxsidebar a { + color: #444; +} + +div.sphinxsidebar input { + border: 1px solid #ccc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar input[type=text]{ + margin-left: 20px; +} + +/* -- body styles ----------------------------------------------------------- */ + +a { + color: #005B81; + text-decoration: none; +} + +a:hover { + color: #E32E00; + text-decoration: underline; +} + +div.body h1, +div.body h2, +div.body h3, +div.body h4, +div.body h5, +div.body h6 { + font-family: Arial, sans-serif; + background-color: #BED4EB; + font-weight: normal; + color: #212224; + margin: 30px 0px 10px 0px; + padding: 5px 0 5px 10px; + text-shadow: 0px 1px 0 white +} + +div.body h1 { border-top: 20px solid white; margin-top: 0; font-size: 200%; } +div.body h2 { font-size: 150%; background-color: #C8D5E3; } +div.body h3 { font-size: 120%; background-color: #D8DEE3; } +div.body h4 { font-size: 110%; background-color: #D8DEE3; } +div.body h5 { font-size: 100%; background-color: #D8DEE3; } +div.body h6 { font-size: 100%; background-color: #D8DEE3; } + +a.headerlink { + color: #c60f0f; + font-size: 0.8em; + padding: 0 4px 0 4px; + text-decoration: none; +} + +a.headerlink:hover { + background-color: #c60f0f; + color: white; +} + +div.body p, div.body dd, div.body li { + line-height: 1.5em; +} + +div.admonition p.admonition-title + p { + display: inline; +} + +div.highlight{ + background-color: white; +} + +div.note { + background-color: #eee; + border: 1px solid #ccc; +} + +div.seealso { + background-color: #ffc; + border: 1px solid #ff6; +} + +div.topic { + background-color: #eee; +} + +div.warning { + background-color: #ffe4e4; + border: 1px solid #f66; +} + +p.admonition-title { + display: inline; +} + +p.admonition-title:after { + content: ":"; +} + +pre { + padding: 10px; + background-color: White; + color: #222; + line-height: 1.2em; + border: 1px solid #C6C9CB; + font-size: 1.1em; + margin: 1.5em 0 1.5em 0; + -webkit-box-shadow: 1px 1px 1px #d8d8d8; + -moz-box-shadow: 1px 1px 1px #d8d8d8; +} + +tt { + background-color: #ecf0f3; + color: #222; + /* padding: 1px 2px; */ + font-size: 1.1em; + font-family: monospace; +} + +.viewcode-back { + font-family: Arial, sans-serif; +} + +div.viewcode-block:target { + background-color: #f4debf; + border-top: 1px solid #ac9; + border-bottom: 1px solid #ac9; +} \ No newline at end of file diff -r f6927689a3b2 -r 79fea4145278 docs/_build/html/_static/plus.png Binary file docs/_build/html/_static/plus.png has changed diff -r f6927689a3b2 -r 79fea4145278 docs/_build/html/_static/pygments.css --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/_build/html/_static/pygments.css Fri May 11 13:25:05 2012 +0200 @@ -0,0 +1,62 @@ +.highlight .hll { background-color: #ffffcc } +.highlight { background: #eeffcc; } +.highlight .c { color: #408090; font-style: italic } /* Comment */ +.highlight .err { border: 1px solid #FF0000 } /* Error */ +.highlight .k { color: #007020; font-weight: bold } /* Keyword */ +.highlight .o { color: #666666 } /* Operator */ +.highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #007020 } /* Comment.Preproc */ +.highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #FF0000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #303030 } /* Generic.Output */ +.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #0040D0 } /* Generic.Traceback */ +.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #007020 } /* Keyword.Pseudo */ +.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #902000 } /* Keyword.Type */ +.highlight .m { color: #208050 } /* Literal.Number */ +.highlight .s { color: #4070a0 } /* Literal.String */ +.highlight .na { color: #4070a0 } /* Name.Attribute */ +.highlight .nb { color: #007020 } /* Name.Builtin */ +.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */ +.highlight .no { color: #60add5 } /* Name.Constant */ +.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */ +.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #007020 } /* Name.Exception */ +.highlight .nf { color: #06287e } /* Name.Function */ +.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */ +.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #bb60d5 } /* Name.Variable */ +.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mf { color: #208050 } /* Literal.Number.Float */ +.highlight .mh { color: #208050 } /* Literal.Number.Hex */ +.highlight .mi { color: #208050 } /* Literal.Number.Integer */ +.highlight .mo { color: #208050 } /* Literal.Number.Oct */ +.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */ +.highlight .sc { color: #4070a0 } /* Literal.String.Char */ +.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #4070a0 } /* Literal.String.Double */ +.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */ +.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */ +.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */ +.highlight .sx { color: #c65d09 } /* Literal.String.Other */ +.highlight .sr { color: #235388 } /* Literal.String.Regex */ +.highlight .s1 { color: #4070a0 } /* Literal.String.Single */ +.highlight .ss { color: #517918 } /* Literal.String.Symbol */ +.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */ +.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */ +.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */ +.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */ +.highlight .il { color: #208050 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff -r f6927689a3b2 -r 79fea4145278 docs/_build/html/_static/searchtools.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/_build/html/_static/searchtools.js Fri May 11 13:25:05 2012 +0200 @@ -0,0 +1,560 @@ +/* + * searchtools.js_t + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilties for the full-text search. + * + * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words, hlwords is the list of normal, unstemmed + * words. the first one is used to find the occurance, the + * latter for highlighting it. + */ + +jQuery.makeSearchSummary = function(text, keywords, hlwords) { + var textLower = text.toLowerCase(); + var start = 0; + $.each(keywords, function() { + var i = textLower.indexOf(this.toLowerCase()); + if (i > -1) + start = i; + }); + start = Math.max(start - 120, 0); + var excerpt = ((start > 0) ? '...' : '') + + $.trim(text.substr(start, 240)) + + ((start + 240 - text.length) ? '...' : ''); + var rv = $('
').text(excerpt); + $.each(hlwords, function() { + rv = rv.highlightText(this, 'highlighted'); + }); + return rv; +} + + +/** + * Porter Stemmer + */ +var Stemmer = function() { + + var step2list = { + ational: 'ate', + tional: 'tion', + enci: 'ence', + anci: 'ance', + izer: 'ize', + bli: 'ble', + alli: 'al', + entli: 'ent', + eli: 'e', + ousli: 'ous', + ization: 'ize', + ation: 'ate', + ator: 'ate', + alism: 'al', + iveness: 'ive', + fulness: 'ful', + ousness: 'ous', + aliti: 'al', + iviti: 'ive', + biliti: 'ble', + logi: 'log' + }; + + var step3list = { + icate: 'ic', + ative: '', + alize: 'al', + iciti: 'ic', + ical: 'ic', + ful: '', + ness: '' + }; + + var c = "[^aeiou]"; // consonant + var v = "[aeiouy]"; // vowel + var C = c + "[^aeiouy]*"; // consonant sequence + var V = v + "[aeiou]*"; // vowel sequence + + var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + + +/** + * Search Module + */ +var Search = { + + _index : null, + _queued_query : null, + _pulse_status : -1, + + init : function() { + var params = $.getQueryParameters(); + if (params.q) { + var query = params.q[0]; + $('input[name="q"]')[0].value = query; + this.performSearch(query); + } + }, + + loadIndex : function(url) { + $.ajax({type: "GET", url: url, data: null, success: null, + dataType: "script", cache: true}); + }, + + setIndex : function(index) { + var q; + this._index = index; + if ((q = this._queued_query) !== null) { + this._queued_query = null; + Search.query(q); + } + }, + + hasIndex : function() { + return this._index !== null; + }, + + deferQuery : function(query) { + this._queued_query = query; + }, + + stopPulse : function() { + this._pulse_status = 0; + }, + + startPulse : function() { + if (this._pulse_status >= 0) + return; + function pulse() { + Search._pulse_status = (Search._pulse_status + 1) % 4; + var dotString = ''; + for (var i = 0; i < Search._pulse_status; i++) + dotString += '.'; + Search.dots.text(dotString); + if (Search._pulse_status > -1) + window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something + */ + performSearch : function(query) { + // create the required interface elements + this.out = $('#search-results'); + this.title = $('

' + _('Searching') + '

').appendTo(this.out); + this.dots = $('').appendTo(this.title); + this.status = $('

').appendTo(this.out); + this.output = $('