(C) 2007 Yuval Levy, released under http://creativecommons.org/licenses/by/3.0/

1. INPUT

This database will accept two types of lens calibration profiles:
deterministic and stochastic. The stochastic process was suggested by Bruno
Postle and JD Smith on the hugin-ptx mailing list.

1.1. DETERMINISTIC PROCESS
* volunteer logs in to the web based system
* volunteer fills out a web based form to populate ci_calinfo as well as
  one instance of distorsion and vignetting parameters. One hit on the
  form per each set of focal distance and aperture. Up to four files
  (three images and one hugin project file) per hit will be stored.
* maintainer goes over new entries in ci_calinfo and assigns ambiguous
  camera/lens definition to unique disambiguated id
* maintainer verifies calibration


1.2. STOCHASTIC PROCESS
* user create a login to the web based system
* user allows hugin to transfer relevant project information
  (calibration parameters)
* each project generates a hit on the database and populates ci_calinfo as well
  as one instance of distorsion and vignetting parameters.
* hugin might send in an evaluation of how good the parameters are
  (Pablo d'Angelo)
* maintainer uses statistic tools and methods to weed out stray parameters and
  come up with a calibration output that is then exported via XML.

The database is expandable: when new/different/better algorithms become known
(such as suggested by Alexandre Jenny on hugin-ptx), a new table can be added
for those parameters, like the vi_vignetting table if the parameters are
aperture-dependent or by expanding the dp_distorsion table if they are only
focal-length dependent.

2. OUTPUT

The PHP code will generate, based on selection parameters, an XML export for
selected camera/lens combos. Selection parameters are:
- type of profile (deterministic/stochastic)
- quality level
-- deterministic: level of approval by maintainer
-- stochastic: acceptable standard deviation range from which output parameters
   are calculated
-- camera (or: all cameras)
-- lens (or: all lenses)

3. TO DO:
- clean up the data structure
- write PHP code / forms to populate it
- write PHP code to export XML




# could split into different tables so that additional algorythms
# would get new tables or additional algorythms just make the table
# larger
# xml export format does not really matter, since tags can be
# added/expanded
# so far, there is one table for focal-length only dependent
# corrections and one for the combination of focal-length and aperture

QUESTION:
Does it make sense to add mount information in cl_camera2lens?
or even in an extra table?


#--------------------------------------------------------
# Table:        ur_user
# Date:         2007-may-11
# Description:	user static data
#--------------------------------------------------------
CREATE TABLE ur_user (
	# unique user identifier
	ur_uid INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
	# first name
	ur_pname CHAR(50),
	# last name
	ur_lname CHAR(50),
	# email
	ur_email CHAR(50),
	# password
	ur_password CHAR(50),
	# status
	ur_status SMALLINT(6) UNSIGNED DEFAULT 0 NOT NULL,
	# keys
	PRIMARY KEY uid(ur_uid)
);



#--------------------------------------------------------
# Table:		ci_calinfo
# Date:			2007-may-11
# Description:	calibration info settings
#--------------------------------------------------------
CREATE TABLE ci_calinfo (
	# unique set of calibration information
	ci_cid INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
	# disambiguation
	ci_lid INT(11) UNSIGNED,
	# project file
	ci_pto CHAR(50),
	# input image 1
	ci_img1 CHAR(50),
	# input image 2
	ci_img2 CHAR(50),
	# input image 3
	ci_img3 CHAR(50),
	# entered lens description
	ci_lens CHAR(100),
	# entered lens description detail
	ci_detail TEXT,
	# entered camera make
	ci_camera CHAR(100),
	# entered manufacturer
	ci_manu CHAR(100),
	# entered camera type
	ci_type TINYINT(2),
	# entered min focal length
	ci_min_fl CHAR(10),
	# entered max focal length
	ci_max_fl CHAR(10),
	# entered max aperture
	ci_max_f CHAR(10),
	# entered conversion factor
	ci_conv CHAR(10),
	# associated distorsion parameters
	ci_did INT(11) UNSIGNED,
	# associated vignetting parameters
	ci_aid INT(11) UNSIGNED,
	# management process: user who entered the calibration
	ci_uid INT(11) UNSIGNED NOT NULL,
	# management process: maintainer assigned to verify
	ci_mid INT(11) UNSIGNED NOT NULL,
	# management process: status of the data
	ci_status TINYINT(2) UNSIGNED DEFAULT 0,

# add timestamps
# add keys
# add hugin version information
# add contributing software / version
)

#--------------------------------------------------------
# Table:        cl_camera2lens
# Date:         2007-may-11
# Description:	entry for camera in the lens
#--------------------------------------------------------
CREATE TABLE cl_camera2lens (
	# identifier of camera
	cl_cid int(11) UNSIGNED NOT NULL,
	# identifier of lens
	cl_lid int(11) UNSIGNED NOT NULL,
	# keys
	PRIMARY KEY (cl_cid, cl_lid)
);

#--------------------------------------------------------
# Table:		ls_lens
# Date:			2007-may-11
# Description:	static lens info
#--------------------------------------------------------
CREATE TABLE ls_lens (
	# unique lens/camera identifier - also used
	# for disambiguation in the XML output
	ls_lid INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
	# lens description (can be ambiguous)
	ls_lens CHAR(50),
	# lens/camera details
	ls_details TEXT,
	# crop factor belongs theoretically to the camera
	# but has an influence on the correction params
	# and is used only for disambiguation
	ls_crop DECIMAL(3,2),
	# min focal length
	ls_min_fl DECIMAL(5,0),
	# max focal length
	ls_max_fl DECIMAL(5,0),
	# max aperture
	ls_max_f DECIMAL(3,1),
	# lens type
	ls_type TINYINT(2) UNSIGNED NOT NULL,
	# management process: maintainer responsible for this entry
	ls_mid INT(11) UNSIGNED NOT NULL,
	# management process: status of the data
	ls_status TINYINT(2) UNSIGNED DEFAULT 0,
	# keys
	KEY t(ls_type),
	PRIMARY KEY (ls_lid)
)

#--------------------------------------------------------
# Table:		ca_camera
# Date:			2007-may-11
# Description:	static camera info
#--------------------------------------------------------
CREATE TABLE ca_camera (
	# unique camera identifier
	ca_cid INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
	# manufacturer
	ca_manu CHAR(50),
	# camera text description
	ca_camera CHAR(50),
	# crop factor 
	ca_crop DECIMAL(3,2),
	# camera type
	ca_type TINYINT(2),
	# keys
	PRIMARY KEY (ca_cid),
	KEY c(ca_camera),
	KEY m(ca_manu),
	KEY t(ca_type)
)


#--------------------------------------------------------
# Table:		fl_focal
# Date:			2007-may-11
# Description:	entry for a single focal length
#--------------------------------------------------------
CREATE TABLE fl_focal (
	# unique focal length identifier
	fl_fid INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
	# applicable focal length
	fl_fl SMALLINT(5) UNSIGNED,
	# management process: user responsible for this entry
	fl_uid INT(11) UNSIGNED NOT NULL,
	# management process: status of the data
	fl_status TINYINT(2) UNSIGNED DEFAULT 0,
	# keys
	PRIMARY KEY (fl_fid),
	KEY uid(fl_uid),
	KEY status(fl_status)
)

#--------------------------------------------------------
# Table:		dp_distorsion
# Date:			2007-may-11
# Description:	perspective distorsion and chromatic
#				aberration parameters that depends only
#				on the focal length.
#				multiple / ambiguous entries possible
#--------------------------------------------------------
CREATE TABLE dp_distorsion (
	# unique identifier for this set of parameters
	dp_did INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
	# unique focal length id to which this aperture belongs
	dp_fid INT(11) UNSIGNED,
	# radial distortion correction parameters, as in PTLens
	dp_a DECIMAL(10,7),
	dp_b DECIMAL(10,7),
	dp_c DECIMAL(10,7),
	# transverse chromatic aberration red
	dp_tcar_a DECIMAL(10,7),
	dp_tcar_b DECIMAL(10,7),
	dp_tcar_c DECIMAL(10,7),
	# transverse chromatic aberration blue
	dp_tcab_a DECIMAL(10,7),
	dp_tcab_b DECIMAL(10,7),
	dp_tcab_c DECIMAL(10,7),
	# management process: user that entered the data
	dp_uid INT(11) UNSIGNED NOT NULL,
	# management process: status of the data
	dp_status TINYINT(2) UNSIGNED DEFAULT 0,
	# keys
	PRIMARY KEY (dp_did),
	KEY fid(dp_fid),
	KEY uid(dp_uid),
	KEY status(dp_status)
)


#--------------------------------------------------------
# Table:		vi_vignetting
# Date:			2007-may-11
# Description:	parameters for a single aperture
#--------------------------------------------------------
CREATE TABLE vi_vignetting (
	# unique aperture/vignetting identifier
	vi_vid INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
	# unique focal length id to which these aperture
	# vignetting parameters belongs
	vi_fid INT(11) UNSIGNED,
	# applicable aperture
	vi_ap DECIMAL(3,1) UNSIGNED,
	# vignetting correction
	vi_b DECIMAL(10,7),
	vi_c DECIMAL(10,7),
	vi_d DECIMAL(10,7),
	# management process: user that entered the data
	vi_uid INT(11) UNSIGNED NOT NULL,
	# management process: status of the data
	vi_status TINYINT(2) UNSIGNED DEFAULT 0,
	# primary key
	PRIMARY KEY (vi_aid),
	KEY fid(vi_fid),
	KEY uid(vi_uid),
	KEY status(vi_status)
)
	

