IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 38511


Ignore:
Timestamp:
Jun 22, 2015, 8:24:37 AM (11 years ago)
Author:
eugene
Message:

working on galphot

Location:
branches/eam_branches/ipp-20150616/Ohana/src/addstar/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ipp-20150616/Ohana/src/addstar/src/loadgalphot_join.c

    r38510 r38511  
     1# include "addstar.h"
     2# include "loadgalphot.h"
    13
     4typedef struct {
     5  int *ID;
     6  int *type;
     7  int  N;
     8} GalPhotIDset;
    29
    3 int join_IDs_inner (Vector *ID1, Vector *ID2, Vector *index1, Vector *index2) {
     10// find the entries in 'fit' which match entries in 'gal'
     11// return an index from gal -> fit (for gal[i], fit[index[i]] is a match)
     12int *join_IDs (GalPhotIDset *gal, GalPhotIDset *fit) {
    413 
    5   off_t i, j, first_j, I, J, *N1, *N2, Nmatch, NMATCH, DMATCH;
     14  off_t ifit, igal, first_ifit, Ifit, Igal, *seq_fit, *seq_gal, Nmatch, NMATCH;
    615  opihi_int dID;
    716
    8   NMATCH = MAX(MAX(0.01*ID1->Nelements, 0.01*ID2->Nelements), 100);
    9   DMATCH = NMATCH;
     17  NMATCH = gal->N;
     18  ALLOCATE (idx_gal, off_t, gal->N);
    1019
    11   ResetVector (index1, OPIHI_INT, NMATCH);
    12   ResetVector (index2, OPIHI_INT, NMATCH);
     20  ALLOCATE (seq_gal, off_t, gal->N);
     21  ALLOCATE (seq_fit, off_t, fit->N);
    1322
    14   ALLOCATE (N1, off_t, ID1->Nelements);
    15   ALLOCATE (N2, off_t, ID2->Nelements);
     23  for (i = 0; i < gal->N; i++) { seq_gal[i] = i; }
     24  for (i = 0; i < fit->N; i++) { seq_fit[i] = i; }
    1625
    17   for (i = 0; i < ID1->Nelements; i++) { N1[i] = i; }
    18   for (i = 0; i < ID2->Nelements; i++) { N2[i] = i; }
    19 
    20   sort_IDs_indexonly (ID1->elements.Int, N1, ID1->Nelements);
    21   sort_IDs_indexonly (ID2->elements.Int, N2, ID2->Nelements);
     26  // sort the sequences
     27  sort_IDs_seqonly (gal->ID, seq_gal, gal->N);
     28  sort_IDs_seqonly (fit->ID, seq_fit, fit->N);
    2229
    2330  Nmatch = 0;
    24   for (i = j = 0; (i < ID1->Nelements) && (j < ID2->Nelements);) {
    25     I = N1[i];
    26     J = N2[j];
     31  for (ifit = igal = 0; (igal < gal->N) && (ifit < fit->N);) {
     32    Igal = seq_gal[i];
     33    Ifit = seq_fit[j];
    2734
    28     dID = ID1->elements.Int[I] - ID2->elements.Int[J];
     35    dID = gal->ID[Igal] - fit->ID[Ifit];
    2936
    30     if (dID < 0) { i++; continue; }
    31     if (dID > 0) { j++; continue; }
     37    if (dID < 0) { igal++; continue; }
     38    if (dID > 0) { ifit++; continue; }
    3239
    3340    // look for all matches of list2() to list1(i)
    3441    // this allows for multiple values of ID1 or ID2
    35     first_j = j;
    36     for (j = first_j; (dID == 0) && (j < ID2->Nelements); j++) {
    37       J = N2[j];
    38       dID = ID1->elements.Int[I] - ID2->elements.Int[J];
     42    first_ifit = ifit;
     43    for (ifit = first_ifit; (dID == 0) && (ifit < fit->N); ifit++) {
     44      Ifit = seq_fit[j];
     45      dID = gal->ID[Igal] - fit->ID[Ifit];
    3946      if (dID == 0) {
     47        // XXX find the matching model types
    4048        index1->elements.Int[Nmatch] = I;
    4149        index2->elements.Int[Nmatch] = J;
  • branches/eam_branches/ipp-20150616/Ohana/src/addstar/src/loadgalphot_readstars.c

    r38510 r38511  
    4242
    4343  if (!gfits_scan (PHU, "MTNUM", "%d", 1, &ModelTypeN)) { myAbort ("fail"); }
     44  ALLOCATE (ModelTypeName, char *, ModelTypeN);
     45  ALLOCATE (ModelTypeNum,  int, ModelTypeN);
     46  ALLOCATE (ModelTypeHash, int, ModelTypeN);
     47
     48  int tmpnumber, namehash[256][3];
     49  for (i = 0; i < 256; i++) {
     50    namehash[i][0] = -1;
     51    namehash[i][1] = -1;
     52    namehash[i][2] = -1;
     53  }
     54
     55  char name[256], tmpname[256];
    4456  for (i = 0; i < ModelTypeN; i++) {
    4557    snprintf (name, 64, "MTNAM%02d", i);
    46     if (!gfits_scan (PHU, name, "%s", 1, ModelTypeTmp)) { myAbort ("fail"); }
     58    if (!gfits_scan (PHU, name, "%s", 1, tmpname)) { myAbort ("fail"); }
     59    ModelTypeName[i] = strcreate (tmpname);
     60    int found = FALSE;
     61    int myHash = strhash (tmpname);
     62    ModelTypeHash[i] = myHash;
     63    for (j = 0; (j < 3) && !found; j++) {
     64      if (namehash[myHash][j] != -1) continue;
     65      found = TRUE;
     66      namehash[myHash][j] = i;
     67    }
     68    myAssert (found, "hash conflict");
    4769    snprintf (name, 64, "MTVAL%02d", i);
    48     if (!gfits_scan (PHU, name, "%d", 1, &ModelTypeVal)) { myAbort ("fail"); }
     70    if (!gfits_scan (PHU, name, "%d", 1, &tmpnumber)) { myAbort ("fail"); }
     71    ModelTypeNum[i] = tmpnumber;
    4972  }
    5073
     
    7194  firstCol = TRUE;
    7295  GET_COLUMN (xfit, ID_fit,         "IPP_IDET",      int);
    73   GET_COLUMN (xfit, MODEL_TYPE_fit, "MODEL_TYPE",    char); NcharModel = Ncol;
     96  GET_COLUMN (xfit, MODEL_TYPE_str, "MODEL_TYPE",    char); NcharModel = Ncol;
    7497  GET_COLUMN (xfit, EXT_WIDTH_MAJ,  "EXT_WIDTH_MAJ", float);
    7598  GET_COLUMN (xfit, EXT_WIDTH_MIN,  "EXT_WIDTH_MIN", float);
     
    77100  GET_COLUMN (xfit, EXT_THETA_ERR,  "EXT_THETA_ERR", float);
    78101  GET_COLUMN (xfit, INDEX,          "EXT_PAR_07",    float);
     102  int Nfit = Nrow;
    79103
    80104  // free the memory associated with the FITS files
    81105  gfits_free_header (&header_xfit);
    82106  gfits_free_table (&ftable_xfit);
     107
     108  // convert MODEL_TYPE_str to MODEL_TYPE_fit (transforming strings to values)
     109  ALLOCATE (MODEL_TYPE_fit, int, Nfit);
     110  for (i = 0; i < Nfit; i++) {
     111    int myHash = strhash (MODEL_TYPE_str[i]);
     112    int found = FALSE;
     113    for (j = 0; !found && (j < 3); j++) {
     114      int n = namehash[myHash][j];
     115      if (strcmp(ModelTypeName[n], MODEL_TYPE_str[i])) continue;
     116      MODEL_TYPE_fit[i] = ModelTypeNum[n];
     117      found = TRUE;
     118    }
     119    myAssert (found, "unknown model name? %s", MODEL_TYPE_str[i]);
     120  }
    83121
    84122  Header header_xgal;
     
    117155  GET_COLUMN (xgal, FR_MINOR_MAX,  "FR_MINOR_MAX", float);
    118156  GET_COLUMN (xgal, FR_MINOR_DEL,  "FR_MINOR_DEL", float);
     157  Ngal = Nrow;
    119158
    120159  // i need to match the two lists based on (ID_gal == ID_fit), (MODEL_TYPE_gal == MODEL_TYPE_fit)
    121   join_IDs (ID_gal, ID_fit, index
     160  GalPhotIDset fit, gal;
     161  fit.ID   = ID_fit;
     162  fit.type = MODEL_TYPE_fit;
     163  fit.N    = Nfit;
     164  gal.ID   = ID_gal;
     165  gal.type = MODEL_TYPE_gal;
     166  gal.N    = Ngal;
     167  int *index = join_IDs (&gal, &fit);
    122168
    123169  // free the memory associated with the FITS files
Note: See TracChangeset for help on using the changeset viewer.