Exemple #1
0
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;
}
Exemple #2
0
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;
}
Exemple #3
0
void apex_stream_close(ApexStream *stream) {
    fclose(stream->f);
    apex_free(stream);
}