Release Notes
Contents
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:
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
intogfinder
module [111]Upgraded to Python 3.10 [90]
Added
planetary-coverage
andesa-ptr
packages dependency [91]
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.
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:
gfinder.geometry.Ring_Ansae
: Multidimensional-type data container for the followingRing_*
geometries.gfinder.geometry.Ring_Illumination_Angle
: Ring illumination angle (deg).gfinder.geometry.Ring_Horizontal_Angular_Size
: Used to derive the SC offset angle (deg) required for the desired pointing.gfinder.geometry.Ring_Vertical_Angular_Size
: Used to derive the MAJIS scanner start/end angle (deg) required for the desired pointing.gfinder.geometry.Ring_West_Ansa_Phase_Angle
: Phase angle at ring West ansa (deg).gfinder.geometry.Ring_East_Ansa_Phase_Angle
: Phase angle at ring East ansa (deg).gfinder.geometry.Ring_West_Ansa_Best_Resolution
: Best resolution at ring West ansa (km).gfinder.geometry.Ring_East_Ansa_Best_Resolution
: Best resolution at ring East ansa (km).gfinder.geometry.Ring_Ansae_Phase_Angle_In_Range
: At least one ansa satisfy phase conditions, defined using themin/max-phase-angle
attributes.gfinder.geometry.Target_Solar_Eclipse
: Used for high-phase observations. Eclipse type can be either:TOTAL
,ANNULAR
, orPARTIAL
(ALL
?).gfinder.geometry.Observed_Ring_Point
: Vector-type data container for the observed ring point coordinates and the followingObserved_Ring_Point_*
“properties” geometries (radius, azimuth, spatial resolution, phase, incidence and emergence angle).gfinder.geometry.Ring_Ansae_Directions
: Used to visualise rings in thePointingViewer
.
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.
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)
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] )
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 byObserved_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 thesimulator
is turned on (sim_sc_att=True
) forJUICE_SPACECRAFT
. If thesimulator
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 ofSimulatedSCFrameError
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 tosearch
and/orcompute
a limited number of opportunities. Changedgfinder.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, usingnp.sign
function working for values extremely close to zero.
Geometry classes and ODFs
Added Nicolas Ligier’s
MAJIS_FLYBY_MEDRES
master ODF ingfinder-data
package, using same conditions asMAJIS_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 thedetector_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 thex_start
angle returned by theObs_SC_Slew_Parameters
Geometry is currently assumed to be always negative (we might want to improve this later).search
,compute
anddefinition
CLI commands now take additional attributes as options, similarly to their corresponding Python functions. For example:--min-phase-angle=10.0
(command option) andmin_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 orgfinder_cli.definitions()
function.Added the list of “Included ODF files” and “Additional attributes” in the information returned by the
definition
command orgfinder_cli.definition()
function.Added “no_save” keyword argument to the
gfinder_cli.search()
andgfinder_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()
andgfinder_cli.compute()
functions to disable displaying the fully summary of an opportunity calculation, which can be obtained by using theopportunity.summary()
method.
Geometry classes
New
Limb_Distance
andVertical_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.
Documentation updates
Version 0.21 (June 3, 2022)#
Overall gfinder-python-cli
package cleanup and re-organisation.
Removed
gfinder_web
.Moved
notebooks
fromdocs/source
to package root.Updated
setup.py
requirements.Included
jupyterlab
requirement outsidesetup.py
in separate arequirements.txt
file (for local single-user/dev).Separated
docs
andtests
requirements in dedicatedrequirements.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()
andgfinder_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
andcompute
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
andgfinder.datastore.DataStore
classes to implement new ODF/data store model.Increased
TimeSeriesViewer
andPointingViewer
layout height to 512px for better visibility.
Tests
Very first basic tests using
pytest
implemented intests
.Notebooks in
`notebooks
serving as tests, usingnbmake
Pytest plugin, and documentation.Testing strategy, framework and procedure shall be described in Testing.
Opportunity Definitions (ODF)
ODF data store reorganised:
/
: containsobservation_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 thedefinitions
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
andsphinxcontrib-programoutput
for inclusion of Python and shell execution output blocks in documentation.Updated GFINDER Python APIs section for both the
gfinder
and newgfinder_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-basedSimulated_SC_Frame
definition.Merged
MAJIS_Scan_Rate_Angle
intoMAJIS_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 forSC_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
Re-organised package modules:
gfinder.config
,gfinder.datastore
,gfinder.dataviewer
,gfinder.detector
,gfinder.event
,gfinder.geometry
,gfinder.geometryevent
,gfinder.opportunity
,gfinder.radiometry
,gfinder.resource
,gfinder.roi
,gfinder.scenario
,gfinder.simulator
,gfinder.tamn
,gfinder.target
,gfinder.timeline
,gfinder.utils
.Automatic indexing of Geometry classes, and improved
geometries
/geometry
commands.New mechanism allowing multiple sets of Geometry class required parameters and computation methods.
Tested/fixed timing issues #68
New online documentation modern-look and MOS logo.
- 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 intoSC_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 toSC_Slew_Angles
(similar toObs_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) andcontinuous
.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 correspondingeuropa_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
andMAJIS_Scan_Angle
geometry classes, respectively:"max_range"
defined byMAJIS_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 toMAJIS_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. Thescan_rotation_angle
parameter value of the ODFSimulated_Scan_Frame
geometry definition is automatically overwritten fromMotion_Compensation_Angle
toMAJIS_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 aDwell_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, thetarget
anddetector
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
toMotion_Compensation_Angle
.New
Obs_Scanner_Motion_Parameters
Observation-level Geometry class that derivesstart_angle
,start_scan_rate
andstop_scan_rate
parameters fromMotion_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
andstop_scan_rate
parameters).New
callisto_flyby_hr.json
ODF file andcallisto_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 andDetector_Boresight_Target_Point
: introduced interpolation of detector FOV bound direction vectors for accurate representation of FOV footprints in cartographic coordinates system, seegfinder.geometry.Detector.get_bounds()
.Limb
Detector_FOV_Footprint
andDetector_Boresight_Target_Point
latitudes seem shifted with respect to expectedLimb_Target_Direction
latitude: corrected interpolation of limb points for a given input latitude to the ingfinder.geometry.Limb_Point_Direction
andgfinder.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)#
Consolidation and enhancement of the pointing definition and simulation mechanism through the new
gfinder.geometry.Direction
Geometry class andgfinder.simulator
module (see Geometry Classes and ref_odf_pointing_spec).Taking into account for SC –and MAJIS scanner– pointing definition and simulation: new
--sim-scanner
CLI option; no MAJIS scanner simulated frame Geometry class nor ODF definitions yet.New pointing-dependent
Direction
classes:New pointing-independent
Direction
classes, which can be used to define the primary or secondary axis of the SC simulated frame in an ODF file:gfinder.geometry.Observer_Target_Position
gfinder.geometry.Observer_Target_Velocity
gfinder.geometry.Limb_Point_Tangent_Direction
(power_optimised
or not)
More can/will be developed to define/simulate a variety of pointings (ROI, diurnal/nocturnal limb at given visible latitude, most/least illuminated limb point, Jupiter ring point, star (right ascension/declination)).
New
gfinder.geometry.SC_Slew_Rate_Angles
class to simulate SC slew defined by a starting angular position (in degrees) and a rotation rate/speed (in iFOV/s).New Callisto 21C13 limb slew pointing use case notebook (
callisto_21C13_limb_slew.ipynb
) and ODF (callisto_limb_slew.json
)New
gfinder.geometry.Directions_Angular_Separation
geometry class taking into account for simulated SC and/or MAJIS scanner pointing. It allows to implement the following SC pointing analysis parameters (baseline or simulated):gfinder.geometry.SC_Y_Axis_Target_Velocity_Angle
New
gfinder.geometry.Geolocation
class defining an interface for location data in target’s body-fixed geodetic coordinate system, :Improved data viewers:
PointingViewer
andMapViewer
automatically display all, respectively,Direction
andGeolocation
objects contained in a given loaded opportunity. This means that all Direction and Geolocation geometries defined in an ODF file are visualised in their respective data viewers.MapViewer
enabled for all JUICE primary and secondary target bodies.New
PointingViewer
option to visualise all detector FOVs:PointingViewer(opportunity).show(all_detector_fov=True)
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 frameUpdated
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
andy_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
New “Enabling SPICE computation using GFINDER” Notebook available from Developer Guides.
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 directoryImplementation of cascading search for the
search
command, with the--opportunity_id
option.New
--suffix
option for thecompute
command, allowing for different observation simulationsNew 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.