DMM
- class pulser.channels.DMM(clock_period=1, min_duration=1, max_duration=100000000, min_avg_amp=0, mod_bandwidth=None, custom_phase_jump_time=None, propagation_dir=None, bottom_detuning=None, total_bottom_detuning=None)
Bases:
Channel
Defines a Detuning Map Modulator (DMM) Channel.
A Detuning Map Modulator can be used to define Global detuning Pulses (of zero amplitude and phase). These Pulses are locally modulated by the weights of a DetuningMap, thus providing a local control over the detuning. The detuning of the pulses added to a DMM has to be negative, between 0 and bottom_detuning, and the sum of the weights multiplied by that detuning has to be below total_bottom_detuning. Channel targeting the transition between the ground and rydberg states, thus encoding the ‘ground-rydberg’ basis.
Note
The protocol to add pulses to the DMM Channel is by default “no-delay”.
- Parameters:
bottom_detuning (
float
|None
, default:None
) – Minimum possible detuning per atom (in rad/µs), must be below zero.total_bottom_detuning (
float
|None
, default:None
) – Minimum possible detuning distributed on all atoms (in rad/µs), must be below zero.clock_period (
int
, default:1
) – The duration of a clock cycle (in ns). The duration of a pulse or delay instruction is enforced to be a multiple of the clock cycle.min_duration (
int
, default:1
) – The shortest duration an instruction can take.max_duration (
int
|None
, default:100000000
) – The longest duration an instruction can take.min_avg_amp (
float
, default:0
) – The minimum average amplitude of a pulse (when not zero).mod_bandwidth (
float
|None
, default:None
) – The modulation bandwidth at -3dB (50% reduction), in MHz.
Attributes
addressing
The addressed basis name.
bottom_detuning
clock_period
custom_phase_jump_time
The eigenstates associated with the basis.
eom_config
fixed_retarget_t
max_abs_detuning
max_amp
max_duration
max_targets
min_avg_amp
min_duration
min_retarget_interval
mod_bandwidth
The name of the channel.
Time taken to change the phase between consecutive pulses (in ns).
propagation_dir
The rise time (in ns).
total_bottom_detuning
Methods
Initializes the channel with global addressing.
Initializes the channel with local addressing.
Applies the modulation transfer fuction to the input samples.
Calculates the minimal buffers needed around a modulated waveform.
Generates the default ID for indexing this channel in a Device.
Whether the channel is virtual (i.e. partially defined).
Modulates the input according to the channel's modulation bandwidth.
Whether the channel supports EOM mode operation.
Validates and adapts the duration of an instruction on this channel.
Checks if a pulse can be executed via this DMM on a DetuningMap.
Signatures
- classmethod Global(max_abs_detuning, max_amp, **kwargs)
Initializes the channel with global addressing.
- Parameters:
max_abs_detuning (
float
|None
) – Maximum possible detuning (in rad/µs), in absolute value.max_amp (
float
|None
) – Maximum pulse amplitude (in rad/µs).
- Keyword Arguments:
clock_period (int, default=4) – The duration of a clock cycle (in ns). The duration of a pulse or delay instruction is enforced to be a multiple of the clock cycle.
min_duration (int, default=1) – The shortest duration an instruction can take.
max_duration (Optional[int], default=10000000) – The longest duration an instruction can take.
mod_bandwidth (Optional[float], default=None) – The modulation bandwidth at -3dB (50% reduction), in MHz.
min_avg_amp – The minimum average amplitude of a pulse (when not zero).
custom_phase_jump_time – An optional custom value for the phase jump time that overrides the default value estimated from the modulation bandwidth. It is not enforced in EOM mode.
propagation_dir – The propagation direction of the beam associated with the channel, given as a vector in 3D space.
- Return type:
TypeVar
(ChannelType
, bound= Channel)
- classmethod Local(max_abs_detuning, max_amp, min_retarget_interval=0, fixed_retarget_t=0, max_targets=None, **kwargs)
Initializes the channel with local addressing.
- Parameters:
max_abs_detuning (
float
|None
) – Maximum possible detuning (in rad/µs), in absolute value.max_amp (
float
|None
) – Maximum pulse amplitude (in rad/µs).min_retarget_interval (
int
, default:0
) – Minimum time required between two target instructions (in ns).fixed_retarget_t (
int
, default:0
) – Time taken to change the target (in ns).max_targets (
int
|None
, default:None
) – Maximum number of atoms the channel can target simultaneously.
- Keyword Arguments:
clock_period (int, default=4) – The duration of a clock cycle (in ns). The duration of a pulse or delay instruction is enforced to be a multiple of the clock cycle.
min_duration (int, default=1) – The shortest duration an instruction can take.
max_duration (Optional[int], default=10000000) – The longest duration an instruction can take.
mod_bandwidth (Optional[float], default=None) – The modulation bandwidth at -3dB (50% reduction), in MHz.
min_avg_amp – The minimum average amplitude of a pulse (when not zero).
custom_phase_jump_time – An optional custom value for the phase jump time that overrides the default value estimated from the modulation bandwidth. It is not enforced in EOM mode.
- Return type:
TypeVar
(ChannelType
, bound= Channel)
- static apply_modulation(input_samples, mod_bandwidth)
Applies the modulation transfer fuction to the input samples.
Note
This is strictly the application of the modulation transfer function. The samples should be padded beforehand.
- Parameters:
input_samples (ArrayLike) – The samples to modulate.
mod_bandwidth (
float
) – The modulation bandwidth at -3dB (50% reduction), in MHz.
- Return type:
AbstractArray
- calc_modulation_buffer(input_samples, mod_samples, max_allowed_diff=0.01, eom=False)
Calculates the minimal buffers needed around a modulated waveform.
- Parameters:
input_samples (ArrayLike) – The input samples.
mod_samples (ArrayLike) – The modulated samples. Must be of size
len(input_samples) + 2 * self.rise_time
.max_allowed_diff (
float
, default:0.01
) – The maximum allowed difference between the input and modulated samples at the end points.eom (
bool
, default:False
) – Whether to calculate the modulation buffers with the EOM bandwidth.
- Return type:
tuple
[int
,int
]- Returns:
The minimum buffer times at the start and end of the samples, in ns.
- default_id()
Generates the default ID for indexing this channel in a Device.
- Return type:
str
- is_virtual()
Whether the channel is virtual (i.e. partially defined).
- Return type:
bool
- modulate(input_samples, keep_ends=False, eom=False)
Modulates the input according to the channel’s modulation bandwidth.
- Parameters:
input_samples (ArrayLike) – The samples to modulate.
keep_ends (
bool
, default:False
) – Assume the end values of the samples were kept constant (i.e. there is no ramp from zero on the ends).eom (
bool
, default:False
) – Whether to calculate the modulation using the EOM bandwidth.
- Return type:
AbstractArray
- Returns:
The modulated output signal.
- supports_eom()
Whether the channel supports EOM mode operation.
- Return type:
bool
- validate_duration(duration)
Validates and adapts the duration of an instruction on this channel.
- Parameters:
duration (
int
) – The duration to validate.- Return type:
int
- Returns:
The duration, potentially adapted to the channels specs.
- validate_pulse(pulse, detuning_map=DetuningMap_9bac4c689e17c53052ff99b9305bfdc6be69a86f17e60e68f62375e7b5ef871a)
Checks if a pulse can be executed via this DMM on a DetuningMap.
- Parameters:
pulse (
Pulse
) – The pulse to validate.detuning_map (
DetuningMap
, default:DetuningMap_9bac4c689e17c53052ff99b9305bfdc6be69a86f17e60e68f62375e7b5ef871a
) – The detuning map on which the pulse is applied (defaults to a detuning map with weight 1.0).
- Return type:
None
- property basis: Literal['ground-rydberg']
The addressed basis name.
- property eigenstates: list[Literal['u', 'd', 'r', 'g', 'h', 'x']]
The eigenstates associated with the basis.
Returns a tuple of labels, ranked in decreasing order of their associated eigenenergy, as such:
Name
Eigenstate (see Conventions)
Associated label
Up state
\(|0\rangle\)
"u"
Down state
\(|1\rangle\)
"d"
Rydberg state
\(|r\rangle\)
"r"
Ground state
\(|g\rangle\)
"g"
Hyperfine state
\(|h\rangle\)
"h"
Error state
\(|x\rangle\)
"x"
- property name: str
The name of the channel.
- property phase_jump_time: int
Time taken to change the phase between consecutive pulses (in ns).
Corresponds to two times the rise time when custom_phase_jump_time is not defined.
- property rise_time: int
The rise time (in ns).
Defined as the time taken to go from 10% to 90% output in response to a step change in the input.