Release Notes#

Version 0.25 (Mar 7, 2023)#

New features and improvements:

  • Export to PTR [118], with AGM and AGM-MOS cross validation.

  • Accept PTR or CK file as input to compute command/function [121], with AGM validation.

  • New ptr-pointings command/function [123] listing available PTR Pointing Types and required parameters.

  • New pointing for “short distance” disk scan (NPL) [120]

  • New SC pointing boresight definition [119]

  • Improved/new PointingViewer coordinate system (NPO) [122]

Fixed issues:

  • “Ring” SC pointing simulation issue [96]

  • Chek Perijove 12 CA time — CREMA5_1_150lb [105]

  • Python cell outputs when using “non-nominal” pointing [115]

Version 0.24 (Feb 3, 2023)#

  • New ESA mission events handling, events/event commands [108]

  • New Exporter module, export command, PTR (beta) [112]

  • New PTR Pointing module, ptrgen command (beta) [113]

  • Reorganised gfinder_cli into gfinder module [111]

  • Upgraded to Python 3.10 [90]

  • Added planetary-coverage and esa-ptr packages dependency [91]

  • Fixed issues: [101], [106]

Version 0.23 (Nov 28, 2022)#

New opportunity definitions

Main ring observation types, and associated Notebooks:

Common geometry definitions:

The following diagram shows the relationship between all the new definitions, and their attribute-set. It also shows the relation with the JUICE SOC segment definition.

_images/mainring_definitions.png

Note

The execution time for searching rings observations opportunities is significantly higher than an implementation of the opportunity definitions without Target_Solar_Eclipse calculation. This could be optimised by using “juice_in_eclipse” attribute/calculation only for MAJIS_MainRING_PhaseCurve observations.

Important

The current implementation for the SC pointing definition, in juice_jupiter_ring_scan.json, is based on the North_Pole_Direction geometry. This is an open issue about an offset between the +Xsc (MAJIS split) axis and the equatorial plane, in the PointingViewer. See Ring SC pointing simulation issue.

New Geometry classes

Along with the above new opportunity definitions, the following new Geometry classes were implemented for the main ring observation types:

Tip

You can list all “ring” related geometries using the gfinder geometries -name=ring command.

Jovian’s ring vertical and horizontal angular sizes calculation

Important for deriving the SC offset and MAJIS scanner start/end angle (deg) used for the simulation of the desired pointing.

_images/ring_angular_sizes.png

New Event CSV export feature

You can now export the list of opportunity observations (opportunity time windows/segments) to CSV file, which can imported into the JUICE SOC Timeline tool.

From the command-line, example:

# Search MAJIS_MainRING_HighPhase opportunities
gfinder search MAJIS_MainRING_HighPhase.json --event-id=Jupiter_Phase_all --n-steps=5000

# Export to CSV file
gfinder export crema50_jup_majis_mainring_highphase_20310119_20341219

# Display output CSV file
more data/opportunities/CREMA50/crema50_jup_majis_mainring_highphase_20310119_20341219/observations.csv

From a Jupyter Notebook, example:

opportunity.export_to_csv('ring_hp_segments.csv', event_basename='RING_HP', group='WG2')

Examples of output Event CSV files, generated for the SOC rings segmentation cross-validation, can be found in the new MOS Opportunity Data repository.

Search suffix option

Similarly to the --suffix option of the compute command, you can now use this option for the search command.

For example, the following command will results in storing opportunity data with the crema50_jup_majis_mainring_phasecurve_20310119_20341219_40 opportunity ID. It allows you to store separately and distinguish search computation results using different input definition attribute-sets.

gfinder search MAJIS_MainRING_PhaseCurve.json --event-id=Jupiter_Phase_all --min-phase-angle=40 --min-phase-angle=50 --suffix=40

Data viewers improvement

  • Visualise Vector-based Geometry in XY_Viewer (new):

    XY_Viewer(simu).show(geometry_name='Observed_Ring_Point', x_index=3, y_index=2)
    
    _images/v0.23_xy_viewer_vector.png
  • Visualise Scalar-based Geometry in XY_Viewer:

    XY_Viewer(opportunity).show(
        x_geometry_name='Ring_West_Ansa_Phase_Angle',
        y_geometry_name='Ring_West_Ansa_Best_Resolution'
        #xaxis_range=[0, 180]
    )
    
    _images/v0.23_xy_viewer_scalar.png
  • For data viewers you can now set the height of the canvas using, for example:

    PointingViewer(simu).show(height=800, all_detector_fov=True)
    

Bug fixes

  • Corrected TimeSeriesViewer, which was using UTC time format when a GeometryEvent was not associated to a reference event (phase, segment,…).

Version 0.22 (Sep 10, 2022)#

General

  • Changes resulting from C2 evaluation, with complete 7E1 flyby planning exercise.

  • Switched to N67 CSPICE, SpiceyPy 5.1.1, to take advantage of the new tangpt high-level routine, used by Observed_Target_Points Geometry class.

  • Correction: deriving planetocentric instead of planetodetic coordinates of observed target points, in Geolocation Geometry class, eg: Detector_Boresight_Target_Point, Detector_FOV.

Fixed issues

  • Throwing an error message instead of crashing when simulating a SC and/or MAJIS scanner for which the corresponding simulated frame is not defined in the input ODF file. For example, the following compute command:

    obs = gfinder_cli.compute(
        odf_file='MAJIS_SAT_DISK_SLEW.json',
        target='EUROPA',
        event_id='7E1',
        start_time='-05:32:00.000',
        n_steps=296,
        time_step=7.500,
        sim_sc_att=True,
        sc_slew_angles=sc_slew_angles,
        sim_scanner= True, # trying to simulate MAJIS scanner motion...
        majis_scan_angle=majis_scan_angle, # ...using these `majis_scan_angle` parameters.
        mission_scenario_id=mission_scenario_id,
        suffix='obs',
        overwrite=True
    )
    

    will result in a message like this:

    /Users/nmanaud/workspace/git-repos/gfinder-data/odf/MAJIS_SAT_DISK_SLEW.json ODF file does not contain`Simulated_Scan_Frame` geometry definition, and therefore `majis_scan_angle` option cannot be used.
    Invalid opportunity definition based on input <MAJIS_SAT_DISK_SLEW.json> ODF file.
    
  • Allowing observation_types.json index file to be used in user ODF data store. A warning is throwing when it is missing from both user and application ODF data store directories.

  • Added conditional SimulatedSCFrameError exception raised when a primary or secondary vector, defining a spacecraft simulated frame, can not be computed, and that the simulator is turned on (sim_sc_att=True) for JUICE_SPACECRAFT. If the simulator is turned off (eg: when computing a geometry overview), then only a warning is thrown and computation continues. Primary or secondary vector usually can not be computed when the associated Direction-type Geometry class (eg: Limb_Point_Direction) input parameters values does not lead to a unique solution at a given ephemeris time. An example of SimulatedSCFrameError error:

    SimulatedSCFrameError: Could not compute Limb_Point_Direction as Simulated_SC_Frame primary vector at ephemeris time 1025673643.1840636. Try a different set of inputs parameters: {'target': 'EUROPA', 'latitude': 74, 'max_incidence_angle': 90.0}.
    
  • Fixed SpiceKERNELPOOLFULL issue preventing to search and/or compute a limited number of opportunities. Changed gfinder.scenario.MissionScenario.loadKernels() so that required kernels are loaded only not in the SPICE kernel pool.

  • Fixed the "gfinder/geometry.py:1093: RuntimeWarning: divide by zero encountered in log" issue. The analytical solution (by Yves Langevin) of the MAJIS scanner scan duration time makes the hypothesis that the stop scan rate is not null (see Geometrical Models).

  • Fixed the "geometry.py:504: RuntimeWarning: invalid value encountered in double_scalars issue by improving the computation of pointing directions NOA angles, using np.sign function working for values extremely close to zero.

Geometry classes and ODFs

  • Added Nicolas Ligier’s MAJIS_FLYBY_MEDRES master ODF in gfinder-data package, using same conditions as MAJIS_FLYBY_HR: common/majis_hr_conditions.json.

  • New Detector_Boresight_Altitude Geometry class, which computes the altitude of the detector boresight tangent point above the target surface. It was added to the detector_geometry.json common geometry ODF file, and can be visualised with the TimeSeriesViewer.

  • New Obs_Limb_Latitudinal_Range Geometry class, which returns the observable limb latitudinal range for an associated observation opportunity. It is useful to avoid simulating limb observations for latitudes that can not be observed.

  • Updated the following ODF files to include the new Obs_Limb_Latitudinal_Range Geometry class:

    • common/target_disk_geometry.json

    • MAJIS_SAT_LIMB_SCAN

    • MAJIS_SAT_LIMB_SLEW

    • MAJIS_JUP_LIMB_SCAN

    • MAJIS_JUP_LIMB_SLEW

    Example of search command execution using compute option, returning observable limb latitudinal ranges for each found opportunities:

    #0001  2032-07-02 11:14:58.776 (-05:07:25.223)  04:48:21.977 (17301.977 s)
    
           Obs_Limb_Latitudinal_Range:
             min = -56.72570848477622 deg
             max = 86.36205054682223 deg
    
    #0002  2032-07-02 16:08:56.219 (-00:13:27.780)  05:19:35.627 (19175.628 s)
    
           Obs_Limb_Latitudinal_Range:
             min = 9.841617836220479 deg
             max = 73.18068452561174 deg
    

Note

Latitudinal conditions could later be added to the limb observation type ODFs, using the Limb_Min_Latitude and Limb_Max_Latitude Geometry classes. For example, for “equatorial” limb observations’ conditions could look like this:

{
  "name": "Limb_Min_Latitude",
  "parameters": {
    "target": "@target",
    "max_incidence_angle": "@max_incidence_angle"
  },
  "condition": {
    "relationalCondition": ">",
    "referenceValue": -20.0,
    "adjustmentValue": 0
  }
},
{
  "name": "Limb_Max_Latitude",
  "parameters": {
    "target": "@target",
    "max_incidence_angle": "@max_incidence_angle"
  },
  "condition": {
    "relationalCondition": "<",
    "referenceValue": 20.0,
    "adjustmentValue": 0
  }
}

dev1 (July 28, 2022)#

Fixed issues

  • SC_Slew_Angles computation for parameter set ['x_start', 'x_stop', 'x_rate'] was fixed so as to take into account for negative and positive start angles. Note that the x_start angle returned by the Obs_SC_Slew_Parameters Geometry is currently assumed to be always negative (we might want to improve this later).

    _images/disk_slew_directions_fix.png
  • search, compute and definition CLI commands now take additional attributes as options, similarly to their corresponding Python functions. For example: --min-phase-angle=10.0 (command option) and min_phase_angle=10.0 (function keyword argument).

CLI and CLI Python API

  • Added “Pointing ODF” column in the list of observation types and ODFs returned by the definitions command or gfinder_cli.definitions() function.

  • Added the list of “Included ODF files” and “Additional attributes” in the information returned by the definition command or gfinder_cli.definition() function.

  • Added “no_save” keyword argument to the gfinder_cli.search() and gfinder_cli.compute() functions to avoid writing opportunity data in the data store when it is not necessary, and saving some ~7% execution time.

  • Added “silent” keyword argument to the gfinder_cli.search() and gfinder_cli.compute() functions to disable displaying the fully summary of an opportunity calculation, which can be obtained by using the opportunity.summary() method.

Geometry classes

  • New Limb_Distance and Vertical_Resolution (pointing-independent) classes for use in limb observation definitions.

Observation-type ODFs

  • Implemented master ODFs for the following MAJIS observation types: MAJIS_JUP_DISK_SLEW, MAJIS_JUP_DISK_SCAN, MAJIS_JUP_LIMB_SLEW, MAJIS_JUP_LIMB_SCAN, MAJIS_GCO5000_LIMB, MAJIS_GCO500_LIMB, MAJIS_GCO500_HR, MAJIS_SAT_LIMB_SCAN, MAJIS_SAT_LIMB_SLEW, MAJIS_SAT_DISK_SLEW, MAJIS_SAT_DISK_SCAN, MAJIS_FLYBY_HR.

  • Included common and pointing ODFs have been implemented accordingly, as shown in the diagram below. Additional attributes have been implemented for some common conditions ODFs. For example, for majis_limb_conditions.json:

    "min_vertical_resolution": 0.0,
    "max_vertical_resolution": 10.0,
    "min_phase_angle": 30.0,
    "max_phase_angle": 150.0
    
  • At least one notebook per observation type is provided. They do not all contain examples of simulations. See Observation Types notebooks.

_images/v0.22-dev1_odfs_relationship.png

Documentation updates

Version 0.21 (June 3, 2022)#

Overall gfinder-python-cli package cleanup and re-organisation.

  • Removed gfinder_web.

  • Moved notebooks from docs/source to package root.

  • Updated setup.py requirements.

  • Included jupyterlab requirement outside setup.py in separate a requirements.txt file (for local single-user/dev).

  • Separated docs and tests requirements in dedicated requirements.txt files.

GFINDER CLI and CLI Python API (new)

  • New gfinder_cli Python API allowing to call CLI commands using Python, which allow users to:

    • write scriptable notebooks (no more copy/pasting!),

    • speed-up execution time, and

    • allow for “subcutaneous” tests.

    import gfinder_cli
    
    odf_file = 'MAJIS_FLYBY_HR.json'
    target='EUROPA'
    event_id = '7E1_CA'
    mission_scenario_id='CREMA50'
    
    # This function call ...
    overview = gfinder_cli.compute(
        odf_file=odf_file,
        target=target,
        event_id=event_id,
        start_time='-12:00:00',
        stop_time='12:00:00',
        mission_scenario_id=mission_scenario_id,
        suffix='overview',
        overwrite=True
    )
    
    # ...is equivalent to the following CLI call from a Terminal:
    #
    # $ gfinder compute --odf-file=MAJIS_FLYBY_HR.json --target=EUROPA \
    #     --event-id=7E1_CA --start-time=-12:00:00 --stop-time=12:00:00 \
    #     --mission-scenario-id --suffix=overview --overwrite
    

    Known issue

    There is a one-to-one matching between each CLI command and its corresponding function arguments, with the exception of additional keywords that can be passed to the gfinder_cli.search(), gfinder_cli.compute() and gfinder_cli.definition() functions (eg: latitude=-20).

  • New search and compute --target command option.

  • Updated search --compute option behaviour:

    • Searchable geometries are computed when the option is not used.

    • Corrected default number of computational time steps to 100.

  • search and compute commands new save used/”parametrised” ODF in output opportunity directory.

GFINDER Python API

  • Updated gfinder package interface, allowing to access more easily high-level modules: Config, DataStore, TimeSeriesViewer, MapViewer, PointingViewer, OpportunityDefinition and GeometryFactory. Eg: from gfinder import TimeSeriesViewer.

  • Updated gfinder.opportunity.OpportunityDefinition and gfinder.datastore.DataStore classes to implement new ODF/data store model.

  • Increased TimeSeriesViewer and PointingViewer layout height to 512px for better visibility.

Tests

  • Very first basic tests using pytest implemented in tests.

  • Notebooks in `notebooks serving as tests, using nbmake Pytest plugin, and documentation.

  • Testing strategy, framework and procedure shall be described in Testing.

Opportunity Definitions (ODF)

_images/datastore-odf_model.png
  • ODF data store reorganised:

    • / : contains observation_types_index.json file and all “master” observation-type ODF.

    • common/ : contains common geometries and geometrical conditions.

    • pointing/ : contains common pointing definitions.

    • deprecated/: contains deprecated definitions that are not scanned and indexed by the definitions CLI command/function.

Notebooks

  • Notebooks are now located in notebooks. They are used as tests, use cases and other documentation purpose:

    • observation-types/: contains a series of (tested) notebooks for each MAJIS observation type, that constitute “use cases”.

    • howtos/: contains how-to guides; might go away and be replaced by *.md (Markdown) file containing code blocks.

    • tests/: contains test notebooks that do not constitute a “use case” (eg.: test_pointingviewer.ipynb).

    • tutorials/: now deprecated; might be re-written later.

  • Currently implemented observation-type notebooks are:

Documentation

  • Now using myst-nb and sphinxcontrib-programoutput for inclusion of Python and shell execution output blocks in documentation.

  • Updated GFINDER Python APIs section for both the gfinder and new gfinder_cli APIs.

  • New File Specifications section.

  • New Observation Types section as “use case” (tested) notebooks.

Version 0.20-dev (Apr 22, 2022)#

This is intermediate developing version not installed on MOS JupyterHub, which includes:

  • New definitions and definition command allowing to:

    • list/filter available opportunity definitions (ODF files), grouped by observation type.

    • get information about an opportunity definition (ODF file).

    • generate an ODF file from an observation-type ODF master file (template), using ODF attributes as parameters (eg: target, detector, latitude, max_incidence_angle), and SC and/or MAJIS scanner pointing commanding parameters (sc-slew-angles, majis-scan-angle).

    • validate an observation-type ODF (that are written manually).

  • New ODF files and organisational model:

    • One “master” ODF per observation type (eg: MAJIS_SAT_DISK_SLEW.json).

    • One ODF per pointing type, in pointing_types sub-directory.

    • Generic/common geometrical conditions and geometries ODF files (eg: majis_sat_disk_conditions.json)

    • New “include” JSON object to include one or several geometry definitions from another ODF file.

    • Generalised ODF @variable-type allowing to parametrise an ODF (eg: target, or latitude for a limb pointing).

This design changes/evolution and updated MOS Requirements on Gitlab, should allow us to better trace MAJIS observation and pointing types implementation to requirements, and to implement a testing strategy (Notebooks, ODFs, and Geometry classes).

Version 0.19 (Mar 21, 2022)#

  • Updated Motion_Compensation so as to take into account for spacecraft backward or forward motion.

  • New Simulated_SC_Frame definition type based on NAIF reference frames: JUICE_SPACECRAFT (“CK baseline”), or JUICE science operations frames (eg: JUICE_EUROPA_NOA, JUICE_JUPITER_NPO), which allow to perform SC offsets, slews or MAJIS scans based on the planned spacecraft pointing baseline (CK).

  • New power-optimised parameter for two-vectors-based Simulated_SC_Frame definition.

  • Merged MAJIS_Scan_Rate_Angle into MAJIS_Scan_Angle, allowing for asymmetrical or constant scanning pointing, using new ['start_angle', 'stop_angle', 'start_scan_rate', 'stop_scan_rate', 'method'] required parameters set.

  • New ['x_start', 'y_start'] required parameters set for SC_Slew_Angles; constant offset angles.

  • New/updated CLI compute options/mechanism to overwrite ODF geometry definition parameters: --sc-slew-angles and --majis-scan-angle. Eg: --sc-slew-angles='{"x_start": 2.0, "y_start": 2.0}'

  • New MapViewer color-coded SC tranquilisation time using --sc_tranq_time option (default is 0).

  • New MapViewer color palette and colors option.

  • Correction of GeoJSON files generation.

  • Updated documetation and notebooks (tutorials).

Version 0.18 (Feb 4, 2022)#

Consolidation and documentation
MapViewer
  • Improved method for splitting footprint geometry, much faster but most likely covering less cases: split=True (default).

  • New method to filter out “off-surface” footprints (#69): surface_only=True (default is False).

  • Increased layout height to 512px for better map visibility (full latitudinal range fitting in).

  • Lowered footprint opacity and introduced new opacity optional argument (default is 0.4).

  • New graticule 10x10 degrees layer for better map readability.

Geometry classes
  • SC_Slew_Rate_Angles removed, merged into SC_Slew_Angles (using multiple required parameters sets).

  • First implementation of a Obs_SC_Slew_Parameters class for the computation of SC slew commanding parameters to be used as inputs to SC_Slew_Angles (similar to Obs_Scanner_Motion_Parameters).

ODF
  • New europa_disk_scan.json for testing purpose (SC slew and MAJIS scan).

Version 0.17 (Jan 7, 2022)#

  • New method implemented for the estimation of MAJIS scanner motion parameters (Obs_Scanner_Motion_Parameters) based on pre-computed motion compensation angles (Motion_Compensation_Angle): angular velocity changing linearly with scanner steps (not time).

  • Corrected Detector_Boresight_Ground_Drift geometry class.

  • New --scanner-method option allowing to simulate MAJIS scanner motion using two interpolation methods: discrete (default) and continuous.

  • Improved gfinder.opportunity.Opportunity.get_no_comp_times() function, now handling cases where there are no or two time-window solutions.

  • New europa_7E1_HR notebook corresponding europa_flyby_hr.json ODF file.

  • Updated callisto_flyby_hr.json ODF file.

  • New configuration system based on a .gfinder_config.yml file created/located in users’ home directory. No need for environment variables anymore.

Version 0.16 (Nov 12, 2021)#

  • Improved MAJIS scanner modeling, in Motion_Compensation, Obs_Scanner_Motion_Parameters and MAJIS_Scan_Angle geometry classes, respectively:

    • "max_range" defined by MAJIS_Scan_Angle({}, silent=True).scanner_angular_range

    • applied weight to the first Motion_Compensation_Angle data point for polynomial fit (still assuming angular velocity changes linearly with time; wrong but first good approximation).

    • introduced to following MAJIS_Scan_Angle properties and methods to return valid scan angle:

      • scanner_angular_step

      • scanner_angular_range

      • valid_scanner_angles

      • valid_scanner_positions

      • set_scan_parameters() (start_angle, stop_angle, n_steps, positions, times, t_scan, t_scan_yl)

      • get_scanner_angle(time)

      • position_to_angle(position)

      • get_valid_scanner_angle(angle)

  • New CLI compute command options to be used as MAJIS scanner commanding input parameters to MAJIS_Scan_Angle geometry definition in the input ODF file:

    • --scanner_start_angle

    • --scanner_start_scan_rate

    • --scanner_stop_scan_rate

    These options are used in combination with --sim-scanner option. The scan_rotation_angle parameter value of the ODF Simulated_Scan_Frame geometry definition is automatically overwritten from Motion_Compensation_Angle to MAJIS_Scan_Angle.

  • “friendly-binning”: user can now input --binning value from the CLI to compute simulated geometry data. No need to edit multiple ODF files using different detector names (eg: ‘JUICE_MAJIS_VISNIR’, JUICE_MAJIS_VISNIR_B2, etc…); detector names are automatically overwritten accordingly.

  • New Detector_Boresight_Ground_Drift geometry class.

  • New handy gfinder.opportunity.Opportunity.get_no_comp_times() method to return the “no-compensation” time window within an given simulated observation. Works only when a Dwell_Time geometry is defined in the ODF.

  • TAMN implementation demo to fix MapViewer-related issue with footprints (or any geospatial features) crossing the target body anti-meridian and/or pole(s). Footprints are not split at computation but at visualisation. This allow to preserve original footprints that can be visualised in 3D space, reduce computation time. However it significantly increase visualisation time. Therefore, the split=True option should only be used when necessary.

  • New data store management to improve multi-user approach on MOS JupyterHub. Main are changes:

    • output opportunity data are generated to and read from the user’s data directory, GFINDER_USER_DATA_DIR (eg: /home/jupyter-nligier/data); opportunities sub-directory.

    • input definition data are read from the user’s data directory, or from a shared-git-controlled application data directory, GFINDER_APP_DATA_DIR (eg: /srv/gfinder-data) if no definition data sub-directory is found (odf, scenarios, rois)

      This means that GFINDER CLI can work without any user’s definition data. However, users can copy definition data from the application data directory (eg: /srv/gfinder-data) to his/her user’s data directory, changes and add definitions at will without interfering with the application data directory (that is shared among all users).

    • MOS JupyterHub updated accordingly

  • New ODF variable concept: @target, @detector are re-usable variables, defined in each ODF file. Hence, the target and detector JSON attributes are now mandatory.

  • Allowing null value for Simulated_SC_Frame offset_rotations parameter: "offset_rotations": "".

  • New CLI geometries command --filter option to quickly find and get information about a geometry class.

  • Improved opportunity data summary output, including showing SC and scanner simulation parameters.

  • All notebooks and ODF files have been tested and corrected according to new ODF specifications and currently available Geometry classes.

Version 0.15(.1) (Oct 12, 2021)#

  • Implementation of MAJIS scanner motion compensation definition, computation and simulation:

    • Re-written Motion_Compensation Geometry class, assuming SC nadir pointing and forward-motion, and taking into account light-time aberration correction at target surface points (scanner start angle mode: “zero” or “max range”).

    • Renamed Scanning_Angle to Motion_Compensation_Angle.

    • New Obs_Scanner_Motion_Parameters Observation-level Geometry class that derives start_angle, start_scan_rate and stop_scan_rate parameters from Motion_Compensation_Angle pre-computed values. A 2nd-order polynomial fit is used.

    • New MAJIS_Scan_Angle Geometry class allowing to define MAJIS scanner motion (start_angle, start_scan_rate and stop_scan_rate parameters).

    • New callisto_flyby_hr.json ODF file and callisto_21C13_HR.ipynb notebook.

  • Fixed issue with SPICE kernels pool overflow when using notebooks.

Version 0.14 (Sep 3, 2021)#

  • Previous version (v0.13) issues solved:

    • Mismatch between Detector_FOV_Footprint center and Detector_Boresight_Target_Point: introduced interpolation of detector FOV bound direction vectors for accurate representation of FOV footprints in cartographic coordinates system, see gfinder.geometry.Detector.get_bounds().

    • Limb Detector_FOV_Footprint and Detector_Boresight_Target_Point latitudes seem shifted with respect to expected Limb_Target_Direction latitude: corrected interpolation of limb points for a given input latitude to the in gfinder.geometry.Limb_Point_Direction and gfinder.geometry.Limb_Point_Tangent_Direction Geometry classes / ODF definitions.

  • New ODF and Notebooks demonstrating the implementation of Disk/Limb MAJIS Scan pointing definition and simulation mechanism (combining both the simulated SC and MAJIS scanner pointing):

    • Jupiter Disk Scan: jupiter_disk_scan.json, jupiter_disk_scan.ipynb

    • Callisto Limb Scan: callisto_limb_scan.json, callisto_21C13_limb_scan.ipynb

  • New MapViewer geometry_color optional argument (‘yellow’ is default), for better visibility of “footprints” depending of the planetary basemap dominant color.

Version 0.13 (July 8, 2021)#

Warning

Known issues:

  • Mismatch between Detector_FOV_Footprint center and Detector_Boresight_Target_Point.

  • Limb Detector_FOV_Footprint and Detector_Boresight_Target_Point latitudes seem shifted with respect to expected Limb_Target_Direction latitude.

Version 0.12 (June 4, 2021)#

Consolidated proof-of-concept for SC pointing definition and simulation.
  • Notebook and ODF

    • New jupiter_disk_slew notebook (note that previous notebooks might not be working properly due to temporary backward compatibility issues. They will in future versions).

    • New jupiter_disk_slew.json ODF file

  • New CLI compute command options:

    • --sim-sc-att to simulate SC pointing defined in ODF

    • --addendum-kernel to load addendum CK kernels, pre-generated in opportunity data directory

  • New CLI export CLI command to export simulated SC attitude data in:

    • JUICE Pointing Tool / AGM Quaternion CSV file format,

    • SPICE CK file format (making use of msopck SPICE utility program).

  • DataViewer:

    • New PointingViewer class to visualise pointing directions in NOA-based frame

    • Updated MapViewer to enable for Jupiter.

  • New Geometry Classes:

    • Limb

    • Limb_Disk

    • Surface_Point_Direction

    • North_Pole_Direction

    • North_Pole_NOA

    • Terminator

    • Terminator_NOA

    • FOV_Footprint

    • Direction_Vector

Version 0.11 (May 7, 2021)#

First implementation of a SC pointing/attitude simulator, proof-of-concept.
  • New/developing ODF

    • jupiter_disk_scan_simsc.json

  • New/developing Geometry classes

    • Observer_Target_Position

    • Observer_Target_Velocity

    • Simulated_SC_Frame

    • Boresight_Target_Angle

    • Frustrum_J2000

    • SC_Slew_Angles

    • Frustrum_Disk_Footprint

  • New/developing Jupyter Notebooks

    • jupiter_disk_scan_simsc.ipynb

    • c2_sprint1_dev.ipynb

Version 0.10 (Feb 12, 2021)#

New definition and implementation of limb and Jupiter rings observations
  • New Notebooks:

    • callisto_21C13_limb.ipynb

    • jupiter_rings_tour.ipynb

  • New ODF files:

    • callisto_limb_scan.json

    • jupiter_rings.json

  • New Geometry classes:

    • Limb_Latitudes

    • Limb_Min_Latitude

    • Limb_Max_Latitude

    • Target_Point

    • Target_Point_Longitude

    • Target_Point_Latitude

    • Target_Point_Altitude

    • Target_Point_Slant

    • Target_Point_Phase

    • Target_Point_Incidence

    • Target_Point_Emission

    • Limb_Point_Direction

    • SC_Elevation

    • Target_Ring_Point

    • Target_Ring_Point_Radius

    • Target_Ring_Point_Azimuth

    • Target_Ring_Point_Phase

Bug fixes and improvements
  • New y_log option in TimeSeriesViewer (log_y=False by default)

  • New x_index and y_index options in XY_Viewer (x_index=[0] and y_index=[1] by default)

  • Fixed bug when using UTC times as inputs to compute command.

Documentation updates

Version 0.9 (Jan 22, 2021)#

  • Documentation updates

  • Improved handling of “no mission events defined for this scenario” error.

Version 0.8 (Dec 22, 2020)#

  • Improved Mission Scenario meta-kernels (MK) management. No need anymore to copy across MK files to GFINDER Data Store after a JUICE SKD update (git pull).

  • New ODF and Geometry classes for Jupiter Disk Scan use case

    • Equatorial_Coverage

    • SC_In_Equatorial_Plane

  • Improved documentation

  • New location for notebooks in docs/source/notebooks

Version 0.7 (Nov 24, 2020)#

  • New Geometry classes

    • Dwell_Time

    • Ground_Speed

    • Motion_Compensation

    • Scanning_Angle

    • No_Compensation_Required

    • Angular_Separation

    • ROI_In_FOV

    • ROI_X_Depointing_Angle

    • ROI_Y_Depointing_Angle

    • ROI_Boresight_Angle

  • New use-case Jupyter Notebooks

    • index.ipynb

    • callisto_21C13.ipynb

    • ganymede_GCO500.ipynb

  • New ODF files for the implementation of GCO500 and 21C13 use cases. Test/dev ODFs have been moved dev/ directory.

    • GCO500_HR.json

    • GCO500_HR_B2.json

    • GCO500_HR_B4.json

    • callisto_flyby_any.json

    • callisto_flyby_disk_scan.json

    • callisto_flyby_hr.json

    • callisto_rois_majis_depointing.json

    • ganymede_rois_majis_depointing.json

  • First implementation of ROI handling: new ROI Class and ROI (GeoJSON) definitions in rois/ data store directory

  • Implementation of cascading search for the search command, with the --opportunity_id option.

  • New --suffix option for the compute command, allowing for different observation simulations

  • New DataViewer Python module for easier visualisation of opportunity data in JupyterLab

  • New documentation system

Version 0.6 (Oct 13, 2020)#

  • No new geometry classes (computational functions)

  • New web viewer features, but not usable yet.

    • Map viewer (using MapboxGL/CARTO VL)

    • “Proto” map server

    • Synchronised sub-event (observation or measurement) selection/navigation

    • Data viewers switch (w/ known issue)

  • Improvement of existing, and new CLI commands/features

    • search & compute:

      • handle output data files creation in the data store

      • use loaded SPK time coverage as default when no time inputs are provided.

    • compute can now takes an opportunity ID as input.

    • utility commands: config, opportunities/opportunity, scenarios/scenario, events/event, geometries/geometry

  • New “data store” gfinder-data package, separate from existing gfinder-python-cli.

  • Design improvement to prepare for the REST API development and its use in the web viewer.

Version 0.5 (Sep 7, 2020)#

  • No updates in GFINDER Python modules and CLI

  • First implementation of the Web Viewer app, using Django-ViewJS frameworks integration:

    • General layout based on clickable-prototype design

    • Timeline/time-series view (using Plotly), with selection of plotted parameters.

    • Table view (using Tabulator)

    • No loading of GeoEvt files at this stage

  • Initial Web REST API setup using Django REST Framework (DRF) without built-in Django Object-Relational Mapping (ORM) / Models.

Version 0.4 (June 26, 2020)#

  • Design consolidation (GeometryEvent now a subclass of Event class)

  • First output GeoEvt JSON file implementation (with companion GeoJSON file)

  • New Geometry classes: Frustrum, Footprint.

  • New mission scenario: juice_crema_4_0b_ops_20360821.tm, superseding previous juice_crema_4_1_ops_20360821.tm meta-kernel, extending period to 2036 AUG 21 14:14:24.427 for Ganymede mapping opportunity analysis.

  • First demo/tutorial Jupyter notebook

Version 0.3 (May 29, 2020)#

  • New Ganymede high-resolution mapping opportunity definition file (ODF) / use case.

  • New mission scenario meta-kernel for new Ganymede ODF (juice_crema_4_1_ops_20360821.tm).

  • Implemented event name as timing input to search and compute commands.

  • Consolidated design and improved help documentation.

Version 0.2 (April 24, 2020)#

  • Implementation of the opportunity (geometry event) definition mechanism (via ODF files) and cascading search; based on a modular design allowing to define each geometry quantity computation method, that is reused by the search algorithm.

Version 0.1 (April 10, 2020)#

  • Initial release, mostly for setting up and testing development environment, and demonstrating some key SPICE-based MAJIS geometry computation concepts.