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 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; }
void apex_stream_close(ApexStream *stream) { fclose(stream->f); apex_free(stream); }