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__()
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__()
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__()
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__()
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__()
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__()
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__()
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__()
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__()
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__()