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()
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()
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] })
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)
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()
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()
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()
def Csca(self): return Area(self.Qsca * self.Area)
def Cabs(self): return Area(self.Qabs * self.Area)
def Cratio(self): """ .. note:: Cross-section: Ratio of backscattering over total scattering. """ return Area( self.Bind.Cratio )
def Cback(self): """ .. note:: Cross-section: Backscattering. """ return Area( self.Bind.Cback )
def Cpr(self): """ .. note:: Cross-section: Radiation pressure. """ return Area( self.Bind.Cpr )
def Cabs(self): """ .. note:: Cross-section: Absorption. """ return Area( self.Bind.Cabs )
def Cext(self): """ .. note:: Cross-section: Extinction. """ return Area( self.Bind.Cext )
def Csca(self): """ .. note:: Cross-section: Scattering. """ return Area( self.Bind.Csca )
def Cpr(self): return Area(self.Qpr * self.Area)
def Cext(self): return Area(self.Qext * self.Area)
def Cback(self): return Area(self.Qback * self.Area)
def Cratio(self): return Area(self.Qratio * self.Area)