|
|
|
@ -6,9 +6,11 @@ import os
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class RPSCPI:
|
|
|
|
|
def __init__(self, rp_name, rp_host):
|
|
|
|
|
def __init__(self, rp_name, rp_host, ch1_gain, ch2_gain):
|
|
|
|
|
self.name = rp_name
|
|
|
|
|
self.host = rp_host
|
|
|
|
|
self.ch1_gain = ch1_gain
|
|
|
|
|
self.ch2_gain = ch2_gain
|
|
|
|
|
|
|
|
|
|
def connect(self):
|
|
|
|
|
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
|
|
@ -27,6 +29,8 @@ class RPSCPI:
|
|
|
|
|
|
|
|
|
|
def trigger_prep(self):
|
|
|
|
|
self.sendmsg("ACQ:RST")
|
|
|
|
|
self.sendmsg("ACQ:SOUR1:GAIN {}".format(self.ch1_gain.upper()))
|
|
|
|
|
self.sendmsg("ACQ:SOUR2:GAIN {}".format(self.ch2_gain.upper()))
|
|
|
|
|
self.sendmsg("ACQ:START")
|
|
|
|
|
|
|
|
|
|
async def trigger(self):
|
|
|
|
@ -55,17 +59,30 @@ async def gather_trigger(rp_list):
|
|
|
|
|
def main():
|
|
|
|
|
parser = argparse.ArgumentParser(description="Data collection tool for Sayma DAC/TTL at RedPitaya")
|
|
|
|
|
parser.add_argument("dir", help="output directory", type=str)
|
|
|
|
|
parser.add_argument("rps", help="name(s) of the target RedPitayas where data is collected "
|
|
|
|
|
"simultaneously; any of: " + " ".join(list(RP_IP_ADDRS.keys())),
|
|
|
|
|
parser.add_argument("rps_gains", metavar="RP_NAME:CH1_GAIN,CH2_GAIN",
|
|
|
|
|
help="choose LV (+-1V) gain or HV (+-20V) gain on each channel for RP named <RP_NAME>; "
|
|
|
|
|
"e.g. mlabs:LV,HV means LV for IN1 and HV for IN2 on RP mlabs;\n"
|
|
|
|
|
"<RP_NAME> must be one of: " + " ".join(list(RP_IP_ADDRS.keys())),
|
|
|
|
|
type=str, nargs='+')
|
|
|
|
|
parser.add_argument("--txt", help="save data as additional human-readable text files",
|
|
|
|
|
action="store_true")
|
|
|
|
|
args = parser.parse_args()
|
|
|
|
|
|
|
|
|
|
gains = dict()
|
|
|
|
|
try:
|
|
|
|
|
for gain in args.rps_gains:
|
|
|
|
|
rp_name, ch1ch2_gains = gain.split(':')
|
|
|
|
|
ch1_gain, ch2_gain = ch1ch2_gains.split(',')
|
|
|
|
|
gains[rp_name] = ch1_gain, ch2_gain
|
|
|
|
|
if rp_name == "" or ch1_gain == "" or ch2_gain == "":
|
|
|
|
|
raise SyntaxError("Must specify IN1 and IN2 gains for each target RP.")
|
|
|
|
|
except ValueError:
|
|
|
|
|
raise SyntaxError("Must specify input gains in the format of: <RP_NAME>:<CH1_GAIN>,<CH2_GAIN>")
|
|
|
|
|
|
|
|
|
|
# Connect a socket to each RP
|
|
|
|
|
rps = []
|
|
|
|
|
for rp_name in args.rps:
|
|
|
|
|
rp = RPSCPI(rp_name, RP_IP_ADDRS[rp_name])
|
|
|
|
|
for rp_name in gains:
|
|
|
|
|
rp = RPSCPI(rp_name, RP_IP_ADDRS[rp_name], *gains[rp_name])
|
|
|
|
|
rp.connect()
|
|
|
|
|
rps.append(rp)
|
|
|
|
|
|
|
|
|
|