Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 48 additions & 12 deletions refl1d/probe/probe.py
Original file line number Diff line number Diff line change
Expand Up @@ -1287,7 +1287,9 @@ def parts(self, theory):
yield p, (Q[offset : offset + n], R[offset : offset + n])
offset += n

def shared_beam(self, intensity=1, background=0, back_absorption=1, theta_offset=0, sample_broadening=0):
def shared_beam(
self, intensity=None, background=None, back_absorption=None, theta_offset=None, sample_broadening=None
):
"""
Share beam parameters across all segments.

Expand All @@ -1297,11 +1299,26 @@ def shared_beam(self, intensity=1, background=0, back_absorption=1, theta_offset
with an explicit parameter in an individual segment if that
parameter is independent.
"""
intensity = Parameter.default(intensity, name="intensity")
background = Parameter.default(background, name="background", limits=[0, None])
back_absorption = Parameter.default(back_absorption, name="back_absorption", limits=[0, 1])
theta_offset = Parameter.default(theta_offset, name="theta_offset")
sample_broadening = Parameter.default(sample_broadening, name="sample_broadening", limits=[None, None])
default_probe = self.probes[0]
if intensity is None:
intensity = default_probe.intensity
if background is None:
background = default_probe.background
if back_absorption is None:
back_absorption = default_probe.back_absorption
if theta_offset is None:
theta_offset = default_probe.theta_offset
if sample_broadening is None:
sample_broadening = default_probe.sample_broadening

qualifier = f" {self.name}" if self.name else ""
intensity = Parameter.default(intensity, name=f"intensity{qualifier}")
background = Parameter.default(background, name=f"background{qualifier}", limits=[0, None])
back_absorption = Parameter.default(back_absorption, name=f"back_absorption{qualifier}", limits=[0, 1])
theta_offset = Parameter.default(theta_offset, name=f"theta_offset{qualifier}")
sample_broadening = Parameter.default(
sample_broadening, name=f"sample_broadening{qualifier}", limits=[None, None]
)
for p in self.probes:
p.intensity = intensity
p.background = background
Expand Down Expand Up @@ -1620,7 +1637,9 @@ def _check(self):
else:
raise ValueError("Cannot mix front and back reflectivity measurements")

def shared_beam(self, intensity=1, background=0, back_absorption=1, theta_offset=0, sample_broadening=0):
def shared_beam(
self, intensity=None, background=None, back_absorption=None, theta_offset=None, sample_broadening=None
):
"""
Share beam parameters across all four cross sections.

Expand All @@ -1630,11 +1649,28 @@ def shared_beam(self, intensity=1, background=0, back_absorption=1, theta_offset
with an explicit parameter in an individual cross section if that
parameter is independent.
"""
intensity = Parameter.default(intensity, name="intensity")
background = Parameter.default(background, name="background", limits=[0, None])
back_absorption = Parameter.default(back_absorption, name="back_absorption", limits=[0, 1])
theta_offset = Parameter.default(theta_offset, name="theta_offset")
sample_broadening = Parameter.default(sample_broadening, name="sample_broadening", limits=[None, None])
# Default parameters to the first non-empty cross section
# Note: this may be a non-spinflip channel if the mm cross section is missing.
default_probe = next(x for x in self.xs if x is not None)
if intensity is None:
intensity = default_probe.intensity
if background is None:
background = default_probe.background
if back_absorption is None:
back_absorption = default_probe.back_absorption
if theta_offset is None:
theta_offset = default_probe.theta_offset
if sample_broadening is None:
sample_broadening = default_probe.sample_broadening

qualifier = f" {self.name}" if self.name else ""
intensity = Parameter.default(intensity, name="intensity" + qualifier)
background = Parameter.default(background, name="background" + qualifier, limits=[0, None])
back_absorption = Parameter.default(back_absorption, name="back_absorption" + qualifier, limits=[0, 1])
theta_offset = Parameter.default(theta_offset, name="theta_offset" + qualifier)
sample_broadening = Parameter.default(
sample_broadening, name="sample_broadening" + qualifier, limits=[None, None]
)
for x in self.xs:
if x is not None:
x.intensity = intensity
Expand Down
Loading