Skip to main content

JointReconstruction

Struct JointReconstruction 

Source
pub struct JointReconstruction<A> {
    pub object_algorithm: A,
    pub optics: Optics,
    pub initial_illumination: Illumination,
    pub illumination_calibration: IlluminationCalibration,
    pub outer_iterations: usize,
    pub object_iterations_per_outer: usize,
    pub illumination_steps_per_outer: usize,
}
Expand description

Alternates an existing object or object/pupil algorithm with physical LED calibration.

One runner iteration is one outer iteration. The complete acquisition order is supplied to the wrapped algorithm object_iterations_per_outer times, then bounded physical updates refresh only illumination-dependent model state. Generic Fourier-grid correction remains an independent feature of crate::algorithms::GradientDescent.

The joint-estimation motivation follows J. Sun, Q. Chen, Y. Zhang, and C. Zuo, “Efficient positional misalignment correction method for Fourier ptychographic microscopy,” Biomedical Optics Express 7(4), 1336–1350 (2016). This implementation uses bounded, scaled finite differences rather than that work’s simulated annealing and nonlinear regression. It does not implement the brightfield circle detection or spectral correlation of R. Eckert, Z. F. Phillips, and L. Waller, “Efficient illumination angle self-calibration in Fourier ptychography,” Applied Optics 57(19), 5434–5442 (2018).

Fields§

§object_algorithm: A

Existing analytic object or object/pupil update algorithm.

§optics: Optics

Optical configuration used to resolve physical source positions.

§initial_illumination: Illumination

Nominal reusable physical illumination.

§illumination_calibration: IlluminationCalibration

Physical parameter selection, priors, loss, and bounded optimizer.

§outer_iterations: usize

Number of alternating outer iterations.

§object_iterations_per_outer: usize

Complete object-update passes before each physical phase.

§illumination_steps_per_outer: usize

Repetitions of the configured bounded physical phase per outer iteration.

Implementations§

Source§

impl<A> JointReconstruction<A>

Source

pub fn new( object_algorithm: A, optics: Optics, initial_illumination: Illumination, illumination_calibration: IlluminationCalibration, outer_iterations: usize, ) -> Self

Creates an alternating reconstruction with one object pass and one calibration phase.

Source

pub fn object_iterations_per_outer(self, iterations: usize) -> Self

Sets the positive number of complete object passes in each outer iteration.

Source

pub fn illumination_steps_per_outer(self, steps: usize) -> Self

Sets the positive number of bounded illumination phases in each outer iteration.

Source§

impl<A: ReconstructionAlgorithm> JointReconstruction<A>

Source

pub fn run<M: MeasurementRead>( self, problem: &ReconstructionProblem<M>, ) -> Result<JointReconstructionResult>

Runs alternating reconstruction without callbacks and returns structured physical output.

Source

pub fn run_with_callbacks<M: MeasurementRead>( self, problem: &ReconstructionProblem<M>, callbacks: Vec<Box<dyn Callback>>, ) -> Result<JointReconstructionResult>

Runs alternating reconstruction with ordinary runner callbacks.

Outer-iteration callbacks receive physical phase metrics in the physical_illumination namespace, and checkpoint callbacks capture the complete physical state and refreshed model.

Source

pub fn run_from_checkpoint<M: MeasurementRead>( self, problem: &ReconstructionProblem<M>, checkpoint: ReconstructionCheckpoint, ) -> Result<JointReconstructionResult>

Resumes alternating reconstruction from a checkpoint containing physical state.

Trait Implementations§

Source§

impl<A: Clone> Clone for JointReconstruction<A>

Source§

fn clone(&self) -> JointReconstruction<A>

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<A: Debug> Debug for JointReconstruction<A>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<A: ReconstructionAlgorithm> ReconstructionAlgorithm for JointReconstruction<A>

Source§

type IterationMetrics = JointIterationMetrics

Algorithm-specific metrics emitted by each step and appended to the trace.
Source§

fn validate(&self) -> Result<()>

Validates solver parameters independently of a reconstruction problem.
Source§

fn validate_problem<M: MeasurementRead>( &self, problem: &ReconstructionProblem<M>, ) -> Result<()>

Validates solver requirements that depend on problem.
Source§

fn initialize<M: MeasurementRead>( &self, problem: &ReconstructionProblem<M>, ) -> Result<ReconstructionState>

Creates the default CPU-backed state for problem.
Source§

fn initialize_with_backend<M: MeasurementRead>( &self, problem: &ReconstructionProblem<M>, backend: Arc<dyn Backend>, ) -> Result<ReconstructionState>

Creates reconstruction state using the supplied execution backend.
Source§

fn step<M: MeasurementRead>( &mut self, problem: &ReconstructionProblem<M>, state: &mut ReconstructionState, batch: &Batch, iteration: usize, ) -> Result<StepOutput<Self::IterationMetrics>>

Updates state for one scheduled batch in zero-based iteration.
Source§

fn canonicalize_state<M: MeasurementRead>( &self, problem: &ReconstructionProblem<M>, state: &mut ReconstructionState, ) -> Result<()>

Projects algorithm-owned ambiguities into a stable reported convention. Read more
Source§

fn iterations(&self) -> usize

Returns the requested number of complete schedule passes.
Source§

fn batch_size(&self) -> usize

Returns the number of measured frames combined into one step.
Source§

fn supports_joint_reconstruction(&self) -> bool

Reports whether the algorithm may run inside physical joint calibration. Read more
Source§

fn run<M: MeasurementRead>( self, problem: &ReconstructionProblem<M>, ) -> Result<ReconstructionResult>
where Self: Sized,

Runs the algorithm with default sequential scheduling and no callbacks.
Source§

fn run_with_callbacks<M: MeasurementRead>( self, problem: &ReconstructionProblem<M>, callbacks: Vec<Box<dyn Callback>>, ) -> Result<ReconstructionResult>
where Self: Sized,

Runs the algorithm and invokes callbacks at their declared hooks.
Source§

fn run_from_checkpoint<M: MeasurementRead>( self, problem: &ReconstructionProblem<M>, checkpoint: ReconstructionCheckpoint, ) -> Result<ReconstructionResult>
where Self: Sized,

Resumes a run from a checkpoint after validating it against problem.

Auto Trait Implementations§

§

impl<A> Freeze for JointReconstruction<A>
where A: Freeze,

§

impl<A> RefUnwindSafe for JointReconstruction<A>
where A: RefUnwindSafe,

§

impl<A> Send for JointReconstruction<A>
where A: Send,

§

impl<A> Sync for JointReconstruction<A>
where A: Sync,

§

impl<A> Unpin for JointReconstruction<A>
where A: Unpin,

§

impl<A> UnsafeUnpin for JointReconstruction<A>
where A: UnsafeUnpin,

§

impl<A> UnwindSafe for JointReconstruction<A>
where A: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> Key for T
where T: Clone,

§

fn align() -> usize

The alignment necessary for the key. Must return a power of two.
§

fn size(&self) -> usize

The size of the key in bytes.
§

unsafe fn init(&self, ptr: *mut u8)

Initialize the key in the given memory location. Read more
§

unsafe fn get<'a>(ptr: *const u8) -> &'a T

Get a reference to the key from the given memory location. Read more
§

unsafe fn drop_in_place(ptr: *mut u8)

Drop the key in place. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,