From 5dd67dfbb1d8f09b805905b7ce406a5aa03d4898 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Thu, 19 Sep 2019 09:02:40 -0400 Subject: [PATCH 001/162] add dummy setup --- setup.py | 1 + 1 file changed, 1 insertion(+) create mode 100644 setup.py diff --git a/setup.py b/setup.py new file mode 100644 index 00000000..02d8fb2e --- /dev/null +++ b/setup.py @@ -0,0 +1 @@ +# setup file should add instruments to pysat list, install reqs for methods From b619db7b3f6a9456c173f2e24a0e48a9d3fb9338 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Thu, 19 Sep 2019 09:02:57 -0400 Subject: [PATCH 002/162] ENH: add methods from pysat branch --- methods/aacgmv2_methods.py | 67 +++++++ methods/apexpy_methods.py | 70 +++++++ methods/pyglow_methods.py | 377 +++++++++++++++++++++++++++++++++++++ 3 files changed, 514 insertions(+) create mode 100644 methods/aacgmv2_methods.py create mode 100644 methods/apexpy_methods.py create mode 100644 methods/pyglow_methods.py diff --git a/methods/aacgmv2_methods.py b/methods/aacgmv2_methods.py new file mode 100644 index 00000000..4c465470 --- /dev/null +++ b/methods/aacgmv2_methods.py @@ -0,0 +1,67 @@ +"""Provides default routines for projecting aacgmv2 model values onto locations +from pysat instruments. + +""" + + +def add_aacgm_coordinates(inst, glat_label='glat', glong_label='glong', + alt_label='alt'): + """ + Uses AACGMV2 package to add AACGM coordinates to instrument object. + + The Altitude Adjusted Corrected Geomagnetic Coordinates library is used + to calculate the latitude, longitude, and local time + of the spacecraft with respect to the geomagnetic field. + + Example + ------- + # function added velow modifies the inst object upon every inst.load + call inst.custom.add(add_quasi_dipole_coordinates, 'modify', + glat_label='custom_label') + + Parameters + ---------- + inst : pysat.Instrument + Designed with pysat_sgp4 in mind + glat_label : string + label used in inst to identify WGS84 geodetic latitude (degrees N) + glong_label : string + label used in inst to identify WGS84 geodetic longitude (degrees E) + alt_label : string + label used in inst to identify WGS84 geodetic altitude (km, height + above surface) + + Returns + ------- + inst + Input pysat.Instrument object modified to include quasi-dipole + coordinates, 'aacgm_lat' for magnetic latitude, 'aacgm_long' for + longitude, and 'aacgm_mlt' for magnetic local time. + + """ + + import aacgmv2 + + aalat = [] + aalon = [] + mlt = [] + for lat, lon, alt, time in zip(inst[glat_label], inst[glong_label], + inst[alt_label], inst.data.index): + # aacgmv2 latitude and longitude from geodetic coords + tlat, tlon, tmlt = aacgmv2.get_aacgm_coord(lat, lon, alt, time) + aalat.append(tlat) + aalon.append(tlon) + mlt.append(tmlt) + + inst['aacgm_lat'] = aalat + inst['aacgm_long'] = aalon + inst['aacgm_mlt'] = mlt + + inst.meta['aacgm_lat'] = {'units': 'degrees', + 'long_name': 'AACGM latitude'} + inst.meta['aacgm_long'] = {'units': 'degrees', + 'long_name': 'AACGM longitude'} + inst.meta['aacgm_mlt'] = {'units': 'hrs', + 'long_name': 'AACGM Magnetic local time'} + + return diff --git a/methods/apexpy_methods.py b/methods/apexpy_methods.py new file mode 100644 index 00000000..240ee13a --- /dev/null +++ b/methods/apexpy_methods.py @@ -0,0 +1,70 @@ +"""Provides default routines for projecting apexpy values onto locations +from pysat instruments. + +""" + + +def add_quasi_dipole_coordinates(inst, glat_label='glat', glong_label='glong', + alt_label='alt'): + """ + Uses Apexpy package to add quasi-dipole coordinates to instrument object. + + The Quasi-Dipole coordinate system includes both the tilt and offset of the + geomagnetic field to calculate the latitude, longitude, and local time + of the spacecraft with respect to the geomagnetic field. + + This system is preferred over AACGM near the equator for LEO satellites. + + Example + ------- + # function added velow modifies the inst object upon every inst.load + call inst.custom.add(add_quasi_dipole_coordinates, 'modify', + glat_label='custom_label') + + Parameters + ---------- + inst : pysat.Instrument + Designed with pysat_sgp4 in mind + glat_label : string + label used in inst to identify WGS84 geodetic latitude (degrees) + glong_label : string + label used in inst to identify WGS84 geodetic longitude (degrees) + alt_label : string + label used in inst to identify WGS84 geodetic altitude (km, height + above surface) + + Returns + ------- + inst + Input pysat.Instrument object modified to include quasi-dipole + coordinates, 'qd_lat' for magnetic latitude, 'qd_long' for longitude, + and 'mlt' for magnetic local time. + + """ + + import apexpy + ap = apexpy.Apex(date=inst.date) + + qd_lat = [] + qd_lon = [] + mlt = [] + for lat, lon, alt, time in zip(inst[glat_label], inst[glong_label], + inst[alt_label], inst.data.index): + # quasi-dipole latitude and longitude from geodetic coords + tlat, tlon = ap.geo2qd(lat, lon, alt) + qd_lat.append(tlat) + qd_lon.append(tlon) + mlt.append(ap.mlon2mlt(tlon, time)) + + inst['qd_lat'] = qd_lat + inst['qd_long'] = qd_lon + inst['mlt'] = mlt + + inst.meta['qd_lat'] = {'units': 'degrees', + 'long_name': 'Quasi dipole latitude'} + inst.meta['qd_long'] = {'units': 'degrees', + 'long_name': 'Quasi dipole longitude'} + inst.meta['qd_mlt'] = {'units': 'hrs', + 'long_name': 'Magnetic local time'} + + return diff --git a/methods/pyglow_methods.py b/methods/pyglow_methods.py new file mode 100644 index 00000000..4d055786 --- /dev/null +++ b/methods/pyglow_methods.py @@ -0,0 +1,377 @@ +# -*- coding: utf-8 -*- +"""Provides default routines for projecting pyglow model values onto locations +from pysat instruments. + +""" + +import pandas as pds +import numpy as np + +from pyglow.pyglow import Point +import pysatMagVect + +# TODO add checks for ECEF and import rest of changes here + + +def add_iri_thermal_plasma(inst, glat_label='glat', glong_label='glong', + alt_label='alt'): + """ + Uses IRI (International Reference Ionosphere) model to simulate an + ionosphere. + + Uses pyglow module to run IRI. Configured to use actual solar parameters + to run model. + + Example + ------- + # function added velow modifies the inst object upon every inst.load + call inst.custom.add(add_iri_thermal_plasma, 'modify', + glat_label='custom_label') + + Parameters + ---------- + inst : pysat.Instrument + Designed with pysat_sgp4 in mind + glat_label : string + label used in inst to identify WGS84 geodetic latitude (degrees) + glong_label : string + label used in inst to identify WGS84 geodetic longitude (degrees) + alt_label : string + label used in inst to identify WGS84 geodetic altitude (km, height + above surface) + + Returns + ------- + inst + Input pysat.Instrument object modified to include thermal plasma + parameters. + 'ion_temp' for ion temperature in Kelvin + 'e_temp' for electron temperature in Kelvin + 'ion_dens' for the total ion density (O+ and H+) + 'frac_dens_o' for the fraction of total density that is O+ + 'frac_dens_h' for the fraction of total density that is H+ + + """ + + iri_params = [] + for time, lat, lon, alt in zip(inst.data.index, inst[glat_label], + inst[glong_label], inst[alt_label]): + # Point class is instantiated. Its parameters are a function of time + # and spatial location + pt = Point(time, lat, lon, alt) + pt.run_iri() + iri = {} + # After the model is run, its members like Ti, ni[O+], etc. can be + # accessed + iri['ion_temp'] = pt.Ti + iri['e_temp'] = pt.Te + iri['ion_dens'] = pt.ni['O+'] + pt.ni['H+'] + pt.ni['HE+'] + # pt.ne - pt.ni['NO+'] - pt.ni['O2+'] - pt.ni['HE+'] + iri['frac_dens_o'] = pt.ni['O+']/iri['ion_dens'] + iri['frac_dens_h'] = pt.ni['H+']/iri['ion_dens'] + iri['frac_dens_he'] = pt.ni['HE+']/iri['ion_dens'] + iri_params.append(iri) + iri = pds.DataFrame(iri_params) + iri.index = inst.data.index + inst[iri.keys()] = iri + + inst.meta['ion_temp'] = {'units': 'Kelvin', 'long_name': 'Ion Temperature'} + inst.meta['ion_dens'] = {'units': 'N/cc', 'long_name': 'Ion Density', + 'desc': 'Total ion density including O+ and H+ ' + + 'from IRI model run.'} + inst.meta['frac_dens_o'] = {'units': '', + 'long_name': 'Fractional O+ Density'} + inst.meta['frac_dens_h'] = {'units': '', + 'long_name': 'Fractional H+ Density'} + + +def add_igrf(inst, glat_label='glat', glong_label='glong', alt_label='alt'): + """ + Uses International Geomagnetic Reference Field (IGRF) model to obtain + geomagnetic field values. + + Uses pyglow module to run IGRF. Configured to use actual solar parameters + to run model. + + Example + ------- + # function added velow modifies the inst object upon every inst.load + call inst.custom.add(add_igrf, 'modify', glat_label='custom_label') + + Parameters + ---------- + inst : pysat.Instrument + Designed with pysat_sgp4 in mind + glat_label : string + label used in inst to identify WGS84 geodetic latitude (degrees) + glong_label : string + label used in inst to identify WGS84 geodetic longitude (degrees) + alt_label : string + label used in inst to identify WGS84 geodetic altitude (km, height + above surface) + + Returns + ------- + inst + Input pysat.Instrument object modified to include HWM winds. + 'B' total geomagnetic field + 'B_east' Geomagnetic field component along east/west directions + (+ east) + 'B_north' Geomagnetic field component along north/south directions + (+ north) + 'B_up' Geomagnetic field component along up/down directions (+ up) + 'B_ecef_x' Geomagnetic field component along ECEF x + 'B_ecef_y' Geomagnetic field component along ECEF y + 'B_ecef_z' Geomagnetic field component along ECEF z + + """ + + igrf_params = [] + for time, lat, lon, alt in zip(inst.data.index, inst[glat_label], + inst[glong_label], inst[alt_label]): + pt = Point(time, lat, lon, alt) + pt.run_igrf() + igrf = {} + igrf['B'] = pt.B + igrf['B_east'] = pt.Bx + igrf['B_north'] = pt.By + igrf['B_up'] = pt.Bz + igrf_params.append(igrf) + igrf = pds.DataFrame(igrf_params) + igrf.index = inst.data.index + inst[igrf.keys()] = igrf + + # convert magnetic field in East/north/up to ECEF basis + x, y, z = pysatMagVect.enu_to_ecef_vector(inst['B_east'], + inst['B_north'], + inst['B_up'], + inst[glat_label], + inst[glong_label]) + inst['B_ecef_x'] = x + inst['B_ecef_y'] = y + inst['B_ecef_z'] = z + + # metadata + inst.meta['B'] = {'units': 'nT', + 'desc': 'Total geomagnetic field from IGRF.'} + inst.meta['B_east'] = {'units': 'nT', + 'desc': 'Geomagnetic field from IGRF expressed ' + + 'using the East/North/Up (ENU) basis.'} + inst.meta['B_north'] = {'units': 'nT', + 'desc': 'Geomagnetic field from IGRF expressed ' + + 'using the East/North/Up (ENU) basis.'} + inst.meta['B_up'] = {'units': 'nT', + 'desc': 'Geomagnetic field from IGRF expressed ' + + 'using the East/North/Up (ENU) basis.'} + + inst.meta['B_ecef_x'] = {'units': 'nT', + 'desc': 'Geomagnetic field from IGRF expressed ' + + 'using the Earth Centered Earth Fixed (ECEF) ' + + 'basis.'} + inst.meta['B_ecef_y'] = {'units': 'nT', + 'desc': 'Geomagnetic field from IGRF expressed ' + + 'using the Earth Centered Earth Fixed (ECEF) ' + + 'basis.'} + inst.meta['B_ecef_z'] = {'units': 'nT', + 'desc': 'Geomagnetic field from IGRF expressed ' + + 'using the Earth Centered Earth Fixed (ECEF) ' + + 'basis.'} + return + + +def add_msis(inst, glat_label='glat', glong_label='glong', alt_label='alt'): + """ + Uses MSIS model to obtain thermospheric values. + + Uses pyglow module to run MSIS. Configured to use actual solar parameters + to run model. + + Example + ------- + # function added velow modifies the inst object upon every inst.load + call inst.custom.add(add_msis, 'modify', glat_label='custom_label') + + Parameters + ---------- + inst : pysat.Instrument + Designed with pysat_sgp4 in mind + glat_label : string + label used in inst to identify WGS84 geodetic latitude (degrees) + glong_label : string + label used in inst to identify WGS84 geodetic longitude (degrees) + alt_label : string + label used in inst to identify WGS84 geodetic altitude (km, height + above surface) + + Returns + ------- + inst + Input pysat.Instrument object modified to include MSIS values winds. + 'Nn' total neutral density particles/cm^3 + 'Nn_N' Nitrogen number density (particles/cm^3) + 'Nn_N2' N2 number density (particles/cm^3) + 'Nn_O' Oxygen number density (particles/cm^3) + 'Nn_O2' O2 number density (particles/cm^3) + 'Tn_msis' Temperature from MSIS (Kelvin) + + """ + + msis_params = [] + for time, lat, lon, alt in zip(inst.data.index, inst[glat_label], + inst[glong_label], inst[alt_label]): + pt = Point(time, lat, lon, alt) + pt.run_msis() + msis = {} + total = 0 + for key in pt.nn.keys(): + total += pt.nn[key] + msis['Nn'] = total + msis['Nn_N'] = pt.nn['N'] + msis['Nn_N2'] = pt.nn['N2'] + msis['Nn_O'] = pt.nn['O'] + msis['Nn_O2'] = pt.nn['O2'] + msis['Tn_msis'] = pt.Tn_msis + msis_params.append(msis) + msis = pds.DataFrame(msis_params) + msis.index = inst.data.index + inst[msis.keys()] = msis + + # metadata + inst.meta['Nn'] = {'units': 'cm^-3', + 'desc': 'Total neutral number particle density ' + + 'from MSIS.'} + inst.meta['Nn_N'] = {'units': 'cm^-3', + 'desc': 'Total nitrogen number particle density ' + + 'from MSIS.'} + inst.meta['Nn_N2'] = {'units': 'cm^-3', + 'desc': 'Total N2 number particle density ' + + 'from MSIS.'} + inst.meta['Nn_O'] = {'units': 'cm^-3', + 'desc': 'Total oxygen number particle density ' + + 'from MSIS.'} + inst.meta['Nn_O2'] = {'units': 'cm^-3', + 'desc': 'Total O2 number particle density ' + + 'from MSIS.'} + inst.meta['Tn_msis'] = {'units': 'K', + 'desc': 'Neutral temperature from MSIS.'} + + return + + +def add_hwm_winds_and_ecef_vectors(inst, glat_label='glat', + glong_label='glong', alt_label='alt'): + """ + Uses HWM (Horizontal Wind Model) model to obtain neutral wind details. + + Uses pyglow module to run HWM. Configured to use actual solar parameters + to run model. + + Example + ------- + # function added velow modifies the inst object upon every inst.load + call inst.custom.add(add_hwm_winds_and_ecef_vectors, 'modify', + glat_label='custom_label') + + Parameters + ---------- + inst : pysat.Instrument + Designed with pysat_sgp4 in mind + glat_label : string + label used in inst to identify WGS84 geodetic latitude (degrees) + glong_label : string + label used in inst to identify WGS84 geodetic longitude (degrees) + alt_label : string + label used in inst to identify WGS84 geodetic altitude (km, height + above surface) + + Returns + ------- + inst + Input pysat.Instrument object modified to include HWM winds. + 'zonal_wind' for the east/west winds (u in model) in m/s + 'meiridional_wind' for the north/south winds (v in model) in m/s + 'unit_zonal_wind_ecef_*' (*=x,y,z) is the zonal vector expressed in + the ECEF basis + 'unit_mer_wind_ecef_*' (*=x,y,z) is the meridional vector expressed + in the ECEF basis + 'sim_inst_wind_*' (*=x,y,z) is the projection of the total wind + vector onto s/c basis + + """ + + hwm_params = [] + for time, lat, lon, alt in zip(inst.data.index, inst[glat_label], + inst[glong_label], inst[alt_label]): + # Point class is instantiated. + # Its parameters are a function of time and spatial location + pt = Point(time, lat, lon, alt) + pt.run_hwm() + hwm = {} + hwm['zonal_wind'] = pt.u + hwm['meridional_wind'] = pt.v + hwm_params.append(hwm) + hwm = pds.DataFrame(hwm_params) + hwm.index = inst.data.index + inst[['zonal_wind', 'meridional_wind']] = hwm[['zonal_wind', + 'meridional_wind']] + + # calculate zonal unit vector in ECEF + # zonal wind: east - west; positive east + # EW direction is tangent to XY location of S/C in ECEF coordinates + mag = np.sqrt(inst['position_ecef_x']**2 + inst['position_ecef_y']**2) + inst['unit_zonal_wind_ecef_x'] = -inst['position_ecef_y']/mag + inst['unit_zonal_wind_ecef_y'] = inst['position_ecef_x']/mag + inst['unit_zonal_wind_ecef_z'] = 0 * inst['position_ecef_x'] + + # calculate meridional unit vector in ECEF + # meridional wind: north - south; positive north + # mer direction completes RHS of position and zonal vector + unit_pos_x, unit_pos_y, unit_pos_z = \ + pysatMagVect.normalize_vector(-inst['position_ecef_x'], + -inst['position_ecef_y'], + -inst['position_ecef_z']) + + # mer = r x zonal + inst['unit_mer_wind_ecef_x'], inst['unit_mer_wind_ecef_y'], inst['unit_mer_wind_ecef_z'] = \ + pysatMagVect.cross_product(unit_pos_x, unit_pos_y, unit_pos_z, + inst['unit_zonal_wind_ecef_x'], + inst['unit_zonal_wind_ecef_y'], + inst['unit_zonal_wind_ecef_z']) + + # Adding metadata information + inst.meta['zonal_wind'] = {'units': 'm/s', 'long_name': 'Zonal Wind', + 'desc': 'HWM model zonal wind'} + inst.meta['meridional_wind'] = {'units': 'm/s', + 'long_name': 'Meridional Wind', + 'desc': 'HWM model meridional wind'} + inst.meta['unit_zonal_wind_ecef_x'] = {'units': '', + 'long_name': 'Zonal Wind Unit ' + + 'ECEF x-vector', + 'desc': 'x-value of zonal wind ' + + 'unit vector in ECEF coordinates'} + inst.meta['unit_zonal_wind_ecef_y'] = {'units': '', + 'long_name': 'Zonal Wind Unit ' + + 'ECEF y-vector', + 'desc': 'y-value of zonal wind ' + + 'unit vector in ECEF coordinates'} + inst.meta['unit_zonal_wind_ecef_z'] = {'units': '', + 'long_name': 'Zonal Wind Unit ' + + 'ECEF z-vector', + 'desc': 'z-value of zonal wind ' + + 'unit vector in ECEF coordinates'} + inst.meta['unit_mer_wind_ecef_x'] = {'units': '', + 'long_name': 'Meridional Wind Unit ' + + 'ECEF x-vector', + 'desc': 'x-value of meridional wind' + + ' unit vector in ECEF coordinates'} + inst.meta['unit_mer_wind_ecef_y'] = {'units': '', + 'long_name': 'Meridional Wind Unit ' + + 'ECEF y-vector', + 'desc': 'y-value of meridional wind' + + ' unit vector in ECEF coordinates'} + inst.meta['unit_mer_wind_ecef_z'] = {'units': '', + 'long_name': 'Meridional Wind Unit ' + + 'ECEF z-vector', + 'desc': 'z-value of meridional wind' + + ' unit vector in ECEF coordinates'} + return From c97e0c7d8912f2526019a0bd7ba7268e32fe1bab Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Thu, 19 Sep 2019 09:04:32 -0400 Subject: [PATCH 003/162] ENH: copy updates from pysat branch --- pysat_sgp4.py | 536 ++------------------------------------------------ 1 file changed, 17 insertions(+), 519 deletions(-) diff --git a/pysat_sgp4.py b/pysat_sgp4.py index 2aa933d2..09aad69a 100644 --- a/pysat_sgp4.py +++ b/pysat_sgp4.py @@ -44,16 +44,22 @@ def init(self): Horiontal Wind Model (HWM). """ + import pysat.instruments.mission_planning.aacgmv2_methods as methaacgm + import pysat.instruments.mission_planning.apexpy_methods as methapex + import pysat.instruments.mission_planning.pyglow_methods as methglow - self.custom.add(add_quasi_dipole_coordinates, 'modify') - self.custom.add(add_aacgm_coordinates, 'modify') + self.custom.add(methapex.add_quasi_dipole_coordinates, 'modify') + self.custom.add(methaacgm.add_aacgm_coordinates, 'modify') self.custom.add(calculate_ecef_velocity, 'modify') self.custom.add(add_sc_attitude_vectors, 'modify') - self.custom.add(add_iri_thermal_plasma, 'modify') - self.custom.add(add_hwm_winds_and_ecef_vectors, 'modify') - self.custom.add(add_igrf, 'modify') + # Thermal Ion Parameters + self.custom.add(methglow.add_iri_thermal_plasma, 'modify') + # Thermal Neutral parameters + self.custom.add(methglow.add_msis, 'modify') + self.custom.add(methglow.add_hwm_winds_and_ecef_vectors, 'modify') # project simulated vectors onto s/c basis # IGRF + self.custom.add(methglow.add_igrf, 'modify') # create metadata to be added along with vector projection in_meta = {'desc': 'IGRF geomagnetic field expressed in the s/c basis.', 'units': 'nT'} @@ -63,8 +69,6 @@ def init(self): meta=[in_meta.copy(), in_meta.copy(), in_meta.copy()]) # project total wind vector self.custom.add(project_hwm_onto_sc, 'modify') - # neutral parameters - self.custom.add(add_msis, 'modify') def load(fnames, tag=None, sat_id=None, obs_long=0., obs_lat=0., obs_alt=0., @@ -97,8 +101,8 @@ def load(fnames, tag=None, sat_id=None, obs_long=0., obs_lat=0., obs_alt=0., Example ------- inst = pysat.Instrument('pysat', 'sgp4', - TLE1='1 25544U 98067A 18135.61844383 .00002728 00000-0 48567-4 0 9998', - TLE2='2 25544 51.6402 181.0633 0004018 88.8954 22.2246 15.54059185113452') + TLE1='1 25544U 98067A 18135.61844383 .00002728 00000-0 48567-4 0 9998', + TLE2='2 25544 51.6402 181.0633 0004018 88.8954 22.2246 15.54059185113452') inst.load(2018, 1) """ @@ -462,512 +466,6 @@ def calculate_ecef_velocity(inst): return -def add_quasi_dipole_coordinates(inst, glat_label='glat', glong_label='glong', - alt_label='alt'): - """ - Uses Apexpy package to add quasi-dipole coordinates to instrument object. - - The Quasi-Dipole coordinate system includes both the tilt and offset of the - geomagnetic field to calculate the latitude, longitude, and local time - of the spacecraft with respect to the geomagnetic field. - - This system is preferred over AACGM near the equator for LEO satellites. - - Example - ------- - # function added velow modifies the inst object upon every inst.load - call inst.custom.add(add_quasi_dipole_coordinates, 'modify', - glat_label='custom_label') - - Parameters - ---------- - inst : pysat.Instrument - Designed with pysat_sgp4 in mind - glat_label : string - label used in inst to identify WGS84 geodetic latitude (degrees) - glong_label : string - label used in inst to identify WGS84 geodetic longitude (degrees) - alt_label : string - label used in inst to identify WGS84 geodetic altitude (km, height - above surface) - - Returns - ------- - inst - Input pysat.Instrument object modified to include quasi-dipole - coordinates, 'qd_lat' for magnetic latitude, 'qd_long' for longitude, - and 'mlt' for magnetic local time. - - """ - - import apexpy - ap = apexpy.Apex(date=inst.date) - - qd_lat = [] - qd_lon = [] - mlt = [] - for lat, lon, alt, time in zip(inst[glat_label], inst[glong_label], - inst[alt_label], inst.data.index): - # quasi-dipole latitude and longitude from geodetic coords - tlat, tlon = ap.geo2qd(lat, lon, alt) - qd_lat.append(tlat) - qd_lon.append(tlon) - mlt.append(ap.mlon2mlt(tlon, time)) - - inst['qd_lat'] = qd_lat - inst['qd_long'] = qd_lon - inst['mlt'] = mlt - - inst.meta['qd_lat'] = {'units': 'degrees', - 'long_name': 'Quasi dipole latitude'} - inst.meta['qd_long'] = {'units': 'degrees', - 'long_name': 'Quasi dipole longitude'} - inst.meta['qd_mlt'] = {'units': 'hrs', - 'long_name': 'Magnetic local time'} - - return - - -def add_aacgm_coordinates(inst, glat_label='glat', glong_label='glong', - alt_label='alt'): - """ - Uses AACGMV2 package to add AACGM coordinates to instrument object. - - The Altitude Adjusted Corrected Geomagnetic Coordinates library is used - to calculate the latitude, longitude, and local time - of the spacecraft with respect to the geomagnetic field. - - Example - ------- - # function added velow modifies the inst object upon every inst.load - call inst.custom.add(add_quasi_dipole_coordinates, 'modify', - glat_label='custom_label') - - Parameters - ---------- - inst : pysat.Instrument - Designed with pysat_sgp4 in mind - glat_label : string - label used in inst to identify WGS84 geodetic latitude (degrees N) - glong_label : string - label used in inst to identify WGS84 geodetic longitude (degrees E) - alt_label : string - label used in inst to identify WGS84 geodetic altitude (km, height - above surface) - - Returns - ------- - inst - Input pysat.Instrument object modified to include quasi-dipole - coordinates, 'aacgm_lat' for magnetic latitude, 'aacgm_long' for - longitude, and 'aacgm_mlt' for magnetic local time. - - """ - - import aacgmv2 - - aalat = [] - aalon = [] - mlt = [] - for lat, lon, alt, time in zip(inst[glat_label], inst[glong_label], - inst[alt_label], inst.data.index): - # aacgmv2 latitude and longitude from geodetic coords - tlat, tlon, tmlt = aacgmv2.get_aacgm_coord(lat, lon, alt, time) - aalat.append(tlat) - aalon.append(tlon) - mlt.append(tmlt) - - inst['aacgm_lat'] = aalat - inst['aacgm_long'] = aalon - inst['aacgm_mlt'] = mlt - - inst.meta['aacgm_lat'] = {'units': 'degrees', - 'long_name': 'AACGM latitude'} - inst.meta['aacgm_long'] = {'units': 'degrees', - 'long_name': 'AACGM longitude'} - inst.meta['aacgm_mlt'] = {'units': 'hrs', - 'long_name': 'AACGM Magnetic local time'} - - return - - -def add_iri_thermal_plasma(inst, glat_label='glat', glong_label='glong', - alt_label='alt'): - """ - Uses IRI (International Reference Ionosphere) model to simulate an - ionosphere. - - Uses pyglow module to run IRI. Configured to use actual solar parameters - to run model. - - Example - ------- - # function added velow modifies the inst object upon every inst.load - call inst.custom.add(add_iri_thermal_plasma, 'modify', - glat_label='custom_label') - - Parameters - ---------- - inst : pysat.Instrument - Designed with pysat_sgp4 in mind - glat_label : string - label used in inst to identify WGS84 geodetic latitude (degrees) - glong_label : string - label used in inst to identify WGS84 geodetic longitude (degrees) - alt_label : string - label used in inst to identify WGS84 geodetic altitude (km, height - above surface) - - Returns - ------- - inst - Input pysat.Instrument object modified to include thermal plasma - parameters. - 'ion_temp' for ion temperature in Kelvin - 'e_temp' for electron temperature in Kelvin - 'ion_dens' for the total ion density (O+ and H+) - 'frac_dens_o' for the fraction of total density that is O+ - 'frac_dens_h' for the fraction of total density that is H+ - - """ - - import pyglow - from pyglow.pyglow import Point - - iri_params = [] - for time, lat, lon, alt in zip(inst.data.index, inst[glat_label], - inst[glong_label], inst[alt_label]): - # Point class is instantiated. Its parameters are a function of time - # and spatial location - pt = Point(time, lat, lon, alt) - pt.run_iri() - iri = {} - # After the model is run, its members like Ti, ni[O+], etc. can be - # accessed - iri['ion_temp'] = pt.Ti - iri['e_temp'] = pt.Te - iri['ion_dens'] = pt.ni['O+'] + pt.ni['H+'] + pt.ni['HE+'] - # pt.ne - pt.ni['NO+'] - pt.ni['O2+'] - pt.ni['HE+'] - iri['frac_dens_o'] = pt.ni['O+']/iri['ion_dens'] - iri['frac_dens_h'] = pt.ni['H+']/iri['ion_dens'] - iri['frac_dens_he'] = pt.ni['HE+']/iri['ion_dens'] - iri_params.append(iri) - iri = pds.DataFrame(iri_params) - iri.index = inst.data.index - inst[iri.keys()] = iri - - inst.meta['ion_temp'] = {'units': 'Kelvin', 'long_name': 'Ion Temperature'} - inst.meta['ion_dens'] = {'units': 'N/cc', 'long_name': 'Ion Density', - 'desc': 'Total ion density including O+ and H+ ' + - 'from IRI model run.'} - inst.meta['frac_dens_o'] = {'units': '', - 'long_name': 'Fractional O+ Density'} - inst.meta['frac_dens_h'] = {'units': '', - 'long_name': 'Fractional H+ Density'} - - -def add_hwm_winds_and_ecef_vectors(inst, glat_label='glat', - glong_label='glong', alt_label='alt'): - """ - Uses HWM (Horizontal Wind Model) model to obtain neutral wind details. - - Uses pyglow module to run HWM. Configured to use actual solar parameters - to run model. - - Example - ------- - # function added velow modifies the inst object upon every inst.load - call inst.custom.add(add_hwm_winds_and_ecef_vectors, 'modify', - glat_label='custom_label') - - Parameters - ---------- - inst : pysat.Instrument - Designed with pysat_sgp4 in mind - glat_label : string - label used in inst to identify WGS84 geodetic latitude (degrees) - glong_label : string - label used in inst to identify WGS84 geodetic longitude (degrees) - alt_label : string - label used in inst to identify WGS84 geodetic altitude (km, height - above surface) - - Returns - ------- - inst - Input pysat.Instrument object modified to include HWM winds. - 'zonal_wind' for the east/west winds (u in model) in m/s - 'meiridional_wind' for the north/south winds (v in model) in m/s - 'unit_zonal_wind_ecef_*' (*=x,y,z) is the zonal vector expressed in - the ECEF basis - 'unit_mer_wind_ecef_*' (*=x,y,z) is the meridional vector expressed - in the ECEF basis - 'sim_inst_wind_*' (*=x,y,z) is the projection of the total wind - vector onto s/c basis - - """ - - import pyglow - import pysatMagVect - - hwm_params = [] - for time, lat, lon, alt in zip(inst.data.index, inst[glat_label], - inst[glong_label], inst[alt_label]): - # Point class is instantiated. - # Its parameters are a function of time and spatial location - pt = pyglow.Point(time, lat, lon, alt) - pt.run_hwm() - hwm = {} - hwm['zonal_wind'] = pt.u - hwm['meridional_wind'] = pt.v - hwm_params.append(hwm) - hwm = pds.DataFrame(hwm_params) - hwm.index = inst.data.index - inst[['zonal_wind', 'meridional_wind']] = hwm[['zonal_wind', - 'meridional_wind']] - - # calculate zonal unit vector in ECEF - # zonal wind: east - west; positive east - # EW direction is tangent to XY location of S/C in ECEF coordinates - mag = np.sqrt(inst['position_ecef_x']**2 + inst['position_ecef_y']**2) - inst['unit_zonal_wind_ecef_x'] = -inst['position_ecef_y']/mag - inst['unit_zonal_wind_ecef_y'] = inst['position_ecef_x']/mag - inst['unit_zonal_wind_ecef_z'] = 0 * inst['position_ecef_x'] - - # calculate meridional unit vector in ECEF - # meridional wind: north - south; positive north - # mer direction completes RHS of position and zonal vector - unit_pos_x, unit_pos_y, unit_pos_z = \ - pysatMagVect.normalize_vector(-inst['position_ecef_x'], - -inst['position_ecef_y'], - -inst['position_ecef_z']) - - # mer = r x zonal - inst['unit_mer_wind_ecef_x'], inst['unit_mer_wind_ecef_y'], inst['unit_mer_wind_ecef_z'] = \ - pysatMagVect.cross_product(unit_pos_x, unit_pos_y, unit_pos_z, - inst['unit_zonal_wind_ecef_x'], - inst['unit_zonal_wind_ecef_y'], - inst['unit_zonal_wind_ecef_z']) - - # Adding metadata information - inst.meta['zonal_wind'] = {'units': 'm/s', 'long_name': 'Zonal Wind', - 'desc': 'HWM model zonal wind'} - inst.meta['meridional_wind'] = {'units': 'm/s', - 'long_name': 'Meridional Wind', - 'desc': 'HWM model meridional wind'} - inst.meta['unit_zonal_wind_ecef_x'] = {'units': '', - 'long_name': 'Zonal Wind Unit ' + - 'ECEF x-vector', - 'desc': 'x-value of zonal wind ' + - 'unit vector in ECEF coordinates'} - inst.meta['unit_zonal_wind_ecef_y'] = {'units': '', - 'long_name': 'Zonal Wind Unit ' + - 'ECEF y-vector', - 'desc': 'y-value of zonal wind ' + - 'unit vector in ECEF coordinates'} - inst.meta['unit_zonal_wind_ecef_z'] = {'units': '', - 'long_name': 'Zonal Wind Unit ' + - 'ECEF z-vector', - 'desc': 'z-value of zonal wind ' + - 'unit vector in ECEF coordinates'} - inst.meta['unit_mer_wind_ecef_x'] = {'units': '', - 'long_name': 'Meridional Wind Unit ' + - 'ECEF x-vector', - 'desc': 'x-value of meridional wind' + - ' unit vector in ECEF coordinates'} - inst.meta['unit_mer_wind_ecef_y'] = {'units': '', - 'long_name': 'Meridional Wind Unit ' + - 'ECEF y-vector', - 'desc': 'y-value of meridional wind' + - ' unit vector in ECEF coordinates'} - inst.meta['unit_mer_wind_ecef_z'] = {'units': '', - 'long_name': 'Meridional Wind Unit ' + - 'ECEF z-vector', - 'desc': 'z-value of meridional wind' + - ' unit vector in ECEF coordinates'} - return - - -def add_igrf(inst, glat_label='glat', glong_label='glong', alt_label='alt'): - """ - Uses International Geomagnetic Reference Field (IGRF) model to obtain - geomagnetic field values. - - Uses pyglow module to run IGRF. Configured to use actual solar parameters - to run model. - - Example - ------- - # function added velow modifies the inst object upon every inst.load - call inst.custom.add(add_igrf, 'modify', glat_label='custom_label') - - Parameters - ---------- - inst : pysat.Instrument - Designed with pysat_sgp4 in mind - glat_label : string - label used in inst to identify WGS84 geodetic latitude (degrees) - glong_label : string - label used in inst to identify WGS84 geodetic longitude (degrees) - alt_label : string - label used in inst to identify WGS84 geodetic altitude (km, height - above surface) - - Returns - ------- - inst - Input pysat.Instrument object modified to include HWM winds. - 'B' total geomagnetic field - 'B_east' Geomagnetic field component along east/west directions - (+ east) - 'B_north' Geomagnetic field component along north/south directions - (+ north) - 'B_up' Geomagnetic field component along up/down directions (+ up) - 'B_ecef_x' Geomagnetic field component along ECEF x - 'B_ecef_y' Geomagnetic field component along ECEF y - 'B_ecef_z' Geomagnetic field component along ECEF z - - """ - - import pyglow - from pyglow.pyglow import Point - import pysatMagVect - - igrf_params = [] - for time, lat, lon, alt in zip(inst.data.index, inst[glat_label], - inst[glong_label], inst[alt_label]): - pt = Point(time, lat, lon, alt) - pt.run_igrf() - igrf = {} - igrf['B'] = pt.B - igrf['B_east'] = pt.Bx - igrf['B_north'] = pt.By - igrf['B_up'] = pt.Bz - igrf_params.append(igrf) - igrf = pds.DataFrame(igrf_params) - igrf.index = inst.data.index - inst[igrf.keys()] = igrf - - # convert magnetic field in East/north/up to ECEF basis - x, y, z = pysatMagVect.enu_to_ecef_vector(inst['B_east'], - inst['B_north'], - inst['B_up'], - inst[glat_label], - inst[glong_label]) - inst['B_ecef_x'] = x - inst['B_ecef_y'] = y - inst['B_ecef_z'] = z - - # metadata - inst.meta['B'] = {'units': 'nT', - 'desc': 'Total geomagnetic field from IGRF.'} - inst.meta['B_east'] = {'units': 'nT', - 'desc': 'Geomagnetic field from IGRF expressed ' + - 'using the East/North/Up (ENU) basis.'} - inst.meta['B_north'] = {'units': 'nT', - 'desc': 'Geomagnetic field from IGRF expressed ' + - 'using the East/North/Up (ENU) basis.'} - inst.meta['B_up'] = {'units': 'nT', - 'desc': 'Geomagnetic field from IGRF expressed ' + - 'using the East/North/Up (ENU) basis.'} - - inst.meta['B_ecef_x'] = {'units': 'nT', - 'desc': 'Geomagnetic field from IGRF expressed ' + - 'using the Earth Centered Earth Fixed (ECEF) ' + - 'basis.'} - inst.meta['B_ecef_y'] = {'units': 'nT', - 'desc': 'Geomagnetic field from IGRF expressed ' + - 'using the Earth Centered Earth Fixed (ECEF) ' + - 'basis.'} - inst.meta['B_ecef_z'] = {'units': 'nT', - 'desc': 'Geomagnetic field from IGRF expressed ' + - 'using the Earth Centered Earth Fixed (ECEF) ' + - 'basis.'} - return - - -def add_msis(inst, glat_label='glat', glong_label='glong', alt_label='alt'): - """ - Uses MSIS model to obtain thermospheric values. - - Uses pyglow module to run MSIS. Configured to use actual solar parameters - to run model. - - Example - ------- - # function added velow modifies the inst object upon every inst.load - call inst.custom.add(add_msis, 'modify', glat_label='custom_label') - - Parameters - ---------- - inst : pysat.Instrument - Designed with pysat_sgp4 in mind - glat_label : string - label used in inst to identify WGS84 geodetic latitude (degrees) - glong_label : string - label used in inst to identify WGS84 geodetic longitude (degrees) - alt_label : string - label used in inst to identify WGS84 geodetic altitude (km, height - above surface) - - Returns - ------- - inst - Input pysat.Instrument object modified to include MSIS values winds. - 'Nn' total neutral density particles/cm^3 - 'Nn_N' Nitrogen number density (particles/cm^3) - 'Nn_N2' N2 number density (particles/cm^3) - 'Nn_O' Oxygen number density (particles/cm^3) - 'Nn_O2' O2 number density (particles/cm^3) - 'Tn_msis' Temperature from MSIS (Kelvin) - - """ - - import pyglow - from pyglow.pyglow import Point - - msis_params = [] - for time, lat, lon, alt in zip(inst.data.index, inst[glat_label], - inst[glong_label], inst[alt_label]): - pt = Point(time, lat, lon, alt) - pt.run_msis() - msis = {} - total = 0 - for key in pt.nn.keys(): - total += pt.nn[key] - msis['Nn'] = total - msis['Nn_N'] = pt.nn['N'] - msis['Nn_N2'] = pt.nn['N2'] - msis['Nn_O'] = pt.nn['O'] - msis['Nn_O2'] = pt.nn['O2'] - msis['Tn_msis'] = pt.Tn_msis - msis_params.append(msis) - msis = pds.DataFrame(msis_params) - msis.index = inst.data.index - inst[msis.keys()] = msis - - # metadata - inst.meta['Nn'] = {'units': 'cm^-3', - 'desc': 'Total neutral number particle density ' + - 'from MSIS.'} - inst.meta['Nn_N'] = {'units': 'cm^-3', - 'desc': 'Total nitrogen number particle density ' + - 'from MSIS.'} - inst.meta['Nn_N2'] = {'units': 'cm^-3', - 'desc': 'Total N2 number particle density ' + - 'from MSIS.'} - inst.meta['Nn_O'] = {'units': 'cm^-3', - 'desc': 'Total oxygen number particle density ' + - 'from MSIS.'} - inst.meta['Nn_O2'] = {'units': 'cm^-3', - 'desc': 'Total O2 number particle density ' + - 'from MSIS.'} - inst.meta['Tn_msis'] = {'units': 'K', - 'desc': 'Neutral temperature from MSIS.'} - - return - - def project_ecef_vector_onto_sc(inst, x_label, y_label, z_label, new_x_label, new_y_label, new_z_label, meta=None): @@ -1186,7 +684,7 @@ def plot_simulated_data(ivm, filename=None): lon0 -= 360. lon1 -= 360. ivm[:, 'glong'] -= 360. - + m = Basemap(projection='mill', llcrnrlat=-60, urcrnrlat=60., urcrnrlon=lon1.copy(), llcrnrlon=lon0.copy(), resolution='c', ax=ax6, fix_aspect=False) @@ -1229,9 +727,9 @@ def plot_simulated_data(ivm, filename=None): ax6_bar = f.add_subplot(gs[4, 1]) # plt.colorbar(sm) - cbar = plt.colorbar(cax=ax6_bar, ax=ax6, mappable=sm, - orientation='vertical', - ticks=[300., 400., 500.]) + plt.colorbar(cax=ax6_bar, ax=ax6, mappable=sm, + orientation='vertical', + ticks=[300., 400., 500.]) plt.xlabel('Altitude') plt.ylabel('km') From a44c2e934d2b5bf9fd9d66a159044bcf9ccd9efd Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Thu, 19 Sep 2019 09:07:16 -0400 Subject: [PATCH 004/162] STY: Generalize simulated instrument name --- pysat_sgp4.py | 66 +++++++++++++++++++++++++-------------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/pysat_sgp4.py b/pysat_sgp4.py index 09aad69a..b05a142a 100644 --- a/pysat_sgp4.py +++ b/pysat_sgp4.py @@ -567,7 +567,7 @@ def project_hwm_onto_sc(inst): return -def plot_simulated_data(ivm, filename=None): +def plot_simulated_data(inst, filename=None): import matplotlib import matplotlib.pyplot as plt @@ -581,30 +581,30 @@ def plot_simulated_data(ivm, filename=None): out_fname = filename # make monotonically increasing longitude signal - diff = ivm['glong'].diff() + diff = inst['glong'].diff() idx, = np.where(diff < 0.) for item in idx: - ivm[item:, 'glong'] += 360. + inst[item:, 'glong'] += 360. f = plt.figure(figsize=(8.5, 7)) - time1 = ivm.data.index[0].strftime('%Y-%h-%d %H:%M:%S') - if ivm.data.index[0].date() == ivm.data.index[-1].date(): - time2 = ivm.data.index[-1].strftime('%H:%M:%S') + time1 = inst.data.index[0].strftime('%Y-%h-%d %H:%M:%S') + if inst.data.index[0].date() == inst.data.index[-1].date(): + time2 = inst.data.index[-1].strftime('%H:%M:%S') else: - time2 = ivm.data.index[-1].strftime('%Y-%h-%d %H:%M:%S') + time2 = inst.data.index[-1].strftime('%Y-%h-%d %H:%M:%S') # Overall Plot Title - plt.suptitle(''.join(('SPORT IVM ', time1, ' -- ', time2)), fontsize=18) + plt.suptitle(''.join(('Simulated inst ', time1, ' -- ', time2)), fontsize=18) # create grid for plots gs = gridspec.GridSpec(5, 2, width_ratios=[12, 1]) ax = f.add_subplot(gs[0, 0]) - plt.plot(np.log10(ivm['ion_dens']), 'k', label='total') - plt.plot(np.log10(ivm['ion_dens']*ivm['frac_dens_o']), 'r', label='O+') - plt.plot(np.log10(ivm['ion_dens']*ivm['frac_dens_h']), 'b', label='H+') - # plt.plot(np.log10(ivm['ion_dens']*ivm['frac_dens_he']), 'g', label='He+') + plt.plot(np.log10(inst['ion_dens']), 'k', label='total') + plt.plot(np.log10(inst['ion_dens']*inst['frac_dens_o']), 'r', label='O+') + plt.plot(np.log10(inst['ion_dens']*inst['frac_dens_h']), 'b', label='H+') + # plt.plot(np.log10(inst['ion_dens']*inst['frac_dens_he']), 'g', label='He+') plt.legend(loc=(01.01, 0.15)) ax.set_title('Log Ion Density') ax.set_ylabel('Log Density (N/cc)') @@ -612,7 +612,7 @@ def plot_simulated_data(ivm, filename=None): ax.axes.get_xaxis().set_visible(False) ax2 = f.add_subplot(gs[1, 0], sharex=ax) - plt.plot(ivm['ion_temp']) + plt.plot(inst['ion_temp']) plt.legend(loc=(1.01, 0.15)) ax2.set_title('Ion Temperature') ax2.set_ylabel('Temp (K)') @@ -620,12 +620,12 @@ def plot_simulated_data(ivm, filename=None): ax2.axes.get_xaxis().set_visible(False) # determine altitudes greater than 770 km - # idx, = np.where(ivm['alt'] > 770.) + # idx, = np.where(inst['alt'] > 770.) ax3 = f.add_subplot(gs[2, 0], sharex=ax) - plt.plot(ivm['sim_wind_sc_x'], color='b', linestyle='--') - plt.plot(ivm['sim_wind_sc_y'], color='r', linestyle='--') - plt.plot(ivm['sim_wind_sc_z'], color='g', linestyle='--') + plt.plot(inst['sim_wind_sc_x'], color='b', linestyle='--') + plt.plot(inst['sim_wind_sc_y'], color='r', linestyle='--') + plt.plot(inst['sim_wind_sc_z'], color='g', linestyle='--') ax3.set_title('Neutral Winds in S/C X, Y, and Z') ax3.set_ylabel('Velocity (m/s)') ax3.set_ylim([-200., 200.]) @@ -636,9 +636,9 @@ def plot_simulated_data(ivm, filename=None): # plt.setp(ax3.xaxis.get_majorticklabels(), rotation=20, ha='right') ax4 = f.add_subplot(gs[3, 0], sharex=ax) - plt.plot(ivm['B_sc_x']*1e5, color='b', linestyle='--') - plt.plot(ivm['B_sc_y']*1e5, color='r', linestyle='--') - plt.plot(ivm['B_sc_z']*1e5, color='g', linestyle='--') + plt.plot(inst['B_sc_x']*1e5, color='b', linestyle='--') + plt.plot(inst['B_sc_y']*1e5, color='r', linestyle='--') + plt.plot(inst['B_sc_z']*1e5, color='g', linestyle='--') ax4.set_title('Magnetic Field in S/C X, Y, and Z') ax4.set_ylabel('Gauss') ax4.set_ylim([-3.5, 3.5]) @@ -648,19 +648,19 @@ def plot_simulated_data(ivm, filename=None): # # xlabels = [label[0:6] for label in xlabels] plt.setp(ax4.xaxis.get_majorticklabels(), rotation=20, ha='right') - # ivm info + # inst info ax6 = f.add_subplot(gs[4, 0]) # do world plot if time to be plotted is less than 285 minutes, less than # 3 orbits - time_diff = ivm.data.index[-1] - ivm.data.index[0] + time_diff = inst.data.index[-1] - inst.data.index[0] if time_diff > pds.Timedelta(minutes=285): # do long time plot - ivm['glat'].plot(label='glat') # legend=True, label='mlat') - ivm['mlt'].plot(label='mlt') # legend=True, label='mlt') + inst['glat'].plot(label='glat') # legend=True, label='mlat') + inst['mlt'].plot(label='mlt') # legend=True, label='mlt') plt.title('Satellite Position') plt.legend(['mlat', 'mlt'], loc=(1.01, 0.15)) - # ivm['glong'].plot(secondary_y = True, label='glong')#legend=True, + # inst['glong'].plot(secondary_y = True, label='glong')#legend=True, # secondary_y = True, label='glong') else: @@ -671,9 +671,9 @@ def plot_simulated_data(ivm, filename=None): ax6.set_position([s1pos[0], s6pos[1]+.008, s1pos[2], s1pos[3]]) # fix longitude range for plot. Pad longitude so that first sample - # aligned with ivm measurement sample - lon0 = ivm[0, 'glong'] - lon1 = ivm[-1, 'glong'] + # aligned with inst measurement sample + lon0 = inst[0, 'glong'] + lon1 = inst[-1, 'glong'] # enforce minimal longitude window, keep graphics from being too # disturbed @@ -683,7 +683,7 @@ def plot_simulated_data(ivm, filename=None): if lon1 > 720: lon0 -= 360. lon1 -= 360. - ivm[:, 'glong'] -= 360. + inst[:, 'glong'] -= 360. m = Basemap(projection='mill', llcrnrlat=-60, urcrnrlat=60., urcrnrlon=lon1.copy(), llcrnrlon=lon0.copy(), @@ -699,8 +699,8 @@ def plot_simulated_data(ivm, filename=None): m.drawmeridians(np.arange(plon, plon+360.-22.5, 60), labels=[0, 0, 0, 1], ax=ax6) m.drawparallels(np.arange(-20, 20, 20)) - # time midway through ivm to plot terminator locations - midDate = ivm.data.index[len(ivm.data.index)//2] + # time midway through inst to plot terminator locations + midDate = inst.data.index[len(inst.data.index)//2] # plot day/night terminators try: @@ -708,7 +708,7 @@ def plot_simulated_data(ivm, filename=None): except ValueError: pass - x, y = m(ivm['glong'].values, ivm['glat'].values) + x, y = m(inst['glong'].values, inst['glat'].values) points = np.array([x, y]).T.reshape(-1, 1, 2) segments = np.concatenate([points[:-1], points[1:]], axis=1) plot_norm = plt.Normalize(300, 500) @@ -719,7 +719,7 @@ def plot_simulated_data(ivm, filename=None): lc = LineCollection(segments, cmap=plot_cmap, norm=plot_norm, linewidths=5.0) - lc.set_array(ivm['alt'].values) + lc.set_array(inst['alt'].values) sm = plt.cm.ScalarMappable(cmap=plot_cmap, norm=plot_norm) sm._A = [] From b44a38729b57cb5ba8c1f6fc403d2388894404f8 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Tue, 22 Oct 2019 22:52:22 -0400 Subject: [PATCH 005/162] move methods directory --- pysatMissionPlanning/__init__.py | 4 ++-- pysatMissionPlanning/methods/__init__.py | 8 ++++++++ .../methods/aacgmv2.py | 0 .../methods/apexpy.py | 0 .../methods/pyglow.py | 0 5 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 pysatMissionPlanning/methods/__init__.py rename methods/aacgmv2_methods.py => pysatMissionPlanning/methods/aacgmv2.py (100%) rename methods/apexpy_methods.py => pysatMissionPlanning/methods/apexpy.py (100%) rename methods/pyglow_methods.py => pysatMissionPlanning/methods/pyglow.py (100%) diff --git a/pysatMissionPlanning/__init__.py b/pysatMissionPlanning/__init__.py index 937d1144..88e70b90 100644 --- a/pysatMissionPlanning/__init__.py +++ b/pysatMissionPlanning/__init__.py @@ -2,9 +2,9 @@ from __future__ import absolute_import import os -from pysatMissionPlanning import instruments +from pysatMissionPlanning import instruments, methods -__all__ = ['instruments'] +__all__ = ['instruments', 'methods'] # set version here = os.path.abspath(os.path.dirname(__file__)) diff --git a/pysatMissionPlanning/methods/__init__.py b/pysatMissionPlanning/methods/__init__.py new file mode 100644 index 00000000..178b792d --- /dev/null +++ b/pysatMissionPlanning/methods/__init__.py @@ -0,0 +1,8 @@ +""" +pysatMissionPlanning.methods is a module that provides +the methods to interface with numerous empirical model packages +""" + +from methods import aacgmv2, apexpy, pyglow + +__all__ = ['aacgmv2', 'apexpy', 'pyglow'] diff --git a/methods/aacgmv2_methods.py b/pysatMissionPlanning/methods/aacgmv2.py similarity index 100% rename from methods/aacgmv2_methods.py rename to pysatMissionPlanning/methods/aacgmv2.py diff --git a/methods/apexpy_methods.py b/pysatMissionPlanning/methods/apexpy.py similarity index 100% rename from methods/apexpy_methods.py rename to pysatMissionPlanning/methods/apexpy.py diff --git a/methods/pyglow_methods.py b/pysatMissionPlanning/methods/pyglow.py similarity index 100% rename from methods/pyglow_methods.py rename to pysatMissionPlanning/methods/pyglow.py From 722eaac3f7a99d0d1d516e06d047a466fcc572ed Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Tue, 22 Oct 2019 22:52:56 -0400 Subject: [PATCH 006/162] STY: init import --- pysatMissionPlanning/instruments/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pysatMissionPlanning/instruments/__init__.py b/pysatMissionPlanning/instruments/__init__.py index aecb6aac..d46085f3 100644 --- a/pysatMissionPlanning/instruments/__init__.py +++ b/pysatMissionPlanning/instruments/__init__.py @@ -3,6 +3,6 @@ the instrument modules to be used with pysat """ -from . import pysat_sgp4 +from instruments import pysat_sgp4 __all__ = ['pysat_sgp4'] From e4c5cedbef2612845f0d920e1a0f2529e3b8ffa1 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Tue, 22 Oct 2019 22:59:42 -0400 Subject: [PATCH 007/162] BUG: import in init --- pysatMissionPlanning/instruments/__init__.py | 2 +- pysatMissionPlanning/methods/__init__.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pysatMissionPlanning/instruments/__init__.py b/pysatMissionPlanning/instruments/__init__.py index d46085f3..157435c1 100644 --- a/pysatMissionPlanning/instruments/__init__.py +++ b/pysatMissionPlanning/instruments/__init__.py @@ -3,6 +3,6 @@ the instrument modules to be used with pysat """ -from instruments import pysat_sgp4 +from pysatMissionPlanning.instruments import pysat_sgp4 __all__ = ['pysat_sgp4'] diff --git a/pysatMissionPlanning/methods/__init__.py b/pysatMissionPlanning/methods/__init__.py index 178b792d..af52d952 100644 --- a/pysatMissionPlanning/methods/__init__.py +++ b/pysatMissionPlanning/methods/__init__.py @@ -3,6 +3,6 @@ the methods to interface with numerous empirical model packages """ -from methods import aacgmv2, apexpy, pyglow +from pysatMissionPlanning.methods import aacgmv2, apexpy, pyglow __all__ = ['aacgmv2', 'apexpy', 'pyglow'] From 18b5a85bb429588b905d9e5fc861b42d3551ddb4 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Tue, 22 Oct 2019 23:04:39 -0400 Subject: [PATCH 008/162] DOC: update version --- CHANGELOG.md | 5 ++++- pysatMissionPlanning/version.txt | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 357d2140..abe32edb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,10 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). -## [0.1.0] - 2019-10-22 +## [0.2.0] - 2019-10-22 +- Added method files to access aacgmv2, apexpy, pyglow for any pysat instrument + +## [0.1.1] - 2019-10-22 - pypi compatibility - Add DOI badge diff --git a/pysatMissionPlanning/version.txt b/pysatMissionPlanning/version.txt index 17e51c38..0ea3a944 100644 --- a/pysatMissionPlanning/version.txt +++ b/pysatMissionPlanning/version.txt @@ -1 +1 @@ -0.1.1 +0.2.0 From d7e8aa0a54f36b922bfed3fb589f3698cd85cadd Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Tue, 22 Oct 2019 23:11:37 -0400 Subject: [PATCH 009/162] BUG: old file names --- pysatMissionPlanning/instruments/pysat_sgp4.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pysatMissionPlanning/instruments/pysat_sgp4.py b/pysatMissionPlanning/instruments/pysat_sgp4.py index b05a142a..bc077033 100644 --- a/pysatMissionPlanning/instruments/pysat_sgp4.py +++ b/pysatMissionPlanning/instruments/pysat_sgp4.py @@ -44,9 +44,9 @@ def init(self): Horiontal Wind Model (HWM). """ - import pysat.instruments.mission_planning.aacgmv2_methods as methaacgm - import pysat.instruments.mission_planning.apexpy_methods as methapex - import pysat.instruments.mission_planning.pyglow_methods as methglow + import pysatMissionPlanning.methods.aacgmv2 as methaacgm + import pysatMissionPlanning.methods.apexpy as methapex + import pysatMissionPlanning.methods.pyglow as methglow self.custom.add(methapex.add_quasi_dipole_coordinates, 'modify') self.custom.add(methaacgm.add_aacgm_coordinates, 'modify') From 0253e7c09fcb8803f24c9076dffedad1de1f574a Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Tue, 22 Oct 2019 23:27:27 -0400 Subject: [PATCH 010/162] STY: flake8 cleanup --- .../instruments/pysat_sgp4.py | 11 ++-- pysatMissionPlanning/methods/pyglow.py | 60 +++++++++---------- 2 files changed, 33 insertions(+), 38 deletions(-) diff --git a/pysatMissionPlanning/instruments/pysat_sgp4.py b/pysatMissionPlanning/instruments/pysat_sgp4.py index bc077033..83e46b57 100644 --- a/pysatMissionPlanning/instruments/pysat_sgp4.py +++ b/pysatMissionPlanning/instruments/pysat_sgp4.py @@ -595,7 +595,8 @@ def plot_simulated_data(inst, filename=None): else: time2 = inst.data.index[-1].strftime('%Y-%h-%d %H:%M:%S') # Overall Plot Title - plt.suptitle(''.join(('Simulated inst ', time1, ' -- ', time2)), fontsize=18) + plt.suptitle(''.join(('Simulated inst ', time1, ' -- ', time2)), + fontsize=18) # create grid for plots gs = gridspec.GridSpec(5, 2, width_ratios=[12, 1]) @@ -604,7 +605,6 @@ def plot_simulated_data(inst, filename=None): plt.plot(np.log10(inst['ion_dens']), 'k', label='total') plt.plot(np.log10(inst['ion_dens']*inst['frac_dens_o']), 'r', label='O+') plt.plot(np.log10(inst['ion_dens']*inst['frac_dens_h']), 'b', label='H+') - # plt.plot(np.log10(inst['ion_dens']*inst['frac_dens_he']), 'g', label='He+') plt.legend(loc=(01.01, 0.15)) ax.set_title('Log Ion Density') ax.set_ylabel('Log Density (N/cc)') @@ -704,7 +704,7 @@ def plot_simulated_data(inst, filename=None): # plot day/night terminators try: - cs = m.nightshade(midDate) + _ = m.nightshade(midDate) except ValueError: pass @@ -712,10 +712,7 @@ def plot_simulated_data(inst, filename=None): points = np.array([x, y]).T.reshape(-1, 1, 2) segments = np.concatenate([points[:-1], points[1:]], axis=1) plot_norm = plt.Normalize(300, 500) - try: - plot_cmap = plt.get_cmap('viridis') - except: - plot_cmap = plt.get_cmap('jet') + plot_cmap = plt.get_cmap('viridis') lc = LineCollection(segments, cmap=plot_cmap, norm=plot_norm, linewidths=5.0) diff --git a/pysatMissionPlanning/methods/pyglow.py b/pysatMissionPlanning/methods/pyglow.py index 4d055786..dab64223 100644 --- a/pysatMissionPlanning/methods/pyglow.py +++ b/pysatMissionPlanning/methods/pyglow.py @@ -332,11 +332,14 @@ def add_hwm_winds_and_ecef_vectors(inst, glat_label='glat', -inst['position_ecef_z']) # mer = r x zonal - inst['unit_mer_wind_ecef_x'], inst['unit_mer_wind_ecef_y'], inst['unit_mer_wind_ecef_z'] = \ + merx, mery, merz = \ pysatMagVect.cross_product(unit_pos_x, unit_pos_y, unit_pos_z, inst['unit_zonal_wind_ecef_x'], inst['unit_zonal_wind_ecef_y'], inst['unit_zonal_wind_ecef_z']) + inst['unit_mer_wind_ecef_x'] = merx + inst['unit_mer_wind_ecef_y'] = mery + inst['unit_mer_wind_ecef_z'] = merz # Adding metadata information inst.meta['zonal_wind'] = {'units': 'm/s', 'long_name': 'Zonal Wind', @@ -344,34 +347,29 @@ def add_hwm_winds_and_ecef_vectors(inst, glat_label='glat', inst.meta['meridional_wind'] = {'units': 'm/s', 'long_name': 'Meridional Wind', 'desc': 'HWM model meridional wind'} - inst.meta['unit_zonal_wind_ecef_x'] = {'units': '', - 'long_name': 'Zonal Wind Unit ' + - 'ECEF x-vector', - 'desc': 'x-value of zonal wind ' + - 'unit vector in ECEF coordinates'} - inst.meta['unit_zonal_wind_ecef_y'] = {'units': '', - 'long_name': 'Zonal Wind Unit ' + - 'ECEF y-vector', - 'desc': 'y-value of zonal wind ' + - 'unit vector in ECEF coordinates'} - inst.meta['unit_zonal_wind_ecef_z'] = {'units': '', - 'long_name': 'Zonal Wind Unit ' + - 'ECEF z-vector', - 'desc': 'z-value of zonal wind ' + - 'unit vector in ECEF coordinates'} - inst.meta['unit_mer_wind_ecef_x'] = {'units': '', - 'long_name': 'Meridional Wind Unit ' + - 'ECEF x-vector', - 'desc': 'x-value of meridional wind' + - ' unit vector in ECEF coordinates'} - inst.meta['unit_mer_wind_ecef_y'] = {'units': '', - 'long_name': 'Meridional Wind Unit ' + - 'ECEF y-vector', - 'desc': 'y-value of meridional wind' + - ' unit vector in ECEF coordinates'} - inst.meta['unit_mer_wind_ecef_z'] = {'units': '', - 'long_name': 'Meridional Wind Unit ' + - 'ECEF z-vector', - 'desc': 'z-value of meridional wind' + - ' unit vector in ECEF coordinates'} + inst.meta['unit_zonal_wind_ecef_x'] = \ + {'units': '', + 'long_name': 'Zonal Wind Unit ECEF x-vector', + 'desc': 'x-value of zonal wind unit vector in ECEF coordinates'} + inst.meta['unit_zonal_wind_ecef_y'] = \ + {'units': '', + 'long_name': 'Zonal Wind Unit ECEF y-vector', + 'desc': 'y-value of zonal wind unit vector in ECEF coordinates'} + inst.meta['unit_zonal_wind_ecef_z'] = \ + {'units': '', + 'long_name': 'Zonal Wind Unit ECEF z-vector', + 'desc': 'z-value of zonal wind unit vector in ECEF coordinates'} + inst.meta['unit_mer_wind_ecef_x'] = \ + {'units': '', + 'long_name': 'Meridional Wind Unit ECEF x-vector', + 'desc': 'x-value of meridional wind unit vector in ECEF coordinates'} + inst.meta['unit_mer_wind_ecef_y'] = \ + {'units': '', + 'long_name': 'Meridional Wind Unit ECEF y-vector', + 'desc': 'y-value of meridional wind unit vector in ECEF coordinates'} + inst.meta['unit_mer_wind_ecef_z'] = \ + {'units': '', + 'long_name': 'Meridional Wind Unit ECEF z-vector', + 'desc': 'z-value of meridional wind unit vector in ECEF coordinates'} + return From 9174ae00814ca87ca4f21a004a52e0c7a3034930 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Tue, 22 Oct 2019 23:27:44 -0400 Subject: [PATCH 011/162] TST: add load of one day to testing --- pysatMissionPlanning/tests/test_core.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pysatMissionPlanning/tests/test_core.py b/pysatMissionPlanning/tests/test_core.py index 98dfa3bf..6337f4ca 100644 --- a/pysatMissionPlanning/tests/test_core.py +++ b/pysatMissionPlanning/tests/test_core.py @@ -18,3 +18,11 @@ def test_module_loading(self): testInst = pysat.Instrument(inst_module=self.module) assert isinstance(testInst, pysat._instrument.Instrument) + + def test_data_loading(self): + """Check if instrument module can be loaded as a pysat instrument""" + + testInst = pysat.Instrument(inst_module=self.module) + testInst.load(pysat.datetime(2018, 1, 1)) + + assert True From 968b8f1d624094156562d251459f007e9cf16e07 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Tue, 22 Oct 2019 23:41:32 -0400 Subject: [PATCH 012/162] TST: remove test_data_loading --- pysatMissionPlanning/tests/test_core.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/pysatMissionPlanning/tests/test_core.py b/pysatMissionPlanning/tests/test_core.py index 6337f4ca..98dfa3bf 100644 --- a/pysatMissionPlanning/tests/test_core.py +++ b/pysatMissionPlanning/tests/test_core.py @@ -18,11 +18,3 @@ def test_module_loading(self): testInst = pysat.Instrument(inst_module=self.module) assert isinstance(testInst, pysat._instrument.Instrument) - - def test_data_loading(self): - """Check if instrument module can be loaded as a pysat instrument""" - - testInst = pysat.Instrument(inst_module=self.module) - testInst.load(pysat.datetime(2018, 1, 1)) - - assert True From 6b35ac50d4e3415f735475430a4acde044801712 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Wed, 23 Oct 2019 08:30:15 -0400 Subject: [PATCH 013/162] DOC: Add basic docs --- docs/Makefile | 192 ++++++++++++++++++++++++++++++++++++++++++ docs/contributing.rst | 1 + docs/index.rst | 9 ++ docs/requirements.txt | 2 + 4 files changed, 204 insertions(+) create mode 100644 docs/Makefile create mode 100644 docs/contributing.rst create mode 100644 docs/index.rst create mode 100644 docs/requirements.txt diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 00000000..dc6d3aac --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,192 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = +BUILDDIR = _build + +# User-friendly check for sphinx-build +ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) +$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) +endif + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . +# the i18n builder cannot share the environment and doctrees with the others +I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . + +.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest coverage gettext + +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " singlehtml to make a single large HTML file" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " applehelp to make an Apple Help Book" + @echo " devhelp to make HTML files and a Devhelp project" + @echo " epub to make an epub" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " latexpdf to make LaTeX files and run them through pdflatex" + @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" + @echo " text to make text files" + @echo " man to make manual pages" + @echo " texinfo to make Texinfo files" + @echo " info to make Texinfo files and run them through makeinfo" + @echo " gettext to make PO message catalogs" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " xml to make Docutils-native XML files" + @echo " pseudoxml to make pseudoxml-XML files for display purposes" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + @echo " coverage to run coverage check of the documentation (if enabled)" + +clean: + rm -rf $(BUILDDIR)/* + +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + +singlehtml: + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml + @echo + @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." + +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo + @echo "Build finished; now you can process the JSON files." + +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in $(BUILDDIR)/htmlhelp." + +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/pysat.qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/pysat.qhc" + +applehelp: + $(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp + @echo + @echo "Build finished. The help book is in $(BUILDDIR)/applehelp." + @echo "N.B. You won't be able to view it unless you put it in" \ + "~/Library/Documentation/Help or install it in your application" \ + "bundle." + +devhelp: + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp + @echo + @echo "Build finished." + @echo "To view the help file:" + @echo "# mkdir -p $$HOME/.local/share/devhelp/pysat" + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/pysat" + @echo "# devhelp" + +epub: + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub + @echo + @echo "Build finished. The epub file is in $(BUILDDIR)/epub." + +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." + @echo "Run \`make' in that directory to run these through (pdf)latex" \ + "(use \`make latexpdf' here to do that automatically)." + +latexpdf: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through pdflatex..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +latexpdfja: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through platex and dvipdfmx..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +text: + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text + @echo + @echo "Build finished. The text files are in $(BUILDDIR)/text." + +man: + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man + @echo + @echo "Build finished. The manual pages are in $(BUILDDIR)/man." + +texinfo: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo + @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." + @echo "Run \`make' in that directory to run these through makeinfo" \ + "(use \`make info' here to do that automatically)." + +info: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo "Running Texinfo files through makeinfo..." + make -C $(BUILDDIR)/texinfo info + @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." + +gettext: + $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale + @echo + @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." + +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." + +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." + +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." + +coverage: + $(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage + @echo "Testing of coverage in the sources finished, look at the " \ + "results in $(BUILDDIR)/coverage/python.txt." + +xml: + $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml + @echo + @echo "Build finished. The XML files are in $(BUILDDIR)/xml." + +pseudoxml: + $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml + @echo + @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." diff --git a/docs/contributing.rst b/docs/contributing.rst new file mode 100644 index 00000000..58977a88 --- /dev/null +++ b/docs/contributing.rst @@ -0,0 +1 @@ +.. include:: ../CONTRIBUTING.md diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 00000000..70892da9 --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,9 @@ +.. pysatMissionPlanning documentation master file + +Welcome to pysatMissionPlanning's documentation! +================================= + +.. toctree:: + :maxdepth: 2 + + contributing.rst diff --git a/docs/requirements.txt b/docs/requirements.txt new file mode 100644 index 00000000..1ff8ec63 --- /dev/null +++ b/docs/requirements.txt @@ -0,0 +1,2 @@ +numpydoc +ipython From db6cbdd43cbdc40dba5351bf72ebb2962e794b1c Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Wed, 23 Oct 2019 08:32:18 -0400 Subject: [PATCH 014/162] DOC: typo --- description.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/description.txt b/description.txt index 642b37ec..b8126cc4 100644 --- a/description.txt +++ b/description.txt @@ -4,7 +4,7 @@ Main Features ------------- - Simulate satellite orbits from TLEs and add data from empirical models - Import ionosphere and thermosphere values through pyglow -- Import coordidnates through apexpy +- Import coordinates through apexpy Documentation --------------------- From db51fb9f3bd1bd6013d6a623271c518098913ed7 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Wed, 23 Oct 2019 08:36:48 -0400 Subject: [PATCH 015/162] DOC: add introduction --- docs/index.rst | 1 + docs/introduction.rst | 13 +++++++++++++ 2 files changed, 14 insertions(+) create mode 100644 docs/introduction.rst diff --git a/docs/index.rst b/docs/index.rst index 70892da9..5dac2832 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -6,4 +6,5 @@ Welcome to pysatMissionPlanning's documentation! .. toctree:: :maxdepth: 2 + introduction.rst contributing.rst diff --git a/docs/introduction.rst b/docs/introduction.rst new file mode 100644 index 00000000..a904652d --- /dev/null +++ b/docs/introduction.rst @@ -0,0 +1,13 @@ + +Introduction +============ + +pysatMissionPlanning allows users to run build simulated satellites for TLE info and add empirical data. It includes the pysat_sgp4 instrument module which can be imported into pysat. + +Main Features +------------- +- Simulate satellite orbits from TLEs and add data from empirical models +- Import ionosphere and thermosphere values through pyglow +- Import coordinates through apexpy + +This document covers installation, a tutorial on pysatMissionPlanning including demonstration code, and an API reference. From 8b01a2d5958b925e5730cbc26a896df8f6316a94 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Wed, 23 Oct 2019 08:41:38 -0400 Subject: [PATCH 016/162] DOC: add installation info --- docs/index.rst | 1 + docs/installation.rst | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 docs/installation.rst diff --git a/docs/index.rst b/docs/index.rst index 5dac2832..7f756624 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -7,4 +7,5 @@ Welcome to pysatMissionPlanning's documentation! :maxdepth: 2 introduction.rst + installation.rst contributing.rst diff --git a/docs/installation.rst b/docs/installation.rst new file mode 100644 index 00000000..188a3b44 --- /dev/null +++ b/docs/installation.rst @@ -0,0 +1,41 @@ + +Installation +============ + +**Starting from scratch** + +---- + +Python and associated packages for science are freely available. Convenient science python package setups are available from `Enthought `_ and `Continuum Analytics `_. Enthought also includes an IDE, though there are a number of choices. Core science packages such as numpy, scipy, matplotlib, pandas and many others may also be installed directly via pip or your favorite package manager. + +For educational users, an IDE from `Jet Brains `_ is available for free. + + +**pysatMissionPlanning** + +---- + +PysatMissionPLanning itself may be installed from a terminal command line via:: + + pip install pysatMissionPlanning + +Note that pysatMissionPlanning requires pysat to interact with the instruments and models here. [Full Documentation for main package](http://pysat.readthedocs.io/en/latest/) + +**Set up sgp4 with pysat** + +---- +The sgp4 instrument within pysatMissionPlanning is designed to be run like any pysat instrument. To access, use + +.. code:: python + + import pysat + from pysatMissionPlanning.instruments import pysat_sgp4 + + sgp4 = pysat.Instrument(inst_module=pysat_sgp4) + +For pysat 3.0.0 or greater, invoking this the first time will permanently add this instrument to the user's library, and it can be accessed in the future simply by calling it like any pysat instrument without having to load the pysatMissionPlanning library separately. + +.. code:: python + + import pysat + sgp4 = pysat.Instrument(platform='pysat', name='sgp4') From 46d86b5c5987b54c53521db191b1359eb1eb20ed Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Wed, 23 Oct 2019 08:46:33 -0400 Subject: [PATCH 017/162] DOC: add citing --- docs/citing.rst | 42 ++++++++++++++++++++++++++++++++++++++++++ docs/index.rst | 1 + 2 files changed, 43 insertions(+) create mode 100644 docs/citing.rst diff --git a/docs/citing.rst b/docs/citing.rst new file mode 100644 index 00000000..914f4943 --- /dev/null +++ b/docs/citing.rst @@ -0,0 +1,42 @@ +Citations in the pysat ecosystem +================================ + +When referring to this software package, please cite the original paper by Stoneback et al [2018] https://doi.org/10.1029/2018JA025297 as well as the package https://doi.org/10.5281/zenodo.3475498. Note that this doi will always point to the latest version of the code. A list of dois for all versions can be found at the [zenodo page](https://zenodo.org/record/3475499). + +Example for citation in BibTex for a generalized version: + +.. code:: + + @misc{pysatMissionPlanning, + author = {Stoneback, R.A. and + Klenzing, J.H. and + Burrell, A.G. and + Depew, M. and + Spence, C.}, + title = {Pysat Mission Planning Toolkit (pysatMissionPlanning) vX.Y.Z}, + month = oct, + year = 2019, + doi = {10.5281/zenodo.3475499}, + url = {https://doi.org/10.5281/zenodo.3475499} + } + +Citing the publication: + +.. code:: + + @article{Stoneback2018, + author = {Stoneback, R. A. and + Burrell, A. G. and + Klenzing, J. and + Depew, M. D.}, + doi = {10.1029/2018JA025297}, + issn = {21699402}, + journal = {Journal of Geophysical Research: Space Physics}, + number = {6}, + pages = {5271--5283}, + title = {{PYSAT: Python Satellite Data Analysis Toolkit}}, + volume = {123}, + year = {2018} + } + +To aid in scientific reproducibility, please include the version number in publications that use this code. This can be found by invoking `pysatMissionPlanning.__version__ `. diff --git a/docs/index.rst b/docs/index.rst index 7f756624..91399cb7 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -9,3 +9,4 @@ Welcome to pysatMissionPlanning's documentation! introduction.rst installation.rst contributing.rst + citing.rst From 7f67491c83064b633463b1a5d257585f25e355f7 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Wed, 23 Oct 2019 20:47:18 -0400 Subject: [PATCH 018/162] TST: remove python 2.7 from tests --- .travis.yml | 1 - setup.py | 1 - 2 files changed, 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index afa1c7c8..3e6ee776 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,7 +2,6 @@ language: python dist: xenial matrix: include: - - python: 2.7 - python: 3.5 - python: 3.6 - python: 3.7 diff --git a/setup.py b/setup.py index 2d282adc..786dd754 100644 --- a/setup.py +++ b/setup.py @@ -42,7 +42,6 @@ "Intended Audience :: Science/Research", "License :: OSI Approved :: BSD License", "Natural Language :: English", - "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", From a34d42f6ce14d7bb315f517156c61437741a6c1c Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Thu, 24 Oct 2019 20:00:09 -0400 Subject: [PATCH 019/162] STY: remove basestring --- pysatMissionPlanning/instruments/pysat_sgp4.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/pysatMissionPlanning/instruments/pysat_sgp4.py b/pysatMissionPlanning/instruments/pysat_sgp4.py index 83e46b57..8b489eb0 100644 --- a/pysatMissionPlanning/instruments/pysat_sgp4.py +++ b/pysatMissionPlanning/instruments/pysat_sgp4.py @@ -10,12 +10,6 @@ from __future__ import print_function from __future__ import absolute_import -# basestring abstract type is removed in Python 3 and is replaced by str -# python 2/3 compatibility -try: - basestring -except NameError: - basestring = str import os import pandas as pds From 1e0c8f90c87bb0de0019573be261adf07ab8e7e5 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Thu, 24 Oct 2019 20:00:43 -0400 Subject: [PATCH 020/162] STY: tidy imports --- pysatMissionPlanning/instruments/pysat_sgp4.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pysatMissionPlanning/instruments/pysat_sgp4.py b/pysatMissionPlanning/instruments/pysat_sgp4.py index 8b489eb0..3632f264 100644 --- a/pysatMissionPlanning/instruments/pysat_sgp4.py +++ b/pysatMissionPlanning/instruments/pysat_sgp4.py @@ -11,9 +11,8 @@ from __future__ import absolute_import import os - -import pandas as pds import numpy as np +import pandas as pds import pysat # pysat required parameters From cd23c0385aeebdedad6d3ffd75001d406df02841 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Thu, 24 Oct 2019 20:29:44 -0400 Subject: [PATCH 021/162] ENH: add spacecraft methods --- .../instruments/pysat_sgp4.py | 282 ++---------------- pysatMissionPlanning/methods/__init__.py | 4 +- pysatMissionPlanning/methods/spacecraft.py | 235 +++++++++++++++ 3 files changed, 259 insertions(+), 262 deletions(-) create mode 100644 pysatMissionPlanning/methods/spacecraft.py diff --git a/pysatMissionPlanning/instruments/pysat_sgp4.py b/pysatMissionPlanning/instruments/pysat_sgp4.py index 3632f264..dbc85f98 100644 --- a/pysatMissionPlanning/instruments/pysat_sgp4.py +++ b/pysatMissionPlanning/instruments/pysat_sgp4.py @@ -40,11 +40,12 @@ def init(self): import pysatMissionPlanning.methods.aacgmv2 as methaacgm import pysatMissionPlanning.methods.apexpy as methapex import pysatMissionPlanning.methods.pyglow as methglow + import pysatMissionPlanning.methods.spacecraft as methsc self.custom.add(methapex.add_quasi_dipole_coordinates, 'modify') self.custom.add(methaacgm.add_aacgm_coordinates, 'modify') - self.custom.add(calculate_ecef_velocity, 'modify') - self.custom.add(add_sc_attitude_vectors, 'modify') + self.custom.add(methsc.calculate_ecef_velocity, 'modify') + self.custom.add(methsc.add_sc_attitude_vectors, 'modify') # Thermal Ion Parameters self.custom.add(methglow.add_iri_thermal_plasma, 'modify') # Thermal Neutral parameters @@ -57,9 +58,10 @@ def init(self): in_meta = {'desc': 'IGRF geomagnetic field expressed in the s/c basis.', 'units': 'nT'} # project IGRF - self.custom.add(project_ecef_vector_onto_sc, 'modify', 'end', 'B_ecef_x', - 'B_ecef_y', 'B_ecef_z', 'B_sc_x', 'B_sc_y', 'B_sc_z', - meta=[in_meta.copy(), in_meta.copy(), in_meta.copy()]) + self.custom.add(methsc.project_ecef_vector_onto_sc, 'modify', 'end', + 'B_ecef_x', 'B_ecef_y', 'B_ecef_z', 'B_sc_x', 'B_sc_y', + 'B_sc_z', meta=[in_meta.copy(), in_meta.copy(), + in_meta.copy()]) # project total wind vector self.custom.add(project_hwm_onto_sc, 'modify') @@ -283,263 +285,23 @@ def download(date_array, tag, sat_id, data_path=None, user=None, pass -def add_sc_attitude_vectors(inst): - """ - Add attitude vectors for spacecraft assuming ram pointing. - - Presumes spacecraft is pointed along the velocity vector (x), z is - generally nadir pointing (positive towards Earth), and y completes the - right handed system (generally southward). - - Notes - ----- - Expects velocity and position of spacecraft in Earth Centered - Earth Fixed (ECEF) coordinates to be in the instrument object - and named velocity_ecef_* (*=x,y,z) and position_ecef_* (*=x,y,z) - - Adds attitude vectors for spacecraft in the ECEF basis by calculating - the scalar product of each attitude vector with each component of ECEF. - - Parameters - ---------- - inst : pysat.Instrument - Instrument object - - Returns - ------- - None - Modifies pysat.Instrument object in place to include S/C attitude - unit vectors, expressed in ECEF basis. Vectors are named - sc_(x,y,z)hat_ecef_(x,y,z). - sc_xhat_ecef_x is the spacecraft unit vector along x (positive along - velocity vector) reported in ECEF, ECEF x-component. - - """ - import pysatMagVect - - # ram pointing is along velocity vector - inst['sc_xhat_ecef_x'], inst['sc_xhat_ecef_y'], inst['sc_xhat_ecef_z'] = \ - pysatMagVect.normalize_vector(inst['velocity_ecef_x'], - inst['velocity_ecef_y'], - inst['velocity_ecef_z']) - - # begin with z along Nadir (towards Earth) - # if orbit isn't perfectly circular, then the s/c z vector won't - # point exactly along nadir. However, nadir pointing is close enough - # to the true z (in the orbital plane) that we can use it to get y, - # and use x and y to get the real z - inst['sc_zhat_ecef_x'], inst['sc_zhat_ecef_y'], inst['sc_zhat_ecef_z'] = \ - pysatMagVect.normalize_vector(-inst['position_ecef_x'], - -inst['position_ecef_y'], - -inst['position_ecef_z']) - - # get y vector assuming right hand rule - # Z x X = Y - inst['sc_yhat_ecef_x'], inst['sc_yhat_ecef_y'], inst['sc_yhat_ecef_z'] = \ - pysatMagVect.cross_product(inst['sc_zhat_ecef_x'], - inst['sc_zhat_ecef_y'], - inst['sc_zhat_ecef_z'], - inst['sc_xhat_ecef_x'], - inst['sc_xhat_ecef_y'], - inst['sc_xhat_ecef_z']) - # normalize since Xhat and Zhat from above may not be orthogonal - inst['sc_yhat_ecef_x'], inst['sc_yhat_ecef_y'], inst['sc_yhat_ecef_z'] = \ - pysatMagVect.normalize_vector(inst['sc_yhat_ecef_x'], - inst['sc_yhat_ecef_y'], - inst['sc_yhat_ecef_z']) - - # strictly, need to recalculate Zhat so that it is consistent with RHS - # just created - # Z = X x Y - inst['sc_zhat_ecef_x'], inst['sc_zhat_ecef_y'], inst['sc_zhat_ecef_z'] = \ - pysatMagVect.cross_product(inst['sc_xhat_ecef_x'], - inst['sc_xhat_ecef_y'], - inst['sc_xhat_ecef_z'], - inst['sc_yhat_ecef_x'], - inst['sc_yhat_ecef_y'], - inst['sc_yhat_ecef_z']) - - # Adding metadata - inst.meta['sc_xhat_ecef_x'] = {'units': '', - 'desc': 'S/C attitude (x-direction, ram) ' + - 'unit vector, expressed in ECEF basis, ' + - 'x-component'} - inst.meta['sc_xhat_ecef_y'] = {'units': '', - 'desc': 'S/C attitude (x-direction, ram) ' + - 'unit vector, expressed in ECEF basis, ' + - 'y-component'} - inst.meta['sc_xhat_ecef_z'] = {'units': '', - 'desc': 'S/C attitude (x-direction, ram) ' + - 'unit vector, expressed in ECEF basis, ' + - 'z-component'} - - inst.meta['sc_zhat_ecef_x'] = {'units': '', - 'desc': 'S/C attitude (z-direction, ' + - 'generally nadir) unit vector, expressed ' + - 'in ECEF basis, x-component'} - inst.meta['sc_zhat_ecef_y'] = {'units': '', - 'desc': 'S/C attitude (z-direction, ' + - 'generally nadir) unit vector, expressed ' + - 'in ECEF basis, y-component'} - inst.meta['sc_zhat_ecef_z'] = {'units': '', - 'desc': 'S/C attitude (z-direction, ' + - 'generally nadir) unit vector, expressed ' + - 'in ECEF basis, z-component'} - - inst.meta['sc_yhat_ecef_x'] = {'units': '', - 'desc': 'S/C attitude (y-direction, ' + - 'generally south) unit vector, expressed ' + - 'in ECEF basis, x-component'} - inst.meta['sc_yhat_ecef_y'] = {'units': '', - 'desc': 'S/C attitude (y-direction, ' + - 'generally south) unit vector, expressed ' + - 'in ECEF basis, y-component'} - inst.meta['sc_yhat_ecef_z'] = {'units': '', - 'desc': 'S/C attitude (y-direction, ' + - 'generally south) unit vector, expressed ' + - 'in ECEF basis, z-component'} - - # check what magnitudes we get - mag = np.sqrt(inst['sc_zhat_ecef_x']**2 + inst['sc_zhat_ecef_y']**2 + - inst['sc_zhat_ecef_z']**2) - idx, = np.where((mag < .999999999) | (mag > 1.000000001)) - if len(idx) > 0: - print(mag[idx]) - raise RuntimeError('Unit vector generation failure. Not sufficently ' + - 'orthogonal.') - - return - - -def calculate_ecef_velocity(inst): - """ - Calculates spacecraft velocity in ECEF frame. - - Presumes that the spacecraft velocity in ECEF is in - the input instrument object as position_ecef_*. Uses a symmetric - difference to calculate the velocity thus endpoints will be - set to NaN. Routine should be run using pysat data padding feature - to create valid end points. - - Parameters - ---------- - inst : pysat.Instrument - Instrument object - - Returns - ------- - None - Modifies pysat.Instrument object in place to include ECEF velocity - using naming scheme velocity_ecef_* (*=x,y,z) - - """ - - x = inst['position_ecef_x'] - vel_x = (x.values[2:] - x.values[0:-2])/2. - - y = inst['position_ecef_y'] - vel_y = (y.values[2:] - y.values[0:-2])/2. - - z = inst['position_ecef_z'] - vel_z = (z.values[2:] - z.values[0:-2])/2. - - inst[1:-1, 'velocity_ecef_x'] = vel_x - inst[1:-1, 'velocity_ecef_y'] = vel_y - inst[1:-1, 'velocity_ecef_z'] = vel_z - - inst.meta['velocity_ecef_x'] = {'units': 'km/s', - 'desc': 'Velocity of satellite ' + - 'calculated with respect to ECEF frame.'} - inst.meta['velocity_ecef_y'] = {'units': 'km/s', - 'desc': 'Velocity of satellite ' + - 'calculated with respect to ECEF frame.'} - inst.meta['velocity_ecef_z'] = {'units': 'km/s', - 'desc': 'Velocity of satellite ' + - 'calculated with respect to ECEF frame.'} - return - - -def project_ecef_vector_onto_sc(inst, x_label, y_label, z_label, - new_x_label, new_y_label, new_z_label, - meta=None): - """Express input vector using s/c attitude directions - - x - ram pointing - y - generally southward - z - generally nadir - - Parameters - ---------- - x_label : string - Label used to get ECEF-X component of vector to be projected - y_label : string - Label used to get ECEF-Y component of vector to be projected - z_label : string - Label used to get ECEF-Z component of vector to be projected - new_x_label : string - Label used to set X component of projected vector - new_y_label : string - Label used to set Y component of projected vector - new_z_label : string - Label used to set Z component of projected vector - meta : array_like of dicts (None) - Dicts contain metadata to be assigned. - """ - - import pysatMagVect - - x, y, z = \ - pysatMagVect.project_ecef_vector_onto_basis(inst[x_label], - inst[y_label], - inst[z_label], - inst['sc_xhat_ecef_x'], - inst['sc_xhat_ecef_y'], - inst['sc_xhat_ecef_z'], - inst['sc_yhat_ecef_x'], - inst['sc_yhat_ecef_y'], - inst['sc_yhat_ecef_z'], - inst['sc_zhat_ecef_x'], - inst['sc_zhat_ecef_y'], - inst['sc_zhat_ecef_z']) - inst[new_x_label] = x - inst[new_y_label] = y - inst[new_z_label] = z - - if meta is not None: - inst.meta[new_x_label] = meta[0] - inst.meta[new_y_label] = meta[1] - inst.meta[new_z_label] = meta[2] - - return - - def project_hwm_onto_sc(inst): - import pysatMagVect - - total_wind_x = inst['zonal_wind']*inst['unit_zonal_wind_ecef_x'] + \ - inst['meridional_wind']*inst['unit_mer_wind_ecef_x'] - total_wind_y = inst['zonal_wind']*inst['unit_zonal_wind_ecef_y'] + \ - inst['meridional_wind']*inst['unit_mer_wind_ecef_y'] - total_wind_z = inst['zonal_wind']*inst['unit_zonal_wind_ecef_z'] + \ - inst['meridional_wind']*inst['unit_mer_wind_ecef_z'] - - x, y, z = \ - pysatMagVect.project_ecef_vector_onto_basis(total_wind_x, - total_wind_y, - total_wind_z, - inst['sc_xhat_ecef_x'], - inst['sc_xhat_ecef_y'], - inst['sc_xhat_ecef_z'], - inst['sc_yhat_ecef_x'], - inst['sc_yhat_ecef_y'], - inst['sc_yhat_ecef_z'], - inst['sc_zhat_ecef_x'], - inst['sc_zhat_ecef_y'], - inst['sc_zhat_ecef_z']) - inst['sim_wind_sc_x'] = x - inst['sim_wind_sc_y'] = y - inst['sim_wind_sc_z'] = z + import pysatMissionPlanning.methods.attitude as methatt + + inst['total_wind_x'] = \ + (inst['zonal_wind']*inst['unit_zonal_wind_ecef_x'] + + inst['meridional_wind']*inst['unit_mer_wind_ecef_x']) + inst['total_wind_y'] = \ + (inst['zonal_wind']*inst['unit_zonal_wind_ecef_y'] + + inst['meridional_wind']*inst['unit_mer_wind_ecef_y']) + inst['total_wind_z'] = \ + (inst['zonal_wind']*inst['unit_zonal_wind_ecef_z'] + + inst['meridional_wind']*inst['unit_mer_wind_ecef_z']) + + methatt.project_ecef_vector_onto_sc(inst, 'total_wind_x', 'total_wind_y', + 'total_wind_z', 'sim_wind_sc_x', + 'sim_wind_sc_y', 'sim_wind_sc_z') inst.meta['sim_wind_sc_x'] = {'units': 'm/s', 'long_name': 'Simulated x-vector ' + diff --git a/pysatMissionPlanning/methods/__init__.py b/pysatMissionPlanning/methods/__init__.py index af52d952..197fd467 100644 --- a/pysatMissionPlanning/methods/__init__.py +++ b/pysatMissionPlanning/methods/__init__.py @@ -3,6 +3,6 @@ the methods to interface with numerous empirical model packages """ -from pysatMissionPlanning.methods import aacgmv2, apexpy, pyglow +from pysatMissionPlanning.methods import aacgmv2, apexpy, pyglow, spacecraft -__all__ = ['aacgmv2', 'apexpy', 'pyglow'] +__all__ = ['aacgmv2', 'apexpy', 'pyglow', 'spacecraft'] diff --git a/pysatMissionPlanning/methods/spacecraft.py b/pysatMissionPlanning/methods/spacecraft.py new file mode 100644 index 00000000..cd817df9 --- /dev/null +++ b/pysatMissionPlanning/methods/spacecraft.py @@ -0,0 +1,235 @@ +"""Provides default routines for projecting values onto vectors +for pysat instruments. + +""" + +import pysatMagVect + + +def add_sc_attitude_vectors(inst): + """ + Add attitude vectors for spacecraft assuming ram pointing. + + Presumes spacecraft is pointed along the velocity vector (x), z is + generally nadir pointing (positive towards Earth), and y completes the + right handed system (generally southward). + + Notes + ----- + Expects velocity and position of spacecraft in Earth Centered + Earth Fixed (ECEF) coordinates to be in the instrument object + and named velocity_ecef_* (*=x,y,z) and position_ecef_* (*=x,y,z) + + Adds attitude vectors for spacecraft in the ECEF basis by calculating + the scalar product of each attitude vector with each component of ECEF. + + Parameters + ---------- + inst : pysat.Instrument + Instrument object + + Returns + ------- + None + Modifies pysat.Instrument object in place to include S/C attitude + unit vectors, expressed in ECEF basis. Vectors are named + sc_(x,y,z)hat_ecef_(x,y,z). + sc_xhat_ecef_x is the spacecraft unit vector along x (positive along + velocity vector) reported in ECEF, ECEF x-component. + + """ + + # ram pointing is along velocity vector + inst['sc_xhat_ecef_x'], inst['sc_xhat_ecef_y'], inst['sc_xhat_ecef_z'] = \ + pysatMagVect.normalize_vector(inst['velocity_ecef_x'], + inst['velocity_ecef_y'], + inst['velocity_ecef_z']) + + # begin with z along Nadir (towards Earth) + # if orbit isn't perfectly circular, then the s/c z vector won't + # point exactly along nadir. However, nadir pointing is close enough + # to the true z (in the orbital plane) that we can use it to get y, + # and use x and y to get the real z + inst['sc_zhat_ecef_x'], inst['sc_zhat_ecef_y'], inst['sc_zhat_ecef_z'] = \ + pysatMagVect.normalize_vector(-inst['position_ecef_x'], + -inst['position_ecef_y'], + -inst['position_ecef_z']) + + # get y vector assuming right hand rule + # Z x X = Y + inst['sc_yhat_ecef_x'], inst['sc_yhat_ecef_y'], inst['sc_yhat_ecef_z'] = \ + pysatMagVect.cross_product(inst['sc_zhat_ecef_x'], + inst['sc_zhat_ecef_y'], + inst['sc_zhat_ecef_z'], + inst['sc_xhat_ecef_x'], + inst['sc_xhat_ecef_y'], + inst['sc_xhat_ecef_z']) + # normalize since Xhat and Zhat from above may not be orthogonal + inst['sc_yhat_ecef_x'], inst['sc_yhat_ecef_y'], inst['sc_yhat_ecef_z'] = \ + pysatMagVect.normalize_vector(inst['sc_yhat_ecef_x'], + inst['sc_yhat_ecef_y'], + inst['sc_yhat_ecef_z']) + + # strictly, need to recalculate Zhat so that it is consistent with RHS + # just created + # Z = X x Y + inst['sc_zhat_ecef_x'], inst['sc_zhat_ecef_y'], inst['sc_zhat_ecef_z'] = \ + pysatMagVect.cross_product(inst['sc_xhat_ecef_x'], + inst['sc_xhat_ecef_y'], + inst['sc_xhat_ecef_z'], + inst['sc_yhat_ecef_x'], + inst['sc_yhat_ecef_y'], + inst['sc_yhat_ecef_z']) + + # Adding metadata + inst.meta['sc_xhat_ecef_x'] = {'units': '', + 'desc': 'S/C attitude (x-direction, ram) ' + + 'unit vector, expressed in ECEF basis, ' + + 'x-component'} + inst.meta['sc_xhat_ecef_y'] = {'units': '', + 'desc': 'S/C attitude (x-direction, ram) ' + + 'unit vector, expressed in ECEF basis, ' + + 'y-component'} + inst.meta['sc_xhat_ecef_z'] = {'units': '', + 'desc': 'S/C attitude (x-direction, ram) ' + + 'unit vector, expressed in ECEF basis, ' + + 'z-component'} + + inst.meta['sc_zhat_ecef_x'] = {'units': '', + 'desc': 'S/C attitude (z-direction, ' + + 'generally nadir) unit vector, expressed ' + + 'in ECEF basis, x-component'} + inst.meta['sc_zhat_ecef_y'] = {'units': '', + 'desc': 'S/C attitude (z-direction, ' + + 'generally nadir) unit vector, expressed ' + + 'in ECEF basis, y-component'} + inst.meta['sc_zhat_ecef_z'] = {'units': '', + 'desc': 'S/C attitude (z-direction, ' + + 'generally nadir) unit vector, expressed ' + + 'in ECEF basis, z-component'} + + inst.meta['sc_yhat_ecef_x'] = {'units': '', + 'desc': 'S/C attitude (y-direction, ' + + 'generally south) unit vector, expressed ' + + 'in ECEF basis, x-component'} + inst.meta['sc_yhat_ecef_y'] = {'units': '', + 'desc': 'S/C attitude (y-direction, ' + + 'generally south) unit vector, expressed ' + + 'in ECEF basis, y-component'} + inst.meta['sc_yhat_ecef_z'] = {'units': '', + 'desc': 'S/C attitude (y-direction, ' + + 'generally south) unit vector, expressed ' + + 'in ECEF basis, z-component'} + + # check what magnitudes we get + mag = np.sqrt(inst['sc_zhat_ecef_x']**2 + inst['sc_zhat_ecef_y']**2 + + inst['sc_zhat_ecef_z']**2) + idx, = np.where((mag < .999999999) | (mag > 1.000000001)) + if len(idx) > 0: + print(mag[idx]) + raise RuntimeError('Unit vector generation failure. Not sufficently ' + + 'orthogonal.') + + return + + +def calculate_ecef_velocity(inst): + """ + Calculates spacecraft velocity in ECEF frame. + + Presumes that the spacecraft velocity in ECEF is in + the input instrument object as position_ecef_*. Uses a symmetric + difference to calculate the velocity thus endpoints will be + set to NaN. Routine should be run using pysat data padding feature + to create valid end points. + + Parameters + ---------- + inst : pysat.Instrument + Instrument object + + Returns + ------- + None + Modifies pysat.Instrument object in place to include ECEF velocity + using naming scheme velocity_ecef_* (*=x,y,z) + + """ + + x = inst['position_ecef_x'] + vel_x = (x.values[2:] - x.values[0:-2])/2. + + y = inst['position_ecef_y'] + vel_y = (y.values[2:] - y.values[0:-2])/2. + + z = inst['position_ecef_z'] + vel_z = (z.values[2:] - z.values[0:-2])/2. + + inst[1:-1, 'velocity_ecef_x'] = vel_x + inst[1:-1, 'velocity_ecef_y'] = vel_y + inst[1:-1, 'velocity_ecef_z'] = vel_z + + inst.meta['velocity_ecef_x'] = {'units': 'km/s', + 'desc': 'Velocity of satellite ' + + 'calculated with respect to ECEF frame.'} + inst.meta['velocity_ecef_y'] = {'units': 'km/s', + 'desc': 'Velocity of satellite ' + + 'calculated with respect to ECEF frame.'} + inst.meta['velocity_ecef_z'] = {'units': 'km/s', + 'desc': 'Velocity of satellite ' + + 'calculated with respect to ECEF frame.'} + return + + +def project_ecef_vector_onto_sc(inst, x_label, y_label, z_label, + new_x_label, new_y_label, new_z_label, + meta=None): + """Express input vector using s/c attitude directions + + x - ram pointing + y - generally southward + z - generally nadir + + Parameters + ---------- + x_label : string + Label used to get ECEF-X component of vector to be projected + y_label : string + Label used to get ECEF-Y component of vector to be projected + z_label : string + Label used to get ECEF-Z component of vector to be projected + new_x_label : string + Label used to set X component of projected vector + new_y_label : string + Label used to set Y component of projected vector + new_z_label : string + Label used to set Z component of projected vector + meta : array_like of dicts (None) + Dicts contain metadata to be assigned. + """ + + # TODO: add checks for existence of ecef labels in inst + + x, y, z = \ + pysatMagVect.project_ecef_vector_onto_basis(inst[x_label], + inst[y_label], + inst[z_label], + inst['sc_xhat_ecef_x'], + inst['sc_xhat_ecef_y'], + inst['sc_xhat_ecef_z'], + inst['sc_yhat_ecef_x'], + inst['sc_yhat_ecef_y'], + inst['sc_yhat_ecef_z'], + inst['sc_zhat_ecef_x'], + inst['sc_zhat_ecef_y'], + inst['sc_zhat_ecef_z']) + inst[new_x_label] = x + inst[new_y_label] = y + inst[new_z_label] = z + + if meta is not None: + inst.meta[new_x_label] = meta[0] + inst.meta[new_y_label] = meta[1] + inst.meta[new_z_label] = meta[2] + + return From db63113d4067f13221f5b6b91bbfa8226dd7ee09 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Thu, 24 Oct 2019 20:33:06 -0400 Subject: [PATCH 022/162] ENH: add codeclimate.yml --- .codeclimate.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 .codeclimate.yml diff --git a/.codeclimate.yml b/.codeclimate.yml new file mode 100644 index 00000000..469e4f13 --- /dev/null +++ b/.codeclimate.yml @@ -0,0 +1,12 @@ +# Save as .codeclimate.yml (note leading .) in project root directory +engines: + radon: + enabled: true +ratings: + paths: + - "**.py" +exclude_paths: + - ".github/**/*" + - "sami2py/tests/**/*" + - "docs/**/*" + - "setup.py" From 09ad51e92b37dce73dc7df834e474ba384c58b28 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Thu, 24 Oct 2019 20:33:29 -0400 Subject: [PATCH 023/162] BUG: typo --- .codeclimate.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.codeclimate.yml b/.codeclimate.yml index 469e4f13..f3531c75 100644 --- a/.codeclimate.yml +++ b/.codeclimate.yml @@ -7,6 +7,6 @@ ratings: - "**.py" exclude_paths: - ".github/**/*" - - "sami2py/tests/**/*" + - "pysatMissionPlanning/tests/**/*" - "docs/**/*" - "setup.py" From 0d46b32af1d5f732692e63be66690798dca5c0b7 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Thu, 24 Oct 2019 20:38:03 -0400 Subject: [PATCH 024/162] ENH: add plot methods --- .../instruments/pysat_sgp4.py | 173 ----------------- pysatMissionPlanning/methods/__init__.py | 8 +- pysatMissionPlanning/methods/plot.py | 180 ++++++++++++++++++ 3 files changed, 186 insertions(+), 175 deletions(-) create mode 100644 pysatMissionPlanning/methods/plot.py diff --git a/pysatMissionPlanning/instruments/pysat_sgp4.py b/pysatMissionPlanning/instruments/pysat_sgp4.py index dbc85f98..36d51b6b 100644 --- a/pysatMissionPlanning/instruments/pysat_sgp4.py +++ b/pysatMissionPlanning/instruments/pysat_sgp4.py @@ -320,176 +320,3 @@ def project_hwm_onto_sc(inst): 'by instrument in its z-direction'} return - - -def plot_simulated_data(inst, filename=None): - - import matplotlib - import matplotlib.pyplot as plt - import matplotlib.gridspec as gridspec - from matplotlib.collections import LineCollection - from mpl_toolkits.basemap import Basemap - - if filename is None: - out_fname = './summary_orbit_simulated_data.png' - else: - out_fname = filename - - # make monotonically increasing longitude signal - diff = inst['glong'].diff() - - idx, = np.where(diff < 0.) - for item in idx: - inst[item:, 'glong'] += 360. - - f = plt.figure(figsize=(8.5, 7)) - - time1 = inst.data.index[0].strftime('%Y-%h-%d %H:%M:%S') - if inst.data.index[0].date() == inst.data.index[-1].date(): - time2 = inst.data.index[-1].strftime('%H:%M:%S') - else: - time2 = inst.data.index[-1].strftime('%Y-%h-%d %H:%M:%S') - # Overall Plot Title - plt.suptitle(''.join(('Simulated inst ', time1, ' -- ', time2)), - fontsize=18) - - # create grid for plots - gs = gridspec.GridSpec(5, 2, width_ratios=[12, 1]) - - ax = f.add_subplot(gs[0, 0]) - plt.plot(np.log10(inst['ion_dens']), 'k', label='total') - plt.plot(np.log10(inst['ion_dens']*inst['frac_dens_o']), 'r', label='O+') - plt.plot(np.log10(inst['ion_dens']*inst['frac_dens_h']), 'b', label='H+') - plt.legend(loc=(01.01, 0.15)) - ax.set_title('Log Ion Density') - ax.set_ylabel('Log Density (N/cc)') - ax.set_ylim([1., 6.]) - ax.axes.get_xaxis().set_visible(False) - - ax2 = f.add_subplot(gs[1, 0], sharex=ax) - plt.plot(inst['ion_temp']) - plt.legend(loc=(1.01, 0.15)) - ax2.set_title('Ion Temperature') - ax2.set_ylabel('Temp (K)') - ax2.set_ylim([500., 1500.]) - ax2.axes.get_xaxis().set_visible(False) - - # determine altitudes greater than 770 km - # idx, = np.where(inst['alt'] > 770.) - - ax3 = f.add_subplot(gs[2, 0], sharex=ax) - plt.plot(inst['sim_wind_sc_x'], color='b', linestyle='--') - plt.plot(inst['sim_wind_sc_y'], color='r', linestyle='--') - plt.plot(inst['sim_wind_sc_z'], color='g', linestyle='--') - ax3.set_title('Neutral Winds in S/C X, Y, and Z') - ax3.set_ylabel('Velocity (m/s)') - ax3.set_ylim([-200., 200.]) - ax3.axes.get_xaxis().set_visible(False) - plt.legend(loc=(1.01, 0.15)) - ax3.xaxis.set_major_formatter(matplotlib.dates.DateFormatter('%H:%M')) - # # xlabels = [label[0:6] for label in xlabels] - # plt.setp(ax3.xaxis.get_majorticklabels(), rotation=20, ha='right') - - ax4 = f.add_subplot(gs[3, 0], sharex=ax) - plt.plot(inst['B_sc_x']*1e5, color='b', linestyle='--') - plt.plot(inst['B_sc_y']*1e5, color='r', linestyle='--') - plt.plot(inst['B_sc_z']*1e5, color='g', linestyle='--') - ax4.set_title('Magnetic Field in S/C X, Y, and Z') - ax4.set_ylabel('Gauss') - ax4.set_ylim([-3.5, 3.5]) - # ax3.axes.get_xaxis().set_visible(False) - plt.legend(loc=(1.01, 0.15)) - ax4.xaxis.set_major_formatter(matplotlib.dates.DateFormatter('%H:%M')) - # # xlabels = [label[0:6] for label in xlabels] - plt.setp(ax4.xaxis.get_majorticklabels(), rotation=20, ha='right') - - # inst info - ax6 = f.add_subplot(gs[4, 0]) - - # do world plot if time to be plotted is less than 285 minutes, less than - # 3 orbits - time_diff = inst.data.index[-1] - inst.data.index[0] - if time_diff > pds.Timedelta(minutes=285): - # do long time plot - inst['glat'].plot(label='glat') # legend=True, label='mlat') - inst['mlt'].plot(label='mlt') # legend=True, label='mlt') - plt.title('Satellite Position') - plt.legend(['mlat', 'mlt'], loc=(1.01, 0.15)) - # inst['glong'].plot(secondary_y = True, label='glong')#legend=True, - # secondary_y = True, label='glong') - - else: - - # make map the same size as the other plots - s1pos = plt.get(ax, 'position').bounds - s6pos = plt.get(ax6, 'position').bounds - ax6.set_position([s1pos[0], s6pos[1]+.008, s1pos[2], s1pos[3]]) - - # fix longitude range for plot. Pad longitude so that first sample - # aligned with inst measurement sample - lon0 = inst[0, 'glong'] - lon1 = inst[-1, 'glong'] - - # enforce minimal longitude window, keep graphics from being too - # disturbed - if (lon1-lon0) < 90: - lon0 -= 45. - lon1 += 45. - if lon1 > 720: - lon0 -= 360. - lon1 -= 360. - inst[:, 'glong'] -= 360. - - m = Basemap(projection='mill', llcrnrlat=-60, urcrnrlat=60., - urcrnrlon=lon1.copy(), llcrnrlon=lon0.copy(), - resolution='c', ax=ax6, fix_aspect=False) - # m is an object which manages drawing to the map - # it also acts as a transformation function for geo coords to - # plotting coords - - # coastlines - m.drawcoastlines(ax=ax6) - # get first longitude meridian to plot - plon = np.ceil(lon0/60.)*60. - m.drawmeridians(np.arange(plon, plon+360.-22.5, 60), - labels=[0, 0, 0, 1], ax=ax6) - m.drawparallels(np.arange(-20, 20, 20)) - # time midway through inst to plot terminator locations - midDate = inst.data.index[len(inst.data.index)//2] - - # plot day/night terminators - try: - _ = m.nightshade(midDate) - except ValueError: - pass - - x, y = m(inst['glong'].values, inst['glat'].values) - points = np.array([x, y]).T.reshape(-1, 1, 2) - segments = np.concatenate([points[:-1], points[1:]], axis=1) - plot_norm = plt.Normalize(300, 500) - plot_cmap = plt.get_cmap('viridis') - - lc = LineCollection(segments, cmap=plot_cmap, norm=plot_norm, - linewidths=5.0) - lc.set_array(inst['alt'].values) - sm = plt.cm.ScalarMappable(cmap=plot_cmap, norm=plot_norm) - sm._A = [] - - ax6.add_collection(lc) - - ax6_bar = f.add_subplot(gs[4, 1]) - # plt.colorbar(sm) - plt.colorbar(cax=ax6_bar, ax=ax6, mappable=sm, - orientation='vertical', - ticks=[300., 400., 500.]) - plt.xlabel('Altitude') - plt.ylabel('km') - - f.tight_layout() - # buffer for overall title - f.subplots_adjust(bottom=0.06, top=0.91, right=.91) - plt.subplots_adjust(hspace=0.44) - - plt.savefig(out_fname) - - return diff --git a/pysatMissionPlanning/methods/__init__.py b/pysatMissionPlanning/methods/__init__.py index 197fd467..7a552df7 100644 --- a/pysatMissionPlanning/methods/__init__.py +++ b/pysatMissionPlanning/methods/__init__.py @@ -3,6 +3,10 @@ the methods to interface with numerous empirical model packages """ -from pysatMissionPlanning.methods import aacgmv2, apexpy, pyglow, spacecraft +from pysatMissionPlanning.methods import aacgmv2 +from pysatMissionPlanning.methods import apexpy +from pysatMissionPlanning.methods import plot +from pysatMissionPlanning.methods import pyglow +from pysatMissionPlanning.methods import spacecraft -__all__ = ['aacgmv2', 'apexpy', 'pyglow', 'spacecraft'] +__all__ = ['aacgmv2', 'apexpy', 'plot', 'pyglow', 'spacecraft'] diff --git a/pysatMissionPlanning/methods/plot.py b/pysatMissionPlanning/methods/plot.py new file mode 100644 index 00000000..a711b713 --- /dev/null +++ b/pysatMissionPlanning/methods/plot.py @@ -0,0 +1,180 @@ +# -*- coding: utf-8 -*- +"""Provides default plotting routines for simulated pysat instruments. + +""" + +import numpy as np +import pandas as pds + + +def plot_simulated_data(inst, filename=None): + + import matplotlib + import matplotlib.pyplot as plt + import matplotlib.gridspec as gridspec + from matplotlib.collections import LineCollection + from mpl_toolkits.basemap import Basemap + + if filename is None: + out_fname = './summary_orbit_simulated_data.png' + else: + out_fname = filename + + # make monotonically increasing longitude signal + diff = inst['glong'].diff() + + idx, = np.where(diff < 0.) + for item in idx: + inst[item:, 'glong'] += 360. + + f = plt.figure(figsize=(8.5, 7)) + + time1 = inst.data.index[0].strftime('%Y-%h-%d %H:%M:%S') + if inst.data.index[0].date() == inst.data.index[-1].date(): + time2 = inst.data.index[-1].strftime('%H:%M:%S') + else: + time2 = inst.data.index[-1].strftime('%Y-%h-%d %H:%M:%S') + # Overall Plot Title + plt.suptitle(''.join(('Simulated inst ', time1, ' -- ', time2)), + fontsize=18) + + # create grid for plots + gs = gridspec.GridSpec(5, 2, width_ratios=[12, 1]) + + ax = f.add_subplot(gs[0, 0]) + plt.plot(np.log10(inst['ion_dens']), 'k', label='total') + plt.plot(np.log10(inst['ion_dens']*inst['frac_dens_o']), 'r', label='O+') + plt.plot(np.log10(inst['ion_dens']*inst['frac_dens_h']), 'b', label='H+') + plt.legend(loc=(01.01, 0.15)) + ax.set_title('Log Ion Density') + ax.set_ylabel('Log Density (N/cc)') + ax.set_ylim([1., 6.]) + ax.axes.get_xaxis().set_visible(False) + + ax2 = f.add_subplot(gs[1, 0], sharex=ax) + plt.plot(inst['ion_temp']) + plt.legend(loc=(1.01, 0.15)) + ax2.set_title('Ion Temperature') + ax2.set_ylabel('Temp (K)') + ax2.set_ylim([500., 1500.]) + ax2.axes.get_xaxis().set_visible(False) + + # determine altitudes greater than 770 km + # idx, = np.where(inst['alt'] > 770.) + + ax3 = f.add_subplot(gs[2, 0], sharex=ax) + plt.plot(inst['sim_wind_sc_x'], color='b', linestyle='--') + plt.plot(inst['sim_wind_sc_y'], color='r', linestyle='--') + plt.plot(inst['sim_wind_sc_z'], color='g', linestyle='--') + ax3.set_title('Neutral Winds in S/C X, Y, and Z') + ax3.set_ylabel('Velocity (m/s)') + ax3.set_ylim([-200., 200.]) + ax3.axes.get_xaxis().set_visible(False) + plt.legend(loc=(1.01, 0.15)) + ax3.xaxis.set_major_formatter(matplotlib.dates.DateFormatter('%H:%M')) + # # xlabels = [label[0:6] for label in xlabels] + # plt.setp(ax3.xaxis.get_majorticklabels(), rotation=20, ha='right') + + ax4 = f.add_subplot(gs[3, 0], sharex=ax) + plt.plot(inst['B_sc_x']*1e5, color='b', linestyle='--') + plt.plot(inst['B_sc_y']*1e5, color='r', linestyle='--') + plt.plot(inst['B_sc_z']*1e5, color='g', linestyle='--') + ax4.set_title('Magnetic Field in S/C X, Y, and Z') + ax4.set_ylabel('Gauss') + ax4.set_ylim([-3.5, 3.5]) + # ax3.axes.get_xaxis().set_visible(False) + plt.legend(loc=(1.01, 0.15)) + ax4.xaxis.set_major_formatter(matplotlib.dates.DateFormatter('%H:%M')) + # # xlabels = [label[0:6] for label in xlabels] + plt.setp(ax4.xaxis.get_majorticklabels(), rotation=20, ha='right') + + # inst info + ax6 = f.add_subplot(gs[4, 0]) + + # do world plot if time to be plotted is less than 285 minutes, less than + # 3 orbits + time_diff = inst.data.index[-1] - inst.data.index[0] + if time_diff > pds.Timedelta(minutes=285): + # do long time plot + inst['glat'].plot(label='glat') # legend=True, label='mlat') + inst['mlt'].plot(label='mlt') # legend=True, label='mlt') + plt.title('Satellite Position') + plt.legend(['mlat', 'mlt'], loc=(1.01, 0.15)) + # inst['glong'].plot(secondary_y = True, label='glong')#legend=True, + # secondary_y = True, label='glong') + + else: + + # make map the same size as the other plots + s1pos = plt.get(ax, 'position').bounds + s6pos = plt.get(ax6, 'position').bounds + ax6.set_position([s1pos[0], s6pos[1]+.008, s1pos[2], s1pos[3]]) + + # fix longitude range for plot. Pad longitude so that first sample + # aligned with inst measurement sample + lon0 = inst[0, 'glong'] + lon1 = inst[-1, 'glong'] + + # enforce minimal longitude window, keep graphics from being too + # disturbed + if (lon1-lon0) < 90: + lon0 -= 45. + lon1 += 45. + if lon1 > 720: + lon0 -= 360. + lon1 -= 360. + inst[:, 'glong'] -= 360. + + m = Basemap(projection='mill', llcrnrlat=-60, urcrnrlat=60., + urcrnrlon=lon1.copy(), llcrnrlon=lon0.copy(), + resolution='c', ax=ax6, fix_aspect=False) + # m is an object which manages drawing to the map + # it also acts as a transformation function for geo coords to + # plotting coords + + # coastlines + m.drawcoastlines(ax=ax6) + # get first longitude meridian to plot + plon = np.ceil(lon0/60.)*60. + m.drawmeridians(np.arange(plon, plon+360.-22.5, 60), + labels=[0, 0, 0, 1], ax=ax6) + m.drawparallels(np.arange(-20, 20, 20)) + # time midway through inst to plot terminator locations + midDate = inst.data.index[len(inst.data.index)//2] + + # plot day/night terminators + try: + _ = m.nightshade(midDate) + except ValueError: + pass + + x, y = m(inst['glong'].values, inst['glat'].values) + points = np.array([x, y]).T.reshape(-1, 1, 2) + segments = np.concatenate([points[:-1], points[1:]], axis=1) + plot_norm = plt.Normalize(300, 500) + plot_cmap = plt.get_cmap('viridis') + + lc = LineCollection(segments, cmap=plot_cmap, norm=plot_norm, + linewidths=5.0) + lc.set_array(inst['alt'].values) + sm = plt.cm.ScalarMappable(cmap=plot_cmap, norm=plot_norm) + sm._A = [] + + ax6.add_collection(lc) + + ax6_bar = f.add_subplot(gs[4, 1]) + # plt.colorbar(sm) + plt.colorbar(cax=ax6_bar, ax=ax6, mappable=sm, + orientation='vertical', + ticks=[300., 400., 500.]) + plt.xlabel('Altitude') + plt.ylabel('km') + + f.tight_layout() + # buffer for overall title + f.subplots_adjust(bottom=0.06, top=0.91, right=.91) + plt.subplots_adjust(hspace=0.44) + + plt.savefig(out_fname) + + return From f0ada949ebfa8fc62365d4302a1a37d216181f5b Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Thu, 24 Oct 2019 20:38:12 -0400 Subject: [PATCH 025/162] BUG: import numpy --- pysatMissionPlanning/methods/spacecraft.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pysatMissionPlanning/methods/spacecraft.py b/pysatMissionPlanning/methods/spacecraft.py index cd817df9..97139aac 100644 --- a/pysatMissionPlanning/methods/spacecraft.py +++ b/pysatMissionPlanning/methods/spacecraft.py @@ -3,6 +3,7 @@ """ +import numpy as np import pysatMagVect From 0ce739dcb57db01e6f8bd7dd757b6e0d8f1c8075 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Thu, 24 Oct 2019 20:49:45 -0400 Subject: [PATCH 026/162] DOC: update changelog --- CHANGELOG.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index abe32edb..75d7c95b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,8 +2,10 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). -## [0.2.0] - 2019-10-22 +## [0.2.0] - 2019-10-24 - Added method files to access aacgmv2, apexpy, pyglow for any pysat instrument +- Added method for spacecraft to handle attitude and coordinates +- Added method for plotting simulated data ## [0.1.1] - 2019-10-22 - pypi compatibility From 7e0df6daf5f2b4fdc3012a96f52673e44038ae30 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Sat, 26 Oct 2019 19:10:49 -0400 Subject: [PATCH 027/162] DOC: add pip install instructions to readme --- README.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 484b0b8c..c61dad74 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,14 @@ Documentation # Installation -First, checkout the repository: +One way to install is through pip. Just type + +``` +pip install pysatMissionPlanning +``` +into the terminal. + +Or, if you prefer to work directly from github, checkout the repository: ``` git clone https://github.com/pysat/pysatMissionPlanning.git From 3254bddcd74f35d9c0da7ce03b9fe4378879ab5b Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Sat, 26 Oct 2019 19:52:42 -0400 Subject: [PATCH 028/162] TST: add basic pyglow tests --- .../tests/test_methods_pyglow.py | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 pysatMissionPlanning/tests/test_methods_pyglow.py diff --git a/pysatMissionPlanning/tests/test_methods_pyglow.py b/pysatMissionPlanning/tests/test_methods_pyglow.py new file mode 100644 index 00000000..4b686d9d --- /dev/null +++ b/pysatMissionPlanning/tests/test_methods_pyglow.py @@ -0,0 +1,66 @@ +# -*- coding: utf-8 -*- +# Test some of the pyglow method functions + +import numpy as np +import pysat +import pysat.instruments.pysat_testing +from pysatMissionPlanning.methods import pyglow as methglow + + +def add_altitude(inst, altitude=400.0): + """Add altitudes to pysat_testing instrument""" + + inst['alt'] = altitude*np.ones(inst.data.shape[0]) + + +class TestBasics(): + def setup(self): + """Runs before every method to create a clean testing setup.""" + self.testInst = pysat.Instrument(platform='pysat', name='testing', + sat_id='100', clean_level='clean') + self.testInst.custom.add(add_altitude, 'modify') + + def teardown(self): + """Clean up test environment after tests""" + del self + + def test_add_iri_thermal_plasma(self): + """Test adding thermal plasma data to test inst""" + self.testInst.custom.add(methglow.add_iri_thermal_plasma, 'modify', + glat_label='latitude', + glong_label='longitude') + self.testInst.load(date=pysat.datetime(2009, 1, 1)) + targets = ['e_temp', 'frac_dens_h', 'frac_dens_he', 'frac_dens_o', + 'ion_dens', 'ion_temp'] + for target in targets: + assert target in self.testInst.data.keys() + assert target in self.testInst.meta.data.index + + def test_add_igrf(self): + """Test adding igrf model to test inst""" + self.testInst.custom.add(methglow.add_igrf, 'modify', + glat_label='latitude', + glong_label='longitude') + self.testInst.load(date=pysat.datetime(2009, 1, 1)) + targets = ['B', 'B_east', 'B_north', 'B_up', 'B_ecef_x', 'B_ecef_y', + 'B_ecef_z'] + for target in targets: + # Check if data is added + assert target in self.testInst.data.keys() + # Check if metadata is added + assert target in self.testInst.meta.data.index + + def test_add_msis(self): + """Test adding msis model to test inst""" + self.testInst.custom.add(methglow.add_msis, 'modify', + glat_label='latitude', + glong_label='longitude') + self.testInst.load(date=pysat.datetime(2009, 1, 1)) + targets = ['Nn', 'Nn_N', 'Nn_N2', 'Nn_O', 'Nn_O2', 'Tn_msis'] + for target in targets: + # Check if data is added + assert target in self.testInst.data.keys() + # Check if metadata is added + assert target in self.testInst.meta.data.index + + # TODO: Add hwm tests once routine is generalized From aa6cc5a9372279c27462299446a6e666fd96e750 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Sat, 26 Oct 2019 20:07:32 -0400 Subject: [PATCH 029/162] TST: check if modeled values added are nans --- .../tests/test_methods_pyglow.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/pysatMissionPlanning/tests/test_methods_pyglow.py b/pysatMissionPlanning/tests/test_methods_pyglow.py index 4b686d9d..db105755 100644 --- a/pysatMissionPlanning/tests/test_methods_pyglow.py +++ b/pysatMissionPlanning/tests/test_methods_pyglow.py @@ -3,14 +3,13 @@ import numpy as np import pysat -import pysat.instruments.pysat_testing from pysatMissionPlanning.methods import pyglow as methglow def add_altitude(inst, altitude=400.0): """Add altitudes to pysat_testing instrument""" - inst['alt'] = altitude*np.ones(inst.data.shape[0]) + inst['altitude'] = altitude*np.ones(inst.data.shape[0]) class TestBasics(): @@ -28,25 +27,31 @@ def test_add_iri_thermal_plasma(self): """Test adding thermal plasma data to test inst""" self.testInst.custom.add(methglow.add_iri_thermal_plasma, 'modify', glat_label='latitude', - glong_label='longitude') + glong_label='longitude', + alt_label='altitude') self.testInst.load(date=pysat.datetime(2009, 1, 1)) targets = ['e_temp', 'frac_dens_h', 'frac_dens_he', 'frac_dens_o', 'ion_dens', 'ion_temp'] for target in targets: + # Check if data is added assert target in self.testInst.data.keys() + assert not np.isnan(self.testInst[target]).any() + # Check if metadata is added assert target in self.testInst.meta.data.index def test_add_igrf(self): """Test adding igrf model to test inst""" self.testInst.custom.add(methglow.add_igrf, 'modify', glat_label='latitude', - glong_label='longitude') + glong_label='longitude', + alt_label='altitude') self.testInst.load(date=pysat.datetime(2009, 1, 1)) targets = ['B', 'B_east', 'B_north', 'B_up', 'B_ecef_x', 'B_ecef_y', 'B_ecef_z'] for target in targets: # Check if data is added assert target in self.testInst.data.keys() + assert not np.isnan(self.testInst[target]).any() # Check if metadata is added assert target in self.testInst.meta.data.index @@ -54,13 +59,15 @@ def test_add_msis(self): """Test adding msis model to test inst""" self.testInst.custom.add(methglow.add_msis, 'modify', glat_label='latitude', - glong_label='longitude') + glong_label='longitude', + alt_label='altitude') self.testInst.load(date=pysat.datetime(2009, 1, 1)) targets = ['Nn', 'Nn_N', 'Nn_N2', 'Nn_O', 'Nn_O2', 'Tn_msis'] for target in targets: # Check if data is added assert target in self.testInst.data.keys() + assert not np.isnan(self.testInst[target]).any() # Check if metadata is added assert target in self.testInst.meta.data.index - # TODO: Add hwm tests once routine is generalized + # TODO: Add hwm tests once routine is generalized From 14c6d60135dcf8bd96c901edd66d7664eeca50f6 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Sat, 26 Oct 2019 20:17:21 -0400 Subject: [PATCH 030/162] TST: add aacgm tests --- .../tests/test_methods_aacgmv2.py | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 pysatMissionPlanning/tests/test_methods_aacgmv2.py diff --git a/pysatMissionPlanning/tests/test_methods_aacgmv2.py b/pysatMissionPlanning/tests/test_methods_aacgmv2.py new file mode 100644 index 00000000..723c9ea0 --- /dev/null +++ b/pysatMissionPlanning/tests/test_methods_aacgmv2.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +# Test some of the pyglow method functions + +import numpy as np +import pysat +import pysatMissionPlanning.methods.aacgmv2 as methaacgm + + +def add_altitude(inst, altitude=400.0): + """Add altitudes to pysat_testing instrument""" + + inst['altitude'] = altitude*np.ones(inst.data.shape[0]) + + +class TestBasics(): + def setup(self): + """Runs before every method to create a clean testing setup.""" + self.testInst = pysat.Instrument(platform='pysat', name='testing', + sat_id='100', clean_level='clean') + self.testInst.custom.add(add_altitude, 'modify') + + def teardown(self): + """Clean up test environment after tests""" + del self + + def test_add_aacgm_coordinates(self): + """Test adding thermal plasma data to test inst""" + self.testInst.custom.add(methaacgm.add_aacgm_coordinates, 'modify', + glat_label='latitude', + glong_label='longitude', + alt_label='altitude') + self.testInst.load(date=pysat.datetime(2009, 1, 1)) + targets = ['aacgm_lat', 'aacgm_long', 'aacgm_mlt'] + for target in targets: + # Check if data is added + assert target in self.testInst.data.keys() + assert not np.isnan(self.testInst[target]).any() + # Check if metadata is added + assert target in self.testInst.meta.data.index From 0d84aca8a9bbcf7c3eb0b136403ff62d91fd145e Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Sat, 26 Oct 2019 20:22:44 -0400 Subject: [PATCH 031/162] BUG: mismatch between mlt and qd_mlt in apexpy methods --- pysatMissionPlanning/methods/apexpy.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pysatMissionPlanning/methods/apexpy.py b/pysatMissionPlanning/methods/apexpy.py index 240ee13a..c26e00aa 100644 --- a/pysatMissionPlanning/methods/apexpy.py +++ b/pysatMissionPlanning/methods/apexpy.py @@ -47,18 +47,18 @@ def add_quasi_dipole_coordinates(inst, glat_label='glat', glong_label='glong', qd_lat = [] qd_lon = [] - mlt = [] + qd_mlt = [] for lat, lon, alt, time in zip(inst[glat_label], inst[glong_label], inst[alt_label], inst.data.index): # quasi-dipole latitude and longitude from geodetic coords tlat, tlon = ap.geo2qd(lat, lon, alt) qd_lat.append(tlat) qd_lon.append(tlon) - mlt.append(ap.mlon2mlt(tlon, time)) + qd_mlt.append(ap.mlon2mlt(tlon, time)) inst['qd_lat'] = qd_lat inst['qd_long'] = qd_lon - inst['mlt'] = mlt + inst['qd_mlt'] = qd_mlt inst.meta['qd_lat'] = {'units': 'degrees', 'long_name': 'Quasi dipole latitude'} From d08350b1d1a46d4154e42f2c43e18edddf49f87e Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Sat, 26 Oct 2019 20:24:43 -0400 Subject: [PATCH 032/162] TST: add apexpy tests --- .../tests/test_methods_apexpy.py | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 pysatMissionPlanning/tests/test_methods_apexpy.py diff --git a/pysatMissionPlanning/tests/test_methods_apexpy.py b/pysatMissionPlanning/tests/test_methods_apexpy.py new file mode 100644 index 00000000..891c4d50 --- /dev/null +++ b/pysatMissionPlanning/tests/test_methods_apexpy.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +# Test some of the pyglow method functions + +import numpy as np +import pysat +import pysatMissionPlanning.methods.apexpy as methapex + + +def add_altitude(inst, altitude=400.0): + """Add altitudes to pysat_testing instrument""" + + inst['altitude'] = altitude*np.ones(inst.data.shape[0]) + + +class TestBasics(): + def setup(self): + """Runs before every method to create a clean testing setup.""" + self.testInst = pysat.Instrument(platform='pysat', name='testing', + sat_id='100', clean_level='clean') + self.testInst.custom.add(add_altitude, 'modify') + + def teardown(self): + """Clean up test environment after tests""" + del self + + def test_add_quasi_dipole_coordinates(self): + """Test adding thermal plasma data to test inst""" + self.testInst.custom.add(methapex.add_quasi_dipole_coordinates, + 'modify', + glat_label='latitude', + glong_label='longitude', + alt_label='altitude') + self.testInst.load(date=pysat.datetime(2009, 1, 1)) + targets = ['qd_lat', 'qd_long', 'qd_mlt'] + for target in targets: + # Check if data is added + assert target in self.testInst.data.keys() + assert not np.isnan(self.testInst[target]).any() + # Check if metadata is added + assert target in self.testInst.meta.data.index From fbd977fa8f7ac38ad5424cb1bc28b0710bb7e107 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Sat, 26 Oct 2019 20:36:29 -0400 Subject: [PATCH 033/162] TST: removed 2.7 display commands from travis --- .travis.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 3e6ee776..19d2f0c3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -51,10 +51,6 @@ install: before_script: # set up display screen - export DISPLAY=:99.0 - - if [[ $TRAVIS_PYTHON_VERSION < "3.0" ]]; then - sh -e /etc/init.d/xvfb start; - sleep 3; - fi script: - pytest -vs --cov=pysatMissionPlanning/ From 540ca9ce48b889a1772aa6793af3e80c95a1ee7b Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Sat, 26 Oct 2019 20:40:07 -0400 Subject: [PATCH 034/162] BUG: mlt & qd_mlt names --- pysatMissionPlanning/methods/apexpy.py | 10 +++++----- pysatMissionPlanning/tests/test_methods_apexpy.py | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pysatMissionPlanning/methods/apexpy.py b/pysatMissionPlanning/methods/apexpy.py index c26e00aa..e40aaa07 100644 --- a/pysatMissionPlanning/methods/apexpy.py +++ b/pysatMissionPlanning/methods/apexpy.py @@ -47,24 +47,24 @@ def add_quasi_dipole_coordinates(inst, glat_label='glat', glong_label='glong', qd_lat = [] qd_lon = [] - qd_mlt = [] + mlt = [] for lat, lon, alt, time in zip(inst[glat_label], inst[glong_label], inst[alt_label], inst.data.index): # quasi-dipole latitude and longitude from geodetic coords tlat, tlon = ap.geo2qd(lat, lon, alt) qd_lat.append(tlat) qd_lon.append(tlon) - qd_mlt.append(ap.mlon2mlt(tlon, time)) + mlt.append(ap.mlon2mlt(tlon, time)) inst['qd_lat'] = qd_lat inst['qd_long'] = qd_lon - inst['qd_mlt'] = qd_mlt + inst['mlt'] = mlt inst.meta['qd_lat'] = {'units': 'degrees', 'long_name': 'Quasi dipole latitude'} inst.meta['qd_long'] = {'units': 'degrees', 'long_name': 'Quasi dipole longitude'} - inst.meta['qd_mlt'] = {'units': 'hrs', - 'long_name': 'Magnetic local time'} + inst.meta['mlt'] = {'units': 'hrs', + 'long_name': 'Magnetic local time'} return diff --git a/pysatMissionPlanning/tests/test_methods_apexpy.py b/pysatMissionPlanning/tests/test_methods_apexpy.py index 891c4d50..4e346c30 100644 --- a/pysatMissionPlanning/tests/test_methods_apexpy.py +++ b/pysatMissionPlanning/tests/test_methods_apexpy.py @@ -31,7 +31,7 @@ def test_add_quasi_dipole_coordinates(self): glong_label='longitude', alt_label='altitude') self.testInst.load(date=pysat.datetime(2009, 1, 1)) - targets = ['qd_lat', 'qd_long', 'qd_mlt'] + targets = ['qd_lat', 'qd_long', 'mlt'] for target in targets: # Check if data is added assert target in self.testInst.data.keys() From 7c070fd36118c691b484150a0bdf1bf746d60548 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Sat, 26 Oct 2019 21:03:03 -0400 Subject: [PATCH 035/162] DOC: update changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 75d7c95b..25530355 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Added method files to access aacgmv2, apexpy, pyglow for any pysat instrument - Added method for spacecraft to handle attitude and coordinates - Added method for plotting simulated data +- Bugs + - Fixed wrong metadata name for mlt in apexpy ## [0.1.1] - 2019-10-22 - pypi compatibility From e1c0c2353fe7c0b3f54749e98091010d36cfe582 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Sat, 26 Oct 2019 21:06:55 -0400 Subject: [PATCH 036/162] DOC: update changelog --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4afcbbda..3001b474 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,9 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). +## [0.2.0] - 2019-10-26 +- Added support for readthedocs + ## [0.1.1] - 2019-10-22 - pypi compatibility - Add DOI badge From f08184d79bc0ed354cbe922a919879ef97c0cf2c Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Mon, 28 Oct 2019 22:17:27 -0400 Subject: [PATCH 037/162] STY: add function for total_wind --- .../instruments/pysat_sgp4.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/pysatMissionPlanning/instruments/pysat_sgp4.py b/pysatMissionPlanning/instruments/pysat_sgp4.py index 36d51b6b..7830153e 100644 --- a/pysatMissionPlanning/instruments/pysat_sgp4.py +++ b/pysatMissionPlanning/instruments/pysat_sgp4.py @@ -289,15 +289,16 @@ def project_hwm_onto_sc(inst): import pysatMissionPlanning.methods.attitude as methatt - inst['total_wind_x'] = \ - (inst['zonal_wind']*inst['unit_zonal_wind_ecef_x'] + - inst['meridional_wind']*inst['unit_mer_wind_ecef_x']) - inst['total_wind_y'] = \ - (inst['zonal_wind']*inst['unit_zonal_wind_ecef_y'] + - inst['meridional_wind']*inst['unit_mer_wind_ecef_y']) - inst['total_wind_z'] = \ - (inst['zonal_wind']*inst['unit_zonal_wind_ecef_z'] + - inst['meridional_wind']*inst['unit_mer_wind_ecef_z']) + def get_wind_comp(inst, direction='x'): + unit_zon = 'unit_zonal_wind_ecef_' + direction + unit_mer = 'unit_mer_wind_ecef_' + direction + + return (inst['zonal_wind']*inst[unit_zon] + + inst['meridional_wind']*inst[unit_mer]) + + inst['total_wind_x'] = get_wind_comp(inst, direction='x') + inst['total_wind_y'] = get_wind_comp(inst, direction='y') + inst['total_wind_z'] = get_wind_comp(inst, direction='z') methatt.project_ecef_vector_onto_sc(inst, 'total_wind_x', 'total_wind_y', 'total_wind_z', 'sim_wind_sc_x', From c0b8d11d0477577db01aceedbcd95b75a129b0ce Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Mon, 28 Oct 2019 22:25:42 -0400 Subject: [PATCH 038/162] STY: simplify velocity from position --- pysatMissionPlanning/methods/spacecraft.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/pysatMissionPlanning/methods/spacecraft.py b/pysatMissionPlanning/methods/spacecraft.py index 97139aac..35c6cb41 100644 --- a/pysatMissionPlanning/methods/spacecraft.py +++ b/pysatMissionPlanning/methods/spacecraft.py @@ -157,14 +157,13 @@ def calculate_ecef_velocity(inst): """ - x = inst['position_ecef_x'] - vel_x = (x.values[2:] - x.values[0:-2])/2. + def get_vel_from_pos(x): + vel = (x.values[2:] - x.values[0:-2])/2. + return vel - y = inst['position_ecef_y'] - vel_y = (y.values[2:] - y.values[0:-2])/2. - - z = inst['position_ecef_z'] - vel_z = (z.values[2:] - z.values[0:-2])/2. + vel_x = get_vel_from_pos(inst['position_ecef_x']) + vel_y = get_vel_from_pos(inst['position_ecef_y']) + vel_z = get_vel_from_pos(inst['position_ecef_z']) inst[1:-1, 'velocity_ecef_x'] = vel_x inst[1:-1, 'velocity_ecef_y'] = vel_y From a6499ae498e10b130693680dcddf5b35d4a78c39 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Wed, 13 Nov 2019 12:29:40 -0500 Subject: [PATCH 039/162] DOC: add RTD badge --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index c61dad74..536ca3ad 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,7 @@ # pysatMissionPlanning [![Build Status](https://travis-ci.org/pysat/pysatMissionPlanning.svg?branch=master)](https://travis-ci.org/pysat/pysatMissionPlanning) +[![Documentation Status](https://readthedocs.org/projects/pysatMissionPlanning/badge/?version=latest)](http://pysatMissionPlanning.readthedocs.io/en/latest/?badge=latest) [![Coverage Status](https://coveralls.io/repos/github/pysat/pysatMissionPlanning/badge.svg?branch=master)](https://coveralls.io/github/pysat/pysatMissionPlanning?branch=master) [![DOI](https://zenodo.org/badge/209358908.svg)](https://zenodo.org/badge/latestdoi/209358908) From 9b03a7f15f890e0a5c82ad234f11394e778ef20f Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Mon, 18 Nov 2019 11:16:57 -0500 Subject: [PATCH 040/162] TST: Update Travis environment Now that pysat 2.1.0 is out, update the travis environment here to run off of master rather than develop. --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index afa1c7c8..971f4c67 100644 --- a/.travis.yml +++ b/.travis.yml @@ -30,7 +30,6 @@ before_install: - git clone https://github.com/pysat/pysat.git >/dev/null - echo 'installing pysat' - cd ./pysat - - git checkout develop # set up data directory - mkdir /home/travis/build/pysatData # install pysat From 07a2b8ab97f9bd75d48217222010cce5c6bc5c05 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Mon, 18 Nov 2019 11:21:06 -0500 Subject: [PATCH 041/162] DOC: Add codeclimate badge --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 484b0b8c..e9da56c5 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,8 @@ [![Coverage Status](https://coveralls.io/repos/github/pysat/pysatMissionPlanning/badge.svg?branch=master)](https://coveralls.io/github/pysat/pysatMissionPlanning?branch=master) [![DOI](https://zenodo.org/badge/209358908.svg)](https://zenodo.org/badge/latestdoi/209358908) +[![Maintainability](https://api.codeclimate.com/v1/badges/f795422173ac04203b24/maintainability)](https://codeclimate.com/github/pysat/pysatMissionPlanning/maintainability) + pysatMissionPlanning allows users to run build simulated satellites for TLE info and add empirical data. It includes the pysat_sgp4 instrument module which can be imported into pysat. Main Features From 0f9b222454a02c4d6e92c3d282c17be4b061a130 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Sat, 30 Nov 2019 11:49:43 -0500 Subject: [PATCH 042/162] STY: add flake8 --- .flake8 | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .flake8 diff --git a/.flake8 b/.flake8 new file mode 100644 index 00000000..c2fe4fae --- /dev/null +++ b/.flake8 @@ -0,0 +1,3 @@ +[flake8] +max-line-length = 90 +exclude = .git,__pycache__,.eggs/,doc/,docs/,build/,dist/,archive/ From 11836a3f60766a969473c9c7a53fe93019c2fce2 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Sat, 30 Nov 2019 11:51:56 -0500 Subject: [PATCH 043/162] STY: move project_hwm to pyglow methods --- .../instruments/pysat_sgp4.py | 40 +------------------ pysatMissionPlanning/methods/pyglow.py | 38 ++++++++++++++++++ 2 files changed, 39 insertions(+), 39 deletions(-) diff --git a/pysatMissionPlanning/instruments/pysat_sgp4.py b/pysatMissionPlanning/instruments/pysat_sgp4.py index 7830153e..9a2b3e65 100644 --- a/pysatMissionPlanning/instruments/pysat_sgp4.py +++ b/pysatMissionPlanning/instruments/pysat_sgp4.py @@ -63,7 +63,7 @@ def init(self): 'B_sc_z', meta=[in_meta.copy(), in_meta.copy(), in_meta.copy()]) # project total wind vector - self.custom.add(project_hwm_onto_sc, 'modify') + self.custom.add(methglow.project_hwm_onto_sc, 'modify') def load(fnames, tag=None, sat_id=None, obs_long=0., obs_lat=0., obs_alt=0., @@ -283,41 +283,3 @@ def download(date_array, tag, sat_id, data_path=None, user=None, """ Data is simulated so no download routine is possible. Simple pass function""" pass - - -def project_hwm_onto_sc(inst): - - import pysatMissionPlanning.methods.attitude as methatt - - def get_wind_comp(inst, direction='x'): - unit_zon = 'unit_zonal_wind_ecef_' + direction - unit_mer = 'unit_mer_wind_ecef_' + direction - - return (inst['zonal_wind']*inst[unit_zon] + - inst['meridional_wind']*inst[unit_mer]) - - inst['total_wind_x'] = get_wind_comp(inst, direction='x') - inst['total_wind_y'] = get_wind_comp(inst, direction='y') - inst['total_wind_z'] = get_wind_comp(inst, direction='z') - - methatt.project_ecef_vector_onto_sc(inst, 'total_wind_x', 'total_wind_y', - 'total_wind_z', 'sim_wind_sc_x', - 'sim_wind_sc_y', 'sim_wind_sc_z') - - inst.meta['sim_wind_sc_x'] = {'units': 'm/s', - 'long_name': 'Simulated x-vector ' + - 'instrument wind', - 'desc': 'Wind from model as measured ' + - 'by instrument in its x-direction'} - inst.meta['sim_wind_sc_y'] = {'units': 'm/s', - 'long_name': 'Simulated y-vector ' + - 'instrument wind', - 'desc': 'Wind from model as measured ' + - 'by instrument in its y-direction'} - inst.meta['sim_wind_sc_z'] = {'units': 'm/s', - 'long_name': 'Simulated z-vector ' + - 'instrument wind', - 'desc': 'Wind from model as measured ' + - 'by instrument in its z-direction'} - - return diff --git a/pysatMissionPlanning/methods/pyglow.py b/pysatMissionPlanning/methods/pyglow.py index dab64223..b7f237c8 100644 --- a/pysatMissionPlanning/methods/pyglow.py +++ b/pysatMissionPlanning/methods/pyglow.py @@ -373,3 +373,41 @@ def add_hwm_winds_and_ecef_vectors(inst, glat_label='glat', 'desc': 'z-value of meridional wind unit vector in ECEF coordinates'} return + + +def project_hwm_onto_sc(inst): + + import pysatMissionPlanning.methods.attitude as methatt + + def get_wind_comp(inst, direction='x'): + unit_zon = 'unit_zonal_wind_ecef_' + direction + unit_mer = 'unit_mer_wind_ecef_' + direction + + return (inst['zonal_wind']*inst[unit_zon] + + inst['meridional_wind']*inst[unit_mer]) + + inst['total_wind_x'] = get_wind_comp(inst, direction='x') + inst['total_wind_y'] = get_wind_comp(inst, direction='y') + inst['total_wind_z'] = get_wind_comp(inst, direction='z') + + methatt.project_ecef_vector_onto_sc(inst, 'total_wind_x', 'total_wind_y', + 'total_wind_z', 'sim_wind_sc_x', + 'sim_wind_sc_y', 'sim_wind_sc_z') + + inst.meta['sim_wind_sc_x'] = {'units': 'm/s', + 'long_name': 'Simulated x-vector ' + + 'instrument wind', + 'desc': 'Wind from model as measured ' + + 'by instrument in its x-direction'} + inst.meta['sim_wind_sc_y'] = {'units': 'm/s', + 'long_name': 'Simulated y-vector ' + + 'instrument wind', + 'desc': 'Wind from model as measured ' + + 'by instrument in its y-direction'} + inst.meta['sim_wind_sc_z'] = {'units': 'm/s', + 'long_name': 'Simulated z-vector ' + + 'instrument wind', + 'desc': 'Wind from model as measured ' + + 'by instrument in its z-direction'} + + return From 24b836daaeec96e9ed3b04f739b84b407e0b7a87 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Sat, 30 Nov 2019 12:22:32 -0500 Subject: [PATCH 044/162] DOC: Update license --- LICENSE => LICENSE.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename LICENSE => LICENSE.md (100%) diff --git a/LICENSE b/LICENSE.md similarity index 100% rename from LICENSE rename to LICENSE.md From 73844f4e6045095ae219dee62251de7fc98739c4 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Sat, 30 Nov 2019 12:22:51 -0500 Subject: [PATCH 045/162] TST: Update codeclimate exclude --- .codeclimate.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.codeclimate.yml b/.codeclimate.yml index f3531c75..460bbd6f 100644 --- a/.codeclimate.yml +++ b/.codeclimate.yml @@ -10,3 +10,8 @@ exclude_paths: - "pysatMissionPlanning/tests/**/*" - "docs/**/*" - "setup.py" + - ".*" + - "*.md" + - "*.in" + - "*.txt" + - "*.png" From 1e8b31af68a046b516fff0df1cbfc0cc5141095d Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Sat, 30 Nov 2019 12:45:13 -0500 Subject: [PATCH 046/162] STY: simplify wind meta --- pysatMissionPlanning/methods/pyglow.py | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/pysatMissionPlanning/methods/pyglow.py b/pysatMissionPlanning/methods/pyglow.py index b7f237c8..d53e1bb8 100644 --- a/pysatMissionPlanning/methods/pyglow.py +++ b/pysatMissionPlanning/methods/pyglow.py @@ -386,6 +386,14 @@ def get_wind_comp(inst, direction='x'): return (inst['zonal_wind']*inst[unit_zon] + inst['meridional_wind']*inst[unit_mer]) + def get_wind_meta(coord='x'): + dict = {'units': 'm/s', + 'long_name': ' '.join(['Simulated {:s}-vector instrument', + 'wind']).format(coord), + 'desc': ' '.join(['Wind from model as measured by instrument', + 'in its {:s}-direction']).format(coord)} + return dict + inst['total_wind_x'] = get_wind_comp(inst, direction='x') inst['total_wind_y'] = get_wind_comp(inst, direction='y') inst['total_wind_z'] = get_wind_comp(inst, direction='z') @@ -394,20 +402,8 @@ def get_wind_comp(inst, direction='x'): 'total_wind_z', 'sim_wind_sc_x', 'sim_wind_sc_y', 'sim_wind_sc_z') - inst.meta['sim_wind_sc_x'] = {'units': 'm/s', - 'long_name': 'Simulated x-vector ' + - 'instrument wind', - 'desc': 'Wind from model as measured ' + - 'by instrument in its x-direction'} - inst.meta['sim_wind_sc_y'] = {'units': 'm/s', - 'long_name': 'Simulated y-vector ' + - 'instrument wind', - 'desc': 'Wind from model as measured ' + - 'by instrument in its y-direction'} - inst.meta['sim_wind_sc_z'] = {'units': 'm/s', - 'long_name': 'Simulated z-vector ' + - 'instrument wind', - 'desc': 'Wind from model as measured ' + - 'by instrument in its z-direction'} + inst.meta['sim_wind_sc_x'] = get_wind_meta('x') + inst.meta['sim_wind_sc_y'] = get_wind_meta('y') + inst.meta['sim_wind_sc_z'] = get_wind_meta('z') return From dfc53230b24f2a23955e5781d606c2bd807745b4 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Sat, 30 Nov 2019 12:55:20 -0500 Subject: [PATCH 047/162] STY: simplify ecef wind meta --- pysatMissionPlanning/methods/pyglow.py | 54 ++++++++++++++------------ 1 file changed, 29 insertions(+), 25 deletions(-) diff --git a/pysatMissionPlanning/methods/pyglow.py b/pysatMissionPlanning/methods/pyglow.py index d53e1bb8..67a69056 100644 --- a/pysatMissionPlanning/methods/pyglow.py +++ b/pysatMissionPlanning/methods/pyglow.py @@ -342,35 +342,39 @@ def add_hwm_winds_and_ecef_vectors(inst, glat_label='glat', inst['unit_mer_wind_ecef_z'] = merz # Adding metadata information - inst.meta['zonal_wind'] = {'units': 'm/s', 'long_name': 'Zonal Wind', + def get_ecef_wind_meta(coord='x', geo='mer'): + """Generates consistent metadat for ecef winds""" + if geo == 'mer': + name = 'Meridional' + else: + name = 'Zonal' + dict = {'units': '', + 'long_name': ' '.join(['{name:s} Wind Unit ECEF', + '{coord:s}-vector']).format(name=name, + coord=coord), + 'desc': ' '.join(['{coord:s}-value of {name:s} wind unit vector', + 'in ECEF coordinates']).format(name=name.lower(), + coord=coord)} + return dict + + inst.meta['zonal_wind'] = {'units': 'm/s', + 'long_name': 'Zonal Wind', 'desc': 'HWM model zonal wind'} inst.meta['meridional_wind'] = {'units': 'm/s', 'long_name': 'Meridional Wind', 'desc': 'HWM model meridional wind'} - inst.meta['unit_zonal_wind_ecef_x'] = \ - {'units': '', - 'long_name': 'Zonal Wind Unit ECEF x-vector', - 'desc': 'x-value of zonal wind unit vector in ECEF coordinates'} - inst.meta['unit_zonal_wind_ecef_y'] = \ - {'units': '', - 'long_name': 'Zonal Wind Unit ECEF y-vector', - 'desc': 'y-value of zonal wind unit vector in ECEF coordinates'} - inst.meta['unit_zonal_wind_ecef_z'] = \ - {'units': '', - 'long_name': 'Zonal Wind Unit ECEF z-vector', - 'desc': 'z-value of zonal wind unit vector in ECEF coordinates'} - inst.meta['unit_mer_wind_ecef_x'] = \ - {'units': '', - 'long_name': 'Meridional Wind Unit ECEF x-vector', - 'desc': 'x-value of meridional wind unit vector in ECEF coordinates'} - inst.meta['unit_mer_wind_ecef_y'] = \ - {'units': '', - 'long_name': 'Meridional Wind Unit ECEF y-vector', - 'desc': 'y-value of meridional wind unit vector in ECEF coordinates'} - inst.meta['unit_mer_wind_ecef_z'] = \ - {'units': '', - 'long_name': 'Meridional Wind Unit ECEF z-vector', - 'desc': 'z-value of meridional wind unit vector in ECEF coordinates'} + inst.meta['unit_zonal_wind_ecef_x'] = get_ecef_wind_meta(coord='x', + geo='zon') + inst.meta['unit_zonal_wind_ecef_y'] = get_ecef_wind_meta(coord='y', + geo='zon') + inst.meta['unit_zonal_wind_ecef_z'] = get_ecef_wind_meta(coord='z', + geo='zon') + inst.meta['unit_mer_wind_ecef_x'] = get_ecef_wind_meta(coord='x', + geo='mer') + inst.meta['unit_mer_wind_ecef_y'] = get_ecef_wind_meta(coord='y', + geo='mer') + inst.meta['unit_mer_wind_ecef_z'] = get_ecef_wind_meta(coord='z', + geo='mer') return From 2e71baaec86fe73ee240bcf368ca6a7357254a9b Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Sat, 30 Nov 2019 13:02:15 -0500 Subject: [PATCH 048/162] DOC: update IRI metadata --- pysatMissionPlanning/methods/pyglow.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/pysatMissionPlanning/methods/pyglow.py b/pysatMissionPlanning/methods/pyglow.py index 67a69056..7a53d27c 100644 --- a/pysatMissionPlanning/methods/pyglow.py +++ b/pysatMissionPlanning/methods/pyglow.py @@ -75,14 +75,20 @@ def add_iri_thermal_plasma(inst, glat_label='glat', glong_label='glong', iri.index = inst.data.index inst[iri.keys()] = iri - inst.meta['ion_temp'] = {'units': 'Kelvin', 'long_name': 'Ion Temperature'} + inst.meta['ion_temp'] = {'units': 'Kelvin', 'long_name': 'Ion Temperature', + 'desc': ' '.join(['Ion temperature from IRI', + 'model run.'])} inst.meta['ion_dens'] = {'units': 'N/cc', 'long_name': 'Ion Density', - 'desc': 'Total ion density including O+ and H+ ' + - 'from IRI model run.'} + 'desc': ' '.join(['Total ion density including O+' + 'and H+ from IRI model run.'])} inst.meta['frac_dens_o'] = {'units': '', - 'long_name': 'Fractional O+ Density'} + 'long_name': 'Fractional O+ Density', + 'desc': ' '.join(['Fraction of O+ generated' + 'from IRI model run.'])} inst.meta['frac_dens_h'] = {'units': '', - 'long_name': 'Fractional H+ Density'} + 'long_name': 'Fractional H+ Density', + 'desc': ' '.join(['Fraction of O+ generated' + 'from IRI model run.'])} def add_igrf(inst, glat_label='glat', glong_label='glong', alt_label='alt'): From a28eb7c004c63ad0f0f81cf227baf414bb71414d Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Sat, 30 Nov 2019 13:15:43 -0500 Subject: [PATCH 049/162] DOC: Add example for loading pyglow data --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index e9da56c5..701bbd45 100644 --- a/README.md +++ b/README.md @@ -49,3 +49,14 @@ from pysatMissionPlanning.instruments import pysat_sgp4 sgp4 = pysat.Instrument(inst_module=pysat_sgp4) ``` + +The methods that run empirical models can also be exported to any pysat instrument. For instance, to add thermal plasma predictions from the IRI model to the C/NOFS IVM instrument, one can invoke + +``` +import pysat +import pysatMissionPlanning.methods.pyglow as methglow + +ivm = pysat.Instrument(platform='cnofs', name='ivm') +ivm.custom.add(methglow.add_iri_thermal_plasma, 'modify') +``` +Once the custom function is added, the model will automatically be run when the dataset is loaded. From 5d8c0900973e726e566a9a626b5f0b99f6731440 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Tue, 17 Dec 2019 23:49:15 -0500 Subject: [PATCH 050/162] ENH: separate sgp4 and ephem calculators --- .../instruments/pysat_ephem.py | 239 ++++++++++++++++++ .../instruments/pysat_sgp4.py | 146 ++--------- 2 files changed, 260 insertions(+), 125 deletions(-) create mode 100644 pysatMissionPlanning/instruments/pysat_ephem.py diff --git a/pysatMissionPlanning/instruments/pysat_ephem.py b/pysatMissionPlanning/instruments/pysat_ephem.py new file mode 100644 index 00000000..0fb4fdb9 --- /dev/null +++ b/pysatMissionPlanning/instruments/pysat_ephem.py @@ -0,0 +1,239 @@ +# -*- coding: utf-8 -*- +""" +Produces satellite orbit data. Orbit is simulated using +Two Line Elements (TLEs) and ephem. Satellite position is coupled +to several space science models to simulate the atmosphere the +satellite is in. + +""" + +from __future__ import print_function +from __future__ import absolute_import + +import os +import numpy as np +import pandas as pds +import pysat + +# pysat required parameters +platform = 'pysat' +name = 'ephem' +# dictionary of data 'tags' and corresponding description +tags = {'': 'Satellite simulation data set'} +# dictionary of satellite IDs, list of corresponding tags +sat_ids = {'': ['']} +test_dates = {'': {'': pysat.datetime(2018, 1, 1)}} + + +def init(self): + """ + Adds custom calculations to orbit simulation. + This routine is run once, and only once, upon instantiation. + + Adds quasi-dipole coordiantes, velocity calculation in ECEF coords, + adds the attitude vectors of spacecraft assuming x is ram pointing and + z is generally nadir, adds ionospheric parameters from the Interational + Reference Ionosphere (IRI), as well as simulated winds from the + Horiontal Wind Model (HWM). + + """ + import pysatMissionPlanning.methods.aacgmv2 as methaacgm + import pysatMissionPlanning.methods.apexpy as methapex + import pysatMissionPlanning.methods.pyglow as methglow + import pysatMissionPlanning.methods.spacecraft as methsc + + self.custom.add(methapex.add_quasi_dipole_coordinates, 'modify') + self.custom.add(methaacgm.add_aacgm_coordinates, 'modify') + self.custom.add(methsc.calculate_ecef_velocity, 'modify') + self.custom.add(methsc.add_sc_attitude_vectors, 'modify') + # project simulated vectors onto s/c basis + # IGRF + self.custom.add(methglow.add_igrf, 'modify') + # create metadata to be added along with vector projection + in_meta = {'desc': 'IGRF geomagnetic field expressed in the s/c basis.', + 'units': 'nT'} + # project IGRF + self.custom.add(methsc.project_ecef_vector_onto_sc, 'modify', 'end', + 'B_ecef_x', 'B_ecef_y', 'B_ecef_z', 'B_sc_x', 'B_sc_y', + 'B_sc_z', meta=[in_meta.copy(), in_meta.copy(), + in_meta.copy()]) + # Thermal Ion Parameters + self.custom.add(methglow.add_iri_thermal_plasma, 'modify') + # Thermal Neutral parameters + self.custom.add(methglow.add_msis, 'modify') + self.custom.add(methglow.add_hwm_winds_and_ecef_vectors, 'modify') + # project total wind vector + self.custom.add(methglow.project_hwm_onto_sc, 'modify') + + +def load(fnames, tag=None, sat_id=None, obs_long=0., obs_lat=0., obs_alt=0., + TLE1=None, TLE2=None): + """ + Returns data and metadata in the format required by pysat. Finds position + of satellite in both ECI and ECEF co-ordinates. + + Routine is directly called by pysat and not the user. + + Parameters + ---------- + fnames : list-like collection + File name that contains date in its name. + tag : string + Identifies a particular subset of satellite data + sat_id : string + Satellite ID + obs_long: float + Longitude of the observer on the Earth's surface + obs_lat: float + Latitude of the observer on the Earth's surface + obs_alt: float + Altitude of the observer on the Earth's surface + TLE1 : string + First string for Two Line Element. Must be in TLE format + TLE2 : string + Second string for Two Line Element. Must be in TLE format + + Example + ------- + inst = pysat.Instrument('pysat', 'sgp4', + TLE1='1 25544U 98067A 18135.61844383 .00002728 00000-0 48567-4 0 9998', + TLE2='2 25544 51.6402 181.0633 0004018 88.8954 22.2246 15.54059185113452') + inst.load(2018, 1) + + """ + + import ephem + import pysatMagVect + + # TLEs (Two Line Elements for ISS) + # format of TLEs is fixed and available from wikipedia... + # lines encode list of orbital elements of an Earth-orbiting object + # for a given point in time + line1 = ('1 25544U 98067A 18135.61844383 .00002728 00000-0 48567-4 0 9998') + line2 = ('2 25544 51.6402 181.0633 0004018 88.8954 22.2246 15.54059185113452') + # use ISS defaults if not provided by user + if TLE1 is not None: + line1 = TLE1 + if TLE2 is not None: + line2 = TLE2 + + # grab date from filename + parts = os.path.split(fnames[0])[-1].split('-') + yr = int(parts[0]) + month = int(parts[1]) + day = int(parts[2][0:2]) + date = pysat.datetime(yr, month, day) + + # create timing at 1 Hz (for 1 day) + times = pds.date_range(start=date, end=date+pds.DateOffset(seconds=86399), + freq='1S') + # reduce requirements if on testing server + # TODO Remove this when testing resources are higher + on_travis = os.environ.get('ONTRAVIS') == 'True' + if on_travis: + times = times[0:100] + + # add position and velocity in ECEF + # add call for GEI/ECEF translation here + # instead, since available, I'll use an orbit predictor from another + # package that outputs in ECEF + # it also supports ground station calculations + + # the observer's (ground station) position on the Earth surface + site = ephem.Observer() + site.lon = str(obs_long) + site.lat = str(obs_lat) + site.elevation = obs_alt + + # The first parameter in readtle() is the satellite name + sat = ephem.readtle('pysat', line1, line2) + output_params = [] + for time in times: + lp = {} + site.date = time + sat.compute(site) + # parameters relative to the ground station + lp['obs_sat_az_angle'] = ephem.degrees(sat.az) + lp['obs_sat_el_angle'] = ephem.degrees(sat.alt) + # total distance away + lp['obs_sat_slant_range'] = sat.range + # satellite location + # sub latitude point + lp['glat'] = np.degrees(sat.sublat) + # sublongitude point + lp['glong'] = np.degrees(sat.sublong) + # elevation of sat in m, stored as km + lp['alt'] = sat.elevation/1000. + # get ECEF position of satellite + lp['x'], lp['y'], lp['z'] = pysatMagVect.geodetic_to_ecef(lp['glat'], + lp['glong'], + lp['alt']) + output_params.append(lp) + output = pds.DataFrame(output_params, index=times) + # modify input object to include calculated parameters + # put data into DataFrame + data = pysat.DataFrame({'glong': output['glong'], + 'glat': output['glat'], + 'alt': output['alt']}, + index=times) + data.index.name = 'Epoch' + + data[['glong', 'glat', 'alt']] = output[['glong', 'glat', 'alt']] + data[['position_ecef_x', 'position_ecef_y', 'position_ecef_z']] = \ + output[['x', 'y', 'z']] + data['obs_sat_az_angle'] = output['obs_sat_az_angle'] + data['obs_sat_el_angle'] = output['obs_sat_el_angle'] + data['obs_sat_slant_range'] = output['obs_sat_slant_range'] + return data, meta.copy() + + +def list_files(tag=None, sat_id=None, data_path=None, format_str=None): + """Produce a fake list of files spanning a year""" + + index = pds.date_range(pysat.datetime(2017, 12, 1), + pysat.datetime(2018, 12, 1)) + # file list is effectively just the date in string format - '%D' works + # only in Mac. '%x' workins in both Windows and Mac + names = [data_path + date.strftime('%Y-%m-%d') + '.nofile' + for date in index] + return pysat.Series(names, index=index) + + +def download(date_array, tag, sat_id, data_path=None, user=None, + password=None): + """ Data is simulated so no download routine is possible. Simple pass + function""" + pass + + +# create metadata corresponding to variables in load routine just above +# made once here rather than regenerate every load call +meta = pysat.Meta() +meta['Epoch'] = {'units': 'Milliseconds since 1970-1-1', + 'Bin_Location': 0.5, + 'notes': 'UTC time at middle of geophysical measurement.', + 'desc': 'UTC seconds', + 'long_name': 'Time index in milliseconds'} +meta['glong'] = {'units': 'degrees', + 'long_name': 'Geodetic longitude', + 'desc': 'WGS84 geodetic longitude'} +meta['glat'] = {'units': 'degrees', + 'long_name': 'Geodetic latitude', + 'desc': 'WGS84 geodetic latitude'} +meta['alt'] = {'units': 'km', + 'long_name': 'Geodetic height', + 'desc': "WGS84 height above Earth's surface"} +meta['position_ecef_x'] = {'units': 'km', + 'desc': 'ECEF x co-ordinate of satellite'} +meta['position_ecef_y'] = {'units': 'km', + 'desc': 'ECEF y co-ordinate of satellite'} +meta['position_ecef_z'] = {'units': 'km', + 'desc': 'ECEF z co-ordinate of satellite'} +meta['obs_sat_az_angle'] = {'units': 'degrees', + 'desc': 'Azimuth of satellite from ground station'} +meta['obs_sat_el_angle'] = {'units': 'degrees', + 'desc': 'Elevation of satellite from ground ' + + 'station'} +meta['obs_sat_slant_range'] = {'units': 'km', + 'desc': 'Distance of satellite from ground ' + + 'station'} diff --git a/pysatMissionPlanning/instruments/pysat_sgp4.py b/pysatMissionPlanning/instruments/pysat_sgp4.py index 9a2b3e65..f0506324 100644 --- a/pysatMissionPlanning/instruments/pysat_sgp4.py +++ b/pysatMissionPlanning/instruments/pysat_sgp4.py @@ -1,9 +1,7 @@ # -*- coding: utf-8 -*- """ Produces satellite orbit data. Orbit is simulated using -Two Line Elements (TLEs) and SGP4. Satellite position is coupled -to several space science models to simulate the atmosphere the -satellite is in. +Two Line Elements (TLEs) and SGP4. """ @@ -11,7 +9,6 @@ from __future__ import absolute_import import os -import numpy as np import pandas as pds import pysat @@ -30,40 +27,7 @@ def init(self): Adds custom calculations to orbit simulation. This routine is run once, and only once, upon instantiation. - Adds quasi-dipole coordiantes, velocity calculation in ECEF coords, - adds the attitude vectors of spacecraft assuming x is ram pointing and - z is generally nadir, adds ionospheric parameters from the Interational - Reference Ionosphere (IRI), as well as simulated winds from the - Horiontal Wind Model (HWM). - """ - import pysatMissionPlanning.methods.aacgmv2 as methaacgm - import pysatMissionPlanning.methods.apexpy as methapex - import pysatMissionPlanning.methods.pyglow as methglow - import pysatMissionPlanning.methods.spacecraft as methsc - - self.custom.add(methapex.add_quasi_dipole_coordinates, 'modify') - self.custom.add(methaacgm.add_aacgm_coordinates, 'modify') - self.custom.add(methsc.calculate_ecef_velocity, 'modify') - self.custom.add(methsc.add_sc_attitude_vectors, 'modify') - # Thermal Ion Parameters - self.custom.add(methglow.add_iri_thermal_plasma, 'modify') - # Thermal Neutral parameters - self.custom.add(methglow.add_msis, 'modify') - self.custom.add(methglow.add_hwm_winds_and_ecef_vectors, 'modify') - # project simulated vectors onto s/c basis - # IGRF - self.custom.add(methglow.add_igrf, 'modify') - # create metadata to be added along with vector projection - in_meta = {'desc': 'IGRF geomagnetic field expressed in the s/c basis.', - 'units': 'nT'} - # project IGRF - self.custom.add(methsc.project_ecef_vector_onto_sc, 'modify', 'end', - 'B_ecef_x', 'B_ecef_y', 'B_ecef_z', 'B_sc_x', 'B_sc_y', - 'B_sc_z', meta=[in_meta.copy(), in_meta.copy(), - in_meta.copy()]) - # project total wind vector - self.custom.add(methglow.project_hwm_onto_sc, 'modify') def load(fnames, tag=None, sat_id=None, obs_long=0., obs_lat=0., obs_alt=0., @@ -106,8 +70,6 @@ def load(fnames, tag=None, sat_id=None, obs_long=0., obs_lat=0., obs_alt=0., # community from sgp4.earth_gravity import wgs72 from sgp4.io import twoline2rv - import ephem - import pysatMagVect # TLEs (Two Line Elements for ISS) # format of TLEs is fixed and available from wikipedia... @@ -161,53 +123,30 @@ def load(fnames, tag=None, sat_id=None, obs_long=0., obs_lat=0., obs_alt=0., index=times) data.index.name = 'Epoch' - # add position and velocity in ECEF - # add call for GEI/ECEF translation here - # instead, since available, I'll use an orbit predictor from another - # package that outputs in ECEF - # it also supports ground station calculations - - # the observer's (ground station) position on the Earth surface - site = ephem.Observer() - site.lon = str(obs_long) - site.lat = str(obs_lat) - site.elevation = obs_alt + # TODO: add call for GEI/ECEF translation here - # The first parameter in readtle() is the satellite name - sat = ephem.readtle('pysat', line1, line2) - output_params = [] - for time in times: - lp = {} - site.date = time - sat.compute(site) - # parameters relative to the ground station - lp['obs_sat_az_angle'] = ephem.degrees(sat.az) - lp['obs_sat_el_angle'] = ephem.degrees(sat.alt) - # total distance away - lp['obs_sat_slant_range'] = sat.range - # satellite location - # sub latitude point - lp['glat'] = np.degrees(sat.sublat) - # sublongitude point - lp['glong'] = np.degrees(sat.sublong) - # elevation of sat in m, stored as km - lp['alt'] = sat.elevation/1000. - # get ECEF position of satellite - lp['x'], lp['y'], lp['z'] = pysatMagVect.geodetic_to_ecef(lp['glat'], - lp['glong'], - lp['alt']) - output_params.append(lp) - output = pds.DataFrame(output_params, index=times) - # modify input object to include calculated parameters - data[['glong', 'glat', 'alt']] = output[['glong', 'glat', 'alt']] - data[['position_ecef_x', 'position_ecef_y', 'position_ecef_z']] = \ - output[['x', 'y', 'z']] - data['obs_sat_az_angle'] = output['obs_sat_az_angle'] - data['obs_sat_el_angle'] = output['obs_sat_el_angle'] - data['obs_sat_slant_range'] = output['obs_sat_slant_range'] return data, meta.copy() +def list_files(tag=None, sat_id=None, data_path=None, format_str=None): + """Produce a fake list of files spanning a year""" + + index = pds.date_range(pysat.datetime(2017, 12, 1), + pysat.datetime(2018, 12, 1)) + # file list is effectively just the date in string format - '%D' works + # only in Mac. '%x' workins in both Windows and Mac + names = [data_path + date.strftime('%Y-%m-%d') + '.nofile' + for date in index] + return pysat.Series(names, index=index) + + +def download(date_array, tag, sat_id, data_path=None, user=None, + password=None): + """ Data is simulated so no download routine is possible. Simple pass + function""" + pass + + # create metadata corresponding to variables in load routine just above # made once here rather than regenerate every load call meta = pysat.Meta() @@ -240,46 +179,3 @@ def load(fnames, tag=None, sat_id=None, obs_long=0., obs_lat=0., obs_alt=0., meta['velocity_eci_z'] = {'units': 'km/s', 'desc': 'Satellite velocity along ECI-z', 'long_name': 'Satellite velocity ECI-z'} - -meta['glong'] = {'units': 'degrees', - 'long_name': 'Geodetic longitude', - 'desc': 'WGS84 geodetic longitude'} -meta['glat'] = {'units': 'degrees', - 'long_name': 'Geodetic latitude', - 'desc': 'WGS84 geodetic latitude'} -meta['alt'] = {'units': 'km', - 'long_name': 'Geodetic height', - 'desc': "WGS84 height above Earth's surface"} -meta['position_ecef_x'] = {'units': 'km', - 'desc': 'ECEF x co-ordinate of satellite'} -meta['position_ecef_y'] = {'units': 'km', - 'desc': 'ECEF y co-ordinate of satellite'} -meta['position_ecef_z'] = {'units': 'km', - 'desc': 'ECEF z co-ordinate of satellite'} -meta['obs_sat_az_angle'] = {'units': 'degrees', - 'desc': 'Azimuth of satellite from ground station'} -meta['obs_sat_el_angle'] = {'units': 'degrees', - 'desc': 'Elevation of satellite from ground ' + - 'station'} -meta['obs_sat_slant_range'] = {'units': 'km', - 'desc': 'Distance of satellite from ground ' + - 'station'} - - -def list_files(tag=None, sat_id=None, data_path=None, format_str=None): - """Produce a fake list of files spanning a year""" - - index = pds.date_range(pysat.datetime(2017, 12, 1), - pysat.datetime(2018, 12, 1)) - # file list is effectively just the date in string format - '%D' works - # only in Mac. '%x' workins in both Windows and Mac - names = [data_path + date.strftime('%Y-%m-%d') + '.nofile' - for date in index] - return pysat.Series(names, index=index) - - -def download(date_array, tag, sat_id, data_path=None, user=None, - password=None): - """ Data is simulated so no download routine is possible. Simple pass - function""" - pass From 4c1fa40cea7be636c78cffe97d9cb20afd5345de Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Tue, 17 Dec 2019 23:57:19 -0500 Subject: [PATCH 051/162] STY: use common methods for simulators --- .../instruments/pysat_ephem.py | 22 +++------------- .../instruments/pysat_sgp4.py | 22 +++------------- pysatMissionPlanning/methods/simulators.py | 25 +++++++++++++++++++ 3 files changed, 33 insertions(+), 36 deletions(-) create mode 100644 pysatMissionPlanning/methods/simulators.py diff --git a/pysatMissionPlanning/instruments/pysat_ephem.py b/pysatMissionPlanning/instruments/pysat_ephem.py index 0fb4fdb9..407aa929 100644 --- a/pysatMissionPlanning/instruments/pysat_ephem.py +++ b/pysatMissionPlanning/instruments/pysat_ephem.py @@ -11,9 +11,11 @@ from __future__ import absolute_import import os +import functools import numpy as np import pandas as pds import pysat +import pysatMissionPlanning.methods.simulators as sim # pysat required parameters platform = 'pysat' @@ -187,24 +189,8 @@ def load(fnames, tag=None, sat_id=None, obs_long=0., obs_lat=0., obs_alt=0., return data, meta.copy() -def list_files(tag=None, sat_id=None, data_path=None, format_str=None): - """Produce a fake list of files spanning a year""" - - index = pds.date_range(pysat.datetime(2017, 12, 1), - pysat.datetime(2018, 12, 1)) - # file list is effectively just the date in string format - '%D' works - # only in Mac. '%x' workins in both Windows and Mac - names = [data_path + date.strftime('%Y-%m-%d') + '.nofile' - for date in index] - return pysat.Series(names, index=index) - - -def download(date_array, tag, sat_id, data_path=None, user=None, - password=None): - """ Data is simulated so no download routine is possible. Simple pass - function""" - pass - +list_files = functools.partial(sim.list_files) +download = functools.partial(sim.download) # create metadata corresponding to variables in load routine just above # made once here rather than regenerate every load call diff --git a/pysatMissionPlanning/instruments/pysat_sgp4.py b/pysatMissionPlanning/instruments/pysat_sgp4.py index f0506324..1ebaa6ea 100644 --- a/pysatMissionPlanning/instruments/pysat_sgp4.py +++ b/pysatMissionPlanning/instruments/pysat_sgp4.py @@ -9,8 +9,10 @@ from __future__ import absolute_import import os +import functools import pandas as pds import pysat +import pysatMissionPlanning.methods.simulators as sim # pysat required parameters platform = 'pysat' @@ -128,24 +130,8 @@ def load(fnames, tag=None, sat_id=None, obs_long=0., obs_lat=0., obs_alt=0., return data, meta.copy() -def list_files(tag=None, sat_id=None, data_path=None, format_str=None): - """Produce a fake list of files spanning a year""" - - index = pds.date_range(pysat.datetime(2017, 12, 1), - pysat.datetime(2018, 12, 1)) - # file list is effectively just the date in string format - '%D' works - # only in Mac. '%x' workins in both Windows and Mac - names = [data_path + date.strftime('%Y-%m-%d') + '.nofile' - for date in index] - return pysat.Series(names, index=index) - - -def download(date_array, tag, sat_id, data_path=None, user=None, - password=None): - """ Data is simulated so no download routine is possible. Simple pass - function""" - pass - +list_files = functools.partial(sim.list_files) +download = functools.partial(sim.download) # create metadata corresponding to variables in load routine just above # made once here rather than regenerate every load call diff --git a/pysatMissionPlanning/methods/simulators.py b/pysatMissionPlanning/methods/simulators.py new file mode 100644 index 00000000..cdf51b87 --- /dev/null +++ b/pysatMissionPlanning/methods/simulators.py @@ -0,0 +1,25 @@ +""" +handles the default pysat functions for simulated instruments +""" + +import pandas as pds +import pysat + + +def list_files(tag=None, sat_id=None, data_path=None, format_str=None): + """Produce a fake list of files spanning a year""" + + index = pds.date_range(pysat.datetime(2017, 12, 1), + pysat.datetime(2018, 12, 1)) + # file list is effectively just the date in string format - '%D' works + # only in Mac. '%x' workins in both Windows and Mac + names = [data_path + date.strftime('%Y-%m-%d') + '.nofile' + for date in index] + return pysat.Series(names, index=index) + + +def download(date_array, tag, sat_id, data_path=None, user=None, + password=None): + """ Data is simulated so no download routine is possible. Simple pass + function""" + pass From ce9f28374324badaa2c7e4fb7711e87603c62e34 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Wed, 18 Dec 2019 00:08:22 -0500 Subject: [PATCH 052/162] STY: cleanup --- .../instruments/pysat_ephem.py | 22 ++++++++----------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/pysatMissionPlanning/instruments/pysat_ephem.py b/pysatMissionPlanning/instruments/pysat_ephem.py index 407aa929..90e1307f 100644 --- a/pysatMissionPlanning/instruments/pysat_ephem.py +++ b/pysatMissionPlanning/instruments/pysat_ephem.py @@ -135,12 +135,6 @@ def load(fnames, tag=None, sat_id=None, obs_long=0., obs_lat=0., obs_alt=0., if on_travis: times = times[0:100] - # add position and velocity in ECEF - # add call for GEI/ECEF translation here - # instead, since available, I'll use an orbit predictor from another - # package that outputs in ECEF - # it also supports ground station calculations - # the observer's (ground station) position on the Earth surface site = ephem.Observer() site.lon = str(obs_long) @@ -171,21 +165,23 @@ def load(fnames, tag=None, sat_id=None, obs_long=0., obs_lat=0., obs_alt=0., lp['glong'], lp['alt']) output_params.append(lp) + output = pds.DataFrame(output_params, index=times) # modify input object to include calculated parameters # put data into DataFrame data = pysat.DataFrame({'glong': output['glong'], 'glat': output['glat'], - 'alt': output['alt']}, + 'alt': output['alt'], + 'position_ecef_x': output['x'], + 'position_ecef_y': output['y'], + 'position_ecef_z': output['z'], + 'obs_sat_az_angle': output['obs_sat_az_angle'], + 'obs_sat_el_angle': output['obs_sat_el_angle'], + 'obs_sat_slant_range': + output['obs_sat_slant_range']}, index=times) data.index.name = 'Epoch' - data[['glong', 'glat', 'alt']] = output[['glong', 'glat', 'alt']] - data[['position_ecef_x', 'position_ecef_y', 'position_ecef_z']] = \ - output[['x', 'y', 'z']] - data['obs_sat_az_angle'] = output['obs_sat_az_angle'] - data['obs_sat_el_angle'] = output['obs_sat_el_angle'] - data['obs_sat_slant_range'] = output['obs_sat_slant_range'] return data, meta.copy() From 5b1acf150e0496630a4f657a4331ebf68578df79 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Wed, 18 Dec 2019 00:13:40 -0500 Subject: [PATCH 053/162] STY: removed user and password options for downlaod --- pysatMissionPlanning/methods/simulators.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pysatMissionPlanning/methods/simulators.py b/pysatMissionPlanning/methods/simulators.py index cdf51b87..aa982025 100644 --- a/pysatMissionPlanning/methods/simulators.py +++ b/pysatMissionPlanning/methods/simulators.py @@ -18,8 +18,7 @@ def list_files(tag=None, sat_id=None, data_path=None, format_str=None): return pysat.Series(names, index=index) -def download(date_array, tag, sat_id, data_path=None, user=None, - password=None): +def download(date_array, tag, sat_id, data_path=None): """ Data is simulated so no download routine is possible. Simple pass function""" pass From bc32fe9914231c2fe3f8999a25cd4daba2e8c02e Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Wed, 18 Dec 2019 00:22:01 -0500 Subject: [PATCH 054/162] BUG: import pysat_ephem --- pysatMissionPlanning/instruments/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pysatMissionPlanning/instruments/__init__.py b/pysatMissionPlanning/instruments/__init__.py index 157435c1..a3b9f5b2 100644 --- a/pysatMissionPlanning/instruments/__init__.py +++ b/pysatMissionPlanning/instruments/__init__.py @@ -3,6 +3,6 @@ the instrument modules to be used with pysat """ -from pysatMissionPlanning.instruments import pysat_sgp4 +from pysatMissionPlanning.instruments import pysat_ephem, pysat_sgp4 -__all__ = ['pysat_sgp4'] +__all__ = ['pysat_ephem', 'pysat_sgp4'] From 15054a18428d34ed6df9b024c20d46a73bcef89f Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Wed, 18 Dec 2019 00:35:09 -0500 Subject: [PATCH 055/162] BUG: wrong method file in pyglow --- pysatMissionPlanning/methods/pyglow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pysatMissionPlanning/methods/pyglow.py b/pysatMissionPlanning/methods/pyglow.py index 7a53d27c..a4a5991c 100644 --- a/pysatMissionPlanning/methods/pyglow.py +++ b/pysatMissionPlanning/methods/pyglow.py @@ -387,7 +387,7 @@ def get_ecef_wind_meta(coord='x', geo='mer'): def project_hwm_onto_sc(inst): - import pysatMissionPlanning.methods.attitude as methatt + import pysatMissionPlanning.methods.spacecraft as methatt def get_wind_comp(inst, direction='x'): unit_zon = 'unit_zonal_wind_ecef_' + direction From c358ad0bc47270cc737d1088fc64721e30af14e0 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Wed, 18 Dec 2019 01:01:30 -0500 Subject: [PATCH 056/162] TST: simple ecef velocity test --- .../tests/test_methods_spacecraft.py | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 pysatMissionPlanning/tests/test_methods_spacecraft.py diff --git a/pysatMissionPlanning/tests/test_methods_spacecraft.py b/pysatMissionPlanning/tests/test_methods_spacecraft.py new file mode 100644 index 00000000..210cb5ba --- /dev/null +++ b/pysatMissionPlanning/tests/test_methods_spacecraft.py @@ -0,0 +1,46 @@ +# -*- coding: utf-8 -*- +# Test some of the spacecraft method functions + +import numpy as np +import pysat +from pysatMissionPlanning.methods import spacecraft as methsc + + +def add_eci(inst): + """Add ECI position to pysat_testing instrument""" + + inst['position_ecef_x'] = [-6197.135721, -6197.066687, -6196.990263, + -6196.906991, -6196.816336, -6196.718347, + -6196.613474, -6196.501303, -6196.382257] + inst['position_ecef_y'] = [-2169.334337, -2174.014920, -2178.693373, + -2183.368212, -2188.040895, -2192.711426, + -2197.378290, -2202.042988, -2206.703992] + inst['position_ecef_z'] = [1716.528241, 1710.870004, 1705.209738, + 1699.547245, 1693.882731, 1688.216005, + 1682.547257, 1676.876312, 1671.203352] + + +class TestBasics(): + def setup(self): + """Runs before every method to create a clean testing setup.""" + self.testInst = pysat.Instrument(platform='pysat', name='testing', + sat_id='9', clean_level='clean') + self.testInst.custom.add(add_eci, 'modify') + + def teardown(self): + """Clean up test environment after tests""" + del self + + def test_calculate_ecef_velocity(self): + self.testInst.custom.add(methsc.calculate_ecef_velocity, 'modify') + self.testInst.load(date=pysat.datetime(2009, 1, 1)) + targets = ['velocity_ecef_x', 'velocity_ecef_y', 'velocity_ecef_z'] + for target in targets: + # Check if data is added + assert target in self.testInst.data.keys() + assert not np.isnan(self.testInst[target][1:-1]).any() + # Endpoints hsould be NaN + assert np.isnan(self.testInst[target][0]) + assert np.isnan(self.testInst[target][-1]) + # Check if metadata is added + assert target in self.testInst.meta.data.index From 36a1fdac5d5daa876aeca31b2c53d912a5f1b305 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Wed, 18 Dec 2019 01:05:59 -0500 Subject: [PATCH 057/162] TST: add simple unit vector test --- .../tests/test_methods_spacecraft.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/pysatMissionPlanning/tests/test_methods_spacecraft.py b/pysatMissionPlanning/tests/test_methods_spacecraft.py index 210cb5ba..4bdc15c9 100644 --- a/pysatMissionPlanning/tests/test_methods_spacecraft.py +++ b/pysatMissionPlanning/tests/test_methods_spacecraft.py @@ -32,6 +32,7 @@ def teardown(self): del self def test_calculate_ecef_velocity(self): + # TODO: check if calculations are correct self.testInst.custom.add(methsc.calculate_ecef_velocity, 'modify') self.testInst.load(date=pysat.datetime(2009, 1, 1)) targets = ['velocity_ecef_x', 'velocity_ecef_y', 'velocity_ecef_z'] @@ -44,3 +45,21 @@ def test_calculate_ecef_velocity(self): assert np.isnan(self.testInst[target][-1]) # Check if metadata is added assert target in self.testInst.meta.data.index + + def test_add_sc_attitude_vectors(self): + # TODO: check if calculations are correct + self.testInst.custom.add(methsc.calculate_ecef_velocity, 'modify') + self.testInst.custom.add(methsc.add_sc_attitude_vectors, 'modify') + self.testInst.load(date=pysat.datetime(2009, 1, 1)) + targets = ['sc_xhat_ecef_x', 'sc_xhat_ecef_y', 'sc_xhat_ecef_z', + 'sc_yhat_ecef_x', 'sc_yhat_ecef_y', 'sc_yhat_ecef_z', + 'sc_zhat_ecef_x', 'sc_zhat_ecef_y', 'sc_zhat_ecef_z'] + for target in targets: + # Check if data is added + assert target in self.testInst.data.keys() + assert not np.isnan(self.testInst[target][1:-1]).any() + # Endpoints hsould be NaN + assert np.isnan(self.testInst[target][0]) + assert np.isnan(self.testInst[target][-1]) + # Check if metadata is added + assert target in self.testInst.meta.data.index From fa411646e0bf99ddb8cca1e465d2e1520f4c2655 Mon Sep 17 00:00:00 2001 From: jklenzing Date: Wed, 18 Dec 2019 11:26:23 -0500 Subject: [PATCH 058/162] DOC: fix formatting in cotributing --- CONTRIBUTING.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 07b0153c..da479998 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -5,13 +5,13 @@ Bug reports, feature suggestions and other contributions are greatly appreciated! pysatMissionPlanning is a community-driven project and welcomes both feedback and contributions. Short version -============= +------------- * Submit bug reports and feature requests at `GitHub `_ * Make pull requests to the ``develop`` branch Bug reports -=========== +----------- When `reporting a bug `_ please include: @@ -21,7 +21,7 @@ include: * Detailed steps to reproduce the bug Feature requests and feedback -============================= +----------------------------- The best way to send feedback is to file an issue at `GitHub `_. From 5a45765448cbcb4b1095ac1ab5890c06c49b60e3 Mon Sep 17 00:00:00 2001 From: jklenzing Date: Wed, 18 Dec 2019 12:22:05 -0500 Subject: [PATCH 059/162] DOC: fix formatting in cotributing --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index da479998..07fce099 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -34,7 +34,7 @@ If you are proposing a feature: are welcome :) Development -=========== +----------- To set up `pysatMissionPlanning` for local development: From d60724747fe3a264f39f9a74c95ac98b7e591258 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Wed, 18 Dec 2019 19:12:39 -0500 Subject: [PATCH 060/162] TST: add test for project_ecef_vector_onto_sc --- .../tests/test_methods_spacecraft.py | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/pysatMissionPlanning/tests/test_methods_spacecraft.py b/pysatMissionPlanning/tests/test_methods_spacecraft.py index 4bdc15c9..c9be1281 100644 --- a/pysatMissionPlanning/tests/test_methods_spacecraft.py +++ b/pysatMissionPlanning/tests/test_methods_spacecraft.py @@ -20,6 +20,12 @@ def add_eci(inst): 1682.547257, 1676.876312, 1671.203352] +def add_fake_data(inst): + inst['ax'] = np.ones(9) + inst['ay'] = np.zeros(9) + inst['az'] = np.zeros(9) + + class TestBasics(): def setup(self): """Runs before every method to create a clean testing setup.""" @@ -63,3 +69,22 @@ def test_add_sc_attitude_vectors(self): assert np.isnan(self.testInst[target][-1]) # Check if metadata is added assert target in self.testInst.meta.data.index + + def test_project_ecef_vector_onto_sc(self): + # TODO: check if calculations are correct + self.testInst.custom.add(methsc.calculate_ecef_velocity, 'modify') + self.testInst.custom.add(methsc.add_sc_attitude_vectors, 'modify') + self.testInst.custom.add(add_fake_data, 'modify') + self.testInst.custom.add(methsc.project_ecef_vector_onto_sc, 'modify', + 'end', 'ax', 'ay', 'az', 'bx', 'by', 'bz') + self.testInst.load(date=pysat.datetime(2009, 1, 1)) + targets = ['bx', 'by', 'bz'] + for target in targets: + # Check if data is added + assert target in self.testInst.data.keys() + assert not np.isnan(self.testInst[target][1:-1]).any() + # Endpoints hsould be NaN + assert np.isnan(self.testInst[target][0]) + assert np.isnan(self.testInst[target][-1]) + # Check if metadata is added + assert target in self.testInst.meta.data.index From a87a706b1e16490ceda9668f811bda95e5df98d9 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Wed, 18 Dec 2019 19:31:39 -0500 Subject: [PATCH 061/162] TST: add basic tests of instruments --- .../tests/test_instruments.py | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 pysatMissionPlanning/tests/test_instruments.py diff --git a/pysatMissionPlanning/tests/test_instruments.py b/pysatMissionPlanning/tests/test_instruments.py new file mode 100644 index 00000000..62d15111 --- /dev/null +++ b/pysatMissionPlanning/tests/test_instruments.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +""" +Basic test of the instrument objects in pysatMissionPlanning + +To be replaced once pysat testing techniques are finalized +""" + +import numpy as np +import pysat + + +class TestSGP4(): + def setup(self): + """Runs before every method to create a clean testing setup.""" + from pysatMissionPlanning.instruments import pysat_sgp4 + self.testInst = pysat.Instrument(inst_module=pysat_sgp4) + self.targets = ['position_eci_x', 'position_eci_y', 'position_eci_z', + 'velocity_eci_x', 'velocity_eci_y', 'velocity_eci_z'] + + def teardown(self): + """Clean up test environment after tests""" + del self + + def test_basic_instrument_load(self): + """Checks if instrument loads proper data and metadata""" + self.testInst.load(date=pysat.datetime(2018, 1, 1)) + for target in self.targets: + # Check if data is added + assert target in self.testInst.data.keys() + assert not np.isnan(self.testInst[target]).any() + # Check if metadata is added + assert target in self.testInst.meta.data.index + + +class TestEphem(TestSGP4): + def setup(self): + """Runs before every method to create a clean testing setup.""" + from pysatMissionPlanning.instruments import pysat_ephem + self.testInst = pysat.Instrument(inst_module=pysat_ephem) + self.targets = ['glong', 'glat', 'alt', 'obs_sat_slant_range', + 'obs_sat_az_angle', 'obs_sat_el_angle', + 'position_ecef_x', 'position_ecef_y', 'position_ecef_z', + 'aacgm_lat', 'aacgm_long', 'aacgm_mlt', + 'qd_lat', 'qd_long', 'mlt', + 'e_temp', 'frac_dens_h', 'frac_dens_he', 'frac_dens_o', + 'ion_dens', 'ion_temp', + 'B', 'B_east', 'B_north', 'B_up', 'B_ecef_x', + 'B_ecef_y', 'B_ecef_z', + 'Nn', 'Nn_N', 'Nn_N2', 'Nn_O', 'Nn_O2', 'Tn_msis', + 'total_wind_x', 'total_wind_y', 'total_wind_z', + 'sim_wind_sc_x', 'sim_wind_sc_y', 'sim_wind_sc_z'] + + def teardown(self): + """Clean up test environment after tests""" + del self From 9f92fea0d302ea22f9f835f0e03d141ba92b1ff1 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Wed, 18 Dec 2019 19:31:57 -0500 Subject: [PATCH 062/162] DOC: fix comments in tests --- pysatMissionPlanning/tests/test_methods_aacgmv2.py | 2 +- pysatMissionPlanning/tests/test_methods_apexpy.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pysatMissionPlanning/tests/test_methods_aacgmv2.py b/pysatMissionPlanning/tests/test_methods_aacgmv2.py index 723c9ea0..ba4a99d3 100644 --- a/pysatMissionPlanning/tests/test_methods_aacgmv2.py +++ b/pysatMissionPlanning/tests/test_methods_aacgmv2.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Test some of the pyglow method functions +# Test some of the aacgmv2 method functions import numpy as np import pysat diff --git a/pysatMissionPlanning/tests/test_methods_apexpy.py b/pysatMissionPlanning/tests/test_methods_apexpy.py index 4e346c30..0ce714f4 100644 --- a/pysatMissionPlanning/tests/test_methods_apexpy.py +++ b/pysatMissionPlanning/tests/test_methods_apexpy.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Test some of the pyglow method functions +# Test some of the apexpy method functions import numpy as np import pysat From 017378ab9c6738a2e18600f7bd580e11b86d4610 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Wed, 18 Dec 2019 20:37:10 -0500 Subject: [PATCH 063/162] TST: update tests for instruments --- .../tests/test_instruments.py | 47 +++++++++++++------ 1 file changed, 32 insertions(+), 15 deletions(-) diff --git a/pysatMissionPlanning/tests/test_instruments.py b/pysatMissionPlanning/tests/test_instruments.py index 62d15111..c9026fa9 100644 --- a/pysatMissionPlanning/tests/test_instruments.py +++ b/pysatMissionPlanning/tests/test_instruments.py @@ -14,8 +14,9 @@ def setup(self): """Runs before every method to create a clean testing setup.""" from pysatMissionPlanning.instruments import pysat_sgp4 self.testInst = pysat.Instrument(inst_module=pysat_sgp4) - self.targets = ['position_eci_x', 'position_eci_y', 'position_eci_z', - 'velocity_eci_x', 'velocity_eci_y', 'velocity_eci_z'] + self.targets1 = ['position_eci_x', 'position_eci_y', 'position_eci_z', + 'velocity_eci_x', 'velocity_eci_y', 'velocity_eci_z'] + self.targets2 = [] def teardown(self): """Clean up test environment after tests""" @@ -24,31 +25,47 @@ def teardown(self): def test_basic_instrument_load(self): """Checks if instrument loads proper data and metadata""" self.testInst.load(date=pysat.datetime(2018, 1, 1)) - for target in self.targets: + # Check for completeness of first set of targets + for target in self.targets1: # Check if data is added assert target in self.testInst.data.keys() assert not np.isnan(self.testInst[target]).any() # Check if metadata is added assert target in self.testInst.meta.data.index + # Check for completeness of second set of targets + for target in self.targets2: + # Check if data is added + assert target in self.testInst.data.keys() + # First and last values are NaN if related to velocity + assert not np.isnan(self.testInst[target][1:-1]).any() + assert np.isnan(self.testInst[target][0]) + assert np.isnan(self.testInst[target][-1]) + # Check if metadata is added + assert target in self.testInst.meta.data.index class TestEphem(TestSGP4): def setup(self): """Runs before every method to create a clean testing setup.""" + # NOTE: aacgm not checked here because undefined near the equator + # TODO: add check for aacgm values from pysatMissionPlanning.instruments import pysat_ephem self.testInst = pysat.Instrument(inst_module=pysat_ephem) - self.targets = ['glong', 'glat', 'alt', 'obs_sat_slant_range', - 'obs_sat_az_angle', 'obs_sat_el_angle', - 'position_ecef_x', 'position_ecef_y', 'position_ecef_z', - 'aacgm_lat', 'aacgm_long', 'aacgm_mlt', - 'qd_lat', 'qd_long', 'mlt', - 'e_temp', 'frac_dens_h', 'frac_dens_he', 'frac_dens_o', - 'ion_dens', 'ion_temp', - 'B', 'B_east', 'B_north', 'B_up', 'B_ecef_x', - 'B_ecef_y', 'B_ecef_z', - 'Nn', 'Nn_N', 'Nn_N2', 'Nn_O', 'Nn_O2', 'Tn_msis', - 'total_wind_x', 'total_wind_y', 'total_wind_z', - 'sim_wind_sc_x', 'sim_wind_sc_y', 'sim_wind_sc_z'] + self.targets1 = ['glong', 'glat', 'alt', 'obs_sat_slant_range', + 'obs_sat_az_angle', 'obs_sat_el_angle', + 'position_ecef_x', 'position_ecef_y', 'position_ecef_z', + 'qd_lat', 'qd_long', 'mlt', + 'e_temp', 'frac_dens_h', 'frac_dens_he', 'frac_dens_o', + 'ion_dens', 'ion_temp', + 'B', 'B_east', 'B_north', 'B_up', 'B_ecef_x', + 'B_ecef_y', 'B_ecef_z', + 'Nn', 'Nn_N', 'Nn_N2', 'Nn_O', 'Nn_O2', 'Tn_msis', + 'total_wind_x', 'total_wind_y', 'total_wind_z'] + self.targets2 = ['velocity_ecef_x', 'velocity_ecef_y', 'velocity_ecef_z', + 'sc_xhat_ecef_x', 'sc_xhat_ecef_y', 'sc_xhat_ecef_z', + 'sc_yhat_ecef_x', 'sc_yhat_ecef_y', 'sc_yhat_ecef_z', + 'sc_zhat_ecef_x', 'sc_zhat_ecef_y', 'sc_zhat_ecef_z', + 'sim_wind_sc_x', 'sim_wind_sc_y', 'sim_wind_sc_z'] def teardown(self): """Clean up test environment after tests""" From b3caec7a406cd9931d8e3fc0c8cf3568564345fa Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Wed, 18 Dec 2019 20:49:15 -0500 Subject: [PATCH 064/162] DOC: typo in comments --- pysatMissionPlanning/tests/test_methods_spacecraft.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pysatMissionPlanning/tests/test_methods_spacecraft.py b/pysatMissionPlanning/tests/test_methods_spacecraft.py index c9be1281..7b6e2a09 100644 --- a/pysatMissionPlanning/tests/test_methods_spacecraft.py +++ b/pysatMissionPlanning/tests/test_methods_spacecraft.py @@ -46,7 +46,7 @@ def test_calculate_ecef_velocity(self): # Check if data is added assert target in self.testInst.data.keys() assert not np.isnan(self.testInst[target][1:-1]).any() - # Endpoints hsould be NaN + # Endpoints should be NaN assert np.isnan(self.testInst[target][0]) assert np.isnan(self.testInst[target][-1]) # Check if metadata is added @@ -64,7 +64,7 @@ def test_add_sc_attitude_vectors(self): # Check if data is added assert target in self.testInst.data.keys() assert not np.isnan(self.testInst[target][1:-1]).any() - # Endpoints hsould be NaN + # Endpoints should be NaN assert np.isnan(self.testInst[target][0]) assert np.isnan(self.testInst[target][-1]) # Check if metadata is added @@ -83,7 +83,7 @@ def test_project_ecef_vector_onto_sc(self): # Check if data is added assert target in self.testInst.data.keys() assert not np.isnan(self.testInst[target][1:-1]).any() - # Endpoints hsould be NaN + # Endpoints should be NaN assert np.isnan(self.testInst[target][0]) assert np.isnan(self.testInst[target][-1]) # Check if metadata is added From 7d23232d750731cf2298e8c5a73d66b402310f0e Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Wed, 18 Dec 2019 21:17:56 -0500 Subject: [PATCH 065/162] DOC: updates to docs --- docs/index.rst | 1 + docs/introduction.rst | 3 ++- docs/tutorial.rst | 43 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 docs/tutorial.rst diff --git a/docs/index.rst b/docs/index.rst index 91399cb7..33e7a030 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -8,5 +8,6 @@ Welcome to pysatMissionPlanning's documentation! introduction.rst installation.rst + tutorial.rst contributing.rst citing.rst diff --git a/docs/introduction.rst b/docs/introduction.rst index a904652d..e3571723 100644 --- a/docs/introduction.rst +++ b/docs/introduction.rst @@ -2,12 +2,13 @@ Introduction ============ -pysatMissionPlanning allows users to run build simulated satellites for TLE info and add empirical data. It includes the pysat_sgp4 instrument module which can be imported into pysat. +pysatMissionPlanning allows users to run build simulated satellites for TLE info and add empirical data. It includes the pysat_sgp4 and pysat_ephem instrument modules which can be imported into pysat. Main Features ------------- - Simulate satellite orbits from TLEs and add data from empirical models - Import ionosphere and thermosphere values through pyglow - Import coordinates through apexpy +- Import coordinates through aacgmv2 This document covers installation, a tutorial on pysatMissionPlanning including demonstration code, and an API reference. diff --git a/docs/tutorial.rst b/docs/tutorial.rst new file mode 100644 index 00000000..767c39e3 --- /dev/null +++ b/docs/tutorial.rst @@ -0,0 +1,43 @@ + +Tutorial +======== + +**Set up sgp4 with pysat** + +---- +The sgp4 instrument within pysatMissionPlanning is designed to be run like any pysat instrument. To access, use + +.. code:: python + + import pysat + from pysatMissionPlanning.instruments import pysat_sgp4 + + sgp4 = pysat.Instrument(inst_module=pysat_sgp4) + +For pysat 3.0.0 or greater, this can be permanently added via the instrument registry. + +.. code:: python + + import pysat + import pysatMissionPlanning + pysat.utils.registry.register('pysatMissionPlanning.instruments.pysat_sgp4') + +**Orbital Propagators*** + +--- +Currently, two orbital propagators are included with pysatMissionPlanning. The pysat_sgp4 instrument uses the wgs72 gravity model to provide satellite position and velocity in ECI co-ordinates. The pysat_ephem instrument uses the ephem pysat package to calculate an orbit in lat/lon/alt and ECEF co-ordinates. As an example, it also loads a series of empirical models to provide simulated ionospheric, thermospheric, and magnetic data as an aid for mission planning. + +**Empirical Models** + +--- +A number of methods are included to invoke several python wrappers for empirical models. This includes the aacgmv2, apexpy, and pyglow models. These methods can be added to any pysat instrument in order to compare. These can be added using the `custom` functions in pysat. + +.. code:: python + + import pysat + from pysatMissionPlanning.methods import pyglow as methglow + + ivm = pysat.Instrument(platform='cnofs', name='ivm') + ivm.custom.add(methglow.add_iri_thermal_plasma, 'modify', 'end', 'glat', 'glon', 'altitude') + +Note that in this case, the latitude, longitude, and altitude variable names of the instrument must be specified since they are not identical to the default names in the function. From 6130398d0660b16e4854024ccede8e42f57ae045 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Wed, 18 Dec 2019 21:18:13 -0500 Subject: [PATCH 066/162] DOC: updates to instrument docstrings --- pysatMissionPlanning/instruments/pysat_ephem.py | 2 +- pysatMissionPlanning/instruments/pysat_sgp4.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pysatMissionPlanning/instruments/pysat_ephem.py b/pysatMissionPlanning/instruments/pysat_ephem.py index 90e1307f..2a191cc4 100644 --- a/pysatMissionPlanning/instruments/pysat_ephem.py +++ b/pysatMissionPlanning/instruments/pysat_ephem.py @@ -72,7 +72,7 @@ def load(fnames, tag=None, sat_id=None, obs_long=0., obs_lat=0., obs_alt=0., TLE1=None, TLE2=None): """ Returns data and metadata in the format required by pysat. Finds position - of satellite in both ECI and ECEF co-ordinates. + of satellite in both geographic and ECEF co-ordinates. Routine is directly called by pysat and not the user. diff --git a/pysatMissionPlanning/instruments/pysat_sgp4.py b/pysatMissionPlanning/instruments/pysat_sgp4.py index 1ebaa6ea..d791b0e5 100644 --- a/pysatMissionPlanning/instruments/pysat_sgp4.py +++ b/pysatMissionPlanning/instruments/pysat_sgp4.py @@ -36,7 +36,7 @@ def load(fnames, tag=None, sat_id=None, obs_long=0., obs_lat=0., obs_alt=0., TLE1=None, TLE2=None): """ Returns data and metadata in the format required by pysat. Finds position - of satellite in both ECI and ECEF co-ordinates. + of satellite in ECI co-ordinates. Routine is directly called by pysat and not the user. From e16d97778b495bd1e002ba2d5ca8b2623ff7cc56 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Wed, 18 Dec 2019 21:20:26 -0500 Subject: [PATCH 067/162] DOC: Update changleog --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8cb65f2a..0a4d7eb5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,11 +2,12 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). -## [0.2.0] - 2019-10-26 +## [0.2.0] - 2019-12-18 - Added method files to access aacgmv2, apexpy, pyglow for any pysat instrument - Added method for spacecraft to handle attitude and coordinates - Added method for plotting simulated data - Added support for readthedocs +- Split pysat_sgp4 into pysat_sgp4 and pysat_ephem to allow different propagators - Bugs - Fixed wrong metadata name for mlt in apexpy From 98c10b3aba7efdec10ed81af574fe4352d9b503f Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Wed, 18 Dec 2019 21:31:26 -0500 Subject: [PATCH 068/162] DOC: typo in tutorial --- docs/tutorial.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tutorial.rst b/docs/tutorial.rst index 767c39e3..aed4b0d9 100644 --- a/docs/tutorial.rst +++ b/docs/tutorial.rst @@ -22,7 +22,7 @@ For pysat 3.0.0 or greater, this can be permanently added via the instrument reg import pysatMissionPlanning pysat.utils.registry.register('pysatMissionPlanning.instruments.pysat_sgp4') -**Orbital Propagators*** +**Orbital Propagators** --- Currently, two orbital propagators are included with pysatMissionPlanning. The pysat_sgp4 instrument uses the wgs72 gravity model to provide satellite position and velocity in ECI co-ordinates. The pysat_ephem instrument uses the ephem pysat package to calculate an orbit in lat/lon/alt and ECEF co-ordinates. As an example, it also loads a series of empirical models to provide simulated ionospheric, thermospheric, and magnetic data as an aid for mission planning. From 5f61baeb60384834716c46b4f9cd516962e310c3 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Wed, 18 Dec 2019 21:31:38 -0500 Subject: [PATCH 069/162] BUG: need to import all methods --- pysatMissionPlanning/methods/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pysatMissionPlanning/methods/__init__.py b/pysatMissionPlanning/methods/__init__.py index 7a552df7..d7eac7df 100644 --- a/pysatMissionPlanning/methods/__init__.py +++ b/pysatMissionPlanning/methods/__init__.py @@ -7,6 +7,7 @@ from pysatMissionPlanning.methods import apexpy from pysatMissionPlanning.methods import plot from pysatMissionPlanning.methods import pyglow +from pysatMissionPlanning.methods import simulators from pysatMissionPlanning.methods import spacecraft -__all__ = ['aacgmv2', 'apexpy', 'plot', 'pyglow', 'spacecraft'] +__all__ = ['aacgmv2', 'apexpy', 'plot', 'pyglow', 'simulators', 'spacecraft'] From 66f71eba4506829576c70dd31c6859697da48934 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Wed, 18 Dec 2019 21:38:37 -0500 Subject: [PATCH 070/162] DOC: remove duplicate doc text --- docs/installation.rst | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/docs/installation.rst b/docs/installation.rst index 188a3b44..37101b3e 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -20,22 +20,3 @@ PysatMissionPLanning itself may be installed from a terminal command line via:: pip install pysatMissionPlanning Note that pysatMissionPlanning requires pysat to interact with the instruments and models here. [Full Documentation for main package](http://pysat.readthedocs.io/en/latest/) - -**Set up sgp4 with pysat** - ----- -The sgp4 instrument within pysatMissionPlanning is designed to be run like any pysat instrument. To access, use - -.. code:: python - - import pysat - from pysatMissionPlanning.instruments import pysat_sgp4 - - sgp4 = pysat.Instrument(inst_module=pysat_sgp4) - -For pysat 3.0.0 or greater, invoking this the first time will permanently add this instrument to the user's library, and it can be accessed in the future simply by calling it like any pysat instrument without having to load the pysatMissionPlanning library separately. - -.. code:: python - - import pysat - sgp4 = pysat.Instrument(platform='pysat', name='sgp4') From 6c3cfb4bedc7dce31765d3482c11e7c6ba48805b Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Thu, 26 Dec 2019 22:41:51 -0500 Subject: [PATCH 071/162] ENH: Add missing MSIS species --- pysatMissionPlanning/methods/pyglow.py | 12 ++++++++++++ pysatMissionPlanning/tests/test_instruments.py | 3 ++- pysatMissionPlanning/tests/test_methods_pyglow.py | 3 ++- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/pysatMissionPlanning/methods/pyglow.py b/pysatMissionPlanning/methods/pyglow.py index a4a5991c..4c73429d 100644 --- a/pysatMissionPlanning/methods/pyglow.py +++ b/pysatMissionPlanning/methods/pyglow.py @@ -232,10 +232,13 @@ def add_msis(inst, glat_label='glat', glong_label='glong', alt_label='alt'): for key in pt.nn.keys(): total += pt.nn[key] msis['Nn'] = total + msis['Nn_H'] = pt.nn['H'] + msis['Nn_He'] = pt.nn['HE'] msis['Nn_N'] = pt.nn['N'] msis['Nn_N2'] = pt.nn['N2'] msis['Nn_O'] = pt.nn['O'] msis['Nn_O2'] = pt.nn['O2'] + msis['Nn_Ar'] = pt.nn['AR'] msis['Tn_msis'] = pt.Tn_msis msis_params.append(msis) msis = pds.DataFrame(msis_params) @@ -246,6 +249,12 @@ def add_msis(inst, glat_label='glat', glong_label='glong', alt_label='alt'): inst.meta['Nn'] = {'units': 'cm^-3', 'desc': 'Total neutral number particle density ' + 'from MSIS.'} + inst.meta['Nn_H'] = {'units': 'cm^-3', + 'desc': 'Total hydrogen number particle density ' + + 'from MSIS.'} + inst.meta['Nn_He'] = {'units': 'cm^-3', + 'desc': 'Total helium number particle density ' + + 'from MSIS.'} inst.meta['Nn_N'] = {'units': 'cm^-3', 'desc': 'Total nitrogen number particle density ' + 'from MSIS.'} @@ -258,6 +267,9 @@ def add_msis(inst, glat_label='glat', glong_label='glong', alt_label='alt'): inst.meta['Nn_O2'] = {'units': 'cm^-3', 'desc': 'Total O2 number particle density ' + 'from MSIS.'} + inst.meta['Nn_Ar'] = {'units': 'cm^-3', + 'desc': 'Total argon number particle density ' + + 'from MSIS.'} inst.meta['Tn_msis'] = {'units': 'K', 'desc': 'Neutral temperature from MSIS.'} diff --git a/pysatMissionPlanning/tests/test_instruments.py b/pysatMissionPlanning/tests/test_instruments.py index c9026fa9..cded10f6 100644 --- a/pysatMissionPlanning/tests/test_instruments.py +++ b/pysatMissionPlanning/tests/test_instruments.py @@ -59,7 +59,8 @@ def setup(self): 'ion_dens', 'ion_temp', 'B', 'B_east', 'B_north', 'B_up', 'B_ecef_x', 'B_ecef_y', 'B_ecef_z', - 'Nn', 'Nn_N', 'Nn_N2', 'Nn_O', 'Nn_O2', 'Tn_msis', + 'Nn', 'Nn_H', 'Nn_He', 'Nn_N', 'Nn_N2', 'Nn_O', 'Nn_O2', + 'Nn_Ar', 'Tn_msis', 'total_wind_x', 'total_wind_y', 'total_wind_z'] self.targets2 = ['velocity_ecef_x', 'velocity_ecef_y', 'velocity_ecef_z', 'sc_xhat_ecef_x', 'sc_xhat_ecef_y', 'sc_xhat_ecef_z', diff --git a/pysatMissionPlanning/tests/test_methods_pyglow.py b/pysatMissionPlanning/tests/test_methods_pyglow.py index db105755..3e4f15f6 100644 --- a/pysatMissionPlanning/tests/test_methods_pyglow.py +++ b/pysatMissionPlanning/tests/test_methods_pyglow.py @@ -62,7 +62,8 @@ def test_add_msis(self): glong_label='longitude', alt_label='altitude') self.testInst.load(date=pysat.datetime(2009, 1, 1)) - targets = ['Nn', 'Nn_N', 'Nn_N2', 'Nn_O', 'Nn_O2', 'Tn_msis'] + targets = ['Nn', 'Nn_H', 'Nn_He', 'Nn_N', 'Nn_N2', 'Nn_O', 'Nn_O2', + 'Nn_Ar', 'Tn_msis'] for target in targets: # Check if data is added assert target in self.testInst.data.keys() From febeb1db2c5082fcd30b8d69102569c1111c7b7f Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Tue, 31 Dec 2019 18:55:22 -0500 Subject: [PATCH 072/162] TST: clean up pysat install on travis --- .travis.yml | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/.travis.yml b/.travis.yml index 971f4c67..ee8d7e0b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,18 +22,10 @@ before_install: - pip install xarray - pip install matplotlib - pip install apexpy - - # Prepare modified pysat install - pip install numpy - - cd .. - - echo 'cloning pysat' - - git clone https://github.com/pysat/pysat.git >/dev/null - - echo 'installing pysat' - - cd ./pysat + - pip install 'pysat>=2.1.0' # set up data directory - mkdir /home/travis/build/pysatData - # install pysat - - python setup.py install >/dev/null # install pyglow, space science models - cd .. From c553c1ead80d96109d10b2fef270e41ed1e8b304 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Tue, 31 Dec 2019 19:03:37 -0500 Subject: [PATCH 073/162] DOC: update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3001b474..1c57af03 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). ## [0.2.0] - 2019-10-26 - Added support for readthedocs +- Updates to testing environment ## [0.1.1] - 2019-10-22 - pypi compatibility From 96fb47f60b8026014dae4d3fa2e5d2e25482b59c Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Tue, 31 Dec 2019 19:08:11 -0500 Subject: [PATCH 074/162] STY: readability --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index ee8d7e0b..7955d12f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,6 +23,7 @@ before_install: - pip install matplotlib - pip install apexpy - pip install numpy + - pip install 'pysat>=2.1.0' # set up data directory - mkdir /home/travis/build/pysatData From dd0925ea39535552e95b5e8c3501ce358478d141 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Tue, 31 Dec 2019 19:28:17 -0500 Subject: [PATCH 075/162] TST: add testing for python 3.8 --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 7955d12f..7b8c12bb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,9 +3,9 @@ dist: xenial matrix: include: - python: 2.7 - - python: 3.5 - python: 3.6 - python: 3.7 + - python: 3.8 services: xvfb addons: From 295b526cfce4228c72f00653e3f5ca0268bc5042 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Thu, 2 Jan 2020 16:48:57 -0500 Subject: [PATCH 076/162] DOC: update readme --- README.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 9f7d7912..7871d60a 100644 --- a/README.md +++ b/README.md @@ -11,13 +11,14 @@ [![Maintainability](https://api.codeclimate.com/v1/badges/f795422173ac04203b24/maintainability)](https://codeclimate.com/github/pysat/pysatMissionPlanning/maintainability) -pysatMissionPlanning allows users to run build simulated satellites for TLE info and add empirical data. It includes the pysat_sgp4 instrument module which can be imported into pysat. +pysatMissionPlanning allows users to run build simulated satellites for TLE info and add empirical data. It includes the pysat_ephem and pysat_sgp4 instrument modules which can be imported into pysat. Main Features ------------- - Simulate satellite orbits from TLEs and add data from empirical models - Import ionosphere and thermosphere values through pyglow -- Import coordidnates through apexpy +- Import coordinates through apexpy +- Import magnetic coordinates through aacgmv2 Documentation --------------------- @@ -49,13 +50,13 @@ a local install use the "--user" flag after "install". # Using with pysat -The module is portable and designed to be run like any pysat instrument. +The instrument modules are portable and designed to be run like any pysat instrument. ``` import pysat -from pysatMissionPlanning.instruments import pysat_sgp4 +from pysatMissionPlanning.instruments import pysat_ephem -sgp4 = pysat.Instrument(inst_module=pysat_sgp4) +simInst = pysat.Instrument(inst_module=pysat_ephem) ``` The methods that run empirical models can also be exported to any pysat instrument. For instance, to add thermal plasma predictions from the IRI model to the C/NOFS IVM instrument, one can invoke From b1116aef3a994314b2cc4e39c6fc0f869930ca23 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Mon, 6 Jan 2020 14:25:00 -0500 Subject: [PATCH 077/162] Revert "TST: clean up pysat install on travis" --- .travis.yml | 13 ++++++++++--- CHANGELOG.md | 1 - 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 7b8c12bb..971f4c67 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,9 +3,9 @@ dist: xenial matrix: include: - python: 2.7 + - python: 3.5 - python: 3.6 - python: 3.7 - - python: 3.8 services: xvfb addons: @@ -22,11 +22,18 @@ before_install: - pip install xarray - pip install matplotlib - pip install apexpy + + # Prepare modified pysat install - pip install numpy - - - pip install 'pysat>=2.1.0' + - cd .. + - echo 'cloning pysat' + - git clone https://github.com/pysat/pysat.git >/dev/null + - echo 'installing pysat' + - cd ./pysat # set up data directory - mkdir /home/travis/build/pysatData + # install pysat + - python setup.py install >/dev/null # install pyglow, space science models - cd .. diff --git a/CHANGELOG.md b/CHANGELOG.md index 1c57af03..3001b474 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,6 @@ This project adheres to [Semantic Versioning](http://semver.org/). ## [0.2.0] - 2019-10-26 - Added support for readthedocs -- Updates to testing environment ## [0.1.1] - 2019-10-22 - pypi compatibility From 879ceaadb6bb6d097b066c8b135728cb28e4abca Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Thu, 9 Jan 2020 09:57:19 -0500 Subject: [PATCH 078/162] DOC: improve user instructions --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 7871d60a..0f07e487 100644 --- a/README.md +++ b/README.md @@ -66,6 +66,7 @@ import pysat import pysatMissionPlanning.methods.pyglow as methglow ivm = pysat.Instrument(platform='cnofs', name='ivm') -ivm.custom.add(methglow.add_iri_thermal_plasma, 'modify') +ivm.custom.add(methglow.add_iri_thermal_plasma, 'modify', glat_label='glat', + glong_label='glon', alt_label='altitude') ``` Once the custom function is added, the model will automatically be run when the dataset is loaded. From 67328bff1f436952d6190724d7f7803409254300 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Fri, 10 Jan 2020 09:21:26 -0500 Subject: [PATCH 079/162] DOC: improve tutorial --- docs/tutorial.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tutorial.rst b/docs/tutorial.rst index aed4b0d9..52ce2840 100644 --- a/docs/tutorial.rst +++ b/docs/tutorial.rst @@ -38,6 +38,6 @@ A number of methods are included to invoke several python wrappers for empirical from pysatMissionPlanning.methods import pyglow as methglow ivm = pysat.Instrument(platform='cnofs', name='ivm') - ivm.custom.add(methglow.add_iri_thermal_plasma, 'modify', 'end', 'glat', 'glon', 'altitude') + ivm.custom.add(methglow.add_iri_thermal_plasma, 'modify', 'end', glat_label='glat', glong_label='glon', alt_label='altitude') Note that in this case, the latitude, longitude, and altitude variable names of the instrument must be specified since they are not identical to the default names in the function. From af4ce396fb3833098e1dc0aadc58080c38531385 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Fri, 10 Jan 2020 18:26:58 -0500 Subject: [PATCH 080/162] DOC: update readme with pyglow info --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 0f07e487..45ef6227 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,10 @@ a local install use the "--user" flag after "install". python setup.py install ``` +A note on empirical models +-------------------------- +pysatMissionPlanning allows users to interact with a number of upper atmospheric empirical models through the [pyglow](https://github.com/timduly4/pyglow) package. However, pyglow currently requires manual install through git. While pysatMissionPlanning can be installed and used without pyglow, it should be installed by the user to access the pyglow methods. + # Using with pysat The instrument modules are portable and designed to be run like any pysat instrument. From bd085991d06d1027664be77c8b5020aa5b688ba1 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Fri, 10 Jan 2020 18:28:33 -0500 Subject: [PATCH 081/162] DOC: more pyglow info --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 45ef6227..1c4e0679 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ a local install use the "--user" flag after "install". A note on empirical models -------------------------- -pysatMissionPlanning allows users to interact with a number of upper atmospheric empirical models through the [pyglow](https://github.com/timduly4/pyglow) package. However, pyglow currently requires manual install through git. While pysatMissionPlanning can be installed and used without pyglow, it should be installed by the user to access the pyglow methods. +pysatMissionPlanning allows users to interact with a number of upper atmospheric empirical models through the [pyglow](https://github.com/timduly4/pyglow) package. However, pyglow currently requires manual install through git. While pysatMissionPlanning can be installed and used without pyglow, it should be installed by the user to access the pyglow methods. Please follow the install instructions at https://github.com/timduly4/pyglow. # Using with pysat From 3d8b081d126829135e725613cf3038ae408d667d Mon Sep 17 00:00:00 2001 From: jklenzing Date: Fri, 24 Jan 2020 14:19:07 -0500 Subject: [PATCH 082/162] ENH: soft import of pyglow --- pysatMissionPlanning/methods/pyglow.py | 178 ++++++++++++++----------- 1 file changed, 99 insertions(+), 79 deletions(-) diff --git a/pysatMissionPlanning/methods/pyglow.py b/pysatMissionPlanning/methods/pyglow.py index 4c73429d..35fbda9c 100644 --- a/pysatMissionPlanning/methods/pyglow.py +++ b/pysatMissionPlanning/methods/pyglow.py @@ -6,11 +6,19 @@ import pandas as pds import numpy as np +import warnings + +try: + from pyglow.pyglow import Point +except ImportError: + pass -from pyglow.pyglow import Point import pysatMagVect # TODO add checks for ECEF and import rest of changes here +pyglow_warning = ' '.join(['pyglow must be installed to use this', + 'function. See instructions at', + 'https://github.com/pysat/pysatMissionPlanning']) def add_iri_thermal_plasma(inst, glat_label='glat', glong_label='glong', @@ -54,26 +62,29 @@ def add_iri_thermal_plasma(inst, glat_label='glat', glong_label='glong', """ iri_params = [] - for time, lat, lon, alt in zip(inst.data.index, inst[glat_label], - inst[glong_label], inst[alt_label]): - # Point class is instantiated. Its parameters are a function of time - # and spatial location - pt = Point(time, lat, lon, alt) - pt.run_iri() - iri = {} - # After the model is run, its members like Ti, ni[O+], etc. can be - # accessed - iri['ion_temp'] = pt.Ti - iri['e_temp'] = pt.Te - iri['ion_dens'] = pt.ni['O+'] + pt.ni['H+'] + pt.ni['HE+'] - # pt.ne - pt.ni['NO+'] - pt.ni['O2+'] - pt.ni['HE+'] - iri['frac_dens_o'] = pt.ni['O+']/iri['ion_dens'] - iri['frac_dens_h'] = pt.ni['H+']/iri['ion_dens'] - iri['frac_dens_he'] = pt.ni['HE+']/iri['ion_dens'] - iri_params.append(iri) - iri = pds.DataFrame(iri_params) - iri.index = inst.data.index - inst[iri.keys()] = iri + try: + for time, lat, lon, alt in zip(inst.data.index, inst[glat_label], + inst[glong_label], inst[alt_label]): + # Point class is instantiated. Its parameters are a function of time + # and spatial location + pt = Point(time, lat, lon, alt) + pt.run_iri() + iri = {} + # After the model is run, its members like Ti, ni[O+], etc. can be + # accessed + iri['ion_temp'] = pt.Ti + iri['e_temp'] = pt.Te + iri['ion_dens'] = pt.ni['O+'] + pt.ni['H+'] + pt.ni['HE+'] + # pt.ne - pt.ni['NO+'] - pt.ni['O2+'] - pt.ni['HE+'] + iri['frac_dens_o'] = pt.ni['O+']/iri['ion_dens'] + iri['frac_dens_h'] = pt.ni['H+']/iri['ion_dens'] + iri['frac_dens_he'] = pt.ni['HE+']/iri['ion_dens'] + iri_params.append(iri) + iri = pds.DataFrame(iri_params) + iri.index = inst.data.index + inst[iri.keys()] = iri + except NameError: + warnings.warn(pyglow_warning, stacklevel=2) inst.meta['ion_temp'] = {'units': 'Kelvin', 'long_name': 'Ion Temperature', 'desc': ' '.join(['Ion temperature from IRI', @@ -133,29 +144,32 @@ def add_igrf(inst, glat_label='glat', glong_label='glong', alt_label='alt'): """ igrf_params = [] - for time, lat, lon, alt in zip(inst.data.index, inst[glat_label], - inst[glong_label], inst[alt_label]): - pt = Point(time, lat, lon, alt) - pt.run_igrf() - igrf = {} - igrf['B'] = pt.B - igrf['B_east'] = pt.Bx - igrf['B_north'] = pt.By - igrf['B_up'] = pt.Bz - igrf_params.append(igrf) - igrf = pds.DataFrame(igrf_params) - igrf.index = inst.data.index - inst[igrf.keys()] = igrf - - # convert magnetic field in East/north/up to ECEF basis - x, y, z = pysatMagVect.enu_to_ecef_vector(inst['B_east'], - inst['B_north'], - inst['B_up'], - inst[glat_label], - inst[glong_label]) - inst['B_ecef_x'] = x - inst['B_ecef_y'] = y - inst['B_ecef_z'] = z + try: + for time, lat, lon, alt in zip(inst.data.index, inst[glat_label], + inst[glong_label], inst[alt_label]): + pt = Point(time, lat, lon, alt) + pt.run_igrf() + igrf = {} + igrf['B'] = pt.B + igrf['B_east'] = pt.Bx + igrf['B_north'] = pt.By + igrf['B_up'] = pt.Bz + igrf_params.append(igrf) + igrf = pds.DataFrame(igrf_params) + igrf.index = inst.data.index + inst[igrf.keys()] = igrf + + # convert magnetic field in East/north/up to ECEF basis + x, y, z = pysatMagVect.enu_to_ecef_vector(inst['B_east'], + inst['B_north'], + inst['B_up'], + inst[glat_label], + inst[glong_label]) + inst['B_ecef_x'] = x + inst['B_ecef_y'] = y + inst['B_ecef_z'] = z + except NameError: + warnings.warn(pyglow_warning, stacklevel=2) # metadata inst.meta['B'] = {'units': 'nT', @@ -223,27 +237,30 @@ def add_msis(inst, glat_label='glat', glong_label='glong', alt_label='alt'): """ msis_params = [] - for time, lat, lon, alt in zip(inst.data.index, inst[glat_label], - inst[glong_label], inst[alt_label]): - pt = Point(time, lat, lon, alt) - pt.run_msis() - msis = {} - total = 0 - for key in pt.nn.keys(): - total += pt.nn[key] - msis['Nn'] = total - msis['Nn_H'] = pt.nn['H'] - msis['Nn_He'] = pt.nn['HE'] - msis['Nn_N'] = pt.nn['N'] - msis['Nn_N2'] = pt.nn['N2'] - msis['Nn_O'] = pt.nn['O'] - msis['Nn_O2'] = pt.nn['O2'] - msis['Nn_Ar'] = pt.nn['AR'] - msis['Tn_msis'] = pt.Tn_msis - msis_params.append(msis) - msis = pds.DataFrame(msis_params) - msis.index = inst.data.index - inst[msis.keys()] = msis + try: + for time, lat, lon, alt in zip(inst.data.index, inst[glat_label], + inst[glong_label], inst[alt_label]): + pt = Point(time, lat, lon, alt) + pt.run_msis() + msis = {} + total = 0 + for key in pt.nn.keys(): + total += pt.nn[key] + msis['Nn'] = total + msis['Nn_H'] = pt.nn['H'] + msis['Nn_He'] = pt.nn['HE'] + msis['Nn_N'] = pt.nn['N'] + msis['Nn_N2'] = pt.nn['N2'] + msis['Nn_O'] = pt.nn['O'] + msis['Nn_O2'] = pt.nn['O2'] + msis['Nn_Ar'] = pt.nn['AR'] + msis['Tn_msis'] = pt.Tn_msis + msis_params.append(msis) + msis = pds.DataFrame(msis_params) + msis.index = inst.data.index + inst[msis.keys()] = msis + except NameError: + warnings.warn(pyglow_warning, stacklevel=2) # metadata inst.meta['Nn'] = {'units': 'cm^-3', @@ -318,20 +335,23 @@ def add_hwm_winds_and_ecef_vectors(inst, glat_label='glat', """ hwm_params = [] - for time, lat, lon, alt in zip(inst.data.index, inst[glat_label], - inst[glong_label], inst[alt_label]): - # Point class is instantiated. - # Its parameters are a function of time and spatial location - pt = Point(time, lat, lon, alt) - pt.run_hwm() - hwm = {} - hwm['zonal_wind'] = pt.u - hwm['meridional_wind'] = pt.v - hwm_params.append(hwm) - hwm = pds.DataFrame(hwm_params) - hwm.index = inst.data.index - inst[['zonal_wind', 'meridional_wind']] = hwm[['zonal_wind', - 'meridional_wind']] + try: + for time, lat, lon, alt in zip(inst.data.index, inst[glat_label], + inst[glong_label], inst[alt_label]): + # Point class is instantiated. + # Its parameters are a function of time and spatial location + pt = Point(time, lat, lon, alt) + pt.run_hwm() + hwm = {} + hwm['zonal_wind'] = pt.u + hwm['meridional_wind'] = pt.v + hwm_params.append(hwm) + hwm = pds.DataFrame(hwm_params) + hwm.index = inst.data.index + inst[['zonal_wind', 'meridional_wind']] = hwm[['zonal_wind', + 'meridional_wind']] + except NameError: + warnings.warn(pyglow_warning, stacklevel=2) # calculate zonal unit vector in ECEF # zonal wind: east - west; positive east From 9c340457cc5be0d8d1de7ddb6c0b9cfdad3e4c21 Mon Sep 17 00:00:00 2001 From: jklenzing Date: Fri, 24 Jan 2020 14:19:29 -0500 Subject: [PATCH 083/162] DOC: update readthedocs with pyglow instructions --- docs/installation.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/installation.rst b/docs/installation.rst index 37101b3e..755adf56 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -15,8 +15,10 @@ For educational users, an IDE from `Jet Brains Date: Fri, 24 Jan 2020 19:20:00 -0500 Subject: [PATCH 084/162] ENH: post-review restructure --- pysatMissionPlanning/__init__.py | 6 ++++-- pysatMissionPlanning/instruments/pysat_ephem.py | 6 +++--- pysatMissionPlanning/instruments/pysat_sgp4.py | 6 +++--- .../simulators.py => instruments/supporting_methods.py} | 0 pysatMissionPlanning/methods/__init__.py | 4 +--- pysatMissionPlanning/{methods => }/plot.py | 0 6 files changed, 11 insertions(+), 11 deletions(-) rename pysatMissionPlanning/{methods/simulators.py => instruments/supporting_methods.py} (100%) rename pysatMissionPlanning/{methods => }/plot.py (100%) diff --git a/pysatMissionPlanning/__init__.py b/pysatMissionPlanning/__init__.py index 88e70b90..65cf326a 100644 --- a/pysatMissionPlanning/__init__.py +++ b/pysatMissionPlanning/__init__.py @@ -2,9 +2,11 @@ from __future__ import absolute_import import os -from pysatMissionPlanning import instruments, methods +from pysatMissionPlanning import instruments +from pysatMissionPlanning import methods +from pysatMissionPlanning import plot -__all__ = ['instruments', 'methods'] +__all__ = ['instruments', 'methods', 'plot'] # set version here = os.path.abspath(os.path.dirname(__file__)) diff --git a/pysatMissionPlanning/instruments/pysat_ephem.py b/pysatMissionPlanning/instruments/pysat_ephem.py index 2a191cc4..74f8e283 100644 --- a/pysatMissionPlanning/instruments/pysat_ephem.py +++ b/pysatMissionPlanning/instruments/pysat_ephem.py @@ -15,7 +15,7 @@ import numpy as np import pandas as pds import pysat -import pysatMissionPlanning.methods.simulators as sim +import pysatMissionPlanning.instruments.supporting_methods as meth # pysat required parameters platform = 'pysat' @@ -185,8 +185,8 @@ def load(fnames, tag=None, sat_id=None, obs_long=0., obs_lat=0., obs_alt=0., return data, meta.copy() -list_files = functools.partial(sim.list_files) -download = functools.partial(sim.download) +list_files = functools.partial(meth.list_files) +download = functools.partial(meth.download) # create metadata corresponding to variables in load routine just above # made once here rather than regenerate every load call diff --git a/pysatMissionPlanning/instruments/pysat_sgp4.py b/pysatMissionPlanning/instruments/pysat_sgp4.py index d791b0e5..ebe10a32 100644 --- a/pysatMissionPlanning/instruments/pysat_sgp4.py +++ b/pysatMissionPlanning/instruments/pysat_sgp4.py @@ -12,7 +12,7 @@ import functools import pandas as pds import pysat -import pysatMissionPlanning.methods.simulators as sim +import pysatMissionPlanning.instruments.pysat_methods as meth # pysat required parameters platform = 'pysat' @@ -130,8 +130,8 @@ def load(fnames, tag=None, sat_id=None, obs_long=0., obs_lat=0., obs_alt=0., return data, meta.copy() -list_files = functools.partial(sim.list_files) -download = functools.partial(sim.download) +list_files = functools.partial(meth.list_files) +download = functools.partial(meth.download) # create metadata corresponding to variables in load routine just above # made once here rather than regenerate every load call diff --git a/pysatMissionPlanning/methods/simulators.py b/pysatMissionPlanning/instruments/supporting_methods.py similarity index 100% rename from pysatMissionPlanning/methods/simulators.py rename to pysatMissionPlanning/instruments/supporting_methods.py diff --git a/pysatMissionPlanning/methods/__init__.py b/pysatMissionPlanning/methods/__init__.py index d7eac7df..90038cd9 100644 --- a/pysatMissionPlanning/methods/__init__.py +++ b/pysatMissionPlanning/methods/__init__.py @@ -5,9 +5,7 @@ from pysatMissionPlanning.methods import aacgmv2 from pysatMissionPlanning.methods import apexpy -from pysatMissionPlanning.methods import plot from pysatMissionPlanning.methods import pyglow -from pysatMissionPlanning.methods import simulators from pysatMissionPlanning.methods import spacecraft -__all__ = ['aacgmv2', 'apexpy', 'plot', 'pyglow', 'simulators', 'spacecraft'] +__all__ = ['aacgmv2', 'apexpy', 'pyglow', 'spacecraft'] diff --git a/pysatMissionPlanning/methods/plot.py b/pysatMissionPlanning/plot.py similarity index 100% rename from pysatMissionPlanning/methods/plot.py rename to pysatMissionPlanning/plot.py From cd798903a9598dea6afcc8d2362c4a796ed26828 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Fri, 24 Jan 2020 19:21:58 -0500 Subject: [PATCH 085/162] DOC: update features --- README.md | 1 + docs/introduction.rst | 3 ++- summary_orbit_simulated_data.png | Bin 0 -> 228996 bytes 3 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 summary_orbit_simulated_data.png diff --git a/README.md b/README.md index 1c4e0679..d2b6f3cd 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ Main Features - Import ionosphere and thermosphere values through pyglow - Import coordinates through apexpy - Import magnetic coordinates through aacgmv2 +- Import geomagnetic basis vectors through pysatMagVect Documentation --------------------- diff --git a/docs/introduction.rst b/docs/introduction.rst index e3571723..242cf9b8 100644 --- a/docs/introduction.rst +++ b/docs/introduction.rst @@ -9,6 +9,7 @@ Main Features - Simulate satellite orbits from TLEs and add data from empirical models - Import ionosphere and thermosphere values through pyglow - Import coordinates through apexpy -- Import coordinates through aacgmv2 +- Import magnetic coordinates through aacgmv2 +- Import geomagnetic basis vectors through pysatMagVect This document covers installation, a tutorial on pysatMissionPlanning including demonstration code, and an API reference. diff --git a/summary_orbit_simulated_data.png b/summary_orbit_simulated_data.png new file mode 100644 index 0000000000000000000000000000000000000000..e2fc128dd04c82bc9d97538fa26f63f67da13ca2 GIT binary patch literal 228996 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вpg`(&qNs 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
!Cr-HbjMm?25hF@=Q3 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 UXpSG3ZOVTu|te+VN2ctd-05aUfOZCXY=db0NX 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 literal 0 HcmV?d00001 From f13387c262ae4b8416a99f81520389dd2f8696ae Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Fri, 24 Jan 2020 20:13:20 -0500 Subject: [PATCH 086/162] BUG: supporting methods --- pysatMissionPlanning/instruments/pysat_sgp4.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pysatMissionPlanning/instruments/pysat_sgp4.py b/pysatMissionPlanning/instruments/pysat_sgp4.py index ebe10a32..7d61f549 100644 --- a/pysatMissionPlanning/instruments/pysat_sgp4.py +++ b/pysatMissionPlanning/instruments/pysat_sgp4.py @@ -12,7 +12,7 @@ import functools import pandas as pds import pysat -import pysatMissionPlanning.instruments.pysat_methods as meth +import pysatMissionPlanning.instruments.supporting_methods as meth # pysat required parameters platform = 'pysat' From 88e78a11a7c4c975bfec919caf65b0718c1d539b Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Fri, 24 Jan 2020 20:34:37 -0500 Subject: [PATCH 087/162] change to _core --- .../instruments/{supporting_methods.py => _core.py} | 0 pysatMissionPlanning/instruments/pysat_ephem.py | 2 +- pysatMissionPlanning/instruments/pysat_sgp4.py | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) rename pysatMissionPlanning/instruments/{supporting_methods.py => _core.py} (100%) diff --git a/pysatMissionPlanning/instruments/supporting_methods.py b/pysatMissionPlanning/instruments/_core.py similarity index 100% rename from pysatMissionPlanning/instruments/supporting_methods.py rename to pysatMissionPlanning/instruments/_core.py diff --git a/pysatMissionPlanning/instruments/pysat_ephem.py b/pysatMissionPlanning/instruments/pysat_ephem.py index 74f8e283..6d13eb81 100644 --- a/pysatMissionPlanning/instruments/pysat_ephem.py +++ b/pysatMissionPlanning/instruments/pysat_ephem.py @@ -15,7 +15,7 @@ import numpy as np import pandas as pds import pysat -import pysatMissionPlanning.instruments.supporting_methods as meth +import pysatMissionPlanning.instruments._core as meth # pysat required parameters platform = 'pysat' diff --git a/pysatMissionPlanning/instruments/pysat_sgp4.py b/pysatMissionPlanning/instruments/pysat_sgp4.py index 7d61f549..4bbd6827 100644 --- a/pysatMissionPlanning/instruments/pysat_sgp4.py +++ b/pysatMissionPlanning/instruments/pysat_sgp4.py @@ -12,7 +12,7 @@ import functools import pandas as pds import pysat -import pysatMissionPlanning.instruments.supporting_methods as meth +import pysatMissionPlanning.instruments._core as meth # pysat required parameters platform = 'pysat' From 5daad97e41b3408f1bdc11747d5106834746cc6d Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Fri, 24 Jan 2020 20:34:45 -0500 Subject: [PATCH 088/162] update requirements --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index c7616cf7..c6a09884 100644 --- a/setup.py +++ b/setup.py @@ -20,7 +20,7 @@ # on_rtd = os.environ.get('READTHEpysatMissionPlanningDOCS') == 'True' install_requires = ['pysat', 'sgp4', 'pyEphem', 'matplotlib', - 'apexpy', 'aacgmv2', 'pysatMagVect', 'pyglow'] + 'apexpy', 'aacgmv2', 'pysatMagVect'] # Run setup From 115ca4ce7f26274b5d24e21d5d42000c4867e6fe Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Fri, 24 Jan 2020 20:35:50 -0500 Subject: [PATCH 089/162] DOC: add comments --- pysatMissionPlanning/methods/pyglow.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pysatMissionPlanning/methods/pyglow.py b/pysatMissionPlanning/methods/pyglow.py index 35fbda9c..d3088a2b 100644 --- a/pysatMissionPlanning/methods/pyglow.py +++ b/pysatMissionPlanning/methods/pyglow.py @@ -84,6 +84,7 @@ def add_iri_thermal_plasma(inst, glat_label='glat', glong_label='glong', iri.index = inst.data.index inst[iri.keys()] = iri except NameError: + # Triggered if pyglow not installed warnings.warn(pyglow_warning, stacklevel=2) inst.meta['ion_temp'] = {'units': 'Kelvin', 'long_name': 'Ion Temperature', @@ -169,6 +170,7 @@ def add_igrf(inst, glat_label='glat', glong_label='glong', alt_label='alt'): inst['B_ecef_y'] = y inst['B_ecef_z'] = z except NameError: + # Triggered if pyglow not installed warnings.warn(pyglow_warning, stacklevel=2) # metadata @@ -260,6 +262,7 @@ def add_msis(inst, glat_label='glat', glong_label='glong', alt_label='alt'): msis.index = inst.data.index inst[msis.keys()] = msis except NameError: + # Triggered if pyglow not installed warnings.warn(pyglow_warning, stacklevel=2) # metadata @@ -351,6 +354,7 @@ def add_hwm_winds_and_ecef_vectors(inst, glat_label='glat', inst[['zonal_wind', 'meridional_wind']] = hwm[['zonal_wind', 'meridional_wind']] except NameError: + # Triggered if pyglow not installed warnings.warn(pyglow_warning, stacklevel=2) # calculate zonal unit vector in ECEF From d91a36841df69cfcc66883128f76a7a955754057 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Fri, 24 Jan 2020 20:38:04 -0500 Subject: [PATCH 090/162] remove plot --- summary_orbit_simulated_data.png | Bin 228996 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 summary_orbit_simulated_data.png diff --git a/summary_orbit_simulated_data.png b/summary_orbit_simulated_data.png deleted file mode 100644 index e2fc128dd04c82bc9d97538fa26f63f67da13ca2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 228996 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вpg`(&qNs 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
!Cr-HbjMm?25hF@=Q3 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 UXpSG3ZOVTu|te+VN2ctd-05aUfOZCXY=db0NX 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 From 971ffcf973ec8e3d78bb1379525dec0bd3e78b06 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Fri, 24 Jan 2020 20:44:28 -0500 Subject: [PATCH 091/162] BUG: python 3.5/3.6 compatibility --- pysatMissionPlanning/instruments/pysat_ephem.py | 2 +- pysatMissionPlanning/instruments/pysat_sgp4.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pysatMissionPlanning/instruments/pysat_ephem.py b/pysatMissionPlanning/instruments/pysat_ephem.py index 6d13eb81..23918e3a 100644 --- a/pysatMissionPlanning/instruments/pysat_ephem.py +++ b/pysatMissionPlanning/instruments/pysat_ephem.py @@ -15,7 +15,7 @@ import numpy as np import pandas as pds import pysat -import pysatMissionPlanning.instruments._core as meth +from pysatMissionPlanning.instruments import _core as meth # pysat required parameters platform = 'pysat' diff --git a/pysatMissionPlanning/instruments/pysat_sgp4.py b/pysatMissionPlanning/instruments/pysat_sgp4.py index 4bbd6827..91ce936e 100644 --- a/pysatMissionPlanning/instruments/pysat_sgp4.py +++ b/pysatMissionPlanning/instruments/pysat_sgp4.py @@ -12,7 +12,7 @@ import functools import pandas as pds import pysat -import pysatMissionPlanning.instruments._core as meth +from pysatMissionPlanning.instruments import _core as meth # pysat required parameters platform = 'pysat' From ed98a5c58b6307df53d7e056389dd05c0d7f38b2 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Fri, 24 Jan 2020 20:54:47 -0500 Subject: [PATCH 092/162] hide the core functions --- pysatMissionPlanning/instruments/_core.py | 4 ++-- pysatMissionPlanning/instruments/pysat_ephem.py | 4 ++-- pysatMissionPlanning/instruments/pysat_sgp4.py | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pysatMissionPlanning/instruments/_core.py b/pysatMissionPlanning/instruments/_core.py index aa982025..1e1e5b80 100644 --- a/pysatMissionPlanning/instruments/_core.py +++ b/pysatMissionPlanning/instruments/_core.py @@ -6,7 +6,7 @@ import pysat -def list_files(tag=None, sat_id=None, data_path=None, format_str=None): +def _list_files(tag=None, sat_id=None, data_path=None, format_str=None): """Produce a fake list of files spanning a year""" index = pds.date_range(pysat.datetime(2017, 12, 1), @@ -18,7 +18,7 @@ def list_files(tag=None, sat_id=None, data_path=None, format_str=None): return pysat.Series(names, index=index) -def download(date_array, tag, sat_id, data_path=None): +def _download(date_array, tag, sat_id, data_path=None): """ Data is simulated so no download routine is possible. Simple pass function""" pass diff --git a/pysatMissionPlanning/instruments/pysat_ephem.py b/pysatMissionPlanning/instruments/pysat_ephem.py index 23918e3a..cc4236f9 100644 --- a/pysatMissionPlanning/instruments/pysat_ephem.py +++ b/pysatMissionPlanning/instruments/pysat_ephem.py @@ -185,8 +185,8 @@ def load(fnames, tag=None, sat_id=None, obs_long=0., obs_lat=0., obs_alt=0., return data, meta.copy() -list_files = functools.partial(meth.list_files) -download = functools.partial(meth.download) +list_files = functools.partial(meth._list_files) +download = functools.partial(meth._download) # create metadata corresponding to variables in load routine just above # made once here rather than regenerate every load call diff --git a/pysatMissionPlanning/instruments/pysat_sgp4.py b/pysatMissionPlanning/instruments/pysat_sgp4.py index 91ce936e..e221cff8 100644 --- a/pysatMissionPlanning/instruments/pysat_sgp4.py +++ b/pysatMissionPlanning/instruments/pysat_sgp4.py @@ -130,8 +130,8 @@ def load(fnames, tag=None, sat_id=None, obs_long=0., obs_lat=0., obs_alt=0., return data, meta.copy() -list_files = functools.partial(meth.list_files) -download = functools.partial(meth.download) +list_files = functools.partial(meth._list_files) +download = functools.partial(meth._download) # create metadata corresponding to variables in load routine just above # made once here rather than regenerate every load call From c24e0c35f4f2ff3d33258b1f993af9e8b60d1911 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Fri, 24 Jan 2020 22:04:10 -0500 Subject: [PATCH 093/162] rename as pysatMissions --- .codeclimate.yml | 2 +- .travis.yml | 4 ++-- CONTRIBUTING.md | 16 ++++++------- MANIFEST.in | 6 ++--- README.md | 24 +++++++++---------- description.txt | 2 +- docs/citing.rst | 6 ++--- docs/index.rst | 4 ++-- docs/installation.rst | 10 ++++---- docs/introduction.rst | 4 ++-- docs/tutorial.rst | 12 +++++----- pysatMissionPlanning/__init__.py | 6 ++--- pysatMissionPlanning/instruments/__init__.py | 4 ++-- .../instruments/pysat_ephem.py | 10 ++++---- .../instruments/pysat_sgp4.py | 2 +- pysatMissionPlanning/methods/__init__.py | 10 ++++---- pysatMissionPlanning/methods/pyglow.py | 4 ++-- .../tests/test_instruments.py | 14 +++++++---- .../tests/test_methods_aacgmv2.py | 2 +- .../tests/test_methods_apexpy.py | 2 +- .../tests/test_methods_pyglow.py | 2 +- .../tests/test_methods_spacecraft.py | 2 +- setup.py | 8 +++---- 23 files changed, 80 insertions(+), 76 deletions(-) diff --git a/.codeclimate.yml b/.codeclimate.yml index 460bbd6f..2ed1639d 100644 --- a/.codeclimate.yml +++ b/.codeclimate.yml @@ -7,7 +7,7 @@ ratings: - "**.py" exclude_paths: - ".github/**/*" - - "pysatMissionPlanning/tests/**/*" + - "pysatMissions/tests/**/*" - "docs/**/*" - "setup.py" - ".*" diff --git a/.travis.yml b/.travis.yml index 4e5767a4..35481c07 100644 --- a/.travis.yml +++ b/.travis.yml @@ -42,7 +42,7 @@ before_install: - cd ./pyglow - make -C src/pyglow/models source >/dev/null - python setup.py install >/dev/null - - cd ../pysatMissionPlanning + - cd ../pysatMissions install: - python setup.py install @@ -52,7 +52,7 @@ before_script: - export DISPLAY=:99.0 script: - - pytest -vs --cov=pysatMissionPlanning/ + - pytest -vs --cov=pysatMissions/ after_success: - coveralls diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 07fce099..43ec72b5 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,18 +2,18 @@ Contributing ============ Bug reports, feature suggestions and other contributions are greatly -appreciated! pysatMissionPlanning is a community-driven project and welcomes both feedback and contributions. +appreciated! pysatMissions is a community-driven project and welcomes both feedback and contributions. Short version ------------- -* Submit bug reports and feature requests at `GitHub `_ +* Submit bug reports and feature requests at `GitHub `_ * Make pull requests to the ``develop`` branch Bug reports ----------- -When `reporting a bug `_ please +When `reporting a bug `_ please include: * Your operating system name and version @@ -24,7 +24,7 @@ Feature requests and feedback ----------------------------- The best way to send feedback is to file an issue at -`GitHub `_. +`GitHub `_. If you are proposing a feature: @@ -36,12 +36,12 @@ If you are proposing a feature: Development ----------- -To set up `pysatMissionPlanning` for local development: +To set up `pysatMissions` for local development: -1. `Fork pysat on GitHub `_. +1. `Fork pysat on GitHub `_. 2. Clone your fork locally:: - git clone git@github.com:your_name_here/pysatMissionPlanning.git + git clone git@github.com:your_name_here/pysatMissions.git 3. Create a branch for local development:: @@ -49,7 +49,7 @@ To set up `pysatMissionPlanning` for local development: Now you can make your changes locally. Tests for new instruments are performed automatically. Tests for custom functions should be added to the - appropriately named file in ``pysatMissionPlanning/tests``. For example, the averaging routines in avg.py are tested in ``pysatMissionPlanning/tests/test_avg.py``. If no + appropriately named file in ``pysatMissions/tests``. For example, the averaging routines in avg.py are tested in ``pysatMissions/tests/test_avg.py``. If no test file exists, then you should create one. This testing uses pytest, which will run tests on any python file in the test directory that starts with ``test_``. diff --git a/MANIFEST.in b/MANIFEST.in index 124f9037..36cbc137 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,12 +1,12 @@ include *.py include *.f include *.c -recursive-include pysatMissionPlanning *.py +recursive-include pysatMissions *.py include *.md include description.txt include LICENSE -include pysatMissionPlanning/version.txt -prune pysatMissionPlanning/tests +include pysatMissions/version.txt +prune pysatMissions/tests prune docs prune demo exclude *.pdf diff --git a/README.md b/README.md index d2b6f3cd..ec34ed41 100644 --- a/README.md +++ b/README.md @@ -3,15 +3,15 @@ pysat -# pysatMissionPlanning -[![Build Status](https://travis-ci.org/pysat/pysatMissionPlanning.svg?branch=master)](https://travis-ci.org/pysat/pysatMissionPlanning) -[![Documentation Status](https://readthedocs.org/projects/pysatMissionPlanning/badge/?version=latest)](http://pysatMissionPlanning.readthedocs.io/en/latest/?badge=latest) -[![Coverage Status](https://coveralls.io/repos/github/pysat/pysatMissionPlanning/badge.svg?branch=master)](https://coveralls.io/github/pysat/pysatMissionPlanning?branch=master) +# pysatMissions +[![Build Status](https://travis-ci.org/pysat/pysatMissions.svg?branch=master)](https://travis-ci.org/pysat/pysatMissions) +[![Documentation Status](https://readthedocs.org/projects/pysatMissions/badge/?version=latest)](http://pysatMissions.readthedocs.io/en/latest/?badge=latest) +[![Coverage Status](https://coveralls.io/repos/github/pysat/pysatMissions/badge.svg?branch=master)](https://coveralls.io/github/pysat/pysatMissions?branch=master) [![DOI](https://zenodo.org/badge/209358908.svg)](https://zenodo.org/badge/latestdoi/209358908) -[![Maintainability](https://api.codeclimate.com/v1/badges/f795422173ac04203b24/maintainability)](https://codeclimate.com/github/pysat/pysatMissionPlanning/maintainability) +[![Maintainability](https://api.codeclimate.com/v1/badges/f795422173ac04203b24/maintainability)](https://codeclimate.com/github/pysat/pysatMissions/maintainability) -pysatMissionPlanning allows users to run build simulated satellites for TLE info and add empirical data. It includes the pysat_ephem and pysat_sgp4 instrument modules which can be imported into pysat. +pysatMissions allows users to run build simulated satellites for TLE info and add empirical data. It includes the pysat_ephem and pysat_sgp4 instrument modules which can be imported into pysat. Main Features ------------- @@ -31,27 +31,27 @@ Documentation One way to install is through pip. Just type ``` -pip install pysatMissionPlanning +pip install pysatMissions ``` into the terminal. Or, if you prefer to work directly from github, checkout the repository: ``` - git clone https://github.com/pysat/pysatMissionPlanning.git + git clone https://github.com/pysat/pysatMissions.git ``` Change directories into the repository folder and run the setup.py file. For a local install use the "--user" flag after "install". ``` - cd pysatMissionPlanning/ + cd pysatMissions/ python setup.py install ``` A note on empirical models -------------------------- -pysatMissionPlanning allows users to interact with a number of upper atmospheric empirical models through the [pyglow](https://github.com/timduly4/pyglow) package. However, pyglow currently requires manual install through git. While pysatMissionPlanning can be installed and used without pyglow, it should be installed by the user to access the pyglow methods. Please follow the install instructions at https://github.com/timduly4/pyglow. +pysatMissions allows users to interact with a number of upper atmospheric empirical models through the [pyglow](https://github.com/timduly4/pyglow) package. However, pyglow currently requires manual install through git. While pysatMissions can be installed and used without pyglow, it should be installed by the user to access the pyglow methods. Please follow the install instructions at https://github.com/timduly4/pyglow. # Using with pysat @@ -59,7 +59,7 @@ The instrument modules are portable and designed to be run like any pysat instru ``` import pysat -from pysatMissionPlanning.instruments import pysat_ephem +from pysatMissions.instruments import pysat_ephem simInst = pysat.Instrument(inst_module=pysat_ephem) ``` @@ -68,7 +68,7 @@ The methods that run empirical models can also be exported to any pysat instrume ``` import pysat -import pysatMissionPlanning.methods.pyglow as methglow +import pysatMissions.methods.pyglow as methglow ivm = pysat.Instrument(platform='cnofs', name='ivm') ivm.custom.add(methglow.add_iri_thermal_plasma, 'modify', glat_label='glat', diff --git a/description.txt b/description.txt index b8126cc4..5fd11c1f 100644 --- a/description.txt +++ b/description.txt @@ -1,4 +1,4 @@ -pysatMissionPlanning allows users to run build simulated satellites for TLE info and add empirical data. It includes the pysat_sgp4 instrument module which can be imported into pysat. +pysatMissions allows users to run build simulated satellites for TLE info and add empirical data. It includes the pysat_sgp4 instrument module which can be imported into pysat. Main Features ------------- diff --git a/docs/citing.rst b/docs/citing.rst index 914f4943..ea0e8c13 100644 --- a/docs/citing.rst +++ b/docs/citing.rst @@ -7,13 +7,13 @@ Example for citation in BibTex for a generalized version: .. code:: - @misc{pysatMissionPlanning, + @misc{pysatMissions, author = {Stoneback, R.A. and Klenzing, J.H. and Burrell, A.G. and Depew, M. and Spence, C.}, - title = {Pysat Mission Planning Toolkit (pysatMissionPlanning) vX.Y.Z}, + title = {Pysat Mission Planning Toolkit (pysatMissions) vX.Y.Z}, month = oct, year = 2019, doi = {10.5281/zenodo.3475499}, @@ -39,4 +39,4 @@ Citing the publication: year = {2018} } -To aid in scientific reproducibility, please include the version number in publications that use this code. This can be found by invoking `pysatMissionPlanning.__version__ `. +To aid in scientific reproducibility, please include the version number in publications that use this code. This can be found by invoking `pysatMissions.__version__ `. diff --git a/docs/index.rst b/docs/index.rst index 33e7a030..b99ae8db 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -1,6 +1,6 @@ -.. pysatMissionPlanning documentation master file +.. pysatMissions documentation master file -Welcome to pysatMissionPlanning's documentation! +Welcome to pysatMissions's documentation! ================================= .. toctree:: diff --git a/docs/installation.rst b/docs/installation.rst index 755adf56..5b1a11a7 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -11,14 +11,14 @@ Python and associated packages for science are freely available. Convenient scie For educational users, an IDE from `Jet Brains `_ is available for free. -**pysatMissionPlanning** +**pysatMissions** ---- -PysatMissionPlanning itself may be installed from a terminal command line via:: +pysatMissions itself may be installed from a terminal command line via:: - pip install pysatMissionPlanning + pip install pysatMissions -Note that pysatMissionPlanning requires pysat to interact with the instruments and models here. [Full Documentation for main package](http://pysat.readthedocs.io/en/latest/) +Note that pysatMissions requires pysat to interact with the instruments and models here. [Full Documentation for main package](http://pysat.readthedocs.io/en/latest/) -pysatMissionPlanning allows users to interact with a number of upper atmospheric empirical models through the pyglow package. However, pyglow currently requires manual install through git. While pysatMissionPlanning can be installed and used without pyglow, it should be installed by the user to access the pyglow methods. Please follow the install instructions at https://github.com/timduly4/pyglow. +pysatMissions allows users to interact with a number of upper atmospheric empirical models through the pyglow package. However, pyglow currently requires manual install through git. While pysatMissions can be installed and used without pyglow, it should be installed by the user to access the pyglow methods. Please follow the install instructions at https://github.com/timduly4/pyglow. diff --git a/docs/introduction.rst b/docs/introduction.rst index 242cf9b8..3c5c9fe3 100644 --- a/docs/introduction.rst +++ b/docs/introduction.rst @@ -2,7 +2,7 @@ Introduction ============ -pysatMissionPlanning allows users to run build simulated satellites for TLE info and add empirical data. It includes the pysat_sgp4 and pysat_ephem instrument modules which can be imported into pysat. +pysatMissions allows users to run build simulated satellites for TLE info and add empirical data. It includes the pysat_sgp4 and pysat_ephem instrument modules which can be imported into pysat. Main Features ------------- @@ -12,4 +12,4 @@ Main Features - Import magnetic coordinates through aacgmv2 - Import geomagnetic basis vectors through pysatMagVect -This document covers installation, a tutorial on pysatMissionPlanning including demonstration code, and an API reference. +This document covers installation, a tutorial on pysatMissions including demonstration code, and an API reference. diff --git a/docs/tutorial.rst b/docs/tutorial.rst index 52ce2840..bda6c125 100644 --- a/docs/tutorial.rst +++ b/docs/tutorial.rst @@ -5,12 +5,12 @@ Tutorial **Set up sgp4 with pysat** ---- -The sgp4 instrument within pysatMissionPlanning is designed to be run like any pysat instrument. To access, use +The sgp4 instrument within pysatMissions is designed to be run like any pysat instrument. To access, use .. code:: python import pysat - from pysatMissionPlanning.instruments import pysat_sgp4 + from pysatMissions.instruments import pysat_sgp4 sgp4 = pysat.Instrument(inst_module=pysat_sgp4) @@ -19,13 +19,13 @@ For pysat 3.0.0 or greater, this can be permanently added via the instrument reg .. code:: python import pysat - import pysatMissionPlanning - pysat.utils.registry.register('pysatMissionPlanning.instruments.pysat_sgp4') + import pysatMissions + pysat.utils.registry.register('pysatMissions.instruments.pysat_sgp4') **Orbital Propagators** --- -Currently, two orbital propagators are included with pysatMissionPlanning. The pysat_sgp4 instrument uses the wgs72 gravity model to provide satellite position and velocity in ECI co-ordinates. The pysat_ephem instrument uses the ephem pysat package to calculate an orbit in lat/lon/alt and ECEF co-ordinates. As an example, it also loads a series of empirical models to provide simulated ionospheric, thermospheric, and magnetic data as an aid for mission planning. +Currently, two orbital propagators are included with pysatMissions. The pysat_sgp4 instrument uses the wgs72 gravity model to provide satellite position and velocity in ECI co-ordinates. The pysat_ephem instrument uses the ephem pysat package to calculate an orbit in lat/lon/alt and ECEF co-ordinates. As an example, it also loads a series of empirical models to provide simulated ionospheric, thermospheric, and magnetic data as an aid for mission planning. **Empirical Models** @@ -35,7 +35,7 @@ A number of methods are included to invoke several python wrappers for empirical .. code:: python import pysat - from pysatMissionPlanning.methods import pyglow as methglow + from pysatMissions.methods import pyglow as methglow ivm = pysat.Instrument(platform='cnofs', name='ivm') ivm.custom.add(methglow.add_iri_thermal_plasma, 'modify', 'end', glat_label='glat', glong_label='glon', alt_label='altitude') diff --git a/pysatMissionPlanning/__init__.py b/pysatMissionPlanning/__init__.py index 65cf326a..624ea711 100644 --- a/pysatMissionPlanning/__init__.py +++ b/pysatMissionPlanning/__init__.py @@ -2,9 +2,9 @@ from __future__ import absolute_import import os -from pysatMissionPlanning import instruments -from pysatMissionPlanning import methods -from pysatMissionPlanning import plot +from pysatMissions import instruments +from pysatMissions import methods +from pysatMissions import plot __all__ = ['instruments', 'methods', 'plot'] diff --git a/pysatMissionPlanning/instruments/__init__.py b/pysatMissionPlanning/instruments/__init__.py index a3b9f5b2..d42e4b60 100644 --- a/pysatMissionPlanning/instruments/__init__.py +++ b/pysatMissionPlanning/instruments/__init__.py @@ -1,8 +1,8 @@ """ -pysatMissionPlanning.instruments is a pysat module that provides +pysatMissions.instruments is a pysat module that provides the instrument modules to be used with pysat """ -from pysatMissionPlanning.instruments import pysat_ephem, pysat_sgp4 +from pysatMissions.instruments import pysat_ephem, pysat_sgp4 __all__ = ['pysat_ephem', 'pysat_sgp4'] diff --git a/pysatMissionPlanning/instruments/pysat_ephem.py b/pysatMissionPlanning/instruments/pysat_ephem.py index cc4236f9..33fab53b 100644 --- a/pysatMissionPlanning/instruments/pysat_ephem.py +++ b/pysatMissionPlanning/instruments/pysat_ephem.py @@ -15,7 +15,7 @@ import numpy as np import pandas as pds import pysat -from pysatMissionPlanning.instruments import _core as meth +from pysatMissions.instruments import _core as meth # pysat required parameters platform = 'pysat' @@ -39,10 +39,10 @@ def init(self): Horiontal Wind Model (HWM). """ - import pysatMissionPlanning.methods.aacgmv2 as methaacgm - import pysatMissionPlanning.methods.apexpy as methapex - import pysatMissionPlanning.methods.pyglow as methglow - import pysatMissionPlanning.methods.spacecraft as methsc + import pysatMissions.methods.aacgmv2 as methaacgm + import pysatMissions.methods.apexpy as methapex + import pysatMissions.methods.pyglow as methglow + import pysatMissions.methods.spacecraft as methsc self.custom.add(methapex.add_quasi_dipole_coordinates, 'modify') self.custom.add(methaacgm.add_aacgm_coordinates, 'modify') diff --git a/pysatMissionPlanning/instruments/pysat_sgp4.py b/pysatMissionPlanning/instruments/pysat_sgp4.py index e221cff8..942d5cd0 100644 --- a/pysatMissionPlanning/instruments/pysat_sgp4.py +++ b/pysatMissionPlanning/instruments/pysat_sgp4.py @@ -12,7 +12,7 @@ import functools import pandas as pds import pysat -from pysatMissionPlanning.instruments import _core as meth +from pysatMissions.instruments import _core as meth # pysat required parameters platform = 'pysat' diff --git a/pysatMissionPlanning/methods/__init__.py b/pysatMissionPlanning/methods/__init__.py index 90038cd9..c61bfc73 100644 --- a/pysatMissionPlanning/methods/__init__.py +++ b/pysatMissionPlanning/methods/__init__.py @@ -1,11 +1,11 @@ """ -pysatMissionPlanning.methods is a module that provides +pysatMissions.methods is a module that provides the methods to interface with numerous empirical model packages """ -from pysatMissionPlanning.methods import aacgmv2 -from pysatMissionPlanning.methods import apexpy -from pysatMissionPlanning.methods import pyglow -from pysatMissionPlanning.methods import spacecraft +from pysatMissions.methods import aacgmv2 +from pysatMissions.methods import apexpy +from pysatMissions.methods import pyglow +from pysatMissions.methods import spacecraft __all__ = ['aacgmv2', 'apexpy', 'pyglow', 'spacecraft'] diff --git a/pysatMissionPlanning/methods/pyglow.py b/pysatMissionPlanning/methods/pyglow.py index d3088a2b..5ebcfaad 100644 --- a/pysatMissionPlanning/methods/pyglow.py +++ b/pysatMissionPlanning/methods/pyglow.py @@ -18,7 +18,7 @@ # TODO add checks for ECEF and import rest of changes here pyglow_warning = ' '.join(['pyglow must be installed to use this', 'function. See instructions at', - 'https://github.com/pysat/pysatMissionPlanning']) + 'https://github.com/pysat/pysatMissions']) def add_iri_thermal_plasma(inst, glat_label='glat', glong_label='glong', @@ -423,7 +423,7 @@ def get_ecef_wind_meta(coord='x', geo='mer'): def project_hwm_onto_sc(inst): - import pysatMissionPlanning.methods.spacecraft as methatt + import pysatMissions.methods.spacecraft as methatt def get_wind_comp(inst, direction='x'): unit_zon = 'unit_zonal_wind_ecef_' + direction diff --git a/pysatMissionPlanning/tests/test_instruments.py b/pysatMissionPlanning/tests/test_instruments.py index cded10f6..732d03e1 100644 --- a/pysatMissionPlanning/tests/test_instruments.py +++ b/pysatMissionPlanning/tests/test_instruments.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- """ -Basic test of the instrument objects in pysatMissionPlanning +Basic test of the instrument objects in pysatMissions To be replaced once pysat testing techniques are finalized """ @@ -12,8 +12,8 @@ class TestSGP4(): def setup(self): """Runs before every method to create a clean testing setup.""" - from pysatMissionPlanning.instruments import pysat_sgp4 - self.testInst = pysat.Instrument(inst_module=pysat_sgp4) + from pysatMissions.instruments import pysat_sgp4 + self.testInst = pysat.Instrument(inst_module=pysat_sgp4, sat_id='101') self.targets1 = ['position_eci_x', 'position_eci_y', 'position_eci_z', 'velocity_eci_x', 'velocity_eci_y', 'velocity_eci_z'] self.targets2 = [] @@ -24,6 +24,9 @@ def teardown(self): def test_basic_instrument_load(self): """Checks if instrument loads proper data and metadata""" + # Check if instrument is instrument + assert isinstance(self.testInst, pysat._instrument.Instrument) + self.testInst.load(date=pysat.datetime(2018, 1, 1)) # Check for completeness of first set of targets for target in self.targets1: @@ -49,8 +52,9 @@ def setup(self): """Runs before every method to create a clean testing setup.""" # NOTE: aacgm not checked here because undefined near the equator # TODO: add check for aacgm values - from pysatMissionPlanning.instruments import pysat_ephem - self.testInst = pysat.Instrument(inst_module=pysat_ephem) + from pysatMissions.instruments import pysat_ephem + self.testInst = pysat.Instrument(inst_module=pysat_ephem, tag='all', + sat_id='100') self.targets1 = ['glong', 'glat', 'alt', 'obs_sat_slant_range', 'obs_sat_az_angle', 'obs_sat_el_angle', 'position_ecef_x', 'position_ecef_y', 'position_ecef_z', diff --git a/pysatMissionPlanning/tests/test_methods_aacgmv2.py b/pysatMissionPlanning/tests/test_methods_aacgmv2.py index ba4a99d3..3af7bc10 100644 --- a/pysatMissionPlanning/tests/test_methods_aacgmv2.py +++ b/pysatMissionPlanning/tests/test_methods_aacgmv2.py @@ -3,7 +3,7 @@ import numpy as np import pysat -import pysatMissionPlanning.methods.aacgmv2 as methaacgm +import pysatMissions.methods.aacgmv2 as methaacgm def add_altitude(inst, altitude=400.0): diff --git a/pysatMissionPlanning/tests/test_methods_apexpy.py b/pysatMissionPlanning/tests/test_methods_apexpy.py index 0ce714f4..bb05bc04 100644 --- a/pysatMissionPlanning/tests/test_methods_apexpy.py +++ b/pysatMissionPlanning/tests/test_methods_apexpy.py @@ -3,7 +3,7 @@ import numpy as np import pysat -import pysatMissionPlanning.methods.apexpy as methapex +import pysatMissions.methods.apexpy as methapex def add_altitude(inst, altitude=400.0): diff --git a/pysatMissionPlanning/tests/test_methods_pyglow.py b/pysatMissionPlanning/tests/test_methods_pyglow.py index 3e4f15f6..a807ab0d 100644 --- a/pysatMissionPlanning/tests/test_methods_pyglow.py +++ b/pysatMissionPlanning/tests/test_methods_pyglow.py @@ -3,7 +3,7 @@ import numpy as np import pysat -from pysatMissionPlanning.methods import pyglow as methglow +from pysatMissions.methods import pyglow as methglow def add_altitude(inst, altitude=400.0): diff --git a/pysatMissionPlanning/tests/test_methods_spacecraft.py b/pysatMissionPlanning/tests/test_methods_spacecraft.py index 7b6e2a09..3e747ed6 100644 --- a/pysatMissionPlanning/tests/test_methods_spacecraft.py +++ b/pysatMissionPlanning/tests/test_methods_spacecraft.py @@ -3,7 +3,7 @@ import numpy as np import pysat -from pysatMissionPlanning.methods import spacecraft as methsc +from pysatMissions.methods import spacecraft as methsc def add_eci(inst): diff --git a/setup.py b/setup.py index c6a09884..f6aebf70 100644 --- a/setup.py +++ b/setup.py @@ -12,12 +12,12 @@ here = os.path.abspath(os.path.dirname(__file__)) with codecs.open(os.path.join(here, 'description.txt'), encoding='utf-8') as f: long_description = f.read() -version_filename = os.path.join('pysatMissionPlanning', 'version.txt') +version_filename = os.path.join('pysatMissions', 'version.txt') with codecs.open(os.path.join(here, version_filename)) as version_file: version = version_file.read().strip() # change setup.py for readthedocs - commented for now -# on_rtd = os.environ.get('READTHEpysatMissionPlanningDOCS') == 'True' +# on_rtd = os.environ.get('READTHEpysatMissionsDOCS') == 'True' install_requires = ['pysat', 'sgp4', 'pyEphem', 'matplotlib', 'apexpy', 'aacgmv2', 'pysatMagVect'] @@ -25,9 +25,9 @@ # Run setup -setup(name='pysatMissionPlanning', +setup(name='pysatMissions', version=version, - url='https://github.com/pysat/pysatMissionPlanning', + url='https://github.com/pysat/pysatMissions', author='Russell Stoneback, Jeff Klenzing', author_email='rstoneba@utdallas.edu', description='Mission Planning toolkit for pysat', From e858a5e284a26cec719fcf46f0e76fbd4a8868a4 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Fri, 24 Jan 2020 22:05:40 -0500 Subject: [PATCH 094/162] DOC: update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d7cc0354..2e4d3b07 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). ## [0.2.0] - 2019-12-18 +- Renamed as pysatMissions - Added method files to access aacgmv2, apexpy, pyglow for any pysat instrument - Added method for spacecraft to handle attitude and coordinates - Added method for plotting simulated data From c10ce04f78cde765e758ba7ff9af6e7504c2604e Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Fri, 24 Jan 2020 22:13:24 -0500 Subject: [PATCH 095/162] update travis config --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 35481c07..b7bcdb61 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,7 @@ +os: linux language: python dist: xenial -matrix: +jobs: include: - python: 3.5 - python: 3.6 From 30c30cdcd3672d8d4cd3a778a666ffc2b93d6a21 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Fri, 24 Jan 2020 22:17:24 -0500 Subject: [PATCH 096/162] update name --- pysatMissionPlanning/tests/test_core.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pysatMissionPlanning/tests/test_core.py b/pysatMissionPlanning/tests/test_core.py index 98dfa3bf..23cbc206 100644 --- a/pysatMissionPlanning/tests/test_core.py +++ b/pysatMissionPlanning/tests/test_core.py @@ -1,4 +1,4 @@ -import pysatMissionPlanning +import pysatMissions import pysat @@ -7,7 +7,7 @@ class TestBasic(): """ def setup(self): - self.module = pysatMissionPlanning.instruments.pysat_sgp4 + self.module = pysatMissions.instruments.pysat_sgp4 def teardown(self): del self.module From 9f2f19647d3c388f741b925bffe13e320f1acbab Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Sat, 25 Jan 2020 13:17:42 -0500 Subject: [PATCH 097/162] directory rename --- {pysatMissionPlanning => pysatMissions}/__init__.py | 0 {pysatMissionPlanning => pysatMissions}/instruments/__init__.py | 0 {pysatMissionPlanning => pysatMissions}/instruments/_core.py | 0 .../instruments/pysat_ephem.py | 0 {pysatMissionPlanning => pysatMissions}/instruments/pysat_sgp4.py | 0 {pysatMissionPlanning => pysatMissions}/methods/__init__.py | 0 {pysatMissionPlanning => pysatMissions}/methods/aacgmv2.py | 0 {pysatMissionPlanning => pysatMissions}/methods/apexpy.py | 0 {pysatMissionPlanning => pysatMissions}/methods/pyglow.py | 0 {pysatMissionPlanning => pysatMissions}/methods/spacecraft.py | 0 {pysatMissionPlanning => pysatMissions}/plot.py | 0 {pysatMissionPlanning => pysatMissions}/tests/__init__.py | 0 {pysatMissionPlanning => pysatMissions}/tests/test_core.py | 0 {pysatMissionPlanning => pysatMissions}/tests/test_instruments.py | 0 .../tests/test_methods_aacgmv2.py | 0 .../tests/test_methods_apexpy.py | 0 .../tests/test_methods_pyglow.py | 0 .../tests/test_methods_spacecraft.py | 0 {pysatMissionPlanning => pysatMissions}/version.txt | 0 19 files changed, 0 insertions(+), 0 deletions(-) rename {pysatMissionPlanning => pysatMissions}/__init__.py (100%) rename {pysatMissionPlanning => pysatMissions}/instruments/__init__.py (100%) rename {pysatMissionPlanning => pysatMissions}/instruments/_core.py (100%) rename {pysatMissionPlanning => pysatMissions}/instruments/pysat_ephem.py (100%) rename {pysatMissionPlanning => pysatMissions}/instruments/pysat_sgp4.py (100%) rename {pysatMissionPlanning => pysatMissions}/methods/__init__.py (100%) rename {pysatMissionPlanning => pysatMissions}/methods/aacgmv2.py (100%) rename {pysatMissionPlanning => pysatMissions}/methods/apexpy.py (100%) rename {pysatMissionPlanning => pysatMissions}/methods/pyglow.py (100%) rename {pysatMissionPlanning => pysatMissions}/methods/spacecraft.py (100%) rename {pysatMissionPlanning => pysatMissions}/plot.py (100%) rename {pysatMissionPlanning => pysatMissions}/tests/__init__.py (100%) rename {pysatMissionPlanning => pysatMissions}/tests/test_core.py (100%) rename {pysatMissionPlanning => pysatMissions}/tests/test_instruments.py (100%) rename {pysatMissionPlanning => pysatMissions}/tests/test_methods_aacgmv2.py (100%) rename {pysatMissionPlanning => pysatMissions}/tests/test_methods_apexpy.py (100%) rename {pysatMissionPlanning => pysatMissions}/tests/test_methods_pyglow.py (100%) rename {pysatMissionPlanning => pysatMissions}/tests/test_methods_spacecraft.py (100%) rename {pysatMissionPlanning => pysatMissions}/version.txt (100%) diff --git a/pysatMissionPlanning/__init__.py b/pysatMissions/__init__.py similarity index 100% rename from pysatMissionPlanning/__init__.py rename to pysatMissions/__init__.py diff --git a/pysatMissionPlanning/instruments/__init__.py b/pysatMissions/instruments/__init__.py similarity index 100% rename from pysatMissionPlanning/instruments/__init__.py rename to pysatMissions/instruments/__init__.py diff --git a/pysatMissionPlanning/instruments/_core.py b/pysatMissions/instruments/_core.py similarity index 100% rename from pysatMissionPlanning/instruments/_core.py rename to pysatMissions/instruments/_core.py diff --git a/pysatMissionPlanning/instruments/pysat_ephem.py b/pysatMissions/instruments/pysat_ephem.py similarity index 100% rename from pysatMissionPlanning/instruments/pysat_ephem.py rename to pysatMissions/instruments/pysat_ephem.py diff --git a/pysatMissionPlanning/instruments/pysat_sgp4.py b/pysatMissions/instruments/pysat_sgp4.py similarity index 100% rename from pysatMissionPlanning/instruments/pysat_sgp4.py rename to pysatMissions/instruments/pysat_sgp4.py diff --git a/pysatMissionPlanning/methods/__init__.py b/pysatMissions/methods/__init__.py similarity index 100% rename from pysatMissionPlanning/methods/__init__.py rename to pysatMissions/methods/__init__.py diff --git a/pysatMissionPlanning/methods/aacgmv2.py b/pysatMissions/methods/aacgmv2.py similarity index 100% rename from pysatMissionPlanning/methods/aacgmv2.py rename to pysatMissions/methods/aacgmv2.py diff --git a/pysatMissionPlanning/methods/apexpy.py b/pysatMissions/methods/apexpy.py similarity index 100% rename from pysatMissionPlanning/methods/apexpy.py rename to pysatMissions/methods/apexpy.py diff --git a/pysatMissionPlanning/methods/pyglow.py b/pysatMissions/methods/pyglow.py similarity index 100% rename from pysatMissionPlanning/methods/pyglow.py rename to pysatMissions/methods/pyglow.py diff --git a/pysatMissionPlanning/methods/spacecraft.py b/pysatMissions/methods/spacecraft.py similarity index 100% rename from pysatMissionPlanning/methods/spacecraft.py rename to pysatMissions/methods/spacecraft.py diff --git a/pysatMissionPlanning/plot.py b/pysatMissions/plot.py similarity index 100% rename from pysatMissionPlanning/plot.py rename to pysatMissions/plot.py diff --git a/pysatMissionPlanning/tests/__init__.py b/pysatMissions/tests/__init__.py similarity index 100% rename from pysatMissionPlanning/tests/__init__.py rename to pysatMissions/tests/__init__.py diff --git a/pysatMissionPlanning/tests/test_core.py b/pysatMissions/tests/test_core.py similarity index 100% rename from pysatMissionPlanning/tests/test_core.py rename to pysatMissions/tests/test_core.py diff --git a/pysatMissionPlanning/tests/test_instruments.py b/pysatMissions/tests/test_instruments.py similarity index 100% rename from pysatMissionPlanning/tests/test_instruments.py rename to pysatMissions/tests/test_instruments.py diff --git a/pysatMissionPlanning/tests/test_methods_aacgmv2.py b/pysatMissions/tests/test_methods_aacgmv2.py similarity index 100% rename from pysatMissionPlanning/tests/test_methods_aacgmv2.py rename to pysatMissions/tests/test_methods_aacgmv2.py diff --git a/pysatMissionPlanning/tests/test_methods_apexpy.py b/pysatMissions/tests/test_methods_apexpy.py similarity index 100% rename from pysatMissionPlanning/tests/test_methods_apexpy.py rename to pysatMissions/tests/test_methods_apexpy.py diff --git a/pysatMissionPlanning/tests/test_methods_pyglow.py b/pysatMissions/tests/test_methods_pyglow.py similarity index 100% rename from pysatMissionPlanning/tests/test_methods_pyglow.py rename to pysatMissions/tests/test_methods_pyglow.py diff --git a/pysatMissionPlanning/tests/test_methods_spacecraft.py b/pysatMissions/tests/test_methods_spacecraft.py similarity index 100% rename from pysatMissionPlanning/tests/test_methods_spacecraft.py rename to pysatMissions/tests/test_methods_spacecraft.py diff --git a/pysatMissionPlanning/version.txt b/pysatMissions/version.txt similarity index 100% rename from pysatMissionPlanning/version.txt rename to pysatMissions/version.txt From a8e1fa9f61736cc32dab3400e9ef15252173d190 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Sat, 25 Jan 2020 13:22:43 -0500 Subject: [PATCH 098/162] DOC: comments --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index b7bcdb61..0ee3ee5d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,7 +17,7 @@ before_install: - pip install pytest-cov - pip install coveralls - pip install future - # Install version specific packages for 2.7 and 3.5 + # Install version specific packages for 3.5 - pip install 'pandas<0.25' - pip install xarray - pip install matplotlib From b883f91510342c0cde065af34a23ff08a978b980 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Mon, 27 Jan 2020 17:12:05 -0500 Subject: [PATCH 099/162] Add python 3.8 --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 0ee3ee5d..7930005e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,6 +6,7 @@ jobs: - python: 3.5 - python: 3.6 - python: 3.7 + - python: 3.8 services: xvfb addons: From 5a9542add7f3a664c4ff10ef552f5f3151ccd89a Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Mon, 27 Jan 2020 17:59:51 -0500 Subject: [PATCH 100/162] Replace basemap with cartopy --- pysatMissions/plot.py | 117 +++++++++++++++++++++--------------------- 1 file changed, 59 insertions(+), 58 deletions(-) diff --git a/pysatMissions/plot.py b/pysatMissions/plot.py index a711b713..ebb084e3 100644 --- a/pysatMissions/plot.py +++ b/pysatMissions/plot.py @@ -12,8 +12,8 @@ def plot_simulated_data(inst, filename=None): import matplotlib import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec - from matplotlib.collections import LineCollection - from mpl_toolkits.basemap import Basemap + import cartopy.crs as ccrs + from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter if filename is None: out_fname = './summary_orbit_simulated_data.png' @@ -88,13 +88,11 @@ def plot_simulated_data(inst, filename=None): # # xlabels = [label[0:6] for label in xlabels] plt.setp(ax4.xaxis.get_majorticklabels(), rotation=20, ha='right') - # inst info - ax6 = f.add_subplot(gs[4, 0]) - # do world plot if time to be plotted is less than 285 minutes, less than # 3 orbits time_diff = inst.data.index[-1] - inst.data.index[0] if time_diff > pds.Timedelta(minutes=285): + ax6 = f.add_subplot(gs[4, 0]) # do long time plot inst['glat'].plot(label='glat') # legend=True, label='mlat') inst['mlt'].plot(label='mlt') # legend=True, label='mlt') @@ -106,69 +104,72 @@ def plot_simulated_data(inst, filename=None): else: # make map the same size as the other plots + ax6 = f.add_subplot(gs[4, 0], + projection=ccrs.PlateCarree(central_longitude=180)) s1pos = plt.get(ax, 'position').bounds s6pos = plt.get(ax6, 'position').bounds ax6.set_position([s1pos[0], s6pos[1]+.008, s1pos[2], s1pos[3]]) # fix longitude range for plot. Pad longitude so that first sample # aligned with inst measurement sample - lon0 = inst[0, 'glong'] - lon1 = inst[-1, 'glong'] - - # enforce minimal longitude window, keep graphics from being too - # disturbed - if (lon1-lon0) < 90: - lon0 -= 45. - lon1 += 45. - if lon1 > 720: - lon0 -= 360. - lon1 -= 360. - inst[:, 'glong'] -= 360. - - m = Basemap(projection='mill', llcrnrlat=-60, urcrnrlat=60., - urcrnrlon=lon1.copy(), llcrnrlon=lon0.copy(), - resolution='c', ax=ax6, fix_aspect=False) - # m is an object which manages drawing to the map - # it also acts as a transformation function for geo coords to - # plotting coords - - # coastlines - m.drawcoastlines(ax=ax6) - # get first longitude meridian to plot - plon = np.ceil(lon0/60.)*60. - m.drawmeridians(np.arange(plon, plon+360.-22.5, 60), - labels=[0, 0, 0, 1], ax=ax6) - m.drawparallels(np.arange(-20, 20, 20)) + # lon0 = inst[0, 'glong'] + # lon1 = inst[-1, 'glong'] + # + # # enforce minimal longitude window, keep graphics from being too + # # disturbed + # if (lon1-lon0) < 90: + # lon0 -= 45. + # lon1 += 45. + # if lon1 > 720: + # lon0 -= 360. + # lon1 -= 360. + # inst[:, 'glong'] -= 360. + # + # # coastlines + # m.drawcoastlines(ax=ax6) + # # get first longitude meridian to plot + # plon = np.ceil(lon0/60.)*60. + # m.drawmeridians(np.arange(plon, plon+360.-22.5, 60), + # labels=[0, 0, 0, 1], ax=ax6) + # m.drawparallels(np.arange(-20, 20, 20)) + ax6.set_global() + ax6.coastlines() + ax6.set_xticks([0, 60, 120, 180, 240, 300, 360], crs=ccrs.PlateCarree()) + ax6.set_yticks([-90, -60, -30, 0, 30, 60, 90], crs=ccrs.PlateCarree()) + lon_formatter = LongitudeFormatter(zero_direction_label=True) + lat_formatter = LatitudeFormatter() + ax6.xaxis.set_major_formatter(lon_formatter) + ax6.yaxis.set_major_formatter(lat_formatter) # time midway through inst to plot terminator locations - midDate = inst.data.index[len(inst.data.index)//2] + # midDate = inst.data.index[len(inst.data.index)//2] # plot day/night terminators - try: - _ = m.nightshade(midDate) - except ValueError: - pass - - x, y = m(inst['glong'].values, inst['glat'].values) - points = np.array([x, y]).T.reshape(-1, 1, 2) - segments = np.concatenate([points[:-1], points[1:]], axis=1) - plot_norm = plt.Normalize(300, 500) - plot_cmap = plt.get_cmap('viridis') - - lc = LineCollection(segments, cmap=plot_cmap, norm=plot_norm, - linewidths=5.0) - lc.set_array(inst['alt'].values) - sm = plt.cm.ScalarMappable(cmap=plot_cmap, norm=plot_norm) - sm._A = [] - - ax6.add_collection(lc) - - ax6_bar = f.add_subplot(gs[4, 1]) + # try: + # _ = m.nightshade(midDate) + # except ValueError: + # pass + + ax6.plot(inst['glong'].values, inst['glat'].values) + # points = np.array([x, y]).T.reshape(-1, 1, 2) + # segments = np.concatenate([points[:-1], points[1:]], axis=1) + # plot_norm = plt.Normalize(300, 500) + # plot_cmap = plt.get_cmap('viridis') + # + # lc = LineCollection(segments, cmap=plot_cmap, norm=plot_norm, + # linewidths=5.0) + # lc.set_array(inst['alt'].values) + # sm = plt.cm.ScalarMappable(cmap=plot_cmap, norm=plot_norm) + # sm._A = [] + + # ax6.add_collection(lc) + + # ax6_bar = f.add_subplot(gs[4, 1]) # plt.colorbar(sm) - plt.colorbar(cax=ax6_bar, ax=ax6, mappable=sm, - orientation='vertical', - ticks=[300., 400., 500.]) - plt.xlabel('Altitude') - plt.ylabel('km') + # plt.colorbar(cax=ax6_bar, ax=ax6, mappable=sm, + # orientation='vertical', + # ticks=[300., 400., 500.]) + # plt.xlabel('Altitude') + # plt.ylabel('km') f.tight_layout() # buffer for overall title From 155bb2c54269a91e3bcc01fbd8a3628269a080c8 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Mon, 27 Jan 2020 18:05:17 -0500 Subject: [PATCH 101/162] ENH: add simple tests for plots --- summary_orbit_simulated_data.png | Bin 0 -> 243359 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 summary_orbit_simulated_data.png diff --git a/summary_orbit_simulated_data.png b/summary_orbit_simulated_data.png new file mode 100644 index 0000000000000000000000000000000000000000..9fcadddadba9d5bcd1dbad817c1856002d154f38 GIT binary patch literal 243359 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≀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 literal 0 HcmV?d00001 From a2c63878309968c953fc7fe09cfa40abde28e92d Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Mon, 27 Jan 2020 18:05:53 -0500 Subject: [PATCH 102/162] ENH: add simple tests for plots --- pysatMissions/tests/test.plot.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 pysatMissions/tests/test.plot.py diff --git a/pysatMissions/tests/test.plot.py b/pysatMissions/tests/test.plot.py new file mode 100644 index 00000000..0811ded1 --- /dev/null +++ b/pysatMissions/tests/test.plot.py @@ -0,0 +1,24 @@ +import pysat +from pysatMissions import plot as plt + + +class TestPlot(): + + def setup(self): + """Runs before every method to create a clean testing setup.""" + + from pysatMissions.instruments import pysat_ephem + self.testInst = pysat.Instrument(inst_module=pysat_ephem, tag='all', + sat_id='100') + self.testInst.load(date=pysat.datetime(2018, 1, 1)) + + def teardown(self): + """Clean up test environment after tests""" + + del self.testInst + + def test_plot_simulated_data(self): + """Try running the plot to see if warning or errors are generated""" + + plt.plot_simulated_data(self.testInst) + pass From 6c0e4eecff9713b67d4ed184d99b0585dc467102 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Mon, 27 Jan 2020 18:06:27 -0500 Subject: [PATCH 103/162] remove test plot --- summary_orbit_simulated_data.png | Bin 243359 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 summary_orbit_simulated_data.png diff --git a/summary_orbit_simulated_data.png b/summary_orbit_simulated_data.png deleted file mode 100644 index 9fcadddadba9d5bcd1dbad817c1856002d154f38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 243359 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≀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 From ddc6f69c13edc481b28d66eaffe03d224fdd8492 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Mon, 27 Jan 2020 18:11:15 -0500 Subject: [PATCH 104/162] fix file names --- pysatMissions/tests/{test.plot.py => test_plot.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename pysatMissions/tests/{test.plot.py => test_plot.py} (100%) diff --git a/pysatMissions/tests/test.plot.py b/pysatMissions/tests/test_plot.py similarity index 100% rename from pysatMissions/tests/test.plot.py rename to pysatMissions/tests/test_plot.py From 4fe9e1a7ad8ef3bce2264aa3388042f2a7a1fa29 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Mon, 27 Jan 2020 18:17:28 -0500 Subject: [PATCH 105/162] clean up commented code --- pysatMissions/plot.py | 57 ++----------------------------------------- 1 file changed, 2 insertions(+), 55 deletions(-) diff --git a/pysatMissions/plot.py b/pysatMissions/plot.py index ebb084e3..34fdf825 100644 --- a/pysatMissions/plot.py +++ b/pysatMissions/plot.py @@ -94,12 +94,10 @@ def plot_simulated_data(inst, filename=None): if time_diff > pds.Timedelta(minutes=285): ax6 = f.add_subplot(gs[4, 0]) # do long time plot - inst['glat'].plot(label='glat') # legend=True, label='mlat') - inst['mlt'].plot(label='mlt') # legend=True, label='mlt') + inst['glat'].plot(label='glat') + inst['mlt'].plot(label='mlt') plt.title('Satellite Position') plt.legend(['mlat', 'mlt'], loc=(1.01, 0.15)) - # inst['glong'].plot(secondary_y = True, label='glong')#legend=True, - # secondary_y = True, label='glong') else: @@ -110,28 +108,6 @@ def plot_simulated_data(inst, filename=None): s6pos = plt.get(ax6, 'position').bounds ax6.set_position([s1pos[0], s6pos[1]+.008, s1pos[2], s1pos[3]]) - # fix longitude range for plot. Pad longitude so that first sample - # aligned with inst measurement sample - # lon0 = inst[0, 'glong'] - # lon1 = inst[-1, 'glong'] - # - # # enforce minimal longitude window, keep graphics from being too - # # disturbed - # if (lon1-lon0) < 90: - # lon0 -= 45. - # lon1 += 45. - # if lon1 > 720: - # lon0 -= 360. - # lon1 -= 360. - # inst[:, 'glong'] -= 360. - # - # # coastlines - # m.drawcoastlines(ax=ax6) - # # get first longitude meridian to plot - # plon = np.ceil(lon0/60.)*60. - # m.drawmeridians(np.arange(plon, plon+360.-22.5, 60), - # labels=[0, 0, 0, 1], ax=ax6) - # m.drawparallels(np.arange(-20, 20, 20)) ax6.set_global() ax6.coastlines() ax6.set_xticks([0, 60, 120, 180, 240, 300, 360], crs=ccrs.PlateCarree()) @@ -140,36 +116,7 @@ def plot_simulated_data(inst, filename=None): lat_formatter = LatitudeFormatter() ax6.xaxis.set_major_formatter(lon_formatter) ax6.yaxis.set_major_formatter(lat_formatter) - # time midway through inst to plot terminator locations - # midDate = inst.data.index[len(inst.data.index)//2] - - # plot day/night terminators - # try: - # _ = m.nightshade(midDate) - # except ValueError: - # pass - ax6.plot(inst['glong'].values, inst['glat'].values) - # points = np.array([x, y]).T.reshape(-1, 1, 2) - # segments = np.concatenate([points[:-1], points[1:]], axis=1) - # plot_norm = plt.Normalize(300, 500) - # plot_cmap = plt.get_cmap('viridis') - # - # lc = LineCollection(segments, cmap=plot_cmap, norm=plot_norm, - # linewidths=5.0) - # lc.set_array(inst['alt'].values) - # sm = plt.cm.ScalarMappable(cmap=plot_cmap, norm=plot_norm) - # sm._A = [] - - # ax6.add_collection(lc) - - # ax6_bar = f.add_subplot(gs[4, 1]) - # plt.colorbar(sm) - # plt.colorbar(cax=ax6_bar, ax=ax6, mappable=sm, - # orientation='vertical', - # ticks=[300., 400., 500.]) - # plt.xlabel('Altitude') - # plt.ylabel('km') f.tight_layout() # buffer for overall title From e8a45321b030e4ef23a5a7f764c2eed896780d86 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Mon, 27 Jan 2020 18:29:05 -0500 Subject: [PATCH 106/162] TST: add cartopy to travis install --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 7930005e..214b2f10 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,6 +22,7 @@ before_install: - pip install 'pandas<0.25' - pip install xarray - pip install matplotlib + - pip install cartopy - pip install apexpy # Prepare modified pysat install From b138801ad8893ae6576dc0670f08bb68036194df Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Mon, 27 Jan 2020 18:30:11 -0500 Subject: [PATCH 107/162] ENH: Add numeric sat_id --- pysatMissions/instruments/pysat_ephem.py | 15 ++++++++------- pysatMissions/instruments/pysat_sgp4.py | 15 ++++++++------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/pysatMissions/instruments/pysat_ephem.py b/pysatMissions/instruments/pysat_ephem.py index 33fab53b..960a3810 100644 --- a/pysatMissions/instruments/pysat_ephem.py +++ b/pysatMissions/instruments/pysat_ephem.py @@ -83,13 +83,18 @@ def load(fnames, tag=None, sat_id=None, obs_long=0., obs_lat=0., obs_alt=0., tag : string Identifies a particular subset of satellite data sat_id : string - Satellite ID + Instrument satellite ID (accepts '' or a number (i.e., '10'), which + specifies the number of seconds to simulate the satellite) + (default = '') obs_long: float Longitude of the observer on the Earth's surface + (default = 0.) obs_lat: float Latitude of the observer on the Earth's surface + (default = 0.) obs_alt: float Altitude of the observer on the Earth's surface + (default = 0.) TLE1 : string First string for Two Line Element. Must be in TLE format TLE2 : string @@ -127,13 +132,9 @@ def load(fnames, tag=None, sat_id=None, obs_long=0., obs_lat=0., obs_alt=0., date = pysat.datetime(yr, month, day) # create timing at 1 Hz (for 1 day) - times = pds.date_range(start=date, end=date+pds.DateOffset(seconds=86399), + num = 86399 if sat_id == '' else int(sat_id) + times = pds.date_range(start=date, end=date+pds.DateOffset(seconds=num), freq='1S') - # reduce requirements if on testing server - # TODO Remove this when testing resources are higher - on_travis = os.environ.get('ONTRAVIS') == 'True' - if on_travis: - times = times[0:100] # the observer's (ground station) position on the Earth surface site = ephem.Observer() diff --git a/pysatMissions/instruments/pysat_sgp4.py b/pysatMissions/instruments/pysat_sgp4.py index 942d5cd0..c2e771a1 100644 --- a/pysatMissions/instruments/pysat_sgp4.py +++ b/pysatMissions/instruments/pysat_sgp4.py @@ -47,13 +47,18 @@ def load(fnames, tag=None, sat_id=None, obs_long=0., obs_lat=0., obs_alt=0., tag : string Identifies a particular subset of satellite data sat_id : string - Satellite ID + Instrument satellite ID (accepts '' or a number (i.e., '10'), which + specifies the number of seconds to simulate the satellite) + (default = '') obs_long: float Longitude of the observer on the Earth's surface + (default = 0.) obs_lat: float Latitude of the observer on the Earth's surface + (default = 0.) obs_alt: float Altitude of the observer on the Earth's surface + (default = 0.) TLE1 : string First string for Two Line Element. Must be in TLE format TLE2 : string @@ -97,13 +102,9 @@ def load(fnames, tag=None, sat_id=None, obs_long=0., obs_lat=0., obs_alt=0., date = pysat.datetime(yr, month, day) # create timing at 1 Hz (for 1 day) - times = pds.date_range(start=date, end=date+pds.DateOffset(seconds=86399), + num = 86399 if sat_id == '' else int(sat_id) + times = pds.date_range(start=date, end=date+pds.DateOffset(seconds=num), freq='1S') - # reduce requirements if on testing server - # TODO Remove this when testing resources are higher - on_travis = os.environ.get('ONTRAVIS') == 'True' - if on_travis: - times = times[0:100] # create list to hold satellite position, velocity position = [] From fba3a281e4f96f524789d6328cbd08467f703fa0 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Mon, 27 Jan 2020 18:30:55 -0500 Subject: [PATCH 108/162] TST: update testing points --- pysatMissions/tests/test_instruments.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pysatMissions/tests/test_instruments.py b/pysatMissions/tests/test_instruments.py index 732d03e1..38f596ff 100644 --- a/pysatMissions/tests/test_instruments.py +++ b/pysatMissions/tests/test_instruments.py @@ -13,7 +13,7 @@ class TestSGP4(): def setup(self): """Runs before every method to create a clean testing setup.""" from pysatMissions.instruments import pysat_sgp4 - self.testInst = pysat.Instrument(inst_module=pysat_sgp4, sat_id='101') + self.testInst = pysat.Instrument(inst_module=pysat_sgp4, sat_id='100') self.targets1 = ['position_eci_x', 'position_eci_y', 'position_eci_z', 'velocity_eci_x', 'velocity_eci_y', 'velocity_eci_z'] self.targets2 = [] From 17c8a3687be6f42de26365c6745b0e5871eaaa3e Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Mon, 27 Jan 2020 18:33:05 -0500 Subject: [PATCH 109/162] DOC: Update changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2e4d3b07..d175d1ec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,8 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Added support for readthedocs - Updates to testing environment - Split pysat_sgp4 into pysat_sgp4 and pysat_ephem to allow different propagators +- Replaced basemap with cartopy for python 3.x compatibility +- Added numeric strings as options for sat_id - Bugs - Fixed wrong metadata name for mlt in apexpy From 16c115018001b3f9769c7ca2a42f1e502a65d64b Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Mon, 27 Jan 2020 18:42:25 -0500 Subject: [PATCH 110/162] TST: manual install of proj --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 214b2f10..9491e60c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,6 +22,7 @@ before_install: - pip install 'pandas<0.25' - pip install xarray - pip install matplotlib + - pip install proj - pip install cartopy - pip install apexpy From 601b7b56a1cce0f8a543ce82cb42447c72be1c41 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Mon, 27 Jan 2020 18:46:05 -0500 Subject: [PATCH 111/162] docker install of proj --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 9491e60c..a3621d54 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,7 +22,7 @@ before_install: - pip install 'pandas<0.25' - pip install xarray - pip install matplotlib - - pip install proj + - docker pull osgeo/proj - pip install cartopy - pip install apexpy From 72b1f48b522fc683c2e9d626798c3ad4f3734e83 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Mon, 27 Jan 2020 18:49:23 -0500 Subject: [PATCH 112/162] apt-get proj --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index a3621d54..536f8bdf 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,6 +13,7 @@ addons: apt: packages: - gfortran + - proj-bin before_install: - pip install pytest-cov @@ -22,7 +23,6 @@ before_install: - pip install 'pandas<0.25' - pip install xarray - pip install matplotlib - - docker pull osgeo/proj - pip install cartopy - pip install apexpy From 20d254c15273cd5bd1dcad1ea5c7c995db328f59 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Mon, 27 Jan 2020 19:03:14 -0500 Subject: [PATCH 113/162] ENH: remove cartopy --- .travis.yml | 2 -- pysatMissions/plot.py | 37 ++++++------------------------------- 2 files changed, 6 insertions(+), 33 deletions(-) diff --git a/.travis.yml b/.travis.yml index 536f8bdf..7930005e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,7 +13,6 @@ addons: apt: packages: - gfortran - - proj-bin before_install: - pip install pytest-cov @@ -23,7 +22,6 @@ before_install: - pip install 'pandas<0.25' - pip install xarray - pip install matplotlib - - pip install cartopy - pip install apexpy # Prepare modified pysat install diff --git a/pysatMissions/plot.py b/pysatMissions/plot.py index 34fdf825..c0f075c6 100644 --- a/pysatMissions/plot.py +++ b/pysatMissions/plot.py @@ -12,8 +12,6 @@ def plot_simulated_data(inst, filename=None): import matplotlib import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec - import cartopy.crs as ccrs - from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter if filename is None: out_fname = './summary_orbit_simulated_data.png' @@ -88,35 +86,12 @@ def plot_simulated_data(inst, filename=None): # # xlabels = [label[0:6] for label in xlabels] plt.setp(ax4.xaxis.get_majorticklabels(), rotation=20, ha='right') - # do world plot if time to be plotted is less than 285 minutes, less than - # 3 orbits - time_diff = inst.data.index[-1] - inst.data.index[0] - if time_diff > pds.Timedelta(minutes=285): - ax6 = f.add_subplot(gs[4, 0]) - # do long time plot - inst['glat'].plot(label='glat') - inst['mlt'].plot(label='mlt') - plt.title('Satellite Position') - plt.legend(['mlat', 'mlt'], loc=(1.01, 0.15)) - - else: - - # make map the same size as the other plots - ax6 = f.add_subplot(gs[4, 0], - projection=ccrs.PlateCarree(central_longitude=180)) - s1pos = plt.get(ax, 'position').bounds - s6pos = plt.get(ax6, 'position').bounds - ax6.set_position([s1pos[0], s6pos[1]+.008, s1pos[2], s1pos[3]]) - - ax6.set_global() - ax6.coastlines() - ax6.set_xticks([0, 60, 120, 180, 240, 300, 360], crs=ccrs.PlateCarree()) - ax6.set_yticks([-90, -60, -30, 0, 30, 60, 90], crs=ccrs.PlateCarree()) - lon_formatter = LongitudeFormatter(zero_direction_label=True) - lat_formatter = LatitudeFormatter() - ax6.xaxis.set_major_formatter(lon_formatter) - ax6.yaxis.set_major_formatter(lat_formatter) - ax6.plot(inst['glong'].values, inst['glat'].values) + f.add_subplot(gs[4, 0]) + # do long time plot + inst['glat'].plot(label='glat') + inst['mlt'].plot(label='mlt') + plt.title('Satellite Position') + plt.legend(['mlat', 'mlt'], loc=(1.01, 0.15)) f.tight_layout() # buffer for overall title From 804de2d1480158f9498bfcc90ccef06161ea4964 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Mon, 27 Jan 2020 19:10:26 -0500 Subject: [PATCH 114/162] DOC: update chagelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d175d1ec..f069d040 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,7 +10,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Added support for readthedocs - Updates to testing environment - Split pysat_sgp4 into pysat_sgp4 and pysat_ephem to allow different propagators -- Replaced basemap with cartopy for python 3.x compatibility +- Removed basemap - Added numeric strings as options for sat_id - Bugs - Fixed wrong metadata name for mlt in apexpy From 4290ed26d66f11bdedc63d3bbb37e6e912ef5683 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Mon, 27 Jan 2020 19:15:06 -0500 Subject: [PATCH 115/162] TST: update plot test --- pysatMissions/tests/test_plot.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pysatMissions/tests/test_plot.py b/pysatMissions/tests/test_plot.py index 0811ded1..21ec4e17 100644 --- a/pysatMissions/tests/test_plot.py +++ b/pysatMissions/tests/test_plot.py @@ -21,4 +21,5 @@ def test_plot_simulated_data(self): """Try running the plot to see if warning or errors are generated""" plt.plot_simulated_data(self.testInst) - pass + + assert True From 40a2db148d4efae11355ece30ddc164fcb5d0664 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Tue, 28 Jan 2020 16:14:36 -0500 Subject: [PATCH 116/162] Post-review of method names --- README.md | 4 +-- docs/tutorial.rst | 4 +-- pysatMissions/instruments/pysat_ephem.py | 36 +++++++++---------- pysatMissions/instruments/pysat_sgp4.py | 6 ++-- pysatMissions/methods/pyglow.py | 8 ++--- pysatMissions/tests/test_methods_aacgmv2.py | 4 +-- pysatMissions/tests/test_methods_apexpy.py | 4 +-- pysatMissions/tests/test_methods_pyglow.py | 8 ++--- .../tests/test_methods_spacecraft.py | 14 ++++---- 9 files changed, 44 insertions(+), 44 deletions(-) diff --git a/README.md b/README.md index ec34ed41..14bf9356 100644 --- a/README.md +++ b/README.md @@ -68,10 +68,10 @@ The methods that run empirical models can also be exported to any pysat instrume ``` import pysat -import pysatMissions.methods.pyglow as methglow +import pysatMissions.methods.pyglow as mm_glow ivm = pysat.Instrument(platform='cnofs', name='ivm') -ivm.custom.add(methglow.add_iri_thermal_plasma, 'modify', glat_label='glat', +ivm.custom.add(mm_glow.add_iri_thermal_plasma, 'modify', glat_label='glat', glong_label='glon', alt_label='altitude') ``` Once the custom function is added, the model will automatically be run when the dataset is loaded. diff --git a/docs/tutorial.rst b/docs/tutorial.rst index bda6c125..258c7466 100644 --- a/docs/tutorial.rst +++ b/docs/tutorial.rst @@ -35,9 +35,9 @@ A number of methods are included to invoke several python wrappers for empirical .. code:: python import pysat - from pysatMissions.methods import pyglow as methglow + from pysatMissions.methods import pyglow as mm_glow ivm = pysat.Instrument(platform='cnofs', name='ivm') - ivm.custom.add(methglow.add_iri_thermal_plasma, 'modify', 'end', glat_label='glat', glong_label='glon', alt_label='altitude') + ivm.custom.add(mm_glow.add_iri_thermal_plasma, 'modify', 'end', glat_label='glat', glong_label='glon', alt_label='altitude') Note that in this case, the latitude, longitude, and altitude variable names of the instrument must be specified since they are not identical to the default names in the function. diff --git a/pysatMissions/instruments/pysat_ephem.py b/pysatMissions/instruments/pysat_ephem.py index 33fab53b..fd1b95ee 100644 --- a/pysatMissions/instruments/pysat_ephem.py +++ b/pysatMissions/instruments/pysat_ephem.py @@ -15,7 +15,7 @@ import numpy as np import pandas as pds import pysat -from pysatMissions.instruments import _core as meth +from pysatMissions.instruments import _core as mcore # pysat required parameters platform = 'pysat' @@ -39,33 +39,33 @@ def init(self): Horiontal Wind Model (HWM). """ - import pysatMissions.methods.aacgmv2 as methaacgm - import pysatMissions.methods.apexpy as methapex - import pysatMissions.methods.pyglow as methglow - import pysatMissions.methods.spacecraft as methsc - - self.custom.add(methapex.add_quasi_dipole_coordinates, 'modify') - self.custom.add(methaacgm.add_aacgm_coordinates, 'modify') - self.custom.add(methsc.calculate_ecef_velocity, 'modify') - self.custom.add(methsc.add_sc_attitude_vectors, 'modify') + import pysatMissions.methods.aacgmv2 as mm_aacgm + import pysatMissions.methods.apexpy as mm_apex + import pysatMissions.methods.pyglow as mm_glow + import pysatMissions.methods.spacecraft as mm_sc + + self.custom.add(mm_apex.add_quasi_dipole_coordinates, 'modify') + self.custom.add(mm_aacgm.add_aacgm_coordinates, 'modify') + self.custom.add(mm_sc.calculate_ecef_velocity, 'modify') + self.custom.add(mm_sc.add_sc_attitude_vectors, 'modify') # project simulated vectors onto s/c basis # IGRF - self.custom.add(methglow.add_igrf, 'modify') + self.custom.add(mm_glow.add_igrf, 'modify') # create metadata to be added along with vector projection in_meta = {'desc': 'IGRF geomagnetic field expressed in the s/c basis.', 'units': 'nT'} # project IGRF - self.custom.add(methsc.project_ecef_vector_onto_sc, 'modify', 'end', + self.custom.add(mm_sc.project_ecef_vector_onto_sc, 'modify', 'end', 'B_ecef_x', 'B_ecef_y', 'B_ecef_z', 'B_sc_x', 'B_sc_y', 'B_sc_z', meta=[in_meta.copy(), in_meta.copy(), in_meta.copy()]) # Thermal Ion Parameters - self.custom.add(methglow.add_iri_thermal_plasma, 'modify') + self.custom.add(mm_glow.add_iri_thermal_plasma, 'modify') # Thermal Neutral parameters - self.custom.add(methglow.add_msis, 'modify') - self.custom.add(methglow.add_hwm_winds_and_ecef_vectors, 'modify') + self.custom.add(mm_glow.add_msis, 'modify') + self.custom.add(mm_glow.add_hwm_winds_and_ecef_vectors, 'modify') # project total wind vector - self.custom.add(methglow.project_hwm_onto_sc, 'modify') + self.custom.add(mm_glow.project_hwm_onto_sc, 'modify') def load(fnames, tag=None, sat_id=None, obs_long=0., obs_lat=0., obs_alt=0., @@ -185,8 +185,8 @@ def load(fnames, tag=None, sat_id=None, obs_long=0., obs_lat=0., obs_alt=0., return data, meta.copy() -list_files = functools.partial(meth._list_files) -download = functools.partial(meth._download) +list_files = functools.partial(mcore._list_files) +download = functools.partial(mcore._download) # create metadata corresponding to variables in load routine just above # made once here rather than regenerate every load call diff --git a/pysatMissions/instruments/pysat_sgp4.py b/pysatMissions/instruments/pysat_sgp4.py index 942d5cd0..1e361c7d 100644 --- a/pysatMissions/instruments/pysat_sgp4.py +++ b/pysatMissions/instruments/pysat_sgp4.py @@ -12,7 +12,7 @@ import functools import pandas as pds import pysat -from pysatMissions.instruments import _core as meth +from pysatMissionPlanning.instruments import _core as mcore # pysat required parameters platform = 'pysat' @@ -130,8 +130,8 @@ def load(fnames, tag=None, sat_id=None, obs_long=0., obs_lat=0., obs_alt=0., return data, meta.copy() -list_files = functools.partial(meth._list_files) -download = functools.partial(meth._download) +list_files = functools.partial(mcore._list_files) +download = functools.partial(mcore._download) # create metadata corresponding to variables in load routine just above # made once here rather than regenerate every load call diff --git a/pysatMissions/methods/pyglow.py b/pysatMissions/methods/pyglow.py index 5ebcfaad..c4f69667 100644 --- a/pysatMissions/methods/pyglow.py +++ b/pysatMissions/methods/pyglow.py @@ -423,7 +423,7 @@ def get_ecef_wind_meta(coord='x', geo='mer'): def project_hwm_onto_sc(inst): - import pysatMissions.methods.spacecraft as methatt + import pysatMissions.methods.spacecraft as mm_sc def get_wind_comp(inst, direction='x'): unit_zon = 'unit_zonal_wind_ecef_' + direction @@ -444,9 +444,9 @@ def get_wind_meta(coord='x'): inst['total_wind_y'] = get_wind_comp(inst, direction='y') inst['total_wind_z'] = get_wind_comp(inst, direction='z') - methatt.project_ecef_vector_onto_sc(inst, 'total_wind_x', 'total_wind_y', - 'total_wind_z', 'sim_wind_sc_x', - 'sim_wind_sc_y', 'sim_wind_sc_z') + mm_sc.project_ecef_vector_onto_sc(inst, 'total_wind_x', 'total_wind_y', + 'total_wind_z', 'sim_wind_sc_x', + 'sim_wind_sc_y', 'sim_wind_sc_z') inst.meta['sim_wind_sc_x'] = get_wind_meta('x') inst.meta['sim_wind_sc_y'] = get_wind_meta('y') diff --git a/pysatMissions/tests/test_methods_aacgmv2.py b/pysatMissions/tests/test_methods_aacgmv2.py index 3af7bc10..b87d7baa 100644 --- a/pysatMissions/tests/test_methods_aacgmv2.py +++ b/pysatMissions/tests/test_methods_aacgmv2.py @@ -3,7 +3,7 @@ import numpy as np import pysat -import pysatMissions.methods.aacgmv2 as methaacgm +import pysatMissions.methods.aacgmv2 as mm_aacgm def add_altitude(inst, altitude=400.0): @@ -25,7 +25,7 @@ def teardown(self): def test_add_aacgm_coordinates(self): """Test adding thermal plasma data to test inst""" - self.testInst.custom.add(methaacgm.add_aacgm_coordinates, 'modify', + self.testInst.custom.add(mm_aacgm.add_aacgm_coordinates, 'modify', glat_label='latitude', glong_label='longitude', alt_label='altitude') diff --git a/pysatMissions/tests/test_methods_apexpy.py b/pysatMissions/tests/test_methods_apexpy.py index bb05bc04..6f0d26ab 100644 --- a/pysatMissions/tests/test_methods_apexpy.py +++ b/pysatMissions/tests/test_methods_apexpy.py @@ -3,7 +3,7 @@ import numpy as np import pysat -import pysatMissions.methods.apexpy as methapex +import pysatMissions.methods.apexpy as mm_apex def add_altitude(inst, altitude=400.0): @@ -25,7 +25,7 @@ def teardown(self): def test_add_quasi_dipole_coordinates(self): """Test adding thermal plasma data to test inst""" - self.testInst.custom.add(methapex.add_quasi_dipole_coordinates, + self.testInst.custom.add(mm_apex.add_quasi_dipole_coordinates, 'modify', glat_label='latitude', glong_label='longitude', diff --git a/pysatMissions/tests/test_methods_pyglow.py b/pysatMissions/tests/test_methods_pyglow.py index a807ab0d..1b9eb95a 100644 --- a/pysatMissions/tests/test_methods_pyglow.py +++ b/pysatMissions/tests/test_methods_pyglow.py @@ -3,7 +3,7 @@ import numpy as np import pysat -from pysatMissions.methods import pyglow as methglow +from pysatMissions.methods import pyglow as mm_glow def add_altitude(inst, altitude=400.0): @@ -25,7 +25,7 @@ def teardown(self): def test_add_iri_thermal_plasma(self): """Test adding thermal plasma data to test inst""" - self.testInst.custom.add(methglow.add_iri_thermal_plasma, 'modify', + self.testInst.custom.add(mm_glow.add_iri_thermal_plasma, 'modify', glat_label='latitude', glong_label='longitude', alt_label='altitude') @@ -41,7 +41,7 @@ def test_add_iri_thermal_plasma(self): def test_add_igrf(self): """Test adding igrf model to test inst""" - self.testInst.custom.add(methglow.add_igrf, 'modify', + self.testInst.custom.add(mm_glow.add_igrf, 'modify', glat_label='latitude', glong_label='longitude', alt_label='altitude') @@ -57,7 +57,7 @@ def test_add_igrf(self): def test_add_msis(self): """Test adding msis model to test inst""" - self.testInst.custom.add(methglow.add_msis, 'modify', + self.testInst.custom.add(mm_glow.add_msis, 'modify', glat_label='latitude', glong_label='longitude', alt_label='altitude') diff --git a/pysatMissions/tests/test_methods_spacecraft.py b/pysatMissions/tests/test_methods_spacecraft.py index 3e747ed6..c8c105bc 100644 --- a/pysatMissions/tests/test_methods_spacecraft.py +++ b/pysatMissions/tests/test_methods_spacecraft.py @@ -3,7 +3,7 @@ import numpy as np import pysat -from pysatMissions.methods import spacecraft as methsc +from pysatMissions.methods import spacecraft as mm_sc def add_eci(inst): @@ -39,7 +39,7 @@ def teardown(self): def test_calculate_ecef_velocity(self): # TODO: check if calculations are correct - self.testInst.custom.add(methsc.calculate_ecef_velocity, 'modify') + self.testInst.custom.add(mm_sc.calculate_ecef_velocity, 'modify') self.testInst.load(date=pysat.datetime(2009, 1, 1)) targets = ['velocity_ecef_x', 'velocity_ecef_y', 'velocity_ecef_z'] for target in targets: @@ -54,8 +54,8 @@ def test_calculate_ecef_velocity(self): def test_add_sc_attitude_vectors(self): # TODO: check if calculations are correct - self.testInst.custom.add(methsc.calculate_ecef_velocity, 'modify') - self.testInst.custom.add(methsc.add_sc_attitude_vectors, 'modify') + self.testInst.custom.add(mm_sc.calculate_ecef_velocity, 'modify') + self.testInst.custom.add(mm_sc.add_sc_attitude_vectors, 'modify') self.testInst.load(date=pysat.datetime(2009, 1, 1)) targets = ['sc_xhat_ecef_x', 'sc_xhat_ecef_y', 'sc_xhat_ecef_z', 'sc_yhat_ecef_x', 'sc_yhat_ecef_y', 'sc_yhat_ecef_z', @@ -72,10 +72,10 @@ def test_add_sc_attitude_vectors(self): def test_project_ecef_vector_onto_sc(self): # TODO: check if calculations are correct - self.testInst.custom.add(methsc.calculate_ecef_velocity, 'modify') - self.testInst.custom.add(methsc.add_sc_attitude_vectors, 'modify') + self.testInst.custom.add(mm_sc.calculate_ecef_velocity, 'modify') + self.testInst.custom.add(mm_sc.add_sc_attitude_vectors, 'modify') self.testInst.custom.add(add_fake_data, 'modify') - self.testInst.custom.add(methsc.project_ecef_vector_onto_sc, 'modify', + self.testInst.custom.add(mm_sc.project_ecef_vector_onto_sc, 'modify', 'end', 'ax', 'ay', 'az', 'bx', 'by', 'bz') self.testInst.load(date=pysat.datetime(2009, 1, 1)) targets = ['bx', 'by', 'bz'] From 4397aae62420dc73074e4da012001683e4141f78 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Tue, 28 Jan 2020 16:19:57 -0500 Subject: [PATCH 117/162] BUG: typo --- pysatMissions/instruments/pysat_sgp4.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pysatMissions/instruments/pysat_sgp4.py b/pysatMissions/instruments/pysat_sgp4.py index 1e361c7d..a918ef29 100644 --- a/pysatMissions/instruments/pysat_sgp4.py +++ b/pysatMissions/instruments/pysat_sgp4.py @@ -12,7 +12,7 @@ import functools import pandas as pds import pysat -from pysatMissionPlanning.instruments import _core as mcore +from pysatMissions.instruments import _core as mcore # pysat required parameters platform = 'pysat' From 386db682fd2e8e3ca8f54dae57b4dfb96d434807 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Tue, 28 Jan 2020 18:14:35 -0500 Subject: [PATCH 118/162] ENH: simplify instrument load routines --- pysatMissions/instruments/_core.py | 17 ++++++++ pysatMissions/instruments/pysat_ephem.py | 50 ++++++++++-------------- pysatMissions/instruments/pysat_sgp4.py | 19 +++------ 3 files changed, 42 insertions(+), 44 deletions(-) diff --git a/pysatMissions/instruments/_core.py b/pysatMissions/instruments/_core.py index 1e1e5b80..766e116c 100644 --- a/pysatMissions/instruments/_core.py +++ b/pysatMissions/instruments/_core.py @@ -2,6 +2,7 @@ handles the default pysat functions for simulated instruments """ +import os import pandas as pds import pysat @@ -22,3 +23,19 @@ def _download(date_array, tag, sat_id, data_path=None): """ Data is simulated so no download routine is possible. Simple pass function""" pass + + +def _get_times(fnames, sat_id): + # grab date from filename + parts = os.path.split(fnames[0])[-1].split('-') + yr = int(parts[0]) + month = int(parts[1]) + day = int(parts[2][0:2]) + date = pysat.datetime(yr, month, day) + + # create timing at 1 Hz (for 1 day) + num = 86399 if sat_id == '' else int(sat_id) + times = pds.date_range(start=date, end=date+pds.DateOffset(seconds=num), + freq='1S') + + return times diff --git a/pysatMissions/instruments/pysat_ephem.py b/pysatMissions/instruments/pysat_ephem.py index 960a3810..434ebcd0 100644 --- a/pysatMissions/instruments/pysat_ephem.py +++ b/pysatMissions/instruments/pysat_ephem.py @@ -10,12 +10,11 @@ from __future__ import print_function from __future__ import absolute_import -import os import functools import numpy as np import pandas as pds import pysat -from pysatMissions.instruments import _core as meth +from pysatMissions.instruments import _core as mcore # pysat required parameters platform = 'pysat' @@ -39,33 +38,33 @@ def init(self): Horiontal Wind Model (HWM). """ - import pysatMissions.methods.aacgmv2 as methaacgm - import pysatMissions.methods.apexpy as methapex - import pysatMissions.methods.pyglow as methglow - import pysatMissions.methods.spacecraft as methsc - - self.custom.add(methapex.add_quasi_dipole_coordinates, 'modify') - self.custom.add(methaacgm.add_aacgm_coordinates, 'modify') - self.custom.add(methsc.calculate_ecef_velocity, 'modify') - self.custom.add(methsc.add_sc_attitude_vectors, 'modify') + import pysatMissions.methods.aacgmv2 as mm_aacgm + import pysatMissions.methods.apexpy as mm_apex + import pysatMissions.methods.pyglow as mm_glow + import pysatMissions.methods.spacecraft as mm_sc + + self.custom.add(mm_apex.add_quasi_dipole_coordinates, 'modify') + self.custom.add(mm_aacgm.add_aacgm_coordinates, 'modify') + self.custom.add(mm_sc.calculate_ecef_velocity, 'modify') + self.custom.add(mm_sc.add_sc_attitude_vectors, 'modify') # project simulated vectors onto s/c basis # IGRF - self.custom.add(methglow.add_igrf, 'modify') + self.custom.add(mm_glow.add_igrf, 'modify') # create metadata to be added along with vector projection in_meta = {'desc': 'IGRF geomagnetic field expressed in the s/c basis.', 'units': 'nT'} # project IGRF - self.custom.add(methsc.project_ecef_vector_onto_sc, 'modify', 'end', + self.custom.add(mm_sc.project_ecef_vector_onto_sc, 'modify', 'end', 'B_ecef_x', 'B_ecef_y', 'B_ecef_z', 'B_sc_x', 'B_sc_y', 'B_sc_z', meta=[in_meta.copy(), in_meta.copy(), in_meta.copy()]) # Thermal Ion Parameters - self.custom.add(methglow.add_iri_thermal_plasma, 'modify') + self.custom.add(mm_glow.add_iri_thermal_plasma, 'modify') # Thermal Neutral parameters - self.custom.add(methglow.add_msis, 'modify') - self.custom.add(methglow.add_hwm_winds_and_ecef_vectors, 'modify') + self.custom.add(mm_glow.add_msis, 'modify') + self.custom.add(mm_glow.add_hwm_winds_and_ecef_vectors, 'modify') # project total wind vector - self.custom.add(methglow.project_hwm_onto_sc, 'modify') + self.custom.add(mm_glow.project_hwm_onto_sc, 'modify') def load(fnames, tag=None, sat_id=None, obs_long=0., obs_lat=0., obs_alt=0., @@ -124,17 +123,8 @@ def load(fnames, tag=None, sat_id=None, obs_long=0., obs_lat=0., obs_alt=0., if TLE2 is not None: line2 = TLE2 - # grab date from filename - parts = os.path.split(fnames[0])[-1].split('-') - yr = int(parts[0]) - month = int(parts[1]) - day = int(parts[2][0:2]) - date = pysat.datetime(yr, month, day) - - # create timing at 1 Hz (for 1 day) - num = 86399 if sat_id == '' else int(sat_id) - times = pds.date_range(start=date, end=date+pds.DateOffset(seconds=num), - freq='1S') + # Extract list of times from filenames and sat_id + times = mcore._get_times(fnames, sat_id) # the observer's (ground station) position on the Earth surface site = ephem.Observer() @@ -186,8 +176,8 @@ def load(fnames, tag=None, sat_id=None, obs_long=0., obs_lat=0., obs_alt=0., return data, meta.copy() -list_files = functools.partial(meth._list_files) -download = functools.partial(meth._download) +list_files = functools.partial(mcore._list_files) +download = functools.partial(mcore._download) # create metadata corresponding to variables in load routine just above # made once here rather than regenerate every load call diff --git a/pysatMissions/instruments/pysat_sgp4.py b/pysatMissions/instruments/pysat_sgp4.py index c2e771a1..261385a4 100644 --- a/pysatMissions/instruments/pysat_sgp4.py +++ b/pysatMissions/instruments/pysat_sgp4.py @@ -12,7 +12,7 @@ import functools import pandas as pds import pysat -from pysatMissions.instruments import _core as meth +from pysatMissions.instruments import _core as mcore # pysat required parameters platform = 'pysat' @@ -94,17 +94,8 @@ def load(fnames, tag=None, sat_id=None, obs_long=0., obs_lat=0., obs_alt=0., # according to module webpage, wgs72 is common satellite = twoline2rv(line1, line2, wgs72) - # grab date from filename - parts = os.path.split(fnames[0])[-1].split('-') - yr = int(parts[0]) - month = int(parts[1]) - day = int(parts[2][0:2]) - date = pysat.datetime(yr, month, day) - - # create timing at 1 Hz (for 1 day) - num = 86399 if sat_id == '' else int(sat_id) - times = pds.date_range(start=date, end=date+pds.DateOffset(seconds=num), - freq='1S') + # Extract list of times from filenames and sat_id + times = mcore._get_times(fnames, sat_id) # create list to hold satellite position, velocity position = [] @@ -131,8 +122,8 @@ def load(fnames, tag=None, sat_id=None, obs_long=0., obs_lat=0., obs_alt=0., return data, meta.copy() -list_files = functools.partial(meth._list_files) -download = functools.partial(meth._download) +list_files = functools.partial(mcore._list_files) +download = functools.partial(mcore._download) # create metadata corresponding to variables in load routine just above # made once here rather than regenerate every load call From 27d11ae6e6f391284b40395af28677bdb7aaa533 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Tue, 28 Jan 2020 18:17:34 -0500 Subject: [PATCH 119/162] update codeclimate plugins --- .codeclimate.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.codeclimate.yml b/.codeclimate.yml index 2ed1639d..70344671 100644 --- a/.codeclimate.yml +++ b/.codeclimate.yml @@ -1,7 +1,11 @@ # Save as .codeclimate.yml (note leading .) in project root directory -engines: +plugins: radon: enabled: true + pep8: + enabled: true + sonar-python: + enabled: true ratings: paths: - "**.py" From 70afc1ecd08043656d8a1c7d8f21320da1c162d9 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Tue, 28 Jan 2020 18:33:35 -0500 Subject: [PATCH 120/162] DOC: update comments / changelog --- CHANGELOG.md | 1 + pysatMissions/instruments/_core.py | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f069d040..eac59b35 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Split pysat_sgp4 into pysat_sgp4 and pysat_ephem to allow different propagators - Removed basemap - Added numeric strings as options for sat_id +- Added `_get_times` to streamline time steps for simulated instruments - Bugs - Fixed wrong metadata name for mlt in apexpy diff --git a/pysatMissions/instruments/_core.py b/pysatMissions/instruments/_core.py index 766e116c..207d4fa2 100644 --- a/pysatMissions/instruments/_core.py +++ b/pysatMissions/instruments/_core.py @@ -26,6 +26,8 @@ def _download(date_array, tag, sat_id, data_path=None): def _get_times(fnames, sat_id): + """Construct list of times for simulated instruments""" + # grab date from filename parts = os.path.split(fnames[0])[-1].split('-') yr = int(parts[0]) @@ -33,7 +35,8 @@ def _get_times(fnames, sat_id): day = int(parts[2][0:2]) date = pysat.datetime(yr, month, day) - # create timing at 1 Hz (for 1 day) + # create timing at 1 Hz (defaults to 1 day) + # Allow numeric string to set number of time steps num = 86399 if sat_id == '' else int(sat_id) times = pds.date_range(start=date, end=date+pds.DateOffset(seconds=num), freq='1S') From 19a8768a340286a277b24641ceac933361577c5a Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Wed, 29 Jan 2020 10:08:06 -0500 Subject: [PATCH 121/162] post-review updates --- pysatMissions/plot.py | 24 ++++++++---------------- pysatMissions/tests/test_plot.py | 4 ++-- 2 files changed, 10 insertions(+), 18 deletions(-) diff --git a/pysatMissions/plot.py b/pysatMissions/plot.py index c0f075c6..172e5558 100644 --- a/pysatMissions/plot.py +++ b/pysatMissions/plot.py @@ -4,7 +4,6 @@ """ import numpy as np -import pandas as pds def plot_simulated_data(inst, filename=None): @@ -25,7 +24,7 @@ def plot_simulated_data(inst, filename=None): for item in idx: inst[item:, 'glong'] += 360. - f = plt.figure(figsize=(8.5, 7)) + fig = plt.figure(figsize=(8.5, 7)) time1 = inst.data.index[0].strftime('%Y-%h-%d %H:%M:%S') if inst.data.index[0].date() == inst.data.index[-1].date(): @@ -39,7 +38,7 @@ def plot_simulated_data(inst, filename=None): # create grid for plots gs = gridspec.GridSpec(5, 2, width_ratios=[12, 1]) - ax = f.add_subplot(gs[0, 0]) + ax = fig.add_subplot(gs[0, 0]) plt.plot(np.log10(inst['ion_dens']), 'k', label='total') plt.plot(np.log10(inst['ion_dens']*inst['frac_dens_o']), 'r', label='O+') plt.plot(np.log10(inst['ion_dens']*inst['frac_dens_h']), 'b', label='H+') @@ -49,7 +48,7 @@ def plot_simulated_data(inst, filename=None): ax.set_ylim([1., 6.]) ax.axes.get_xaxis().set_visible(False) - ax2 = f.add_subplot(gs[1, 0], sharex=ax) + ax2 = fig.add_subplot(gs[1, 0], sharex=ax) plt.plot(inst['ion_temp']) plt.legend(loc=(1.01, 0.15)) ax2.set_title('Ion Temperature') @@ -57,10 +56,7 @@ def plot_simulated_data(inst, filename=None): ax2.set_ylim([500., 1500.]) ax2.axes.get_xaxis().set_visible(False) - # determine altitudes greater than 770 km - # idx, = np.where(inst['alt'] > 770.) - - ax3 = f.add_subplot(gs[2, 0], sharex=ax) + ax3 = fig.add_subplot(gs[2, 0], sharex=ax) plt.plot(inst['sim_wind_sc_x'], color='b', linestyle='--') plt.plot(inst['sim_wind_sc_y'], color='r', linestyle='--') plt.plot(inst['sim_wind_sc_z'], color='g', linestyle='--') @@ -70,32 +66,28 @@ def plot_simulated_data(inst, filename=None): ax3.axes.get_xaxis().set_visible(False) plt.legend(loc=(1.01, 0.15)) ax3.xaxis.set_major_formatter(matplotlib.dates.DateFormatter('%H:%M')) - # # xlabels = [label[0:6] for label in xlabels] - # plt.setp(ax3.xaxis.get_majorticklabels(), rotation=20, ha='right') - ax4 = f.add_subplot(gs[3, 0], sharex=ax) + ax4 = fig.add_subplot(gs[3, 0], sharex=ax) plt.plot(inst['B_sc_x']*1e5, color='b', linestyle='--') plt.plot(inst['B_sc_y']*1e5, color='r', linestyle='--') plt.plot(inst['B_sc_z']*1e5, color='g', linestyle='--') ax4.set_title('Magnetic Field in S/C X, Y, and Z') ax4.set_ylabel('Gauss') ax4.set_ylim([-3.5, 3.5]) - # ax3.axes.get_xaxis().set_visible(False) plt.legend(loc=(1.01, 0.15)) ax4.xaxis.set_major_formatter(matplotlib.dates.DateFormatter('%H:%M')) - # # xlabels = [label[0:6] for label in xlabels] plt.setp(ax4.xaxis.get_majorticklabels(), rotation=20, ha='right') - f.add_subplot(gs[4, 0]) + fig.add_subplot(gs[4, 0]) # do long time plot inst['glat'].plot(label='glat') inst['mlt'].plot(label='mlt') plt.title('Satellite Position') plt.legend(['mlat', 'mlt'], loc=(1.01, 0.15)) - f.tight_layout() + fig.tight_layout() # buffer for overall title - f.subplots_adjust(bottom=0.06, top=0.91, right=.91) + fig.subplots_adjust(bottom=0.06, top=0.91, right=.91) plt.subplots_adjust(hspace=0.44) plt.savefig(out_fname) diff --git a/pysatMissions/tests/test_plot.py b/pysatMissions/tests/test_plot.py index 21ec4e17..0468b9aa 100644 --- a/pysatMissions/tests/test_plot.py +++ b/pysatMissions/tests/test_plot.py @@ -1,5 +1,5 @@ import pysat -from pysatMissions import plot as plt +from pysatMissions import plot as mplt class TestPlot(): @@ -20,6 +20,6 @@ def teardown(self): def test_plot_simulated_data(self): """Try running the plot to see if warning or errors are generated""" - plt.plot_simulated_data(self.testInst) + mplt.plot_simulated_data(self.testInst) assert True From a31f6a36d0f26ee46a8c5cffa00648f6571d1f53 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Fri, 31 Jan 2020 20:35:57 -0500 Subject: [PATCH 122/162] TST: update without pandas cap --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 7930005e..106976a0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,7 +19,7 @@ before_install: - pip install coveralls - pip install future # Install version specific packages for 3.5 - - pip install 'pandas<0.25' + - pip install pandas - pip install xarray - pip install matplotlib - pip install apexpy @@ -34,6 +34,7 @@ before_install: # set up data directory - mkdir /home/travis/build/pysatData # install pysat + - git checkout develop-3 - python setup.py install >/dev/null # install pyglow, space science models From 868f5200857fedeb4767d3e577427647f6213b83 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Mon, 17 Feb 2020 12:38:50 -0500 Subject: [PATCH 123/162] TST: update CI environment --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 7930005e..18d05ec5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,7 +3,6 @@ language: python dist: xenial jobs: include: - - python: 3.5 - python: 3.6 - python: 3.7 - python: 3.8 @@ -18,8 +17,8 @@ before_install: - pip install pytest-cov - pip install coveralls - pip install future - # Install version specific packages for 3.5 - - pip install 'pandas<0.25' + # Install version specific packages + - pip install pandas - pip install xarray - pip install matplotlib - pip install apexpy @@ -31,6 +30,7 @@ before_install: - git clone https://github.com/pysat/pysat.git >/dev/null - echo 'installing pysat' - cd ./pysat + - git checkout develop-3 # set up data directory - mkdir /home/travis/build/pysatData # install pysat From 193ddb71876e19877b2c45f5025c973cd9c50946 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Mon, 17 Feb 2020 12:48:55 -0500 Subject: [PATCH 124/162] TST: add minimum test for NEP 029 --- .travis.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.travis.yml b/.travis.yml index 18d05ec5..93e98c04 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,6 +3,10 @@ language: python dist: xenial jobs: include: + # Minimum required versions for NEP 029 + - python: 3.6 + numpy: 1.15 + # Versions with latest numpy - python: 3.6 - python: 3.7 - python: 3.8 From 7a9889f255e630b0850a2557b972b25f036053a7 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Mon, 17 Feb 2020 12:54:15 -0500 Subject: [PATCH 125/162] TST: improve environment names --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 93e98c04..25995849 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,8 +3,8 @@ language: python dist: xenial jobs: include: - # Minimum required versions for NEP 029 - - python: 3.6 + - name: Minimum NEP 029 versions + python: 3.6 numpy: 1.15 # Versions with latest numpy - python: 3.6 From 8e6e1463da9bf5129a843a97c20f51a6f7ee9483 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Mon, 17 Feb 2020 13:06:58 -0500 Subject: [PATCH 126/162] DOC: Updates to documentation --- README.md | 4 ++-- setup.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 14bf9356..1f0280ad 100644 --- a/README.md +++ b/README.md @@ -4,11 +4,11 @@ # pysatMissions -[![Build Status](https://travis-ci.org/pysat/pysatMissions.svg?branch=master)](https://travis-ci.org/pysat/pysatMissions) [![Documentation Status](https://readthedocs.org/projects/pysatMissions/badge/?version=latest)](http://pysatMissions.readthedocs.io/en/latest/?badge=latest) -[![Coverage Status](https://coveralls.io/repos/github/pysat/pysatMissions/badge.svg?branch=master)](https://coveralls.io/github/pysat/pysatMissions?branch=master) [![DOI](https://zenodo.org/badge/209358908.svg)](https://zenodo.org/badge/latestdoi/209358908) +[![Build Status](https://travis-ci.org/pysat/pysatMissions.svg?branch=master)](https://travis-ci.org/pysat/pysatMissions) +[![Coverage Status](https://coveralls.io/repos/github/pysat/pysatMissions/badge.svg?branch=master)](https://coveralls.io/github/pysat/pysatMissions?branch=master) [![Maintainability](https://api.codeclimate.com/v1/badges/f795422173ac04203b24/maintainability)](https://codeclimate.com/github/pysat/pysatMissions/maintainability) pysatMissions allows users to run build simulated satellites for TLE info and add empirical data. It includes the pysat_ephem and pysat_sgp4 instrument modules which can be imported into pysat. diff --git a/setup.py b/setup.py index f6aebf70..10de042f 100644 --- a/setup.py +++ b/setup.py @@ -42,9 +42,9 @@ "Intended Audience :: Science/Research", "License :: OSI Approved :: BSD License", "Natural Language :: English", - "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", "Operating System :: MacOS :: MacOS X", ], include_package_data=True, From ad783997f2e65dc03a131637074d64a05c766d97 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Mon, 17 Feb 2020 13:24:27 -0500 Subject: [PATCH 127/162] TST: remove manual installs --- .travis.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index 25995849..1399cb84 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,14 +21,8 @@ before_install: - pip install pytest-cov - pip install coveralls - pip install future - # Install version specific packages - - pip install pandas - - pip install xarray - - pip install matplotlib - - pip install apexpy # Prepare modified pysat install - - pip install numpy - cd .. - echo 'cloning pysat' - git clone https://github.com/pysat/pysat.git >/dev/null From 95ca81fef8115f8e01a0dc8610b9385647eb323c Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Mon, 17 Feb 2020 13:40:04 -0500 Subject: [PATCH 128/162] Update .travis.yml --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index d088dcec..070bf775 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,6 +21,7 @@ before_install: - pip install pytest-cov - pip install coveralls - pip install future + - pip install apexpy # Prepare modified pysat install - cd .. @@ -28,7 +29,6 @@ before_install: - git clone https://github.com/pysat/pysat.git >/dev/null - echo 'installing pysat' - cd ./pysat - - git checkout develop-3 # set up data directory - mkdir /home/travis/build/pysatData # install pysat From 74dec0348dd43103508570d8b4dad04b4ece7e62 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Tue, 18 Feb 2020 08:55:45 -0500 Subject: [PATCH 129/162] Update .travis.yml --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 070bf775..c120ac0c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,7 +5,7 @@ jobs: include: - name: Minimum NEP 029 versions python: 3.6 - numpy: 1.15 + env: numpy=1.15 # Versions with latest numpy - python: 3.6 - python: 3.7 From fb35676b929bc87d15a0bba9481e1006968d0d70 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Tue, 18 Feb 2020 09:28:50 -0500 Subject: [PATCH 130/162] Update .travis.yml --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index c120ac0c..49660f9f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,7 +5,7 @@ jobs: include: - name: Minimum NEP 029 versions python: 3.6 - env: numpy=1.15 + env: NUMPY=1.15 # Versions with latest numpy - python: 3.6 - python: 3.7 From 6b3d0e140139dbb640893d409cabb245eea5eab0 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Tue, 18 Feb 2020 15:30:41 -0500 Subject: [PATCH 131/162] Update .travis.yml --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 49660f9f..91f4a11b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,7 +5,7 @@ jobs: include: - name: Minimum NEP 029 versions python: 3.6 - env: NUMPY=1.15 + env: NUMPY_VERSION=1.15 # Versions with latest numpy - python: 3.6 - python: 3.7 @@ -18,6 +18,7 @@ addons: - gfortran before_install: + - pip install -q numpy=$NUMPY_VERSION - pip install pytest-cov - pip install coveralls - pip install future From 1d8addcd5904ecaf17a67fd00bee1f926d268fa2 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Tue, 18 Feb 2020 15:33:07 -0500 Subject: [PATCH 132/162] Update .travis.yml --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 91f4a11b..779a77d9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,7 +18,7 @@ addons: - gfortran before_install: - - pip install -q numpy=$NUMPY_VERSION + - pip install -q numpy==$NUMPY_VERSION - pip install pytest-cov - pip install coveralls - pip install future From 3394c8038d5f12e76dfd6fcc90899bb72970dec0 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Tue, 18 Feb 2020 15:45:04 -0500 Subject: [PATCH 133/162] Update .travis.yml --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 779a77d9..2b0b8005 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,7 +5,7 @@ jobs: include: - name: Minimum NEP 029 versions python: 3.6 - env: NUMPY_VERSION=1.15 + env: NUMPY_VER=1.15 # Versions with latest numpy - python: 3.6 - python: 3.7 @@ -18,7 +18,7 @@ addons: - gfortran before_install: - - pip install -q numpy==$NUMPY_VERSION + - if [ -z ${NUMPY_VER} ]; echo 'Using latest numpy'; else pip install -q numpy==$NUMPY_VER; fi - pip install pytest-cov - pip install coveralls - pip install future From 904d1c1bd1d6bcb38f2642e9fdf7fa621f029a69 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Fri, 21 Feb 2020 15:01:01 -0500 Subject: [PATCH 134/162] BUG: fix if statement in travis --- .travis.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 2b0b8005..152238da 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,7 +18,11 @@ addons: - gfortran before_install: - - if [ -z ${NUMPY_VER} ]; echo 'Using latest numpy'; else pip install -q numpy==$NUMPY_VER; fi + - if [ -z ${NUMPY_VER} ]; then + echo 'Using latest numpy'; + else + pip install -q numpy==$NUMPY_VER; + fi - pip install pytest-cov - pip install coveralls - pip install future From 7cba946f1d04029382901c04ee4c8baebf247363 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Tue, 25 Feb 2020 17:03:42 -0500 Subject: [PATCH 135/162] DOC: fix codeclimate badge --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1f0280ad..41850035 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ [![Build Status](https://travis-ci.org/pysat/pysatMissions.svg?branch=master)](https://travis-ci.org/pysat/pysatMissions) [![Coverage Status](https://coveralls.io/repos/github/pysat/pysatMissions/badge.svg?branch=master)](https://coveralls.io/github/pysat/pysatMissions?branch=master) -[![Maintainability](https://api.codeclimate.com/v1/badges/f795422173ac04203b24/maintainability)](https://codeclimate.com/github/pysat/pysatMissions/maintainability) +[![Maintainability](https://api.codeclimate.com/v1/badges/83011911691b9d2076e9/maintainability)](https://codeclimate.com/github/pysat/pysatMissions/maintainability) pysatMissions allows users to run build simulated satellites for TLE info and add empirical data. It includes the pysat_ephem and pysat_sgp4 instrument modules which can be imported into pysat. From 74097b98603ff268462f22cdf497094884ec13a7 Mon Sep 17 00:00:00 2001 From: jklenzing Date: Wed, 26 Feb 2020 12:50:47 -0500 Subject: [PATCH 136/162] REV: review comments --- README.md | 6 +- docs/introduction.rst | 6 +- pysatMissions/instruments/_core.py | 2 +- pysatMissions/instruments/pysat_ephem.py | 29 +++++---- pysatMissions/instruments/pysat_sgp4.py | 23 +++++-- pysatMissions/methods/aacgmv2.py | 18 +++--- pysatMissions/methods/apexpy.py | 16 ++--- pysatMissions/methods/pyglow.py | 76 +++++++++++++++--------- pysatMissions/methods/spacecraft.py | 18 +++--- 9 files changed, 116 insertions(+), 78 deletions(-) diff --git a/README.md b/README.md index 41850035..6825b61c 100644 --- a/README.md +++ b/README.md @@ -11,13 +11,13 @@ [![Coverage Status](https://coveralls.io/repos/github/pysat/pysatMissions/badge.svg?branch=master)](https://coveralls.io/github/pysat/pysatMissions?branch=master) [![Maintainability](https://api.codeclimate.com/v1/badges/83011911691b9d2076e9/maintainability)](https://codeclimate.com/github/pysat/pysatMissions/maintainability) -pysatMissions allows users to run build simulated satellites for TLE info and add empirical data. It includes the pysat_ephem and pysat_sgp4 instrument modules which can be imported into pysat. +pysatMissions allows users to run build simulated satellites for Two-Line Elements (TLE) and add empirical data. It includes the pysat_ephem and pysat_sgp4 instrument modules which can be imported into pysat. Main Features ------------- - Simulate satellite orbits from TLEs and add data from empirical models -- Import ionosphere and thermosphere values through pyglow -- Import coordinates through apexpy +- Import ionosphere and thermosphere model values through pyglow +- Import magnetic coordinates through apexpy - Import magnetic coordinates through aacgmv2 - Import geomagnetic basis vectors through pysatMagVect diff --git a/docs/introduction.rst b/docs/introduction.rst index 3c5c9fe3..abc85e52 100644 --- a/docs/introduction.rst +++ b/docs/introduction.rst @@ -2,13 +2,13 @@ Introduction ============ -pysatMissions allows users to run build simulated satellites for TLE info and add empirical data. It includes the pysat_sgp4 and pysat_ephem instrument modules which can be imported into pysat. +pysatMissions allows users to run build simulated satellites for Two-Line Elements (TLE) and add empirical data. It includes the pysat_ephem and pysat_sgp4 instrument modules which can be imported into pysat. Main Features ------------- - Simulate satellite orbits from TLEs and add data from empirical models -- Import ionosphere and thermosphere values through pyglow -- Import coordinates through apexpy +- Import ionosphere and thermosphere model values through pyglow +- Import magnetic coordinates through apexpy - Import magnetic coordinates through aacgmv2 - Import geomagnetic basis vectors through pysatMagVect diff --git a/pysatMissions/instruments/_core.py b/pysatMissions/instruments/_core.py index 207d4fa2..1e3025b5 100644 --- a/pysatMissions/instruments/_core.py +++ b/pysatMissions/instruments/_core.py @@ -1,5 +1,5 @@ """ -handles the default pysat functions for simulated instruments +Handles the default pysat functions for simulated instruments """ import os diff --git a/pysatMissions/instruments/pysat_ephem.py b/pysatMissions/instruments/pysat_ephem.py index 434ebcd0..1d75feb5 100644 --- a/pysatMissions/instruments/pysat_ephem.py +++ b/pysatMissions/instruments/pysat_ephem.py @@ -9,12 +9,19 @@ from __future__ import print_function from __future__ import absolute_import - import functools import numpy as np + +import ephem import pandas as pds import pysat -from pysatMissions.instruments import _core as mcore +import pysatMagVect + +import pysatMissions.instruments._core as mcore +import pysatMissions.methods.aacgmv2 as mm_aacgm +import pysatMissions.methods.apexpy as mm_apex +import pysatMissions.methods.pyglow as mm_glow +import pysatMissions.methods.spacecraft as mm_sc # pysat required parameters platform = 'pysat' @@ -38,10 +45,6 @@ def init(self): Horiontal Wind Model (HWM). """ - import pysatMissions.methods.aacgmv2 as mm_aacgm - import pysatMissions.methods.apexpy as mm_apex - import pysatMissions.methods.pyglow as mm_glow - import pysatMissions.methods.spacecraft as mm_sc self.custom.add(mm_apex.add_quasi_dipole_coordinates, 'modify') self.custom.add(mm_aacgm.add_aacgm_coordinates, 'modify') @@ -99,6 +102,13 @@ def load(fnames, tag=None, sat_id=None, obs_long=0., obs_lat=0., obs_alt=0., TLE2 : string Second string for Two Line Element. Must be in TLE format + Returns + ------- + data : (pandas.DataFrame) + Object containing satellite data + meta : (pysat.Meta) + Object containing metadata such as column names and units + Example ------- inst = pysat.Instrument('pysat', 'sgp4', @@ -108,9 +118,6 @@ def load(fnames, tag=None, sat_id=None, obs_long=0., obs_lat=0., obs_alt=0., """ - import ephem - import pysatMagVect - # TLEs (Two Line Elements for ISS) # format of TLEs is fixed and available from wikipedia... # lines encode list of orbital elements of an Earth-orbiting object @@ -135,9 +142,9 @@ def load(fnames, tag=None, sat_id=None, obs_long=0., obs_lat=0., obs_alt=0., # The first parameter in readtle() is the satellite name sat = ephem.readtle('pysat', line1, line2) output_params = [] - for time in times: + for timestep in times: lp = {} - site.date = time + site.date = timestep sat.compute(site) # parameters relative to the ground station lp['obs_sat_az_angle'] = ephem.degrees(sat.az) diff --git a/pysatMissions/instruments/pysat_sgp4.py b/pysatMissions/instruments/pysat_sgp4.py index 261385a4..8d8a1dc7 100644 --- a/pysatMissions/instruments/pysat_sgp4.py +++ b/pysatMissions/instruments/pysat_sgp4.py @@ -7,12 +7,13 @@ from __future__ import print_function from __future__ import absolute_import - -import os import functools +import os + import pandas as pds import pysat -from pysatMissions.instruments import _core as mcore + +import pysatMissions.instruments._core as mcore # pysat required parameters platform = 'pysat' @@ -31,6 +32,8 @@ def init(self): """ + pass + def load(fnames, tag=None, sat_id=None, obs_long=0., obs_lat=0., obs_alt=0., TLE1=None, TLE2=None): @@ -64,6 +67,13 @@ def load(fnames, tag=None, sat_id=None, obs_long=0., obs_lat=0., obs_alt=0., TLE2 : string Second string for Two Line Element. Must be in TLE format + Returns + ------- + data : (pandas.DataFrame) + Object containing satellite data + meta : (pysat.Meta) + Object containing metadata such as column names and units + Example ------- inst = pysat.Instrument('pysat', 'sgp4', @@ -100,10 +110,11 @@ def load(fnames, tag=None, sat_id=None, obs_long=0., obs_lat=0., obs_alt=0., # create list to hold satellite position, velocity position = [] velocity = [] - for time in times: + for timestep in times: # orbit propagator - computes x,y,z position and velocity - pos, vel = satellite.propagate(time.year, time.month, time.day, - time.hour, time.minute, time.second) + pos, vel = satellite.propagate(timestep.year, timestep.month, + timestep.day, timestep.hour, + timestep.minute, timestep.second) position.extend(pos) velocity.extend(vel) diff --git a/pysatMissions/methods/aacgmv2.py b/pysatMissions/methods/aacgmv2.py index 4c465470..13f6bea2 100644 --- a/pysatMissions/methods/aacgmv2.py +++ b/pysatMissions/methods/aacgmv2.py @@ -3,6 +3,8 @@ """ +import aacgmv2 + def add_aacgm_coordinates(inst, glat_label='glat', glong_label='glong', alt_label='alt'): @@ -13,16 +15,10 @@ def add_aacgm_coordinates(inst, glat_label='glat', glong_label='glong', to calculate the latitude, longitude, and local time of the spacecraft with respect to the geomagnetic field. - Example - ------- - # function added velow modifies the inst object upon every inst.load - call inst.custom.add(add_quasi_dipole_coordinates, 'modify', - glat_label='custom_label') - Parameters ---------- inst : pysat.Instrument - Designed with pysat_sgp4 in mind + instrument object including lat, lon, and alt as timeseries glat_label : string label used in inst to identify WGS84 geodetic latitude (degrees N) glong_label : string @@ -37,11 +33,15 @@ def add_aacgm_coordinates(inst, glat_label='glat', glong_label='glong', Input pysat.Instrument object modified to include quasi-dipole coordinates, 'aacgm_lat' for magnetic latitude, 'aacgm_long' for longitude, and 'aacgm_mlt' for magnetic local time. + + Example + ------- + # function added velow modifies the inst object upon every inst.load + call inst.custom.add(add_quasi_dipole_coordinates, 'modify', + glat_label='custom_label') """ - import aacgmv2 - aalat = [] aalon = [] mlt = [] diff --git a/pysatMissions/methods/apexpy.py b/pysatMissions/methods/apexpy.py index e40aaa07..c5f2eaa2 100644 --- a/pysatMissions/methods/apexpy.py +++ b/pysatMissions/methods/apexpy.py @@ -3,6 +3,8 @@ """ +import apexpy + def add_quasi_dipole_coordinates(inst, glat_label='glat', glong_label='glong', alt_label='alt'): @@ -15,16 +17,10 @@ def add_quasi_dipole_coordinates(inst, glat_label='glat', glong_label='glong', This system is preferred over AACGM near the equator for LEO satellites. - Example - ------- - # function added velow modifies the inst object upon every inst.load - call inst.custom.add(add_quasi_dipole_coordinates, 'modify', - glat_label='custom_label') - Parameters ---------- inst : pysat.Instrument - Designed with pysat_sgp4 in mind + instrument object including lat, lon, and alt as timeseries glat_label : string label used in inst to identify WGS84 geodetic latitude (degrees) glong_label : string @@ -39,10 +35,14 @@ def add_quasi_dipole_coordinates(inst, glat_label='glat', glong_label='glong', Input pysat.Instrument object modified to include quasi-dipole coordinates, 'qd_lat' for magnetic latitude, 'qd_long' for longitude, and 'mlt' for magnetic local time. + Example + ------- + # function added velow modifies the inst object upon every inst.load + call inst.custom.add(add_quasi_dipole_coordinates, 'modify', + glat_label='custom_label') """ - import apexpy ap = apexpy.Apex(date=inst.date) qd_lat = [] diff --git a/pysatMissions/methods/pyglow.py b/pysatMissions/methods/pyglow.py index c4f69667..20d00129 100644 --- a/pysatMissions/methods/pyglow.py +++ b/pysatMissions/methods/pyglow.py @@ -12,9 +12,11 @@ from pyglow.pyglow import Point except ImportError: pass - import pysatMagVect +import pysatMissions.methods.spacecraft as mm_sc + + # TODO add checks for ECEF and import rest of changes here pyglow_warning = ' '.join(['pyglow must be installed to use this', 'function. See instructions at', @@ -30,16 +32,10 @@ def add_iri_thermal_plasma(inst, glat_label='glat', glong_label='glong', Uses pyglow module to run IRI. Configured to use actual solar parameters to run model. - Example - ------- - # function added velow modifies the inst object upon every inst.load - call inst.custom.add(add_iri_thermal_plasma, 'modify', - glat_label='custom_label') - Parameters ---------- inst : pysat.Instrument - Designed with pysat_sgp4 in mind + instrument object including lat, lon, and alt as timeseries glat_label : string label used in inst to identify WGS84 geodetic latitude (degrees) glong_label : string @@ -59,6 +55,12 @@ def add_iri_thermal_plasma(inst, glat_label='glat', glong_label='glong', 'frac_dens_o' for the fraction of total density that is O+ 'frac_dens_h' for the fraction of total density that is H+ + Example + ------- + # function added velow modifies the inst object upon every inst.load + call inst.custom.add(add_iri_thermal_plasma, 'modify', + glat_label='custom_label') + """ iri_params = [] @@ -111,15 +113,10 @@ def add_igrf(inst, glat_label='glat', glong_label='glong', alt_label='alt'): Uses pyglow module to run IGRF. Configured to use actual solar parameters to run model. - Example - ------- - # function added velow modifies the inst object upon every inst.load - call inst.custom.add(add_igrf, 'modify', glat_label='custom_label') - Parameters ---------- inst : pysat.Instrument - Designed with pysat_sgp4 in mind + instrument object including lat, lon, and alt as timeseries glat_label : string label used in inst to identify WGS84 geodetic latitude (degrees) glong_label : string @@ -142,6 +139,11 @@ def add_igrf(inst, glat_label='glat', glong_label='glong', alt_label='alt'): 'B_ecef_y' Geomagnetic field component along ECEF y 'B_ecef_z' Geomagnetic field component along ECEF z + Example + ------- + # function added velow modifies the inst object upon every inst.load + call inst.custom.add(add_igrf, 'modify', glat_label='custom_label') + """ igrf_params = [] @@ -208,15 +210,10 @@ def add_msis(inst, glat_label='glat', glong_label='glong', alt_label='alt'): Uses pyglow module to run MSIS. Configured to use actual solar parameters to run model. - Example - ------- - # function added velow modifies the inst object upon every inst.load - call inst.custom.add(add_msis, 'modify', glat_label='custom_label') - Parameters ---------- inst : pysat.Instrument - Designed with pysat_sgp4 in mind + instrument object including lat, lon, and alt as timeseries glat_label : string label used in inst to identify WGS84 geodetic latitude (degrees) glong_label : string @@ -236,6 +233,11 @@ def add_msis(inst, glat_label='glat', glong_label='glong', alt_label='alt'): 'Nn_O2' O2 number density (particles/cm^3) 'Tn_msis' Temperature from MSIS (Kelvin) + Example + ------- + # function added velow modifies the inst object upon every inst.load + call inst.custom.add(add_msis, 'modify', glat_label='custom_label') + """ msis_params = [] @@ -304,16 +306,10 @@ def add_hwm_winds_and_ecef_vectors(inst, glat_label='glat', Uses pyglow module to run HWM. Configured to use actual solar parameters to run model. - Example - ------- - # function added velow modifies the inst object upon every inst.load - call inst.custom.add(add_hwm_winds_and_ecef_vectors, 'modify', - glat_label='custom_label') - Parameters ---------- inst : pysat.Instrument - Designed with pysat_sgp4 in mind + instrument object including lat, lon, and alt as timeseries glat_label : string label used in inst to identify WGS84 geodetic latitude (degrees) glong_label : string @@ -335,6 +331,12 @@ def add_hwm_winds_and_ecef_vectors(inst, glat_label='glat', 'sim_inst_wind_*' (*=x,y,z) is the projection of the total wind vector onto s/c basis + Example + ------- + # function added velow modifies the inst object upon every inst.load + call inst.custom.add(add_hwm_winds_and_ecef_vectors, 'modify', + glat_label='custom_label') + """ hwm_params = [] @@ -422,8 +424,26 @@ def get_ecef_wind_meta(coord='x', geo='mer'): def project_hwm_onto_sc(inst): + """ + Projects the modeled wind onto the spacecraft coordinates. + + Parameters + ---------- + inst : pysat.Instrument + instrument object including unit vectors in ecef coords - import pysatMissions.methods.spacecraft as mm_sc + Returns + ------- + inst + Input pysat.Instrument object modified to include neutral wind + parameters. + + Example + ------- + # function added velow modifies the inst object upon every inst.load + call inst.custom.add(project_hwm_onto_sc, 'modify') + + """ def get_wind_comp(inst, direction='x'): unit_zon = 'unit_zonal_wind_ecef_' + direction diff --git a/pysatMissions/methods/spacecraft.py b/pysatMissions/methods/spacecraft.py index 35c6cb41..30f5d166 100644 --- a/pysatMissions/methods/spacecraft.py +++ b/pysatMissions/methods/spacecraft.py @@ -15,15 +15,6 @@ def add_sc_attitude_vectors(inst): generally nadir pointing (positive towards Earth), and y completes the right handed system (generally southward). - Notes - ----- - Expects velocity and position of spacecraft in Earth Centered - Earth Fixed (ECEF) coordinates to be in the instrument object - and named velocity_ecef_* (*=x,y,z) and position_ecef_* (*=x,y,z) - - Adds attitude vectors for spacecraft in the ECEF basis by calculating - the scalar product of each attitude vector with each component of ECEF. - Parameters ---------- inst : pysat.Instrument @@ -38,6 +29,15 @@ def add_sc_attitude_vectors(inst): sc_xhat_ecef_x is the spacecraft unit vector along x (positive along velocity vector) reported in ECEF, ECEF x-component. + Notes + ----- + Expects velocity and position of spacecraft in Earth Centered + Earth Fixed (ECEF) coordinates to be in the instrument object + and named velocity_ecef_* (*=x,y,z) and position_ecef_* (*=x,y,z) + + Adds attitude vectors for spacecraft in the ECEF basis by calculating + the scalar product of each attitude vector with each component of ECEF. + """ # ram pointing is along velocity vector From 63fc30d8d401c39187e50c6834cfb19c89d925d4 Mon Sep 17 00:00:00 2001 From: jklenzing Date: Wed, 26 Feb 2020 13:04:52 -0500 Subject: [PATCH 137/162] BUG: fix import for python 3.6 --- pysatMissions/instruments/pysat_ephem.py | 2 +- pysatMissions/instruments/pysat_sgp4.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pysatMissions/instruments/pysat_ephem.py b/pysatMissions/instruments/pysat_ephem.py index 1d75feb5..91da4016 100644 --- a/pysatMissions/instruments/pysat_ephem.py +++ b/pysatMissions/instruments/pysat_ephem.py @@ -17,7 +17,7 @@ import pysat import pysatMagVect -import pysatMissions.instruments._core as mcore +from pysatMissions.instruments import _core as mcore import pysatMissions.methods.aacgmv2 as mm_aacgm import pysatMissions.methods.apexpy as mm_apex import pysatMissions.methods.pyglow as mm_glow diff --git a/pysatMissions/instruments/pysat_sgp4.py b/pysatMissions/instruments/pysat_sgp4.py index 8d8a1dc7..e7591423 100644 --- a/pysatMissions/instruments/pysat_sgp4.py +++ b/pysatMissions/instruments/pysat_sgp4.py @@ -13,7 +13,7 @@ import pandas as pds import pysat -import pysatMissions.instruments._core as mcore +from pysatMissions.instruments import _core as mcore # pysat required parameters platform = 'pysat' From a156e440bc0819def419a8cfb31fb9bb50667605 Mon Sep 17 00:00:00 2001 From: jklenzing Date: Wed, 26 Feb 2020 14:21:43 -0500 Subject: [PATCH 138/162] BUG: python 3.6 compatibility --- pysatMissions/instruments/pysat_ephem.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pysatMissions/instruments/pysat_ephem.py b/pysatMissions/instruments/pysat_ephem.py index 91da4016..3e01b94d 100644 --- a/pysatMissions/instruments/pysat_ephem.py +++ b/pysatMissions/instruments/pysat_ephem.py @@ -18,10 +18,10 @@ import pysatMagVect from pysatMissions.instruments import _core as mcore -import pysatMissions.methods.aacgmv2 as mm_aacgm -import pysatMissions.methods.apexpy as mm_apex -import pysatMissions.methods.pyglow as mm_glow -import pysatMissions.methods.spacecraft as mm_sc +from pysatMissions.methods import aacgmv2 as mm_aacgm +from pysatMissions.methods import apexpy as mm_apex +from pysatMissions.methods import pyglow as mm_glow +from pysatMissions.methods import spacecraft as mm_sc # pysat required parameters platform = 'pysat' From 56aff77c44e3f890fbdd101aa0a5167b2f454ea1 Mon Sep 17 00:00:00 2001 From: jklenzing Date: Wed, 26 Feb 2020 14:27:03 -0500 Subject: [PATCH 139/162] BUG: python 3.6 compatibility --- pysatMissions/methods/pyglow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pysatMissions/methods/pyglow.py b/pysatMissions/methods/pyglow.py index 20d00129..852affe4 100644 --- a/pysatMissions/methods/pyglow.py +++ b/pysatMissions/methods/pyglow.py @@ -14,7 +14,7 @@ pass import pysatMagVect -import pysatMissions.methods.spacecraft as mm_sc +from pysatMissions.methods import spacecraft as mm_sc # TODO add checks for ECEF and import rest of changes here From 7b2575532ed069f05552418de8f2e7c05e9c2470 Mon Sep 17 00:00:00 2001 From: jklenzing Date: Wed, 26 Feb 2020 14:40:47 -0500 Subject: [PATCH 140/162] API: simplify methods --- README.md | 4 +- docs/introduction.rst | 3 +- docs/tutorial.rst | 4 +- pysatMissions/instruments/pysat_ephem.py | 19 +++--- pysatMissions/methods/__init__.py | 7 +- pysatMissions/methods/aacgmv2.py | 67 ------------------- .../methods/{pyglow.py => empirical.py} | 0 .../methods/{apexpy.py => magcoord.py} | 64 +++++++++++++++++- pysatMissions/tests/test_methods_apexpy.py | 40 ----------- ...ds_pyglow.py => test_methods_empirical.py} | 8 +-- ...ds_aacgmv2.py => test_methods_magcoord.py} | 21 +++++- 11 files changed, 103 insertions(+), 134 deletions(-) delete mode 100644 pysatMissions/methods/aacgmv2.py rename pysatMissions/methods/{pyglow.py => empirical.py} (100%) rename pysatMissions/methods/{apexpy.py => magcoord.py} (50%) delete mode 100644 pysatMissions/tests/test_methods_apexpy.py rename pysatMissions/tests/{test_methods_pyglow.py => test_methods_empirical.py} (92%) rename pysatMissions/tests/{test_methods_aacgmv2.py => test_methods_magcoord.py} (58%) diff --git a/README.md b/README.md index 6825b61c..7b4b9c60 100644 --- a/README.md +++ b/README.md @@ -68,10 +68,10 @@ The methods that run empirical models can also be exported to any pysat instrume ``` import pysat -import pysatMissions.methods.pyglow as mm_glow +import pysatMissions.methods.empirical as mm_emp ivm = pysat.Instrument(platform='cnofs', name='ivm') -ivm.custom.add(mm_glow.add_iri_thermal_plasma, 'modify', glat_label='glat', +ivm.custom.add(mm_emp.add_iri_thermal_plasma, 'modify', glat_label='glat', glong_label='glon', alt_label='altitude') ``` Once the custom function is added, the model will automatically be run when the dataset is loaded. diff --git a/docs/introduction.rst b/docs/introduction.rst index abc85e52..84662f93 100644 --- a/docs/introduction.rst +++ b/docs/introduction.rst @@ -8,8 +8,7 @@ Main Features ------------- - Simulate satellite orbits from TLEs and add data from empirical models - Import ionosphere and thermosphere model values through pyglow -- Import magnetic coordinates through apexpy -- Import magnetic coordinates through aacgmv2 +- Import magnetic coordinates through apexpy and aacgmv2 - Import geomagnetic basis vectors through pysatMagVect This document covers installation, a tutorial on pysatMissions including demonstration code, and an API reference. diff --git a/docs/tutorial.rst b/docs/tutorial.rst index 258c7466..2d47bda5 100644 --- a/docs/tutorial.rst +++ b/docs/tutorial.rst @@ -35,9 +35,9 @@ A number of methods are included to invoke several python wrappers for empirical .. code:: python import pysat - from pysatMissions.methods import pyglow as mm_glow + from pysatMissions.methods import empirical as mm_emp ivm = pysat.Instrument(platform='cnofs', name='ivm') - ivm.custom.add(mm_glow.add_iri_thermal_plasma, 'modify', 'end', glat_label='glat', glong_label='glon', alt_label='altitude') + ivm.custom.add(mm_emp.add_iri_thermal_plasma, 'modify', 'end', glat_label='glat', glong_label='glon', alt_label='altitude') Note that in this case, the latitude, longitude, and altitude variable names of the instrument must be specified since they are not identical to the default names in the function. diff --git a/pysatMissions/instruments/pysat_ephem.py b/pysatMissions/instruments/pysat_ephem.py index 3e01b94d..55ac590b 100644 --- a/pysatMissions/instruments/pysat_ephem.py +++ b/pysatMissions/instruments/pysat_ephem.py @@ -18,9 +18,8 @@ import pysatMagVect from pysatMissions.instruments import _core as mcore -from pysatMissions.methods import aacgmv2 as mm_aacgm -from pysatMissions.methods import apexpy as mm_apex -from pysatMissions.methods import pyglow as mm_glow +from pysatMissions.methods import magcoord as mm_magcoord +from pysatMissions.methods import empirical as mm_emp from pysatMissions.methods import spacecraft as mm_sc # pysat required parameters @@ -46,13 +45,13 @@ def init(self): """ - self.custom.add(mm_apex.add_quasi_dipole_coordinates, 'modify') - self.custom.add(mm_aacgm.add_aacgm_coordinates, 'modify') + self.custom.add(mm_magcoord.add_quasi_dipole_coordinates, 'modify') + self.custom.add(mm_magcoord.add_aacgm_coordinates, 'modify') self.custom.add(mm_sc.calculate_ecef_velocity, 'modify') self.custom.add(mm_sc.add_sc_attitude_vectors, 'modify') # project simulated vectors onto s/c basis # IGRF - self.custom.add(mm_glow.add_igrf, 'modify') + self.custom.add(mm_emp.add_igrf, 'modify') # create metadata to be added along with vector projection in_meta = {'desc': 'IGRF geomagnetic field expressed in the s/c basis.', 'units': 'nT'} @@ -62,12 +61,12 @@ def init(self): 'B_sc_z', meta=[in_meta.copy(), in_meta.copy(), in_meta.copy()]) # Thermal Ion Parameters - self.custom.add(mm_glow.add_iri_thermal_plasma, 'modify') + self.custom.add(mm_emp.add_iri_thermal_plasma, 'modify') # Thermal Neutral parameters - self.custom.add(mm_glow.add_msis, 'modify') - self.custom.add(mm_glow.add_hwm_winds_and_ecef_vectors, 'modify') + self.custom.add(mm_emp.add_msis, 'modify') + self.custom.add(mm_emp.add_hwm_winds_and_ecef_vectors, 'modify') # project total wind vector - self.custom.add(mm_glow.project_hwm_onto_sc, 'modify') + self.custom.add(mm_emp.project_hwm_onto_sc, 'modify') def load(fnames, tag=None, sat_id=None, obs_long=0., obs_lat=0., obs_alt=0., diff --git a/pysatMissions/methods/__init__.py b/pysatMissions/methods/__init__.py index c61bfc73..bc3e97a7 100644 --- a/pysatMissions/methods/__init__.py +++ b/pysatMissions/methods/__init__.py @@ -3,9 +3,8 @@ the methods to interface with numerous empirical model packages """ -from pysatMissions.methods import aacgmv2 -from pysatMissions.methods import apexpy -from pysatMissions.methods import pyglow +from pysatMissions.methods import empirical +from pysatMissions.methods import magcoord from pysatMissions.methods import spacecraft -__all__ = ['aacgmv2', 'apexpy', 'pyglow', 'spacecraft'] +__all__ = ['empirical', 'magcoord', 'spacecraft'] diff --git a/pysatMissions/methods/aacgmv2.py b/pysatMissions/methods/aacgmv2.py deleted file mode 100644 index 13f6bea2..00000000 --- a/pysatMissions/methods/aacgmv2.py +++ /dev/null @@ -1,67 +0,0 @@ -"""Provides default routines for projecting aacgmv2 model values onto locations -from pysat instruments. - -""" - -import aacgmv2 - - -def add_aacgm_coordinates(inst, glat_label='glat', glong_label='glong', - alt_label='alt'): - """ - Uses AACGMV2 package to add AACGM coordinates to instrument object. - - The Altitude Adjusted Corrected Geomagnetic Coordinates library is used - to calculate the latitude, longitude, and local time - of the spacecraft with respect to the geomagnetic field. - - Parameters - ---------- - inst : pysat.Instrument - instrument object including lat, lon, and alt as timeseries - glat_label : string - label used in inst to identify WGS84 geodetic latitude (degrees N) - glong_label : string - label used in inst to identify WGS84 geodetic longitude (degrees E) - alt_label : string - label used in inst to identify WGS84 geodetic altitude (km, height - above surface) - - Returns - ------- - inst - Input pysat.Instrument object modified to include quasi-dipole - coordinates, 'aacgm_lat' for magnetic latitude, 'aacgm_long' for - longitude, and 'aacgm_mlt' for magnetic local time. - - Example - ------- - # function added velow modifies the inst object upon every inst.load - call inst.custom.add(add_quasi_dipole_coordinates, 'modify', - glat_label='custom_label') - - """ - - aalat = [] - aalon = [] - mlt = [] - for lat, lon, alt, time in zip(inst[glat_label], inst[glong_label], - inst[alt_label], inst.data.index): - # aacgmv2 latitude and longitude from geodetic coords - tlat, tlon, tmlt = aacgmv2.get_aacgm_coord(lat, lon, alt, time) - aalat.append(tlat) - aalon.append(tlon) - mlt.append(tmlt) - - inst['aacgm_lat'] = aalat - inst['aacgm_long'] = aalon - inst['aacgm_mlt'] = mlt - - inst.meta['aacgm_lat'] = {'units': 'degrees', - 'long_name': 'AACGM latitude'} - inst.meta['aacgm_long'] = {'units': 'degrees', - 'long_name': 'AACGM longitude'} - inst.meta['aacgm_mlt'] = {'units': 'hrs', - 'long_name': 'AACGM Magnetic local time'} - - return diff --git a/pysatMissions/methods/pyglow.py b/pysatMissions/methods/empirical.py similarity index 100% rename from pysatMissions/methods/pyglow.py rename to pysatMissions/methods/empirical.py diff --git a/pysatMissions/methods/apexpy.py b/pysatMissions/methods/magcoord.py similarity index 50% rename from pysatMissions/methods/apexpy.py rename to pysatMissions/methods/magcoord.py index c5f2eaa2..e59a485b 100644 --- a/pysatMissions/methods/apexpy.py +++ b/pysatMissions/methods/magcoord.py @@ -1,11 +1,73 @@ -"""Provides default routines for projecting apexpy values onto locations +"""Provides default routines for projecting aacgmv2 model values onto locations from pysat instruments. """ +import aacgmv2 import apexpy +def add_aacgm_coordinates(inst, glat_label='glat', glong_label='glong', + alt_label='alt'): + """ + Uses AACGMV2 package to add AACGM coordinates to instrument object. + + The Altitude Adjusted Corrected Geomagnetic Coordinates library is used + to calculate the latitude, longitude, and local time + of the spacecraft with respect to the geomagnetic field. + + Parameters + ---------- + inst : pysat.Instrument + instrument object including lat, lon, and alt as timeseries + glat_label : string + label used in inst to identify WGS84 geodetic latitude (degrees N) + glong_label : string + label used in inst to identify WGS84 geodetic longitude (degrees E) + alt_label : string + label used in inst to identify WGS84 geodetic altitude (km, height + above surface) + + Returns + ------- + inst + Input pysat.Instrument object modified to include quasi-dipole + coordinates, 'aacgm_lat' for magnetic latitude, 'aacgm_long' for + longitude, and 'aacgm_mlt' for magnetic local time. + + Example + ------- + # function added velow modifies the inst object upon every inst.load + call inst.custom.add(add_quasi_dipole_coordinates, 'modify', + glat_label='custom_label') + + """ + + aalat = [] + aalon = [] + mlt = [] + for lat, lon, alt, time in zip(inst[glat_label], inst[glong_label], + inst[alt_label], inst.data.index): + # aacgmv2 latitude and longitude from geodetic coords + tlat, tlon, tmlt = aacgmv2.get_aacgm_coord(lat, lon, alt, time) + aalat.append(tlat) + aalon.append(tlon) + mlt.append(tmlt) + + inst['aacgm_lat'] = aalat + inst['aacgm_long'] = aalon + inst['aacgm_mlt'] = mlt + + inst.meta['aacgm_lat'] = {'units': 'degrees', + 'long_name': 'AACGM latitude'} + inst.meta['aacgm_long'] = {'units': 'degrees', + 'long_name': 'AACGM longitude'} + inst.meta['aacgm_mlt'] = {'units': 'hrs', + 'long_name': 'AACGM Magnetic local time'} + + return + + def add_quasi_dipole_coordinates(inst, glat_label='glat', glong_label='glong', alt_label='alt'): """ diff --git a/pysatMissions/tests/test_methods_apexpy.py b/pysatMissions/tests/test_methods_apexpy.py deleted file mode 100644 index 6f0d26ab..00000000 --- a/pysatMissions/tests/test_methods_apexpy.py +++ /dev/null @@ -1,40 +0,0 @@ -# -*- coding: utf-8 -*- -# Test some of the apexpy method functions - -import numpy as np -import pysat -import pysatMissions.methods.apexpy as mm_apex - - -def add_altitude(inst, altitude=400.0): - """Add altitudes to pysat_testing instrument""" - - inst['altitude'] = altitude*np.ones(inst.data.shape[0]) - - -class TestBasics(): - def setup(self): - """Runs before every method to create a clean testing setup.""" - self.testInst = pysat.Instrument(platform='pysat', name='testing', - sat_id='100', clean_level='clean') - self.testInst.custom.add(add_altitude, 'modify') - - def teardown(self): - """Clean up test environment after tests""" - del self - - def test_add_quasi_dipole_coordinates(self): - """Test adding thermal plasma data to test inst""" - self.testInst.custom.add(mm_apex.add_quasi_dipole_coordinates, - 'modify', - glat_label='latitude', - glong_label='longitude', - alt_label='altitude') - self.testInst.load(date=pysat.datetime(2009, 1, 1)) - targets = ['qd_lat', 'qd_long', 'mlt'] - for target in targets: - # Check if data is added - assert target in self.testInst.data.keys() - assert not np.isnan(self.testInst[target]).any() - # Check if metadata is added - assert target in self.testInst.meta.data.index diff --git a/pysatMissions/tests/test_methods_pyglow.py b/pysatMissions/tests/test_methods_empirical.py similarity index 92% rename from pysatMissions/tests/test_methods_pyglow.py rename to pysatMissions/tests/test_methods_empirical.py index 1b9eb95a..f2d07451 100644 --- a/pysatMissions/tests/test_methods_pyglow.py +++ b/pysatMissions/tests/test_methods_empirical.py @@ -3,7 +3,7 @@ import numpy as np import pysat -from pysatMissions.methods import pyglow as mm_glow +from pysatMissions.methods import empirical as mm_emp def add_altitude(inst, altitude=400.0): @@ -25,7 +25,7 @@ def teardown(self): def test_add_iri_thermal_plasma(self): """Test adding thermal plasma data to test inst""" - self.testInst.custom.add(mm_glow.add_iri_thermal_plasma, 'modify', + self.testInst.custom.add(mm_emp.add_iri_thermal_plasma, 'modify', glat_label='latitude', glong_label='longitude', alt_label='altitude') @@ -41,7 +41,7 @@ def test_add_iri_thermal_plasma(self): def test_add_igrf(self): """Test adding igrf model to test inst""" - self.testInst.custom.add(mm_glow.add_igrf, 'modify', + self.testInst.custom.add(mm_emp.add_igrf, 'modify', glat_label='latitude', glong_label='longitude', alt_label='altitude') @@ -57,7 +57,7 @@ def test_add_igrf(self): def test_add_msis(self): """Test adding msis model to test inst""" - self.testInst.custom.add(mm_glow.add_msis, 'modify', + self.testInst.custom.add(mm_emp.add_msis, 'modify', glat_label='latitude', glong_label='longitude', alt_label='altitude') diff --git a/pysatMissions/tests/test_methods_aacgmv2.py b/pysatMissions/tests/test_methods_magcoord.py similarity index 58% rename from pysatMissions/tests/test_methods_aacgmv2.py rename to pysatMissions/tests/test_methods_magcoord.py index b87d7baa..bef35896 100644 --- a/pysatMissions/tests/test_methods_aacgmv2.py +++ b/pysatMissions/tests/test_methods_magcoord.py @@ -3,7 +3,7 @@ import numpy as np import pysat -import pysatMissions.methods.aacgmv2 as mm_aacgm +import pysatMissions.methods.magcoord as mm_magcoord def add_altitude(inst, altitude=400.0): @@ -25,7 +25,8 @@ def teardown(self): def test_add_aacgm_coordinates(self): """Test adding thermal plasma data to test inst""" - self.testInst.custom.add(mm_aacgm.add_aacgm_coordinates, 'modify', + self.testInst.custom.add(mm_magcoord.add_aacgm_coordinates, + 'modify', glat_label='latitude', glong_label='longitude', alt_label='altitude') @@ -37,3 +38,19 @@ def test_add_aacgm_coordinates(self): assert not np.isnan(self.testInst[target]).any() # Check if metadata is added assert target in self.testInst.meta.data.index + + def test_add_quasi_dipole_coordinates(self): + """Test adding thermal plasma data to test inst""" + self.testInst.custom.add(mm_magcoord.add_quasi_dipole_coordinates, + 'modify', + glat_label='latitude', + glong_label='longitude', + alt_label='altitude') + self.testInst.load(date=pysat.datetime(2009, 1, 1)) + targets = ['qd_lat', 'qd_long', 'mlt'] + for target in targets: + # Check if data is added + assert target in self.testInst.data.keys() + assert not np.isnan(self.testInst[target]).any() + # Check if metadata is added + assert target in self.testInst.meta.data.index From e75b825751cc67538c28d9da9e02e35b07ab4871 Mon Sep 17 00:00:00 2001 From: jklenzing Date: Wed, 26 Feb 2020 14:53:23 -0500 Subject: [PATCH 141/162] DOC: update documentation --- README.md | 5 +++-- docs/tutorial.rst | 4 ++-- pysatMissions/methods/magcoord.py | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 7b4b9c60..fc7a93c0 100644 --- a/README.md +++ b/README.md @@ -68,10 +68,11 @@ The methods that run empirical models can also be exported to any pysat instrume ``` import pysat -import pysatMissions.methods.empirical as mm_emp +from pysatMissions.methods import empirical ivm = pysat.Instrument(platform='cnofs', name='ivm') -ivm.custom.add(mm_emp.add_iri_thermal_plasma, 'modify', glat_label='glat', +ivm.custom.add(empirical.add_iri_thermal_plasma, 'modify', + glat_label='glat', glong_label='glon', alt_label='altitude') ``` Once the custom function is added, the model will automatically be run when the dataset is loaded. diff --git a/docs/tutorial.rst b/docs/tutorial.rst index 2d47bda5..0af457ae 100644 --- a/docs/tutorial.rst +++ b/docs/tutorial.rst @@ -35,9 +35,9 @@ A number of methods are included to invoke several python wrappers for empirical .. code:: python import pysat - from pysatMissions.methods import empirical as mm_emp + from pysatMissions.methods import empirical ivm = pysat.Instrument(platform='cnofs', name='ivm') - ivm.custom.add(mm_emp.add_iri_thermal_plasma, 'modify', 'end', glat_label='glat', glong_label='glon', alt_label='altitude') + ivm.custom.add(empirical.add_iri_thermal_plasma, 'modify', 'end', glat_label='glat', glong_label='glon', alt_label='altitude') Note that in this case, the latitude, longitude, and altitude variable names of the instrument must be specified since they are not identical to the default names in the function. diff --git a/pysatMissions/methods/magcoord.py b/pysatMissions/methods/magcoord.py index e59a485b..e888777c 100644 --- a/pysatMissions/methods/magcoord.py +++ b/pysatMissions/methods/magcoord.py @@ -1,4 +1,4 @@ -"""Provides default routines for projecting aacgmv2 model values onto locations +"""Provides default routines for projecting aacgmv2 and apexpy model values onto locations from pysat instruments. """ From a04d387b12efa3e522b2d221db4091c7bd369027 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Tue, 3 Mar 2020 14:37:05 -0500 Subject: [PATCH 142/162] Update tutorial.rst --- docs/tutorial.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/tutorial.rst b/docs/tutorial.rst index 0af457ae..a34fbffd 100644 --- a/docs/tutorial.rst +++ b/docs/tutorial.rst @@ -41,3 +41,5 @@ A number of methods are included to invoke several python wrappers for empirical ivm.custom.add(empirical.add_iri_thermal_plasma, 'modify', 'end', glat_label='glat', glong_label='glon', alt_label='altitude') Note that in this case, the latitude, longitude, and altitude variable names of the instrument must be specified since they are not identical to the default names in the function. + +Note that in pysat 3.0.0 the API will change from `custom.add` to `custom.attach`. From d2c93685c525ec3297ffdb3785998bf9b6e7a857 Mon Sep 17 00:00:00 2001 From: jklenzing Date: Tue, 3 Mar 2020 14:42:00 -0500 Subject: [PATCH 143/162] DOC: add notes to flag custom.add for future updates --- pysatMissions/instruments/pysat_ephem.py | 1 + pysatMissions/tests/test_methods_empirical.py | 4 ++++ pysatMissions/tests/test_methods_magcoord.py | 3 +++ pysatMissions/tests/test_methods_spacecraft.py | 3 +++ 4 files changed, 11 insertions(+) diff --git a/pysatMissions/instruments/pysat_ephem.py b/pysatMissions/instruments/pysat_ephem.py index 55ac590b..e60dba65 100644 --- a/pysatMissions/instruments/pysat_ephem.py +++ b/pysatMissions/instruments/pysat_ephem.py @@ -45,6 +45,7 @@ def init(self): """ + # TODO: Update to custom.attach with release of pysat 3.0.0 self.custom.add(mm_magcoord.add_quasi_dipole_coordinates, 'modify') self.custom.add(mm_magcoord.add_aacgm_coordinates, 'modify') self.custom.add(mm_sc.calculate_ecef_velocity, 'modify') diff --git a/pysatMissions/tests/test_methods_empirical.py b/pysatMissions/tests/test_methods_empirical.py index f2d07451..a07b5026 100644 --- a/pysatMissions/tests/test_methods_empirical.py +++ b/pysatMissions/tests/test_methods_empirical.py @@ -17,6 +17,7 @@ def setup(self): """Runs before every method to create a clean testing setup.""" self.testInst = pysat.Instrument(platform='pysat', name='testing', sat_id='100', clean_level='clean') + # TODO: Update to custom.attach with release of pysat 3.0.0 self.testInst.custom.add(add_altitude, 'modify') def teardown(self): @@ -25,6 +26,7 @@ def teardown(self): def test_add_iri_thermal_plasma(self): """Test adding thermal plasma data to test inst""" + # TODO: Update to custom.attach with release of pysat 3.0.0 self.testInst.custom.add(mm_emp.add_iri_thermal_plasma, 'modify', glat_label='latitude', glong_label='longitude', @@ -41,6 +43,7 @@ def test_add_iri_thermal_plasma(self): def test_add_igrf(self): """Test adding igrf model to test inst""" + # TODO: Update to custom.attach with release of pysat 3.0.0 self.testInst.custom.add(mm_emp.add_igrf, 'modify', glat_label='latitude', glong_label='longitude', @@ -57,6 +60,7 @@ def test_add_igrf(self): def test_add_msis(self): """Test adding msis model to test inst""" + # TODO: Update to custom.attach with release of pysat 3.0.0 self.testInst.custom.add(mm_emp.add_msis, 'modify', glat_label='latitude', glong_label='longitude', diff --git a/pysatMissions/tests/test_methods_magcoord.py b/pysatMissions/tests/test_methods_magcoord.py index bef35896..309716c8 100644 --- a/pysatMissions/tests/test_methods_magcoord.py +++ b/pysatMissions/tests/test_methods_magcoord.py @@ -17,6 +17,7 @@ def setup(self): """Runs before every method to create a clean testing setup.""" self.testInst = pysat.Instrument(platform='pysat', name='testing', sat_id='100', clean_level='clean') + # TODO: Update to custom.attach with release of pysat 3.0.0 self.testInst.custom.add(add_altitude, 'modify') def teardown(self): @@ -25,6 +26,7 @@ def teardown(self): def test_add_aacgm_coordinates(self): """Test adding thermal plasma data to test inst""" + # TODO: Update to custom.attach with release of pysat 3.0.0 self.testInst.custom.add(mm_magcoord.add_aacgm_coordinates, 'modify', glat_label='latitude', @@ -41,6 +43,7 @@ def test_add_aacgm_coordinates(self): def test_add_quasi_dipole_coordinates(self): """Test adding thermal plasma data to test inst""" + # TODO: Update to custom.attach with release of pysat 3.0.0 self.testInst.custom.add(mm_magcoord.add_quasi_dipole_coordinates, 'modify', glat_label='latitude', diff --git a/pysatMissions/tests/test_methods_spacecraft.py b/pysatMissions/tests/test_methods_spacecraft.py index c8c105bc..fa2304e3 100644 --- a/pysatMissions/tests/test_methods_spacecraft.py +++ b/pysatMissions/tests/test_methods_spacecraft.py @@ -31,6 +31,7 @@ def setup(self): """Runs before every method to create a clean testing setup.""" self.testInst = pysat.Instrument(platform='pysat', name='testing', sat_id='9', clean_level='clean') + # TODO: Update to custom.attach with release of pysat 3.0.0 self.testInst.custom.add(add_eci, 'modify') def teardown(self): @@ -54,6 +55,7 @@ def test_calculate_ecef_velocity(self): def test_add_sc_attitude_vectors(self): # TODO: check if calculations are correct + # TODO: Update to custom.attach with release of pysat 3.0.0 self.testInst.custom.add(mm_sc.calculate_ecef_velocity, 'modify') self.testInst.custom.add(mm_sc.add_sc_attitude_vectors, 'modify') self.testInst.load(date=pysat.datetime(2009, 1, 1)) @@ -72,6 +74,7 @@ def test_add_sc_attitude_vectors(self): def test_project_ecef_vector_onto_sc(self): # TODO: check if calculations are correct + # TODO: Update to custom.attach with release of pysat 3.0.0 self.testInst.custom.add(mm_sc.calculate_ecef_velocity, 'modify') self.testInst.custom.add(mm_sc.add_sc_attitude_vectors, 'modify') self.testInst.custom.add(add_fake_data, 'modify') From 7c598fa12d86d8db48e2c1d92e3859949f8296c3 Mon Sep 17 00:00:00 2001 From: jklenzing Date: Tue, 3 Mar 2020 14:44:59 -0500 Subject: [PATCH 144/162] BUG: test using pysat develop --- .travis.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 152238da..7e679159 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,9 +19,9 @@ addons: before_install: - if [ -z ${NUMPY_VER} ]; then - echo 'Using latest numpy'; - else - pip install -q numpy==$NUMPY_VER; + echo 'Using latest numpy'; + else + pip install -q numpy==$NUMPY_VER; fi - pip install pytest-cov - pip install coveralls @@ -37,7 +37,7 @@ before_install: # set up data directory - mkdir /home/travis/build/pysatData # install pysat - - git checkout develop-3 + - git checkout develop - python setup.py install >/dev/null # install pyglow, space science models From 1554248ca40e89e5d943d69f2b11784cb3038b60 Mon Sep 17 00:00:00 2001 From: jklenzing Date: Tue, 3 Mar 2020 14:52:21 -0500 Subject: [PATCH 145/162] API: pysat 3.0.0 compatibility --- .travis.yml | 2 +- README.md | 2 +- docs/tutorial.rst | 4 +--- pysatMissions/instruments/pysat_ephem.py | 20 +++++++++---------- pysatMissions/methods/empirical.py | 10 +++++----- pysatMissions/methods/magcoord.py | 4 ++-- pysatMissions/tests/test_methods_empirical.py | 8 ++++---- pysatMissions/tests/test_methods_magcoord.py | 6 +++--- .../tests/test_methods_spacecraft.py | 16 +++++++-------- 9 files changed, 35 insertions(+), 37 deletions(-) diff --git a/.travis.yml b/.travis.yml index 7e679159..fd4cc496 100644 --- a/.travis.yml +++ b/.travis.yml @@ -37,7 +37,7 @@ before_install: # set up data directory - mkdir /home/travis/build/pysatData # install pysat - - git checkout develop + - git checkout develop-3 - python setup.py install >/dev/null # install pyglow, space science models diff --git a/README.md b/README.md index fc7a93c0..f204faa8 100644 --- a/README.md +++ b/README.md @@ -71,7 +71,7 @@ import pysat from pysatMissions.methods import empirical ivm = pysat.Instrument(platform='cnofs', name='ivm') -ivm.custom.add(empirical.add_iri_thermal_plasma, 'modify', +ivm.custom.attach(empirical.add_iri_thermal_plasma, 'modify', glat_label='glat', glong_label='glon', alt_label='altitude') ``` diff --git a/docs/tutorial.rst b/docs/tutorial.rst index a34fbffd..80298401 100644 --- a/docs/tutorial.rst +++ b/docs/tutorial.rst @@ -38,8 +38,6 @@ A number of methods are included to invoke several python wrappers for empirical from pysatMissions.methods import empirical ivm = pysat.Instrument(platform='cnofs', name='ivm') - ivm.custom.add(empirical.add_iri_thermal_plasma, 'modify', 'end', glat_label='glat', glong_label='glon', alt_label='altitude') + ivm.custom.attach(empirical.add_iri_thermal_plasma, 'modify', 'end', glat_label='glat', glong_label='glon', alt_label='altitude') Note that in this case, the latitude, longitude, and altitude variable names of the instrument must be specified since they are not identical to the default names in the function. - -Note that in pysat 3.0.0 the API will change from `custom.add` to `custom.attach`. diff --git a/pysatMissions/instruments/pysat_ephem.py b/pysatMissions/instruments/pysat_ephem.py index e60dba65..91b10ed2 100644 --- a/pysatMissions/instruments/pysat_ephem.py +++ b/pysatMissions/instruments/pysat_ephem.py @@ -46,28 +46,28 @@ def init(self): """ # TODO: Update to custom.attach with release of pysat 3.0.0 - self.custom.add(mm_magcoord.add_quasi_dipole_coordinates, 'modify') - self.custom.add(mm_magcoord.add_aacgm_coordinates, 'modify') - self.custom.add(mm_sc.calculate_ecef_velocity, 'modify') - self.custom.add(mm_sc.add_sc_attitude_vectors, 'modify') + self.custom.attach(mm_magcoord.add_quasi_dipole_coordinates, 'modify') + self.custom.attach(mm_magcoord.add_aacgm_coordinates, 'modify') + self.custom.attach(mm_sc.calculate_ecef_velocity, 'modify') + self.custom.attach(mm_sc.add_sc_attitude_vectors, 'modify') # project simulated vectors onto s/c basis # IGRF - self.custom.add(mm_emp.add_igrf, 'modify') + self.custom.attach(mm_emp.add_igrf, 'modify') # create metadata to be added along with vector projection in_meta = {'desc': 'IGRF geomagnetic field expressed in the s/c basis.', 'units': 'nT'} # project IGRF - self.custom.add(mm_sc.project_ecef_vector_onto_sc, 'modify', 'end', + self.custom.attach(mm_sc.project_ecef_vector_onto_sc, 'modify', 'end', 'B_ecef_x', 'B_ecef_y', 'B_ecef_z', 'B_sc_x', 'B_sc_y', 'B_sc_z', meta=[in_meta.copy(), in_meta.copy(), in_meta.copy()]) # Thermal Ion Parameters - self.custom.add(mm_emp.add_iri_thermal_plasma, 'modify') + self.custom.attach(mm_emp.add_iri_thermal_plasma, 'modify') # Thermal Neutral parameters - self.custom.add(mm_emp.add_msis, 'modify') - self.custom.add(mm_emp.add_hwm_winds_and_ecef_vectors, 'modify') + self.custom.attach(mm_emp.add_msis, 'modify') + self.custom.attach(mm_emp.add_hwm_winds_and_ecef_vectors, 'modify') # project total wind vector - self.custom.add(mm_emp.project_hwm_onto_sc, 'modify') + self.custom.attach(mm_emp.project_hwm_onto_sc, 'modify') def load(fnames, tag=None, sat_id=None, obs_long=0., obs_lat=0., obs_alt=0., diff --git a/pysatMissions/methods/empirical.py b/pysatMissions/methods/empirical.py index 852affe4..5786d933 100644 --- a/pysatMissions/methods/empirical.py +++ b/pysatMissions/methods/empirical.py @@ -58,7 +58,7 @@ def add_iri_thermal_plasma(inst, glat_label='glat', glong_label='glong', Example ------- # function added velow modifies the inst object upon every inst.load - call inst.custom.add(add_iri_thermal_plasma, 'modify', + call inst.custom.attach(add_iri_thermal_plasma, 'modify', glat_label='custom_label') """ @@ -142,7 +142,7 @@ def add_igrf(inst, glat_label='glat', glong_label='glong', alt_label='alt'): Example ------- # function added velow modifies the inst object upon every inst.load - call inst.custom.add(add_igrf, 'modify', glat_label='custom_label') + call inst.custom.attach(add_igrf, 'modify', glat_label='custom_label') """ @@ -236,7 +236,7 @@ def add_msis(inst, glat_label='glat', glong_label='glong', alt_label='alt'): Example ------- # function added velow modifies the inst object upon every inst.load - call inst.custom.add(add_msis, 'modify', glat_label='custom_label') + call inst.custom.attach(add_msis, 'modify', glat_label='custom_label') """ @@ -334,7 +334,7 @@ def add_hwm_winds_and_ecef_vectors(inst, glat_label='glat', Example ------- # function added velow modifies the inst object upon every inst.load - call inst.custom.add(add_hwm_winds_and_ecef_vectors, 'modify', + call inst.custom.attach(add_hwm_winds_and_ecef_vectors, 'modify', glat_label='custom_label') """ @@ -441,7 +441,7 @@ def project_hwm_onto_sc(inst): Example ------- # function added velow modifies the inst object upon every inst.load - call inst.custom.add(project_hwm_onto_sc, 'modify') + call inst.custom.attach(project_hwm_onto_sc, 'modify') """ diff --git a/pysatMissions/methods/magcoord.py b/pysatMissions/methods/magcoord.py index e888777c..45938bc4 100644 --- a/pysatMissions/methods/magcoord.py +++ b/pysatMissions/methods/magcoord.py @@ -38,7 +38,7 @@ def add_aacgm_coordinates(inst, glat_label='glat', glong_label='glong', Example ------- # function added velow modifies the inst object upon every inst.load - call inst.custom.add(add_quasi_dipole_coordinates, 'modify', + call inst.custom.attach(add_quasi_dipole_coordinates, 'modify', glat_label='custom_label') """ @@ -100,7 +100,7 @@ def add_quasi_dipole_coordinates(inst, glat_label='glat', glong_label='glong', Example ------- # function added velow modifies the inst object upon every inst.load - call inst.custom.add(add_quasi_dipole_coordinates, 'modify', + call inst.custom.attach(add_quasi_dipole_coordinates, 'modify', glat_label='custom_label') """ diff --git a/pysatMissions/tests/test_methods_empirical.py b/pysatMissions/tests/test_methods_empirical.py index a07b5026..3cf1d878 100644 --- a/pysatMissions/tests/test_methods_empirical.py +++ b/pysatMissions/tests/test_methods_empirical.py @@ -18,7 +18,7 @@ def setup(self): self.testInst = pysat.Instrument(platform='pysat', name='testing', sat_id='100', clean_level='clean') # TODO: Update to custom.attach with release of pysat 3.0.0 - self.testInst.custom.add(add_altitude, 'modify') + self.testInst.custom.attach(add_altitude, 'modify') def teardown(self): """Clean up test environment after tests""" @@ -27,7 +27,7 @@ def teardown(self): def test_add_iri_thermal_plasma(self): """Test adding thermal plasma data to test inst""" # TODO: Update to custom.attach with release of pysat 3.0.0 - self.testInst.custom.add(mm_emp.add_iri_thermal_plasma, 'modify', + self.testInst.custom.attach(mm_emp.add_iri_thermal_plasma, 'modify', glat_label='latitude', glong_label='longitude', alt_label='altitude') @@ -44,7 +44,7 @@ def test_add_iri_thermal_plasma(self): def test_add_igrf(self): """Test adding igrf model to test inst""" # TODO: Update to custom.attach with release of pysat 3.0.0 - self.testInst.custom.add(mm_emp.add_igrf, 'modify', + self.testInst.custom.attach(mm_emp.add_igrf, 'modify', glat_label='latitude', glong_label='longitude', alt_label='altitude') @@ -61,7 +61,7 @@ def test_add_igrf(self): def test_add_msis(self): """Test adding msis model to test inst""" # TODO: Update to custom.attach with release of pysat 3.0.0 - self.testInst.custom.add(mm_emp.add_msis, 'modify', + self.testInst.custom.attach(mm_emp.add_msis, 'modify', glat_label='latitude', glong_label='longitude', alt_label='altitude') diff --git a/pysatMissions/tests/test_methods_magcoord.py b/pysatMissions/tests/test_methods_magcoord.py index 309716c8..60c4135c 100644 --- a/pysatMissions/tests/test_methods_magcoord.py +++ b/pysatMissions/tests/test_methods_magcoord.py @@ -18,7 +18,7 @@ def setup(self): self.testInst = pysat.Instrument(platform='pysat', name='testing', sat_id='100', clean_level='clean') # TODO: Update to custom.attach with release of pysat 3.0.0 - self.testInst.custom.add(add_altitude, 'modify') + self.testInst.custom.attach(add_altitude, 'modify') def teardown(self): """Clean up test environment after tests""" @@ -27,7 +27,7 @@ def teardown(self): def test_add_aacgm_coordinates(self): """Test adding thermal plasma data to test inst""" # TODO: Update to custom.attach with release of pysat 3.0.0 - self.testInst.custom.add(mm_magcoord.add_aacgm_coordinates, + self.testInst.custom.attach(mm_magcoord.add_aacgm_coordinates, 'modify', glat_label='latitude', glong_label='longitude', @@ -44,7 +44,7 @@ def test_add_aacgm_coordinates(self): def test_add_quasi_dipole_coordinates(self): """Test adding thermal plasma data to test inst""" # TODO: Update to custom.attach with release of pysat 3.0.0 - self.testInst.custom.add(mm_magcoord.add_quasi_dipole_coordinates, + self.testInst.custom.attach(mm_magcoord.add_quasi_dipole_coordinates, 'modify', glat_label='latitude', glong_label='longitude', diff --git a/pysatMissions/tests/test_methods_spacecraft.py b/pysatMissions/tests/test_methods_spacecraft.py index fa2304e3..6acd3c0f 100644 --- a/pysatMissions/tests/test_methods_spacecraft.py +++ b/pysatMissions/tests/test_methods_spacecraft.py @@ -32,7 +32,7 @@ def setup(self): self.testInst = pysat.Instrument(platform='pysat', name='testing', sat_id='9', clean_level='clean') # TODO: Update to custom.attach with release of pysat 3.0.0 - self.testInst.custom.add(add_eci, 'modify') + self.testInst.custom.attach(add_eci, 'modify') def teardown(self): """Clean up test environment after tests""" @@ -40,7 +40,7 @@ def teardown(self): def test_calculate_ecef_velocity(self): # TODO: check if calculations are correct - self.testInst.custom.add(mm_sc.calculate_ecef_velocity, 'modify') + self.testInst.custom.attach(mm_sc.calculate_ecef_velocity, 'modify') self.testInst.load(date=pysat.datetime(2009, 1, 1)) targets = ['velocity_ecef_x', 'velocity_ecef_y', 'velocity_ecef_z'] for target in targets: @@ -56,8 +56,8 @@ def test_calculate_ecef_velocity(self): def test_add_sc_attitude_vectors(self): # TODO: check if calculations are correct # TODO: Update to custom.attach with release of pysat 3.0.0 - self.testInst.custom.add(mm_sc.calculate_ecef_velocity, 'modify') - self.testInst.custom.add(mm_sc.add_sc_attitude_vectors, 'modify') + self.testInst.custom.attach(mm_sc.calculate_ecef_velocity, 'modify') + self.testInst.custom.attach(mm_sc.add_sc_attitude_vectors, 'modify') self.testInst.load(date=pysat.datetime(2009, 1, 1)) targets = ['sc_xhat_ecef_x', 'sc_xhat_ecef_y', 'sc_xhat_ecef_z', 'sc_yhat_ecef_x', 'sc_yhat_ecef_y', 'sc_yhat_ecef_z', @@ -75,10 +75,10 @@ def test_add_sc_attitude_vectors(self): def test_project_ecef_vector_onto_sc(self): # TODO: check if calculations are correct # TODO: Update to custom.attach with release of pysat 3.0.0 - self.testInst.custom.add(mm_sc.calculate_ecef_velocity, 'modify') - self.testInst.custom.add(mm_sc.add_sc_attitude_vectors, 'modify') - self.testInst.custom.add(add_fake_data, 'modify') - self.testInst.custom.add(mm_sc.project_ecef_vector_onto_sc, 'modify', + self.testInst.custom.attach(mm_sc.calculate_ecef_velocity, 'modify') + self.testInst.custom.attach(mm_sc.add_sc_attitude_vectors, 'modify') + self.testInst.custom.attach(add_fake_data, 'modify') + self.testInst.custom.attach(mm_sc.project_ecef_vector_onto_sc, 'modify', 'end', 'ax', 'ay', 'az', 'bx', 'by', 'bz') self.testInst.load(date=pysat.datetime(2009, 1, 1)) targets = ['bx', 'by', 'bz'] From 148ca952fe245a988a2c9ffadcdcb59b599b4774 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Wed, 4 Mar 2020 12:18:36 -0500 Subject: [PATCH 146/162] DOC: update readme --- README.md | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index f204faa8..214acac9 100644 --- a/README.md +++ b/README.md @@ -38,17 +38,28 @@ into the terminal. Or, if you prefer to work directly from github, checkout the repository: ``` - git clone https://github.com/pysat/pysatMissions.git +git clone https://github.com/pysat/pysatMissions.git ``` Change directories into the repository folder and run the setup.py file. For a local install use the "--user" flag after "install". ``` - cd pysatMissions/ - python setup.py install +cd pysatMissions/ +python setup.py install ``` +Note: pre-1.0.0 version +------------------ +pysatMissions is currently in an initial development phase. Much of the API is being built off of the upcoming pysat 3.0.0 software in order to streamline the usage and test coverage. This version of pysat is planned for release later this year. Currently, you can access the develop version of this through github: +``` +git clone https://github.com/pysat/pysat.git +cd pysat +git checkout develop-3 +python setup.py install +``` +It should be noted that this is a working branch and is subject to change. + A note on empirical models -------------------------- pysatMissions allows users to interact with a number of upper atmospheric empirical models through the [pyglow](https://github.com/timduly4/pyglow) package. However, pyglow currently requires manual install through git. While pysatMissions can be installed and used without pyglow, it should be installed by the user to access the pyglow methods. Please follow the install instructions at https://github.com/timduly4/pyglow. From dfd7157160a6ec2a21c892d528262a553a8c038e Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Wed, 4 Mar 2020 12:26:07 -0500 Subject: [PATCH 147/162] Update installation.rst --- docs/installation.rst | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/docs/installation.rst b/docs/installation.rst index 5b1a11a7..52df0cb2 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -6,9 +6,9 @@ Installation ---- -Python and associated packages for science are freely available. Convenient science python package setups are available from `Enthought `_ and `Continuum Analytics `_. Enthought also includes an IDE, though there are a number of choices. Core science packages such as numpy, scipy, matplotlib, pandas and many others may also be installed directly via pip or your favorite package manager. +Python and associated packages for science are freely available. Convenient science python package setups are available from https://www.python.org/ and `Anaconda `. Anaconda also includes a developer environment. Core science packages such as numpy, scipy, matplotlib, pandas and many others may also be installed directly via pip or your favorite package manager. -For educational users, an IDE from `Jet Brains `_ is available for free. +For educational users, developer environments from `Jet Brains `_ are available for free. **pysatMissions** @@ -17,8 +17,24 @@ For educational users, an IDE from `Jet Brains Date: Wed, 4 Mar 2020 12:54:19 -0500 Subject: [PATCH 148/162] DOC: update readme --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 214acac9..516e17c3 100644 --- a/README.md +++ b/README.md @@ -17,8 +17,7 @@ Main Features ------------- - Simulate satellite orbits from TLEs and add data from empirical models - Import ionosphere and thermosphere model values through pyglow -- Import magnetic coordinates through apexpy -- Import magnetic coordinates through aacgmv2 +- Import magnetic coordinates through apexpy and aacgmv2 - Import geomagnetic basis vectors through pysatMagVect Documentation From 7e01d6607f45d8116f5fec268908578db9974566 Mon Sep 17 00:00:00 2001 From: jklenzing Date: Wed, 4 Mar 2020 12:55:25 -0500 Subject: [PATCH 149/162] API: update method to add_ram_pointing_sc_attitude_vectors --- pysatMissions/instruments/pysat_ephem.py | 2 +- pysatMissions/methods/spacecraft.py | 2 +- pysatMissions/tests/test_methods_spacecraft.py | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pysatMissions/instruments/pysat_ephem.py b/pysatMissions/instruments/pysat_ephem.py index 91b10ed2..85885dac 100644 --- a/pysatMissions/instruments/pysat_ephem.py +++ b/pysatMissions/instruments/pysat_ephem.py @@ -49,7 +49,7 @@ def init(self): self.custom.attach(mm_magcoord.add_quasi_dipole_coordinates, 'modify') self.custom.attach(mm_magcoord.add_aacgm_coordinates, 'modify') self.custom.attach(mm_sc.calculate_ecef_velocity, 'modify') - self.custom.attach(mm_sc.add_sc_attitude_vectors, 'modify') + self.custom.attach(mm_sc.add_ram_pointing_sc_attitude_vectors, 'modify') # project simulated vectors onto s/c basis # IGRF self.custom.attach(mm_emp.add_igrf, 'modify') diff --git a/pysatMissions/methods/spacecraft.py b/pysatMissions/methods/spacecraft.py index 30f5d166..3b1774ed 100644 --- a/pysatMissions/methods/spacecraft.py +++ b/pysatMissions/methods/spacecraft.py @@ -7,7 +7,7 @@ import pysatMagVect -def add_sc_attitude_vectors(inst): +def add_ram_pointing_sc_attitude_vectors(inst): """ Add attitude vectors for spacecraft assuming ram pointing. diff --git a/pysatMissions/tests/test_methods_spacecraft.py b/pysatMissions/tests/test_methods_spacecraft.py index 6acd3c0f..bcf0eaf4 100644 --- a/pysatMissions/tests/test_methods_spacecraft.py +++ b/pysatMissions/tests/test_methods_spacecraft.py @@ -53,11 +53,11 @@ def test_calculate_ecef_velocity(self): # Check if metadata is added assert target in self.testInst.meta.data.index - def test_add_sc_attitude_vectors(self): + def test_add_ram_pointing_sc_attitude_vectors(self): # TODO: check if calculations are correct # TODO: Update to custom.attach with release of pysat 3.0.0 self.testInst.custom.attach(mm_sc.calculate_ecef_velocity, 'modify') - self.testInst.custom.attach(mm_sc.add_sc_attitude_vectors, 'modify') + self.testInst.custom.attach(mm_sc.add_ram_pointing_sc_attitude_vectors, 'modify') self.testInst.load(date=pysat.datetime(2009, 1, 1)) targets = ['sc_xhat_ecef_x', 'sc_xhat_ecef_y', 'sc_xhat_ecef_z', 'sc_yhat_ecef_x', 'sc_yhat_ecef_y', 'sc_yhat_ecef_z', @@ -76,7 +76,7 @@ def test_project_ecef_vector_onto_sc(self): # TODO: check if calculations are correct # TODO: Update to custom.attach with release of pysat 3.0.0 self.testInst.custom.attach(mm_sc.calculate_ecef_velocity, 'modify') - self.testInst.custom.attach(mm_sc.add_sc_attitude_vectors, 'modify') + self.testInst.custom.attach(mm_sc.add_ram_pointing_sc_attitude_vectors, 'modify') self.testInst.custom.attach(add_fake_data, 'modify') self.testInst.custom.attach(mm_sc.project_ecef_vector_onto_sc, 'modify', 'end', 'ax', 'ay', 'az', 'bx', 'by', 'bz') From 28d0ee727be1d6ce879d091c2c0781bf1927677a Mon Sep 17 00:00:00 2001 From: jklenzing Date: Wed, 4 Mar 2020 12:55:54 -0500 Subject: [PATCH 150/162] STY: pep8 --- pysatMissions/instruments/pysat_ephem.py | 12 +++++++----- pysatMissions/instruments/pysat_sgp4.py | 2 -- pysatMissions/tests/test_methods_spacecraft.py | 5 +++-- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/pysatMissions/instruments/pysat_ephem.py b/pysatMissions/instruments/pysat_ephem.py index 85885dac..eb2b99a2 100644 --- a/pysatMissions/instruments/pysat_ephem.py +++ b/pysatMissions/instruments/pysat_ephem.py @@ -58,9 +58,9 @@ def init(self): 'units': 'nT'} # project IGRF self.custom.attach(mm_sc.project_ecef_vector_onto_sc, 'modify', 'end', - 'B_ecef_x', 'B_ecef_y', 'B_ecef_z', 'B_sc_x', 'B_sc_y', - 'B_sc_z', meta=[in_meta.copy(), in_meta.copy(), - in_meta.copy()]) + 'B_ecef_x', 'B_ecef_y', 'B_ecef_z', 'B_sc_x', 'B_sc_y', + 'B_sc_z', meta=[in_meta.copy(), in_meta.copy(), + in_meta.copy()]) # Thermal Ion Parameters self.custom.attach(mm_emp.add_iri_thermal_plasma, 'modify') # Thermal Neutral parameters @@ -122,8 +122,10 @@ def load(fnames, tag=None, sat_id=None, obs_long=0., obs_lat=0., obs_alt=0., # format of TLEs is fixed and available from wikipedia... # lines encode list of orbital elements of an Earth-orbiting object # for a given point in time - line1 = ('1 25544U 98067A 18135.61844383 .00002728 00000-0 48567-4 0 9998') - line2 = ('2 25544 51.6402 181.0633 0004018 88.8954 22.2246 15.54059185113452') + line1 = ''.join(('1 25544U 98067A 18135.61844383 .00002728 00000-0 ', + '48567-4 0 9998')) + line2 = ''.join(('2 25544 51.6402 181.0633 0004018 88.8954 22.2246 ', + '15.54059185113452')) # use ISS defaults if not provided by user if TLE1 is not None: line1 = TLE1 diff --git a/pysatMissions/instruments/pysat_sgp4.py b/pysatMissions/instruments/pysat_sgp4.py index e7591423..03e3e0e7 100644 --- a/pysatMissions/instruments/pysat_sgp4.py +++ b/pysatMissions/instruments/pysat_sgp4.py @@ -8,9 +8,7 @@ from __future__ import print_function from __future__ import absolute_import import functools -import os -import pandas as pds import pysat from pysatMissions.instruments import _core as mcore diff --git a/pysatMissions/tests/test_methods_spacecraft.py b/pysatMissions/tests/test_methods_spacecraft.py index bcf0eaf4..da95b84e 100644 --- a/pysatMissions/tests/test_methods_spacecraft.py +++ b/pysatMissions/tests/test_methods_spacecraft.py @@ -78,8 +78,9 @@ def test_project_ecef_vector_onto_sc(self): self.testInst.custom.attach(mm_sc.calculate_ecef_velocity, 'modify') self.testInst.custom.attach(mm_sc.add_ram_pointing_sc_attitude_vectors, 'modify') self.testInst.custom.attach(add_fake_data, 'modify') - self.testInst.custom.attach(mm_sc.project_ecef_vector_onto_sc, 'modify', - 'end', 'ax', 'ay', 'az', 'bx', 'by', 'bz') + self.testInst.custom.attach(mm_sc.project_ecef_vector_onto_sc, + 'modify', 'end', 'ax', 'ay', 'az', 'bx', + 'by', 'bz') self.testInst.load(date=pysat.datetime(2009, 1, 1)) targets = ['bx', 'by', 'bz'] for target in targets: From 160c1d1f9062b2bbf2f94f6ca9a61465f707bc01 Mon Sep 17 00:00:00 2001 From: jklenzing Date: Wed, 4 Mar 2020 12:56:05 -0500 Subject: [PATCH 151/162] API: update test_dates --- pysatMissions/instruments/pysat_ephem.py | 2 +- pysatMissions/instruments/pysat_sgp4.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pysatMissions/instruments/pysat_ephem.py b/pysatMissions/instruments/pysat_ephem.py index eb2b99a2..ee1166e4 100644 --- a/pysatMissions/instruments/pysat_ephem.py +++ b/pysatMissions/instruments/pysat_ephem.py @@ -29,7 +29,7 @@ tags = {'': 'Satellite simulation data set'} # dictionary of satellite IDs, list of corresponding tags sat_ids = {'': ['']} -test_dates = {'': {'': pysat.datetime(2018, 1, 1)}} +_test_dates = {'': {'': pysat.datetime(2018, 1, 1)}} def init(self): diff --git a/pysatMissions/instruments/pysat_sgp4.py b/pysatMissions/instruments/pysat_sgp4.py index 03e3e0e7..71732d73 100644 --- a/pysatMissions/instruments/pysat_sgp4.py +++ b/pysatMissions/instruments/pysat_sgp4.py @@ -20,7 +20,7 @@ tags = {'': 'Satellite simulation data set'} # dictionary of satellite IDs, list of corresponding tags sat_ids = {'': ['']} -test_dates = {'': {'': pysat.datetime(2018, 1, 1)}} +_test_dates = {'': {'': pysat.datetime(2018, 1, 1)}} def init(self): From 7d5c607e7b517d28bfe1c5a9eb0f66b86049cc6f Mon Sep 17 00:00:00 2001 From: jklenzing Date: Wed, 4 Mar 2020 13:50:08 -0500 Subject: [PATCH 152/162] DOC: updates to docstrings --- pysatMissions/instruments/pysat_ephem.py | 4 ++-- pysatMissions/instruments/pysat_sgp4.py | 4 ++-- pysatMissions/methods/magcoord.py | 1 + 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/pysatMissions/instruments/pysat_ephem.py b/pysatMissions/instruments/pysat_ephem.py index ee1166e4..6ef07978 100644 --- a/pysatMissions/instruments/pysat_ephem.py +++ b/pysatMissions/instruments/pysat_ephem.py @@ -73,8 +73,8 @@ def init(self): def load(fnames, tag=None, sat_id=None, obs_long=0., obs_lat=0., obs_alt=0., TLE1=None, TLE2=None): """ - Returns data and metadata in the format required by pysat. Finds position - of satellite in both geographic and ECEF co-ordinates. + Returns data and metadata in the format required by pysat. Generates + position of satellite in both geographic and ECEF co-ordinates. Routine is directly called by pysat and not the user. diff --git a/pysatMissions/instruments/pysat_sgp4.py b/pysatMissions/instruments/pysat_sgp4.py index 71732d73..b8e0be13 100644 --- a/pysatMissions/instruments/pysat_sgp4.py +++ b/pysatMissions/instruments/pysat_sgp4.py @@ -36,8 +36,8 @@ def init(self): def load(fnames, tag=None, sat_id=None, obs_long=0., obs_lat=0., obs_alt=0., TLE1=None, TLE2=None): """ - Returns data and metadata in the format required by pysat. Finds position - of satellite in ECI co-ordinates. + Returns data and metadata in the format required by pysat. Generates + position of satellite in ECI co-ordinates. Routine is directly called by pysat and not the user. diff --git a/pysatMissions/methods/magcoord.py b/pysatMissions/methods/magcoord.py index 45938bc4..d4b45a46 100644 --- a/pysatMissions/methods/magcoord.py +++ b/pysatMissions/methods/magcoord.py @@ -97,6 +97,7 @@ def add_quasi_dipole_coordinates(inst, glat_label='glat', glong_label='glong', Input pysat.Instrument object modified to include quasi-dipole coordinates, 'qd_lat' for magnetic latitude, 'qd_long' for longitude, and 'mlt' for magnetic local time. + Example ------- # function added velow modifies the inst object upon every inst.load From 2a132a463c308cc6d9871d2f1279b337c161ee57 Mon Sep 17 00:00:00 2001 From: jklenzing Date: Wed, 4 Mar 2020 15:01:53 -0500 Subject: [PATCH 153/162] DOC: updates to docs --- docs/citing.rst | 6 +- docs/conf.py | 184 ++++++++++++++++++++++++++++++++++++++++++ docs/index.rst | 2 +- docs/installation.rst | 14 +++- docs/tutorial.rst | 38 ++++++++- 5 files changed, 235 insertions(+), 9 deletions(-) create mode 100644 docs/conf.py diff --git a/docs/citing.rst b/docs/citing.rst index ea0e8c13..ae0e51e3 100644 --- a/docs/citing.rst +++ b/docs/citing.rst @@ -39,4 +39,8 @@ Citing the publication: year = {2018} } -To aid in scientific reproducibility, please include the version number in publications that use this code. This can be found by invoking `pysatMissions.__version__ `. +To aid in scientific reproducibility, please include the version number in publications that use this code. This can be found by invoking + +.. code:: + + pysatMissions.__version__ diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 00000000..81158987 --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,184 @@ +# -*- coding: utf-8 -*- +# +# Configuration file for the Sphinx documentation builder. +# +# This file does only contain a selection of the most common options. For a +# full list see the documentation: +# http://www.sphinx-doc.org/en/master/config + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +import os +import sys +from pysatMissions import __version__ +sys.path.insert(0, os.path.abspath('..')) + +# -- Project information ----------------------------------------------------- + +project = 'pysatMissions' +copyright = '2020, Russell Stoneback' +author = 'Jeff Klenzing \\and Russell Stoneback \\and Angeline Burrell' + +# The short X.Y version +version = __version__[::-1].partition('.')[2][::-1] +# The full version, including alpha/beta/rc tags +release = __version__ + + +# -- General configuration --------------------------------------------------- + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + 'sphinx.ext.autodoc', + 'sphinx.ext.doctest', + 'sphinx.ext.todo', + 'sphinx.ext.imgmath', + 'sphinx.ext.autosummary', + 'sphinx.ext.napoleon', + 'recommonmark', + 'numpydoc', + 'IPython.sphinxext.ipython_console_highlighting' +] + +numpydoc_show_class_members = False + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = None + + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = 'alabaster' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# +# html_theme_options = {} + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = [] + +# Custom sidebar templates, must be a dictionary that maps document names +# to template names. +# +# The default sidebars (for documents that don't match any pattern) are +# defined by theme itself. Builtin themes are using these templates by +# default: ``['localtoc.html', 'relations.html', 'sourcelink.html', +# 'searchbox.html']``. +# +# html_sidebars = {} + + +# -- Options for HTMLHelp output --------------------------------------------- + +# Output file base name for HTML help builder. +htmlhelp_basename = 'pysatMissionsdoc' + + +# -- Options for LaTeX output ------------------------------------------------ + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'pysatMissions.tex', 'pysatMissions Documentation', + 'Jeff Klenzing', 'manual'), +] + + +# -- Options for manual page output ------------------------------------------ + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'pysatMissions', 'pysatMissions Documentation', + [author], 1) +] + + +# -- Options for Texinfo output ---------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'pysatMissions', 'pysatMissions Documentation', + author, 'pysatMissions', 'One line description of project.', + 'Miscellaneous'), +] + + +# -- Options for Epub output ------------------------------------------------- + +# Bibliographic Dublin Core info. +epub_title = project + +# The unique identifier of the text. This can be a ISBN number +# or the project homepage. +# +# epub_identifier = '' + +# A unique identification for the text. +# +# epub_uid = '' + +# A list of files that should not be packed into the epub file. +epub_exclude_files = ['search.html'] diff --git a/docs/index.rst b/docs/index.rst index b99ae8db..9a480ccc 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -1,7 +1,7 @@ .. pysatMissions documentation master file Welcome to pysatMissions's documentation! -================================= +========================================= .. toctree:: :maxdepth: 2 diff --git a/docs/installation.rst b/docs/installation.rst index 52df0cb2..4eee5419 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -6,7 +6,7 @@ Installation ---- -Python and associated packages for science are freely available. Convenient science python package setups are available from https://www.python.org/ and `Anaconda `. Anaconda also includes a developer environment. Core science packages such as numpy, scipy, matplotlib, pandas and many others may also be installed directly via pip or your favorite package manager. +Python and associated packages for science are freely available. Convenient science python package setups are available from https://www.python.org/ and `Anaconda `_. Anaconda also includes a developer environment. Core science packages such as numpy, scipy, matplotlib, pandas and many others may also be installed directly via pip or your favorite package manager. For educational users, developer environments from `Jet Brains `_ are available for free. @@ -15,7 +15,7 @@ For educational users, developer environments from `Jet Brains `_ is a python library for accessing the Altitude-Adjusted Corrected Geomagnetic (AACGM) coordinates. + +* Baker, K. B., & Wing, S. (1989). A new magnetic coordinate system for conjugate studies at high latitudes. Journal ofGeophysical Research, 94, 9139–9143. +* Shepherd, S. G. (2014). Altitude−adjusted corrected geomagnetic coordinates: Definition and functional approximations. Journal of Geophysical Research: Space Physics, 119, 7501–7521. https://doi.org/10.1002/2014JA020264 + +`apexpy `_ is a python library for calculating magnetic apex coordinates. + +* Richmond, A. D. (1995). Ionospheric electrodynamics using magnetic apex coordinates. Journal ofGeomagnetism and Geoelectricity, 47(2), 191–212. +* Emmert, J. T., Richmond, A. D., & Drob, D. P. (2010). A computationally compact representation of magnetic-apex and quasi-dipole coordinates with smooth base vectors. Journal ofGeophysical Research, 115, A08322. https://doi.org/10.1029/2010JA015326 +* Laundal, K. M., & Richmond, A. D. (2017). Magnetic coordinate systems. Space Science Reviews, 206, 27–59 + +`pyglow `_ is a python package wrapping multiple empirical models: + +Horizontal Wind Model (HWM) + +* Hedin, A. E., Schmidlin, F. J., Fleming, E. L., Avery, S. K., Manson, A. H., & Franke, S. J. (1993). Empirical wind model for the middle and lower atmosphere—Part 1: Local time average. https://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/19930015971.pdf +* Hedin, A. E., Fleming, E. L., Manson, A. H., Schmidlin, F. J., Avery, S. K., Clark, R. R., et al. (1993). Empirical wind model for the middle and lower atmosphere—Part 2: Local time variations (NASA Technical Memorandum 104592) Greenbelt, MD: Goddard Space Flight Center. https://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/19940017389.pdf +* Drob, D. P., Emmert, J. T., Crowley, G., Picone, J. M., Shepherd, G. G., Skinner, W., et al. (2008). An empirical model of the Earth’s horizontal wind fields: HWM07. Journal ofGeophysical Research, 113, A12304. https://doi.org/10.1029/2008JA013668 +* Drob, D. P., Emmert, J. T., Meriwether, J. W., Makela, J. J., Doornbos, E., Conde, M., et al. (2015). An update to the Horizontal Wind Model (HWM): The quiet time thermosphere. Earth and Space Science, 2, 301–319. https://doi.org/10.1002/2014EA000089 + +International Geomagnetic Reference Field (IGRF) + +* Thébault, E., Finlay, C. C., & Toh, H. (2015). Special issue “international geomagnetic reference field—The twelfth generation”. Earth, Planets and Space, 67(1), 158. https://doi.org/10.1186/s40623-015-0313-0 + +International Reference Ionosphere (IRI) + +* Bilitza, D., Altadill, D., Truhlik, V., Shubin, V., Galkin, I., Reinisch, B., & Huang, X. (2017). International Reference Ionosphere 2016: From ionospheric climate to real-time weather predictions. Space Weather, 15, 418–429. https://doi.org/10.1002/2016SW001593 +* Bilitza, D., Altadill, D., Zhang, Y., Mertens, C., Truhlik, V., Richards, P., et al. (2014). The International Reference Ionosphere 2012—A model of international collaboration. Journal ofSpace Weather and Space Climate, 4, A07. + +Naval Research Laboratory Mass Spectrometer Incoherent Scatter radar Exobase (NRLMSISE) + +* Picone, J. M. (2002). NRLMSISE-00 empirical model of the atmosphere: Statistical comparisons and scientific issues. Journal ofGeophysical Research, 107(A12), 1468–SIA 15–16. From b0d6c8f59489cf2b623f36be4f8966207ce0f821 Mon Sep 17 00:00:00 2001 From: jklenzing Date: Wed, 4 Mar 2020 15:13:26 -0500 Subject: [PATCH 154/162] DOC: updates to references --- docs/index.rst | 1 + docs/references.rst | 53 +++++++++++++++++++++++++++++++++++++++++++++ docs/tutorial.rst | 35 ------------------------------ 3 files changed, 54 insertions(+), 35 deletions(-) create mode 100644 docs/references.rst diff --git a/docs/index.rst b/docs/index.rst index 9a480ccc..0fdb17fa 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -11,3 +11,4 @@ Welcome to pysatMissions's documentation! tutorial.rst contributing.rst citing.rst + references.rst diff --git a/docs/references.rst b/docs/references.rst new file mode 100644 index 00000000..016881b2 --- /dev/null +++ b/docs/references.rst @@ -0,0 +1,53 @@ +References +========== + +**aacgmv2** + +---- + +`aacgmv2 `_ is a python library for accessing the Altitude-Adjusted Corrected Geomagnetic (AACGM) coordinates. + +* Baker, K. B., & Wing, S. (1989). A new magnetic coordinate system for conjugate studies at high latitudes. Journal ofGeophysical Research, 94, 9139–9143. +* Shepherd, S. G. (2014). Altitude−adjusted corrected geomagnetic coordinates: Definition and functional approximations. Journal of Geophysical Research: Space Physics, 119, 7501–7521. https://doi.org/10.1002/2014JA020264 + +**apexpy** + +---- + +`apexpy `_ is a python library for calculating magnetic apex coordinates. + +* Richmond, A. D. (1995). Ionospheric electrodynamics using magnetic apex coordinates. Journal ofGeomagnetism and Geoelectricity, 47(2), 191–212. +* Emmert, J. T., Richmond, A. D., & Drob, D. P. (2010). A computationally compact representation of magnetic-apex and quasi-dipole coordinates with smooth base vectors. Journal ofGeophysical Research, 115, A08322. https://doi.org/10.1029/2010JA015326 +* Laundal, K. M., & Richmond, A. D. (2017). Magnetic coordinate systems. Space Science Reviews, 206, 27–59 + +**pyglow** + +---- + +`pyglow `_ is a python package wrapping multiple empirical models: + +Horizontal Wind Model (HWM) + +* Hedin, A. E., Schmidlin, F. J., Fleming, E. L., Avery, S. K., Manson, A. H., & Franke, S. J. (1993). Empirical wind model for the middle and lower atmosphere—Part 1: Local time average. https://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/19930015971.pdf +* Hedin, A. E., Fleming, E. L., Manson, A. H., Schmidlin, F. J., Avery, S. K., Clark, R. R., et al. (1993). Empirical wind model for the middle and lower atmosphere—Part 2: Local time variations (NASA Technical Memorandum 104592) Greenbelt, MD: Goddard Space Flight Center. https://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/19940017389.pdf +* Drob, D. P., Emmert, J. T., Crowley, G., Picone, J. M., Shepherd, G. G., Skinner, W., et al. (2008). An empirical model of the Earth’s horizontal wind fields: HWM07. Journal ofGeophysical Research, 113, A12304. https://doi.org/10.1029/2008JA013668 +* Drob, D. P., Emmert, J. T., Meriwether, J. W., Makela, J. J., Doornbos, E., Conde, M., et al. (2015). An update to the Horizontal Wind Model (HWM): The quiet time thermosphere. Earth and Space Science, 2, 301–319. https://doi.org/10.1002/2014EA000089 + +International Geomagnetic Reference Field (IGRF) + +* Thébault, E., Finlay, C. C., & Toh, H. (2015). Special issue “international geomagnetic reference field—The twelfth generation”. Earth, Planets and Space, 67(1), 158. https://doi.org/10.1186/s40623-015-0313-0 + +International Reference Ionosphere (IRI) + +* Bilitza, D., Altadill, D., Truhlik, V., Shubin, V., Galkin, I., Reinisch, B., & Huang, X. (2017). International Reference Ionosphere 2016: From ionospheric climate to real-time weather predictions. Space Weather, 15, 418–429. https://doi.org/10.1002/2016SW001593 +* Bilitza, D., Altadill, D., Zhang, Y., Mertens, C., Truhlik, V., Richards, P., et al. (2014). The International Reference Ionosphere 2012—A model of international collaboration. Journal ofSpace Weather and Space Climate, 4, A07. + +Naval Research Laboratory Mass Spectrometer Incoherent Scatter radar Exobase (NRLMSISE) + +* Picone, J. M. (2002). NRLMSISE-00 empirical model of the atmosphere: Statistical comparisons and scientific issues. Journal ofGeophysical Research, 107(A12), 1468–SIA 15–16. + +**pysatMagVect** + +---- + +`pysatMagVect `_ calculates Orthogonal Multipole Magnetic Basis Vectors for the earth's magentic field. pysatMagVect is being renamed OMMBV. diff --git a/docs/tutorial.rst b/docs/tutorial.rst index 731c3e50..8f81b6ec 100644 --- a/docs/tutorial.rst +++ b/docs/tutorial.rst @@ -38,38 +38,3 @@ A number of methods are included to invoke several python wrappers for empirical ivm.custom.attach(empirical.add_iri_thermal_plasma, 'modify', 'end', glat_label='glat', glong_label='glon', alt_label='altitude') Note that in this case, the latitude, longitude, and altitude variable names of the instrument must be specified since they are not identical to the default names in the function. - -**References** - -`aacgmv2 `_ is a python library for accessing the Altitude-Adjusted Corrected Geomagnetic (AACGM) coordinates. - -* Baker, K. B., & Wing, S. (1989). A new magnetic coordinate system for conjugate studies at high latitudes. Journal ofGeophysical Research, 94, 9139–9143. -* Shepherd, S. G. (2014). Altitude−adjusted corrected geomagnetic coordinates: Definition and functional approximations. Journal of Geophysical Research: Space Physics, 119, 7501–7521. https://doi.org/10.1002/2014JA020264 - -`apexpy `_ is a python library for calculating magnetic apex coordinates. - -* Richmond, A. D. (1995). Ionospheric electrodynamics using magnetic apex coordinates. Journal ofGeomagnetism and Geoelectricity, 47(2), 191–212. -* Emmert, J. T., Richmond, A. D., & Drob, D. P. (2010). A computationally compact representation of magnetic-apex and quasi-dipole coordinates with smooth base vectors. Journal ofGeophysical Research, 115, A08322. https://doi.org/10.1029/2010JA015326 -* Laundal, K. M., & Richmond, A. D. (2017). Magnetic coordinate systems. Space Science Reviews, 206, 27–59 - -`pyglow `_ is a python package wrapping multiple empirical models: - -Horizontal Wind Model (HWM) - -* Hedin, A. E., Schmidlin, F. J., Fleming, E. L., Avery, S. K., Manson, A. H., & Franke, S. J. (1993). Empirical wind model for the middle and lower atmosphere—Part 1: Local time average. https://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/19930015971.pdf -* Hedin, A. E., Fleming, E. L., Manson, A. H., Schmidlin, F. J., Avery, S. K., Clark, R. R., et al. (1993). Empirical wind model for the middle and lower atmosphere—Part 2: Local time variations (NASA Technical Memorandum 104592) Greenbelt, MD: Goddard Space Flight Center. https://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/19940017389.pdf -* Drob, D. P., Emmert, J. T., Crowley, G., Picone, J. M., Shepherd, G. G., Skinner, W., et al. (2008). An empirical model of the Earth’s horizontal wind fields: HWM07. Journal ofGeophysical Research, 113, A12304. https://doi.org/10.1029/2008JA013668 -* Drob, D. P., Emmert, J. T., Meriwether, J. W., Makela, J. J., Doornbos, E., Conde, M., et al. (2015). An update to the Horizontal Wind Model (HWM): The quiet time thermosphere. Earth and Space Science, 2, 301–319. https://doi.org/10.1002/2014EA000089 - -International Geomagnetic Reference Field (IGRF) - -* Thébault, E., Finlay, C. C., & Toh, H. (2015). Special issue “international geomagnetic reference field—The twelfth generation”. Earth, Planets and Space, 67(1), 158. https://doi.org/10.1186/s40623-015-0313-0 - -International Reference Ionosphere (IRI) - -* Bilitza, D., Altadill, D., Truhlik, V., Shubin, V., Galkin, I., Reinisch, B., & Huang, X. (2017). International Reference Ionosphere 2016: From ionospheric climate to real-time weather predictions. Space Weather, 15, 418–429. https://doi.org/10.1002/2016SW001593 -* Bilitza, D., Altadill, D., Zhang, Y., Mertens, C., Truhlik, V., Richards, P., et al. (2014). The International Reference Ionosphere 2012—A model of international collaboration. Journal ofSpace Weather and Space Climate, 4, A07. - -Naval Research Laboratory Mass Spectrometer Incoherent Scatter radar Exobase (NRLMSISE) - -* Picone, J. M. (2002). NRLMSISE-00 empirical model of the atmosphere: Statistical comparisons and scientific issues. Journal ofGeophysical Research, 107(A12), 1468–SIA 15–16. From 27e5885631ba8de974d1736dfcb6fa0339a31193 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Wed, 4 Mar 2020 23:02:02 -0500 Subject: [PATCH 155/162] BUG: directory in conf.py --- docs/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index 81158987..7c637f91 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -14,8 +14,8 @@ # import os import sys -from pysatMissions import __version__ sys.path.insert(0, os.path.abspath('..')) +from pysatMissions import __version__ # -- Project information ----------------------------------------------------- From 3d08570216570c9caf241d93b752a33e9269e9f0 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Wed, 4 Mar 2020 23:12:23 -0500 Subject: [PATCH 156/162] BUG; Update requirements --- setup.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index 10de042f..cd31ecd2 100644 --- a/setup.py +++ b/setup.py @@ -19,8 +19,8 @@ # change setup.py for readthedocs - commented for now # on_rtd = os.environ.get('READTHEpysatMissionsDOCS') == 'True' -install_requires = ['pysat', 'sgp4', 'pyEphem', 'matplotlib', - 'apexpy', 'aacgmv2', 'pysatMagVect'] +install_requires = ['pysat', 'numpy', 'pandas', 'sgp4', 'pyEphem', + 'matplotlib', 'apexpy', 'aacgmv2', 'pysatMagVect'] # Run setup From 2fb64091dd402f7d0fc94c2953f71b64c2b13b92 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Sat, 7 Mar 2020 18:08:27 -0500 Subject: [PATCH 157/162] DOC: update changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eac59b35..48b2e2b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). -## [0.2.0] - 2019-12-18 +## [0.2.0] - 2020-03-07 - Renamed as pysatMissions - Added method files to access aacgmv2, apexpy, pyglow for any pysat instrument - Added method for spacecraft to handle attitude and coordinates From 9cb3605046fd1f78071e25be1d4367d803b70718 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Sat, 7 Mar 2020 18:13:51 -0500 Subject: [PATCH 158/162] DOC: typos --- CONTRIBUTING.md | 2 +- docs/references.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 43ec72b5..6cdbd174 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -80,7 +80,7 @@ For merging, you should: 1. Include an example for use 2. Add a note to ``CHANGELOG.md`` about the changes -3. Ensure that all checks passed (current checks include Scrutinizer, Travis-CI, +3. Ensure that all checks passed (current checks include Travis-CI and Coveralls) [1]_ .. [1] If you don't have all the necessary Python versions available locally or diff --git a/docs/references.rst b/docs/references.rst index 016881b2..2be13c14 100644 --- a/docs/references.rst +++ b/docs/references.rst @@ -50,4 +50,4 @@ Naval Research Laboratory Mass Spectrometer Incoherent Scatter radar Exobase (NR ---- -`pysatMagVect `_ calculates Orthogonal Multipole Magnetic Basis Vectors for the earth's magentic field. pysatMagVect is being renamed OMMBV. +`pysatMagVect `_ calculates Orthogonal Multipole Magnetic Basis Vectors for the earth's magnetic field. pysatMagVect is being renamed OMMBV. From 0679e8b3f380457cc64adc95368a6af0650da457 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Sat, 7 Mar 2020 18:19:08 -0500 Subject: [PATCH 159/162] ENH: add try/except to init for readthedocs --- pysatMissions/__init__.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/pysatMissions/__init__.py b/pysatMissions/__init__.py index 624ea711..0020d454 100644 --- a/pysatMissions/__init__.py +++ b/pysatMissions/__init__.py @@ -1,10 +1,14 @@ from __future__ import print_function from __future__ import absolute_import - +import logging import os -from pysatMissions import instruments -from pysatMissions import methods -from pysatMissions import plot + +try: + from pysatMissions import instruments + from pysatMissions import methods + from pysatMissions import plot +except ImportError as errstr: + logging.exception('problem importing pysatMissions: ' + str(errstr)) __all__ = ['instruments', 'methods', 'plot'] From c7a30e0af6880a113ef29bdae2c252d5610f3fa1 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Sat, 7 Mar 2020 18:31:23 -0500 Subject: [PATCH 160/162] STY: pep8 --- pysatMissions/methods/empirical.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/pysatMissions/methods/empirical.py b/pysatMissions/methods/empirical.py index 5786d933..0b9bb569 100644 --- a/pysatMissions/methods/empirical.py +++ b/pysatMissions/methods/empirical.py @@ -67,8 +67,8 @@ def add_iri_thermal_plasma(inst, glat_label='glat', glong_label='glong', try: for time, lat, lon, alt in zip(inst.data.index, inst[glat_label], inst[glong_label], inst[alt_label]): - # Point class is instantiated. Its parameters are a function of time - # and spatial location + # Point class is instantiated. Its parameters are a function of + # time and spatial location pt = Point(time, lat, lon, alt) pt.run_iri() iri = {} @@ -393,12 +393,12 @@ def get_ecef_wind_meta(coord='x', geo='mer'): else: name = 'Zonal' dict = {'units': '', - 'long_name': ' '.join(['{name:s} Wind Unit ECEF', - '{coord:s}-vector']).format(name=name, - coord=coord), - 'desc': ' '.join(['{coord:s}-value of {name:s} wind unit vector', - 'in ECEF coordinates']).format(name=name.lower(), - coord=coord)} + 'long_name': ''.join(['{name:s} Wind Unit ECEF {coord:s}', + '-vector']).format(name=name, + coord=coord), + 'desc': ' '.join(['{coord:s}-value of {name:s} wind unit', + 'vector in ECEF coordinates'] + ).format(name=name.lower(),coord=coord)} return dict inst.meta['zonal_wind'] = {'units': 'm/s', From c58556951e05a5888c8c129fd40d52aa8c46d5c3 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Sat, 7 Mar 2020 18:32:35 -0500 Subject: [PATCH 161/162] STY: pep8 --- pysatMissions/methods/empirical.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pysatMissions/methods/empirical.py b/pysatMissions/methods/empirical.py index 0b9bb569..aa61660e 100644 --- a/pysatMissions/methods/empirical.py +++ b/pysatMissions/methods/empirical.py @@ -398,7 +398,7 @@ def get_ecef_wind_meta(coord='x', geo='mer'): coord=coord), 'desc': ' '.join(['{coord:s}-value of {name:s} wind unit', 'vector in ECEF coordinates'] - ).format(name=name.lower(),coord=coord)} + ).format(name=name.lower(), coord=coord)} return dict inst.meta['zonal_wind'] = {'units': 'm/s', From ed47f8a61289073545dc169d08452b48c9f2f73a Mon Sep 17 00:00:00 2001 From: Jeff Klenzing Date: Sat, 7 Mar 2020 18:33:44 -0500 Subject: [PATCH 162/162] STY: whitespace --- pysatMissions/methods/empirical.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pysatMissions/methods/empirical.py b/pysatMissions/methods/empirical.py index aa61660e..a5d83e69 100644 --- a/pysatMissions/methods/empirical.py +++ b/pysatMissions/methods/empirical.py @@ -393,9 +393,9 @@ def get_ecef_wind_meta(coord='x', geo='mer'): else: name = 'Zonal' dict = {'units': '', - 'long_name': ''.join(['{name:s} Wind Unit ECEF {coord:s}', - '-vector']).format(name=name, - coord=coord), + 'long_name': ' '.join(['{name:s} Wind Unit ECEF', + '{coord:s}-vector'] + ).format(name=name, coord=coord), 'desc': ' '.join(['{coord:s}-value of {name:s} wind unit', 'vector in ECEF coordinates'] ).format(name=name.lower(), coord=coord)}