Beispiel #1
0
    def __init__(self,
                 Diameter: float,
                 Source: SourceType,
                 Index: ScalarType = None,
                 nMedium: ScalarType = 1.0,
                 Concentration: ScalarType = None,
                 Material=None):

        super().__init__()

        if Material:
            assert Index is None, Error_IndexMaterial
            self.Material = Material
            self.Index = Material.Evaluate(Source.Wavelength)

        if Index:
            assert Material is None, Error_IndexMaterial
            self.Material = None
            self.Index = Index

        self.type = 'Sphere'
        self.Diameter = Diameter
        self.Source = Source
        self._Concentration = Concentration
        self.nMedium = nMedium.real  #.astype(complex)
        self.Area = Area(np.pi * (Diameter / 2)**2)
        self.SizeParam = Source.k * (self.Diameter / 2)

        self.GetBinding()
Beispiel #2
0
    def __init__(self,
                 CoreDiameter  : float,
                 ShellWidth    : float,
                 Source        : PlaneWave,
                 CoreIndex     : float   = None,
                 ShellIndex    : float   = None,
                 nMedium       : float   = 1.0,
                 CoreMaterial            = None,
                 ShellMaterial           = None,
                 ):

        super().__init__()

        self.Type          = 'CoreShell'
        self.CoreDiameter  = CoreDiameter
        self.ShellDiameter = CoreDiameter + ShellWidth
        self.Source        = Source

        self.CoreIndex     = CoreIndex
        self.ShellIndex    = ShellIndex
        self.CoreMaterial  = CoreMaterial
        self.ShellMaterial = ShellMaterial

        self.CoreIndex     = GetIndex(self.CoreIndex, self.Source, self.CoreMaterial)
        self.ShellIndex    = GetIndex(self.ShellIndex, self.Source, self.ShellMaterial)

        self.nMedium       = nMedium
        self.Area          = Area(np.pi * (self.ShellDiameter/2)**2)

        self.GetBinding()
Beispiel #3
0
    def __init__(self, Parent):

        self.Parent = Parent

        data = Parent.Bind.Efficiencies

        self['efficiencies'] = {
            'Qsca': data[0],
            'Qext': data[1],
            'Qabs': data[2],
            'Qback': data[3],
            'Qratio': data[4],
            'Qpr': data[6]
        }

        self['cross-sections'] = {
            'Csca': Area(data[0] * Parent.Area),
            'Cext': Area(data[1] * Parent.Area),
            'Cabs': Area(data[2] * Parent.Area),
            'Cback': Area(data[3] * Parent.Area),
            'Cratio': Area(data[4] * Parent.Area),
            'Cpr': Area(data[6] * Parent.Area)
        }

        self['others'] = {'area': Parent.Area, 'index': Parent.Index}

        if Parent._Concentration is not None:

            self['others'].update({
                'Concentration': Parent.Concentration,
                u'\u03bc sca': Parent.MuSca,
                u'\u03bc ext': Parent.MuExt,
                u'\u03bc abs': Parent.MuAbs,
                'g': data[6]
            })
Beispiel #4
0
    def CrossSection(self, Mesh):
        """
        .. note::
            Method return scattering cross section, see :func:`EnergyFlow`

        Parameters
        ----------
        Mesh : :class:`FibonacciMesh`
            Number of voxel in the 4 pi space to compute scattering cross section.

        Returns
        -------
        :class:`float`
            scattering cross section [:math:`m^2`]
        """
        #return self.EnergyFlow(Mesh) / self.Source.I

        return Area(self.Qsca*self.Area)
Beispiel #5
0
    def __init__(
        self,
        Diameter: float,
        Source: SourceType,
        Index: ScalarType,
        IndexMedium: ScalarType = 1.0,
        Concentration: ScalarType = None,
    ):

        super().__init__()
        self.type = 'Cylinder'
        self.Diameter = Diameter
        self.Source = Source
        self.Index = Index
        self.nMedium = IndexMedium
        self.Area = Area(np.pi * (Diameter / 2)**2)
        self.SizeParam = Source.k * (self.Diameter / 2)
        self._Concentration = Concentration

        self.GetBinding()
Beispiel #6
0
    def __init__(
        self,
        CoreDiameter: float,
        ShellWidth: float,
        Source: SourceType,
        CoreIndex: ScalarType,
        ShellIndex: ScalarType,
        nMedium: ScalarType = 1.0,
        Concentration: ScalarType = None,
        CoreMaterial=None,
        ShellMaterial=None,
    ):

        super().__init__()

        ShellDiameter = CoreDiameter + ShellWidth
        self._Concentration = Concentration

        if all([CoreIndex, CoreMaterial]) or all([ShellIndex, ShellMaterial]):
            raise AssertionError(Error_IndexMaterial)

        if all([CoreMaterial, ShellMaterial]):
            self.Material = Material
            self.CoreIndex = CoreMaterial.Evaluate(Source.Wavelength)
            self.ShellIndex = ShellMaterial.Evaluate(Source.Wavelength)

        if all([CoreIndex, ShellIndex]):
            self.Material = None
            self.CoreIndex = CoreIndex
            self.ShellIndex = ShellIndex

        self.type = '2-Layer Sphere'
        self.CoreDiameter = CoreDiameter
        self.ShellDiameter = ShellDiameter
        self.Source = Source
        self.nMedium = nMedium
        self.Area = Area(np.pi * (ShellDiameter / 2)**2)

        self.GetBinding()
Beispiel #7
0
    def __init__(self,
                 Diameter      : float,
                 Source        : PlaneWave,
                 Index         : float      = None,
                 nMedium       : float      = 1.0,
                 Material                   = None):

        super().__init__()

        self.Type           = 'Sphere'
        self.Source         = Source
        self.Material       = Material
        self.Index          = Index
        self.Diameter       = Diameter

        self.Index          = GetIndex(self.Index, self.Source, self.Material)

        self.nMedium        = nMedium.real
        self.Area           = Area(np.pi * (Diameter/2)**2)
        self.SizeParameter  = Source.k * ( self.Diameter / 2 )

        self.GetBinding()
Beispiel #8
0
 def Csca(self):
     return Area(self.Qsca * self.Area)
Beispiel #9
0
 def Cabs(self):
     return Area(self.Qabs * self.Area)
Beispiel #10
0
 def Cratio(self):
     """
     .. note::
         Cross-section: Ratio of backscattering over total scattering.
     """
     return Area( self.Bind.Cratio )
Beispiel #11
0
 def Cback(self):
     """
     .. note::
         Cross-section: Backscattering.
     """
     return Area( self.Bind.Cback )
Beispiel #12
0
 def Cpr(self):
     """
     .. note::
         Cross-section: Radiation pressure.
     """
     return Area( self.Bind.Cpr )
Beispiel #13
0
 def Cabs(self):
     """
     .. note::
         Cross-section: Absorption.
     """
     return Area( self.Bind.Cabs )
Beispiel #14
0
 def Cext(self):
     """
     .. note::
         Cross-section: Extinction.
     """
     return Area( self.Bind.Cext )
Beispiel #15
0
 def Csca(self):
     """
     .. note::
         Cross-section: Scattering.
     """
     return Area( self.Bind.Csca )
Beispiel #16
0
 def Cpr(self):
     return Area(self.Qpr * self.Area)
Beispiel #17
0
 def Cext(self):
     return Area(self.Qext * self.Area)
Beispiel #18
0
 def Cback(self):
     return Area(self.Qback * self.Area)
Beispiel #19
0
 def Cratio(self):
     return Area(self.Qratio * self.Area)