latest changes made in colombia and in germany

This commit is contained in:
till 2019-11-18 14:06:23 +01:00
parent 349785996d
commit 67b8a11089
3 changed files with 111 additions and 172 deletions

View File

@ -1,20 +1,21 @@
*FishGrid *FishGrid
Grid &1: Grid &1:
Used1 : true Used1 : true
Columns1 : 8 Gridno1 : 1
Rows1 : 2 RecordMode1 : standalone
Columns1 : 2
Rows1 : 4
ColumnDistance1 : 50.0cm ColumnDistance1 : 50.0cm
RowDistance1 : 50.0cm RowDistance1 : 50.0cm
ChannelOffset1 : 0 ElectrodeType1 : headstage
ElectrodeType1 : plain RefElectrodeType1: screw
RefElectrodeType1: plain
RefElectrodePosX1: 0.00m RefElectrodePosX1: 0.00m
RefElectrodePosY1: 0.00m RefElectrodePosY1: 0.00m
WaterDepth1 : 0.25m WaterDepth1 : 0.25m
Hardware Settings: Hardware Settings:
DAQ board: DAQ board:
AISampleRate: 20.000kHz AISampleRate: 20.000kHz
AIMaxVolt : 1.0mV AIMaxVolt : 20.0mV
Amplifier: Amplifier:
AmplName : 16-channel-amplifier AmplName : 16-channel-amplifier
AmplModel : EM-64B AmplModel : EM-64B
@ -24,10 +25,10 @@
LowpassCutoff : 10.000kHz LowpassCutoff : 10.000kHz
Recording: Recording:
General: General:
Experiment.Name : recording fish behavior Experiment.Name : tube competition
StartDate : ~ StartDate : ~
StartTime : ~ StartTime : ~
Location : Colombia - Los Llanos Location : Colombia - leticia
Position : ~N, ~W Position : ~N, ~W
WaterTemperature : 20.0C WaterTemperature : 20.0C
WaterConductivity: 5.0uS/cm WaterConductivity: 5.0uS/cm
@ -35,46 +36,5 @@
WaterOxygen : 0.0mg/l WaterOxygen : 0.0mg/l
Comment : ~ Comment : ~
Experimenter : T. Raab et al. :) Experimenter : T. Raab et al. :)
Buffers and timing:
DataTime : 100ms
DataInterval: 1000ms
BufferTime : 60s
Pre-processing:
PreProcessor1: none
PreProcessor2: none
PreProcessor3: none
PreProcessor4: none
PreProcessor5: none
PreProcessor6: none
PreProcessor7: none
PreProcessor8: none
*CommonNoiseRemoval
CommonNoiseRemoval: none
*Spectra
Size : "8192"
Overlap: true
Window : Hanning
Decibel: true
Decay : 100iterations
FMin : 0Hz
FMax : 2000Hz
Clip : true
*RMSPixel
TraceLength: 10s
*Recording *Recording
PathFormat: "%04Y-%02m-%02d-%02H_%02M" PathFormat: "%04Y-%02m-%02d-%02H_%02M"
*Acquisition
device1 : /dev/comedi0
blacklist1: ~
device2 : /dev/comedi1
blacklist2: ~
device3 : /dev/comedi2
blacklist3: ~
device4 : /dev/comedi3
blacklist4: ~
reference : RSE

View File

@ -18,7 +18,7 @@ from IPython import embed
from uldaq import (get_daq_device_inventory, DaqDevice, AInScanFlag, ScanStatus, from uldaq import (get_daq_device_inventory, DaqDevice, AInScanFlag, ScanStatus,
ScanOption, create_float_buffer, InterfaceType, AiInputMode) ScanOption, create_float_buffer, InterfaceType, AiInputMode)
def GPIO_setup(LED1_pin, LED2_pin, Button1_pin, Button2_pin, power_controll_pin): def GPIO_setup(LED1_pin, LED2_pin, LED_out_pin, Button1_pin, Button2_pin, power_controll_pin):
# LED output pins # LED output pins
GPIO.setmode(GPIO.BOARD) GPIO.setmode(GPIO.BOARD)
@ -27,6 +27,12 @@ def GPIO_setup(LED1_pin, LED2_pin, Button1_pin, Button2_pin, power_controll_pin)
GPIO.setup(LED2_pin, GPIO.OUT) # 2 GPIO.setup(LED2_pin, GPIO.OUT) # 2
GPIO.output(LED2_pin, GPIO.HIGH) GPIO.output(LED2_pin, GPIO.HIGH)
if LED_out_pin != None:
GPIO.setup(LED_out_pin, GPIO.OUT)
GPIO.output(LED_out_pin, GPIO.LOW)
LED_status = [False, True, False]
else:
LED_status = [False, True] LED_status = [False, True]
# switch controlled input # switch controlled input
@ -191,11 +197,12 @@ def main():
LED1_pin = 11 LED1_pin = 11
LED2_pin = 13 LED2_pin = 13
LED_out_pin = 35
Button1_pin = 16 Button1_pin = 16
Button2_pin = 18 Button2_pin = 18
power_controll_pin = 37 power_controll_pin = 37
LED_status = GPIO_setup(LED1_pin, LED2_pin, Button1_pin, Button2_pin, power_controll_pin) LED_status = GPIO_setup(LED1_pin, LED2_pin, LED_out_pin, Button1_pin, Button2_pin, power_controll_pin)
last_button_1_t = time() last_button_1_t = time()
last_button_2_t = time() last_button_2_t = time()
@ -213,7 +220,7 @@ def main():
low_channel = 0 low_channel = 0
high_channel = channels high_channel = channels
samples_per_channel = rate * 2 # * channels = Buffer size samples_per_channel = rate * 20 # * channels = Buffer size
# rate = 20000 # rate = 20000
scan_options = ScanOption.CONTINUOUS scan_options = ScanOption.CONTINUOUS
flags = AInScanFlag.DEFAULT flags = AInScanFlag.DEFAULT
@ -273,13 +280,6 @@ def main():
print(ranges[range_index]) print(ranges[range_index])
# Allocate a buffer to receive the data. # Allocate a buffer to receive the data.
data = create_float_buffer(channel_count, samples_per_channel)
# system('clear')
# Start the acquisition.
rate = ai_device.a_in_scan(low_channel, high_channel, input_mode, ranges[range_index], samples_per_channel,
rate, scan_options, flags, data)
last_idx = 0
# f = open('/media/pi/data1/test_file.raw', 'wb') # f = open('/media/pi/data1/test_file.raw', 'wb')
@ -290,22 +290,32 @@ def main():
sleep(.1) sleep(.1)
GPIO.output(LED1_pin, GPIO.LOW) GPIO.output(LED1_pin, GPIO.LOW)
LED_status[0] = False LED_status[0] = False
sleep(2.)
data = create_float_buffer(channel_count, samples_per_channel)
# system('clear')
# Start the acquisition.
rate = ai_device.a_in_scan(low_channel, high_channel, input_mode, ranges[range_index], samples_per_channel,
rate, scan_options, flags, data)
last_idx = 0
sleep(2)
emergency_LED_t = time() emergency_LED_t = time()
emergency_LED_interval = 0.5 emergency_LED_interval = 0.5
LED_t = time() LED_t = time()
LED_t_interval = 2 LED_t_interval = 2
out_LED_t = time()
out_LED_interval = 1
temp_t0 = time() temp_t0 = time()
next_temp_t = 0 next_temp_t = 0
temp_interval = 300 # sec --> 5 min temp_interval = 300 # sec --> 5 min
disp_eth_power = True disp_eth_power = True
#while True:
while GPIO.input(Button1_pin) == GPIO.LOW: while GPIO.input(Button1_pin) == GPIO.LOW:
if record_temp == True: if record_temp == True:
if time() - temp_t0 > next_temp_t: if time() - temp_t0 > next_temp_t:
@ -321,9 +331,7 @@ def main():
w1_f.close() w1_f.close()
next_temp_t += temp_interval next_temp_t += temp_interval
# blinking LED # blinking LED for rec
if GPIO.input(power_controll_pin) == GPIO.HIGH:
if time() - LED_t < .1 and LED_status[0] == False: if time() - LED_t < .1 and LED_status[0] == False:
LED_status[0] = True LED_status[0] = True
GPIO.output(LED1_pin, GPIO.HIGH) GPIO.output(LED1_pin, GPIO.HIGH)
@ -331,34 +339,27 @@ def main():
LED_status[0] = False LED_status[0] = False
GPIO.output(LED1_pin, GPIO.LOW) GPIO.output(LED1_pin, GPIO.LOW)
if time() - LED_t >= LED_t_interval: if time() - LED_t >= LED_t_interval:
LED_t = time() LED_t = time() - (time() - LED_t - LED_t_interval)
elif GPIO.input(power_controll_pin) == GPIO.LOW:
print('battery low') if len(LED_status) == 3:
if time() - out_LED_t < .1 and LED_status[2] == False:
if time() - emergency_LED_t > emergency_LED_interval: LED_status[2] = True
if LED_status[0] == LED_status[1]: GPIO.output(LED_out_pin, GPIO.HIGH)
GPIO.output(LED1_pin, GPIO.HIGH) elif time() - out_LED_t >= .1 and LED_status[2] == True:
GPIO.output(LED2_pin, GPIO.LOW) LED_status[2] = False
LED_status = [True, False] GPIO.output(LED_out_pin, GPIO.LOW)
emergency_LED_t = time()
else:
if LED_status[0] == True:
GPIO.output(LED1_pin, GPIO.LOW)
GPIO.output(LED2_pin, GPIO.HIGH)
LED_status = [False, True]
emergency_LED_t = time()
else: else:
GPIO.output(LED1_pin, GPIO.HIGH) pass
GPIO.output(LED2_pin, GPIO.LOW)
LED_status = [True, False] if time() - out_LED_t >= out_LED_interval:
emergency_LED_t = time() out_LED_t = time() - (time() - out_LED_t - out_LED_interval )
# dist & eth0 controll # dist & eth0 controll
if GPIO.input(Button2_pin) == GPIO.HIGH and (time() - last_button_2_t) > 5: if GPIO.input(Button2_pin) == GPIO.HIGH and (time() - last_button_2_t) > 5:
if disp_eth_power == True: if disp_eth_power == True:
subprocess.run(['tvservice', '-o']) subprocess.run(['tvservice', '-o'])
subprocess.run(['vcgencmd', 'display_power', '0']) subprocess.run(['vcgencmd', 'display_power', '0'])#
subprocess.run(['sudo', 'ip', 'link', 'set', 'eth0', 'down']) subprocess.run(['sudo', 'ip', 'link', 'set', 'eth0', 'down'])
GPIO.output(LED2_pin, GPIO.LOW) GPIO.output(LED2_pin, GPIO.LOW)
@ -369,7 +370,7 @@ def main():
subprocess.run(['tvservice', '-p']) subprocess.run(['tvservice', '-p'])
subprocess.run(['vcgencmd', 'display_power', '1']) subprocess.run(['vcgencmd', 'display_power', '1'])
subprocess.run(['sudo', '/bin/chvt', '6']) subprocess.run(['sudo', '/bin/chvt', '6'])
subprocess.run(['sudo', '/bin/chvt', '7']) subprocess.run(['sudo', '/bin/chvt', '7'])#
subprocess.run(['sudo', 'ip', 'link', 'set', 'eth0', 'up']) subprocess.run(['sudo', 'ip', 'link', 'set', 'eth0', 'up'])
GPIO.output(LED2_pin, GPIO.HIGH) GPIO.output(LED2_pin, GPIO.HIGH)
@ -380,24 +381,21 @@ def main():
status, transfer_status = ai_device.get_scan_status() status, transfer_status = ai_device.get_scan_status()
index = transfer_status.current_index index = transfer_status.current_index
#print(last_idx - index)
if (last_idx > index) and (index != -1): #embed()
#quit()
if index < 0 or index == last_idx:
continue
if index > last_idx:
(np.array(data[last_idx:index], dtype=np.float32) / gain).tofile(f)
else:
(np.array(data[last_idx:], dtype=np.float32) / gain).tofile(f) (np.array(data[last_idx:], dtype=np.float32) / gain).tofile(f)
(np.array(data[:index], dtype=np.float32) / gain).tofile(f) (np.array(data[:index], dtype=np.float32) / gain).tofile(f)
f.flush() f.flush()
if index == -1:
pass
else:
(np.array(data[last_idx:index], dtype=np.float32) / 1000).tofile(f)
if index == -1:
last_idx= len(data)
else:
last_idx = index last_idx = index
f.close() f.close()
temp_f.close() temp_f.close()

View File

@ -10,14 +10,15 @@ from PyQt5.QtCore import *
class Grid_tab(QWidget): class Grid_tab(QWidget):
def __init__(self): def __init__(self):
super().__init__() super().__init__()
self.gird_no_val = 1 self.grid_no_val = 1
self.rec_mode_val = 'standalone'
self.columns_val = 8 self.columns_val = 8
self.rows_val = 8 self.rows_val = 8
self.col_dist_val = 50 self.col_dist_val = 50
self.row_dist_val = 50 self.row_dist_val = 50
self.channel_offset_val = 0 self.channel_offset_val = 0
self.elec_type_val = 'plain' self.elec_type_val = 'headstage'
self.ref_elec_type_val = 'plain' self.ref_elec_type_val = 'screw'
self.ref_elec_posx_val = 0.00 self.ref_elec_posx_val = 0.00
self.ref_elec_posy_val = 0.00 self.ref_elec_posy_val = 0.00
self.water_depth_val = 0.25 self.water_depth_val = 0.25
@ -33,78 +34,76 @@ class Grid_tab(QWidget):
def get_widgets(self): def get_widgets(self):
grid_noL = QLabel('Grid no:', self) grid_noL = QLabel('Grid no:', self)
self.grid_no = QLineEdit(str(self.gird_no_val), self) self.grid_no = QLineEdit(str(self.grid_no_val), self)
self.gridlayout.addWidget(grid_noL, 0, 0) self.gridlayout.addWidget(grid_noL, 0, 0)
self.gridlayout.addWidget(self.grid_no, 0, 1) self.gridlayout.addWidget(self.grid_no, 0, 1)
rec_modeL = QLabel('Recorde mode', self)
self.rec_mode = QLineEdit(self.rec_mode_val, self)
self.gridlayout.addWidget(rec_modeL, 1, 0)
self.gridlayout.addWidget(self.rec_mode, 1, 1)
col_elecsU =QLabel('n', self) col_elecsU =QLabel('n', self)
col_elecsL =QLabel('Electrod Columns:', self) col_elecsL =QLabel('Electrod Columns:', self)
self.col_elecs = QLineEdit(str(self.columns_val), self) self.col_elecs = QLineEdit(str(self.columns_val), self)
self.gridlayout.addWidget(col_elecsL, 1, 0) self.gridlayout.addWidget(col_elecsL, 2, 0)
self.gridlayout.addWidget(self.col_elecs, 1, 1) self.gridlayout.addWidget(self.col_elecs, 2, 1)
self.gridlayout.addWidget(col_elecsU, 1, 2) self.gridlayout.addWidget(col_elecsU, 2, 2)
row_elecsU = QLabel('n', self) row_elecsU = QLabel('n', self)
row_elecsL = QLabel('Electrod Rows:', self) row_elecsL = QLabel('Electrod Rows:', self)
self.row_elecs = QLineEdit(str(self.rows_val), self) self.row_elecs = QLineEdit(str(self.rows_val), self)
self.gridlayout.addWidget(row_elecsL, 2, 0) self.gridlayout.addWidget(row_elecsL, 3, 0)
self.gridlayout.addWidget(self.row_elecs, 2, 1) self.gridlayout.addWidget(self.row_elecs, 3, 1)
self.gridlayout.addWidget(row_elecsU, 2, 2) self.gridlayout.addWidget(row_elecsU, 3, 2)
col_spaceU = QLabel('cm', self) col_spaceU = QLabel('cm', self)
col_spaceL = QLabel('Column spacing:', self) col_spaceL = QLabel('Column spacing:', self)
self.col_space = QLineEdit(str(self.col_dist_val), self) self.col_space = QLineEdit(str(self.col_dist_val), self)
self.gridlayout.addWidget(col_spaceL, 3, 0) self.gridlayout.addWidget(col_spaceL, 4, 0)
self.gridlayout.addWidget(self.col_space, 3, 1) self.gridlayout.addWidget(self.col_space, 4, 1)
self.gridlayout.addWidget(col_spaceU, 3, 2) self.gridlayout.addWidget(col_spaceU, 4, 2)
row_spaceU = QLabel('cm', self) row_spaceU = QLabel('cm', self)
row_spaceL = QLabel('Row spacing:', self) row_spaceL = QLabel('Row spacing:', self)
self.row_space = QLineEdit(str(self.row_dist_val), self) self.row_space = QLineEdit(str(self.row_dist_val), self)
self.gridlayout.addWidget(row_spaceL, 4, 0) self.gridlayout.addWidget(row_spaceL, 5, 0)
self.gridlayout.addWidget(self.row_space, 4, 1) self.gridlayout.addWidget(self.row_space, 5, 1)
self.gridlayout.addWidget(row_spaceU, 4, 2) self.gridlayout.addWidget(row_spaceU, 5, 2)
# channel_offsetU = QLabel('n', self)
# channel_offsetL = QLabel('Channel offset:', self)
# self.channel_offset = QLineEdit(str(self.channel_offset_val), self)
# self.gridlayout.addWidget(channel_offsetL, 4, 0)
# self.gridlayout.addWidget(self.channel_offset, 4, 1)
# self.gridlayout.addWidget(channel_offsetU, 4, 2)
elec_typeL = QLabel('Electrode Type:', self) elec_typeL = QLabel('Electrode Type:', self)
self.elec_type = QLineEdit(self.elec_type_val, self) self.elec_type = QLineEdit(self.elec_type_val, self)
self.gridlayout.addWidget(elec_typeL, 5, 0) self.gridlayout.addWidget(elec_typeL, 6, 0)
self.gridlayout.addWidget(self.elec_type, 5, 1) self.gridlayout.addWidget(self.elec_type, 6, 1)
ref_elec_typeL = QLabel('Ref. Electrode Type:', self) ref_elec_typeL = QLabel('Ref. Electrode Type:', self)
self.ref_elec_type = QLineEdit(self.ref_elec_type_val, self) self.ref_elec_type = QLineEdit(self.ref_elec_type_val, self)
self.gridlayout.addWidget(ref_elec_typeL, 6, 0) self.gridlayout.addWidget(ref_elec_typeL, 7, 0)
self.gridlayout.addWidget(self.ref_elec_type, 6, 1) self.gridlayout.addWidget(self.ref_elec_type, 7, 1)
ref_elec_xU = QLabel('m', self) ref_elec_xU = QLabel('m', self)
ref_elec_xL = QLabel('Ref. Electrode Pos-x:', self) ref_elec_xL = QLabel('Ref. Electrode Pos-x:', self)
self.ref_elec_x = QLineEdit('%.2f' % self.ref_elec_posx_val, self) self.ref_elec_x = QLineEdit('%.2f' % self.ref_elec_posx_val, self)
self.gridlayout.addWidget(ref_elec_xL, 7, 0) self.gridlayout.addWidget(ref_elec_xL, 8, 0)
self.gridlayout.addWidget(self.ref_elec_x, 7, 1) self.gridlayout.addWidget(self.ref_elec_x, 8, 1)
self.gridlayout.addWidget(ref_elec_xU, 7, 2) self.gridlayout.addWidget(ref_elec_xU, 8, 2)
ref_elec_yU = QLabel('m', self) ref_elec_yU = QLabel('m', self)
ref_elec_yL = QLabel('Ref. Electrode Pos-y:', self) ref_elec_yL = QLabel('Ref. Electrode Pos-y:', self)
self.ref_elec_y = QLineEdit('%.2f' % self.ref_elec_posy_val, self) self.ref_elec_y = QLineEdit('%.2f' % self.ref_elec_posy_val, self)
self.gridlayout.addWidget(ref_elec_yL, 8, 0) self.gridlayout.addWidget(ref_elec_yL, 9, 0)
self.gridlayout.addWidget(self.ref_elec_y, 8, 1) self.gridlayout.addWidget(self.ref_elec_y, 9, 1)
self.gridlayout.addWidget(ref_elec_yU, 8, 2) self.gridlayout.addWidget(ref_elec_yU, 9, 2)
water_depthU = QLabel('cm', self) water_depthU = QLabel('cm', self)
water_depthL = QLabel('Water depth:', self) water_depthL = QLabel('Water depth:', self)
self.water_depth = QLineEdit('%.2f' % self.water_depth_val, self) self.water_depth = QLineEdit('%.2f' % self.water_depth_val, self)
self.gridlayout.addWidget(water_depthL, 9, 0) self.gridlayout.addWidget(water_depthL, 10, 0)
self.gridlayout.addWidget(self.water_depth, 9, 1) self.gridlayout.addWidget(self.water_depth, 10, 1)
self.gridlayout.addWidget(water_depthU, 9, 2) self.gridlayout.addWidget(water_depthU, 10, 2)
space = QLabel('', self) space = QLabel('', self)
self.gridlayout.addWidget(space, 10, 0) self.gridlayout.addWidget(space, 11, 0)
class Hardware_settings_tab(QWidget): class Hardware_settings_tab(QWidget):
def __init__(self): def __init__(self):
@ -276,27 +275,6 @@ class Recording_settings(QWidget):
self.gridlayout.addWidget(experimenterL, 10, 0) self.gridlayout.addWidget(experimenterL, 10, 0)
self.gridlayout.addWidget(self.experimenter, 10, 1) self.gridlayout.addWidget(self.experimenter, 10, 1)
# DataTimeU = QLabel('ms', self)
# DataTimeL = QLabel('Data Time:', self)
# self.datatime = QLineEdit(str(self.datatime_val), self)
# self.gridlayout.addWidget(DataTimeL, 11, 0)
# self.gridlayout.addWidget(self.datatime, 11, 1)
# self.gridlayout.addWidget(DataTimeU, 11, 2)
#
# DataIntervalU = QLabel('ms', self)
# DataIntervalL = QLabel('Data Interval:', self)
# self.datainterval = QLineEdit(str(self.datainterval_val), self)
# self.gridlayout.addWidget(DataIntervalL, 12, 0)
# self.gridlayout.addWidget(self.datainterval, 12, 1)
# self.gridlayout.addWidget(DataIntervalU, 12, 2)
#
# BufferTimeU = QLabel('s', self)
# BufferTimeL = QLabel('Buffer Time:', self)
# self.buffertime = QLineEdit(str(self.buffertime_val), self)
# self.gridlayout.addWidget(BufferTimeL, 13, 0)
# self.gridlayout.addWidget(self.buffertime, 13, 1)
# self.gridlayout.addWidget(BufferTimeU, 13, 2)
space = QLabel('', self) space = QLabel('', self)
self.gridlayout.addWidget(space, 11, 0) self.gridlayout.addWidget(space, 11, 0)
@ -395,8 +373,10 @@ class MainWindow(QTabWidget):
cfg = f.readlines() cfg = f.readlines()
for line in cfg: for line in cfg:
if 'Gridno' in line: if 'Gridno1' in line:
self.Grid.grid_no_val = int(line.split(':')[1].strip()) self.Grid.grid_no_val = int(line.split(':')[1].strip())
elif 'RecordMode1' in line:
self.Grid.rec_mode_val = line.split(':')[1].strip()
elif 'Columns1' in line: elif 'Columns1' in line:
self.Grid.columns_val = int(line.split(':')[1].strip()) self.Grid.columns_val = int(line.split(':')[1].strip())
elif 'Rows1' in line: elif 'Rows1' in line:
@ -475,7 +455,8 @@ class MainWindow(QTabWidget):
f.write('*FishGrid\n') f.write('*FishGrid\n')
f.write(' Grid &1:\n') f.write(' Grid &1:\n')
f.write(' Used1 : true\n') f.write(' Used1 : true\n')
f.write(' Gridno1 : 1\n') f.write(' Gridno1 : %.0f\n' % int(self.Grid.grid_no.text()))
f.write(' RecordMode1 : %s\n' % self.Grid.rec_mode.text())
f.write(' Columns1 : %.0f\n' % int(self.Grid.col_elecs.text())) f.write(' Columns1 : %.0f\n' % int(self.Grid.col_elecs.text()))
f.write(' Rows1 : %.0f\n' % int(self.Grid.row_elecs.text())) f.write(' Rows1 : %.0f\n' % int(self.Grid.row_elecs.text()))
f.write(' ColumnDistance1 : %.1fcm\n' % float(self.Grid.col_space.text())) f.write(' ColumnDistance1 : %.1fcm\n' % float(self.Grid.col_space.text()))