ArtsBCI Database Documentation

Karl O. Pinc

The Meme Factory, Inc.
The ArtsBCI Team

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".


Table of Contents
About this document
The Database Server and other software
Conventions used in this document
Design decisions and conventions
Databases
ER Diagram
System tables
Support tables
Main Tables
GNU Free Documentation License

About this document

This document describes the ArtsBCI database, it's design and capabilities. It is not intended as a procedure manual describing the practices, procedures, and specific data values needed to use the database but rather as a technical reference manual. There may even be some portions or features of the database which are not in current use.

This document should have a companion document which describes how the database features are being used, which particular data values and codes should be used under what conditions, and other procedures involved in the actual operation and use of the database.

The administrator of the database should read the section on System Tables as this contains important information on managing the database.


The Database Server and other software

The ArtsBCI database is implemented in the PostgreSQL relational database.

This documentation was written in the DocBook structured document writing system using the toolsets commonly available on GNU/Linux computing platform. The Dia diagramming tool was used to draw the diagrams.


Conventions used in this document

All TABLENAMES are written entirely in upper case, as are DATABASE names.

All Column names are written with their first letter capitalized.

Descriptions of columns begin with their PostgreSQL data type in parenthesis. For detailed information on these datatypes see the PostgreSQL documentation (e.g. PostgreSQL 7.2 Documentation, Chapter 3. Data Types)

Following the datatype a number of other significant attributes of the column may also appear in parenthesis. If the column contains a metric, the units of measurement are indicated. If the column may contain a null value, the word "null" appears.

All columns not explicitly noted as allowing null values must contain a data value. Textual fields can contain no text, although in most cases they probably should not. An empty textual field does not count as a null value.


Design decisions and conventions


Table names

The intention is that table names be plural nouns, for consistency and the better to speak about the multiple rows contained in each table. Some exceptions to this rule have been made by general consensus of the team members.


Identifiers

All rows of all tables are uniquely identified with an id. Almost all of the ids are positive integers (one is textual.) The integer ids are automatically generated by the database when new rows are inserted into the tables. The generated ids are sequential, each id within a table is one larger than that last.

Note

The data types this document associates with the tables' Id columns are not necessarily those used in the CREATE TABLE statement used to instantiate the table, often the SERIAL datatype is used in the actual CREATE TABLE statement. The data types this document associates with ids indicates how much storage is used by the Id, and consequently the range of possible values.

For further information on the automatic generation of ids see the PostgreSQL Official Documentation or the questions regarding serial/auto-incrementing in the PostgreSQL FAQ.


Databases

The data of the ArtsBCI project is stored in two different databases. The raw data as collected from the ARUs is kept in one database, and all the other data is kept in another. Two databases are used because data is entered into each database in a different fashion, one automated the other not, and the backup and replication needs of the two databases are consequently different.


MANAGEMENTDB

This database holds all the information necessary to keep track of what is what and what is where so that the project can run smoothly. All the data but that collected by automated systems is kept in this database.


RAWDB

This database holds raw data automatically collected by automated systems.


ER Diagram

An entity-relationship (ER) diagram shows the entities (tables) of the database and the relationship between them. Strictly speaking the diagram below is not a true entity-relationship diagram, as it is intended to document the implementation of the database rather than it's abstract structure.

The ER diagram is supplied to provide a convenient overview of the database and should be particularly useful in the construction of database queries. Maintainers of the database should note whether the endpoints of the relationship arrows are solid or empty as this describes which rows must be inserted into the database first, before the rows which reference them.

ArtsBCI Entity Relationship Diagram

ArtsBCI Entity Relationship Diagram


System tables

System tables are those used in the administration of the database.


PEOPLE

Contains one row for every person who has ever used the system. This rows in this table represent the people who have performed the actions recorded in the database. Anyone who has ever entered data into the system, tagged an animal, owns a transmitter or has otherwise been recorded elsewhere in the database, must have a row in this table. It follows that these rows cannot ever be removed from the table or the database will lose it's record of who played these roles.

Every row in this table may, and probably should, have a corresponding row in the pg_shadow table, that is each row should correspond with a PostgreSQL username. This table exists because the pg_shadow table has no column to hold a textual description of the user.

It is possible to have a row in the PEOPLE table without a corresponding row in the pg_shadow table. Such rows would represent people who do not have access to the database but do perform actions recorded within the database.

Tip

It is good practice to add a row to the PEOPLE table for every PostgreSQL user, and to never delete these rows.

Note

Referenced by TAGEVENTS and TRANSMITTERS.

The date columns are for informational use only, to assist in identifying individuals currently involved with the project. The database contains no record of time intervals of dis-association with the project for those individuals who leave and then re-join the project.


Username

(text) The PostgreSQL username of the individual. The value must be a username as recorded in an existing row of the pg_shadow PostgreSQL system catalog.


Descr

(text) A description of the person. The person's name and perhaps a short title or other description of their role in the project.


Start_date

(date) The date the person began association with the project/database. It is recommended this be unchanged once entered.


End_date

(date) (null) The date the person ended their association with the project/database. Persons currently associated with the project should have a null value in this column.


The pg_shadow system catalog and username administration

The PostgreSQL system records the usernames of it's users in this table. It is recommended that PostgreSQL usernames never be deleted, instead remove all permissions from the username. This will prevent the inadvertent creation of a username identical to a past username the the resultant confusion of the old individual with the new.

Tip

It is good practice to create a PEOPLE row before creating a new pg_shadow row, a new PostgreSQL user. This practice will prevent the creation of a pg_shadow row for a new user when there already exists a PEOPLE row for an old user having that username.

Note

Referenced by PEOPLE.

For further information see the PostgreSQL Technical Documentation Web Site, the PostgreSQL Official Documentation Set, or the section on Database Users and Permissions of a specific PostgreSQL version (here version 7.2).


Support tables

Support tables are tables with little purpose other than to provide an efficient means of encoding commonly used data values. For example, the the SEXES table could contain a row which relates the value "Male" to the number 1. The number 1 would then be used elsewhere in the database to represent the value "Male". Support tables often have only two columns Id and Descr (description) and in any case support tables generally have one of a few, simple, sets of column names.


SPECIES

Contains exactly one row for each species of interest.

Note

Referenced by ANIMALS.


Id

(integer) A unique positive integer which identifies the species.


Descr

(text) The name of the species.


Genus

(smallint) The genus to which the species belongs. The value must be an Id of an existing row in the GENUS table.


GENUS

Contains one row for every genus of interest.

Note

Referenced by SPECIES.


Id

(smallint) A unique positive integer which identifies the genus.


Descr

(text) The name of the genus.


Family

(smallint) The family to which the genus belongs. The value must be an Id of an existing row in the FAMILY table.


FAMILY

Contains one row for every family of interest. In an effort to keep things simple there are no tables for class, order, and phylum so any required description of these categories must be entered in the corresponding FAMILY row.

Note

Referenced by GENUS.


Id

(smallint) A unique positive integer which identifies the family.


Descr

(text) The name of the family and it's class, order, and phylum.


Kingdom

(smallint) The kingdom to which the family belongs. The value must be an Id of an existing row in the KINGDOM table.


KINGDOM

Contains one row for every kingdom of interest.

Note

Referenced by FAMILY.


Id

(smallint) A unique positive integer identifying the kingdom.


Descr

(text) The name of the kingdom.


COMMTYPES

One row for every type of communication link which may be deployed at an ARU.

Note

Referenced by ARUDEPLOYS.


Id

(smallint) A unique positive integer identifying the type of communication link.


Descr

(text) A description of the kind of communication link in use.


SEXES

One row for every sexual classification.

Note

Referenced by ANIMALS.


Id

(smallint) A unique positive integer identifying the sexual classification.


Descr

(text) The description of the sexual classification.


TAGEVENTTYPES

One row for every type of event where an animals tag is physically manipulated. Examples may include: attaching a transmitter, removing a transmitter, etc.

Note

Referenced by TAGEVENTS.


Id

(smallint) A unique positive integer identifying the type of tagging activity.


Descr

(text) A description of the type of tagging activity.


Main Tables

The main tables are those which hold the data that justify the existence of the database.


ANIMALS

One row per individual animal or other object which may be tagged. Note that the ANIMALS row must exist before a record of the animal's tagging can be recorded in ANIMALTAGS. So, there is no in-built requirement that every ANIMALS row represent a tagged animal, although those rows which are not linked with ANIMALTAGS are relatively useless.

Note

Referenced by ANIMALTAGS.


Id int

(integer) Unique positive integer used to identify the animal.


Species (SPECIES)

(integer) The species of the animal. The value must be an Id of an existing row in the SPECIES table.


Sex (SEXES)

(smallint) The sex of the animal. The value must be an Id of an existing row in the SEXES table.


TAGEVENTS

One row for each occasion when the animal, transmitter, and a person are all in the same place at the same time; as happens when an animal is tagged, untagged, the transmitter is checked, or whatnot. Each row is the record of one of these events, a record of what happened when a particular collar was manipulated.

It is expected that each animal/transmitter combination (ANIMALTAGS) will usually have two TAGEVENTS rows associated with it, one for the attachment of the tag and one for the removal/recovery of the tag.


Id

(integer) A unique positive integer identifying the tagging event.


Tagging

(integer) The transmitter/animal combination associated with the tag event. The value must be an Id of an existing row in the ANIMALTAGS table.


Note

(text) Notes on the tag event. If these notes are more than a few lines long the content of this column should be a reference to some other document.


Event

(integer) The type of tagging event. The value must be an Id of an existing row in the TAGEVENTTYPES table.


Daytime

(timestamp, w. time zone) The date and time of the tagging event.


Weight

(integer) (grams) The weight in grams of the animal at the time of the tagging event.


Xloc

(integer) (utm coordinate) The X coordinate location in utm units. An integer between 0 and 1,000,000 (inclusive). The number of meters east of the Zone origin.


Yloc

(integer) (utm coordinate) The Y coordinate location in utm units. An integer between 0 and 1,000,000 (inclusive). The number of meters north of the Zone origin.


Zone

(varchar(3)) The 3 character UTM zone which determines the origin of the XY coordinate grid. This column may contain 3 or fewer characters. this.


Tagged_by

(text) The person who performed the tagging; the person involved in the tag event. The value must be an Username of an existing row in the PEOPLE table.


Entered_by

(text) The person who entered the row into the database. The value must be an Username of an existing row in the PEOPLE table.

As PostgreSQL knows who is using the database this column is assigned automatically upon insert.


SENSORS

One row for every sensor. Multiple sensors may be associated with a single transmitter.

Transmitters always have one or more sensors from which they obtain the readings which they transmit. Each sensor may have up to two states, perhaps on and off, or normal and sensitive. A sensor may report discrete events (e.g. each heartbeat) or a continuum of values (e.g. avg heart rate over the last minute.)

The transmitters and their sensors are different enough from each other that there are no general classification of sensors. Each row in SENSORS represents a specific sensor of a specific transmitter.

It is worth noting that the ER Diagram is not 100% accurate in it's representation of the database integrity rules associated with the SENSORS table. According to the diagram, each row in TRANSMITTERS requires at least one corresponding row in SENSORS, and each row in SENSORS requires exactly one corresponding row in TRANSMITTERS. As it is not possible to insert rows into TRANSMITTERS and SENSORS at the same time, the implementation of the database rules do not require a row exist in TRANSMITTERS for each row in SENSORS, although care should be taken by the database users to ensure that one does exist. This allows data to be added to the database by first be inserting a row in SENSORS and then inserting a corresponding row in TRANSMITTERS.

Tip

Details of the sensors, their calibration and sensitivity is recorded outside the database in a file so the SENSORS rows themselves should not contain long descriptions detailing this information. This file is recorded in the Filename column of the TRANSMITTERS table.

Note

See also: TRANSMITTERS.


Id

(integer) A positive integer which uniquely identifies the sensor.


Transmitter

(integer) The Id of the transmitter which reports the sensor's readings. (See TRANSMITTERS.)

See the description of the SENSORS table above for further discussion.


Descr

(text) A description of the sensor.


Dc

(char(1)) This column records whether the sensor reports discrete or continuous values. A value of 'D' indicates the sensor reports discrete values. A value of 'C' indicates the sensor reports continuous values. No other values are allowed.


State1

(text) A description of the first (or only) state the sensor may be placed in (have.) This description should include the sensitivity of the sensor and if the sensor is continuous the granularity of the generated signal.


State2

(text) A description of the second state the sensor may be placed in. This description should include the sensitivity of the sensor and if the sensor is continuous the granularity of the generated signal. If the sensor has no second state this column may contain no text.


Value1

(text) The value, including units, the sensor reports when it is in state 1. If the sensor is continuous this column should show the range of possible values.


Value2

(text) The value, including units, the sensor reports when it is in state 2. If the sensor is continuous this column should show the range of possible values. If the sensor has no second state this column may contain no text.


TRANSMITTERS

One row for every physical transmitter.

Note

Referenced by ANIMALTAGS. See also SENSORS.


Id

(integer) A positive integer which uniquely identifies the transmitter.


SerialNum

(varchar(15)) The serial number of the transmitter. This column may contain up to 15 characters.


Filename

(text) Fully qualified pathname of a file which describes the capabilities, specifications, calibration curves, and other gory details of the transmitter and it's sensors.


Trans_model

(text) Transmission model used by the transmitter. (What is this, AM or FM? Somebody please tell me more. Are there specific pre-determined values one of which this column should contain?)


Freq

(integer) The transmitter frequency, in KHz. Must be a positive number.


Pulse_width

(smallint) The pulse width of the transmitter, in milliseconds. Must be a positive number (<= 32767 by virture of it's datatype.)


Max_pulse_interval

(smallint) Maximum pulse interval of the transmitter, in milliseconds. Must be a positive number (<= 32767 by virtue of it's datatype.)


Make

(text) Make (manufacturer) of the transmitter. The database cannot ensure the consistency of this information as there the values are not restricted to those defined by a support table. Consequently, operators must take care when entering data into this column and the result of querying on the column are problematic.


Model

(text) Model (manufacturer's model name) of the transmitter. The database cannot ensure the consistency of this information as there the values are not restricted to those defined by a support table. Consequently, operators must take care when entering data into this column and the result of querying on the column are problematic.


Weight

(smallint) The weight of the transmitter in grams. The value must be positive. This weight does not include whatever is used to affix the transmitter to the animal unless the attachment device is an integral part of the transmitter itself.


Antenna_len

(smallint) The length of the transmitter's antenna, in mm. The value must be non-negative.


Antenna_width

(smallint) The width of the transmitter's antenna, in mm. The value must be non-negative.


Expected_lifetime

(smallint) The expected lifetime of the transmitter, in days. The value must be positive.


Arrival_date

(date) The date when the antenna arrived on-site. If the arrival date is unknown, Christ's birthday, Jan 01, 0001 should be used. (Right?)


Owner

(text) The person to whom the transmitter belongs. The value must be an Username of an existing row in the PEOPLE table.


Erp

(smallint) The effective radiated power (ERP) of the transmitter, in dBm.


ANIMALTAGS

One row for every tagging of an animal, that is, for every pairing of animal with transmitter. Each ANIMALTAGS row represents the time period during which a specific transmitter is affixed to a specific animal. The rows of this table are the connection between the animals and the transmitters with which they are tagged.

Animals that are tagged more than once will have one row in ANIMALTAGS for each tagging, even if the same transmitter is later used to re-tag the animal.

Note

Referenced by TAGEVENTS. See also: TRANSMITTERS and ANIMALS.


Id

(integer) A positive integer which uniquely identifies the combination of animal and transmitter.


Animal

(integer) The animal which has been tagged. The value must be an Id of an existing row in the ANIMALS table.


Transmitter

(integer) The transmitter used to tag the animal. The value must be an Id of an existing row in the TRANSMITTERS table.


ARU

One row for every Automated Reception Unit (ARU). Note that an ARU may be deployed more than once.

Note

Referenced by ARUDEPLOYS.


Id

(smallint) A positive integer uniquely identifying the ARU.


Descr

(text) A description of the ARU.


ARUDEPLOYS

One row for every deployment of an ARU at a location.

Note

See also: ARU, ARULOCS, and COMMTYPES.


Id

(smallint) A positive integer uniquely identifying a particular deployment of a particular ARU at a location.


Start_Date

(date) The date on which the ARU went in service.


End_Date

(date) (null) The date on which the ARU went out of service. If the ARU is still in service the value of this column should be null.


ARU

(integer) The ARU deployed at the location. The value must be an Id of an existing row in the ARU table.


Aruloc

(smallint) The location where the ARU was deployed. The value must be an Id of an existing row in the ARULOCS table.


Height

(smallint) The height of the ARU deployment tower, in meters. The value of this column must be non-negative.


Antenna

(text) A description of the antenna used in the ARU deployment. Note that if an antenna changes a new ARUDEPLOYS row should be created.


Moved_by

(text) The person who deployed the ARU. The value must be an Username of an existing row in the PEOPLE table.


Notes

(text) Notes on the ARU deployment.


Comm_type

(smallint) The type of communication link used to communicate with the ARU. Note that if the Comm_type changes a new ARUDEPLOYS row should be created. The value must be an Id of an existing row in the COMMTYPES table.


Filename

(text) Fully qualified pathname of a file which describes the capabilities, specifications, calibration curves, and other gory details of the ARU deployment.


ARULOCS

One row for every location where ARUs are or have been deployed.

Note

Referenced by ARUDEPLOYS.


Id

(smallint) A positive integer which uniquely identifies the ARU deployment location.


Descr

(text) A short description (or name) of the ARU deployment location.


Xloc

(integer) (utm coordinate) The X coordinate location in utm units. An integer between 0 and 1,000,000 (inclusive). The number of meters east of the Zone origin.


Yloc

(integer) (utm coordinate) The Y coordinate location in utm units. An integer between 0 and 1,000,000 (inclusive). The number of meters north of the Zone origin.


Zone

(varchar(3)) The 3 character UTM zone which determines the origin of the XY coordinate grid. This column may contain 3 or fewer characters. this.


RAWDATA

One row for every time an ARU receives data from a transmitter.

This table contains the raw form of the data as received over the serial port from the network of ARUs.

Each ARU receives data simultaneously on up to 8 different antennas, and the data received by each antenna is recorded separately. This table therefore contains 8 sets of columns, numbered 0 through 7, to correspond with the signals received on each antenna.

Note

This table resides in a different PostgreSQL database than the other tables, the RAWDB. To access this table you must first establish a database connection to the RAWDB.


Id

(integer) A positive integer which uniquely identifies the transmitted information.


Daytime

(timestamp w. time zone) The date and time the data was received by the ARU. Accurate to within (?).


Signal0

(smallint) The signal strength received on antenna 0, in dBm. Acceptable values are in the range of -128 through 127, inclusive.


Noise0

(smallint) The noise in the signal received on antenna 0, in dBm. Acceptable values are in the range of -128 through 127, inclusive.


Modulation0

(smallint) The modulation in the signal received on antenna 0, in dBm. Acceptable values are in the range of -128 through 127, inclusive.


Signal1

(smallint) (null) The signal strength received on antenna 1, in dBm. Acceptable values are in the range of -128 through 127, inclusive. The value of this column is null when there is no antenna 1.


Noise1

(smallint) (null) The noise in the signal received on antenna 1, in dBm. Acceptable values are in the range of -128 through 127, inclusive. The value of this column is null when there is no antenna 1.


Modulation1

(smallint) (null) The modulation in the signal received on antenna 1, in dBm. Acceptable values are in the range of -128 through 127, inclusive. The value of this column is null when there is no antenna 1.


Signal2

(smallint) (null) The signal strength received on antenna 2, in dBm. Acceptable values are in the range of -128 through 127, inclusive. The value of this column is null when there is no antenna 2.


Noise2

(smallint) (null) The noise in the signal received on antenna 2, in dBm. Acceptable values are in the range of -128 through 127, inclusive. The value of this column is null when there is no antenna 2.


Modulation2

(smallint) (null) The modulation in the signal received on antenna 2, in dBm. Acceptable values are in the range of -128 through 127, inclusive. The value of this column is null when there is no antenna 2.


Signal3

(smallint) (null) The signal strength received on antenna 3, in dBm. Acceptable values are in the range of -128 through 127, inclusive. The value of this column is null when there is no antenna 3.


Noise3

(smallint) (null) The noise in the signal received on antenna 3, in dBm. Acceptable values are in the range of -128 through 127, inclusive. The value of this column is null when there is no antenna 3.


Modulation3

(smallint) (null) The modulation in the signal received on antenna 3, in dBm. Acceptable values are in the range of -128 through 127, inclusive. The value of this column is null when there is no antenna 3.


Signal4

(smallint) (null) The signal strength received on antenna 4, in dBm. Acceptable values are in the range of -128 through 127, inclusive. The value of this column is null when there is no antenna 4.


Noise4

(smallint) (null) The noise in the signal received on antenna 4, in dBm. Acceptable values are in the range of -128 through 127, inclusive. The value of this column is null when there is no antenna 4.


Modulation4

(smallint) (null) The modulation in the signal received on antenna 4, in dBm. Acceptable values are in the range of -128 through 127, inclusive. The value of this column is null when there is no antenna 4.


Signal5

(smallint) (null) The signal strength received on antenna 5, in dBm. Acceptable values are in the range of -128 through 127, inclusive. The value of this column is null when there is no antenna 5.


Noise5

(smallint) (null) The noise in the signal received on antenna 5, in dBm. Acceptable values are in the range of -128 through 127, inclusive. The value of this column is null when there is no antenna 5.


Modulation5

(smallint) (null) The modulation in the signal received on antenna 5, in dBm. Acceptable values are in the range of -128 through 127, inclusive. The value of this column is null when there is no antenna 5.


Signal6

(smallint) (null) The signal strength received on antenna 6, in dBm. Acceptable values are in the range of -128 through 127, inclusive. The value of this column is null when there is no antenna 6.


Noise6

(smallint) (null) The noise in the signal received on antenna 6, in dBm. Acceptable values are in the range of -128 through 127, inclusive. The value of this column is null when there is no antenna 6.


Modulation6

(smallint) (null) The modulation in the signal received on antenna 6, in dBm. Acceptable values are in the range of -128 through 127, inclusive. The value of this column is null when there is no antenna 6.


Signal7

(smallint) (null) The signal strength received on antenna 7, in dBm. Acceptable values are in the range of -128 through 127, inclusive. The value of this column is null when there is no antenna 7.


Noise7

(smallint) (null) The noise in the signal received on antenna 7, in dBm. Acceptable values are in the range of -128 through 127, inclusive. The value of this column is null when there is no antenna 7.


Modulation7

(smallint) (null) The modulation in the signal received on antenna 7, in dBm. Acceptable values are in the range of -128 through 127, inclusive. The value of this column is null when there is no antenna 7.


GNU Free Documentation License

Version 1.2, November 2002

Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.


PREAMBLE

The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.

This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.

We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.


APPLICABILITY AND DEFINITIONS

This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.

A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.

A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.

The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.

The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.

A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque".

Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.

The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.

A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition.

The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.


VERBATIM COPYING

You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.

You may also lend copies, under the same conditions stated above, and you may publicly display copies.


COPYING IN QUANTITY

If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.

If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.

If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.

It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.


MODIFICATIONS

You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:

  1. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.

  2. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement.

  3. State on the Title page the name of the publisher of the Modified Version, as the publisher.

  4. Preserve all the copyright notices of the Document.

  5. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.

  6. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.

  7. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.

  8. Include an unaltered copy of this License.

  9. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.

  10. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.

  11. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.

  12. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.

  13. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version.

  14. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section.

  15. Preserve any Warranty Disclaimers.

If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.

You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.

You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.

The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.


COMBINING DOCUMENTS

You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.

The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.

In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements".


COLLECTIONS OF DOCUMENTS

You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.

You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.


AGGREGATION WITH INDEPENDENT WORKS

A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.

If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.


TRANSLATION

Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.

If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.


TERMINATION

You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.


FUTURE REVISIONS OF THIS LICENSE

The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/.

Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.


ADDENDUM: How to use this License for your documents

To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page:

Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".

If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this:

with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.

If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.

If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.