Index: branches/pap/ippTools/share/Makefile.am
===================================================================
--- branches/pap/ippTools/share/Makefile.am	(revision 28498)
+++ branches/pap/ippTools/share/Makefile.am	(revision 28499)
@@ -228,6 +228,8 @@
 	magicdstool_definebyquery_raw.sql \
 	magicdstool_definebyquery_chip.sql \
+	magicdstool_definebyquery_chip_bg.sql \
 	magicdstool_definebyquery_camera.sql \
 	magicdstool_definebyquery_warp.sql \
+	magicdstool_definebyquery_warp_bg.sql \
 	magicdstool_definebyquery_diff.sql \
 	magicdstool_definecopy_chip.sql \
Index: branches/pap/ippTools/share/magicdstool_definebyquery_chip_bg.sql
===================================================================
--- branches/pap/ippTools/share/magicdstool_definebyquery_chip_bg.sql	(revision 28499)
+++ branches/pap/ippTools/share/magicdstool_definebyquery_chip_bg.sql	(revision 28499)
@@ -0,0 +1,33 @@
+SELECT DISTINCT       -- DISTINCT because we are going though diffInputSkyfile
+    magicRun.magic_id,
+    exp_id,
+    'chip_bg' AS stage,
+    chip_bg_id AS stage_id,
+    chipBackgroundRun.data_group,
+    camRun.cam_id,
+    magicRun.label,
+    magicRun.workdir,
+    CAST(NULL AS SIGNED) AS inv_magic_id,
+    CAST(NULL AS SIGNED) AS inv_exp_id
+FROM magicRun
+JOIN magicMask USING(magic_id)
+JOIN diffRun USING(diff_id)
+JOIN diffInputSkyfile USING(diff_id)
+JOIN warpRun
+    ON (!magicRun.inverse AND warp1 = warp_id)
+    OR ( magicRun.inverse AND warp2 = warp_id)
+JOIN fakeRun USING(fake_id)
+JOIN camRun USING(cam_id)
+JOIN chipRun USING(chip_id, exp_id)
+JOIN chipBackgroundRun USING(chip_id)
+JOIN rawExp USING(exp_id)
+LEFT JOIN magicDSRun
+    ON magicRun.magic_id = magicDSRun.magic_id
+    AND magicDSRun.stage = 'chip_bg'
+WHERE magicRun.state = 'full'
+    AND ( -- rerun HOOK magicdstool sends "\n1 " if rerun else "\n0 " %s
+    OR magicDSRun.magic_ds_id IS NULL)
+    AND chipBackgroundRun.magicked = 0
+    AND chipBackgroundRun.state = 'full'
+    AND camRun.state = 'full'
+
Index: branches/pap/ippTools/share/magicdstool_definebyquery_warp_bg.sql
===================================================================
--- branches/pap/ippTools/share/magicdstool_definebyquery_warp_bg.sql	(revision 28499)
+++ branches/pap/ippTools/share/magicdstool_definebyquery_warp_bg.sql	(revision 28499)
@@ -0,0 +1,32 @@
+SELECT DISTINCT       -- DISTINCT because we are going though diffInputSkyfile
+    magicRun.magic_id,
+    exp_id,
+    'warp_bg' AS stage,
+    warp_bg_id AS stage_id,
+    warpBackgroundRun.data_group,
+    0 AS cam_id,
+    magicRun.label,
+    magicRun.workdir,
+    CAST(NULL AS SIGNED) AS inv_magic_id,
+    CAST(NULL AS SIGNED) AS inv_exp_id
+FROM magicRun
+JOIN magicMask USING(magic_id)
+JOIN diffRun USING(diff_id)
+JOIN diffInputSkyfile USING(diff_id)
+JOIN warpRun
+    ON (!magicRun.inverse AND warp1 = warp_id)
+    OR ( magicRun.inverse AND warp2 = warp_id)
+JOIN warpBackgroundRun USING(warp_bg_id)
+JOIN fakeRun USING(fake_id)
+JOIN camRun USING(cam_id)
+JOIN chipRun USING(chip_id, exp_id)
+JOIN rawExp USING(exp_id)
+LEFT JOIN magicDSRun
+    ON magicRun.magic_id = magicDSRun.magic_id
+    AND magicDSRun.stage = 'warp_bg'
+WHERE magicRun.state = 'full'
+    AND ( -- rerun HOOK magicdstool sends "\n1 " if rerun else "\n0 " %s
+    OR magicDSRun.magic_ds_id IS NULL)
+    AND warpBackgroundRun.magicked  = 0
+    AND warpBackgroundRun.state = 'full'
+
Index: branches/pap/ippTools/src/magicdstool.c
===================================================================
--- branches/pap/ippTools/src/magicdstool.c	(revision 28498)
+++ branches/pap/ippTools/src/magicdstool.c	(revision 28499)
@@ -122,6 +122,8 @@
     PXOPT_COPY_S64(config->args, where, "-exp_id",  "exp_id", "==");
     PXOPT_COPY_S64(config->args, where, "-chip_id", "chip_id", "==");
+    PXOPT_COPY_S64(config->args, where, "-chip_bg_id", "chip_bg_id", "==");
     PXOPT_COPY_S64(config->args, where, "-cam_id",  "cam_id", "==");
     PXOPT_COPY_S64(config->args, where, "-warp_id", "warp_id", "==");
+    PXOPT_COPY_S64(config->args, where, "-warp_bg_id", "warp_bg_id", "==");
     PXOPT_COPY_S64(config->args, where, "-diff_id", "diff_id", "==");
     PXOPT_COPY_S64(config->args, where, "-magic_id","magicRun.magic_id", "==");
@@ -140,4 +142,7 @@
         query = pxDataGet("magicdstool_definebyquery_chip.sql");
         break;
+    case IPP_STAGE_CHIP_BG:
+        query = pxDataGet("magicdstool_definebyquery_chip_bg.sql");
+        break;
     case IPP_STAGE_CAMERA:
         query = pxDataGet("magicdstool_definebyquery_camera.sql");
@@ -145,4 +150,7 @@
     case IPP_STAGE_WARP:
         query = pxDataGet("magicdstool_definebyquery_warp.sql");
+        break;
+    case IPP_STAGE_WARP_BG:
+        query = pxDataGet("magicdstool_definebyquery_warp_bg.sql");
         break;
     case IPP_STAGE_DIFF:
@@ -720,4 +728,7 @@
         query = "UPDATE chipProcessedImfile SET magicked = %" PRId64 " where chip_id = %" PRId64 " AND class_id = '%s'";
         break;
+    case IPP_STAGE_CHIP_BG:
+        query = "UPDATE chipBackgroundImfile SET magicked = %" PRId64 " where chip_bg_id = %" PRId64 " AND class_id = '%s'";
+        break;
     case IPP_STAGE_CAMERA:
         // no there is no magicked column in camProcessedExp so we have nothing to do
@@ -727,4 +738,7 @@
         query = "UPDATE warpSkyfile SET magicked = %" PRId64 " where warp_id = %" PRId64 " AND skycell_id = '%s'";
         break;
+    case IPP_STAGE_WARP_BG:
+        query = "UPDATE warpBackgroundSkyfile SET magicked = %" PRId64 " where warp_bg_id = %" PRId64 " AND skycell_id = '%s'";
+        break;
     case IPP_STAGE_DIFF:
         query = "UPDATE diffSkyfile SET magicked = %" PRId64 " where diff_id = %" PRId64 " AND skycell_id = '%s'";
@@ -794,4 +808,7 @@
         query = "UPDATE chipRun SET magicked = %" PRId64 " where chip_id = %" PRId64;
         break;
+    case IPP_STAGE_CHIP_BG:
+        query = "UPDATE chipBackgroundRun SET magicked = %" PRId64 " where chip_bg_id = %" PRId64;
+        break;
     case IPP_STAGE_CAMERA:
         query = "UPDATE camRun SET magicked = %" PRId64 " where cam_id = %" PRId64;
@@ -799,4 +816,7 @@
     case IPP_STAGE_WARP:
         query = "UPDATE warpRun SET magicked = %" PRId64 " where warp_id = %" PRId64;
+        break;
+    case IPP_STAGE_WARP_BG:
+        query = "UPDATE warpBackgroundRun SET magicked = %" PRId64 " where warp_bg_id = %" PRId64;
         break;
     case IPP_STAGE_DIFF:
Index: branches/pap/ippTools/src/magicdstoolConfig.c
===================================================================
--- branches/pap/ippTools/src/magicdstoolConfig.c	(revision 28498)
+++ branches/pap/ippTools/src/magicdstoolConfig.c	(revision 28499)
@@ -60,6 +60,8 @@
     psMetadataAddS64(definebyqueryArgs, PS_LIST_TAIL, "-exp_id",   0, "search by exp_id", 0);
     psMetadataAddS64(definebyqueryArgs, PS_LIST_TAIL, "-chip_id",  0, "search by chip_id", 0);
+    psMetadataAddS64(definebyqueryArgs, PS_LIST_TAIL, "-chip_bg_id",  0, "search by chip_bg_id", 0);
     psMetadataAddS64(definebyqueryArgs, PS_LIST_TAIL, "-cam_id",  0, "search by cam_id", 0);
     psMetadataAddS64(definebyqueryArgs, PS_LIST_TAIL, "-warp_id",  0, "search by warp_id", 0);
+    psMetadataAddS64(definebyqueryArgs, PS_LIST_TAIL, "-warp_bg_id",  0, "search by warp_bg_id", 0);
     psMetadataAddS64(definebyqueryArgs, PS_LIST_TAIL, "-diff_id",  0, "search by diff_id", 0);
     psMetadataAddS64(definebyqueryArgs, PS_LIST_TAIL, "-magic_id", 0, "search by magic_id", 0);
