ESA export files#
The planetary-coverage
is designed to compute spacecraft trajectory, instrument coverage and region of interest visibility.
When you perform your analysis, you can export you calculations to external tools.
At the moment, only a few temporal events export are supported but you want create your own if needed. Below you will find different examples to export to the Juice timeline tool and to MAPPS.
Juice timeline export#
The Juice Segment Harmonization Tool (a.k.a the Juice timeline tool) is an online events visualization tool that can be used to display a collection of temporal events in different timelines. It allows the ESA-SOC to plan events computed with other planning tools.
The planetary-coverage
is natively compatible with the Juice timeline and can export CSV and JSON files. Then these files can be imported in the timeline tool.
from planetary_coverage.esa import export_timeline
Trajectory segments#
If we re-use the masked trajectory computed in the spacecraft trajectory section below 500 km
and on the dayside
of Ganymede during a few orbit in June 2035, we can export all the segments in a CSV file:
export_timeline(
'Ganymede_2035-JUN-01-low_alt-dayside.csv',
sc_traj.where((sc_traj.alt > 500) & sc_traj.day)
)
PosixPath('Ganymede_2035-JUN-01-low_alt-dayside.csv')
# You can use `read_events()` to read the csv file as any ESA segmentation file
read_events('Ganymede_2035-JUN-01-low_alt-dayside.csv', header=None)['TRAJECTORY_SEGMENT']
name | t_start | t_end | subgroup | source | |
---|---|---|---|---|---|
0 | TRAJECTORY_SEGMENT | 2035-06-01T01:58:00Z | 2035-06-01T02:35:00Z | GENERIC | |
1 | TRAJECTORY_SEGMENT | 2035-06-01T05:02:00Z | 2035-06-01T05:38:00Z | GENERIC | |
2 | TRAJECTORY_SEGMENT | 2035-06-01T08:06:00Z | 2035-06-01T08:42:00Z | GENERIC | |
3 | TRAJECTORY_SEGMENT | 2035-06-01T11:10:00Z | 2035-06-01T11:45:00Z | GENERIC | |
4 | TRAJECTORY_SEGMENT | 2035-06-01T14:14:00Z | 2035-06-01T14:49:00Z | GENERIC | |
5 | TRAJECTORY_SEGMENT | 2035-06-01T17:17:00Z | 2035-06-01T17:53:00Z | GENERIC | |
6 | TRAJECTORY_SEGMENT | 2035-06-01T20:21:00Z | 2035-06-01T20:56:00Z | GENERIC | |
7 | TRAJECTORY_SEGMENT | 2035-06-01T23:25:00Z | 2035-06-02T00:00:00Z | GENERIC |
We can recognized the 8 segments displayed previously.
ROIs intersection#
You can provide a second argument to the export_timeline()
function to export only the intersection between a Trajectory
and a ROI
or a ROIsCollection
.
Here, we will export the file as a JSON file just by changing the output filename extension (.json
):
export_timeline(
'Ganymede_2035-JUN-01-ROI-polar_deposits.json',
sc_traj,
GanymedeROIs[1],
)
PosixPath('Ganymede_2035-JUN-01-ROI-polar_deposits.json')
{
"creationDate": "2023-09-01T11:18:32.174Z",
"name": "Ganymede_2035-JUN-01-ROI-polar_deposits",
"segments": [
{
"start": "2035-06-01T00:33:00Z",
"end": "2035-06-01T00:42:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_06",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T00:54:00Z",
"end": "2035-06-01T00:56:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_08",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T01:01:00Z",
"end": "2035-06-01T01:01:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_13",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T01:03:00Z",
"end": "2035-06-01T01:10:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_10",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T01:21:00Z",
"end": "2035-06-01T01:28:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_02",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T02:31:00Z",
"end": "2035-06-01T02:31:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_14",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T02:35:00Z",
"end": "2035-06-01T02:37:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_04",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T02:50:00Z",
"end": "2035-06-01T03:03:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_05",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T03:37:00Z",
"end": "2035-06-01T03:45:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_06",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T03:57:00Z",
"end": "2035-06-01T03:59:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_08",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T04:04:00Z",
"end": "2035-06-01T04:04:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_13",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T04:06:00Z",
"end": "2035-06-01T04:10:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_10",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T04:25:00Z",
"end": "2035-06-01T04:32:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_02",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T05:34:00Z",
"end": "2035-06-01T05:34:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_14",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T05:39:00Z",
"end": "2035-06-01T05:39:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_04",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T05:54:00Z",
"end": "2035-06-01T06:06:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_05",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T06:40:00Z",
"end": "2035-06-01T06:49:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_06",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T06:58:00Z",
"end": "2035-06-01T07:02:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_08",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T07:07:00Z",
"end": "2035-06-01T07:07:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_13",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T07:09:00Z",
"end": "2035-06-01T07:12:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_10",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T07:28:00Z",
"end": "2035-06-01T07:35:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_02",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T08:37:00Z",
"end": "2035-06-01T08:37:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_14",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T08:42:00Z",
"end": "2035-06-01T08:42:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_04",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T08:49:00Z",
"end": "2035-06-01T08:54:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_19",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T08:57:00Z",
"end": "2035-06-01T09:10:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_05",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T09:58:00Z",
"end": "2035-06-01T10:04:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_08",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T10:12:00Z",
"end": "2035-06-01T10:14:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_10",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T10:32:00Z",
"end": "2035-06-01T10:37:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_01",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T11:40:00Z",
"end": "2035-06-01T11:40:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_14",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T11:50:00Z",
"end": "2035-06-01T11:57:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_19",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T12:01:00Z",
"end": "2035-06-01T12:13:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_05",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T13:00:00Z",
"end": "2035-06-01T13:06:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_08",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T13:15:00Z",
"end": "2035-06-01T13:17:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_10",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T13:24:00Z",
"end": "2035-06-01T13:26:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_12",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T13:36:00Z",
"end": "2035-06-01T13:41:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_01",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T14:43:00Z",
"end": "2035-06-01T14:43:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_14",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T14:52:00Z",
"end": "2035-06-01T15:01:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_19",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T15:04:00Z",
"end": "2035-06-01T15:15:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_05",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T16:03:00Z",
"end": "2035-06-01T16:08:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_08",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T16:17:00Z",
"end": "2035-06-01T16:17:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_13",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T16:18:00Z",
"end": "2035-06-01T16:19:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_10",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T16:25:00Z",
"end": "2035-06-01T16:30:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_12",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T16:39:00Z",
"end": "2035-06-01T16:44:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_01",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T17:46:00Z",
"end": "2035-06-01T17:46:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_14",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T17:55:00Z",
"end": "2035-06-01T17:59:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_19",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T19:07:00Z",
"end": "2035-06-01T19:08:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_08",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T19:16:00Z",
"end": "2035-06-01T19:16:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_17",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T19:20:00Z",
"end": "2035-06-01T19:20:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_13",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T19:21:00Z",
"end": "2035-06-01T19:22:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_10",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T19:27:00Z",
"end": "2035-06-01T19:33:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_12",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T20:49:00Z",
"end": "2035-06-01T20:49:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_14",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T20:59:00Z",
"end": "2035-06-01T21:00:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_19",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T22:18:00Z",
"end": "2035-06-01T22:19:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_17",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T22:23:00Z",
"end": "2035-06-01T22:23:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_13",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T22:24:00Z",
"end": "2035-06-01T22:25:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_10",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T22:29:00Z",
"end": "2035-06-01T22:37:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_12",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
},
{
"start": "2035-06-01T23:51:00Z",
"end": "2035-06-01T23:52:00Z",
"segment_definition": "ROI_INTERSECTION",
"name": "JUICE_ROI_GAN_1_0_14",
"overwritten": false,
"timeline": "LOCAL",
"source": "GENERIC",
"resources": []
}
],
"segmentGroups": [],
"trajectory": "CREMA_5_0",
"localStoragePk": ""
}
We also restricted our intersection the intersection only on the polar deposits ROI from Stephan et al. 2021.
More detail about the optional arguments on export_timeline()
can be found here.
MAPPS export#
Similarly to the Juice timeline export described above, you can export your Trajectory
segments and ROI
intersections as EVF file that can be imported in MAPPS:
export_timeline(
'Ganymede_2035-JUN-01-low_alt-dayside-ROI-polar_deposits.evf',
sc_traj.where((sc_traj.alt > 500) & sc_traj.day),
GanymedeROIs[1],
)
PosixPath('Ganymede_2035-JUN-01-low_alt-dayside-ROI-polar_deposits.evf')
# Events generated by the planetary-coverage on 2023-SEP-01_11:18:32.204
2035-JUN-01_02:31:00 JUICE_ROI_GAN_1_0_14_START (COUNT = 1)
2035-JUN-01_02:31:00 JUICE_ROI_GAN_1_0_14_END (COUNT = 1)
2035-JUN-01_02:35:00 JUICE_ROI_GAN_1_0_04_START (COUNT = 1)
2035-JUN-01_02:35:00 JUICE_ROI_GAN_1_0_04_END (COUNT = 1)
2035-JUN-01_05:34:00 JUICE_ROI_GAN_1_0_14_START (COUNT = 2)
2035-JUN-01_05:34:00 JUICE_ROI_GAN_1_0_14_END (COUNT = 2)
2035-JUN-01_08:37:00 JUICE_ROI_GAN_1_0_14_START (COUNT = 3)
2035-JUN-01_08:37:00 JUICE_ROI_GAN_1_0_14_END (COUNT = 3)
2035-JUN-01_08:42:00 JUICE_ROI_GAN_1_0_04_START (COUNT = 2)
2035-JUN-01_08:42:00 JUICE_ROI_GAN_1_0_04_END (COUNT = 2)
2035-JUN-01_11:40:00 JUICE_ROI_GAN_1_0_14_START (COUNT = 4)
2035-JUN-01_11:40:00 JUICE_ROI_GAN_1_0_14_END (COUNT = 4)
2035-JUN-01_14:43:00 JUICE_ROI_GAN_1_0_14_START (COUNT = 5)
2035-JUN-01_14:43:00 JUICE_ROI_GAN_1_0_14_END (COUNT = 5)
2035-JUN-01_17:46:00 JUICE_ROI_GAN_1_0_14_START (COUNT = 6)
2035-JUN-01_17:46:00 JUICE_ROI_GAN_1_0_14_END (COUNT = 6)
2035-JUN-01_20:49:00 JUICE_ROI_GAN_1_0_14_START (COUNT = 7)
2035-JUN-01_20:49:00 JUICE_ROI_GAN_1_0_14_END (COUNT = 7)
2035-JUN-01_23:51:00 JUICE_ROI_GAN_1_0_14_START (COUNT = 8)
2035-JUN-01_23:52:00 JUICE_ROI_GAN_1_0_14_END (COUNT = 8)