Changeset 27548
- Timestamp:
- Mar 31, 2010, 7:03:35 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/relastro.20100326/src/UpdateObjects.c
r27535 r27548 44 44 StatType statsR, statsD; 45 45 Coords coords; 46 PMFit fit ;46 PMFit fitAve, fitPM, fitPar; 47 47 time_t To; 48 48 off_t Nave, Npm, Npar, Nskip; … … 64 64 65 65 // use J2000 as a reference time 66 T o= ohana_date_to_sec ("2000/01/01");66 T2000 = ohana_date_to_sec ("2000/01/01"); 67 67 68 68 // XXX in the future, use catalog[0].Nsecfilt only? allow catalogs to have variable Nsecfilt? … … 91 91 m = catalog[i].average[j].measureOffset; 92 92 93 Tmin = Tmax = (catalog[i].measure[m].t - T o) / (86400*365.25);93 Tmin = Tmax = (catalog[i].measure[m].t - T2000) / (86400*365.25); 94 94 mode = FIT_MODE; 95 95 96 // find the basic properties of the detections for this object (Tmin, Tmax, Tmean) 97 Tmean = 0; 96 98 for (k = 0; k < catalog[i].average[j].Nmeasure; k++, m++) { 97 99 … … 125 127 Tmin = MIN(Tmin, T[N]); 126 128 Tmax = MAX(Tmax, T[N]); 129 Tmean += T[N]; 127 130 128 131 dR[N] = GetAstromError (&catalog[i].measure[m], ERROR_MODE_RA); … … 153 156 coords.crval1 = R[0]; 154 157 coords.crval2 = D[0]; 158 Tmean /= (float) N; 155 159 156 /* project all of the R,D coordinates to a plane centered on this coordinate */ 160 /* project all of the R,D coordinates to a plane centered on this coordinate 161 set the times to be relative to Tmean */ 157 162 for (k = 0; k < N; k++) { 158 163 RD_to_XY (&X[k], &Y[k], R[k], D[k], &coords); 159 164 dX[k] = dR[k]; 160 165 dY[k] = dD[k]; 166 T[k] -= Tmean; 161 167 // fprintf (stderr, "%d %f %f %f %f %f\n", k, T[k], R[k], D[k], X[k], Y[k]); 162 168 } 163 169 164 /* fit the model components as needed */ 165 switch (mode) { 166 case FIT_AVERAGE: 170 // to judge the quality of the PM and PAR fits, we need to fit all three models and compare Chisq 171 172 // fit the average model 173 if ((mode == FIT_AVERAGE) || (mode == FIT_PM_ONLY) || (mode == FIT_PM_AND_PAR)) { 167 174 liststats (R, dR, N, &statsR); 168 175 liststats (D, dD, N, &statsD); 169 176 170 fit .Ro = statsR.mean;171 fit .dRo = 3600.0*statsR.sigma;172 173 fit .Do = statsD.mean;174 fit .dDo = 3600.0*statsD.sigma;175 176 fit .chisq = 0.5*(statsR.chisq + statsD.chisq);177 fit .Nfit = N;178 179 fit .uR = fit.duR = 0.0;180 fit .uD = fit.duD = 0.0;181 fit .p = fit.dp = 0.0;182 177 fitAve.Ro = statsR.mean; 178 fitAve.dRo = 3600.0*statsR.sigma; 179 180 fitAve.Do = statsD.mean; 181 fitAve.dDo = 3600.0*statsD.sigma; 182 183 fitAve.chisq = 0.5*(statsR.chisq + statsD.chisq); 184 fitAve.Nfit = N; 185 186 fitAve.uR = fitAve.duR = 0.0; 187 fitAve.uD = fitAve.duD = 0.0; 188 fitAve.p = fitAve.dp = 0.0; 189 catalog[i].average[j].flags |= ID_STAR_MEAS_AVE; 183 190 Nave ++; 184 break; 185 186 case FIT_PM_ONLY: 187 FitPM (&fit , X, dX, Y, dY, T, N);188 // fprintf (stderr, "fitted: %f - %f : %f %f : %f %f : %f\n", Tmin, Tmax, fit .Ro, fit.Do, fit.uR, fit.uD, fit.p);191 } 192 193 if ((mode == FIT_PM_ONLY) || (mode == FIT_PM_AND_PAR)) { 194 FitPM (&fitPM, X, dX, Y, dY, T, N); 195 // fprintf (stderr, "fitted: %f - %f : %f %f : %f %f : %f\n", Tmin, Tmax, fitPM.Ro, fitPM.Do, fitPM.uR, fitPM.uD, fitPM.p); 189 196 // project Ro, Do back to RA,DEC 190 XY_to_RD (&fit .Ro, &fit.Do, fit.Ro, fit.Do, &coords);191 // fprintf (stderr, "project: %f %f : %f %f : %f\n", fit .Ro, fit.Do, fit.uR, fit.uD, fit.p);197 XY_to_RD (&fitPM.Ro, &fitPM.Do, fitPM.Ro, fitPM.Do, &coords); 198 // fprintf (stderr, "project: %f %f : %f %f : %f\n", fitPM.Ro, fitPM.Do, fitPM.uR, fitPM.uD, fitPM.p); 192 199 // continue; 193 200 194 fit .p = fit.dp = 0.0;195 201 fitPM.p = fitPM.dp = 0.0; 202 catalog[i].average[j].flags |= ID_STAR_MEAS_PAR; 196 203 Npm ++; 197 break; 198 199 case FIT_PAR_ONLY: 204 } 205 206 if (mode == FIT_PAR_ONLY) { 207 fprintf (stderr, "programming error at %s, %d", __FILE__, __LINE__); 208 exit (2); 209 } 210 211 # if (0) 212 if (mode == FIT_PM_AND_PAR) { 200 213 fprintf (stderr, "programming error at %s, %d", __FILE__, __LINE__); 201 214 exit (2); … … 204 217 ParFactor (&pX[k], &pY[k], R[k], D[k], T[k]); 205 218 } 206 FitPar (&fit, X, dX, Y, dY, pX, pY, N); 207 208 // project Ro, Do back to RA,DEC 209 XY_to_RD (&fit.Ro, &fit.Do, fit.Ro, fit.Do, &coords); 210 211 fit.uR = fit.duR = 0.0; 212 fit.uD = fit.duD = 0.0; 213 219 FitPMandPar (&fitPAR, X, dX, Y, dY, T, pX, pY, N); 220 XY_to_RD (&fitPAR.Ro, &fitPAR.Do, fitPAR.Ro, fitPAR.Do, &coords); 221 catalog[i].average[j].flags |= ID_STAR_MEAS_PAR; 214 222 Npar ++; 215 break;216 217 case FIT_PM_AND_PAR:218 fprintf (stderr, "programming error at %s, %d", __FILE__, __LINE__);219 exit (2);220 221 for (k = 0; k < N; k++) {222 ParFactor (&pX[k], &pY[k], R[k], D[k], T[k]);223 }224 FitPMandPar (&fit, X, dX, Y, dY, T, pX, pY, N);225 XY_to_RD (&fit.Ro, &fit.Do, fit.Ro, fit.Do, &coords);226 Npar ++;227 break;228 229 default:230 fprintf (stderr, "programming error at %s, %d", __FILE__, __LINE__);231 exit (2);232 223 } 224 # endif 233 225 234 226 if (0 && (j < 100)) { … … 257 249 } 258 250 251 /* choose the result based on the chisq values */ 252 253 switch (result) { 254 case FIT_AVERAGE: 255 catalog[i].average[j].flags |= ID_STAR_USE_AVE; 256 fit = fitAve; 257 break; 258 case FIT_PM_ONLY: 259 catalog[i].average[j].flags |= ID_STAR_USE_PM; 260 fit = fitPM; 261 break; 262 case FIT_PM_AND_PAR: 263 catalog[i].average[j].flags |= ID_STAR_USE_PAR; 264 fit = fitPAR; 265 break; 266 } 267 259 268 // the measure fields must be updated before the average fields 260 269 m = catalog[i].average[j].measureOffset; 261 270 for (k = 0; k < catalog[i].average[j].Nmeasure; k++, m++) { 262 // XXX why was this here?? if (catalog[i].measure[m].dbFlags & MEAS_BAD) continue;263 271 setMeanR (fit.Ro, &catalog[i].measure[m], &catalog[i].average[j], &catalog[i].secfilt[j*Nsecfilt]); 264 272 setMeanD (fit.Do, &catalog[i].measure[m], &catalog[i].average[j], &catalog[i].secfilt[j*Nsecfilt]); … … 278 286 catalog[i].average[j].dP = fit.dp; // parallax error in arcsec 279 287 280 catalog[i].average[j].Xp = (fit.Nfit > 1) ? 100.0*log10(fit.chisq) : NAN_S_SHORT; 288 // Xp is supposed to be the position scatter, not the chisq : fix this: 289 // catalog[i].average[j].Xp = (fit.Nfit > 1) ? 100.0*log10(fit.chisq) : NAN_S_SHORT; 290 catalog[i].average[j].chiSqAve = fitAve.ChiSq; 291 catalog[i].average[j].chiSqPM = fitPM.ChiSq; 292 catalog[i].average[j].chiSqPar = fitPar.ChiSq; 293 catalog[i].average[j].Tmean = Tmean; 281 294 } 282 295
Note:
See TracChangeset
for help on using the changeset viewer.
