Exemple #1
0
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() */
Exemple #2
0
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;
}
Exemple #3
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;
}
Exemple #4
0
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;
}
Exemple #5
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 #6
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 #7
0
int infoGuanacosPatch(){

	add_guanacospatch_message(get_x(), get_y(), get_adultos(), get_season());

	return 0;
}