atomiq.components.lock

Classes

Lock

This is a very generic class to describe a laser lock. It is characterized by some means

DetunableLock

This is a very generic class to describe a laser lock where the lock offset can be

SpectroscopyLock

This is a very generic class to describe a laser lock. It is characterized by some means

SidebandLock

Lock on a sideband modulated onto the laser

OFCLock

Lock on an optical frequency comb

OffsetLock

Lock on a reference laser via beating signal

WavelengthMeterLock

Lock a laser to an absolute frequency using a wavelength meter

Module Contents

class atomiq.components.lock.Lock(reference_frequency, lock_offset=0.0, harmonic=np.int32(1), *args, **kwargs)[source]

Bases: atomiq.components.primitives.Component

This is a very generic class to describe a laser lock. It is characterized by some means of a reference frequency and an offset to that frequency at which the lock tries to stabilize.

Most likely you want to use a more specific class inherited from this one.

All frequencies of this class refer to the fundamental of the laser, i.e. the frequency the lock acts on. get_frequency() returns the frequency of the light exiting the laser, i.e. the fundamental frequency multiplied by the harmonic.

Parameters:
  • reference_frequency (float) -- The frequency in Hz that the lock references to (at the laser fundamental)

  • lock_offset (float) -- The frequency offset in Hz at which the lock stabilizes (at the laser fundamental)

  • harmonic (numpy.int32) -- Use this option if the laser is frequency converted but locked to the fundamental. Use 1 for no conversion, 2 for SHG, 4 for FHG ,... (default 1)

kernel_invariants
_lock_offset = 0.0
reference_frequency
harmonic
get_frequency()[source]

Get the absolute frequency of the light exiting the laser in Hz (fundamental frequency x harmonic)

Return type:

float

experiment
identifier
debug_output = False
core
_kernel_invariants
_prepare_done = False
_build_done = False
_hooks_done = []
children = []
__in_build = True
class atomiq.components.lock.DetunableLock(settle_time=0, blind=False, *args, **kwargs)[source]

Bases: Lock, atomiq.components.primitives.Parametrizable

This is a very generic class to describe a laser lock where the lock offset can be changed. It is characterized by some means of a reference frequency and a detunable offset to that frequency at which the lock tries to stabilize.

Most likely you want to use a more specific class inherited from this one.

Parameters:
  • settle_time (float) -- Time in s the lock needs to settle after a detuning of the lock point

  • blind (bool) -- Whether the lock is set to its default values during each prerun phase. If True, the lock is unchanged in the prerun phase. Defaults to False.

kernel_invariants
_shape_changing_arguments = ('blind',)

Names of the constructor arguments whose value (not only their type) changes the shape of the component, i.e. change the types and signatures of class members. The component factory gives objects of the same shape a shared class (and thus a shared compiler specialization). Arguments listed here are compared by value. Definitions along the inheritance hierarchy are merged.

settle_time = 0
_prerun()[source]

Specify here what should be done for this component before the run starts. In contrast to the _build() method, the _prerun() routine is executed on the core device before the actual experiment starts.

abstractmethod _set_lock_frequency(detuning)[source]

Set the lock frequency from a detuning at the laser fundamental (implement in a subclass)

Parameters:

detuning (float)

abstractmethod _ramp_lock_frequency(duration, detuning_start=float('nan'), detuning_end=float('nan'))[source]

Ramp the lock frequency from detunings at the laser fundamental (implement in a subclass)

Parameters:
  • duration (float)

  • detuning_start (float)

  • detuning_end (float)

set_frequency(frequency)[source]

Set the absolute frequency of the light exiting the laser

Parameters:

frequency (float) -- The absolute frequency in Hz of the light exiting the laser

set_detuning(offset_frequency)[source]

Set the frequency of the laser fundamental relative to the reference frequency, i.e. set the lock offset.

Parameters:

offset_frequency (float) -- new lock offset in Hz (at the laser fundamental)

ramp_detuning(duration, offset_frequency_start=float('nan'), offset_frequency_end=float('nan'), ramp_timestep=float('nan'), ramp_steps=np.int32(-1))[source]

Ramp the lock offset, i.e. the detuning of the laser fundamental from the reference frequency

Parameters:
  • duration (float) -- Ramp duration in s

  • offset_frequency_start (float) -- Initial lock offset in Hz (at the laser fundamental)

  • offset_frequency_end (float) -- Final lock offset in Hz (at the laser fundamental)

  • ramp_timestep (float) -- Time in s between two ramp steps

  • ramp_steps (numpy.int32) -- Number of ramp steps (default -1, i.e. derive from the timestep)

ramp_frequency(duration, frequency_start=float('nan'), frequency_end=float('nan'), ramp_timestep=float('nan'), ramp_steps=np.int32(-1))[source]

Ramp the absolute frequency of the light exiting the laser

Parameters:
  • duration (float) -- Ramp duration in s

  • frequency_start (float) -- Initial absolute frequency in Hz of the light exiting the laser

  • frequency_end (float) -- Final absolute frequency in Hz of the light exiting the laser

  • ramp_timestep (float) -- Time in s between two ramp steps

  • ramp_steps (numpy.int32) -- Number of ramp steps (default -1, i.e. derive from the timestep)

_lock_offset = 0.0
reference_frequency
harmonic
get_frequency()

Get the absolute frequency of the light exiting the laser in Hz (fundamental frequency x harmonic)

Return type:

float

experiment
identifier
debug_output = False
core
_kernel_invariants
_prepare_done = False
_build_done = False
_hooks_done = []
children = []
__in_build = True
set_parameter(value, channel=None)
Parameters:
  • value (float)

  • channel (str)

class atomiq.components.lock.SpectroscopyLock(reference_frequency, lock_offset=0.0, harmonic=np.int32(1), *args, **kwargs)[source]

Bases: Lock

This is a very generic class to describe a laser lock. It is characterized by some means of a reference frequency and an offset to that frequency at which the lock tries to stabilize.

Most likely you want to use a more specific class inherited from this one.

All frequencies of this class refer to the fundamental of the laser, i.e. the frequency the lock acts on. get_frequency() returns the frequency of the light exiting the laser, i.e. the fundamental frequency multiplied by the harmonic.

Parameters:
  • reference_frequency (float) -- The frequency in Hz that the lock references to (at the laser fundamental)

  • lock_offset (float) -- The frequency offset in Hz at which the lock stabilizes (at the laser fundamental)

  • harmonic (numpy.int32) -- Use this option if the laser is frequency converted but locked to the fundamental. Use 1 for no conversion, 2 for SHG, 4 for FHG ,... (default 1)

kernel_invariants
_lock_offset = 0.0
reference_frequency
harmonic
get_frequency()

Get the absolute frequency of the light exiting the laser in Hz (fundamental frequency x harmonic)

Return type:

float

experiment
identifier
debug_output = False
core
_kernel_invariants
_prepare_done = False
_build_done = False
_hooks_done = []
children = []
__in_build = True
class atomiq.components.lock.SidebandLock(rf_source, sideband_order=np.int32(1), *args, **kwargs)[source]

Bases: DetunableLock

Lock on a sideband modulated onto the laser

This kind of lock is frequently used when locking on tunable sideband to the transmission signal of a stable cavity. The offset frequency for the sideband is generated by an RF source and can be changed at runtime. Thus the lock point can be detuned.

Parameters:
  • rf_source (RFSource) -- RF source that determines the sideband frequency.

  • sideband_order (numpy.int32) -- Order of the sideband the laser is locked to [.., -2, -1, 1, 2, ...] (default 1)

kernel_invariants
rf_source
sideband_order
_set_lock_frequency(frequency)[source]

Set the RF source frequency (fundamental detuning / sideband_order)

Parameters:

frequency (float)

_ramp_lock_frequency(duration, frequency_start=float('nan'), frequency_end=float('nan'), ramp_timestep=float('nan'), ramp_steps=np.int32(-1))[source]

Ramp the RF source frequency (fundamental detunings / sideband_order)

Parameters:
  • duration (float)

  • frequency_start (float)

  • frequency_end (float)

  • ramp_timestep (float)

  • ramp_steps (numpy.int32)

_shape_changing_arguments = ('blind',)

Names of the constructor arguments whose value (not only their type) changes the shape of the component, i.e. change the types and signatures of class members. The component factory gives objects of the same shape a shared class (and thus a shared compiler specialization). Arguments listed here are compared by value. Definitions along the inheritance hierarchy are merged.

settle_time = 0
_prerun()

Specify here what should be done for this component before the run starts. In contrast to the _build() method, the _prerun() routine is executed on the core device before the actual experiment starts.

set_frequency(frequency)

Set the absolute frequency of the light exiting the laser

Parameters:

frequency (float) -- The absolute frequency in Hz of the light exiting the laser

set_detuning(offset_frequency)

Set the frequency of the laser fundamental relative to the reference frequency, i.e. set the lock offset.

Parameters:

offset_frequency (float) -- new lock offset in Hz (at the laser fundamental)

ramp_detuning(duration, offset_frequency_start=float('nan'), offset_frequency_end=float('nan'), ramp_timestep=float('nan'), ramp_steps=np.int32(-1))

Ramp the lock offset, i.e. the detuning of the laser fundamental from the reference frequency

Parameters:
  • duration (float) -- Ramp duration in s

  • offset_frequency_start (float) -- Initial lock offset in Hz (at the laser fundamental)

  • offset_frequency_end (float) -- Final lock offset in Hz (at the laser fundamental)

  • ramp_timestep (float) -- Time in s between two ramp steps

  • ramp_steps (numpy.int32) -- Number of ramp steps (default -1, i.e. derive from the timestep)

ramp_frequency(duration, frequency_start=float('nan'), frequency_end=float('nan'), ramp_timestep=float('nan'), ramp_steps=np.int32(-1))

Ramp the absolute frequency of the light exiting the laser

Parameters:
  • duration (float) -- Ramp duration in s

  • frequency_start (float) -- Initial absolute frequency in Hz of the light exiting the laser

  • frequency_end (float) -- Final absolute frequency in Hz of the light exiting the laser

  • ramp_timestep (float) -- Time in s between two ramp steps

  • ramp_steps (numpy.int32) -- Number of ramp steps (default -1, i.e. derive from the timestep)

_lock_offset = 0.0
reference_frequency
harmonic
get_frequency()

Get the absolute frequency of the light exiting the laser in Hz (fundamental frequency x harmonic)

Return type:

float

experiment
identifier
debug_output = False
core
_kernel_invariants
_prepare_done = False
_build_done = False
_hooks_done = []
children = []
__in_build = True
set_parameter(value, channel=None)
Parameters:
  • value (float)

  • channel (str)

class atomiq.components.lock.OFCLock(rf_source, lock_direction=np.int32(1), tooth_number=np.int32(-1), rep_rate=float('nan'), ceo=float('nan'), *args, **kwargs)[source]

Bases: DetunableLock

Lock on an optical frequency comb

This is used to lock the laser on a beat note with an optical frequency comb. It is characterized by the frequency of the closest comb tooth and the offset frequency. The offset frequency is generated by an RF source and can be changed at runtime. Thus the lock point can be detuned.

Parameters:
  • rfsource -- RF source that generates the reference beat frequency (i.e. the offset frequency) to which the laser beat note is stabilized.

  • reference_frequency -- The frequency in Hz of the comb tooth. Instead ceo, rep_rate and tooth_number) can be passed to automatically calculate the reference frequency. reference_frequency is ignored in this case.

  • lock_offset -- The default frequency offset to the comb tooth in Hz at which the lock stabilizes

  • settle_time -- Time in s the lock needs to settle after a detuning of the lock point

  • lock_direction (numpy.int32) -- Whether the laser is locked to the positive (+1) or negative (-1) beat note (default 1)

  • tooth_number (numpy.int32) -- Number of the comb tooth, the laser is beaten with (default -1)

  • rep_rate (float) -- Repetition frequency of the comb in Hz (default nan)

  • ceo (float) -- Ceo frequency of the comb in Hz (default nan)

  • rf_source (RFSource)

kernel_invariants
rf_source
lock_direction
_set_lock_frequency(frequency)[source]

Set the RF source frequency (fundamental detuning / lock_direction)

Parameters:

frequency (float)

_ramp_lock_frequency(duration, frequency_start=float('nan'), frequency_end=float('nan'), ramp_timestep=float('nan'), ramp_steps=np.int32(-1))[source]

Ramp the RF source frequency (fundamental detunings / lock_direction)

Parameters:
  • duration (float)

  • frequency_start (float)

  • frequency_end (float)

  • ramp_timestep (float)

  • ramp_steps (numpy.int32)

_shape_changing_arguments = ('blind',)

Names of the constructor arguments whose value (not only their type) changes the shape of the component, i.e. change the types and signatures of class members. The component factory gives objects of the same shape a shared class (and thus a shared compiler specialization). Arguments listed here are compared by value. Definitions along the inheritance hierarchy are merged.

settle_time = 0
_prerun()

Specify here what should be done for this component before the run starts. In contrast to the _build() method, the _prerun() routine is executed on the core device before the actual experiment starts.

set_frequency(frequency)

Set the absolute frequency of the light exiting the laser

Parameters:

frequency (float) -- The absolute frequency in Hz of the light exiting the laser

set_detuning(offset_frequency)

Set the frequency of the laser fundamental relative to the reference frequency, i.e. set the lock offset.

Parameters:

offset_frequency (float) -- new lock offset in Hz (at the laser fundamental)

ramp_detuning(duration, offset_frequency_start=float('nan'), offset_frequency_end=float('nan'), ramp_timestep=float('nan'), ramp_steps=np.int32(-1))

Ramp the lock offset, i.e. the detuning of the laser fundamental from the reference frequency

Parameters:
  • duration (float) -- Ramp duration in s

  • offset_frequency_start (float) -- Initial lock offset in Hz (at the laser fundamental)

  • offset_frequency_end (float) -- Final lock offset in Hz (at the laser fundamental)

  • ramp_timestep (float) -- Time in s between two ramp steps

  • ramp_steps (numpy.int32) -- Number of ramp steps (default -1, i.e. derive from the timestep)

ramp_frequency(duration, frequency_start=float('nan'), frequency_end=float('nan'), ramp_timestep=float('nan'), ramp_steps=np.int32(-1))

Ramp the absolute frequency of the light exiting the laser

Parameters:
  • duration (float) -- Ramp duration in s

  • frequency_start (float) -- Initial absolute frequency in Hz of the light exiting the laser

  • frequency_end (float) -- Final absolute frequency in Hz of the light exiting the laser

  • ramp_timestep (float) -- Time in s between two ramp steps

  • ramp_steps (numpy.int32) -- Number of ramp steps (default -1, i.e. derive from the timestep)

_lock_offset = 0.0
reference_frequency
harmonic
get_frequency()

Get the absolute frequency of the light exiting the laser in Hz (fundamental frequency x harmonic)

Return type:

float

experiment
identifier
debug_output = False
core
_kernel_invariants
_prepare_done = False
_build_done = False
_hooks_done = []
children = []
__in_build = True
set_parameter(value, channel=None)
Parameters:
  • value (float)

  • channel (str)

class atomiq.components.lock.OffsetLock(reference_laser, *args, **kwargs)[source]

Bases: SidebandLock

Lock on a reference laser via beating signal

Parameters:

reference_laser -- laser that is used to generate the beat note. It's frequency serves as the reference frequency for this lock

kernel_invariants
reference_laser
get_frequency()[source]

Get the absolute frequency of the light exiting the laser in Hz, based on the current frequency of the reference laser

Return type:

float

set_frequency(frequency)[source]

Set the absolute frequency of the light exiting the laser, relative to the current frequency of the reference laser

Parameters:

frequency (float) -- The absolute frequency in Hz of the light exiting the laser

ramp_frequency(duration, frequency_start=float('nan'), frequency_end=float('nan'), ramp_timestep=float('nan'), ramp_steps=-1)[source]

Ramp the absolute frequency of the light exiting the laser, relative to the current frequency of the reference laser

Parameters:
  • duration (float) -- Ramp duration in s

  • frequency_start (float) -- Initial absolute frequency in Hz of the light exiting the laser

  • frequency_end (float) -- Final absolute frequency in Hz of the light exiting the laser

  • ramp_timestep (float) -- Time in s between two ramp steps

  • ramp_steps (numpy.int32) -- Number of ramp steps (default -1, i.e. derive from the timestep)

rf_source
sideband_order
_set_lock_frequency(frequency)

Set the RF source frequency (fundamental detuning / sideband_order)

Parameters:

frequency (float)

_ramp_lock_frequency(duration, frequency_start=float('nan'), frequency_end=float('nan'), ramp_timestep=float('nan'), ramp_steps=np.int32(-1))

Ramp the RF source frequency (fundamental detunings / sideband_order)

Parameters:
  • duration (float)

  • frequency_start (float)

  • frequency_end (float)

  • ramp_timestep (float)

  • ramp_steps (numpy.int32)

_shape_changing_arguments = ('blind',)

Names of the constructor arguments whose value (not only their type) changes the shape of the component, i.e. change the types and signatures of class members. The component factory gives objects of the same shape a shared class (and thus a shared compiler specialization). Arguments listed here are compared by value. Definitions along the inheritance hierarchy are merged.

settle_time = 0
_prerun()

Specify here what should be done for this component before the run starts. In contrast to the _build() method, the _prerun() routine is executed on the core device before the actual experiment starts.

set_detuning(offset_frequency)

Set the frequency of the laser fundamental relative to the reference frequency, i.e. set the lock offset.

Parameters:

offset_frequency (float) -- new lock offset in Hz (at the laser fundamental)

ramp_detuning(duration, offset_frequency_start=float('nan'), offset_frequency_end=float('nan'), ramp_timestep=float('nan'), ramp_steps=np.int32(-1))

Ramp the lock offset, i.e. the detuning of the laser fundamental from the reference frequency

Parameters:
  • duration (float) -- Ramp duration in s

  • offset_frequency_start (float) -- Initial lock offset in Hz (at the laser fundamental)

  • offset_frequency_end (float) -- Final lock offset in Hz (at the laser fundamental)

  • ramp_timestep (float) -- Time in s between two ramp steps

  • ramp_steps (numpy.int32) -- Number of ramp steps (default -1, i.e. derive from the timestep)

_lock_offset = 0.0
reference_frequency
harmonic
experiment
identifier
debug_output = False
core
_kernel_invariants
_prepare_done = False
_build_done = False
_hooks_done = []
children = []
__in_build = True
set_parameter(value, channel=None)
Parameters:
  • value (float)

  • channel (str)

class atomiq.components.lock.WavelengthMeterLock(wavemeter, *args, **kwargs)[source]

Bases: DetunableLock

Lock a laser to an absolute frequency using a wavelength meter

This lock uses a StabilizingWavelengthMeterChannel to measure and stabilize the laser frequency.

Parameters:
  • wavemeter (StabilizingWavelengthMeterChannel) -- The stabilizing wavelength meter channel used to measure and control the laser frequency.

  • reference_frequency -- The absolute frequency in Hz at which the laser should be locked.

  • lock_offset -- The default frequency offset in Hz from the reference frequency (default 0).

  • harmonic -- Use this option if the laser is frequency converted but locked to the fundamental. Use 1 for no conversion, 2 for SHG, 4 for FHG, ... (default 1).

  • settle_time -- Time in s the lock needs to settle after a detuning of the lock point.

kernel_invariants
wavemeter
_set_lock_frequency(frequency)[source]

Set the lock frequency from a detuning at the laser fundamental (implement in a subclass)

Parameters:

frequency (float)

abstractmethod _ramp_lock_frequency(duration, frequency_start=float('nan'), frequency_end=float('nan'), ramp_timestep=float('nan'), ramp_steps=-1)[source]

Ramp the lock frequency from detunings at the laser fundamental (implement in a subclass)

Parameters:
  • duration (float)

  • frequency_start (float)

  • frequency_end (float)

  • ramp_timestep (float)

  • ramp_steps (numpy.int32)

_shape_changing_arguments = ('blind',)

Names of the constructor arguments whose value (not only their type) changes the shape of the component, i.e. change the types and signatures of class members. The component factory gives objects of the same shape a shared class (and thus a shared compiler specialization). Arguments listed here are compared by value. Definitions along the inheritance hierarchy are merged.

settle_time = 0
_prerun()

Specify here what should be done for this component before the run starts. In contrast to the _build() method, the _prerun() routine is executed on the core device before the actual experiment starts.

set_frequency(frequency)

Set the absolute frequency of the light exiting the laser

Parameters:

frequency (float) -- The absolute frequency in Hz of the light exiting the laser

set_detuning(offset_frequency)

Set the frequency of the laser fundamental relative to the reference frequency, i.e. set the lock offset.

Parameters:

offset_frequency (float) -- new lock offset in Hz (at the laser fundamental)

ramp_detuning(duration, offset_frequency_start=float('nan'), offset_frequency_end=float('nan'), ramp_timestep=float('nan'), ramp_steps=np.int32(-1))

Ramp the lock offset, i.e. the detuning of the laser fundamental from the reference frequency

Parameters:
  • duration (float) -- Ramp duration in s

  • offset_frequency_start (float) -- Initial lock offset in Hz (at the laser fundamental)

  • offset_frequency_end (float) -- Final lock offset in Hz (at the laser fundamental)

  • ramp_timestep (float) -- Time in s between two ramp steps

  • ramp_steps (numpy.int32) -- Number of ramp steps (default -1, i.e. derive from the timestep)

ramp_frequency(duration, frequency_start=float('nan'), frequency_end=float('nan'), ramp_timestep=float('nan'), ramp_steps=np.int32(-1))

Ramp the absolute frequency of the light exiting the laser

Parameters:
  • duration (float) -- Ramp duration in s

  • frequency_start (float) -- Initial absolute frequency in Hz of the light exiting the laser

  • frequency_end (float) -- Final absolute frequency in Hz of the light exiting the laser

  • ramp_timestep (float) -- Time in s between two ramp steps

  • ramp_steps (numpy.int32) -- Number of ramp steps (default -1, i.e. derive from the timestep)

_lock_offset = 0.0
reference_frequency
harmonic
get_frequency()

Get the absolute frequency of the light exiting the laser in Hz (fundamental frequency x harmonic)

Return type:

float

experiment
identifier
debug_output = False
core
_kernel_invariants
_prepare_done = False
_build_done = False
_hooks_done = []
children = []
__in_build = True
set_parameter(value, channel=None)
Parameters:
  • value (float)

  • channel (str)