size_t track_flag_season(int (*callback)(const double doy, const void *params), const void *params, satdata_mag *data, track_workspace *w) { size_t i; size_t nflagged = 0; /* number of points flagged */ size_t ntrack_flagged = 0; /* number of entire tracks flagged for UT */ if (data->n == 0) return 0; for (i = 0; i < w->n; ++i) { track_data *tptr = &(w->tracks[i]); time_t t = satdata_epoch2timet(tptr->t_eq); double doy = get_season(t); int s = (*callback)(doy, params); if (s) { nflagged += track_flag_track(i, TRACK_FLG_DOY, data, w); ++ntrack_flagged; } } fprintf(stderr, "track_flag_season: flagged %zu/%zu (%.1f%%) tracks due to season\n", ntrack_flagged, w->n, (double) ntrack_flagged / (double) w->n * 100.0); return nflagged; } /* track_flag_season() */
int snregenerate() { int pt=get_tpatch(); int season = get_season(); if (season == 0){ set_season( 1 ); set_repo( get_repods()); } else { set_season( 0 ); set_repo( get_repows()); } return 0; }
int track_print_track(const int header, FILE *fp, const track_data *tptr, const satdata_mag *data) { int s = 0; size_t j; if (header) { j = 1; fprintf(fp, "# Field %zu: timestamp (UT seconds since 1970-01-01 00:00:00 UTC)\n", j++); fprintf(fp, "# Field %zu: UT (hours)\n", j++); fprintf(fp, "# Field %zu: local time (hours)\n", j++); fprintf(fp, "# Field %zu: season (doy)\n", j++); fprintf(fp, "# Field %zu: radius (km)\n", j++); fprintf(fp, "# Field %zu: longitude (degrees)\n", j++); fprintf(fp, "# Field %zu: geocentric latitude (degrees)\n", j++); fprintf(fp, "# Field %zu: QD latitude (degrees)\n", j++); fprintf(fp, "# Field %zu: NEC X residual (nT)\n", j++); fprintf(fp, "# Field %zu: NEC Y residual (nT)\n", j++); fprintf(fp, "# Field %zu: NEC Z residual (nT)\n", j++); fprintf(fp, "# Field %zu: F residual (nT)\n", j++); fprintf(fp, "# Field %zu: NEC X measurement (nT)\n", j++); fprintf(fp, "# Field %zu: NEC Y measurement (nT)\n", j++); fprintf(fp, "# Field %zu: NEC Z measurement (nT)\n", j++); fprintf(fp, "# Field %zu: electron density data (cm^{-3})\n", j++); return s; } for (j = 0; j < tptr->n; ++j) { size_t didx = j + tptr->start_idx; time_t unix_time = satdata_epoch2timet(data->t[didx]); double ut = get_ut(unix_time); double lt = get_localtime(unix_time, data->longitude[didx] * M_PI / 180.0); if (SATDATA_BadData(data->flags[didx])) continue; fprintf(fp, "%ld %.2f %.2f %.1f %.2f %.3f %.3f %8.2f %8.2f %8.2f %8.2f %8.2f %8.2f %8.2f %8.2f %.5e\n", unix_time, ut, lt, get_season(unix_time), data->altitude[didx] + data->R, data->longitude[didx], data->latitude[didx], data->qdlat[didx], tptr->Bx[j], tptr->By[j], tptr->Bz[j], tptr->Bf[j], SATDATA_VEC_X(data->B, didx), SATDATA_VEC_Y(data->B, didx), SATDATA_VEC_Z(data->B, didx), data->ne[didx]); } fprintf(fp, "\n\n"); return s; }
int print_data(const int down_sample, const print_parameters *params, const satdata_mag *data) { int s = 0; size_t i, j; f107_workspace *f107_p = f107_alloc(F107_IDX_FILE); i = 1; printf("# Field %zu: time (UT)\n", i++); printf("# Field %zu: time (decimal year)\n", i++); printf("# Field %zu: UT (hours)\n", i++); printf("# Field %zu: local time (hours)\n", i++); printf("# Field %zu: season (day of year)\n", i++); printf("# Field %zu: EUVAC\n", i++); printf("# Field %zu: longitude (degrees)\n", i++); printf("# Field %zu: latitude (degrees)\n", i++); printf("# Field %zu: altitude (km)\n", i++); printf("# Field %zu: QD latitude (degrees)\n", i++); printf("# Field %zu: satellite direction\n", i++); printf("# Field %zu: electron density (cm^{-3})\n", i++); printf("# Field %zu: scalar field (nT)\n", i++); printf("# Field %zu: X field (nT)\n", i++); printf("# Field %zu: Y field (nT)\n", i++); printf("# Field %zu: Z field (nT)\n", i++); printf("# Field %zu: scalar residual (nT)\n", i++); printf("# Field %zu: X residual (nT)\n", i++); printf("# Field %zu: Y residual (nT)\n", i++); printf("# Field %zu: Z residual (nT)\n", i++); printf("# Field %zu: X main (nT)\n", i++); printf("# Field %zu: Y main (nT)\n", i++); printf("# Field %zu: Z main (nT)\n", i++); printf("# Field %zu: X crust (nT)\n", i++); printf("# Field %zu: Y crust (nT)\n", i++); printf("# Field %zu: Z crust (nT)\n", i++); printf("# Field %zu: X external (nT)\n", i++); printf("# Field %zu: Y external (nT)\n", i++); printf("# Field %zu: Z external (nT)\n", i++); for (i = 0; i < data->n; i += down_sample) { time_t unix_time; double phi = data->longitude[i] * M_PI / 180.0; double lt, ut, euvac; double qdlat = data->qdlat[i]; double B_obs[3], B_main[3], B_crust[3], B_ext[3], B_res[4], B_model[4]; if (data->flags[i]) continue; /* nan vector components */ if (qdlat < params->qd_min || qdlat > params->qd_max) continue; if (data->altitude[i] < params->alt_min || data->altitude[i] > params->alt_max) continue; unix_time = satdata_epoch2timet(data->t[i]); lt = get_localtime(unix_time, phi); if (lt < params->lt_min || lt > params->lt_max) continue; ut = get_ut(unix_time); if (ut < params->ut_min || ut > params->ut_max) continue; f107_get_euvac(unix_time, &euvac, f107_p); B_obs[0] = SATDATA_VEC_X(data->B, i); B_obs[1] = SATDATA_VEC_Y(data->B, i); B_obs[2] = SATDATA_VEC_Z(data->B, i); B_main[0] = SATDATA_VEC_X(data->B_main, i); B_main[1] = SATDATA_VEC_Y(data->B_main, i); B_main[2] = SATDATA_VEC_Z(data->B_main, i); B_crust[0] = SATDATA_VEC_X(data->B_crust, i); B_crust[1] = SATDATA_VEC_Y(data->B_crust, i); B_crust[2] = SATDATA_VEC_Z(data->B_crust, i); B_ext[0] = SATDATA_VEC_X(data->B_ext, i); B_ext[1] = SATDATA_VEC_Y(data->B_ext, i); B_ext[2] = SATDATA_VEC_Z(data->B_ext, i); for (j = 0; j < 3; ++j) { B_model[j] = B_main[j] + B_crust[j] + B_ext[j]; B_res[j] = B_obs[j] - B_model[j]; } /* compute scalar residual */ B_model[3] = gsl_hypot3(B_model[0], B_model[1], B_model[2]); B_res[3] = data->F[i] - B_model[3]; printf("%ld %.8f %.2f %.2f %6.2f %5.1f %10.4f %8.4f %10.4f %10.4f %d %10.4e %10.4f %10.4f %10.4f %10.4f %10.4f %10.4f %10.4f %10.4f %10.4f %10.4f %10.4f %10.4f %10.4f %10.4f %10.4f %10.4f %10.4f\n", unix_time, satdata_epoch2year(data->t[i]), get_ut(unix_time), lt, get_season(unix_time), euvac, data->longitude[i], data->latitude[i], data->altitude[i], qdlat, satdata_mag_satdir(i, data), data->ne[i], data->F[i], SATDATA_VEC_X(data->B, i), SATDATA_VEC_Y(data->B, i), SATDATA_VEC_Z(data->B, i), B_res[3], B_res[0], B_res[1], B_res[2], B_main[0], B_main[1], B_main[2], B_crust[0], B_crust[1], B_crust[2], B_ext[0], B_ext[1], B_ext[2]); } f107_free(f107_p); return s; }
int print_data(const int down_sample, const print_parameters *params, const satdata_efi *data) { int s = 0; size_t i; f107_workspace *f107_p = f107_alloc(F107_IDX_FILE); int year = (int) satdata_epoch2year(data->t[0]); apex_workspace *apex_p = apex_alloc(year); i = 1; printf("# Field %zu: time (CDF_EPOCH)\n", i++); printf("# Field %zu: time (decimal year)\n", i++); printf("# Field %zu: UT (hours)\n", i++); printf("# Field %zu: local time (hours)\n", i++); printf("# Field %zu: season (day of year)\n", i++); printf("# Field %zu: EUVAC\n", i++); printf("# Field %zu: longitude (degrees)\n", i++); printf("# Field %zu: latitude (degrees)\n", i++); printf("# Field %zu: radius (km)\n", i++); printf("# Field %zu: QD latitude (degrees)\n", i++); printf("# Field %zu: E_x (mV/m)\n", i++); printf("# Field %zu: E_y (mV/m)\n", i++); printf("# Field %zu: E_z (mV/m)\n", i++); printf("# Field %zu: v_x (m/s)\n", i++); printf("# Field %zu: v_y (m/s)\n", i++); printf("# Field %zu: v_z (m/s)\n", i++); printf("# Field %zu: ion temperature (K)\n", i++); printf("# Field %zu: satellite direction\n", i++); for (i = 0; i < data->n; i += down_sample) { time_t unix_time; double phi = data->longitude[i] * M_PI / 180.0; double theta = M_PI / 2.0 - data->latitude[i] * M_PI / 180.0; double lt, ut, euvac; double qdlat, alon, alat; if (data->flags[i] > 20) continue; apex_transform(theta, phi, data->r[i] * 1.0e3, &alon, &alat, &qdlat, NULL, NULL, NULL, apex_p); if (qdlat < params->qd_min || qdlat > params->qd_max) continue; if (data->r[i] - R_EARTH_KM < params->alt_min || data->r[i] - R_EARTH_KM > params->alt_max) continue; unix_time = satdata_epoch2timet(data->t[i]); lt = get_localtime(unix_time, phi); if (lt < params->lt_min || lt > params->lt_max) continue; ut = get_ut(unix_time); if (ut < params->ut_min || ut > params->ut_max) continue; f107_get_euvac(unix_time, &euvac, f107_p); printf("%f %.8f %6.2f %6.2f %6.2f %5.1f %10.4f %8.4f %10.4f %10.4f %8.2f %8.2f %8.2f %8.2f %8.2f %8.2f %8.1f %d\n", data->t[i], satdata_epoch2year(data->t[i]), get_ut(unix_time), lt, get_season(unix_time), euvac, data->longitude[i], data->latitude[i], data->r[i], qdlat, SATDATA_VEC_X(data->E, i), SATDATA_VEC_Y(data->E, i), SATDATA_VEC_Z(data->E, i), SATDATA_VEC_X(data->v_ion, i), SATDATA_VEC_Y(data->v_ion, i), SATDATA_VEC_Z(data->v_ion, i), data->Ti[i], satdata_efi_satdir(i, data)); } f107_free(f107_p); apex_free(apex_p); return s; }
int print_data2(const int down_sample, const print_parameters *params, const satdata_efi *data) { int s = 0; size_t i; f107_workspace *f107_p = f107_alloc(F107_IDX_FILE); int year = (int) satdata_epoch2year(data->t[0]); apex_workspace *apex_p = apex_alloc(year); double qdlat_prev = 0.0; const double alpha = 1.0e-2; double mean_Ey = SATDATA_VEC_Y(data->E, 0); i = 1; printf("# Field %zu: time (UT)\n", i++); printf("# Field %zu: time (decimal year)\n", i++); printf("# Field %zu: UT (hours)\n", i++); printf("# Field %zu: local time (hours)\n", i++); printf("# Field %zu: season (day of year)\n", i++); printf("# Field %zu: EUVAC\n", i++); printf("# Field %zu: longitude (degrees)\n", i++); printf("# Field %zu: latitude (degrees)\n", i++); printf("# Field %zu: radius (km)\n", i++); printf("# Field %zu: QD latitude (degrees)\n", i++); printf("# Field %zu: E_x (mV/m)\n", i++); printf("# Field %zu: E_y (mV/m)\n", i++); printf("# Field %zu: E_z (mV/m)\n", i++); printf("# Field %zu: v_x (m/s)\n", i++); printf("# Field %zu: v_y (m/s)\n", i++); printf("# Field %zu: v_z (m/s)\n", i++); printf("# Field %zu: moving average E_y (mV/m)\n", i++); printf("# Field %zu: ion temperature (K)\n", i++); printf("# Field %zu: satellite direction\n", i++); for (i = 0; i < data->n; ++i) { time_t unix_time; double phi = data->longitude[i] * M_PI / 180.0; double theta = M_PI / 2.0 - data->latitude[i] * M_PI / 180.0; double lt, euvac; double qdlat, alon, alat; apex_transform(theta, phi, data->r[i] * 1.0e3, &alon, &alat, &qdlat, NULL, NULL, NULL, apex_p); if (qdlat_prev * qdlat < 0.0 && fabs(qdlat) < 5.0) { /* equator crossing */ if (data->flags[i] > 20) continue; unix_time = satdata_epoch2timet(data->t[i]); lt = get_localtime(unix_time, phi); if (lt < 6.0 || lt > 18.0) continue; f107_get_euvac(unix_time, &euvac, f107_p); printf("%ld %.8f %6.2f %6.2f %6.2f %5.1f %10.4f %8.4f %10.4f %10.4f %8.2f %8.2f %8.2f %8.2f %8.2f %8.2f %8.2f %8.1f %d\n", unix_time, satdata_epoch2year(data->t[i]), get_ut(unix_time), lt, get_season(unix_time), euvac, data->longitude[i], data->latitude[i], data->r[i], qdlat, SATDATA_VEC_X(data->E, i), SATDATA_VEC_Y(data->E, i), SATDATA_VEC_Z(data->E, i), SATDATA_VEC_X(data->v_ion, i), SATDATA_VEC_Y(data->v_ion, i), SATDATA_VEC_Z(data->v_ion, i), mean_Ey, data->Ti[i], satdata_efi_satdir(i, data)); } qdlat_prev = qdlat; mean_Ey = alpha * SATDATA_VEC_Y(data->E, i) + (1.0 - alpha) * mean_Ey; } f107_free(f107_p); apex_free(apex_p); return s; }
int infoGuanacosPatch(){ add_guanacospatch_message(get_x(), get_y(), get_adultos(), get_season()); return 0; }