Base Types
The OAQ specification is structured around a set of abstract base classes that define the major categories of objects in the abstract syntax graph (ASG). Every concrete type in the specification inherits from one of these bases.
Understanding the Base Types is the quickest way to orient yourself within the specification — they describe what kind of thing an object is before any details about its fields.
Instruction
An Instruction is an executable step that can appear in a Block. All drive operations, acquisition operations, timing dependencies, and loop constructs are Instruction subtypes.
Concrete subtypes:
| Type | Description |
|---|---|
| UnmodulatedPulse | Plays a waveform on a port |
| ModulatedPulse | Plays a modulated waveform on a frame |
| Delay | Inserts an explicit time delay |
| DcBias | Sets a static DC offset on a port |
| SetFramePhase | Sets the absolute phase of a frame |
| ShiftFramePhase | Adds a phase offset to a frame |
| DetuneFrame | Updates a frame's frequency within a scoped block |
| FilterOutput | Applies IIR/FIR output filters within a scoped block |
| BlockConditional | Conditionally branches a program of instructions |
| AdcAcquisition | Acquires a voltage time-trace via ADC |
| NumericAppend | Appends a numeric value to a register |
| ComplexAppend | Appends a complex value to a register |
| BooleanAppend | Appends a boolean value to a register |
| ComplexRangeAssign | Assigns a complex range to a register |
| Dependency | Specifies a timing dependency between two blocks |
| ForEachNumeric | Iterates a block over a numeric range |
Waveform
A Waveform defines a pulse envelope shape. Waveforms are referenced by pulse instructions (UnmodulatedPulse, ModulatedPulse) and by modifier wrappers (DragWaveform, PlateauWaveform).
Concrete subtypes:
| Type | Description |
|---|---|
| BlackmanWaveform | Blackman pulse shape |
| ConstantWaveform | Constant amplitude held for a duration |
| CosineWaveform | Single period of an inverted, offset cosine |
| GaussianWaveform | Truncated Gaussian pulse |
| SampledNumericWaveform | Explicitly sampled real-valued waveform |
| SampledComplexWaveform | Explicitly sampled complex-valued waveform |
| SuddenNetZeroWaveform | Sudden net-zero (SNZ) gate pulse |
| DragWaveform | DRAG correction modifier applied to a base waveform |
| PlateauWaveform | Central plateau modifier applied to a base waveform |
NumericExpression
A NumericExpression is a scalar real-valued expression. Numeric expressions appear as field values wherever a real number is expected (e.g. amplitudes, frequencies, loop indices).
Concrete subtypes:
| Type | Description |
|---|---|
| NumericLiteral | A literal real number |
| NumericConditional | Conditional numeric expression |
| BinaryNumericOperation | Binary arithmetic on two numeric expressions |
| NumericRangeElement | Index into a numeric range to produce a scalar |
| ComplexRealValue | Real part of a complex expression |
| ComplexImaginaryValue | Imaginary part of a complex expression |
| NumericParameter | A function parameter within a NumericToBlockFunction |
ComplexExpression
A ComplexExpression is a scalar complex-valued expression.
Concrete subtypes:
| Type | Description |
|---|---|
| BinaryComplexOperation | Binary arithmetic on two complex expressions |
| ComplexConditional | Conditional complex expression |
| ComplexDotProduct | Dot product between two complex ranges |
| ComplexRangeElement | Index into a complex range to produce a scalar |
BooleanExpression
A BooleanExpression is a scalar boolean-valued expression. Boolean expressions are used as guards in conditional instructions and conditional expressions.
Concrete subtypes:
| Type | Description |
|---|---|
| ComparisonOperation | Comparison between two numeric expressions |
| BooleanConditional | Conditional boolean expression |
| BooleanRangeElement | Index into a boolean range to produce a scalar |
NumericRangeExpression
A NumericRangeExpression is an array of numeric values. Range expressions are used as loop sources, output registers, and post-processing inputs.
Concrete subtypes:
| Type | Description |
|---|---|
| LiteralNumericRange | An inline array of literal numeric values |
| NumericRangeRegister | A named output register for numeric results |
| SteppedRange | A linearly stepped range (start, step, end) |
| NumericAverageOver | Averaging aggregation over a numeric range |
| ForEachNumeric | The source range for a ForEachNumeric loop |
ComplexRangeExpression
A ComplexRangeExpression is an array of complex values. Used for acquisition results, demodulation, and output registers.
Concrete subtypes:
| Type | Description |
|---|---|
| LiteralComplexRange | An inline array of literal complex values |
| ComplexRangeRegister | A named output register for complex results |
| AcquisitionComplexRangeResult | Holds the raw result of an ADC acquisition |
| ComplexAverageOver | Averaging aggregation over a complex range |
| Demodulation | Demodulated signal from an ADC trace |
BooleanRangeExpression
A BooleanRangeExpression is an array of boolean values.
Concrete subtypes:
| Type | Description |
|---|---|
| BooleanRangeRegister | A named output register for boolean results |