Source code for sasktran2.mie.distribution
import abc
import numpy as np
from scipy.stats import lognorm, rv_continuous
[docs]
class ParticleSizeDistribution(abc.ABC):
def __init__(self, identifier: str) -> None:
"""
Abstract class to define particle size distributions that Mie parameters can be
integrated over. This class is a light wrapper on top of scipy.stats.rv_continuous
which adds some additional information.
Parameters
----------
identifier : str
A unique identifier for the distribution
"""
self._identifier = identifier
[docs]
@abc.abstractmethod
def distribution(self, **kwargs) -> rv_continuous:
"""
Returns back the scipy object representing this distribution
Returns
-------
rv_continuous
"""
return self._distribution
@property
def identifier(self) -> str:
"""
Get the unique identifier for this distribution
Returns
-------
str
"""
return self._identifier
[docs]
class LogNormalDistribution(ParticleSizeDistribution):
def __init__(self) -> None:
"""
A log normal particle size distribution, defined by two parameters, the median radius and mode width
"""
super().__init__("lognormal")
[docs]
def distribution(self, **kwargs):
return lognorm(np.log(kwargs["mode_width"]), scale=kwargs["median_radius"])
@staticmethod
def args():
return ["median_radius", "mode_width"]