IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Jan 11, 2015, 2:14:39 PM (12 years ago)
Author:
eugene
Message:

merge changes from eam branch ipp-20140904

Location:
trunk/Ohana
Files:
17 edited
8 copied

Legend:

Unmodified
Added
Removed
  • trunk/Ohana

  • trunk/Ohana/src/dvomerge/Makefile

    r35416 r37807  
    2323dvoverify_client : $(BIN)/dvoverify_client.$(ARCH)
    2424
    25 all: dvomerge dvomerge_client dvoconvert dvosecfilt dvosecfilt_client dvoverify dvoverify_client
     25dvoutils        : $(BIN)/dvoutils.$(ARCH)
     26
     27all: dvomerge dvomerge_client dvoconvert dvosecfilt dvosecfilt_client dvorepair dvoverify dvoverify_client dvoutils
    2628
    2729#  $(SRC)/dvomergeContinue.$(ARCH).o
     
    120122$(SRC)/dvorepairImagesVsMeasures.$(ARCH).o \
    121123$(SRC)/dvorepairDeleteImageList.$(ARCH).o \
     124$(SRC)/dvorepairDeleteImagesByExternID.$(ARCH).o \
     125$(SRC)/dvorepairDeleteImagesByExternID.$(ARCH).o \
    122126$(SRC)/dvorepairFixImages.$(ARCH).o \
    123127$(SRC)/psps_ids.$(ARCH).o \
    124128$(SRC)/LoadImages.$(ARCH).o \
    125129$(SRC)/ReadDeleteList.$(ARCH).o \
     130$(SRC)/ReadDeleteListExternID.$(ARCH).o \
     131$(SRC)/myIndex.$(ARCH).o \
    126132$(SRC)/match_image.$(ARCH).o \
    127133$(SRC)/help.$(ARCH).o \
     
    149155$(BIN)/dvoverify_client.$(ARCH) : $(DVOVERIFY_CLIENT)
    150156
    151 INSTALL = dvomerge dvomerge_client dvoconvert dvosecfilt dvosecfilt_client dvorepair dvoverify dvoverify_client
     157DVOUTILS = \
     158$(SRC)/dvoutils.$(ARCH).o \
     159$(SRC)/dvoutils_args.$(ARCH).o \
     160$(SRC)/dvoutils_uniq_images.$(ARCH).o \
     161$(SRC)/dvoutils_load_image_index.$(ARCH).o
     162
     163$(DVOUTILS)  : $(INC)/dvoutils.h
     164$(BIN)/dvoutils.$(ARCH) : $(DVOUTILS)
     165
     166INSTALL = dvomerge dvomerge_client dvoconvert dvosecfilt dvosecfilt_client dvorepair dvoverify dvoverify_client dvoverify
    152167
    153168# dependancy rules for binary code #########################
  • trunk/Ohana/src/dvomerge/include/dvomerge.h

    r37116 r37807  
    4141int    REPLACE_BY_PHOTCODE;
    4242int    FORCE_MERGE;
     43char  *UPDATE_CATFORMAT;
     44
     45int    MATCHED_TABLES;
    4346
    4447char *SINGLE_CPT;
    4548SkyRegion UserPatch;  // used by MODE CAT
     49
     50# ifndef MAX_INT
     51# define MAX_INT 2147483647
     52# endif
     53
     54typedef struct {
     55  int minID;
     56  int maxID;
     57  int *index;
     58  int Nindex;
     59  int NINDEX;
     60} myIndexType;
    4661
    4762typedef struct {
     
    138153int        add_lens_link          PROTO((Average *average, off_t *next, off_t Nlensing, off_t NLENSING));
    139154Lensing   *sort_lensing           PROTO((Average *average, off_t Naverage, Lensing *lensing, off_t Nlensing, off_t *next));
     155
     156off_t     *build_starpar_links    PROTO((Average *average, off_t Naverage, StarPar *starpar, off_t Nstarpar));
     157off_t     *init_starpar_links     PROTO((Average *average, off_t Naverage, StarPar *starpar, off_t Nstarpar));
     158int        add_star_link          PROTO((Average *average, off_t *next, off_t Nstarpar, off_t NSTARPAR));
     159StarPar   *sort_starpar           PROTO((Average *average, off_t Naverage, StarPar *starpar, off_t Nstarpar, off_t *next));
    140160
    141161off_t     *init_missing_links     PROTO((Average *average, off_t Naverage, Missing *missing, off_t Nmissing));
     
    200220int dvoCreateID (char *catdir);
    201221
     222myIndexType *myIndexInit ();
     223int myIndexFree (myIndexType *myIndex);
     224int myIndexUpdateLimits (myIndexType *myIndex, int value);
     225int myIndexSetRange (myIndexType *myIndex);
     226int myIndexSetEntry (myIndexType *myIndex, int value, int entry);
     227int myIndexGetEntry (myIndexType *myIndex, int value);
     228
     229int dvorepairDeleteImagesByExternID (int argc, char **argv);
     230int RepairTableCPT_V1(char *cptFilenameSrc, char *cptFilenameTgt, char *cpsFilenameSrc, char *cpsFilenameTgt, Measure *measure, off_t Nmeasure, Image *image, off_t Nimage, myIndexType *imageIDindex, char catformat);
     231int *ReadDeleteListExternID(char *filename, int *nindex);
  • trunk/Ohana/src/dvomerge/src/ImageOps.c

    r29938 r37807  
    1818  }
    1919  if (m == -1) return (NULL);
    20   if (!FindMosaicForImage (image, Nimage, m)) return (NULL);
    2120  return (&image[m]);
    2221}
  • trunk/Ohana/src/dvomerge/src/LoadCatalog.c

    r37116 r37807  
    88
    99    // always load all of the data (if any exists)
    10     catalog[0].catflags = LOAD_AVES | LOAD_MEAS | LOAD_MISS | LOAD_SECF | LOAD_LENSING | LOAD_LENSOBJ;
     10    catalog[0].catflags = LOAD_AVES | LOAD_MEAS | LOAD_MISS | LOAD_SECF | LOAD_LENSING | LOAD_LENSOBJ | LOAD_STARPAR;
    1111
    1212    catalog[0].catformat = dvo_catalog_catformat (CATFORMAT);  // set the default catformat from config data
  • trunk/Ohana/src/dvomerge/src/args.c

    r35765 r37807  
    3737  }
    3838
     39  /* extra error messages */
     40  MATCHED_TABLES = FALSE;
     41  if ((N = get_argument (*argc, argv, "-matched-tables"))) {
     42    MATCHED_TABLES = TRUE;
     43    remove_argument (N, argc, argv);
     44  }
     45
    3946  /* use a different photcode file to define mean values */
    4047  if ((N = get_argument (*argc, argv, "-photcode-file"))) {
     
    4855  if ((N = get_argument (*argc, argv, "-force-merge"))) {
    4956    FORCE_MERGE = TRUE;
     57    remove_argument (N, argc, argv);
     58  }
     59
     60  UPDATE_CATFORMAT = NULL;
     61  if ((N = get_argument (*argc, argv, "-update-catformat"))) {
     62    remove_argument (N, argc, argv);
     63    UPDATE_CATFORMAT = strcreate (argv[N]);
    5064    remove_argument (N, argc, argv);
    5165  }
     
    185199  }
    186200
     201  /* extra error messages */
     202  MATCHED_TABLES = FALSE;
     203  if ((N = get_argument (*argc, argv, "-matched-tables"))) {
     204    MATCHED_TABLES = TRUE;
     205    remove_argument (N, argc, argv);
     206  }
     207
    187208  /* replace measurement, don't duplicate */
    188209  REPLACE_BY_PHOTCODE = FALSE;
  • trunk/Ohana/src/dvomerge/src/build_links.c

    r37762 r37807  
    382382}
    383383
    384 
     384/********  StarPar ********************************************************************************/
     385
     386/* build the initial links assuming the table is sorted,
     387   not partial, and has a correct set of average[].starparOffset,Nstarpar values */
     388off_t *init_starpar_links (Average *average, off_t Naverage, StarPar *starpar, off_t Nstarpar) {
     389
     390  off_t i, j, N;
     391  off_t *next_star;
     392
     393  N = 0;
     394
     395  ALLOCATE (next_star, off_t, Nstarpar);
     396  for (i = 0; i < Naverage; i++) {
     397    if (!average[i].Nstarpar) continue;
     398    for (j = 0; j < average[i].Nstarpar - 1; j++, N++) {
     399      next_star[N] = N + 1;
     400      if (N >= Nstarpar) {
     401        fprintf (stderr, "WARNING: N out of bounds (1)\n");
     402      }
     403    }
     404    next_star[N] = -1;
     405    if (N >= Nstarpar) {
     406      fprintf (stderr, "WARNING: N out of bounds (2)\n");
     407    }
     408
     409    if (N >= Nstarpar) {
     410      fprintf (stderr, "overflow in init_starpar_links\n");
     411      abort ();
     412    }
     413    N++;
     414  }
     415  return (next_star);
     416}
     417
     418/* construct starpar links which are valid FOR THIS LOAD
     419 * - if we have a full load, we will get links which can
     420 *   be used by other programs (eg, relphot, etc)
     421 * - if we have a partial load, the links are only valid
     422 *   for that partial load
     423 */
     424
     425off_t *build_starpar_links (Average *average, off_t Naverage, StarPar *starpar, off_t Nstarpar) {
     426
     427  off_t i, m, k, Nm, averef;
     428  off_t *next_star;
     429
     430  ALLOCATE (next_star, off_t, Nstarpar);
     431
     432  /* reset the Nm, offset values for average */
     433  for (i = 0; i < Naverage; i++) {
     434    average[i].starparOffset = -1;
     435    average[i].Nstarpar     =  0;
     436  }
     437
     438  for (Nm = 0; Nm < Nstarpar; Nm++) {
     439    averef = starpar[Nm].averef;
     440    m = average[averef].starparOffset; 
     441    next_star[Nm] = -1;
     442
     443    if (m == -1) { /* no links yet for source */
     444      average[averef].starparOffset = Nm;
     445      average[averef].Nstarpar     = 1;
     446      continue;
     447    }
     448
     449    for (k = 0; next_star[m] != -1; k++) {
     450      m = next_star[m];
     451      if (m >= Nstarpar) {
     452        fprintf (stderr, "WARNING: m out of bounds (1)\n");
     453      }
     454    }
     455
     456    average[averef].Nstarpar = k + 2;
     457    next_star[m] = Nm;
     458    if (m >= Nstarpar) {
     459      fprintf (stderr, "WARNING: m out of bounds (2)\n");
     460    }
     461  }
     462  return (next_star);
     463}
     464
     465/* average[].starparOffset, average[].Nstarpar are valid within an addstar run */
     466int add_star_link (Average *average, off_t *next_star, off_t Nstarpar, off_t NSTARPAR) {
     467
     468  off_t k, m;
     469
     470  /* if we have trouble, check validity of next_star[m] : m < Nstarpar */
     471  m = average[0].starparOffset; 
     472
     473  for (k = 0; k < average[0].Nstarpar - 1; k++)  {
     474    m = next_star[m];
     475    if (m >= NSTARPAR) {
     476      fprintf (stderr, "WARNING: m out of bounds (3)\n");
     477    }
     478  }
     479
     480  /* set up references */
     481  next_star[Nstarpar] = -1;
     482  if (Nstarpar >= NSTARPAR) {
     483    fprintf (stderr, "WARNING: Nstarpar out of bounds (1)\n");
     484  }
     485
     486  if (m == -1) {
     487    average[0].starparOffset = Nstarpar;
     488  } else {
     489    next_star[m] = Nstarpar;
     490    if (m >= NSTARPAR) {
     491      fprintf (stderr, "WARNING: m out of bounds (4)\n");
     492    }
     493  }
     494
     495  return (TRUE);
     496}
     497
     498StarPar *sort_starpar (Average *average, off_t Naverage, StarPar *starpar, off_t Nstarpar, off_t *next_star) {
     499
     500  off_t i, k, n, np, N;
     501  StarPar *tmpstarpar;
     502
     503  /*
     504  for (i = 0; i < Naverage; i++) {
     505    if (average[i].Nstarpar != 4) {
     506      fprintf (stderr, "check %d %d %d\n", (int) i, (int) average[i].Nstarpar, (int) average[i].starparOffset);
     507    }
     508  }
     509  */
     510
     511  /* fix order of StarPar (memory intensive, but fast) */
     512  N = 0;
     513  ALLOCATE (tmpstarpar, StarPar, Nstarpar);
     514  for (i = 0; i < Naverage; i++) {
     515    if (!average[i].Nstarpar) continue;
     516    n = average[i].starparOffset;
     517    average[i].starparOffset = N;
     518    for (k = 0; k < average[i].Nstarpar; k++, N++) {
     519      if (n == -1) {
     520        fprintf (stderr, "entry after %d has a problem\n", (int) np);
     521        abort();
     522      }
     523      tmpstarpar[N] = starpar[n];
     524      if (starpar[n].averef != i) abort();
     525      tmpstarpar[N].averef = i;
     526      np = n;
     527      n = next_star[n];
     528    }
     529  }
     530  free (starpar);
     531  return (tmpstarpar);
     532}
     533
     534
  • trunk/Ohana/src/dvomerge/src/dvo_image_merge_dbs.c

    r37360 r37807  
    113113  create_IDmap_lookup (IDmap);
    114114
    115   if (!out[0].swapped) {
    116     gfits_convert_Image ((Image *) out[0].ftable.buffer, sizeof(Image), Nout);
    117     out[0].swapped = TRUE;
    118   }
    119 
    120115  Nout += Nimages;
    121116  IDstart += Nimages;
  • trunk/Ohana/src/dvomerge/src/dvomergeUpdate_catalogs.c

    r37116 r37807  
    5858    }
    5959
     60# ifdef OLD_CODE
     61    // NOTE: i was having trouble dropping objects on edges with the option below.  Since an object can move outside the catalog grab the neighbors.
    6062    // SkyListByBounds will return neighbor catalogs if the boundaries exactly match (due to rounding).  Since the regions are not infinitely small,
    6163    // compare to a slightly reduced footprint
    6264    float dPos = 2.0/3600.0;
    6365    outlist = SkyListByBounds (outsky, -1, inlist[0].regions[i][0].Rmin + dPos, inlist[0].regions[i][0].Rmax - dPos, inlist[0].regions[i][0].Dmin + dPos, inlist[0].regions[i][0].Dmax - dPos);
     66# endif
     67
     68    if (MATCHED_TABLES) {
     69      // if we know the output will have the same depth / layout as the input, just choose the matched table
     70      outlist = SkyRegionByIndex (outsky, inlist[0].regions[i][0].index);
     71    } else {
     72      // Since an object can move outside the catalog grab the neighbors.
     73      float dPos = 2.0/3600.0;
     74      outlist = SkyListByBounds (outsky, -1, inlist[0].regions[i][0].Rmin - dPos, inlist[0].regions[i][0].Rmax + dPos, inlist[0].regions[i][0].Dmin - dPos, inlist[0].regions[i][0].Dmax + dPos);
     75    }
    6476
    6577    OutputStatus *outstat = OutputStatusInit (outlist->Nregions);
     
    163175      LoadCatalog (&outcatalog, outlist[0].regions[j], outcatalog.filename, "w", NsecfiltOutput);
    164176
    165       // if no catalog already exists, use the input catalog to define the format
     177      // if no catalog already exists, use the input catalog to define the format or the specified format
    166178      if (outcatalog.Naves_disk == 0) {
    167         outcatalog.catformat = incatalog.catformat;
     179        if (UPDATE_CATFORMAT) {
     180          outcatalog.catformat = dvo_catalog_catformat (UPDATE_CATFORMAT);
     181        } else {
     182          outcatalog.catformat = incatalog.catformat;
     183        }
    168184      }
    169185
     
    187203      SetProtect (FALSE);
    188204
     205      if (!dvo_catalog_unlock (&outcatalog)) {
     206        fprintf (stderr, "ERROR: failed to unlock catalog %s\n", outlist[0].filename[j]);
     207        exit (1);
     208      }
     209
    189210      if (!dvo_catalog_unlink_backup (&outcatalog, TRUE)) {
    190211        fprintf (stderr, "WARNING: failed to remove backup for catalog %s\n", outlist[0].filename[j]);
    191212      }
    192213
    193       dvo_catalog_unlock (&outcatalog);
    194214      dvo_catalog_free (&outcatalog);
    195215
     
    256276    if (PARALLEL_INPUT)      { snprintf (tmpline, DVO_MAX_PATH, "%s -parallel-input",  command); strcpy (command, tmpline); }
    257277    if (FORCE_MERGE)         { snprintf (tmpline, DVO_MAX_PATH, "%s -force-merge",     command); strcpy (command, tmpline); }
     278    if (MATCHED_TABLES)      { snprintf (tmpline, DVO_MAX_PATH, "%s -matched-tables",  command); strcpy (command, tmpline); }
    258279
    259280    // add some config variables:
  • trunk/Ohana/src/dvomerge/src/dvorepair.c

    r37046 r37807  
    33int main (int argc, char **argv) {
    44
    5   fprintf (stderr, "this program needs to be updated to load old format Measure tables (pre PV1_V5) in which dR,dD are saved, not R,D\n");
    6   fprintf (stderr, "reminder: relastro can re-construct R,D from X,Y; FtableToMeasure and vice versa could just NAN those values\n");
    7   exit (2);
     5  // fprintf (stderr, "this program needs to be updated to load old format Measure tables (pre PV1_V5) in which dR,dD are saved, not R,D\n");
     6  // fprintf (stderr, "reminder: relastro can re-construct R,D from X,Y; FtableToMeasure and vice versa could just NAN those values\n");
     7  // exit (2);
    88
    99  dvorepair_help(argc, argv);
     
    1313  if (!strcmp(argv[1], "-images-vs-measures")) dvorepairImagesVsMeasures(argc, argv);
    1414  if (!strcmp(argv[1], "-delete-image-list")) dvorepairDeleteImageList(argc, argv);
     15  if (!strcmp(argv[1], "-delete-images-by-extern-id")) dvorepairDeleteImagesByExternID(argc, argv);
    1516  if (!strcmp(argv[1], "-fix-images")) dvorepairFixImages(argc, argv);
    1617  dvorepair_help(0, NULL);
  • trunk/Ohana/src/dvomerge/src/dvorepairCPT.c

    r37046 r37807  
    119119    thisImage = MatchImage (image, Nimage, measure[i].t, measure[i].photcode, measure[i].imageID);
    120120    XY_to_RD (&average[Nave].R, &average[Nave].D, measure[i].Xccd, measure[i].Yccd, &thisImage[0].coords);
     121    average[Nave].R = ohana_normalize_angle (average[Nave].R);
    121122
    122123    average[Nave].Nmeasure = 1;
  • trunk/Ohana/src/dvomerge/src/dvorepairDeleteImageList.c

    r37046 r37807  
    114114    index = deleteIDs[i];
    115115    seq = imageIdx[index];
    116     if (!FindMosaicForImage (image, Nimage, seq)) {
    117       fprintf (stderr, "cannot find mosaic for %s, skipping\n", image[seq].name);
    118       continue;
    119     }
    120116
    121117    XY_to_RD(&Rthis, &Dthis, 0, 0, &image[seq].coords);
     
    404400    thisImage = MatchImage (image, Nimage, measure[i].t, measure[i].photcode, measure[i].imageID);
    405401    XY_to_RD (&average[Nave].R, &average[Nave].D, measure[i].Xccd, measure[i].Yccd, &thisImage[0].coords);
     402    average[Nave].R = ohana_normalize_angle (average[Nave].R);
    406403
    407404    average[Nave].Nmeasure = 1;
  • trunk/Ohana/src/dvomerge/src/dvorepairFixImages.c

    r29938 r37807  
    130130int MarkMosaicsToDelete(Image *image, off_t Nimage, int *deleteIndex) {
    131131
     132  myAbort ("this function needs to be redone with a concept to match the old BuildChipMatch");
     133
     134# if (0) 
     135
    132136  off_t i;
    133137 
     
    140144     marked.  Now find all WRP images for which none/some/all images are to be deleted.
    141145  */
     146
     147 
    142148
    143149  // make a copy of the ChipMatch table (generated by BuildChipMatch, see libdvo/src/mosaic_astrom.c)
     
    237243  free (ChipByMosaicID);
    238244
     245# endif
     246
    239247  return TRUE;
    240248}
  • trunk/Ohana/src/dvomerge/src/dvorepairFixTables.c

    r37046 r37807  
    259259    thisImage = MatchImage (image, Nimage, measure[i].t, measure[i].photcode, measure[i].imageID);
    260260    XY_to_RD (&average[Nave].R, &average[Nave].D, measure[i].Xccd, measure[i].Yccd, &thisImage[0].coords);
     261    average[Nave].R = ohana_normalize_angle (average[Nave].R);
    261262
    262263    average[Nave].Nmeasure = 1;
  • trunk/Ohana/src/dvomerge/src/dvoverify_utils.c

    r37360 r37807  
    238238    }
    239239    // lensingOffset needs to be in range for each object
    240     lensingOffsetOK &= (catalog.average[i].lensingOffset < catalog.Nlensing);
    241     if (VERBOSE && !(catalog.average[i].lensingOffset < catalog.Nlensing)) {
     240    lensingOffsetOK &= (!catalog.Nlensing || (catalog.average[i].lensingOffset < catalog.Nlensing));
     241    if (VERBOSE && catalog.Nlensing && !(catalog.average[i].lensingOffset < catalog.Nlensing)) {
    242242      fprintf (stderr, "lensingOffset >= catalog.Nlensing: %d %d %d\n", i, catalog.average[i].lensingOffset, (int) catalog.Nlensing);
    243243    }
  • trunk/Ohana/src/dvomerge/src/merge_catalogs_new.c

    r37472 r37807  
    1111 
    1212  off_t i, j, offset;
    13   off_t NAVERAGE, NMEASURE, NLENSING, Naverage, Nmeasure, Nlensing, NsecfiltIn, NsecfiltOut, Nm;
     13  off_t NAVERAGE, NMEASURE, NLENSING, NSTARPAR, Naverage, Nmeasure, Nlensing, Nstarpar, NsecfiltIn, NsecfiltOut, Nm;
    1414
    1515  Naverage = output[0].Naverage;
     
    8181      output[0].average[Naverage].Nlensing = Nm;
    8282
     83      Nm = 0;
     84      for (j = 0; j < input[0].average[i].Nstarpar; j++) {
     85          offset = input[0].average[i].starparOffset + j;
     86
     87          output[0].starpar[Nstarpar] = input[0].starpar[offset];
     88          output[0].starpar[Nstarpar].averef = Naverage;
     89
     90          Nstarpar ++;
     91          Nm ++;
     92          if (Nstarpar == NSTARPAR) {
     93              NSTARPAR += 1000;
     94              REALLOCATE (output[0].starpar, StarPar, NSTARPAR);
     95          }
     96      }
     97      output[0].average[Naverage].Nstarpar = Nm;
     98
    8399      Naverage ++;
    84100      if (Naverage == NAVERAGE) {
     
    91107  REALLOCATE (output[0].measure, Measure, MAX (Nmeasure, 1));
    92108  REALLOCATE (output[0].lensing, Lensing, MAX (Nlensing, 1));
     109  REALLOCATE (output[0].starpar, StarPar, MAX (Nstarpar, 1));
    93110  REALLOCATE (output[0].secfilt, SecFilt, NsecfiltOut*MAX (Naverage, 1));
    94111  output[0].Naverage = Naverage;
    95112  output[0].Nlensing = Nlensing;
     113  output[0].Nstarpar = Nstarpar;
    96114  output[0].Nsecf_mem = Naverage * NsecfiltOut;
    97115
  • trunk/Ohana/src/dvomerge/src/merge_catalogs_old.c

    r37116 r37807  
    44# define IN_REGION(R,D) (                                       \
    55    ((D) >= region[0].Dmin) && ((D) < region[0].Dmax) &&        \
    6     ((R) >= region[0].Rmin)  && ((R) < region[0].Rmax))
     6    ((R) >= region[0].Rmin) && ((R) < region[0].Rmax))
    77
    88// merge the input data into the output catalog
     
    1414  double *X1, *Y1, *X2, *Y2;
    1515  double dX, dY, dR;
    16   off_t *N1, *N2, *next_meas, *next_lens;
    17   off_t Nave, NAVE, Nmeas, NMEAS, Nmatch, Nlens, NLENS;
     16  off_t *N1, *N2, *next_meas, *next_lens, *next_star;
     17  off_t Nave, NAVE, Nmeas, NMEAS, Nmatch, Nlens, NLENS, Nstar, NSTAR;
    1818  int NsecfiltIn;
    1919  int NsecfiltOut;
     
    5353  NMEAS = Nmeas = output[0].Nmeasure;
    5454  NLENS = Nlens = output[0].Nlensing;
     55  NSTAR = Nstar = output[0].Nstarpar;
    5556
    5657  // current max obj ID for this catalog
     
    6465   * coordops.update.c).  We use the center of the region (catalog) for crval1,2.
    6566   */
     67
     68  InitCoords (&tcoords, "DEC--ARC");
    6669  tcoords.crval1 = 0.5*(region[0].Rmin + region[0].Rmax);
    6770  if (region[0].Dmax < 90) {
     
    7073    tcoords.crval2 = 90.0;
    7174  }
    72   tcoords.crpix1 = 0;
    73   tcoords.crpix2 = 0;
    7475  tcoords.cdelt1 = tcoords.cdelt2 = 1.0 / 3600.0;
    75   tcoords.pc1_1 = tcoords.pc2_2 = 1.0;
    76   tcoords.pc1_2 = tcoords.pc2_1 = 0.0;
    77   tcoords.Npolyterms = 1;
    78   strcpy (tcoords.ctype, "DEC--ARC");
    7976
    8077  if (VERBOSE) fprintf (stderr, "merging %s into %s\n", input[0].filename, output[0].filename);
     
    120117    next_meas = init_measure_links (output[0].average, Nave, output[0].measure, Nmeas);
    121118    next_lens = init_lensing_links (output[0].average, Nave, output[0].lensing, Nlens);
     119    next_star = init_starpar_links (output[0].average, Nave, output[0].starpar, Nstar);
    122120  } else {
    123121    next_meas = build_measure_links (output[0].average, Nave, output[0].measure, Nmeas);
    124122    next_lens = build_lensing_links (output[0].average, Nave, output[0].lensing, Nlens);
     123    next_star = build_starpar_links (output[0].average, Nave, output[0].starpar, Nstar);
    125124  }   
    126125
     
    184183      REALLOCATE (output[0].measure, Measure, NMEAS);
    185184    }
    186     if (Nlens + input[0].average[N].Nmeasure >= NLENS) {
    187       NLENS = Nlens + input[0].average[N].Nmeasure + 1000;
     185    if (Nlens + input[0].average[N].Nlensing >= NLENS) {
     186      NLENS = Nlens + input[0].average[N].Nlensing + 1000;
    188187      REALLOCATE (next_lens, off_t, NLENS);
    189188      REALLOCATE (output[0].lensing, Lensing, NLENS);
     189    }
     190    if (Nstar + input[0].average[N].Nstarpar >= NSTAR) {
     191      NSTAR = Nstar + input[0].average[N].Nstarpar + 1000;
     192      REALLOCATE (next_star, off_t, NSTAR);
     193      REALLOCATE (output[0].starpar, StarPar, NSTAR);
    190194    }
    191195
     
    274278    }
    275279
     280    // if lensing measurements exist, add them too
     281    if (output[0].starpar) {
     282      for (Nin = 0; Nin < input[0].average[N].Nstarpar; Nin++) {
     283        /* add to end of lensing list */
     284        add_star_link (&output[0].average[n], next_star, Nstar, NSTAR);
     285       
     286        // set the new starpar
     287        off_t staroff = input[0].average[N].starparOffset + Nin;
     288        output[0].starpar[Nstar] = input[0].starpar[staroff];
     289
     290        output[0].starpar[Nstar].averef   = n;
     291        output[0].starpar[Nstar].objID    = output[0].average[n].objID;
     292        output[0].starpar[Nstar].catID    = output[0].catID;
     293        output[0].average[n].Nstarpar ++;
     294        Nstar ++;
     295      }
     296    }
     297
    276298    // update the average properties to reflect the incoming entries:
    277299    // if the original value is NAN but the input value is not, accept the input:
     
    319341      REALLOCATE (output[0].lensing, Lensing, NLENS);
    320342    }
     343    if (Nstar + input[0].average[N].Nstarpar >= NSTAR) {
     344      NSTAR = Nstar + input[0].average[N].Nstarpar + 1000;
     345      REALLOCATE (next_star, off_t, NSTAR);
     346      REALLOCATE (output[0].starpar, StarPar, NSTAR);
     347    }
    321348    if (Nave >= NAVE) {
    322349      NAVE = Nave + 1000;
     
    326353
    327354    if (input[0].found_t[N] >= 0) continue;
    328     if (!IN_REGION (input[0].average[N].R, input[0].average[N].D)) continue;
     355
     356    // if we are using MATCHED_TABLES, we are going to leave the edge cases in their
     357    // source catalog, even if they have leaked beyond the edge
     358    if (!MATCHED_TABLES && !IN_REGION (input[0].average[N].R, input[0].average[N].D)) continue;
    329359
    330360    // XXX should we accept the input measurements for these fields?
     
    413443    }
    414444
     445    /** add starpar for this input average object **/
     446    if (output[0].starpar) {
     447      output[0].average[Nave].starparOffset  = Nstar;
     448      for (Nin = 0; Nin < input[0].average[N].Nstarpar; Nin ++) {
     449        // supply the starpar values from this detection
     450        off_t staroff = input[0].average[N].starparOffset + Nin;
     451        output[0].starpar[Nstar]           = input[0].starpar[staroff];
     452
     453        // the following starpar elements cannot be set until here:
     454        output[0].starpar[Nstar].averef   = Nave;
     455        output[0].starpar[Nstar].objID    = output[0].average[Nave].objID;
     456        output[0].starpar[Nstar].catID    = output[0].catID;
     457
     458        // as we add starpar, update Nstarpar to match
     459        output[0].average[Nave].Nstarpar ++;
     460
     461        /* we set next[Nstar] to -1 here, and update correctly below */
     462        next_star[Nstar] = -1;
     463        Nstar ++;
     464      }
     465      int Ngroup = input[0].average[N].Nstarpar;
     466      for (j = 0; j < Ngroup - 1; j++) {
     467        next_star[Nstar - Ngroup + j] = Nstar - Ngroup + j + 1;
     468      }
     469    }
     470
    415471    Nave ++;
    416472  }
     
    421477  REALLOCATE (output[0].measure, Measure, Nmeas);
    422478  REALLOCATE (output[0].lensing, Lensing, Nlens);
     479  REALLOCATE (output[0].starpar, StarPar, Nstar);
    423480 
    424481# define NOSORT 0
     
    429486    output[0].measure = sort_measure (output[0].average, Nave, output[0].measure, Nmeas, next_meas);
    430487    output[0].lensing = sort_lensing (output[0].average, Nave, output[0].lensing, Nlens, next_lens);
     488    output[0].starpar = sort_starpar (output[0].average, Nave, output[0].starpar, Nstar, next_star);
    431489  }
    432490
     
    445503  output[0].Nmeasure = Nmeas;
    446504  output[0].Nlensing = Nlens;
     505  output[0].Nstarpar = Nstar;
    447506  output[0].Nsecf_mem = Nave*NsecfiltOut;
    448507  if (VERBOSE) fprintf (stderr, "Nstars, Nave, Nmeas, Nlens: "OFF_T_FMT" "OFF_T_FMT" "OFF_T_FMT" "OFF_T_FMT", ("OFF_T_FMT" matches)\n",  Nstars,  Nave,  Nmeas,  Nlens, Nmatch);
     
    450509  free (next_meas);
    451510  free (next_lens);
     511  free (next_star);
    452512
    453513  free (X2);
Note: See TracChangeset for help on using the changeset viewer.