Changeset 38511
- Timestamp:
- Jun 22, 2015, 8:24:37 AM (11 years ago)
- Location:
- branches/eam_branches/ipp-20150616/Ohana/src/addstar/src
- Files:
-
- 2 edited
-
loadgalphot_join.c (modified) (1 diff)
-
loadgalphot_readstars.c (modified) (4 diffs)
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" 1 3 4 typedef struct { 5 int *ID; 6 int *type; 7 int N; 8 } GalPhotIDset; 2 9 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) 12 int *join_IDs (GalPhotIDset *gal, GalPhotIDset *fit) { 4 13 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; 6 15 opihi_int dID; 7 16 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); 10 19 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); 13 22 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; } 16 25 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); 22 29 23 30 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]; 27 34 28 dID = ID1->elements.Int[I] - ID2->elements.Int[J];35 dID = gal->ID[Igal] - fit->ID[Ifit]; 29 36 30 if (dID < 0) { i ++; continue; }31 if (dID > 0) { j++; continue; }37 if (dID < 0) { igal++; continue; } 38 if (dID > 0) { ifit++; continue; } 32 39 33 40 // look for all matches of list2() to list1(i) 34 41 // 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]; 39 46 if (dID == 0) { 47 // XXX find the matching model types 40 48 index1->elements.Int[Nmatch] = I; 41 49 index2->elements.Int[Nmatch] = J; -
branches/eam_branches/ipp-20150616/Ohana/src/addstar/src/loadgalphot_readstars.c
r38510 r38511 42 42 43 43 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]; 44 56 for (i = 0; i < ModelTypeN; i++) { 45 57 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"); 47 69 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; 49 72 } 50 73 … … 71 94 firstCol = TRUE; 72 95 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; 74 97 GET_COLUMN (xfit, EXT_WIDTH_MAJ, "EXT_WIDTH_MAJ", float); 75 98 GET_COLUMN (xfit, EXT_WIDTH_MIN, "EXT_WIDTH_MIN", float); … … 77 100 GET_COLUMN (xfit, EXT_THETA_ERR, "EXT_THETA_ERR", float); 78 101 GET_COLUMN (xfit, INDEX, "EXT_PAR_07", float); 102 int Nfit = Nrow; 79 103 80 104 // free the memory associated with the FITS files 81 105 gfits_free_header (&header_xfit); 82 106 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 } 83 121 84 122 Header header_xgal; … … 117 155 GET_COLUMN (xgal, FR_MINOR_MAX, "FR_MINOR_MAX", float); 118 156 GET_COLUMN (xgal, FR_MINOR_DEL, "FR_MINOR_DEL", float); 157 Ngal = Nrow; 119 158 120 159 // 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); 122 168 123 169 // free the memory associated with the FITS files
Note:
See TracChangeset
for help on using the changeset viewer.
