Index: /branches/eam_branches/ipp-20230313/tools/eam/xcstack.20231124/make.xcstack.sh
===================================================================
--- /branches/eam_branches/ipp-20230313/tools/eam/xcstack.20231124/make.xcstack.sh	(revision 42593)
+++ /branches/eam_branches/ipp-20230313/tools/eam/xcstack.20231124/make.xcstack.sh	(revision 42593)
@@ -0,0 +1,162 @@
+#!/bin/csh
+
+which mariadb >& /dev/null
+@ has_mariadb = ($status == 0)
+
+which mysql >& /dev/null
+@ has_mysql = ($status == 0)
+
+set MYSQL = none
+if ($has_mariadb) then
+  set MYSQL = mariadb
+endif
+if (($has_mariadb == 0) && ($has_mysql)) then
+  set MYSQL = mysql
+endif
+
+echo "mysql is $MYSQL"
+
+set dbserver = localhost
+set dbuser = ipp
+set dbpass = ipp
+
+# create 3 databases: two cameras and a xcamera
+# also need to create ippadmin entries to match these camera databases:
+$MYSQL -h $dbserver -u $dbuser -p$dbpass ippadmin <<EOF
+  delete from projects where projname = 'test_cam1';
+  delete from projects where projname = 'test_cam2';
+  delete from projects where projname = 'test_xcam';
+  insert into projects (projname) values ('test_cam1');
+  insert into projects (projname) values ('test_cam2');
+  insert into projects (projname) values ('test_xcam');
+  drop database if exists test_cam1;
+  drop database if exists test_cam2;
+  drop database if exists test_xcam;
+  create database test_cam1;
+  create database test_cam2;
+  create database test_xcam;
+EOF
+
+$MYSQL -h $dbserver -u $dbuser -p$dbpass test_cam1 < make.xcstack.sql
+$MYSQL -h $dbserver -u $dbuser -p$dbpass test_cam2 < make.xcstack.sql
+$MYSQL -h $dbserver -u $dbuser -p$dbpass test_xcam < make.xcstack.sql
+
+# insert data into the stack tables
+
+set mydir = `pwd`
+
+# three different stacks (one same filter & different skycell, one same skycell & different filter)
+$MYSQL -h $dbserver -u $dbuser -p$dbpass test_cam1 <<EOF
+  insert into warpRun (warp_id, state, workdir, label)              values (1, 'full', '$mydir/warps.sample.gpc1', 'Test.Label.Cam1');
+  insert into warpSkyfile (warp_id, skycell_id, tess_id, path_base) values (1, 'skycell.2479.024', 'Fake.Tess', '$mydir/warps.sample.gpc1/o5283g0266o.152638.wrp.1009477.skycell.2479.024');
+  insert into warpRun (warp_id, state, workdir, label)              values (2, 'full', '$mydir/warps.sample.gpc1', 'Test.Label.Cam1');
+  insert into warpSkyfile (warp_id, skycell_id, tess_id, path_base) values (2, 'skycell.2479.024', 'Fake.Tess', '$mydir/warps.sample.gpc1/o5283g0278o.152648.wrp.1009478.skycell.2479.024');
+  insert into warpRun (warp_id, state, workdir, label)              values (3, 'full', '$mydir/warps.sample.gpc1', 'Test.Label.Cam1');
+  insert into warpSkyfile (warp_id, skycell_id, tess_id, path_base) values (3, 'skycell.2479.024', 'Fake.Tess', '$mydir/warps.sample.gpc1/o5651g0398o.319286.wrp.1009479.skycell.2479.024');
+  insert into stackRun (stack_id, state, workdir, label, skycell_id, tess_id, filter) values (1, 'full', '$mydir', 'Test.Label.Cam1', 'skycell.2479.024', 'Fake.Tess', 'g');
+  insert into stackSumSkyfile (stack_id, path_base, good_frac, fault, quality) values (1, '$mydir/skycell.2479.024.ps1', 0.95, 0, 0);
+  insert into stackInputSkyfile (stack_id, warp_id) values (1, 1);
+  insert into stackInputSkyfile (stack_id, warp_id) values (1, 2);
+  insert into stackInputSkyfile (stack_id, warp_id) values (1, 3);
+EOF
+
+# these stacks are each supposed to match the cam1 stacks above
+# three different stacks (one same filter & different skycell, one same skycell & different filter)
+$MYSQL -h $dbserver -u $dbuser -p$dbpass test_cam2 <<EOF
+  insert into warpRun (warp_id, state, workdir, label)              values (1, 'full', '$mydir/warps.sample.gpc2', 'Test.Label.Cam2');
+  insert into warpSkyfile (warp_id, skycell_id, tess_id, path_base) values (1, 'skycell.2479.024', 'Fake.Tess', '$mydir/warps.sample.gpc2/o60033h0313o.551799.wrp.493182.skycell.2479.024');
+  insert into warpRun (warp_id, state, workdir, label)              values (2, 'full', '$mydir/warps.sample.gpc2', 'Test.Label.Cam2');
+  insert into warpSkyfile (warp_id, skycell_id, tess_id, path_base) values (2, 'skycell.2479.024', 'Fake.Tess', '$mydir/warps.sample.gpc2/o60033h0338o.551824.wrp.493207.skycell.2479.024');
+  insert into warpRun (warp_id, state, workdir, label)              values (3, 'full', '$mydir/warps.sample.gpc2', 'Test.Label.Cam2');
+  insert into warpSkyfile (warp_id, skycell_id, tess_id, path_base) values (3, 'skycell.2479.024', 'Fake.Tess', '$mydir/warps.sample.gpc2/o60033h0363o.551849.wrp.493231.skycell.2479.024');
+  insert into stackRun (stack_id, state, workdir, label, skycell_id, tess_id, filter) values (1, 'full', '$mydir', 'Test.Label.Cam2', 'skycell.2479.024', 'Fake.Tess', 'g');
+  insert into stackSumSkyfile (stack_id, path_base, good_frac, fault, quality) values (1, '$mydir/skycell.2479.024.ps2', 0.95, 0, 0);
+  insert into stackInputSkyfile (stack_id, warp_id) values (1, 1);
+  insert into stackInputSkyfile (stack_id, warp_id) values (1, 2);
+  insert into stackInputSkyfile (stack_id, warp_id) values (1, 3);
+EOF
+
+# generate skycell entry (needed for xcsky and xccal queries)
+$MYSQL -h $dbserver -u $dbuser -p$dbpass test_xcam <<EOF
+  insert into skycell (tess_id, skycell_id, radeg, decdeg, glong, glat, width, height) values ('Fake.Tess', 'skycell.2479.024', 200.412, 60.9857, 116.426, 55.7593, 0.433333, 0.438819);
+  insert into dbversion (schema_version) values ('0.1');
+EOF
+
+# define the xcameras:
+xcstacktool -dbname test_cam1 -addcamera -xcamera test_xcam
+xcstacktool -dbname test_cam2 -addcamera -xcamera test_xcam
+
+# define the xcameras:
+xcstacktool -dbname test_xcam -addcamera -xcamera test_cam1
+xcstacktool -dbname test_xcam -addcamera -xcamera test_cam2
+
+# define a xcstack:
+xcstacktool -dbname test_xcam -definebyquery -xcamera test_cam1 -set_workdir $mydir -set_label Test.xcstack
+xcstacktool -dbname test_xcam -addbyquery -xcamera test_cam2 -select_skycell_id skycell.2479.024 -select_instack_filter g -select_xcstack_filter g
+
+xcstacktool -dbname test_xcam -tosum > xcstack.md
+set stk_id = `grep xcstack_id xcstack.md | awk '{print $3}'`
+set workdir = `grep workdir xcstack.md | awk '{print $3}'`
+
+## run xcstack_skycell.pl or fake it
+if (0) then
+  # manually run xcstack : note the camera must match a real camera in ippconfig/system.conf
+  xcstack_skycell.pl --dbname test_xcam --xcstack_id $stk_id --outroot $workdir/test.xcs.v0 --run-state new --camera GPC1
+endif
+  # pretend to run xcstack
+  xcstacktool -dbname test_xcam -addsumskyfile -path_base $workdir/Fake.Tess/skycell.2479.024/Fake.Tess.skycell.2479.024.stk.1 -hostname elepaio -dtime_script 45.9999994374812 -xcstack_id $stk_id
+endif
+
+# if neither of the above are set, use pantasks to run xcstack
+xcskytool -dbname test_xcam -definebyquery -select_xcstack_id 1 -set_workdir $mydir/xcsky -set_label Test.xcsky
+
+xcskytool -dbname test_xcam -todo -label Test.xcsky
+
+xcskytool -dbname test_xcam -updaterun -label Test.xcsky -set_data_group foo -set_dist_group bar -set_note myNote
+
+xcskytool -dbname test_xcam -todo -label Test.xcsky > xcsky.md
+set sky_id = `grep xcsky_id xcsky.md | awk '{print $3}'`
+cat xcsky.md
+
+xcskytool -dbname test_xcam -inputs -xcsky_id $sky_id > xcsky.md
+set workdir = `grep workdir xcsky.md | awk '{print $3}'`
+cat xcsky.md
+
+## run xcsky.pl or fake it
+if (0) then
+  xcsky.pl --dbname test_xcam --xcsky_id $sky_id --outroot $workdir/Fake.Tess/skycell.2479.024/Fake.Tess.skycell.2479.024.sky.1 --camera GPC1
+else
+  xcskytool -dbname test_xcam -addresult -path_base $workdir/Fake.Tess/skycell.2479.024/Fake.Tess.skycell.2479.024.sky.1 -hostname foobar -dtime_script 30 -dtime_phot 28 -sources 100 -num_inputs 1 -good_frac 0.5 -xcsky_id $sky_id
+endif
+
+xcskytool -dbname test_xcam -result -xcsky_id $sky_id
+
+if (0) then
+  xcskytool -dbname test_xcam -updateresult -xcsky_id 1 -fault 1
+  xcskytool -dbname test_xcam -updaterun -xcsky_id 1 -set_state new
+  xcskytool -dbname test_xcam -revert -xcsky_id 1
+endif
+
+# NOTE: xccalRun inherits the label, data_group, dist_group, reduction from xcskyRun
+xcskytool -dbname test_xcam -definexccalrun -select_xcsky_id 1
+
+xcskytool -dbname test_xcam -pendingxccalrun -label Test.xcsky > xccal.md
+set cal_id = `grep xccal_id xccal.md | awk '{print $3}'`
+cat xccal.md
+
+## run xccal.pl or fake it
+if (0) then
+  echo xccal.pl --xccal_id 1 --xcstack_id 1 --outroot $workdir/Fake.Tess/skycell.2479.024/Fake.Tess.skycell.2479.024.cal.1 --path_base $workdir/Fake.Tess/skycell.2479.024/Fake.Tess.skycell.2479.024.sky.1 --camera GPC1 --dbname test_xcam
+       xccal.pl --xccal_id 1 --xcstack_id 1 --outroot $workdir/Fake.Tess/skycell.2479.024/Fake.Tess.skycell.2479.024.cal.1 --path_base $workdir/Fake.Tess/skycell.2479.024/Fake.Tess.skycell.2479.024.sky.1 --camera GPC1 --dbname test_xcam
+else
+  xcskytool -dbname test_xcam -addxccalresult -xccal_id 1 -path_base $workdir/Fake.Tess/skycell.2479.024/Fake.Tess.skycell.2479.024.cal.1 -hostname foobaz -zpt_obs 25.0
+endif
+
+xcskytool -dbname test_xcam -xccalresult -xccal_id $cal_id
+
+if (0) then
+  xcskytool -dbname test_xcam -updatexccal    -xccal_id 1 -set_fault 1
+  xcskytool -dbname test_xcam -updatexccalrun -xccal_id 1 -set_state new
+  xcskytool -dbname test_xcam -revertxcal -xccal_id 1
+endif
+
Index: /branches/eam_branches/ipp-20230313/tools/eam/xcstack.20231124/make.xcstack.sql
===================================================================
--- /branches/eam_branches/ipp-20230313/tools/eam/xcstack.20231124/make.xcstack.sql	(revision 42593)
+++ /branches/eam_branches/ipp-20230313/tools/eam/xcstack.20231124/make.xcstack.sql	(revision 42593)
@@ -0,0 +1,343 @@
+
+-- input test tables do not have auto_increment keys or foreign key constraints
+
+CREATE TABLE dbversion (
+    schema_version VARCHAR(64),
+    updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP
+) ENGINE=innodb DEFAULT CHARSET=latin1;
+
+CREATE TABLE Label (
+    label       VARCHAR(64),
+    priority    INT,
+    active      TINYINT,
+    comment     VARCHAR(80),
+    PRIMARY KEY(label),
+    KEY(priority),
+    KEY(active)
+) ENGINE=innodb DEFAULT CHARSET=latin1;
+
+CREATE TABLE warpRun (
+    warp_id BIGINT, 
+    fake_id BIGINT,
+    mode VARCHAR(64),
+    state VARCHAR(64),
+    workdir VARCHAR(255),
+    workdir_state VARCHAR(64),
+    label VARCHAR(64),
+    data_group VARCHAR(64),
+    dist_group VARCHAR(64),
+    dvodb VARCHAR(255),
+    tess_id VARCHAR(64),
+    reduction VARCHAR(64),
+    end_stage VARCHAR(64),
+    registered DATETIME,
+    magicked BIGINT,
+    software_ver VARCHAR(16),
+    maskfrac_npix FLOAT,
+    maskfrac_static FLOAT,
+    maskfrac_dynamic FLOAT,
+    maskfrac_magic FLOAT,
+    maskfrac_advisory FLOAT,
+    note VARCHAR(255),
+    PRIMARY KEY(warp_id),
+    KEY(warp_id),
+    KEY(fake_id),
+    KEY(mode),
+    KEY(state),
+    KEY(workdir_state),
+    KEY(label),
+    KEY(data_group),
+    KEY(dist_group),
+    KEY(end_stage)
+) ENGINE=innodb DEFAULT CHARSET=latin1;
+
+CREATE TABLE warpSkyCellMap (
+    warp_id BIGINT,
+    skycell_id VARCHAR(64),
+    tess_id VARCHAR(64),
+    class_id VARCHAR(64),
+    fault SMALLINT,
+    PRIMARY KEY(warp_id, skycell_id, tess_id, class_id),
+    KEY(fault)
+) ENGINE=innodb DEFAULT CHARSET=latin1;
+
+CREATE TABLE warpImfile (
+    warp_id BIGINT,
+    skycell_id VARCHAR(64),
+    warp_skyfile_id BIGINT,
+    PRIMARY KEY(warp_id, skycell_id),
+    KEY(warp_skyfile_id)
+) ENGINE=innodb DEFAULT CHARSET=latin1;
+
+CREATE TABLE warpSkyfile (
+    warp_id BIGINT,
+    skycell_id VARCHAR(64),
+    tess_id VARCHAR(64),
+    uri VARCHAR(255),
+    path_base VARCHAR(255),
+    data_state VARCHAR(64),
+    bg DOUBLE,
+    bg_stdev DOUBLE,
+    dtime_warp FLOAT,
+    dtime_script FLOAT,
+    hostname VARCHAR(64),
+    good_frac FLOAT,
+    xmin INT,
+    xmax INT,
+    ymin INT,
+    ymax INT,
+    quality SMALLINT NOT NULL DEFAULT 0,
+    fault SMALLINT,
+    magicked BIGINT,
+    software_ver VARCHAR(16),
+    maskfrac_npix INT,
+    maskfrac_static FLOAT,
+    maskfrac_dynamic FLOAT,
+    maskfrac_magic FLOAT,
+    maskfrac_advisory FLOAT,
+    background_model SMALLINT,
+    PRIMARY KEY(warp_id, skycell_id, tess_id),
+    KEY(good_frac),
+    KEY(fault),
+    KEY(quality),
+    KEY(data_state)
+) ENGINE=innodb DEFAULT CHARSET=latin1;
+
+CREATE TABLE stackRun (
+        stack_id BIGINT,
+        state VARCHAR(64),
+        workdir VARCHAR(255),
+        label VARCHAR(64),
+        data_group VARCHAR(64),
+        dist_group VARCHAR(64),
+        reduction VARCHAR(64),
+        dvodb VARCHAR(255),
+        registered DATETIME,
+        skycell_id VARCHAR(64),
+        tess_id VARCHAR(64),
+        filter VARCHAR(64),
+        software_ver VARCHAR(16),
+        note VARCHAR(255),
+        PRIMARY KEY(stack_id),
+        KEY(stack_id),
+        KEY(state),
+        KEY(skycell_id),
+        KEY(tess_id),
+        KEY(label),
+        KEY(data_group),
+        KEY(dist_group)
+) ENGINE=innodb DEFAULT CHARSET=latin1;
+
+CREATE TABLE stackInputSkyfile (
+        stack_id BIGINT,
+        warp_id BIGINT,
+        PRIMARY KEY(stack_id, warp_id)
+) ENGINE=innodb DEFAULT CHARSET=latin1;
+
+CREATE TABLE stackSumSkyfile (
+        stack_id BIGINT,
+        uri VARCHAR(255),
+        path_base VARCHAR(255),
+        bg DOUBLE,
+        bg_stdev DOUBLE,
+        dtime_stack FLOAT,
+        dtime_match_mean FLOAT,
+        dtime_match_stdev FLOAT,
+	dtime_convolve FLOAT,
+        dtime_initial FLOAT,
+        dtime_reject FLOAT,
+        dtime_final FLOAT,
+        dtime_phot FLOAT,
+        dtime_script FLOAT,
+        match_mean FLOAT,
+        match_stdev FLOAT,
+        match_rms FLOAT,
+        stamps_mean FLOAT,
+        stamps_stdev FLOAT,
+        stamps_min INT,
+        reject_images INT,
+        reject_pix_mean FLOAT,
+        reject_pix_stdev FLOAT,
+        sources INT,
+        hostname VARCHAR(64),
+        good_frac FLOAT,
+        mjd_obs DOUBLE,
+        fault SMALLINT,
+        software_ver VARCHAR(16),
+	background_model SMALLINT,
+        quality SMALLINT NOT NULL DEFAULT 0,
+        PRIMARY KEY(stack_id),
+        KEY(dtime_stack),
+        KEY(good_frac),
+        KEY(fault),
+        KEY(quality)
+) ENGINE=innodb DEFAULT CHARSET=latin1;
+
+CREATE TABLE xcstackRun (
+        xcstack_id BIGINT AUTO_INCREMENT,
+        state VARCHAR(64),
+        workdir VARCHAR(255),
+        label VARCHAR(64),
+        data_group VARCHAR(64),
+        dist_group VARCHAR(64),
+        reduction VARCHAR(64),
+        registered DATETIME,
+        skycell_id VARCHAR(64),
+        tess_id VARCHAR(64),
+        filter VARCHAR(64),
+        software_ver VARCHAR(16),
+        note VARCHAR(255),
+        PRIMARY KEY(xcstack_id),
+        KEY(xcstack_id),
+        KEY(state),
+        KEY(skycell_id),
+        KEY(tess_id),
+        KEY(label),
+        KEY(data_group),
+        KEY(dist_group)
+) ENGINE=innodb DEFAULT CHARSET=latin1;
+
+CREATE TABLE xcstackInputSkyfile (
+        xcstack_id BIGINT,
+        camera_id BIGINT,
+        stack_id BIGINT,
+        PRIMARY KEY(xcstack_id, camera_id, stack_id)
+) ENGINE=innodb DEFAULT CHARSET=latin1;
+
+CREATE TABLE xcstackSumSkyfile (
+        xcstack_id BIGINT,
+        path_base VARCHAR(255),
+        bg DOUBLE,
+        bg_stdev DOUBLE,
+        dtime_stack FLOAT,
+        dtime_script FLOAT,
+        hostname VARCHAR(64),
+        good_frac FLOAT,
+        fault SMALLINT,
+        software_ver VARCHAR(16),
+        quality SMALLINT NOT NULL DEFAULT 0,
+        PRIMARY KEY(xcstack_id),
+        KEY(dtime_stack),
+        KEY(good_frac),
+        KEY(fault),
+        KEY(quality)
+) ENGINE=innodb DEFAULT CHARSET=latin1;
+
+CREATE TABLE xcstackCamera (
+        camera_id BIGINT AUTO_INCREMENT,
+        camera VARCHAR(255),
+        PRIMARY KEY(camera_id)
+) ENGINE=innodb DEFAULT CHARSET=latin1;
+
+-- A static sky analysis set
+CREATE TABLE xcskyRun (
+      xcsky_id BIGINT AUTO_INCREMENT, -- unique identifier
+      state VARCHAR(64) NOT NULL,  -- state of run (new, full, etc.)
+      workdir VARCHAR(255) NOT NULL, -- working directory
+      label VARCHAR(64),             -- processing label
+      data_group VARCHAR(64),        -- group for data
+      dist_group VARCHAR(64),        -- group for distribution
+      reduction VARCHAR(64),         -- reduction class (for altering recipe)
+      note VARCHAR(255),             -- note
+      registered TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- time run was registered
+      PRIMARY KEY(xcsky_id),
+      KEY(state),
+      KEY(label),
+      KEY(data_group),
+      KEY(dist_group)
+) ENGINE=innodb DEFAULT CHARSET=latin1;
+
+-- Inputs for static sky analysis
+CREATE TABLE xcskyInput (
+      xcsky_id BIGINT,             -- static sky identifier
+      xcstack_id BIGINT,          -- stack identifier
+      PRIMARY KEY(xcsky_id,xcstack_id),
+      KEY(xcstack_id),
+      FOREIGN KEY(xcsky_id) REFERENCES xcskyRun(xcsky_id),
+      FOREIGN KEY(xcstack_id) REFERENCES xcstackSumSkyfile(xcstack_id)
+) ENGINE=innodb DEFAULT CHARSET=latin1;
+
+-- Result of static sky analysis
+CREATE TABLE xcskyResult (
+      xcsky_id BIGINT,             -- static sky identifier
+      path_base VARCHAR(255) NOT NULL, -- root name for outputs
+      dtime_phot FLOAT,                -- elapsed time for photometry
+      dtime_script FLOAT,              -- elapsed time for script
+      sources INT,                     -- number of sources
+      num_inputs INT,                  -- number of input images
+      hostname VARCHAR(64) NOT NULL,   -- host that executed script
+      good_frac FLOAT,                 -- good fraction of skycell
+      quality SMALLINT NOT NULL,       -- bad quality flag
+      fault SMALLINT NOT NULL,         -- fault code
+      PRIMARY KEY(xcsky_id),
+      KEY(good_frac),
+      KEY(fault),
+      KEY(quality),
+      FOREIGN KEY(xcsky_id) REFERENCES xcskyRun(xcsky_id)
+) ENGINE=innodb DEFAULT CHARSET=latin1;
+
+CREATE TABLE xccalRun (
+      xccal_id BIGINT AUTO_INCREMENT, -- unique identifier
+      xcsky_id BIGINT,
+      xcstack_id BIGINT,
+      state VARCHAR(64) NOT NULL,  -- state of run (new, full, etc.)
+      workdir VARCHAR(255) NOT NULL, -- working directory
+      label VARCHAR(64),             -- processing label
+      data_group VARCHAR(64),        -- group for data
+      dist_group VARCHAR(64),        -- group for distribution
+      reduction VARCHAR(64),         -- reduction class (for altering recipe)
+      registered TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- time run was registered
+      note VARCHAR(255),             -- note
+      PRIMARY KEY(xccal_id),
+      KEY(state),
+      KEY(label),
+      KEY(data_group),
+      KEY(dist_group),
+      KEY(xcsky_id),
+      KEY(xcstack_id),
+      FOREIGN KEY(xcsky_id) REFERENCES xcskyRun(xcsky_id),
+      FOREIGN KEY(xcstack_id) REFERENCES xcstackRun(xcstack_id)
+) ENGINE=innodb DEFAULT CHARSET=latin1;
+
+-- Result of sky calibration analysis
+CREATE TABLE xccalResult (
+      xccal_id BIGINT,
+      path_base VARCHAR(255) NOT NULL,
+      dtime_script FLOAT,
+      dtime_astrom FLOAT,
+      sigma_ra FLOAT,
+      sigma_dec FLOAT,
+      n_astrom INT,
+      n_detections INT,
+      n_extended INT,
+      n_forced INT,
+      zpt_obs FLOAT,
+      zpt_stdev FLOAT,
+      fwhm_major  FLOAT,
+      fwhm_minor  FLOAT,
+      quality SMALLINT NOT NULL,
+      hostname VARCHAR(64) NOT NULL,
+      software_ver VARCHAR(64),
+      fault SMALLINT NOT NULL,
+      PRIMARY KEY(xccal_id),
+      KEY(fault),
+      KEY(quality),
+      FOREIGN KEY(xccal_id) REFERENCES xccalRun(xccal_id)
+) ENGINE=innodb DEFAULT CHARSET=latin1;
+
+CREATE TABLE skycell (
+    tess_id     VARCHAR(64),
+    skycell_id  VARCHAR(64),
+    radeg       float,
+    decdeg      float,
+    glong       float,
+    glat        float,
+    width       float,
+    height      float,
+    PRIMARY KEY (tess_id, skycell_id),
+    KEY(radeg),
+    KEY(decdeg),
+    KEY(glong),
+    KEY(glat)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+
