Changeset 17211
- Timestamp:
- Mar 28, 2008, 3:41:56 PM (18 years ago)
- File:
-
- 1 edited
-
trunk/Ohana/src/relastro/src/UpdateObjects.c (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/relastro/src/UpdateObjects.c
r17152 r17211 40 40 int UpdateObjects (Catalog *catalog, int Ncatalog) { 41 41 42 int i, j, k, m, N ;42 int i, j, k, m, N, Nsecfilt, found, kp; 43 43 StatType statsR, statsD; 44 44 Coords coords; … … 49 49 float errorScale; 50 50 float mag; 51 int mask; 52 PhotCode *code; 51 53 52 54 initObjectData (catalog, Ncatalog); … … 67 69 Nave = Npar = Npm = 0; 68 70 71 // XXX in the future, use catalog[0].Nsecfilt only? allow catalogs to have variable Nsecfilt? 72 Nsecfilt = GetPhotcodeNsecfilt (); 73 assert (catalog[0].Nsecfilt == Nsecfilt); 74 69 75 for (i = 0; i < Ncatalog; i++) { 70 76 … … 73 79 Nskip = 0; 74 80 for (j = 0; j < catalog[i].Naverage; j++) { 75 76 81 /* calculate the average value of R,D for a single star */ 82 83 // skip objects which are known to be problematic 84 // XXX include this code or not? 85 # if (0) 77 86 if (catalog[i].average[j].code & STAR_BAD) { 78 87 Nskip ++; 79 88 continue; 80 89 } 90 # endif 81 91 82 92 N = 0; … … 88 98 for (k = 0; k < catalog[i].average[j].Nmeasure; k++, m++) { 89 99 90 /* exclude measurements by previous outlier detection */ 91 if (catalog[i].measure[m].dbFlags & MEAS_BAD) continue; 100 // exclude measurements by previous outlier detection 101 // XXX include this code or not? 102 # if (0) 103 if (catalog[i].measure[m].dbFlags & MEAS_BAD) { 104 catalog[i].measure[m].dbFlags |= ID_MEAS_SKIP_ASTROM; 105 continue; 106 } 107 # endif 92 108 93 109 /* exclude measurements by quality */ 94 if (PhotFlagSelect && (catalog[i].measure[m].photFlags & PhotFlagValue)) continue; 110 if (PhotFlagSelect) { 111 if (PhotFlagBad) { 112 mask = PhotFlagBad; 113 } else { 114 code = GetPhotcodebyCode (catalog[i].measure[m].photcode); 115 mask = code[0].astromBadMask; 116 } 117 if (mask & catalog[i].measure[m].photFlags) { 118 catalog[i].measure[m].dbFlags |= ID_MEAS_SKIP_ASTROM; 119 continue; 120 } 121 } 95 122 96 123 /* exclude measurements by mag limit */ 97 124 if (ImagSelect) { 98 125 mag = PhotInst (&catalog[i].measure[m]); 99 if (mag < ImagMin) continue; 100 if (mag > ImagMax) continue; 101 } 102 103 R[N] = getMeanR (&catalog[i].measure[m], &catalog[i].average[j], &catalog[i].secfilt[j*PhotNsec]); 104 D[N] = getMeanD (&catalog[i].measure[m], &catalog[i].average[j], &catalog[i].secfilt[j*PhotNsec]); 126 if (mag < ImagMin) { 127 catalog[i].measure[m].dbFlags |= ID_MEAS_SKIP_ASTROM; 128 continue; 129 } 130 if (mag > ImagMax) { 131 catalog[i].measure[m].dbFlags |= ID_MEAS_SKIP_ASTROM; 132 continue; 133 } 134 } 135 136 /* select or exclude measurements by photcode, or equiv photcode, if specified */ 137 if (NphotcodesKeep > 0) { 138 found = FALSE; 139 for (kp = 0; (kp < NphotcodesKeep) && !found; kp++) { 140 if (photcodesKeep[kp][0].code == catalog[i].measure[m].photcode) found = TRUE; 141 if (photcodesKeep[kp][0].code == GetPhotcodeEquivCodebyCode(catalog[i].measure[m].photcode)) found = TRUE; 142 } 143 if (!found) continue; 144 } 145 if (NphotcodesSkip > 0) { 146 found = FALSE; 147 for (kp = 0; (kp < NphotcodesSkip) && !found; kp++) { 148 if (photcodesSkip[kp][0].code == catalog[i].measure[m].photcode) found = TRUE; 149 if (photcodesSkip[kp][0].code == GetPhotcodeEquivCodebyCode(catalog[i].measure[m].photcode)) found = TRUE; 150 } 151 if (found) continue; 152 } 153 154 R[N] = getMeanR (&catalog[i].measure[m], &catalog[i].average[j], &catalog[i].secfilt[j*Nsecfilt]); 155 D[N] = getMeanD (&catalog[i].measure[m], &catalog[i].average[j], &catalog[i].secfilt[j*Nsecfilt]); 105 156 T[N] = (catalog[i].measure[m].t - To) / (86400*365.25) ; // time relative to J2000 in years 106 157 … … 119 170 // position, consider including the lower-quality detections 120 171 172 catalog[i].average[j].code &= ~ID_STAR_FEW; 173 121 174 // XXX add the parallax factor range as a criterion as well 122 175 if ((Tmax - Tmin) < PM_DT_MIN) mode = FIT_AVERAGE; 123 176 if ((mode == FIT_PM_ONLY) && (N < PM_TOOFEW)) mode = FIT_AVERAGE; 124 177 125 // XXX This criterion needs to be better considered: adjust to match Ndof 126 if (N < POS_TOOFEW) { /* too few measurements */ 127 catalog[i].average[j].code |= ID_STAR_FEW; 178 // too few measurements for average position (require 2 values) 179 if (N < 2) { 180 // XXX need to define PHOTOM and ASTROM object flags 181 // catalog[i].average[j].code |= ID_STAR_FEW; 128 182 continue; 129 } else { 130 catalog[i].average[j].code &= ~ID_STAR_FEW; 131 } 183 } 132 184 133 185 /* we need to do the fit in a locally linear space; choose a ref coordinate */ … … 157 209 fit.chisq = 0.5*(statsR.chisq + statsD.chisq); 158 210 fit.Nfit = N; 211 212 fit.uR = fit.duR = 0.0; 213 fit.uD = fit.duD = 0.0; 214 fit.p = fit.dp = 0.0; 215 159 216 Nave ++; 160 217 break; … … 167 224 // fprintf (stderr, "project: %f %f : %f %f : %f\n", fit.Ro, fit.Do, fit.uR, fit.uD, fit.p); 168 225 // continue; 226 227 fit.p = fit.dp = 0.0; 228 169 229 Npm ++; 170 230 break; 171 231 172 232 case FIT_PAR_ONLY: 233 fprintf (stderr, "programming error at %s, %d", __FILE__, __LINE__); 234 exit (2); 235 173 236 for (k = 0; k < N; k++) { 174 237 ParFactor (&pX[k], &pY[k], R[k], D[k], T[k]); … … 178 241 // project Ro, Do back to RA,DEC 179 242 XY_to_RD (&fit.Ro, &fit.Do, fit.Ro, fit.Do, &coords); 243 244 fit.uR = fit.duR = 0.0; 245 fit.uD = fit.duD = 0.0; 246 180 247 Npar ++; 181 248 break; 182 249 183 250 case FIT_PM_AND_PAR: 251 fprintf (stderr, "programming error at %s, %d", __FILE__, __LINE__); 252 exit (2); 253 184 254 for (k = 0; k < N; k++) { 185 255 ParFactor (&pX[k], &pY[k], R[k], D[k], T[k]); … … 207 277 m = catalog[i].average[j].measureOffset; 208 278 for (k = 0; k < catalog[i].average[j].Nmeasure; k++, m++) { 209 if (catalog[i].measure[m].dbFlags & MEAS_BAD) continue;210 setMeanR (fit.Ro, &catalog[i].measure[m], &catalog[i].average[j], &catalog[i].secfilt[j* PhotNsec]);211 setMeanD (fit.Do, &catalog[i].measure[m], &catalog[i].average[j], &catalog[i].secfilt[j* PhotNsec]);279 // XXX why was this here?? if (catalog[i].measure[m].dbFlags & MEAS_BAD) continue; 280 setMeanR (fit.Ro, &catalog[i].measure[m], &catalog[i].average[j], &catalog[i].secfilt[j*Nsecfilt]); 281 setMeanD (fit.Do, &catalog[i].measure[m], &catalog[i].average[j], &catalog[i].secfilt[j*Nsecfilt]); 212 282 } 213 283
Note:
See TracChangeset
for help on using the changeset viewer.
