IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 26711


Ignore:
Timestamp:
Jan 28, 2010, 4:42:14 PM (16 years ago)
Author:
eugene
Message:

updates from the trunk

Location:
branches/eam_branches/20091201/Ohana/src/addstar
Files:
1 deleted
11 edited
1 copied

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/20091201/Ohana/src/addstar/Makefile

    r26280 r26711  
    8181$(SRC)/ReadImageHeader.$(ARCH).o \
    8282$(SRC)/UpdateImageIDs.$(ARCH).o \
    83 $(SRC)/update_coords.$(ARCH).o
     83$(SRC)/update_coords.$(ARCH).o \
     84$(SRC)/psps_ids.$(ARCH).o
    8485
    8586ADDSTARD = \
     
    118119$(SRC)/opening_angle.$(ARCH).o \
    119120$(SRC)/replace_match.$(ARCH).o \
    120 $(SRC)/update_coords.$(ARCH).o
     121$(SRC)/update_coords.$(ARCH).o \
     122$(SRC)/psps_ids.$(ARCH).o
    121123
    122124ADDSTART = \
     
    157159$(SRC)/NewImage_Thread.$(ARCH).o \
    158160$(SRC)/NewReflist_Thread.$(ARCH).o \
    159 $(SRC)/NewRefcat_Thread.$(ARCH).o
     161$(SRC)/NewRefcat_Thread.$(ARCH).o \
     162$(SRC)/psps_ids.$(ARCH).o
    160163
    161164ADDSTARC = \
     
    206209$(SRC)/ConfigInit.$(ARCH).o \
    207210$(SRC)/Shutdown.$(ARCH).o \
    208 $(SRC)/SetSignals.$(ARCH).o
     211$(SRC)/SetSignals.$(ARCH).o \
     212$(SRC)/psps_ids.$(ARCH).o
    209213
    210214SEDSTAR = \
  • branches/eam_branches/20091201/Ohana/src/addstar/include/addstar.h

    r26286 r26711  
    289289PhotCode *pmm_get_photcode (char *emulsion, char *filter);
    290290
     291#define PSPS_ID TRUE
     292uint64_t CreatePSPSDetectionID(double tobs, int ccdid, int detID);
     293uint64_t CreatePSPSObjectID(double ra, double dec);
     294
    291295// this is a gnu extension?? caution!
    292296void *memrchr(const void *s, int c, size_t n);
  • branches/eam_branches/20091201/Ohana/src/addstar/src/FilterStars.c

    r21508 r26711  
    11# include "addstar.h"
    2 # define EXTERNAL_ID FALSE
     2# define EXTERNAL_ID TRUE
    33
    44/* exclude some detections based on various filter options:
     
    8888    }
    8989
    90 # if (0)
    9190    if (PSPS_ID) {
    9291      double mjd;
    9392      mjd = ohana_sec_to_mjd (image[0].tzero);
    94       // XXX this is clearly wrong : what does PSPS want?
    95       stars[N].measure.extID = PSPS_create_detectid (mjd, imageID);
     93      stars[N].measure.extID = CreatePSPSDetectionID(mjd, image[0].ccdnum, stars[N].measure.detID);
     94    } else {
     95      stars[N].measure.extID = 0;
    9696    }
    97 # endif
    9897
    99     stars[N].measure.imageID = imageID; // this value is update in UpdateImageIDs
     98    stars[N].measure.imageID = imageID; // this value is updated in UpdateImageIDs
    10099
    101100    N ++;
  • branches/eam_branches/20091201/Ohana/src/addstar/src/LoadData.c

    r26286 r26711  
    1010  char *name;
    1111  int i, j, Nvalid, Nhead, Ndata, Nskip;
     12  uint32_t parentID = UINT32_MAX;
    1213  Stars *inStars;
    1314
     
    5859    // skip the table if there is no data segment (eg, mosaic WRP image)
    5960    if (!strcmp(headerSets[i].extdata, "NONE")) {
     61      if (!strcmp(headerSets[i].exthead, "PHU") && (Nimages > 1)) {
     62        // This image is the parent of subsequent images
     63        parentID = Nvalid;
     64        images[0][Nvalid].parentID = UINT32_MAX;
     65      }
    6066      Nvalid++;
    6167      CHECK_REALLOCATE (images[0], Image, NVALID, Nvalid, 10);
    6268      continue;
    6369    }
     70    images[0][Nvalid].parentID = parentID;
    6471
    6572    // advance the pointer to the start of the corresponding table block
  • branches/eam_branches/20091201/Ohana/src/addstar/src/ReadImageHeader.c

    r26284 r26711  
    55int ReadImageHeader (Header *header, Image *image, int photcode) {
    66
    7   int Nastro, ccdnum, hour, min, Nx, Ny, haveNx, haveNy, sourceID;
     7  int Nastro, hour, min, Nx, Ny, haveNx, haveNy, sourceID;
    88  double tmp, sec, Cerror, ZeroPt, FWHM_X, FWHM_Y;
    9   char *c, photname[64], line[80];
     9  char *c, photname[64], line[80], ccdnum[64];
    1010  PhotCode *photcodeData = NULL;
    1111
     
    174174  }
    175175
    176   if (!gfits_scan (header, CCDNumKeyword, "%d", 1, &ccdnum)) {
    177     image[0].ccdnum = 0xff;
    178   } else {
    179     image[0].ccdnum = ccdnum;
     176  if (!gfits_scan (header, CCDNumKeyword, "%s", 1, ccdnum)) {
     177    fprintf (stderr, "CCDNumKeyword %s not found\n", CCDNumKeyword);
     178    return FALSE;
     179  } else {
     180    // CCDNumKeyword (EXTNAME) is a string yet we need an integer
     181    // RULE: ccdnum is the value of the first string of digits in CCDNumKeyword
     182    // For example: ccdnum(XY42.hdr) = 42, ccdnum(XY01.hdr) = 1
     183    char *p = ccdnum;
     184    // get rid of any leading non-digit characters
     185    while (*p && !isdigit(*p)) p++;
     186    if (*p == 0) {
     187      fprintf (stderr, "invalid ccdnum %s\n", ccdnum);
     188      return FALSE;
     189    }
     190    image[0].ccdnum = atoi(p);
    180191  }
    181192
  • branches/eam_branches/20091201/Ohana/src/addstar/src/UpdateImageIDs.c

    r21508 r26711  
    4040  for (i = 0; i < Nimages; i++) {
    4141    images[i].imageID += imageID;
     42    if (images[i].parentID == UINT32_MAX) {
     43        images[i].parentID = 0;
     44    } else {
     45        images[i].parentID += imageID;
     46    }
    4247  }
    4348
  • branches/eam_branches/20091201/Ohana/src/addstar/src/build_links.c

    r17192 r26711  
    11# include "addstar.h"
     2
     3/*
     4
     5There are two modes for the measure table: sorted and unsorted.
     6
     7In sorted mode, all measures associated with a given average are in a single block.  The block
     8is pointed to by average->measureOffset and the range is average->Nmeasure
     9
     10In unsorted mode, it is not possible to go directly from average to measure without scanning.
     11In this case, it is necessary to use the value measure->averef to find the corresponding
     12average entry. 
     13
     14Note that average->measureOffset and measure->averef are only valid for a given load of the
     15data: they refer to the sequence number in the data blocks.
     16
     17next_meas is a list of the equivalent sequence of the measure block as if it were sorted.
     18
     19to find the sequence of measurements for a given average:
     20n_0 = average->measureOffset
     21n_1 = next_meas[n_0]
     22n_i = next_meas[n_i-1]
     23
     24*/
    225
    326/* build the initial links assuming the table is sorted,
     
    3154}
    3255
     56/* construct measure links which are valid FOR THIS LOAD
     57 * - if we have a full load, we will get links which can
     58 *   be used by other programs (eg, relphot, etc)
     59 * - if we have a partial load, the links are only valid
     60 *   for that partial load
     61 */
     62
     63int *build_measure_links (Average *average, int Naverage, Measure *measure, int Nmeasure) {
     64
     65  int i, m, k, Nm, averef;
     66  int *next;
     67
     68  ALLOCATE (next, int, Nmeasure);
     69
     70  /* reset the Nm, offset values for average */
     71  for (i = 0; i < Naverage; i++) {
     72    average[i].measureOffset = -1;
     73    average[i].Nmeasure     =  0;
     74  }
     75
     76  for (Nm = 0; Nm < Nmeasure; Nm++) {
     77    averef = measure[Nm].averef;
     78    m = average[averef].measureOffset; 
     79    next[Nm] = -1;
     80
     81    if (m == -1) { /* no links yet for source */
     82      average[averef].measureOffset = Nm;
     83      average[averef].Nmeasure     = 1;
     84      continue;
     85    }
     86
     87    for (k = 0; next[m] != -1; k++) {
     88      m = next[m];
     89      if (m >= Nmeasure) {
     90        fprintf (stderr, "WARNING: m out of bounds (1)\n");
     91      }
     92    }
     93
     94    average[averef].Nmeasure = k + 2;
     95    next[m] = Nm;
     96    if (m >= Nmeasure) {
     97      fprintf (stderr, "WARNING: m out of bounds (2)\n");
     98    }
     99  }
     100  return (next);
     101}
     102
     103/* average[].measureOffset, average[].Nmeasure are valid within an addstar run */
     104int add_meas_link (Average *average, int *next, int Nmeasure, int NMEASURE) {
     105
     106  int k, m;
     107
     108  /* if we have trouble, check validity of next[m] : m < Nmeasure */
     109  m = average[0].measureOffset; 
     110
     111  for (k = 0; k < average[0].Nmeasure - 1; k++)  {
     112    m = next[m];
     113    if (m >= NMEASURE) {
     114      fprintf (stderr, "WARNING: m out of bounds (3)\n");
     115    }
     116  }
     117
     118  /* set up references */
     119  next[Nmeasure] = -1;
     120  if (Nmeasure >= NMEASURE) {
     121    fprintf (stderr, "WARNING: Nmeasure out of bounds (1)\n");
     122  }
     123
     124  if (m == -1) {
     125    average[0].measureOffset = Nmeasure;
     126  } else {
     127    next[m] = Nmeasure;
     128    if (m >= NMEASURE) {
     129      fprintf (stderr, "WARNING: m out of bounds (4)\n");
     130    }
     131  }
     132
     133  return (TRUE);
     134}
     135
     136/* Missing does not carry enough information to reconstruct the links
     137   we must always save the missing table, if it exists */
     138
     139Measure *sort_measure (Average *average, int Naverage, Measure *measure, int Nmeasure, int *next) {
     140
     141  int i, k, n, N;
     142  Measure *tmpmeasure;
     143
     144  /* fix order of Measure (memory intensive, but fast) */
     145  N = 0;
     146  ALLOCATE (tmpmeasure, Measure, Nmeasure);
     147  for (i = 0; i < Naverage; i++) {
     148    n = average[i].measureOffset;
     149    average[i].measureOffset = N;
     150    for (k = 0; k < average[i].Nmeasure; k++, N++) {
     151      if (n == -1) abort();
     152      tmpmeasure[N] = measure[n];
     153      if (measure[n].averef != i) abort();
     154      tmpmeasure[N].averef = i;
     155      n = next[n];
     156    }
     157  }
     158  free (measure);
     159  return (tmpmeasure);
     160}
     161
    33162/* build the initial links assuming the table is sorted */
    34163int *init_missing_links (Average *average, int Naverage, Missing *missing, int Nmissing) {
     
    57186}
    58187
    59 /* average[].measureOffset, average[].Nmeasure are valid within an addstar run */
    60 int add_meas_link (Average *average, int *next, int Nmeasure, int NMEASURE) {
    61 
    62   int k, m;
    63 
    64   /* if we have trouble, check validity of next[m] : m < Nmeasure */
    65   m = average[0].measureOffset; 
    66 
    67   for (k = 0; k < average[0].Nmeasure - 1; k++)  {
    68     m = next[m];
    69     if (m >= NMEASURE) {
    70       fprintf (stderr, "WARNING: m out of bounds (3)\n");
    71     }
    72   }
    73 
    74   /* set up references */
    75   next[Nmeasure] = -1;
    76   if (Nmeasure >= NMEASURE) {
    77     fprintf (stderr, "WARNING: Nmeasure out of bounds (1)\n");
    78   }
    79 
    80   if (m == -1) {
    81     average[0].measureOffset = Nmeasure;
    82   } else {
    83     next[m] = Nmeasure;
    84     if (m >= NMEASURE) {
    85       fprintf (stderr, "WARNING: m out of bounds (4)\n");
    86     }
    87   }
    88 
    89   return (TRUE);
    90 }
    91 
    92188int add_miss_link (Average *average, int *next, int Nmissing) {
    93189
     
    109205}
    110206
    111 /* construct measure links which are valid FOR THIS LOAD
    112  * - if we have a full load, we will get links which can
    113  *   be used by other programs (eg, relphot, etc)
    114  * - if we have a partial load, the links are only valid
    115  *   for that partial load
    116  */
    117 
    118 int *build_measure_links (Average *average, int Naverage, Measure *measure, int Nmeasure) {
    119 
    120   int i, m, k, Nm, averef;
    121   int *next;
    122 
    123   ALLOCATE (next, int, Nmeasure);
    124 
    125   /* reset the Nm, offset values for average */
    126   for (i = 0; i < Naverage; i++) {
    127     average[i].measureOffset = -1;
    128     average[i].Nmeasure     =  0;
    129   }
    130 
    131   for (Nm = 0; Nm < Nmeasure; Nm++) {
    132     averef = measure[Nm].averef;
    133     m = average[averef].measureOffset; 
    134     next[Nm] = -1;
    135 
    136     if (m == -1) { /* no links yet for source */
    137       average[averef].measureOffset = Nm;
    138       average[averef].Nmeasure     = 1;
    139       continue;
    140     }
    141 
    142     for (k = 0; next[m] != -1; k++) {
    143       m = next[m];
    144       if (m >= Nmeasure) {
    145         fprintf (stderr, "WARNING: m out of bounds (1)\n");
    146       }
    147     }
    148 
    149     average[averef].Nmeasure = k + 2;
    150     next[m] = Nm;
    151     if (m >= Nmeasure) {
    152       fprintf (stderr, "WARNING: m out of bounds (2)\n");
    153     }
    154   }
    155   return (next);
    156 }
    157 
    158 /* Missing does not carry enough information to reconstruct the links
    159    we must always save the missing table, if it exists */
    160 
    161 Measure *sort_measure (Average *average, int Naverage, Measure *measure, int Nmeasure, int *next) {
    162 
    163   int i, k, n, N;
    164   Measure *tmpmeasure;
    165 
    166   /* fix order of Measure (memory intensive, but fast) */
    167   N = 0;
    168   ALLOCATE (tmpmeasure, Measure, Nmeasure);
    169   for (i = 0; i < Naverage; i++) {
    170     n = average[i].measureOffset;
    171     average[i].measureOffset = N;
    172     for (k = 0; k < average[i].Nmeasure; k++, N++) {
    173       tmpmeasure[N] = measure[n];
    174       tmpmeasure[N].averef = i;
    175       n = next[n];
    176     }
    177   }
    178   free (measure);
    179   return (tmpmeasure);
    180 }
    181 
    182207Missing *sort_missing (Average *average, int Naverage, Missing *missing, int Nmissing, int *next) {
    183208
     
    199224  return (tmpmissing);
    200225}
     226
  • branches/eam_branches/20091201/Ohana/src/addstar/src/find_matches.c

    r26283 r26711  
    271271    catalog[0].average[Nave].catID         = catID;
    272272    catalog[0].average[Nave].flags         = 0;
     273    if (PSPS_ID) {
     274        catalog[0].average[Nave].extID = CreatePSPSObjectID(catalog[0].average[Nave].R,
     275                                                            catalog[0].average[Nave].D);
     276    } else {
     277        catalog[0].average[Nave].extID         = 0;
     278    }
    273279
    274280    objID ++;
  • branches/eam_branches/20091201/Ohana/src/addstar/src/find_matches_closest.c

    r26283 r26711  
    266266    catalog[0].average[Nave].catID         = catID;
    267267    catalog[0].average[Nave].flags         = 0;
     268    if (PSPS_ID) {
     269        catalog[0].average[Nave].extID = CreatePSPSObjectID(catalog[0].average[Nave].R,
     270                                                            catalog[0].average[Nave].D);
     271    } else {
     272        catalog[0].average[Nave].extID         = 0;
     273    }
     274
    268275
    269276    objID ++;
  • branches/eam_branches/20091201/Ohana/src/addstar/src/find_matches_closest_refstars.c

    r26283 r26711  
    291291    catalog[0].average[Nave].catID         = catID;
    292292    catalog[0].average[Nave].flags         = 0;
     293    if (PSPS_ID) {
     294        catalog[0].average[Nave].extID = CreatePSPSObjectID(catalog[0].average[Nave].R,
     295                                                            catalog[0].average[Nave].D);
     296    } else {
     297        catalog[0].average[Nave].extID         = 0;
     298    }
    293299
    294300    objID ++;
  • branches/eam_branches/20091201/Ohana/src/addstar/src/find_matches_refstars.c

    r26283 r26711  
    261261    catalog[0].average[Nave].catID         = catID;
    262262    catalog[0].average[Nave].flags         = 0;
     263    if (PSPS_ID) {
     264        catalog[0].average[Nave].extID = CreatePSPSObjectID(catalog[0].average[Nave].R,
     265                                                            catalog[0].average[Nave].D);
     266    } else {
     267        catalog[0].average[Nave].extID         = 0;
     268    }
     269
    263270
    264271    objID ++;
     
    290297
    291298      stars[N][0].found = Nmeas;
    292       next_meas[Nmeas] = -1;
    293       Nmeas ++;
     299      next_meas[Nmeas] = -1;  // initial value here, update below
     300      Nmeas ++;
     301    }
     302
     303    for (j = 0; j < NREFSTAR_GROUP - 1; j++) {
     304        next_meas[Nmeas - NREFSTAR_GROUP + j] = Nmeas - NREFSTAR_GROUP + j + 1;
    294305    }
    295306    Nave ++;
Note: See TracChangeset for help on using the changeset viewer.