IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 37585


Ignore:
Timestamp:
Nov 11, 2014, 8:54:37 PM (12 years ago)
Author:
eugene
Message:

add in starpar

Location:
branches/eam_branches/ipp-20140904/Ohana/src/dvomerge
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ipp-20140904/Ohana/src/dvomerge/include/dvomerge.h

    r37512 r37585  
    153153Lensing   *sort_lensing           PROTO((Average *average, off_t Naverage, Lensing *lensing, off_t Nlensing, off_t *next));
    154154
     155off_t     *build_starpar_links    PROTO((Average *average, off_t Naverage, StarPar *starpar, off_t Nstarpar));
     156off_t     *init_starpar_links     PROTO((Average *average, off_t Naverage, StarPar *starpar, off_t Nstarpar));
     157int        add_star_link          PROTO((Average *average, off_t *next, off_t Nstarpar, off_t NSTARPAR));
     158StarPar   *sort_starpar           PROTO((Average *average, off_t Naverage, StarPar *starpar, off_t Nstarpar, off_t *next));
     159
    155160off_t     *init_missing_links     PROTO((Average *average, off_t Naverage, Missing *missing, off_t Nmissing));
    156161int        add_miss_link          PROTO((Average *average, off_t *next, off_t Nmissing));
  • branches/eam_branches/ipp-20140904/Ohana/src/dvomerge/src/LoadCatalog.c

    r37116 r37585  
    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
  • branches/eam_branches/ipp-20140904/Ohana/src/dvomerge/src/build_links.c

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

    r37116 r37585  
    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;
     
    7878      output[0].average[Naverage].Nlensing = Nm;
    7979
     80      Nm = 0;
     81      for (j = 0; j < input[0].average[i].Nstarpar; j++) {
     82          offset = input[0].average[i].starparOffset + j;
     83
     84          output[0].starpar[Nstarpar] = input[0].starpar[offset];
     85          output[0].starpar[Nstarpar].averef = Naverage;
     86
     87          Nstarpar ++;
     88          Nm ++;
     89          if (Nstarpar == NSTARPAR) {
     90              NSTARPAR += 1000;
     91              REALLOCATE (output[0].starpar, StarPar, NSTARPAR);
     92          }
     93      }
     94      output[0].average[Naverage].Nstarpar = Nm;
     95
    8096      Naverage ++;
    8197      if (Naverage == NAVERAGE) {
     
    88104  REALLOCATE (output[0].measure, Measure, MAX (Nmeasure, 1));
    89105  REALLOCATE (output[0].lensing, Lensing, MAX (Nlensing, 1));
     106  REALLOCATE (output[0].starpar, StarPar, MAX (Nstarpar, 1));
    90107  REALLOCATE (output[0].secfilt, SecFilt, NsecfiltOut*MAX (Naverage, 1));
    91108  output[0].Naverage = Naverage;
    92109  output[0].Nlensing = Nlensing;
     110  output[0].Nstarpar = Nstarpar;
    93111  output[0].Nsecf_mem = Naverage * NsecfiltOut;
    94112
  • branches/eam_branches/ipp-20140904/Ohana/src/dvomerge/src/merge_catalogs_old.c

    r37512 r37585  
    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
     
    116117    next_meas = init_measure_links (output[0].average, Nave, output[0].measure, Nmeas);
    117118    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);
    118120  } else {
    119121    next_meas = build_measure_links (output[0].average, Nave, output[0].measure, Nmeas);
    120122    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);
    121124  }   
    122125
     
    180183      REALLOCATE (output[0].measure, Measure, NMEAS);
    181184    }
    182     if (Nlens + input[0].average[N].Nmeasure >= NLENS) {
    183       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;
    184187      REALLOCATE (next_lens, off_t, NLENS);
    185188      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);
    186194    }
    187195
     
    270278    }
    271279
     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
    272298    // update the average properties to reflect the incoming entries:
    273299    // if the original value is NAN but the input value is not, accept the input:
     
    315341      REALLOCATE (output[0].lensing, Lensing, NLENS);
    316342    }
     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    }
    317348    if (Nave >= NAVE) {
    318349      NAVE = Nave + 1000;
     
    412443    }
    413444
     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
    414471    Nave ++;
    415472  }
     
    420477  REALLOCATE (output[0].measure, Measure, Nmeas);
    421478  REALLOCATE (output[0].lensing, Lensing, Nlens);
     479  REALLOCATE (output[0].starpar, StarPar, Nstar);
    422480 
    423481# define NOSORT 0
     
    428486    output[0].measure = sort_measure (output[0].average, Nave, output[0].measure, Nmeas, next_meas);
    429487    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);
    430489  }
    431490
     
    444503  output[0].Nmeasure = Nmeas;
    445504  output[0].Nlensing = Nlens;
     505  output[0].Nstarpar = Nstar;
    446506  output[0].Nsecf_mem = Nave*NsecfiltOut;
    447507  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);
     
    449509  free (next_meas);
    450510  free (next_lens);
     511  free (next_star);
    451512
    452513  free (X2);
Note: See TracChangeset for help on using the changeset viewer.