Skip to content
Snippets Groups Projects
Commit 3fb4fa10 authored by Sander Snoo's avatar Sander Snoo
Browse files

Support Qblox Cluster

parent 2596ae34
No related branches found
No related tags found
No related merge requests found
import qcodes as qc
try:
from pulsar_qcm.pulsar_qcm import pulsar_qcm, pulsar_qcm_dummy
from pulsar_qrm.pulsar_qrm import pulsar_qrm, pulsar_qrm_dummy
_legacy_pulsar = True
except:
from qblox_instruments import Pulsar
_legacy_pulsar = False
from qblox_instruments import Pulsar
from qblox_instruments import Cluster, ClusterType
try:
from q1simulator import Q1Simulator
......@@ -16,69 +11,74 @@ except:
_q1simulator_found = False
if _legacy_pulsar:
def add_module(module_type, name, ip_addr):
try:
pulsar = station[name]
except:
if _use_simulator:
if not _q1simulator_found:
raise Exception('q1simulator not found')
pulsar = Q1Simulator(name, sim_type=module_type)
elif module_type == 'QRM':
if _use_dummy:
print(f'Starting QRM {name} dummy')
pulsar = pulsar_qrm_dummy(name)
else:
print(f'Connecting QRM {name} on {ip_addr}...')
pulsar = pulsar_qrm(name, ip_addr)
else:
if _use_dummy:
print(f'Starting QCM {name} dummy')
pulsar = pulsar_qcm_dummy(name)
else:
print(f'Connecting QCM {name} on {ip_addr}...')
pulsar = pulsar_qcm(name, ip_addr)
station.add_component(pulsar)
pulsar.reset()
return pulsar
else:
def add_module(module_type, name, ip_addr):
try:
pulsar = station[name]
except:
if _use_simulator:
if not _q1simulator_found:
raise Exception('q1simulator not found')
pulsar = Q1Simulator(name, sim_type=module_type)
elif _use_dummy:
print(f'Starting {module_type} {name} dummy')
pulsar = Pulsar(name, ip_addr, dummy_type='Pulsar '+module_type)
pulsar.is_dummy = True
else:
print(f'Connecting {module_type} {name} on {ip_addr}...')
pulsar = Pulsar(name, ip_addr)
def add_module(module_type, name, ip_addr):
try:
pulsar = station[name]
except:
if _use_simulator:
if not _q1simulator_found:
raise Exception('q1simulator not found')
pulsar = Q1Simulator(name, sim_type=module_type)
elif _use_dummy:
print(f'Starting {module_type} {name} dummy')
pulsar = Pulsar(name, ip_addr, dummy_type='Pulsar '+module_type)
pulsar.is_dummy = True
else:
print(f'Connecting {module_type} {name} on {ip_addr}...')
pulsar = Pulsar(name, ip_addr)
station.add_component(pulsar)
station.add_component(pulsar)
pulsar.reset()
return pulsar
pulsar.reset()
return pulsar
if not qc.Station.default:
station = qc.Station()
else:
station = qc.Station.default
_use_simulator = True
_use_dummy = True
_use_dummy = False
_use_cluster = False
qcm0 = add_module('QCM', 'qcm0', '192.168.0.2')
qrm1 = add_module('QRM', 'qrm1', '192.168.0.3')
if _use_cluster:
try:
cluster = station['Qblox_Cluster']
cluster.reset()
qcm0 = cluster.module8
qrm1 = cluster.module10
except:
dummy_cfg = None
if _use_dummy:
cfg = {
8:ClusterType.CLUSTER_QCM,
10:ClusterType.CLUSTER_QRM
}
cluster = Cluster('Qblox_Cluster', '192.168.0.2', dummy_cfg=cfg)
# set property is_dummy to use in Q1Pulse state checking
cluster.is_dummy = True
else:
cluster = Cluster('Qblox_Cluster', '192.168.0.2')
qcm0.reference_source('internal')
qrm1.reference_source('external')
station.add_component(cluster)
cluster.reset()
print(f'Cluster:')
print(cluster.get_system_state())
for module in cluster.modules:
if module.present():
rf = '-RF' if module.is_rf_type else ''
print(f' slot {module.slot_idx}: {module.module_type}{rf}')
qcm0 = cluster.module8
qrm1 = cluster.module10
station.add_component(qcm0)
station.add_component(qrm1)
else:
qcm0 = add_module('QCM', 'qcm0', '192.168.0.2')
qrm1 = add_module('QRM', 'qrm1', '192.168.0.3')
qcm0.reference_source('internal')
qrm1.reference_source('external')
import qcodes as qc
from pulsar_qcm.pulsar_qcm import pulsar_qcm, pulsar_qcm_dummy
from pulsar_qrm.pulsar_qrm import pulsar_qrm, pulsar_qrm_dummy
from qblox_instruments import Pulsar
from qblox_instruments import Cluster, ClusterType
try:
from q1simulator import Q1Simulator
......@@ -10,47 +10,83 @@ except:
print('package q1simulator not found')
_q1simulator_found = False
if not qc.Station.default:
station = qc.Station()
else:
station = qc.Station.default
_use_dummy = True
_use_simulator = True
def add_pulsar_module(module_type, name, ip_addr):
def add_module(module_type, name, ip_addr):
try:
pulsar = station[name]
except:
if _use_simulator:
if not _q1simulator_found:
raise Exception('q1simulator not found')
pulsar = Q1Simulator(name)
elif module_type == 'qrm':
if _use_dummy:
print(f'Starting QRM {name} dummy')
pulsar = pulsar_qrm_dummy(name)
else:
print(f'Connecting QRM {name} on {ip_addr}...')
pulsar = pulsar_qrm(name, ip_addr)
pulsar = Q1Simulator(name, sim_type=module_type)
elif _use_dummy:
print(f'Starting {module_type} {name} dummy')
pulsar = Pulsar(name, ip_addr, dummy_type='Pulsar '+module_type)
pulsar.is_dummy = True
else:
if _use_dummy:
print(f'Starting QCM {name} dummy')
pulsar = pulsar_qcm_dummy(name)
else:
print(f'Connecting QCM {name} on {ip_addr}...')
pulsar = pulsar_qcm(name, ip_addr)
print(f'Connecting {module_type} {name} on {ip_addr}...')
pulsar = Pulsar(name, ip_addr)
station.add_component(pulsar)
pulsar.reset()
return pulsar
qcm0 = add_pulsar_module('qcm', 'qcm0', '192.168.0.2')
qcm2 = add_pulsar_module('qcm', 'qcm2', '192.168.0.4')
qrm1 = add_pulsar_module('qrm', 'qrm1', '192.168.0.3')
if not qc.Station.default:
station = qc.Station()
else:
station = qc.Station.default
_use_simulator = True
_use_dummy = False
_use_cluster = False
if _use_cluster:
try:
cluster = station['Qblox_Cluster']
cluster.reset()
qcm0 = cluster.module8
qrm1 = cluster.module10
qcm2 = cluster.module6
except:
dummy_cfg = None
if _use_dummy:
cfg = {
6:ClusterType.CLUSTER_QCM,
8:ClusterType.CLUSTER_QCM,
10:ClusterType.CLUSTER_QRM
}
cluster = Cluster('Qblox_Cluster', '192.168.0.2', dummy_cfg=cfg)
# set property is_dummy to use in Q1Pulse state checking
cluster.is_dummy = True
else:
cluster = Cluster('Qblox_Cluster', '192.168.0.2')
station.add_component(cluster)
cluster.reset()
print(f'Cluster:')
print(cluster.get_system_state())
for module in cluster.modules:
if module.present():
rf = '-RF' if module.is_rf_type else ''
print(f' slot {module.slot_idx}: {module.module_type}{rf}')
qcm0 = cluster.module8
qrm1 = cluster.module10
qcm2 = cluster.module6
station.add_component(qcm0)
station.add_component(qrm1)
station.add_component(qcm2)
else:
qcm0 = add_module('QCM', 'qcm0', '192.168.0.2')
qrm1 = add_module('QRM', 'qrm1', '192.168.0.3')
qcm2 = add_module('QCM', 'qcm2', '192.168.0.4')
qcm0.reference_source('internal')
qrm1.reference_source('external')
qcm2.reference_source('external')
qcm0.reference_source('internal')
qcm2.reference_source('external')
qrm1.reference_source('external')
import numpy as np
from dataclasses import dataclass
from qcodes.instrument.base import Instrument
class MockM3102A(Instrument):
def __init__(self, name, chassis, slot):
super().__init__(name)
self.chassis = chassis
self.slot = slot
self.measure = ChannelData()
def chassis_number(self):
return self._chassis_numnber
def slot_number(self):
return self._slot_number
def set_operation_mode(self, value):
pass
def set_active_channels(self, channel_list):
self.measure._active_channels = channel_list
@property
def active_channels(self):
return self.measure._active_channels
def get_samples_per_measurement(self, t_measure, sample_rate):
if sample_rate is None:
return 1
if sample_rate > 100e6:
return int(t_measure*1e-9*sample_rate)
downsampling_factor = int(max(1, round(100e6 / sample_rate)))
t_downsampling = downsampling_factor * 10
return max(1, round(t_measure/t_downsampling))
def set_daq_settings(self, channel, n_cycles, t_measure, downsampled_rate=None):
self.measure._active_channels.add(channel)
properties = self.measure._ch_properties[channel]
properties.n_cycles = n_cycles
properties.t_measure = t_measure
properties.samples_per_cycle = self.get_samples_per_measurement(t_measure, downsampled_rate)
def set_data(self, channel, data):
self.measure._data[channel] = data
@dataclass
class ChannelProperties:
n_cycles: int = 1
t_measure: int = 10
samples_per_cycle: int = 1
class ChannelData:
def __init__(self):
self._active_channels = set([1,2,3,4])
self._data = {i:[] for i in self._active_channels}
self._ch_properties = {i:ChannelProperties() for i in self._active_channels}
def get_data(self):
result = []
for i in sorted(self._active_channels):
properties = self._ch_properties[i]
n_samples = properties.n_cycles * properties.samples_per_cycle
data = self._data[i]
if data is None:
data = np.arange(n_samples)
else:
if len(data) != n_samples:
raise Exception("Length of provided data doesn't match. "
f"Expected {n_samples}, got {len(data)}")
result.append(data)
return result
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment