IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 17284


Ignore:
Timestamp:
Apr 2, 2008, 12:37:15 PM (18 years ago)
Author:
eugene
Message:

add function to join multiple detection sets into single objects

Location:
trunk/Ohana/src/photdbc
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana/src/photdbc/Makefile

    r12842 r17284  
    2727$(SRC)/copy_images.$(ARCH).o       \
    2828$(SRC)/Shutdown.$(ARCH).o          \
     29$(SRC)/join_stars.$(ARCH).o        \
    2930$(SRC)/make_subcatalog.$(ARCH).o       
    3031
     
    3738$(SRC)/load_catalogs.$(ARCH).o     \
    3839$(SRC)/gcatalog.$(ARCH).o          \
    39 $(SRC)/join_stars.$(ARCH).o        \
    4040$(SRC)/unique_measures.$(ARCH).o   \
    4141$(SRC)/flag_measures.$(ARCH).o     \
  • trunk/Ohana/src/photdbc/include/photdbc.h

    r8630 r17284  
    112112void SetProtect (int mode);
    113113int SetSignals ();
    114 
    115 
    116114int copy_images (char *outdir);
  • trunk/Ohana/src/photdbc/src/ConfigInit.c

    r12332 r17284  
    2626  if (VERBOSE) fprintf (stderr, "loaded config file: %s\n", file);
    2727
    28   // WarnConfig (config, "JOIN_RADIUS",            "%lf", 0, &JOIN_RADIUS);
     28  WarnConfig (config, "PHOTDBC_JOIN_RADIUS",       "%lf", 0, &JOIN_RADIUS);
    2929  // WarnConfig (config, "UNIQ_RADIUS",            "%lf", 0, &UNIQ_RADIUS);
    3030
     
    5959  }
    6060
    61   SetZeroPoint (ZERO_POINT);
    62 
    6361  if (*CATMODE == 0) strcpy (CATMODE, "RAW");
    6462  if (*CATFORMAT == 0) strcpy (CATFORMAT, "ELIXIR");
     
    7068    exit (1);
    7169  }
     70  SetZeroPoint (ZERO_POINT);
    7271
    7372  free (config);
  • trunk/Ohana/src/photdbc/src/copy_images.c

    r8630 r17284  
    1010  struct stat filestat;
    1111  char *path;
     12  char filename[1024];
    1213
    1314  path = pathname (ImageCat);
     
    2829  // load the input image data
    2930  if (!dvo_image_load (&in, VERBOSE, FALSE)) Shutdown ("can't read image catalog %s", in.filename);
    30   dvo_image_unlock (&in);
    3131
    3232  // define output filename (replace CATDIR)
     
    3535
    3636  // lock the output catalog
    37   status = dvo_image_lock (&out, ImageOut, 60.0, LCK_SOFT);
     37  status = dvo_image_lock (&out, ImageOut, 60.0, LCK_XCLD);
    3838  if (!status) Shutdown ("ERROR: failure to lock image catalog %s", ImageOut);
    3939  if (out.dbstate != LCK_EMPTY) Shutdown ("ERROR: image table exists %s", ImageOut);
     
    4646  dvo_image_addrows (&out, image, Nimage);
    4747
    48   dvo_image_save (&out, VERBOSE);
     48  dvo_image_update (&out, VERBOSE);
    4949  dvo_image_unlock (&out);
     50
     51  dvo_image_unlock (&in);
     52
     53  // create the photcode file
     54  sprintf (filename, "%s/Photcodes.dat", outdir);
     55  SavePhotcodesFITS (filename);
     56
    5057  return (TRUE);
    5158}
  • trunk/Ohana/src/photdbc/src/join_stars.c

    r16040 r17284  
    88  double *X, *Y, dX, dY, dR, RADIUS2;
    99  double Sr, Sd, Rmid, Dmid;
     10  int basecode, baseNsec, Nsecfilt, Nfirst;
    1011
    1112  Average *naverage, *average;
     
    1617
    1718  if (VERBOSE) fprintf (stderr, "joining overlapping stars\n");
     19  if (VERBOSE) fprintf (stderr, "require base star to have i-band\n");
     20
     21  basecode = GetPhotcodeCodebyName ("i");
     22  baseNsec = GetPhotcodeNsec (basecode);
     23  Nsecfilt = catalog[0].Nsecfilt;
    1824
    1925  average = catalog[0].average;
     
    2632
    2733  /* reference for coords is this region */
     34  Naves = 0;
    2835  Rmid = Dmid = 0;
    2936  for (i = 0; i < Naverage; i++) {
     37    // XXX we should be vigilant against R,D becoming nan : this must be due to pm...
     38    if (isnan(average[i].R) || isnan(average[i].D)) {
     39      average[i].R = 0.0;
     40      average[i].D = 0.0;
     41      continue;
     42    }
    3043    Rmid += average[i].R;
    3144    Dmid += average[i].D;
     45    Naves ++;
    3246  }
    3347  Rmid /= Naverage;
     
    5973
    6074  ALLOCATE (naverage, Average, Naverage);
     75  ALLOCATE (nsecfilt, SecFilt, Naverage*Nsecfilt);
    6176  ALLOCATE (mpointer, Mpointer, Nmeasure);
    6277  for (i = 0; i < Nmeasure; i++) mpointer[i].averef = -1;
     
    6984    Nj = index[j];
    7085
     86    // if ((average[Ni].R > 131.259) && (average[Ni].R < 131.267) && (average[Ni].D > 20.440) && (average[Ni].D < 20.450)) {
     87    // fprintf (stderr, "outer: %f, %f - %f, %f (%f, %f) == (%f, %f)\n", average[Ni].R, average[Ni].D, average[Nj].R, average[Nj].D,
     88    // 3600.0*(average[Ni].R - average[Nj].R), 3600.0*(average[Ni].D - average[Nj].D), X[i] - X[j], Y[i] - Y[j]);
     89    // }
     90
     91    // require base star to meet certain conditions:
     92    if (isnan(secfilt[Ni*Nsecfilt + baseNsec].M)) {
     93      i++;
     94      continue;
     95    }
     96
    7197    /* a new star, add it to naverage[] */
    7298    if (!found[i]) {   
    73       naverage[Naves]        = average[Ni];
    74       naverage[Naves].offset = Nmeas;
    75       for (k = 0; k < average[Ni].Nm; k++) {
    76         m = average[Ni].offset + k;
     99      naverage[Naves]               = average[Ni];
     100      naverage[Naves].measureOffset = Nmeas;
     101
     102      for (k = 0; k < Nsecfilt; k++) {
     103        nsecfilt[Naves*Nsecfilt + k] = secfilt[Ni*Nsecfilt + k];
     104      }
     105
     106      for (k = 0; k < average[Ni].Nmeasure; k++) {
     107        m = average[Ni].measureOffset + k;
    77108        mpointer[Nmeas].measure = m;
    78109        mpointer[Nmeas].averef  = Naves;
     
    87118
    88119    if (found[j]) { j++; continue; }  // don't duplicate
    89     if (j == i) j++; continue; }  // don't auto-correlate
     120    if (j == i)   { j++; continue; }  // don't auto-correlate
    90121
    91122    dX = X[i] - X[j];
     
    102133    for (; (dX > -2*JOIN_RADIUS) && (j < Naverage); j++) {
    103134      Nj = index[j];
     135
     136      // if ((average[Ni].R > 131.259) && (average[Ni].R < 131.267) && (average[Ni].D > 20.440) && (average[Ni].D < 20.450)) {
     137      // fprintf (stderr, "inner: %f, %f - %f, %f (%f, %f) == (%f, %f)\n", average[Ni].R, average[Ni].D, average[Nj].R, average[Nj].D,
     138      // 3600.0*(average[Ni].R - average[Nj].R), 3600.0*(average[Ni].D - average[Nj].D), X[i] - X[j], Y[i] - Y[j]);
     139      // }
     140
    104141      if (found[j]) continue;
    105142      dX = X[i] - X[j];
     
    108145      if (dR < RADIUS2) {  /* matched star, join to first */
    109146
     147        // if ((average[Ni].R > 131.259) && (average[Ni].R < 131.267) && (average[Ni].D > 20.440) && (average[Ni].D < 20.450)) {
     148        // fprintf (stderr, "match: %f, %f - %f, %f\n", average[Ni].R, average[Ni].D, average[Nj].R, average[Nj].D);
     149        // }
     150
    110151        /* define pointers for new measures */
    111         for (k = 0; k < average[Nj].Nm; k++) {
    112           m = average[Nj].offset + k;
     152        for (k = 0; k < average[Nj].Nmeasure; k++) {
     153          m = average[Nj].measureOffset + k;
    113154          mpointer[Nmeas].measure = m;
    114155          mpointer[Nmeas].averef  = Ncurr;
     
    117158          Nmeas ++;
    118159        }
    119         naverage[Ncurr].Nm += average[Nj].Nm;
     160        Nfirst = average[Nj].Nmeasure;
     161        naverage[Ncurr].Nmeasure += average[Nj].Nmeasure;
    120162        found[j] = TRUE;
    121        
     163
     164# if 0
    122165        /* recalculate naverage[Ncurr].RA,DEC */
    123166        /* this must be done here to keep the average position consistent
    124167           for the next star found */
    125         for (Sr = Sd = k = 0; k < naverage[Ncurr].Nm; k++) {
    126           m = naverage[Ncurr].offset + k;
     168        for (Sr = Sd = k = 0; k < naverage[Ncurr].Nmeasure; k++) {
     169          m = naverage[Ncurr].measureOffset + k;
    127170          Sr += mpointer[m].R;
    128171          Sd += mpointer[m].D;
    129172        }
    130         Sr = Sr / naverage[Ncurr].Nm;
    131         Sd = Sd / naverage[Ncurr].Nm;
     173        Sr = Sr / naverage[Ncurr].Nmeasure;
     174        Sd = Sd / naverage[Ncurr].Nmeasure;
    132175        naverage[Ncurr].R = Sr;
    133176        naverage[Ncurr].D = Sd;
    134177
    135         /* update original measurement offsets */
    136         for (k = 0; k < naverage[Ncurr].Nm; k++) {
    137           m = naverage[Ncurr].offset + k;
     178        /* update original measurement offsets for new detections */
     179        for (k = Nfirst; k < naverage[Ncurr].Nmeasure; k++) {
     180          m = naverage[Ncurr].measureOffset + k;
    138181          M = mpointer[m].measure;
    139182          measure[M].dR = 3600.0*(Sr - mpointer[m].R);
     
    143186        /* update current reference star position */
    144187        RD_to_XY (&X[i], &Y[i], Sr, Sd, &tcoords);
     188# else
     189        /* update original measurement offsets for new detections */
     190        for (k = Nfirst; k < naverage[Ncurr].Nmeasure; k++) {
     191          m = naverage[Ncurr].measureOffset + k;
     192          M = mpointer[m].measure;
     193          measure[M].dR = 3600.0*(naverage[Ncurr].R - mpointer[m].R);
     194          measure[M].dD = 3600.0*(naverage[Ncurr].D - mpointer[m].D);
     195        }
     196# endif
    145197      }
    146198    }
     
    148200    j = first_j;
    149201  }
     202
    150203  if (Nmeas != Nmeasure) {
    151     fprintf (stderr, "failure to match measures\n");
     204    fprintf (stderr, "failure to match %d measures (%d of %d matched)\n", Nmeasure - Nmeas, Nmeas, Nmeasure);
    152205  }
    153206 
    154207  /* create a new Measure table in the appropriate sequence */
    155   ALLOCATE (nmeasure, Measure, Nmeasure);
    156   for (i = 0; i < Nmeasure; i++) {
     208  ALLOCATE (nmeasure, Measure, Nmeas);
     209  for (i = 0; i < Nmeas; i++) {
    157210    nmeasure[i]        = measure[mpointer[i].measure];
    158211    nmeasure[i].averef = mpointer[i].averef;
     
    160213
    161214  /* create an empty SecFilt table */
    162   ALLOCATE (nsecfilt, SecFilt, Naves*catalog[0].Nsecfilt);
    163   bzero (nsecfilt, Naves*catalog[0].Nsecfilt*sizeof(SecFilt));
     215  // ALLOCATE (nsecfilt, SecFilt, Naves*catalog[0].Nsecfilt);
     216  // bzero (nsecfilt, Naves*catalog[0].Nsecfilt*sizeof(SecFilt));
    164217
    165218  free (catalog[0].average);
     
    171224  catalog[0].secfilt = nsecfilt;
    172225 
     226  // allow output catalog to retain fewer measures
    173227  catalog[0].Naverage = Naves;
     228  catalog[0].Nmeasure = Nmeas;
    174229  catalog[0].Nsecf_mem = Naves*catalog[0].Nsecfilt;
     230 
     231  return;
    175232}
    176233
     
    185242   (measures are just moved around).  thus, catalog[0].Nmeasure does not change.
    186243*/   
    187    
  • trunk/Ohana/src/photdbc/src/make_subcatalog.c

    r15743 r17284  
    2424
    2525    // exclude stars with too few measurements
    26     if (NMEAS_MIN && (catalog[0].average[i].Nm < NMEAS_MIN)) continue;
     26    if (NMEAS_MIN && (catalog[0].average[i].Nmeasure < NMEAS_MIN)) continue;
    2727
    2828    /* assign average and secfilt values */
    2929    subcatalog[0].average[Naverage] = catalog[0].average[i];
    30     subcatalog[0].average[Naverage].offset = Nmeasure;
     30    subcatalog[0].average[Naverage].measureOffset = Nmeasure;
    3131    for (j = 0; j < Nsecfilt; j++) {
    3232      subcatalog[0].secfilt[Nsecfilt*Naverage+j] = catalog[0].secfilt[Nsecfilt*i+j];
     
    3535    minMag = 32;
    3636    Nm = 0;
    37     for (j = 0; j < catalog[0].average[i].Nm; j++) {
     37    for (j = 0; j < catalog[0].average[i].Nmeasure; j++) {
    3838
    39       offset = catalog[0].average[i].offset + j;
     39      offset = catalog[0].average[i].measureOffset + j;
    4040
    4141      # if 0
     
    8383      continue;
    8484    }
    85     subcatalog[0].average[Naverage].Nn = 0;
    86     subcatalog[0].average[Naverage].Nm = Nm;
     85    subcatalog[0].average[Naverage].Nmissing = 0;
     86    subcatalog[0].average[Naverage].Nmeasure = Nm;
    8787    Naverage ++;
    8888    if (Naverage == NAVERAGE) {
  • trunk/Ohana/src/photdbc/src/photdbc.c

    r15743 r17284  
    6060       
    6161    // XXX add other filters here:
    62     // join_stars (catalog);
     62    join_stars (&outcatalog);
    6363    // unique_measures (catalog);
    6464    // flag_measures (&db, catalog);
Note: See TracChangeset for help on using the changeset viewer.