def send_pulse(self, inp_file): ''' Sends the pulse sequence to the server ''' # write a 3 to signal that the button has been pushed gsocket.write(struct.pack('<I', 3 << 28)) ass = Assembler() btye_array = ass.assemble(inp_file) print("Byte array = {}".format(btye_array)) print("Length of byte array = {}".format(len(btye_array))) gsocket.write(btye_array) print("Sent byte array")
def start(self): gsocket.write(struct.pack('<I', 3)) self.load_shim() self.startButton.setEnabled(False) self.stopButton.setEnabled(True) self.seqType.setEnabled(True) self.uploadSeqButton.setEnabled(True) self.seqButton.setEnabled(True) gsocket.readyRead.connect(self.read_data) self.idle = False
def stop(self): self.idle = True gsocket.write(struct.pack('<I', 0)) self.startButton.setEnabled(True) self.stopButton.setEnabled(False) self.acquireButton.setEnabled(False) self.loadShimButton.setEnabled(False) self.zeroShimButton.setEnabled(False) # Disconnect global socket # if (gsocket.readyRead.isSignalConnected()): gsocket.readyRead.disconnect()
def set_seq(self): if not self.seq_set: self.seqType_idx = self.seqType.currentIndex() if self.seqType_idx == 3 and self.uploadSeq.text() == 'none': QMessageBox.warning(self, 'Warning', 'No sequence has been uploaded!', QMessageBox.Cancel) return self.seq_set = 1 self.seqButton.setText('change sequence') self.seqType.setEnabled(False) self.uploadSeqButton.setEnabled(False) self.horizontalSlider_x.setEnabled(True) self.horizontalSlider_y.setEnabled(True) self.horizontalSlider_z.setEnabled(True) self.gradOffset_x.setEnabled(True) self.gradOffset_y.setEnabled(True) self.gradOffset_z.setEnabled(True) self.acquireButton.setEnabled(True) self.saveShimButton.setEnabled(True) self.loadShimButton.setEnabled(True) self.zeroShimButton.setEnabled(True) # write a 3 to signal gsocket.write(struct.pack('<I', 3 << 28 | self.seqType_idx)) if self.seqType_idx == 0: self.set_pulse('sequence/sig/fid_sig.txt') elif self.seqType_idx == 1: if self.para_TE.value() == 10: self.set_pulse('sequence/sig/se_sig.txt') else: self.generate_se_seq() self.set_pulse('sequence/sig/se_sig_te.txt') elif self.seqType_idx == 2: self.set_pulse('sequence/sig/gre_sig.txt') elif self.seqType_idx == 3: self.send_pulse() else: self.seq_set = 0 self.seqButton.setText('confirm sequence') self.seqType.setEnabled(True) self.uploadSeqButton.setEnabled(True) self.horizontalSlider_x.setEnabled(False) self.horizontalSlider_y.setEnabled(False) self.horizontalSlider_z.setEnabled(False) self.gradOffset_x.setEnabled(False) self.gradOffset_y.setEnabled(False) self.gradOffset_z.setEnabled(False) self.acquireButton.setEnabled(False) self.saveShimButton.setEnabled(False) self.loadShimButton.setEnabled(False) self.zeroShimButton.setEnabled(False)
def stop(self): self.idle = True gsocket.write(struct.pack('<I', 0)) self.startButton.setEnabled(True) self.stopButton.setEnabled(False) self.projAxisValue.setEnabled(False) self.acquireButton.setEnabled(False) self.acquireAllButton.setEnabled(False) self.loadShimButton.setEnabled(False) self.zeroShimButton.setEnabled(False) # Disconnect global socket gsocket.readyRead.disconnect()
def start(self): self.buffers_received = 0 gsocket.write(struct.pack('<I', 6)) self.load_shim() self.startButton.setEnabled(False) self.stopButton.setEnabled(True) self.acquireButton.setEnabled(True) self.loadShimButton.setEnabled(True) self.zeroShimButton.setEnabled(True) # Setup global socket for receive data gsocket.readyRead.connect(self.read_data) self.idle = False
def acquire_all(self): self.if_all_projections = 1 gsocket.write(struct.pack('<I', 3 << 28)) print("Acquiring all projections") self.plot_x.clear() self.plot_y.clear() self.plot_z.clear() self.stopButton.setEnabled(False) self.projAxisValue.setEnabled(False) self.acquireButton.setEnabled(False) self.acquireAllButton.setEnabled(False) self.loadShimButton.setEnabled(False) self.zeroShimButton.setEnabled(False)
def start(self): gsocket.write(struct.pack('<I', 4)) self.load_shim() self.startButton.setEnabled(False) self.stopButton.setEnabled(True) self.projAxisValue.setEnabled(True) self.acquireButton.setEnabled(True) self.acquireAllButton.setEnabled(True) self.loadShimButton.setEnabled(True) self.zeroShimButton.setEnabled(True) # Setup global socket for receive data gsocket.readyRead.connect(self.read_data) self.idle = False
def set_angle_spin(self, value): if self.idle: return if value < 0: self.angle = 360 + value # Need positive angle to pack else: self.angle = value # print("Value = {}".format(value)) self.dial.setValue(value + 90) # dial is offset 90 degrees from spin box # self.dial.setValue(value - 90) # print("Current angle = {}".format(self.angle)) # represent this with at least 12 bits, so that we can cover 0 to 360 gsocket.write(struct.pack('<I', 3 << 28 | self.angle))
def stop(self): print("Stopping MRI_Rt_Widget") self.idle = True gsocket.write(struct.pack('<I', 0)) self.startButton.setEnabled(True) self.stopButton.setEnabled(False) self.horizontalSlider_x.setEnabled(False) self.horizontalSlider_y.setEnabled(False) self.horizontalSlider_z.setEnabled(False) self.gradOffset_x.setEnabled(False) self.gradOffset_y.setEnabled(False) self.gradOffset_z.setEnabled(False) self.saveShimButton.setEnabled(False) self.acquireButton.setEnabled(False) self.loadShimButton.setEnabled(False) self.zeroShimButton.setEnabled(False) gsocket.readyRead.disconnect()
def start(self): print("Starting MRI_2DImag_Widget") # send 5 as signal to start MRI_2DImag_Widget gsocket.write(struct.pack('<I', 5)) # enable/disable GUI elements self.startButton.setEnabled(False) self.stopButton.setEnabled(True) self.uploadSeqButton.setEnabled(True) self.acquireButton.setEnabled(True) self.loadShimButton.setEnabled(True) self.zeroShimButton.setEnabled(True) # setup global socket for receive data gsocket.readyRead.connect(self.read_data) self.load_shim() self.idle = False
def start(self): self.idle = False gsocket.write(struct.pack('<I', 7)) self.startButton.setEnabled(False) self.stopButton.setEnabled(True) self.acquireButton.setEnabled(True) self.loadShimButton.setEnabled(True) self.zeroShimButton.setEnabled(True) self.horizontalSlider_x.setEnabled(True) self.horizontalSlider_y.setEnabled(True) self.horizontalSlider_z.setEnabled(True) self.gradOffset_x.setEnabled(True) self.gradOffset_y.setEnabled(True) self.gradOffset_z.setEnabled(True) # Setup global socket for receive data gsocket.readyRead.connect(self.read_data) # Send the number of averages self.set_num_avg(self.num_avgs)
def zero_shim(self): print("\tZero grad offsets") self.gradOffset_x.valueChanged.disconnect() self.gradOffset_y.valueChanged.disconnect() self.gradOffset_z.valueChanged.disconnect() self.gradOffset_x.setValue(0) self.gradOffset_y.setValue(0) self.gradOffset_z.setValue(0) self.horizontalSlider_x.setValue(0) self.horizontalSlider_y.setValue(0) self.horizontalSlider_z.setValue(0) self.gradOffset_x.valueChanged.connect( lambda: self.set_grad_offset(self.gradOffset_x)) self.gradOffset_y.valueChanged.connect( lambda: self.set_grad_offset(self.gradOffset_y)) self.gradOffset_z.valueChanged.connect( lambda: self.set_grad_offset(self.gradOffset_z)) gsocket.write(struct.pack('<I', 2 << 28 | 5 << 24)) print("Acquiring data")
def zero_shim(self): print("\tZero grad offsets.") self.gradOffset_x.valueChanged.disconnect() self.gradOffset_y.valueChanged.disconnect() self.gradOffset_z.valueChanged.disconnect() self.gradOffset_z2.valueChanged.disconnect() self.gradOffset_x.setValue(0) self.gradOffset_y.setValue(0) self.gradOffset_z.setValue(0) self.gradOffset_z2.setValue(0) self.gradOffset_x.valueChanged.connect( lambda: self.set_grad_offset(self.gradOffset_x)) self.gradOffset_y.valueChanged.connect( lambda: self.set_grad_offset(self.gradOffset_y)) self.gradOffset_z.valueChanged.connect( lambda: self.set_grad_offset(self.gradOffset_z)) self.gradOffset_z2.valueChanged.connect( lambda: self.set_grad_offset(self.gradOffset_z2)) gsocket.write(struct.pack('<I', 2 << 28 | 6 << 24)) print("\tAcquiring data.")
def stop(self): self.idle = True gsocket.write(struct.pack('<I', 0)) self.startButton.setEnabled(True) self.stopButton.setEnabled(False) self.gradOffset_x.setEnabled(False) self.gradOffset_y.setEnabled(False) self.gradOffset_z.setEnabled(False) self.gradOffset_z2.setEnabled(False) self.acquireButton.setEnabled(False) self.saveShimButton.setEnabled(False) self.loadShimButton.setEnabled(False) self.zeroShimButton.setEnabled(False) self.zoomCheckBox.setEnabled(False) self.peakWindowCheckBox.setEnabled(False) self.cycAcqBtn.setEnabled(False) self.cyclesValue.setEnabled(False) # Disconnect global socket # if (gsocket.readyRead.isSignalConnected()): gsocket.readyRead.disconnect()
def stop(self): print("Stopping MRI_2DImag_Widget") self.uploadSeq.setText('none') # send 0 as signal to stop MRI_2DImag_Widget gsocket.write(struct.pack('<I', 0)) # enable/disable GUI elements self.startButton.setEnabled(True) self.stopButton.setEnabled(False) self.uploadSeqButton.setEnabled(False) self.acquireButton.setEnabled(False) self.loadShimButton.setEnabled(False) self.zeroShimButton.setEnabled(False) # Disconnect global socket gsocket.readyRead.disconnect() self.idle = True
def acquire(self): self.num_pe = int(self.npe.currentText()) self.num_pe2 = int(self.npe2.currentText()) self.npe_idx = self.npe.currentIndex() self.npe2_idx = self.npe2.currentIndex() self.seqType_idx = self.seqType.currentIndex() print(self.npe_idx) print(self.num_pe) print(self.npe2_idx) print(self.num_pe2) gsocket.write(struct.pack('<I', 2 << 28 | 0 << 24 | self.npe2_idx<<8 | self.npe_idx<<4 | self.seqType_idx )) print("Acquiring data = {} x {} x {}".format(self.num_pe, self.num_pe, self.num_pe2)) self.freqValue.setEnabled(False) self.seqType.setEnabled(False) self.npe.setEnabled(False) self.startButton.setEnabled(False) self.stopButton.setEnabled(False) self.acquireButton.setEnabled(False) self.loadShimButton.setEnabled(False) self.zeroShimButton.setEnabled(False)
def start(self): print("Starting MRI_SE_Widget") # send 2 as signal to start MRI_SE_Widget gsocket.write(struct.pack('<I', 2)) # enable/disable GUI elements self.startButton.setEnabled(False) self.stopButton.setEnabled(True) self.gradOffset_x.setEnabled(True) self.gradOffset_y.setEnabled(True) self.gradOffset_z.setEnabled(True) self.gradOffset_z2.setEnabled(True) self.acquireButton.setEnabled(True) self.saveShimButton.setEnabled(True) self.loadShimButton.setEnabled(True) self.zeroShimButton.setEnabled(True) self.zoomCheckBox.setEnabled(True) self.peakWindowCheckBox.setEnabled(True) self.cycAcqBtn.setEnabled(False) self.cyclesValue.setEnabled(False) # setup global socket for receive data gsocket.readyRead.connect(self.read_data) # send the sequence to the backend ass = Assembler() seq_byte_array = ass.assemble(self.seq_filename) print(len(seq_byte_array)) gsocket.write(struct.pack('<I', len(seq_byte_array))) gsocket.write(seq_byte_array) self.load_shim() self.idle = False
def acquire(self): # clear the plots, need to call draw() to update self.axes_bottom.clear() self.axes_top.clear() self.canvas.draw() self.axes_k_amp.clear() self.axes_k_pha.clear() self.axes_image.clear() self.canvas2.draw() self.progressBar.setValue(0) self.kspace_full = np.matrix( np.zeros((self.num_TR, 50000), dtype=np.complex64)) crop_size = int(self.num_pe / 64 * self.crop_factor) self.kspace = np.matrix( np.zeros((self.num_pe, crop_size), dtype=np.complex64)) self.k_amp = np.matrix(np.zeros((self.num_pe, self.num_pe * 2))) self.k_pha = np.matrix(np.zeros((self.num_pe, self.num_pe * 2))) self.img = np.matrix(np.zeros((self.num_pe, self.num_pe))) self.acqType_idx = self.acqType.currentIndex() if self.acqType_idx == 0: # Projections gsocket.write(struct.pack('<I', 3 << 28 | self.angle)) print("CMD: Acquiring projection") elif self.acqType_idx == 1: # Image gsocket.write(struct.pack('<I', 5 << 28 | self.angle)) print("CMD: Acquiring 2D image") # # enable/disable GUI elements self.freqValue.setEnabled(False) self.acqType.setEnabled(False) self.startButton.setEnabled(False) self.stopButton.setEnabled(False) self.searchButton.setEnabled(False) self.acquireButton.setEnabled(False) self.loadShimButton.setEnabled(False) self.zeroShimButton.setEnabled(False) self.saveShimButton.setEnabled(False)
def start(self): print("Starting MRI_FID_Widget") # send 1 as signal to start MRI_FID_Widget gsocket.write(struct.pack('<I', 1)) # enable/disable GUI elements self.startButton.setEnabled(False) self.stopButton.setEnabled(True) self.applyFreqButton.setEnabled(True) self.gradOffset_x.setEnabled(True) self.gradOffset_y.setEnabled(True) self.gradOffset_z.setEnabled(True) self.gradOffset_z2.setEnabled(True) self.acquireButton.setEnabled(True) self.saveShimButton.setEnabled(True) self.loadShimButton.setEnabled(True) self.zeroShimButton.setEnabled(True) self.openFlipangletoolBtn.setEnabled(True) # setup global socket for receive data gsocket.setReadBufferSize(8 * self.size) gsocket.readyRead.connect(self.read_data) # send the sequence to the backend ass = Assembler() seq_byte_array = ass.assemble(self.seq_filename) print(len(seq_byte_array)) gsocket.write(struct.pack('<I', len(seq_byte_array))) gsocket.write(seq_byte_array) self.load_shim() self.idle = False
def stop(self): self.idle = True self.uploadSeq.setText('none') gsocket.write(struct.pack('<I', 0)) self.startButton.setEnabled(True) self.stopButton.setEnabled(False) self.seqType.setEnabled(False) self.uploadSeqButton.setEnabled(False) self.seqButton.setEnabled(False) self.seq_set = 0 self.seqButton.setText('confirm sequence') self.horizontalSlider_x.setEnabled(False) self.horizontalSlider_y.setEnabled(False) self.horizontalSlider_z.setEnabled(False) self.gradOffset_x.setEnabled(False) self.gradOffset_y.setEnabled(False) self.gradOffset_z.setEnabled(False) self.acquireButton.setEnabled(False) self.saveShimButton.setEnabled(False) self.loadShimButton.setEnabled(False) self.zeroShimButton.setEnabled(False) # Disconnect global socket gsocket.readyRead.disconnect()
def stop(self): print("Stopping MRI_FID_Widget") # send 0 as signal to stop MRI_FID_Widget gsocket.write(struct.pack('<I', 0)) # enable/disable GUI elements self.startButton.setEnabled(True) self.stopButton.setEnabled(False) self.applyFreqButton.setEnabled(False) self.gradOffset_x.setEnabled(False) self.gradOffset_y.setEnabled(False) self.gradOffset_z.setEnabled(False) self.gradOffset_z2.setEnabled(False) self.acquireButton.setEnabled(False) self.saveShimButton.setEnabled(False) self.loadShimButton.setEnabled(False) self.zeroShimButton.setEnabled(False) self.openFlipangletoolBtn.setEnabled(False) # Disconnect global socket gsocket.readyRead.disconnect() self.idle = True
def set_proj_axis(self, currentIndex): ''' Sets the projection axis (x, y, z) ''' if currentIndex == 0: print("\tChanging projection axis to X") gsocket.write(struct.pack('<I', 2 << 28 | 1 << 24)) elif currentIndex == 1: print("\tChanging projection axis to Y") gsocket.write(struct.pack('<I', 2 << 28 | 2 << 24)) elif currentIndex == 2: print("\tChanging projection axis to Z") gsocket.write(struct.pack('<I', 2 << 28 | 3 << 24)) else: print("AXIS ERROR")
def load_shim(self): print("\tLoad grad offsets") self.gradOffset_x.valueChanged.disconnect() self.gradOffset_y.valueChanged.disconnect() self.gradOffset_z.valueChanged.disconnect() self.gradOffset_x.setValue(parameters.get_grad_offset_x()) self.gradOffset_y.setValue(parameters.get_grad_offset_y()) self.gradOffset_z.setValue(parameters.get_grad_offset_z()) self.horizontalSlider_x.setValue(parameters.get_grad_offset_x()) self.horizontalSlider_y.setValue(parameters.get_grad_offset_y()) self.horizontalSlider_z.setValue(parameters.get_grad_offset_z()) self.gradOffset_x.valueChanged.connect( lambda: self.set_grad_offset(self.gradOffset_x)) self.gradOffset_y.valueChanged.connect( lambda: self.set_grad_offset(self.gradOffset_y)) self.gradOffset_z.valueChanged.connect( lambda: self.set_grad_offset(self.gradOffset_z)) offsetX = self.gradOffset_x.value() self.horizontalSlider_x.setValue(offsetX) if offsetX > 0: gsocket.write(struct.pack('<I', 2 << 28 | 4 << 24 | offsetX)) else: gsocket.write( struct.pack('<I', 2 << 28 | 4 << 24 | 1 << 20 | -offsetX)) offsetY = self.gradOffset_y.value() self.horizontalSlider_y.setValue(offsetY) if offsetY > 0: gsocket.write(struct.pack('<I', 2 << 28 | 4 << 24 | offsetY)) else: gsocket.write( struct.pack('<I', 2 << 28 | 4 << 24 | 1 << 20 | -offsetY)) offsetZ = self.gradOffset_z.value() self.horizontalSlider_z.setValue(offsetZ) if offsetZ > 0: gsocket.write(struct.pack('<I', 2 << 28 | 4 << 24 | offsetZ)) else: gsocket.write( struct.pack('<I', 2 << 28 | 4 << 24 | 1 << 20 | -offsetZ)) if self.idle: gsocket.write(struct.pack('<I', 2 << 28 | 4 << 24 | 0 << 20)) else: gsocket.write(struct.pack('<I', 2 << 28 | 4 << 24 | 1 << 20)) print("Acquiring data")
def set_grad_offset(self, spinBox): if spinBox.objectName() == 'gradOffset_x': print("\tSetting grad offset x") offsetX = self.gradOffset_x.value() self.horizontalSlider_x.setValue(offsetX) if offsetX > 0: gsocket.write(struct.pack('<I', 2 << 28 | 1 << 24 | offsetX)) else: gsocket.write( struct.pack('<I', 2 << 28 | 1 << 24 | 1 << 20 | -offsetX)) print("Acquiring data") elif spinBox.objectName() == 'gradOffset_y': print("\tSetting grad offset y") offsetY = self.gradOffset_y.value() self.horizontalSlider_y.setValue(offsetY) if offsetY > 0: gsocket.write(struct.pack('<I', 2 << 28 | 2 << 24 | offsetY)) else: gsocket.write( struct.pack('<I', 2 << 28 | 2 << 24 | 1 << 20 | -offsetY)) print("Acquiring data") elif spinBox.objectName() == 'gradOffset_z': print("\tSetting grad offset z") offsetZ = self.gradOffset_z.value() self.horizontalSlider_z.setValue(offsetZ) if offsetZ > 0: gsocket.write(struct.pack('<I', 2 << 28 | 3 << 24 | offsetZ)) else: gsocket.write( struct.pack('<I', 2 << 28 | 3 << 24 | 1 << 20 | -offsetZ)) print("Acquiring data") else: print('Error: set_grad_offset') return
def acquire(self): gsocket.write(struct.pack('<I', 2 << 28 | 0 << 24)) print("Acquiring data")
def set_pulse(self, inp_file): ''' Sends the default pulse sequence to the server ''' ass = Assembler() self.default_seq_byte_array = ass.assemble(inp_file) gsocket.write(self.default_seq_byte_array) return
def send_pulse(self): ''' Sends the uploaded pulse sequence to the server ''' gsocket.write(self.upload_seq_byte_array) return
def load_shim(self): print("\tLoad grad offsets") self.shim_x.setText(str(parameters.get_grad_offset_x())) self.shim_y.setText(str(parameters.get_grad_offset_y())) self.shim_z.setText(str(parameters.get_grad_offset_z())) offsetX = int(self.shim_x.text()) if offsetX > 0: gsocket.write(struct.pack('<I', 2 << 28 | 4 << 24 | offsetX)) else: gsocket.write( struct.pack('<I', 2 << 28 | 4 << 24 | 1 << 20 | -offsetX)) offsetY = int(self.shim_y.text()) if offsetY > 0: gsocket.write(struct.pack('<I', 2 << 28 | 4 << 24 | offsetY)) else: gsocket.write( struct.pack('<I', 2 << 28 | 4 << 24 | 1 << 20 | -offsetY)) offsetZ = int(self.shim_z.text()) if offsetZ > 0: gsocket.write(struct.pack('<I', 2 << 28 | 4 << 24 | offsetZ)) else: gsocket.write( struct.pack('<I', 2 << 28 | 4 << 24 | 1 << 20 | -offsetZ)) if self.idle: gsocket.write(struct.pack('<I', 2 << 28 | 4 << 24 | 0 << 20)) else: gsocket.write(struct.pack('<I', 2 << 28 | 4 << 24 | 1 << 20)) print("Acquiring data")
def load_shim(self): print("Loading shim.") self.gradOffset_x.valueChanged.disconnect() self.gradOffset_y.valueChanged.disconnect() self.gradOffset_z.valueChanged.disconnect() self.gradOffset_z2.valueChanged.disconnect() self.gradOffset_x.setValue(parameters.get_grad_offset_x()) self.gradOffset_y.setValue(parameters.get_grad_offset_y()) self.gradOffset_z.setValue(parameters.get_grad_offset_z()) self.gradOffset_z2.setValue(parameters.get_grad_offset_z2()) self.gradOffset_x.valueChanged.connect( lambda: self.set_grad_offset(self.gradOffset_x)) self.gradOffset_y.valueChanged.connect( lambda: self.set_grad_offset(self.gradOffset_y)) self.gradOffset_z.valueChanged.connect( lambda: self.set_grad_offset(self.gradOffset_z)) self.gradOffset_z2.valueChanged.connect( lambda: self.set_grad_offset(self.gradOffset_z2)) offsetX = self.gradOffset_x.value() if offsetX > 0: gsocket.write(struct.pack('<I', 2 << 28 | 5 << 24 | offsetX)) else: gsocket.write( struct.pack('<I', 2 << 28 | 5 << 24 | 1 << 20 | -offsetX)) offsetY = self.gradOffset_y.value() if offsetY > 0: gsocket.write(struct.pack('<I', 2 << 28 | 5 << 24 | offsetY)) else: gsocket.write( struct.pack('<I', 2 << 28 | 5 << 24 | 1 << 20 | -offsetY)) offsetZ = self.gradOffset_z.value() if offsetZ > 0: gsocket.write(struct.pack('<I', 2 << 28 | 5 << 24 | offsetZ)) else: gsocket.write( struct.pack('<I', 2 << 28 | 5 << 24 | 1 << 20 | -offsetZ)) offsetZ2 = self.gradOffset_z2.value() if offsetZ2 > 0: gsocket.write(struct.pack('<I', 2 << 28 | 5 << 24 | offsetZ2)) else: gsocket.write( struct.pack('<I', 2 << 28 | 5 << 24 | 1 << 20 | -offsetZ2)) if self.idle: gsocket.write(struct.pack('<I', 2 << 28 | 5 << 24 | 0 << 20)) else: gsocket.write(struct.pack('<I', 2 << 28 | 5 << 24 | 1 << 20)) print("\tAcquiring data.")