constants.py 8.15 KB
Newer Older
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
# coding=utf-8
"""
Contains the enumeration-like classes used by the diagnostics
"""
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
from earthdiagnostics.box import Box

Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed

class Basin(object):
    """
    Class representing a given basin

    :param shortname: sfull basin's name
    :type shortname: str
    :param fullname: full basin's name
    :type fullname: str
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
    :param box: box defining the basin
    :type box: Box
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
    def __init__(self, shortname, fullname, box=None):
        self._shortname = shortname
        self._fullname = fullname
Javier Vegas-Regidor's avatar
Javier Vegas-Regidor committed
            box = Box()

        self.box = box
        """
        Box representing the basin
        """
    def __eq__(self, other):
        if self.shortname != other.shortname or self.fullname != other.fullname:
            return False
        return True

    def __str__(self):
        return self._fullname

    @property
    def shortname(self):
        """
        Basin's short name
        :rtype: str
        """
        return self._shortname

    @property
    def fullname(self):
        """
        Basin's full name
        :rtype: str
        """
        return self._fullname


class Basins(object):
    """
    Predefined basins
    """
    Global = Basin('glob', 'Global_Ocean')
    """ Global ocean """
    Atlantic = Basin('Atl', 'Atlantic_Ocean')
    """ Atlantic ocean """
    NorthAtlantic = Basin('NAtl', 'North_Atlantic_Ocean')
    """ North Atlantic Ocean """
    TropicalAtlantic = Basin('TAtl', 'Tropical_Atlantic_Ocean')
    """ Tropical Atlantic Ocean """
    Pacific = Basin('Pac', 'Pacific_Ocean')
    """ Pacific Ocean """
    NorthPacific = Basin('NPac', 'North_Pacific_Ocean')
    """ North Pacific Ocean """
    TropicalPacific = Basin('TPac', 'Tropical_Pacific_Ocean')
    """ Tropical Pacific Ocean """
    IndoPacific = Basin('IndPac', 'Indo_Pacific_Ocean')
    """ Indo Pacific Ocean """
    Indian = Basin('Ind', 'Indian_Ocean')
    """ Indian Ocean """
    TropicalIndian = Basin('TInd', 'Tropical_Indian_Ocean')
    """ Tropical Indian Ocean """
    Antarctic = Basin('Anta', 'Antarctic_Ocean')
    """ Antarctic Ocean """
    AntarcticAtlantic = Basin('AntaAtl', 'Antarctic_Atlantic_Sector')
    """ Antarctic Ocean Atlantic Sector """
    AntarcticIndian = Basin('AntaInd', 'Antarctic_Indian_Sector')
    """ Antarctic Ocean Indian Sector"""

    Arctic = Basin('Arct', 'Arctic_Ocean')
    """ Arctic Ocean """
    ArcticNorthAtlantic = Basin('ArctNAtl', 'Arctic_Ocean_North_Atlantic')
    """ Arctic Ocean North Atlantic"""
    ArcticMarginalSeas = Basin('ArctMarg', 'Arctic_Marginal_Seas')
    """ Arctic Ocean """
    Baffin = Basin('Baffin', 'Baffin')
    " Baffin "
    Baffin_Bay = Basin('BaffBay', 'Baffin_Bay')
    " Baffin_Bay "
    Baltic_Sea = Basin('Baltic', 'Baltic_Sea')
    " Baltic_Sea "
    BarKara = Basin('BarKara', 'BarKara')
    " BarKara "
    Barents_Sea = Basin('Barents', 'Barents_Sea')
    " Barents_Sea "
    Beaufort_Chukchi_Sea = Basin('BeaufortChukchi', 'Beaufort_Chukchi_Sea')
    " Beaufort_Chukchi_Sea "
    Beaufort_Sea = Basin('Beaufort', 'Beaufort_Sea')
    " Beaufort_Sea "
    Bellingshausen_Sea = Basin('Bellingshausen_', 'Bellingshausen_Sea')
    " Bellingshausen_Sea "
    Bering = Basin('Bering', 'Bering')
    " Bering "
    Bering_Strait = Basin('BeringStr', 'Bering_Strait')
    " Bering_Strait "
    CanArch = Basin('CanArch', 'CanArch')
    " CanArch "
    Canadian_Waters = Basin('Canadian', 'Canadian_Waters')
    " Canadian_Waters "
    Caspian_Sea = Basin('Caspian', 'Caspian_Sea')
    " Caspian_Sea "
    Central_Arctic = Basin('CArct', 'Central_Arctic')
    " Central_Arctic "
    Chukchi_Sea = Basin('Chukchi', 'Chukchi_Sea')
    " Chukchi_Sea "
    East_Siberian_Sea = Basin('ESiberian', 'East_Siberian_Sea')
    " East_Siberian_Sea "
    Eastern_Central_Arctic = Basin('ECArct', 'Eastern_Central_Arctic')
    " Eastern_Central_Arctic "
    Fram_Strait = Basin('Fram', 'Fram_Strait')
    " Fram_Strait "
    Global_Ocean = Basin('Global', 'Global_Ocean')
    " Global_Ocean "
    Greenland_Sea = Basin('Greenland', 'Greenland_Sea')
    " Greenland_Sea "
    Grnland = Basin('Grnland', 'Grnland')
    " Grnland "
    Hudson = Basin('Hudson', 'Hudson')
    " Hudson "
    Icelandic_Sea = Basin('Iceland', 'Icelandic_Sea')
    " Icelandic_Sea "
    Irminger_Sea = Basin('Irminger', 'Irminger_Sea')
    " Irminger_Sea "
    Kara_Gate_Strait = Basin('KaraGate', 'Kara_Gate_Strait')
    " Kara_Gate_Strait "
    Kara_Sea = Basin('Kara', 'Kara_Sea')
    Labrador_Sea = Basin('Labrador', 'Labrador_Sea')
    " Labrador_Sea "
    Laptev_East_Siberian_Chukchi_Seas = Basin('LaptevESiberianChukchi', 'Laptev_East_Siberian_Chukchi_Seas')
    " Laptev_East_Siberian_Chukchi_Seas "
    Laptev_East_Siberian_Seas = Basin('LaptevESiberian', 'Laptev_East_Siberian_Seas')
    " Laptev_East_Siberian_Seas "
    Laptev_Sea = Basin('Laptev', 'Laptev_Sea')
    " Laptev_Sea "
    Lincoln_Sea = Basin('Lincoln', 'Lincoln_Sea')
    " Lincoln_Sea "
    Mediterranean_Sea = Basin('Medit', 'Mediterranean_Sea')
    " Mediterranean_Sea "
    Nares_Strait = Basin('Nares', 'Nares_Strait')
    " Nares_Strait "
    Nordic_Barents_Seas = Basin('NordicBarents', 'Nordic_Barents_Seas')
    " Nordic_Barents_Seas "
    Nordic_Seas = Basin('Nordic', 'Nordic_Seas')
    " Nordic_Seas "
    NorthWest_Passage = Basin('NWPass', 'NorthWest_Passage')
    " NorthWest_Passage "
    North_Atlantic_Arctic = Basin('North_Atlantic_Arctic', 'North_Atlantic_Arctic')
    " North_Atlantic_Arctic "
    North_Hemisphere_Ocean = Basin('NHem', 'North_Hemisphere_Ocean')
    " North_Hemisphere_Ocean "
    Norwegian_Sea = Basin('Norwe', 'Norwegian_Sea')
    " Norwegian_Sea "
    Okhotsk = Basin('Okhotsk', 'Okhotsk')
    " Okhotsk "
    OpenOcean = Basin('OpenOcean', 'OpenOcean')
    " OpenOcean "
    Ross_Sea = Basin('Ross', 'Ross_Sea')
    " Ross_Sea "
    Serreze_Arctic = Basin('SerArc', 'Serreze_Arctic')
    " Serreze_Arctic "
    Southern_Hemisphere = Basin('SHem', 'Southern_Hemisphere')
    " Southern_Hemisphere "
    StLawr = Basin('StLawr', 'StLawr')
    " StLawr "
    Subpolar_Gyre = Basin('Subpolar', 'Subpolar_Gyre')
    " Subpolar_Gyre "
    TotalArc = Basin('TotalArc', 'TotalArc')
    " TotalArc "
    Vilkitsky_Strait = Basin('Vilkitsky', 'Vilkitsky_Strait')
    " Vilkitsky_Strait "
    Weddell_Sea = Basin('Weddell', 'Weddell_Sea')
    " Weddell_Sea "
    Western_Central_Arctic = Basin('Western_Central_Arctic', 'Western_Central_Arctic')
    " Western_Central_Arctic "
        """
        Return the basin matching the given name. If the parameter basin is a Basin instance, directly returns the same
        instance. This bahaviour is intended to facilitate the development of methods that can either accept a name
        or a Basin instance to characterize the basin.

        :param basin: basin name or basin instance
        :type basin: str | Basin
        :return: basin instance corresponding to the basin name
        :rtype: Basin
        """
        if isinstance(basin, Basin):
            return basin
        for name in cls.__dict__.keys():
            if name.startswith('_'):
                continue
            # noinspection PyCallByClass
            value = cls.__getattribute__(cls, name)
            if isinstance(value, Basin):
                if basin.lower() in [value.shortname.lower(), value.fullname.lower()]:
                    return value
        return None


class Models(object):
    """
    Predefined models
    """

    ECEARTH_2_3_O1L42 = 'Ec2.3_O1L42'
    """ EC-Earth 2.3 ORCA1 L42"""
    ECEARTH_3_0_O1L46 = 'Ec3.0_O1L46'
    """ EC-Earth 3 ORCA1 L46 """
    ECEARTH_3_0_O25L46 = 'Ec3.0_O25L46'
    """ EC-Earth 3 ORCA0.25 L46 """
    ECEARTH_3_0_O25L75 = 'Ec3.0_O25L75'
    """ EC-Earth 3 ORCA0.25 L75 """
    ECEARTH_3_1_O25L75 = 'Ec3.1_O25L75'
    """ EC-Earth 3.1 ORCA0.25 L75 """
    ECEARTH_3_2_O1L75 = 'Ec3.2_O1L75'
    """ EC-Earth 3.2 ORCA1 L75 """

    NEMO_3_2_O1L42 = 'N3.2_O1L42'
    """ NEMO 3.2 ORCA1 L42 """
    NEMO_3_3_O1L46 = 'N3.3_O1L46'
    """ NEMO 3.3 ORCA1 L46 """
    NEMO_3_6_O1L46 = 'N3.6_O1L75'
    """ NEMO 3.6 ORCA1 L75 """

    NEMOVAR_O1L42 = 'nemovar_O1L42'
    """ NEMOVAR ORCA1 L42 """
    GLORYS2_V1_O25L75 = 'glorys2v1_O25L75'
    """ GLORYS2v1 ORCA0.25 L75 """