Solar Orbiter Inventory Plots

Remote Sensing Instruments | In situ instruments | All instruments for all SCI levels (L1, L2, L3)| Python code to find latest data per instrument

Remote Sensing Instruments

(maintained by E. Buchlin, IAS, Paris)

Inventory Plots for all instruments and Science Levels

These are indicative plots for the contents of the SOAR as of 3 September 2025. These plots were created by this Jupyter Notebook: InventoryPlots.ipynb

These are meant for information only and in future, the inventory plots will be provided with the web interface SOAR.

In situ: EPD, MAG, RPW, SWA

Remote sensing: EUI, Metis, PHI, SoloHI, SPICE, STIX


EPD




 



 

Back to list of instruments


EUI





 



 

Back to list of instruments


MAG





 

 

Back to list of instruments


Metis

Back to list of instruments


PHI


 


 


 

Back to list of instruments


RPW


 


 


 

Back to list of instruments


SoloHI




 


 

Back to list of instruments


SPICE




 


 

Back to list of instruments


STIX


 

 


 

SWA


 


 


 




 

Back to list of instruments

 

Latest data available

This python code will access the TAP database and return the latest data's date available for each instrument and level:

 

import pyvo as vo # Data Access (pyvo.dal)
from datetime import datetime, timedelta
import pandas as pd

instru_list = ['EPD', 'EUI', 'MAG', 'METIS', 'PHI', 'RPW', 'SOLOHI', 'SPICE', 'STIX', 'SWA']
level_list = ['L1', 'L2', 'L3']
ARCHIVE = 'https://soar.esac.esa.int/soar-sl-tap/tap'

def TAPquery(ARCHIVE, query):
    '''
    Given the ARCHIVE (e.g., https://soar.esac.esa.int/soar-sl-tap/tap) and the
    ADQL query, fetch the results and return as a DataFrame.
    '''
    try:
        ESDC = vo.dal.TAPService(ARCHIVE)
        results = ESDC.search(query)
        astropy_table = results.to_table()
        return astropy_table.to_pandas()  # convert to DataFrame
    except Exception as e:
        print(f"Error executing query: {e}")
        return None

for instr in instru_list:
    print(instr)
    for level in level_list:
        ADQL = (
            f"SELECT level, MAX(begin_time) "
            f"FROM v_sc_data_item "
            f"WHERE instrument='{instr}' AND level='{level}' "
            f"GROUP BY level"
            )

        result_table = TAPquery(ARCHIVE, ADQL)

        if result_table is not None and len(result_table) > 0:
            latest_time = result_table['MAX'].iloc[0]
            print(f"{level}: {latest_time}")
        else:
            print(f"{level}: ---")