Skip to content

Commit

Permalink
Renamed `esis.flights.f1.optics.primaries.materials.reflectivity_witn…
Browse files Browse the repository at this point in the history
…ess()` to `multilayer_witness_measured()` and modified it to use `optika.materials.MeasuredMirror`.
  • Loading branch information
byrdie committed Mar 14, 2024
1 parent 361f423 commit 42f2e8e
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 21 deletions.
39 changes: 24 additions & 15 deletions esis/flights/f1/optics/primaries/materials/_materials.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

__all__ = [
"multilayer_design",
"reflectivity_witness",
"multilayer_witness_measured",
"multilayer_witness",
"multilayer_fit",
]
Expand Down Expand Up @@ -96,9 +96,7 @@ def multilayer_design() -> optika.materials.MultilayerMirror:
)


def reflectivity_witness() -> (
na.FunctionArray[na.SpectralDirectionalVectorArray, na.ScalarArray]
):
def multilayer_witness_measured() -> optika.materials.MeasuredMirror:
"""
A reflectivity measurement of the witness samples to the primary mirror
multilayer coating performed by Eric Gullikson.
Expand All @@ -114,7 +112,8 @@ def reflectivity_witness() -> (
import esis
# Load the witness sample measurements
measurement = esis.flights.f1.optics.primaries.materials.reflectivity_witness()
multilayer = esis.flights.f1.optics.primaries.materials.multilayer_witness_measured()
measurement = multilayer.efficiency_measured
# Plot the measurement as a function of wavelength
fig, ax = plt.subplots(constrained_layout=True)
Expand All @@ -135,13 +134,20 @@ def reflectivity_witness() -> (
)
wavelength = na.ScalarArray(wavelength << u.nm, axes="wavelength").to(u.AA)
reflectivity = na.ScalarArray(reflectivity, axes="wavelength")
result = na.FunctionArray(
inputs=na.SpectralDirectionalVectorArray(
wavelength=wavelength,
direction=4 * u.deg,

result = optika.materials.MeasuredMirror(
efficiency_measured=na.FunctionArray(
inputs=na.SpectralDirectionalVectorArray(
wavelength=wavelength,
direction=np.cos(4 * u.deg),
),
outputs=reflectivity,
),
substrate=optika.materials.Layer(
chemical="Si",
),
outputs=reflectivity,
)

return result


Expand Down Expand Up @@ -209,15 +215,18 @@ def multilayer_witness() -> optika.materials.MultilayerMirror:

design = multilayer_design()

reflectivity = reflectivity_witness()
measurement = multilayer_witness_measured()
unit = u.nm

reflectivity = measurement.efficiency_measured.outputs
angle_incidence = np.arccos(measurement.efficiency_measured.inputs.direction)

rays = optika.rays.RayVectorArray(
wavelength=reflectivity.inputs.wavelength,
wavelength=measurement.efficiency_measured.inputs.wavelength,
direction=na.Cartesian3dVectorArray(
x=np.sin(reflectivity.inputs.direction),
x=np.sin(angle_incidence),
y=0,
z=np.cos(reflectivity.inputs.direction),
z=np.cos(angle_incidence),
),
)

Expand Down Expand Up @@ -248,7 +257,7 @@ def _func(x: np.ndarray):
normal=normal,
)

result = np.sqrt(np.mean(np.square(reflectivity_fit - reflectivity.outputs)))
result = np.sqrt(np.mean(np.square(reflectivity_fit - reflectivity)))

return result.ndarray.value

Expand Down
9 changes: 3 additions & 6 deletions esis/flights/f1/optics/primaries/materials/_materials_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,9 @@ def test_design():
assert isinstance(r, optika.materials.AbstractMultilayerMirror)


def test_reflectivity_witness():
r = esis.flights.f1.optics.primaries.materials.reflectivity_witness()
assert isinstance(r, na.FunctionArray)
assert isinstance(r.inputs, na.SpectralDirectionalVectorArray)
assert isinstance(r.outputs, na.AbstractScalar)
assert np.all(r.outputs >= 0)
def test_multilayer_witness_measured():
r = esis.flights.f1.optics.primaries.materials.multilayer_witness_measured()
assert isinstance(r, optika.materials.MeasuredMirror)


def test_multilayer_witness():
Expand Down

0 comments on commit 42f2e8e

Please sign in to comment.