.. _api_catalogue_ref: Catalogue de la base de données =============================== La bibliothèque PyCTOH utilise un système de catalogues pour gérer sa base de données. La classe `Catalogue` permet d'accéder à la description des produits du catalogue et au contenu des produits. >>> from pyctoh.db.catalogue import Catalogue >>> import os >>> catalogue_filepath = os.environ['ALT_CATALOGUE'] # Variable d'environnement catalogue PyCTOH >>> cat = Catalogue(filepath=catalogue_filepath) .. admonition:: CTOH_SHARED_DATA Il y se produit une erreur si la variable d'evironnement CTOH_SHARED_DATA n'est pas défini. Cette variable est necessaire pour le module `Orbit` de PyCTOH. Elle définit le répertoire où sont défini les données d'orbite de chaque mission altimétriques. Sur les serveurs LEGOS, elle est initialisée: .. code-block:: bash > export CTOH_SHARED_DATA=/ctoh/data/shared Environnement PyCTOH -------------------- Renvoie un dictionnaire contenant les paramètres de configuration de la bibliothèque PyCTOH: >>> cat.env() {'catalogue': '/ctoh/data/db/catalogue_yml/ctoh_products_base.yml', 'metadata_directory': '/ctoh/data/db/catalogue_yml/metadb', 'mode': 'yml', 'CTOH_SHARED_DATA': '/ctoh/data/shared'} Définition d'un nouveau catalgue -------------------------------- Il est possible de créer votre propre catalogue et de le définir. >>> catalogue_filepath = '/user/db/catalogue/products_base.yml' >>> cat = Catalogue(catalogue_filepath) Répertoire de la base de données -------------------------------- >>> cat.get_default_path() '/ctoh/data/db/products' Liste des produits ------------------ Liste les produits disponibles dans le catalogue: >>> cat.cat_product_list() [['cs2_b_gop_c_gdr', 'Cryosat-2', 'cs2', 'b', 'gop', 'c', 'gdr'], ['cs2_b_ice_d_gdr', 'Cryosat-2', 'cs2', 'b', 'ice', 'd', 'gdr'], ['env_a_ctoh_v0210_gdr', 'Envisat', 'env', 'a', 'ctoh', 'v0210', 'gdr'], ['env_a_esa_v0300_sgdr', 'Envisat', 'env', 'a', 'esa', 'v0300', 'sgdr'], ['env_b_ctoh_v0210_gdr', 'Envisat', 'env', 'b', 'ctoh', 'v0210', 'gdr'], ['env_b_esa_v0300_sgdr', 'Envisat', 'env', 'b', 'esa', 'v0300', 'sgdr'], ['ers2_a_ctoh_v0100_gdr', 'ERS-2', 'ers2', 'a', 'ctoh', 'v0100', 'gdr'], ['ers2_a_reaper_v0108_gdr', 'ERS-2', 'ers2', 'a', 'reaper', 'v0108', 'gdr'], ['ers2_a_reaper_v0108_sgdr', 'ERS-2', 'ers2', 'a', 'reaper', 'v0108', 'sgdr'], ['ja1_a_cnes_e_gdr', 'Jason-1', 'ja1', 'a', 'cnes', 'e', 'gdr'], ['ja1_b_cnes_e_gdr', 'Jason-1', 'ja1', 'b', 'cnes', 'e', 'gdr'], ['ja1_c_cnes_e_gdr', 'Jason-1', 'ja1', 'c', 'cnes', 'e', 'gdr'], ['ja2_a_cnes_d_gdr', 'Jason-2', 'ja2', 'a', 'cnes', 'd', 'gdr'], ['ja2_a_cnes_d_sgdr', 'Jason-2', 'ja2', 'a', 'cnes', 'd', 'sgdr'], ['ja2_b_cnes_d_gdr', 'Jason-2', 'ja2', 'b', 'cnes', 'd', 'gdr'], ['ja2_b_cnes_d_sgdr', 'Jason-2', 'ja2', 'b', 'cnes', 'd', 'sgdr'], ['ja2_c_cnes_d_sgdr', 'Jason-2', 'ja2', 'c', 'cnes', 'd', 'sgdr'], ['ja2_d_cnes_d_sgdr', 'Jason-2', 'ja2', 'd', 'cnes', 'd', 'sgdr'], ['ja3_a_cnes_%_sgdr', 'Jason-3', 'ja3', 'a', 'cnes', '%', 'sgdr'], ['ja3_a_cnes_%_sigdr', 'Jason-3', 'ja3', 'a', 'cnes', '%', 'sigdr'], ['ja3_a_cnes_f_sgdr', 'Jason-3', 'ja3', 'a', 'cnes', 'f', 'sgdr'], ['s3a_a_lan_%_sgdr', 'Sentinel-3A', 's3a', 'a', 'lan', '%', 'sgdr'], ['s3a_a_wat_%_sgdr', 'Sentinel-3A', 's3a', 'a', 'wat', '%', 'sgdr'], ['s3b_a_lan_%_sgdr', 'Sentinel-3B', 's3b', 'a', 'lan', '%', 'sgdr'], ['s3b_a_wat_%_sgdr', 'Sentinel-3B', 's3b', 'a', 'wat', '%', 'sgdr'], ['s3b_b_lan_%_sgdr', 'Sentinel-3B', 's3b', 'b', 'lan', '%', 'sgdr'], ['s3b_b_wat_%_sgdr', 'Sentinel-3B', 's3b', 'b', 'wat', '%', 'sgdr'], ['s6a_a_lrm_%_gdr', 'Sentinel-6A', 's6a', 'a', 'lrm', '%', 'gdr'], ['s6a_a_sar_%_gdr', 'Sentinel-6A', 's6a', 'a', 'sar', '%', 'gdr'], ['srl_a_cnes_%_sgdr', 'Saral', 'srl', 'a', 'cnes', '%', 'sgdr'], ['srl_a_cnes_f_sgdr', 'Saral', 'srl', 'a', 'cnes', 'f', 'sgdr'], ['srl_b_cnes_%_sgdr', 'Saral', 'srl', 'b', 'cnes', '%', 'sgdr'], ['srl_b_cnes_%_sigdr', 'Saral', 'srl', 'b', 'cnes', '%', 'sigdr'], ['srl_b_cnes_f_sgdr', 'Saral', 'srl', 'b', 'cnes', 'f', 'sgdr'], ['tpx_a_cash_v0100_gdr', 'Topex', 'tpx', 'a', 'cash', 'v0100', 'gdr']] Information du produit ---------------------- Liste les attributs du produit demandé. Ici un exemple avec le produit 'srl_a_cnes_%_sgdr' : >>> cat.product_info('srl_a_cnes_f_sgdr') {'name': 'srl_a_cnes_f_sgdr', 'product_type': 'saral_t', 'mission': 'Saral', 'orbit_phase': 'A', 'provider': 'CNES', 'product_version': 'GDR-E, GDR-F, SGDR', 'doc': 'Saral S-GDR product', 'product_prefix': 'srl_a_cnes_%_sgdr/', 'cycle_prefix': 'cycle_\\d{3}/', 'gdrtype_prefix': {'gdr': 'gdr/', 'ctoh1': 'ctoh1/ctoh_addons1_', 'ctoh2': 'ctoh2/ctoh_addons2_', 'fes14': 'fes14/fes14l-', 'normpass': 'normpass/normpass_', 'gpd': 'gpd/gpd_', 'gpdv2': 'gpdv2/gpd_'}, 'file_postfix': '.*(?PSRL)_GPS_2P(?P[a-zA-Z])P(?P\\d{3})_(?P\\d{4})_(\\d{4}[01]\\d[0-3]\\d)_([0-2]\\d[0-5]\\d[0-5]\\d)_(\\d{4}[01]\\d[0-3]\\d)_([0-2]\\d[0-5]\\d[0-5]\\d).(?PCNES).nc', 'ref_gdr': 'gdr', 'meanpass_dir': None, 'orbit': 'ers', 'ellipsoid': {'name': 'TP', 'a': 6378136.3, 'f': '1/298.257'}} Liste des cycles du produit --------------------------- >>> cat.cycle_list('srl_a_cnes_f_sgdr') [1, 2, 3, 4, 5, 6, ... 30, 31, 32, 33, 34, 35] Numéros de cycle et trace du produit ------------------------------------ Renvoie un dictionnaire ``{cycle : liste de trace}`` du produit demandé. Ici un exemple avec le produit 'srl_a_cnes_%_sgdr' : >>> cat.product_cycle_track('srl_a_cnes_%_sgdr') {1:[1,2,...,1002], 2:[3,...1000], ... 107:[8,...890], 108:[3,...1000], 109:[3,...1000],} Numéro de cycle et date du produit ---------------------------------- Renvoie un dictionnaire ``{cycle : [start_date, end_date]}`` du produit demandé. Ici un exemple avec le produit 'srl_a_cnes_%_sgdr' : >>> cat.product_cycle_date('srl_a_cnes_%_sgdr') {1:[1999-05-07T10:05:07.321,1999-06-09T10:05:07.321], 2:[1999-05-07T10:05:07.321,1999-05-09T10:05:07.321], ... 107:[1999-05-07T10:05:07.321,1999-05-09T10:05:07.321], 108:[1999-05-07T10:05:07.321,1999-05-09T10:05:07.321], 109:[1999-05-07T10:05:07.321,1999-05-09T10:05:07.321],} Liste des fichiers ------------------ >>> cat.file_list('srl_a_cnes_f_sgdr') ('/ctoh/data/db/products/srl_a_cnes_f_sgdr/', array([( 1, 'sgdr', 1, 'SRL_GPS_2PfP001_0001_20130314_053927_20130314_062945.CNES.nc'), ( 1, 'sgdr', 2, 'SRL_GPS_2PfP001_0002_20130314_062945_20130314_072003.CNES.nc'), ( 1, 'sgdr', 3, 'SRL_GPS_2PfP001_0003_20130314_072003_20130314_081021.CNES.nc'), ..., (35, 'sgdr', 520, 'SRL_GPS_2PfP035_0520_20160704_084127_20160704_093145.CNES.nc'), (35, 'sgdr', 521, 'SRL_GPS_2PfP035_0521_20160704_093145_20160704_102203.CNES.nc'), (35, 'sgdr', 522, 'SRL_GPS_2PfP035_0522_20160704_102203_20160704_111221.CNES.nc')], dtype=[('cycle', '>> # Requête trace 200 cycle 150 du produit 'ja3_a_cnes_f_sgdr' >>> track_obj = cat.query_product('ja3_a_cnes_f_sgdr', 200, 150) Création d'un objet Grid ------------------------ >>> # Requête trace 200 cycle 150 du produit 'ja3_a_cnes_f_sgdr' >>> grid_obj = cat.query_product('ja3_a_cnes_f_sgdr', None, 150) Création d'un objet TimeSeries ------------------------------ >>> # Requête trace 200 cycle 150 du produit 'ja3_a_cnes_f_sgdr' >>> timeseries_obj = cat.query_product('ja3_a_cnes_f_sgdr', 200, None)