ESA metakernels#

Note

For some missions, you can find the CREMA metakernel denomination. It stands for Consolidated Report on Mission Analysis and they correspond to a given planning mission scenario.

ESA metakernel, like any SPICE metakernel, contains list of relevant kernels files that are needed to perform a orbital and trajectory calculations with SPICE. These files are created and maintained by ESA SPICE service and can be found in the kernels/mk/ folder in every ESA missions (you can also find then on ESA SPICE bitbucket registry). A plain-text summary is also available on their ESA Cosmos website for each mission.

Theses metakernels are considered to be the canonic setup required to compute the different orbital tour planned by ESA. It is not mandatory to use them, but they constitute an excellent starting point for the beginner user.

The planetary-coverage tool provides a collection of shortcuts to pull any ESA metakernels (from any given release) and all its associated kernels directly from ESA archive:

from planetary_coverage import ESA_MK

ESA_MK
<EsaMetakernelsCollection> 16 missions:
 - BEPICOLOMBO / MPO / BEPICOLOMBO MPO / MERCURY PLANETARY ORBITER / MTM / BEPICOLOMBO MTM / MERCURY TRANSFER MODULE / MMO / BEPICOLOMBO MMO / MERCURY MAGNETOSPHERIC ORBITER
 - ENVISION
 - COMET-INTERCEPTOR
 - EXOMARS2016 / TGO / EXOMARS 2016 TGO / TRACE GAS ORBITER / EDM / EXOMARS 2016 EDM / EDL DEMONSTRATOR MODULE
 - EXOMARSRSP / RM / EXM RSP RM / EXM ROVER / EXOMARS ROVER / SP / EXM RSP SP / EXM SURFACE PLATFORM / EXOMARS SP / CM / EXM RSP SCC / EXM SPACECRAFT COMPOSITE / EXOMARS SCC
 - GAIA
 - HERA
 - HUYGENS / CASP / CASSINI PROBE / HUYGENS PROBE
 - INTEGRAL
 - JUICE
 - JWST
 - MARS-EXPRESS / MEX / MARS EXPRESS / BEAGLE2 / BEAGLE 2 / BEAGLE-2
 - ROSETTA / PHILAE
 - SMART-1 / S1 / SM1 / SMART1
 - SOLAR-ORBITER / SOLO / SOLAR ORBITER
 - VENUS-EXPRESS / VEX / VENUS EXPRESS

Juice metakernels#

For Juice, we can list all the metakernels available in the latest release, very easily:

JUICE_MK = ESA_MK['JUICE']

JUICE_MK
<EsaMetakernels> mission: JUICE (doi:10.5270/esa-ybmj68p) | latest version: v434_20230901_001 | 12 metakernels:
 - juice_plan_v434_20230821_001.tm
 - juice_plan.tm
 - juice_ops_v434_20230901_001.tm
 - juice_ops.tm
 - juice_crema_5_1_150lb_23_1_v434_20230629_001.tm
 - juice_crema_5_1_150lb_23_1.tm
 - juice_crema_5_1_150la_v434_20230629_001.tm
 - juice_crema_5_1_150la.tm
 - juice_crema_5_0b23_1_v434_20230629_001.tm
 - juice_crema_5_0b23_1.tm
 - juice_crema_5_0_v434_20230629_001.tm
 - juice_crema_5_0.tm

As we can see, the tool automatically query the online ESA archive to get the latest tag publicly published (here v422_20230130_002) and pull the list of all the metakernels available in that release.

You can check if a known metakernel filename is in the latest release:

'juice_crema_5_1_150lb.tm' in JUICE_MK
False
'juice_crema_6_0.tm' in JUICE_MK
False

All the previous releases are available with the versions property:

JUICE_MK.versions
['v434_20230901_001',
 'v434_20230829_001',
 'v434_20230825_001',
 'v434_20230822_001',
 'v434_20230821_001',
 'v434_20230817_001',
 'v434_20230815_001',
 'v434_20230810_001',
 'v434_20230808_001',
 'v434_20230803_002',
 'v434_20230803_001',
 'v434_20230731_001',
 'v434_20230728_001',
 'v434_20230726_001',
 'v434_20230725_002',
 'v434_20230725_001',
 'v434_20230724_001',
 'v434_20230721_001',
 'v434_20230720_001',
 'v434_20230714_001',
 'v434_20230712_003',
 'v434_20230712_002',
 'v434_20230712_001',
 'v434_20230711_001',
 'v434_20230710_001',
 'v434_20230709_001',
 'v434_20230708_001',
 'v434_20230707_001',
 'v434_20230706_001',
 'v434_20230705_002',
 'v434_20230705_001',
 'v434_20230704_001',
 'v434_20230703_002',
 'v434_20230703_001',
 'v434_20230630_002',
 'v434_20230630_001',
 'v434_20230629_001',
 'v433_20230628_001',
 'v433_20230627_002',
 'v433_20230627_001',
 'v433_20230626_002',
 'v433_20230626_001',
 'v433_20230624_001',
 'v433_20230623_001',
 'v433_20230622_001',
 'v433_20230621_002',
 'v433_20230621_001',
 'v433_20230620_001',
 'v433_20230619_001',
 'v433_20230618_002',
 'v433_20230618_001',
 'v433_20230614_002',
 'v433_20230614_001',
 'v433_20230613_001',
 'v433_20230612_001',
 'v433_20230611_001',
 'v433_20230610_001',
 'v433_20230609_001',
 'v433_20230608_001',
 'v433_20230607_001',
 'v433_20230606_001',
 'v433_20230605_001',
 'v433_20230604_001',
 'v433_20230603_001',
 'v433_20230602_001',
 'v433_20230601_003',
 'v433_20230601_002',
 'v433_20230601_001',
 'v433_20230529_001',
 'v433_20230528_001',
 'v433_20230527_001',
 'v433_20230525_001',
 'v433_20230524_001',
 'v433_20230523_001',
 'v433_20230522_001',
 'v433_20230521_001',
 'v433_20230520_001',
 'v433_20230519_001',
 'v433_20230518_001',
 'v433_20230517_002',
 'v433_20230517_001',
 'v432_20230517_002',
 'v432_20230517_001',
 'v432_20230516_001',
 'v432_20230515_002',
 'v432_20230515_001',
 'v432_20230513_001',
 'v432_20230512_002',
 'v432_20230512_001',
 'v432_20230511_002',
 'v432_20230511_001',
 'v432_20230510_001',
 'v432_20230509_002',
 'v432_20230509_001',
 'v432_20230508_001',
 'v432_20230507_001',
 'v432_20230506_001',
 'v432_20230505_001',
 'v431_20230505_001',
 'v431_20230504_001',
 'v430_20230504_002',
 'v430_20230504_001',
 'v430_20230503_003',
 'v430_20230503_002',
 'v430_20230503_001',
 'v430_20230428_001',
 'v430_20230427_001',
 'v430_20230426_002',
 'v430_20230426_001',
 'v430_20230425_001',
 'v430_20230422_001',
 'v430_20230421_003',
 'v430_20230421_002',
 'v430_20230421_001',
 'v430_20230420_002',
 'v430_20230420_001',
 'v430_20230418_003',
 'v430_20230418_002',
 'v430_20230418_001',
 'v430_20230417_001',
 'v430_20230416_003',
 'v430_20230416_002',
 'v430_20230416_001',
 'v430_20230415_002',
 'v430_20230415_001',
 'v430_20230414_001',
 'v430_20230413_002',
 'v430_20230413_001',
 'v423_20230411_001',
 'v423_20230404_001',
 'v423_20230403_001',
 'v423_20230331_001',
 'v423_20230328_001',
 'v423_20230309_001',
 'v422_20230130_002',
 'v422_20230130_001',
 'v421_20230125_001',
 'v421_20230124_001',
 'v421_20230110_001',
 'v420_20221220_001',
 'v420_20221212_001',
 'v410_20221207_001',
 'v410_20221122_001',
 'v410_20221114_001',
 'v410_20221110_002',
 'v410_20221110_001',
 'v400_20221021_001',
 'v320_20220725_001',
 'v310_20220517_001',
 'v300_20220310_001',
 'v292_20220120_001',
 'v291_20211210_001',
 'v290_20210624_001',
 'v282_20210505_001',
 'v282_20210505_002',
 'v281_20210330_001',
 'v280_20210216_001',
 'v271_20201210_001',
 'v270_20201113_001',
 'v250_20200505_001',
 'v260_20200720_001',
 'v240_20200304',
 'v240_20200304_001',
 'v232_20191217_001',
 'v231_20191118_001',
 'v230_20191118_001',
 'v220_20191031_001',
 'v210_20181016_001',
 'v200_20181011_001',
 'v160_20180216_001']

and if you need to list the metakernels available for an older version, you only have to do:

Tip

You don’t need to provide the full release id, usually the version number is sufficient.

JUICE_MK.version('v160')
['juice_crema_3_2_ops.tm',
 'juice_crema_3_1_soc_ops_study_ops.tm',
 'juice_crema_3_1_ops.tm',
 'juice_crema_3_0_ops.tm',
 'juice_crema_2_0_ops.tm']

When you know which metakernel you want to work with, you can request it by with its name:

JUICE_MK['juice_crema_5_0.tm']
PosixPath('~/.planetary-coverage/esa-mk/juice/v422_20230130_002/juice_crema_5_0.tm')

You will get pathlib.Path object pointing to its location on your disk (cached in your home folder). If the file is missing locally, it will be downloaded automatically from the ESA archive.

Tip

To query a metakernel, you can use its full name or you can use these kind of shortcuts:

>>> JUICE_MK[5.0]
PosixPath('.../v422_20230130_002/juice_crema_5_0.tm')

>>> JUICE_MK['4.2b22.1 (cruise only)']
PosixPath('.../v422_20230130_002/juice_crema_4_2b22_1_cruise.tm')

>>> JUICE_MK['3_2 gan N56 Pp5 Q19']
PosixPath('.../v422_20230130_002/juice_crema_3_2_gan_N56_Pp5_Q19.tm')

These keys follow the same pattern as the one listed on ESA-Cosmos SPICE page.

Hint

The locally cached metakernel files are sorted by mission and releases. If you need to use a specific version of a metakernel, you can add a second argument with its version number:

>>> JUICE_MK['3.2 ops', 'v160']
PosixPath('~/.planetary-coverage/esa-mk/juice/v160_20180216_001/juice_crema_3_2_ops.tm')

Similarly to the version() function, you don’t need to provide the full release id, the version is usually enough. If no explicit version is provided, the tool will search for the latest release available and use it by default.

When available, you can also use a MK_IDENTIFIER to get a specific version of a metakernel:

>>> JUICE_MK['juice_crema_5_1_150lb_23_1_v422_20230130_002']
PosixPath('~/.planetary-coverage/esa-mk/juice/v422_20230130_002/juice_crema_5_1_150lb_23_1.tm')

Note

If you need to use ESA metakernel offline or if ESA servers are not available, the tool will display a warning error and try to use the metakernels available in the cache:

[ESA API] Impossible to fetch `latest` version online. Use local cache instead.
[ESA API] Impossible to fetch `juice_crema_5_0.tm` metakernel at `v422_20230130_002` version online. Use local cache instead.

Finally, you can consume these metakernels files very easily with the MetaKernel object:

from planetary_coverage import MetaKernel

MetaKernel(JUICE_MK['5.1 150lb_23_1', 'v422'], kernels='/data/kernels')

Other ESA missions#

The current setup was optimized for the Juice mission but already works with all ESA missions.

ESA_MK['BEPICOLOMBO']
<EsaMetakernels> mission: BEPICOLOMBO / MPO / BEPICOLOMBO MPO / MERCURY PLANETARY ORBITER / MTM / BEPICOLOMBO MTM / MERCURY TRANSFER MODULE / MMO / BEPICOLOMBO MMO / MERCURY MAGNETOSPHERIC ORBITER (doi:10.5270/esa-dwuc9bs) | latest version: v411_20230905_002 | 4 metakernels:
 - bc_plan_v411_20230905_001.tm
 - bc_plan.tm
 - bc_ops_v411_20230905_002.tm
 - bc_ops.tm

You can also request the metakernels for a spacecraft by using its SPICE name:

ESA_MK['MERCURY PLANETARY ORBITER']  # or ESA_MK['MPO']
<EsaMetakernels> mission: BEPICOLOMBO / MPO / BEPICOLOMBO MPO / MERCURY PLANETARY ORBITER / MTM / BEPICOLOMBO MTM / MERCURY TRANSFER MODULE / MMO / BEPICOLOMBO MMO / MERCURY MAGNETOSPHERIC ORBITER (doi:10.5270/esa-dwuc9bs) | latest version: v411_20230905_002 | 4 metakernels:
 - bc_plan_v411_20230905_001.tm
 - bc_plan.tm
 - bc_ops_v411_20230905_002.tm
 - bc_ops.tm

You can append a metakernel name, shortcut or MK_IDENTIFIER and a version number.

ESA_MK['MPO', 'plan', 'v310_20221027_001']  # or ESA_MK['MPO', 'bc_ops_v310_20221027_001']
PosixPath('/home/docs/.planetary-coverage/esa-mk/bepicolombo/v310_20221027_001/bc_plan.tm')