Index: branches/czw_branch/20160809/Ohana/src/relastro/include/relastro.h
===================================================================
--- branches/czw_branch/20160809/Ohana/src/relastro/include/relastro.h	(revision 39765)
+++ branches/czw_branch/20160809/Ohana/src/relastro/include/relastro.h	(revision 39766)
@@ -399,4 +399,9 @@
 int    CHIPMAP;
 
+int    *ChipMapLoop;
+int    *ChipOrderLoop;
+char   *ChipMapLoopStr;
+char   *ChipOrderLoopStr;
+
 int    N_BOOTSTRAP_SAMPLES;
 
@@ -422,13 +427,10 @@
 int           DCR_RED_NSEC_POS,      DCR_RED_NSEC_NEG; 
 
-int   NLoopWeight2MASS;
 float *LoopWeight2MASS;
 char *LoopWeight2MASSstr;
 
-int   NLoopWeightTycho;
 float *LoopWeightTycho;
 char *LoopWeightTychostr;
 
-int   NLoopWeightGAIA;
 float *LoopWeightGAIA;
 char *LoopWeightGAIAstr;
Index: branches/czw_branch/20160809/Ohana/src/relastro/src/GetAstromError.c
===================================================================
--- branches/czw_branch/20160809/Ohana/src/relastro/src/GetAstromError.c	(revision 39765)
+++ branches/czw_branch/20160809/Ohana/src/relastro/src/GetAstromError.c	(revision 39766)
@@ -53,4 +53,13 @@
   dM    = measure[0].dM;
   dPtotal = sqrt(SQ(dPsys) + SQ(AS*dPobs) + SQ(MS*dM));
+
+  if (measure[0].photcode == 1030) {
+    if (mode == ERROR_MODE_RA) {
+      dPobs = pow(10.0, (6.0 * measure[0].dXccd - 3.0));  // dXccd is a value in pixels
+    }
+    if (mode == ERROR_MODE_DEC) {
+      dPobs = pow(10.0, (6.0 * measure[0].dYccd - 3.0));  // dXccd is a value in pixels
+    }
+  }
 
   // for GPC1 data, we have a bright end model:
@@ -135,4 +144,13 @@
   if (isnan(code[0].astromErrSys)) return NAN;
 
+  if (measure[0].photcode == 1030) {
+    if (mode == ERROR_MODE_RA) {
+      dPobs = pow(10.0, (6.0 * measure[0].dXccd - 3.0));  // dXccd is a value in pixels
+    }
+    if (mode == ERROR_MODE_DEC) {
+      dPobs = pow(10.0, (6.0 * measure[0].dYccd - 3.0));  // dXccd is a value in pixels
+    }
+  }
+
   AS   	= code[0].astromErrScale;
   MS   	= code[0].astromErrMagScale;
Index: branches/czw_branch/20160809/Ohana/src/relastro/src/UpdateChips.c
===================================================================
--- branches/czw_branch/20160809/Ohana/src/relastro/src/UpdateChips.c	(revision 39765)
+++ branches/czw_branch/20160809/Ohana/src/relastro/src/UpdateChips.c	(revision 39766)
@@ -42,4 +42,8 @@
   AstromErrorSetLoop (Nloop, TRUE);
 
+  // if ChipMapLoop or ChipOrderLoop is set use that to define the value of CHIPMAP and/or CHIPORDER this loop
+  if (ChipMapLoop) { CHIPMAP = ChipMapLoop[Nloop]; }
+  if (ChipOrderLoop) { CHIPORDER = ChipOrderLoop[Nloop]; }
+  
   if (NTHREADS) {
     UpdateChips_threaded (catalog, Ncatalog);
Index: branches/czw_branch/20160809/Ohana/src/relastro/src/args.c
===================================================================
--- branches/czw_branch/20160809/Ohana/src/relastro/src/args.c	(revision 39765)
+++ branches/czw_branch/20160809/Ohana/src/relastro/src/args.c	(revision 39766)
@@ -4,5 +4,6 @@
 void usage_merge_source (void);
 void usage_merge_source_id (char *name);
-float *ParseLoopWeights (char *rawlist, int *nloop);
+float *ParseLoopWeights (char *rawlist);
+int *ParseLoopOrder (char *rawlist, int minValue);
 
 int args (int argc, char **argv) {
@@ -509,4 +510,6 @@
   }
 
+  ChipOrderLoop = NULL;
+  ChipOrderLoopStr = NULL;
   CHIPORDER = 1;
   if ((N = get_argument (argc, argv, "-chiporder"))) {
@@ -515,5 +518,13 @@
     remove_argument (N, &argc, argv);
   }
-
+  if ((N = get_argument (argc, argv, "-chiporderloop"))) {
+    remove_argument (N, &argc, argv);
+    ChipOrderLoopStr = strcreate(argv[N]);
+    ChipOrderLoop = ParseLoopOrder (argv[N], 1);
+    remove_argument (N, &argc, argv);
+  }
+
+  ChipMapLoop = NULL;
+  ChipMapLoopStr = NULL;
   CHIPMAP = 0;
   if ((N = get_argument (argc, argv, "-chipmap"))) {
@@ -523,4 +534,11 @@
 
   }
+  if ((N = get_argument (argc, argv, "-chipmaploop"))) {
+    remove_argument (N, &argc, argv);
+    ChipMapLoopStr = strcreate(argv[N]);
+    ChipMapLoop = ParseLoopOrder (argv[N], 0);
+    remove_argument (N, &argc, argv);
+  }
+  
 
   SAVEPLOT = FALSE;
@@ -657,5 +675,5 @@
     remove_argument (N, &argc, argv);
     LoopWeight2MASSstr = strcreate(argv[N]);
-    LoopWeight2MASS = ParseLoopWeights (argv[N], &NLoopWeight2MASS);
+    LoopWeight2MASS = ParseLoopWeights (argv[N]);
     remove_argument (N, &argc, argv);
   }
@@ -665,5 +683,5 @@
     remove_argument (N, &argc, argv);
     LoopWeightTychostr = strcreate(argv[N]);
-    LoopWeightTycho = ParseLoopWeights (argv[N], &NLoopWeightTycho);
+    LoopWeightTycho = ParseLoopWeights (argv[N]);
     remove_argument (N, &argc, argv);
   }
@@ -673,5 +691,5 @@
     remove_argument (N, &argc, argv);
     LoopWeightGAIAstr = strcreate(argv[N]);
-    LoopWeightGAIA = ParseLoopWeights (argv[N], &NLoopWeightGAIA);
+    LoopWeightGAIA = ParseLoopWeights (argv[N]);
     remove_argument (N, &argc, argv);
   }
@@ -1324,5 +1342,5 @@
 }
 
-float *ParseLoopWeights (char *rawlist, int *nloop) {
+float *ParseLoopWeights (char *rawlist) {
 
   float *weights = NULL;
@@ -1355,5 +1373,43 @@
   }
 
-  *nloop = Nloop;
   return weights;
 }
+
+int *ParseLoopOrder (char *rawlist, int minValue) {
+
+  int *orders = NULL;
+  ALLOCATE (orders, int, NLOOP);
+
+  int Nloop = 0;
+
+  /* parse the comma-separated list of photcodes */
+  char *myList = strcreate(rawlist);
+  char *list = myList;
+  char *entry = NULL;
+  char *ptr = NULL;
+  while ((Nloop < NLOOP) && ((entry = strtok_r (list, ",", &ptr)) != NULL)) {
+    list = NULL; // pass NULL on successive strtok_r calls
+
+    orders[Nloop] = atoi(entry);
+    if (orders[Nloop] < minValue) {
+      fprintf (stderr, "order cannot be < %d: %s\n", minValue, rawlist);
+      exit (3);
+    }
+
+    Nloop ++;
+  }
+  free (myList);
+
+  if (Nloop == 0) {
+    fprintf (stderr, "syntax error parsing orders: %s\n", rawlist);
+    exit (3);
+  }
+
+  // this sets the last loops to match the last value...
+  while (Nloop < NLOOP) {
+    orders[Nloop] = orders[Nloop - 1];
+    Nloop ++;
+  }
+
+  return orders;
+}
Index: branches/czw_branch/20160809/Ohana/src/relastro/src/launch_region_hosts.c
===================================================================
--- branches/czw_branch/20160809/Ohana/src/relastro/src/launch_region_hosts.c	(revision 39765)
+++ branches/czw_branch/20160809/Ohana/src/relastro/src/launch_region_hosts.c	(revision 39766)
@@ -163,4 +163,7 @@
     strextend (&command, "-chiporder %d", CHIPORDER); 
     if (CHIPMAP)            strextend (&command, "-chipmap %d", CHIPMAP); 
+    if (ChipMapLoop)        strextend (&command, "-chipmaploop %s", ChipMapLoopStr); 
+    if (ChipOrderLoop)      strextend (&command, "-chiporderloop %s", ChipMapLoopStr); 
+
     if (RESET_IMAGES)       strextend (&command, "-reset-images"); 
 
