示例#1
0
 def __init__(self, Wavelength, Name='Wavelength'):
     self.Name = Name
     self.Value = ToList(Wavelength).astype(float)
     self.Format = ".1e"
     self.Unit = "[m]"
     self.Label = 'Wavelength [m]'
     self.Legend = f'Wavelength {self.Unit}'
示例#2
0
 def __init__(self, PhiOffset, Name='Phi'):
     self.Name = Name
     self.Value = ToList(PhiOffset).astype(float)
     self.Format = "03.1f"
     self.Unit = "[Deg]"
     self.Label = 'Phi offset'
     self.Legend = f'Phi offset {self.Unit}'
示例#3
0
 def __init__(self, Filter, Name='Filter'):
     self.Name = Name
     self.Value = ToList(Filter).astype(float)
     self.Format = "03.1f"
     self.Unit = "[Deg]"
     self.Label = 'Polarization filter'
     self.Legend = f'Polarization filter {self.Unit}'
示例#4
0
 def __init__(self, NA, Name='NA'):
     self.Name = Name
     self.Value = ToList(NA).astype(float)
     self.Format = ".1e"
     self.Unit = "[1]"
     self.Label = 'Numerical aperture'
     self.Legend = f'Numerical aperture {self.Unit}'
示例#5
0
 def __init__(self, Sampling, Name='Sampling'):
     self.Name = Name
     self.Value = ToList(Sampling).astype(float)
     self.Format = ".1e"
     self.Unit = "[1]"
     self.Label = 'Detector sampling'
     self.Legend = f'Detector sampling {self.Unit}'
示例#6
0
 def __init__(self, Amplitude, Name='Amplitude'):
     self.Name = Name
     self.Value = ToList(Amplitude).astype(float)
     self.Format = ".1f"
     self.Unit = "[w.m⁻¹]"
     self.Label = 'E_0[w.m⁻¹]'
     self.Legend = f'Electric field amplitude {self.Unit}'
示例#7
0
 def __init__(self, GammaOffset, Name='Gamma'):
     self.Name = Name
     self.Value = ToList(GammaOffset).astype(float)
     self.Format = "03.1f"
     self.Unit = "[Deg]"
     self.Label = 'Gamma offset'
     self.Legend = f'Gamma offset {self.Unit}'
示例#8
0
 def __init__(self, Diameter, Name='Diameter', Prefix=None):
     self.Name = Name
     self.Value = ToList(Diameter).astype(float)
     self.Format = ".2f"
     self.Unit = "[m]"
     self.Label = 'Diameter'
     self.Legend = f'Diameter {self.Unit}'
     if Prefix:
         self.Legend = Prefix + ' ' + self.Legend
示例#9
0
 def __init__(self, Index, Name='Index'):
     self.Name = Name
     self.Format = ".2f"
     self.Unit = "[1]"
     self.Label = 'RI'
     self.Legend = f'Refractive index {self.Unit}'
     if Name == 'nMedium':
         self.Value = ToList(Index).astype(float)
     else:
         self.Value = ToList(Index).astype(complex)
示例#10
0
 def __init__(self, Material, Name='Material'):
     self.Name = Name
     self.Format = ""
     self.Unit = ""
     self.Label = 'Material'
     self.Legend = f'Material {self.Unit}'
     if Material is None:
         self.IsEmpty = True
     else:
         self.IsEmpty = False
     self.Value = ToList(Material)
示例#11
0
    def Get(self, Input):
        """Methode generate array of the givens parameters as a function of
        all independent variables.

        Returns
        -------
        :class:`PyMieSimArray`
            Dataframe containing Efficiencies vs. Wavelength, Diameter vs. Index...

        """

        Input = ToList(Input)

        X = self.SetSource([])

        X = self.SetScatterer(X)

        if self.DetectorSet:
            X = self.SetDetector(X)

        self.Xtable = X

        self.Ytable = Input

        Array = self._Get(Input)

        Array = np.rollaxis(Array, 0, len(Array.shape))

        return DataV(Array, Xtable=self.Xtable, Ytable=self.Ytable)
示例#12
0
    def __init__(self, Source=None, kwargs: dict = {}):

        self.kwargs = {k: ToList(v) for k, v in kwargs.items()}

        self._Source_ = PlaneWave

        self._Source = Namespace(kwargs=None)
示例#13
0
    def __init__(self, Detector, kwargs: dict = {}):

        self.isEmpty = False

        self.kwargs = {k: ToList(v) for k, v in kwargs.items()}

        self._Detector_ = Detector

        self._Detector = Namespace(kwargs=None)
示例#14
0
    def __init__(self, Scatterer=None, kwargs: dict = {}):

        if all(['Material' in kwargs.keys(), 'index' in kwargs.keys()]):
            raise KeyError(
                "You should either choose a material or the RI, not both.")

        self.kwargs = {k: ToList(v) for k, v in kwargs.items()}

        self._Scatterer_ = Scatterer

        self._Scatterer = Namespace(kwargs=None)

        self._Source = None
示例#15
0
class _Polarization(Base):
    def __init__(self, Polarization, Name='Polarization'):
        self.Name = Name
        self.Value = ToList(Polarization)
        self.Label = 'Polarization'
        self.Unit = ''
        self.Legend = f'Polarization {self.Unit}'

    def flatten(self):
        return np.array([x.J for x in self.Value]).flatten()

    def str(self, item):
        return self.Value[item].__str__()

    def __str__(self):
        return self.Value.__str__()
示例#16
0
class _Wavelength(Base):
    def __init__(self, Wavelength, Name='Wavelength'):
        self.Name = Name
        self.Value = ToList(Wavelength).astype(float)
        self.Format = ".1e"
        self.Unit = "[m]"
        self.Label = 'Wavelength [m]'
        self.Legend = f'Wavelength {self.Unit}'

    def str(self, item):
        return f" | {self.Name} : {self.Value[item]:{self.Format}}"

    def __str__(self):
        if self.Value.size == 1:
            return f" | {self.Name} : {self.Value[0]:{self.Format}} {self.Unit}"
        else:
            return self.Value.__str__()
示例#17
0
class _Sampling(Base):
    def __init__(self, Sampling, Name='Sampling'):
        self.Name = Name
        self.Value = ToList(Sampling).astype(float)
        self.Format = ".1e"
        self.Unit = "[1]"
        self.Label = 'Detector sampling'
        self.Legend = f'Detector sampling {self.Unit}'

    def str(self, item):
        return f" | {self.Name} : {self.Value[item]:{self.Format}}"

    def __str__(self):
        if self.Value.size == 1:
            return f" | {self.Name} : {self.Value[0]:{self.Format}} {self.Unit}"
        else:
            return self.Value.__str__()
示例#18
0
    def __init__(self, Wavelength: list, Polarization: list, Amplitude: list):

        self.Name = 'PlaneWave'

        self.kwargs = {
            'Wavelength':
            _Wavelength(Wavelength, 'Wavelength'),
            'Jones':
            _Polarization(
                [LinearPolarization(x) for x in ToList(Polarization)]),
            'Amplitude':
            _Amplitude(Amplitude, 'Amplitude')
        }

        self.kwargs_ = {k: v.flatten() for k, v in self.kwargs.items()}

        self.Parameters = [v for k, v in self.kwargs.items() if v is not None]
示例#19
0
class _Filter(Base):
    def __init__(self, Filter, Name='Filter'):
        self.Name = Name
        self.Value = ToList(Filter).astype(float)
        self.Format = "03.1f"
        self.Unit = "[Deg]"
        self.Label = 'Polarization filter'
        self.Legend = f'Polarization filter {self.Unit}'

    def str(self, item):
        return f" | {self.Name} : {self.Value[item]:{self.Format}}"

    def __str__(self):
        if self.Value.size == 1:
            return f" | {self.Name} : {self.Value[0]:{self.Format}}"
        else:
            return self.Value.__str__()
示例#20
0
class _NA(Base):
    def __init__(self, NA, Name='NA'):
        self.Name = Name
        self.Value = ToList(NA).astype(float)
        self.Format = ".1e"
        self.Unit = "[1]"
        self.Label = 'Numerical aperture'
        self.Legend = f'Numerical aperture {self.Unit}'

    def str(self, item):
        return f" | {self.Name} : {self.Value[item]:{self.Format}}"

    def __str__(self):
        if self.Value.size == 1:
            return f" | {self.Name} : {self.Value[0]:{self.Format}} {self.Unit}"
        else:
            return self.Value.__str__()
示例#21
0
class _Amplitude(Base):
    def __init__(self, Amplitude, Name='Amplitude'):
        self.Name = Name
        self.Value = ToList(Amplitude).astype(float)
        self.Format = ".1f"
        self.Unit = "[w.m⁻¹]"
        self.Label = 'E_0[w.m⁻¹]'
        self.Legend = f'Electric field amplitude {self.Unit}'

    def str(self, item):
        return f" | {self.Name} : {self.Value[item]:{self.Format}}"

    def __str__(self):
        if self.Value.size == 1:
            return f" | {self.Name} : {self.Value[0]:{self.Format}} {self.Unit}"
        else:
            return self.Value.__str__()
示例#22
0
class _PhiOffset(Base):
    def __init__(self, PhiOffset, Name='Phi'):
        self.Name = Name
        self.Value = ToList(PhiOffset).astype(float)
        self.Format = "03.1f"
        self.Unit = "[Deg]"
        self.Label = 'Phi offset'
        self.Legend = f'Phi offset {self.Unit}'

    def str(self, item):
        return f" | {self.Name} : {self.Value[item]:{self.Format}}"

    def __str__(self):
        if self.Value.size == 1:
            return f" | {self.Name} : {self.Value[0]:{self.Format}} {self.Unit}"
        else:
            return self.Value.__str__()
示例#23
0
class _Diameter(Base):
    def __init__(self, Diameter, Name='Diameter', Prefix=None):
        self.Name = Name
        self.Value = ToList(Diameter).astype(float)
        self.Format = ".2f"
        self.Unit = "[m]"
        self.Label = 'Diameter'
        self.Legend = f'Diameter {self.Unit}'
        if Prefix:
            self.Legend = Prefix + ' ' + self.Legend

    def str(self, item):
        return f" | {self.Name} : {self.Value[item]:{self.Format}}"

    def __str__(self):
        if self.Value.size == 1:
            return f" | {self.Name} : {self.Value[0]:{self.Format}} {self.Unit}"
        else:
            return self.Value.__str__()
示例#24
0
class _Index(Base):
    def __init__(self, Index, Name='Index'):
        self.Name = Name
        self.Format = ".2f"
        self.Unit = "[1]"
        self.Label = 'RI'
        self.Legend = f'Refractive index {self.Unit}'
        if Name == 'nMedium':
            self.Value = ToList(Index).astype(float)
        else:
            self.Value = ToList(Index).astype(complex)

    def str(self, item):
        return f" | {self.Name} : {self.Value[item]:{self.Format}}"

    def __str__(self):
        if self.Value.size == 1:
            return f" | {self.Name} : {self.Value[0]:{self.Format}} {self.Unit}"
        else:
            return self.Value.__str__()
示例#25
0
    def Evaluate(self, wavelength):
        self.counter = -1
        self.Data
        wavelength = ToList(wavelength)

        if any(wavelength < self.Boundary[0]) or any(
                wavelength > self.Boundary[1]):
            raise ValueError(f'Wavelength {wavelength} evaluated \
                               outside of defined range {self.Boundary}')

        nList = np.interp(wavelength, self.Data['wl0'], self.Data['n'])

        if 'wl1' not in self.Data:
            self.nList = nList
            return self.nList

        else:
            kList = np.interp(wavelength, self.Data['wl1'], self.Data['k'])
            self.nList = nList + 1j * kList
            return self.nList
示例#26
0
class _Material(Base):
    def __init__(self, Material, Name='Material'):
        self.Name = Name
        self.Format = ""
        self.Unit = ""
        self.Label = 'Material'
        self.Legend = f'Material {self.Unit}'
        if Material is None:
            self.IsEmpty = True
        else:
            self.IsEmpty = False
        self.Value = ToList(Material)

    def str(self, item):
        return f" | {self.Name} : {self.Value[item]:{self.Format}}"

    def __str__(self):
        if self.Value.size == 1:
            return f" | {self.Name} : {self.Value[0]:{self.Format}} {self.Unit}"
        else:
            return self.Value.__str__()
示例#27
0
    def Get(self, Input='Qsca', AsType='pymiesim'):
        """Methode generate array of the givens parameters as a function of
        all independent variables.

        Returns
        -------
        :class:`PyMieSimArray`
            Dataframe containing Efficiencies vs. Wavelength, Diameter vs. Index...

        """
        Input = set(ToList(Input))

        self.config['Got'] = [FormatString(element) for element in Input]

        self.AssertionType(Input=Input, AsType=AsType)

        self.UpdateConfig(Input, AsType)

        Array = np.empty(self.config['size'])

        if 'Material' in self.ScattererSet.kwargs: self.BindMaterial()

        i = 0
        for source in self.SourceSet.Generator():
            self.ScattererSet._Source = source
            for scatterer in self.ScattererSet.Generator():
                for detector in self.DetectorSet.Generator():
                    for prop in Input:
                        if prop == 'Coupling':
                            Array[i] = detector.Coupling(scatterer)
                            i += 1

                        else:
                            Array[i] = getattr(scatterer, prop)
                            i += 1

        Array = Array.reshape(self.config['shape'])

        return self.ReturnType(Array=Array, AsType=AsType)
示例#28
0
文件: Plots.py 项目: paaube/PyMieSim
    def wrapper(*args, **kwargs):
        figure = plt.figure(figsize=(10, 5))
        ax = figure.add_subplot(111)
        ax.grid()

        kwargs['y'] = ToList(kwargs['y'])
        kwargs['y'] = [FormatString(element) for element in kwargs['y']]

        if 'Scale' not in kwargs.keys():
            Scale = 'linear'
        else:
            Scale = kwargs['Scale']

        yLog = False
        xLog = False

        func(*args, **kwargs, figure=figure, ax=ax)

        ax.set_ylabel('/'.join(kwargs['y']))

        ax.set_xlabel(Arg2Dict[kwargs['x'].lower()]['label'])

        if Scale in ['lin', 'linear']:
            pass

        elif Scale in ['log', 'logarithmic']:
            ax.set_yscale('log')
            ax.set_xscale('log')

        elif Scale in ['xlog', 'xlogarithmic']:
            ax.set_xscale('log')

        if Scale in ['ylog', 'ylogarithmic']:
            ax.set_yscale('log')

        ax.legend(loc='upper left', prop={'family': 'monospace', 'size': 7})

        return figure
示例#29
0
 def __init__(self, Polarization, Name='Polarization'):
     self.Name = Name
     self.Value = ToList(Polarization)
     self.Label = 'Polarization'
     self.Unit = ''
     self.Legend = f'Polarization {self.Unit}'