Module derive

Source
Available on crate feature derive only.
Expand description

Utilities for user-defined Gain and Modulation.

§Example

The following example shows how to define a custom Gain that generates a single focal point.

use autd3_core::derive::*;
use autd3_core::geometry::Point3;
use autd3_core::defined::rad;

#[derive(Gain, Debug)]
pub struct FocalPoint {
    pos: Point3,
}

pub struct Impl {
    pos: Point3,
    wavenumber: f32,
}

impl GainCalculator for Impl {
    fn calc(&self, tr: &Transducer) -> Drive {
        Drive {
            phase: Phase::from(-(self.pos - tr.position()).norm() * self.wavenumber * rad),
            intensity: EmitIntensity::MAX,
        }
    }
}

impl GainCalculatorGenerator for FocalPoint {
    type Calculator = Impl;

    fn generate(&mut self, device: &Device) -> Self::Calculator {
        Impl {
            pos: self.pos,
            wavenumber: device.wavenumber(),
        }
    }
}

impl Gain for FocalPoint {
    type G = FocalPoint;

    fn init(self) -> Result<Self::G, GainError> {
        Ok(self)
    }
}

The following example shows how to define a modulation that outputs the maximum value only for a moment.

use autd3_core::defined::kHz;
use autd3_core::derive::*;

#[derive(Modulation, Debug)]
pub struct Burst {
}

impl Burst {
    pub fn new() -> Self {
        Self {}
    }
}

impl Modulation for Burst {
    fn calc(self) -> Result<Vec<u8>, ModulationError>  {
        Ok((0..4000)
            .map(|i| if i == 3999 { u8::MAX } else { u8::MIN })
            .collect())
    }

    fn sampling_config(&self) -> SamplingConfig {
        SamplingConfig::new(4. * kHz)
    }
}

Re-exports§

pub use crate::datagram::DatagramOption;
pub use crate::datagram::Segment;
pub use crate::datagram::TransitionMode;
pub use crate::geometry::Geometry;
pub use crate::datagram::DatagramS;
pub use crate::gain::BitVec;
pub use crate::gain::Drive;
pub use crate::gain::EmitIntensity;
pub use crate::gain::Gain;
pub use crate::gain::GainCalculator;
pub use crate::gain::GainCalculatorGenerator;
pub use crate::gain::GainError;
pub use crate::gain::GainOperationGenerator;
pub use crate::gain::Phase;
pub use crate::geometry::Device;
pub use crate::geometry::Transducer;
pub use crate::datagram::DatagramL;
pub use crate::datagram::LoopBehavior;
pub use crate::modulation::Modulation;
pub use crate::modulation::ModulationError;
pub use crate::modulation::ModulationOperationGenerator;
pub use tracing;

Structs§

Arc
A thread-safe reference-counting pointer. ‘Arc’ stands for ‘Atomically Reference Counted’.
HashMap
A hash map implemented with quadratic probing and SIMD lookup.

Enums§

SamplingConfigsampling_config
The configuration for sampling.
SamplingConfigErrorsampling_config
An error produced by the sampling configuration.