Wasser-Extinktionskoeffizient-Modell von 200 nm bis 200 μm in Python
English
Deutsch
Du kannst den Wasser-Extinktionskoeffizienten und die Absorptionslänge für jede Wellenlänge zwischen 200 nm und 200 μm mit dem Absorption-Modul von UliEngineering berechnen.
Das zugrundeliegende Modell basiert auf dieser Arbeit aus dem Jahr 1973:
hale_querry_citation.txt
Hale, George M., and Marvin R. Querry. "Optical constants of water in the 200-nm to 200-μ m wavelength region." Applied optics 12.3 (1973): 555-563.Du kannst sie online bei Optica Publishing Group einsehen.
Installiere zunächst UliEngineering.
Beispiel: Extinktionskoeffizient für eine benutzerdefinierte Wellenlänge abrufen
extinction_coefficient_example.py
from UliEngineering.Chemistry.Absorption import HaleQuerryAbsorptionModel
from UliEngineering.EngineerIO import EngineerIO
wavelength_nm = 1500 # nm
model = HaleQuerryAbsorptionModel()
ext_coeff = model(wavelength_nm)
formatted = EngineerIO.instance().format(ext_coeff, unit="1/m")
print(f"Extinktionskoeffizient bei {wavelength_nm} nm: {formatted}")Beispiel: Länge berechnen, bei der 99% des Lichts absorbiert werden
plot_absorption.py
import matplotlib.pyplot as plt
from matplotlib.ticker import FuncFormatter
from UliEngineering.Chemistry.Absorption import HaleQuerryAbsorptionModel, absorption_length_from_absorption_coefficient
from UliEngineering.EngineerIO import format_value
plt.style.use("ggplot")
model = HaleQuerryAbsorptionModel()
wavelengths = [d.wavelength for d in model.datapoints] # in nm
abs_coeffs = [d.absorption_coefficient for d in model.datapoints]
abs_lengths = [absorption_length_from_absorption_coefficient(ac) for ac in abs_coeffs]
fig, ax1 = plt.subplots(figsize=(12, 5))
color1 = "tab:blue"
color2 = "tab:red"
ax1.set_xlabel("Wellenlänge (nm)")
ax1.set_ylabel("Absorptionskoeffizient (1/m)", color=color1)
ax1.loglog(wavelengths, abs_coeffs, marker="o", linestyle="-", color=color1, label="Extinktionskoeffizient")
ax1.tick_params(axis="y", labelcolor=color1)
ax1.yaxis.set_minor_locator(plt.NullLocator()) # Nebenticks auf Y-Achse ausblenden
ax1.xaxis.set_major_formatter(FuncFormatter(lambda x, p: format_value(x, "m")))
ax2 = ax1.twinx()
ax2.set_ylabel("Absorptionslänge (m)", color=color2)
ax2.loglog(wavelengths, abs_lengths, marker="s", linestyle="--", color=color2, label="Absorptionslänge (1/e)")
ax2.tick_params(axis="y", labelcolor=color2)
ax2.yaxis.set_minor_locator(plt.NullLocator()) # Nebenticks auf Y-Achse ausblenden
ax2.yaxis.set_major_formatter(FuncFormatter(lambda x, p: format_value(x, "m")))
ax2.xaxis.set_major_formatter(FuncFormatter(lambda x, p: format_value(x, "m")))
plt.title("Hale-Querry Wasser-Extinktionskoeffizient und Absorptionslänge")
fig.tight_layout()
plt.grid(True, which="both", ls="--")Berechnungsmethode
Das Hale-Querry-Modell verwendet tabellierte Daten und lineare Interpolation, um den Extinktionskoeffizienten für Wasser über einen weiten Wellenlängenbereich bereitzustellen. Die Absorptionslänge ist einfach der Kehrwert des Extinktionskoeffizienten.
HaleQuerryAbsorptionModel()(wavelength_nm)gibt den Extinktionskoeffizienten in 1/m für eine gegebene Wellenlänge in Nanometern zurück.absorption_length_from_extinction_coefficient(ext_coeff)berechnet die Absorptionslänge (Strecke für 1/e-Dämpfung) in Metern.length_from_remaining_fraction(fraction, ext_coeff)berechnet die Länge, bei der ein gegebener Bruchteil des Lichts verbleibt.
Siehe die UliEngineering-Dokumentation für weitere Details.
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow