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
Grid &1:
Used1 : true
Columns1 : 8
Rows1 : 2
Gridno1 : 1
RecordMode1 : standalone
Columns1 : 2
Rows1 : 4
ColumnDistance1 : 50.0cm
RowDistance1 : 50.0cm
ChannelOffset1 : 0
ElectrodeType1 : plain
RefElectrodeType1: plain
ElectrodeType1 : headstage
RefElectrodeType1: screw
RefElectrodePosX1: 0.00m
RefElectrodePosY1: 0.00m
WaterDepth1 : 0.25m
Hardware Settings:
DAQ board:
AISampleRate: 20.000kHz
AIMaxVolt : 1.0mV
AIMaxVolt : 20.0mV
Amplifier:
AmplName : 16-channel-amplifier
AmplModel : EM-64B
@ -24,10 +25,10 @@
LowpassCutoff : 10.000kHz
Recording:
General:
Experiment.Name : recording fish behavior
Experiment.Name : tube competition
StartDate : ~
StartTime : ~
Location : Colombia - Los Llanos
Location : Colombia - leticia
Position : ~N, ~W
WaterTemperature : 20.0C
WaterConductivity: 5.0uS/cm
@ -35,46 +36,5 @@
WaterOxygen : 0.0mg/l
Comment : ~
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
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,
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
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.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]
# switch controlled input
@ -191,11 +197,12 @@ def main():
LED1_pin = 11
LED2_pin = 13
LED_out_pin = 35
Button1_pin = 16
Button2_pin = 18
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_2_t = time()
@ -213,7 +220,7 @@ def main():
low_channel = 0
high_channel = channels
samples_per_channel = rate * 2 # * channels = Buffer size
samples_per_channel = rate * 20 # * channels = Buffer size
# rate = 20000
scan_options = ScanOption.CONTINUOUS
flags = AInScanFlag.DEFAULT
@ -273,13 +280,6 @@ def main():
print(ranges[range_index])
# 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')
@ -290,22 +290,32 @@ def main():
sleep(.1)
GPIO.output(LED1_pin, GPIO.LOW)
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_interval = 0.5
LED_t = time()
LED_t_interval = 2
out_LED_t = time()
out_LED_interval = 1
temp_t0 = time()
next_temp_t = 0
temp_interval = 300 # sec --> 5 min
disp_eth_power = True
#while True:
while GPIO.input(Button1_pin) == GPIO.LOW:
if record_temp == True:
if time() - temp_t0 > next_temp_t:
@ -321,9 +331,7 @@ def main():
w1_f.close()
next_temp_t += temp_interval
# blinking LED
if GPIO.input(power_controll_pin) == GPIO.HIGH:
# blinking LED for rec
if time() - LED_t < .1 and LED_status[0] == False:
LED_status[0] = True
GPIO.output(LED1_pin, GPIO.HIGH)
@ -331,34 +339,27 @@ def main():
LED_status[0] = False
GPIO.output(LED1_pin, GPIO.LOW)
if time() - LED_t >= LED_t_interval:
LED_t = time()
elif GPIO.input(power_controll_pin) == GPIO.LOW:
print('battery low')
if time() - emergency_LED_t > emergency_LED_interval:
if LED_status[0] == LED_status[1]:
GPIO.output(LED1_pin, GPIO.HIGH)
GPIO.output(LED2_pin, GPIO.LOW)
LED_status = [True, False]
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()
LED_t = time() - (time() - LED_t - LED_t_interval)
if len(LED_status) == 3:
if time() - out_LED_t < .1 and LED_status[2] == False:
LED_status[2] = True
GPIO.output(LED_out_pin, GPIO.HIGH)
elif time() - out_LED_t >= .1 and LED_status[2] == True:
LED_status[2] = False
GPIO.output(LED_out_pin, GPIO.LOW)
else:
GPIO.output(LED1_pin, GPIO.HIGH)
GPIO.output(LED2_pin, GPIO.LOW)
LED_status = [True, False]
emergency_LED_t = time()
pass
if time() - out_LED_t >= out_LED_interval:
out_LED_t = time() - (time() - out_LED_t - out_LED_interval )
# dist & eth0 controll
if GPIO.input(Button2_pin) == GPIO.HIGH and (time() - last_button_2_t) > 5:
if disp_eth_power == True:
subprocess.run(['tvservice', '-o'])
subprocess.run(['vcgencmd', 'display_power', '0'])
subprocess.run(['vcgencmd', 'display_power', '0'])#
subprocess.run(['sudo', 'ip', 'link', 'set', 'eth0', 'down'])
GPIO.output(LED2_pin, GPIO.LOW)
@ -369,7 +370,7 @@ def main():
subprocess.run(['tvservice', '-p'])
subprocess.run(['vcgencmd', 'display_power', '1'])
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'])
GPIO.output(LED2_pin, GPIO.HIGH)
@ -380,24 +381,21 @@ def main():
status, transfer_status = ai_device.get_scan_status()
index = transfer_status.current_index
if (last_idx > index) and (index != -1):
#print(last_idx - index)
#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[:index], dtype=np.float32) / gain).tofile(f)
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
f.close()
temp_f.close()

View File

@ -10,14 +10,15 @@ from PyQt5.QtCore import *
class Grid_tab(QWidget):
def __init__(self):
super().__init__()
self.gird_no_val = 1
self.grid_no_val = 1
self.rec_mode_val = 'standalone'
self.columns_val = 8
self.rows_val = 8
self.col_dist_val = 50
self.row_dist_val = 50
self.channel_offset_val = 0
self.elec_type_val = 'plain'
self.ref_elec_type_val = 'plain'
self.elec_type_val = 'headstage'
self.ref_elec_type_val = 'screw'
self.ref_elec_posx_val = 0.00
self.ref_elec_posy_val = 0.00
self.water_depth_val = 0.25
@ -33,78 +34,76 @@ class Grid_tab(QWidget):
def get_widgets(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(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_elecsL =QLabel('Electrod Columns:', self)
self.col_elecs = QLineEdit(str(self.columns_val), self)
self.gridlayout.addWidget(col_elecsL, 1, 0)
self.gridlayout.addWidget(self.col_elecs, 1, 1)
self.gridlayout.addWidget(col_elecsU, 1, 2)
self.gridlayout.addWidget(col_elecsL, 2, 0)
self.gridlayout.addWidget(self.col_elecs, 2, 1)
self.gridlayout.addWidget(col_elecsU, 2, 2)
row_elecsU = QLabel('n', self)
row_elecsL = QLabel('Electrod Rows:', self)
self.row_elecs = QLineEdit(str(self.rows_val), self)
self.gridlayout.addWidget(row_elecsL, 2, 0)
self.gridlayout.addWidget(self.row_elecs, 2, 1)
self.gridlayout.addWidget(row_elecsU, 2, 2)
self.gridlayout.addWidget(row_elecsL, 3, 0)
self.gridlayout.addWidget(self.row_elecs, 3, 1)
self.gridlayout.addWidget(row_elecsU, 3, 2)
col_spaceU = QLabel('cm', self)
col_spaceL = QLabel('Column spacing:', self)
self.col_space = QLineEdit(str(self.col_dist_val), self)
self.gridlayout.addWidget(col_spaceL, 3, 0)
self.gridlayout.addWidget(self.col_space, 3, 1)
self.gridlayout.addWidget(col_spaceU, 3, 2)
self.gridlayout.addWidget(col_spaceL, 4, 0)
self.gridlayout.addWidget(self.col_space, 4, 1)
self.gridlayout.addWidget(col_spaceU, 4, 2)
row_spaceU = QLabel('cm', self)
row_spaceL = QLabel('Row spacing:', self)
self.row_space = QLineEdit(str(self.row_dist_val), self)
self.gridlayout.addWidget(row_spaceL, 4, 0)
self.gridlayout.addWidget(self.row_space, 4, 1)
self.gridlayout.addWidget(row_spaceU, 4, 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)
self.gridlayout.addWidget(row_spaceL, 5, 0)
self.gridlayout.addWidget(self.row_space, 5, 1)
self.gridlayout.addWidget(row_spaceU, 5, 2)
elec_typeL = QLabel('Electrode Type:', self)
self.elec_type = QLineEdit(self.elec_type_val, self)
self.gridlayout.addWidget(elec_typeL, 5, 0)
self.gridlayout.addWidget(self.elec_type, 5, 1)
self.gridlayout.addWidget(elec_typeL, 6, 0)
self.gridlayout.addWidget(self.elec_type, 6, 1)
ref_elec_typeL = QLabel('Ref. Electrode Type:', self)
self.ref_elec_type = QLineEdit(self.ref_elec_type_val, self)
self.gridlayout.addWidget(ref_elec_typeL, 6, 0)
self.gridlayout.addWidget(self.ref_elec_type, 6, 1)
self.gridlayout.addWidget(ref_elec_typeL, 7, 0)
self.gridlayout.addWidget(self.ref_elec_type, 7, 1)
ref_elec_xU = QLabel('m', self)
ref_elec_xL = QLabel('Ref. Electrode Pos-x:', self)
self.ref_elec_x = QLineEdit('%.2f' % self.ref_elec_posx_val, self)
self.gridlayout.addWidget(ref_elec_xL, 7, 0)
self.gridlayout.addWidget(self.ref_elec_x, 7, 1)
self.gridlayout.addWidget(ref_elec_xU, 7, 2)
self.gridlayout.addWidget(ref_elec_xL, 8, 0)
self.gridlayout.addWidget(self.ref_elec_x, 8, 1)
self.gridlayout.addWidget(ref_elec_xU, 8, 2)
ref_elec_yU = QLabel('m', self)
ref_elec_yL = QLabel('Ref. Electrode Pos-y:', self)
self.ref_elec_y = QLineEdit('%.2f' % self.ref_elec_posy_val, self)
self.gridlayout.addWidget(ref_elec_yL, 8, 0)
self.gridlayout.addWidget(self.ref_elec_y, 8, 1)
self.gridlayout.addWidget(ref_elec_yU, 8, 2)
self.gridlayout.addWidget(ref_elec_yL, 9, 0)
self.gridlayout.addWidget(self.ref_elec_y, 9, 1)
self.gridlayout.addWidget(ref_elec_yU, 9, 2)
water_depthU = QLabel('cm', self)
water_depthL = QLabel('Water depth:', self)
self.water_depth = QLineEdit('%.2f' % self.water_depth_val, self)
self.gridlayout.addWidget(water_depthL, 9, 0)
self.gridlayout.addWidget(self.water_depth, 9, 1)
self.gridlayout.addWidget(water_depthU, 9, 2)
self.gridlayout.addWidget(water_depthL, 10, 0)
self.gridlayout.addWidget(self.water_depth, 10, 1)
self.gridlayout.addWidget(water_depthU, 10, 2)
space = QLabel('', self)
self.gridlayout.addWidget(space, 10, 0)
self.gridlayout.addWidget(space, 11, 0)
class Hardware_settings_tab(QWidget):
def __init__(self):
@ -276,27 +275,6 @@ class Recording_settings(QWidget):
self.gridlayout.addWidget(experimenterL, 10, 0)
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)
self.gridlayout.addWidget(space, 11, 0)
@ -395,8 +373,10 @@ class MainWindow(QTabWidget):
cfg = f.readlines()
for line in cfg:
if 'Gridno' in line:
if 'Gridno1' in line:
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:
self.Grid.columns_val = int(line.split(':')[1].strip())
elif 'Rows1' in line:
@ -475,7 +455,8 @@ class MainWindow(QTabWidget):
f.write('*FishGrid\n')
f.write(' Grid &1:\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(' Rows1 : %.0f\n' % int(self.Grid.row_elecs.text()))
f.write(' ColumnDistance1 : %.1fcm\n' % float(self.Grid.col_space.text()))