Module diskchef.chemistry.abundances

Expand source code
from collections import UserDict

from typing import List


class Abundances(UserDict):
    """
    Dict-like class to store the abundances

    Usage:

    >>> Abundances.from_3abunds_as_lines(
    ... '''# initial abundances, n(X)/n(H), 'frc(1:nfrc)
    ... 15                ! "Low" metals
    ... G0         1.000D-00
    ... HD         1.550D-05
    ... oH2        3.750D-01
    ... pH2        1.250D-01
    ... HE         0.975D-01
    ... C          0.786D-04'''.splitlines()
    ... ) ==  {'G0': 1.0, 'HD': 1.55e-05, 'oH2': 0.375, 'pH2': 0.125, 'HE': 0.0975, 'C': 7.86e-05}
    True
    """

    @classmethod
    def from_3abunds(cls, file: str):
        """Read 3abunds.inp ALCHEMIC abundances file"""
        with open(file) as fff:
            lines = fff.readlines()
        return cls.from_3abunds_as_lines(lines)

    @classmethod
    def from_3abunds_as_lines(cls, lines: List):
        """Process the string containing the 3abunds.inp ALCHEMIC abundances file"""
        species = {}
        for line in lines[2:]:
            _species, _abundance_to_hydrogen = line.split()
            species[_species] = float(_abundance_to_hydrogen.replace("D", "E"))
        return cls(species)

    def __init__(self, *args, **kwargs):
        if not (bool(args) or bool(kwargs)):
            super().__init__({"H2": 0.5, "CO": 0.5e-4})
        else:
            super().__init__(*args, **kwargs)

Classes

class Abundances (*args, **kwargs)

Dict-like class to store the abundances

Usage:

>>> Abundances.from_3abunds_as_lines(
... '''# initial abundances, n(X)/n(H), 'frc(1:nfrc)
... 15                ! "Low" metals
... G0         1.000D-00
... HD         1.550D-05
... oH2        3.750D-01
... pH2        1.250D-01
... HE         0.975D-01
... C          0.786D-04'''.splitlines()
... ) ==  {'G0': 1.0, 'HD': 1.55e-05, 'oH2': 0.375, 'pH2': 0.125, 'HE': 0.0975, 'C': 7.86e-05}
True
Expand source code
class Abundances(UserDict):
    """
    Dict-like class to store the abundances

    Usage:

    >>> Abundances.from_3abunds_as_lines(
    ... '''# initial abundances, n(X)/n(H), 'frc(1:nfrc)
    ... 15                ! "Low" metals
    ... G0         1.000D-00
    ... HD         1.550D-05
    ... oH2        3.750D-01
    ... pH2        1.250D-01
    ... HE         0.975D-01
    ... C          0.786D-04'''.splitlines()
    ... ) ==  {'G0': 1.0, 'HD': 1.55e-05, 'oH2': 0.375, 'pH2': 0.125, 'HE': 0.0975, 'C': 7.86e-05}
    True
    """

    @classmethod
    def from_3abunds(cls, file: str):
        """Read 3abunds.inp ALCHEMIC abundances file"""
        with open(file) as fff:
            lines = fff.readlines()
        return cls.from_3abunds_as_lines(lines)

    @classmethod
    def from_3abunds_as_lines(cls, lines: List):
        """Process the string containing the 3abunds.inp ALCHEMIC abundances file"""
        species = {}
        for line in lines[2:]:
            _species, _abundance_to_hydrogen = line.split()
            species[_species] = float(_abundance_to_hydrogen.replace("D", "E"))
        return cls(species)

    def __init__(self, *args, **kwargs):
        if not (bool(args) or bool(kwargs)):
            super().__init__({"H2": 0.5, "CO": 0.5e-4})
        else:
            super().__init__(*args, **kwargs)

Ancestors

  • collections.UserDict
  • collections.abc.MutableMapping
  • collections.abc.Mapping
  • collections.abc.Collection
  • collections.abc.Sized
  • collections.abc.Iterable
  • collections.abc.Container

Static methods

def from_3abunds(file: str)

Read 3abunds.inp ALCHEMIC abundances file

Expand source code
@classmethod
def from_3abunds(cls, file: str):
    """Read 3abunds.inp ALCHEMIC abundances file"""
    with open(file) as fff:
        lines = fff.readlines()
    return cls.from_3abunds_as_lines(lines)
def from_3abunds_as_lines(lines: List)

Process the string containing the 3abunds.inp ALCHEMIC abundances file

Expand source code
@classmethod
def from_3abunds_as_lines(cls, lines: List):
    """Process the string containing the 3abunds.inp ALCHEMIC abundances file"""
    species = {}
    for line in lines[2:]:
        _species, _abundance_to_hydrogen = line.split()
        species[_species] = float(_abundance_to_hydrogen.replace("D", "E"))
    return cls(species)