IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 37334 for trunk/Ohana


Ignore:
Timestamp:
Aug 29, 2014, 3:45:35 PM (12 years ago)
Author:
eugene
Message:

having trouble with some occasional aborts, add some verbosity to the likely candidates; repair objID in the rare cases where it goes bad (as a 0 or a byte swap)

Location:
trunk/Ohana/src/addstar/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana/src/addstar/src/build_links.c

    r37116 r37334  
    11# include "addstar.h"
     2
     3# define myAbortF(FORMAT,...) { fprintf (stderr, FORMAT, __VA_ARGS__); abort(); }
    24
    35/*
     
    4749
    4850    if (N >= Nmeasure) {
    49       fprintf (stderr, "overflow in init_measure_links\n");
    50       abort ();
     51      myAbort ("overflow in init_measure_links\n");
    5152    }
    5253  }
     
    136137Measure *sort_measure (Average *average, off_t Naverage, Measure *measure, off_t Nmeasure, off_t *next_meas) {
    137138
    138   off_t i, k, n, N;
     139  int i, k, n, N;
    139140  Measure *tmpmeasure;
    140141
     
    146147    average[i].measureOffset = N;
    147148    for (k = 0; k < average[i].Nmeasure; k++, N++) {
    148       if (n == -1) abort();
     149      if (n == -1) myAbortF("invalid measureOffset for ave %d, measureOffset %d, measure %d\n", i, average[i].measureOffset, k);
    149150      tmpmeasure[N] = measure[n];
    150       if (measure[n].averef != i) abort();
     151      if (measure[n].averef != i) myAbortF("invalid averef for ave %d, measureOffset %d, measure %d, averef %d\n", i, average[i].measureOffset, k, measure[n].averef);
    151152      tmpmeasure[N].averef = i;
    152153      n = next_meas[n];
     
    175176      next_miss[N] = -1;
    176177      if (N >= Nmissing) {
    177         fprintf (stderr, "overflow in init_missing_links");
    178         abort ();
     178        myAbort ("overflow in init_missing_links");
    179179      }
    180180      N++;
     
    253253
    254254    if (N >= Nlensing) {
    255       fprintf (stderr, "overflow in init_lensing_links\n");
    256       abort ();
     255      myAbort ("overflow in init_lensing_links\n");
    257256    }
    258257    N++;
     
    343342Lensing *sort_lensing (Average *average, off_t Naverage, Lensing *lensing, off_t Nlensing, off_t *next_lens) {
    344343
    345   off_t i, k, n, N;
     344  int i, k, n, N;
    346345  Lensing *tmplensing;
    347346
     
    354353    average[i].lensingOffset = N;
    355354    for (k = 0; k < average[i].Nlensing; k++, N++) {
    356       if (n == -1) abort();
     355      if (n == -1) myAbortF("invalid lensingOffset for ave %d, lensingOffset %d, lensing %d\n", i, average[i].lensingOffset, k);
    357356      tmplensing[N] = lensing[n];
    358       if (lensing[n].averef != i) abort();
     357      if (lensing[n].averef != i) myAbortF("invalid averef for ave %d, lensingOffset %d, lensing %d, averef %d\n", i, average[i].lensingOffset, k, lensing[n].averef);
    359358      tmplensing[N].averef = i;
    360359      n = next_lens[n];
  • trunk/Ohana/src/addstar/src/resort_catalog.c

    r37116 r37334  
    8282      myAssert(average[averageSeq[i]].catID == measure[measureSeq[i]].catID, "object / detection mismatch");
    8383# if (1)
    84       myAssert(average[averageSeq[i]].objID == measure[measureSeq[i]].objID, "object / detection mismatch");
     84      // myAssert(average[averageSeq[i]].objID == measure[measureSeq[i]].objID, "object / detection mismatch");
     85      // check if the objID is correct. if not, check if it is byte-swapped (this has happened) and repair if so. 
     86      // otherwise, abort
     87      if (average[averageSeq[i]].objID != measure[measureSeq[i]].objID) {
     88        fprintf (stderr, "object / detection mismatch average.objID = %d, measure.objID = %d, catID: %d, detID: %d",
     89                 average[averageSeq[i]].objID, measure[measureSeq[i]].objID,
     90                 measure[measureSeq[i]].catID, measure[measureSeq[i]].detID);
     91        int objIDalt = measure[measureSeq[i]].objID;
     92        char *byte = (char *) &objIDalt;
     93        char tmp;
     94        tmp = byte[0]; byte[0] = byte[3]; byte[3] = tmp;
     95        tmp = byte[1]; byte[1] = byte[2]; byte[2] = tmp;
     96        if (average[averageSeq[i]].objID == objIDalt) {
     97          fprintf (stderr, "objID is byte-swapped, repairing\n");
     98          measure[measureSeq[i]].objID = average[averageSeq[i]].objID; // XXX I don't really like this...
     99        } else if (measure[measureSeq[i]].objID == 0) {
     100          fprintf (stderr, "objID is 0, repairing\n");
     101          measure[measureSeq[i]].objID = average[averageSeq[i]].objID; // XXX I don't really like this...
     102        } else {
     103          myAbort ("objID is NOT byte-swapped, aborting\n");
     104        }
     105      }
    85106# else
    86107      // for reasons I do not understand, the mini dvodbs generated on stsci1X had a handful of detections with an inconsistency between averef and objID. 
Note: See TracChangeset for help on using the changeset viewer.