Index: trunk/ippTools/share/Makefile.am
===================================================================
--- trunk/ippTools/share/Makefile.am	(revision 42285)
+++ trunk/ippTools/share/Makefile.am	(revision 42387)
@@ -543,3 +543,13 @@
 	remotetool_listcomponent.sql \
 	remotetool_doneprep.sql \
-	remotetool_updatepoll.sql
+	remotetool_updatepoll.sql \
+	fpcamtool_find_cam_and_chip_id.sql \
+	fpcamtool_find_cam_id.sql \
+	fpcamtool_find_processedexp.sql \
+	fpcamtool_pendingexp.sql \
+	fpcamtool_inputchips.sql \
+	fpcamtool_inputastrom.sql \
+	fpcamtool_queue_cam_id.sql \
+	fpcamtool_revertprocessedexp.sql \
+	fpcamtool_revertupdatedexp.sql
+
Index: trunk/ippTools/share/fpcamtool_find_cam_and_chip_id.sql
===================================================================
--- trunk/ippTools/share/fpcamtool_find_cam_and_chip_id.sql	(revision 42387)
+++ trunk/ippTools/share/fpcamtool_find_cam_and_chip_id.sql	(revision 42387)
@@ -0,0 +1,42 @@
+-- this needs to join a table of chipRuns and a table of camRuns based on exp_id
+
+SELECT * FROM
+(
+ SELECT
+     exp_id,
+     chip_id
+ FROM chipRun
+ JOIN rawExp
+      USING(exp_id)
+ WHERE
+      chipRun.state = 'full'
+ -- WHERE HOOK for chip:
+  AND %s
+) AS myChip
+JOIN
+(
+SELECT
+    exp_id,
+    camRun.chip_id as cam_chip_id,
+    camRun.cam_id,
+    camRun.state,
+    camRun.workdir,
+    camRun.workdir_state,
+    camRun.label,
+    camRun.data_group,
+    camRun.dist_group,
+    camRun.reduction,
+    camRun.dvodb,
+    camRun.software_ver,
+    camRun.note
+FROM camRun
+JOIN chipRun
+     USING(chip_id)
+JOIN rawExp
+     USING(exp_id)
+WHERE
+     camRun.state = 'full'
+-- WHERE HOOK for cam:
+  AND %s
+) AS myCam
+USING(exp_id)
Index: trunk/ippTools/share/fpcamtool_find_cam_id.sql
===================================================================
--- trunk/ippTools/share/fpcamtool_find_cam_id.sql	(revision 42387)
+++ trunk/ippTools/share/fpcamtool_find_cam_id.sql	(revision 42387)
@@ -0,0 +1,25 @@
+-- this needs to join a table of chipRuns and a table of camRuns based on exp_id
+
+SELECT
+     exp_id,
+     chip_id,
+     cam_id,
+     camRun.state,
+     camRun.workdir,
+     camRun.workdir_state,
+     camRun.label,
+     camRun.data_group,
+     camRun.dist_group,
+     camRun.reduction,
+     camRun.dvodb,
+     camRun.software_ver,
+     camRun.note
+FROM camRun
+JOIN chipRun
+     USING(chip_id)
+JOIN rawExp
+     USING(exp_id)
+WHERE
+     camRun.state = 'full'
+-- WHERE HOOK for cam:
+  AND %s
Index: trunk/ippTools/share/fpcamtool_find_processedexp.sql
===================================================================
--- trunk/ippTools/share/fpcamtool_find_processedexp.sql	(revision 42387)
+++ trunk/ippTools/share/fpcamtool_find_processedexp.sql	(revision 42387)
@@ -0,0 +1,27 @@
+SELECT
+    fpcamProcessedExp.*,
+    fpcamRun.workdir,
+    fpcamRun.label,
+    fpcamRun.data_group,
+    fpcamRun.state,
+    camRun.state as cam_state,
+    chipRun.state as chip_state,
+    rawExp.exp_tag,
+    rawExp.exp_name,
+    rawExp.exp_time,
+    rawExp.exp_id,
+    rawExp.camera,
+    rawExp.telescope,
+    rawExp.dateobs,
+    rawExp.filter,
+    rawExp.filelevel,
+    rawExp.comment
+FROM fpcamRun
+JOIN fpcamProcessedExp
+    USING(fpcam_id)
+JOIN camRun
+    USING(cam_id)
+JOIN chipRun
+    ON(fpcamRun.chip_id = chipRun.chip_id)
+JOIN rawExp
+    ON chipRun.exp_id = rawExp.exp_id
Index: trunk/ippTools/share/fpcamtool_inputastrom.sql
===================================================================
--- trunk/ippTools/share/fpcamtool_inputastrom.sql	(revision 42387)
+++ trunk/ippTools/share/fpcamtool_inputastrom.sql	(revision 42387)
@@ -0,0 +1,8 @@
+SELECT
+    fpcam_id,
+    cam_id,
+    quality,
+    path_base
+FROM fpcamRun
+JOIN camProcessedExp
+    USING(cam_id)
Index: trunk/ippTools/share/fpcamtool_inputchips.sql
===================================================================
--- trunk/ippTools/share/fpcamtool_inputchips.sql	(revision 42387)
+++ trunk/ippTools/share/fpcamtool_inputchips.sql	(revision 42387)
@@ -0,0 +1,10 @@
+SELECT
+    exp_id,
+    chip_id,
+    fpcam_id,
+    path_base,
+    quality,
+    class_id
+FROM fpcamRun
+JOIN chipProcessedImfile
+    USING(chip_id)
Index: trunk/ippTools/share/fpcamtool_pendingexp.sql
===================================================================
--- trunk/ippTools/share/fpcamtool_pendingexp.sql	(revision 42387)
+++ trunk/ippTools/share/fpcamtool_pendingexp.sql	(revision 42387)
@@ -0,0 +1,27 @@
+SELECT
+    fpcamRun.*,
+    rawExp.exp_tag,
+    rawExp.exp_id,
+    rawExp.exp_name,
+    rawExp.camera,
+    rawExp.telescope,
+    rawExp.filelevel,
+    fpcamProcessedExp.path_base,
+    IFNULL(Label.priority, 10000) AS priority
+FROM fpcamRun
+JOIN camRun
+    USING(cam_id)
+JOIN chipRun
+    ON(fpcamRun.chip_id = chipRun.chip_id)
+JOIN rawExp
+    USING(exp_id)
+LEFT JOIN fpcamProcessedExp
+    USING(fpcam_id)
+LEFT JOIN Label
+    ON fpcamRun.label = Label.label
+WHERE
+    chipRun.state = 'full'
+    AND camRun.state = 'full'
+    AND ((fpcamRun.state = 'new'    AND fpcamProcessedExp.fpcam_id IS NULL) OR
+         (fpcamRun.state = 'update' AND fpcamProcessedExp.fault = 0 AND fpcamProcessedExp.quality = 0))
+    AND (Label.active OR Label.active IS NULL)
Index: trunk/ippTools/share/fpcamtool_queue_cam_id.sql
===================================================================
--- trunk/ippTools/share/fpcamtool_queue_cam_id.sql	(revision 42387)
+++ trunk/ippTools/share/fpcamtool_queue_cam_id.sql	(revision 42387)
@@ -0,0 +1,32 @@
+-- fpcamtool only operates on exposures so we can safely queue more then one at a
+-- time without worrying about losing the track of the generated cam_id
+INSERT INTO fpcamRun
+  ( fpcam_id,
+    chip_id,
+    cam_id,
+    state,
+    workdir,
+    workdir_state,
+    label,
+    data_group,
+    dist_group,
+    reduction,
+    dvodb,
+    software_ver,
+    note)
+  VALUES
+  (
+        0,              -- fpcam_id
+	%lld,           -- chip_id
+        %lld,           -- cam_id
+        '%s',           -- state
+        '%s',           -- workdir
+        '%s',           -- workdir_state
+        '%s',           -- label
+        '%s',           -- data_group
+        '%s',           -- dist_group
+        '%s',           -- reduction
+        '%s',           -- dvodb
+        0,           -- software ver
+        '%s'            -- note           
+  )
Index: trunk/ippTools/share/fpcamtool_revertprocessedexp.sql
===================================================================
--- trunk/ippTools/share/fpcamtool_revertprocessedexp.sql	(revision 42387)
+++ trunk/ippTools/share/fpcamtool_revertprocessedexp.sql	(revision 42387)
@@ -0,0 +1,9 @@
+DELETE FROM fpcamProcessedExp
+USING fpcamProcessedExp, fpcamRun, camRun, chipRun, rawExp
+WHERE
+    fpcamRun.fpcam_id      = fpcamProcessedExp.fpcam_id
+    AND fpcamRun.cam_id  = camRun.cam_id
+    AND fpcamRun.chip_id = chipRun.chip_id
+    AND chipRun.exp_id   = rawExp.exp_id
+    AND fpcamProcessedExp.fault != 0
+    AND fpcamRun.state = 'new'
Index: trunk/ippTools/share/fpcamtool_revertupdatedexp.sql
===================================================================
--- trunk/ippTools/share/fpcamtool_revertupdatedexp.sql	(revision 42387)
+++ trunk/ippTools/share/fpcamtool_revertupdatedexp.sql	(revision 42387)
@@ -0,0 +1,9 @@
+UPDATE fpcamProcessedExp
+    JOIN fpcamRun USING(fpcam_id)
+    JOIN camRun USING(cam_id)
+    JOIN chipRun ON(fpcamRun.chip_id = chipRun.chip_id)
+    JOIN rawExp USING(exp_id)
+SET fpcamProcessedExp.fault = 0
+WHERE
+    fpcamRun.state = 'update'
+    AND fpcamProcessedExp.fault != 0
Index: trunk/ippTools/share/pxadmin_create_tables.sql
===================================================================
--- trunk/ippTools/share/pxadmin_create_tables.sql	(revision 42285)
+++ trunk/ippTools/share/pxadmin_create_tables.sql	(revision 42387)
@@ -2427,4 +2427,58 @@
 ) ENGINE=innodb DEFAULT CHARSET=latin1;
 
+CREATE TABLE fpcamRun (
+    fpcam_id      BIGINT AUTO_INCREMENT,
+    cam_id        BIGINT,
+    chip_id       BIGINT,
+    state         VARCHAR(64),
+    workdir       VARCHAR(255),
+    workdir_state VARCHAR(64),
+    label         VARCHAR(64),
+    data_group    VARCHAR(64),
+    dist_group    VARCHAR(64),
+    reduction     VARCHAR(64),
+    dvodb         VARCHAR(255),
+    software_ver  VARCHAR(16),
+    note          VARCHAR(255),
+    PRIMARY KEY(fpcam_id),
+    KEY(cam_id),
+    KEY(chip_id),
+    KEY(state),
+    KEY(label),
+    INDEX(chip_id, cam_id),
+    FOREIGN KEY (cam_id) REFERENCES camRun(cam_id),
+    FOREIGN KEY (chip_id) REFERENCES chipRun(chip_id))
+ENGINE=innodb DEFAULT CHARSET=latin1;
+
+CREATE TABLE fpcamProcessedExp (
+    fpcam_id     BIGINT,
+    path_base    VARCHAR(255),
+
+    zpt_obs      FLOAT,
+    zpt_stdev    FLOAT,
+    zpt_lq       FLOAT,
+    zpt_uq       FLOAT,
+
+    dtime_script FLOAT,
+
+    hostname     VARCHAR(64),
+    n_stars      INT,
+    fault        SMALLINT NOT NULL,
+    epoch        TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+
+    software_ver VARCHAR(16),
+
+    deteff_obs   FLOAT,
+    deteff_err   FLOAT,
+    deteff_lq    FLOAT,
+    deteff_uq    FLOAT,
+
+    quality      SMALLINT,
+
+    PRIMARY KEY(fpcam_id),
+    KEY(fault),
+    FOREIGN KEY (fpcam_id) REFERENCES fpcamRun(fpcam_id)
+) ENGINE=innodb DEFAULT CHARSET=latin1;
+
 -- These comment lines are here to avoid an empty query error.
 -- Another way to avoid that problem is to omit the semicolon above but I think that is untidy.
Index: trunk/ippTools/share/pxadmin_drop_tables.sql
===================================================================
--- trunk/ippTools/share/pxadmin_drop_tables.sql	(revision 42285)
+++ trunk/ippTools/share/pxadmin_drop_tables.sql	(revision 42387)
@@ -129,5 +129,6 @@
 DROP TABLE IF EXISTS remoteComponent;
 DROP TABLE IF EXISTS remoteRun;
-
+DROP TABLE IF EXISTS fpcamProcessedExp;
+DROP TABLE IF EXISTS fpcamRun;
 
 SET FOREIGN_KEY_CHECKS=1
