boris-behav-obs 9.0.8__py2.py3-none-any.whl → 9.1.1__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- boris/advanced_event_filtering.py +9 -4
- boris/analysis_plugins/number_of_occurences.py +1 -2
- boris/analysis_plugins/time_budget.py +1 -3
- boris/behavior_binary_table.py +12 -0
- boris/config.py +5 -0
- boris/config_file.py +8 -8
- boris/connections.py +3 -1
- boris/cooccurence.py +9 -1
- boris/core.py +178 -62
- boris/dialog.py +9 -5
- boris/edit_event.py +3 -8
- boris/event_operations.py +17 -12
- boris/events_snapshots.py +5 -5
- boris/export_events.py +29 -13
- boris/export_observation.py +17 -2
- boris/observation_operations.py +37 -1
- boris/param_panel.py +12 -0
- boris/param_panel_ui.py +6 -0
- boris/plot_events.py +13 -6
- boris/project_functions.py +22 -12
- boris/project_import_export.py +9 -9
- boris/select_observations.py +1 -3
- boris/select_subj_behav.py +12 -1
- boris/synthetic_time_budget.py +8 -0
- boris/time_budget_functions.py +20 -15
- boris/time_budget_widget.py +18 -7
- boris/utilities.py +3 -3
- boris/version.py +2 -2
- boris/write_event.py +2 -1
- {boris_behav_obs-9.0.8.dist-info → boris_behav_obs-9.1.1.dist-info}/METADATA +1 -1
- {boris_behav_obs-9.0.8.dist-info → boris_behav_obs-9.1.1.dist-info}/RECORD +35 -35
- {boris_behav_obs-9.0.8.dist-info → boris_behav_obs-9.1.1.dist-info}/WHEEL +1 -1
- {boris_behav_obs-9.0.8.dist-info → boris_behav_obs-9.1.1.dist-info}/LICENSE.TXT +0 -0
- {boris_behav_obs-9.0.8.dist-info → boris_behav_obs-9.1.1.dist-info}/entry_points.txt +0 -0
- {boris_behav_obs-9.0.8.dist-info → boris_behav_obs-9.1.1.dist-info}/top_level.txt +0 -0
boris/project_import_export.py
CHANGED
|
@@ -29,7 +29,7 @@ import tablib
|
|
|
29
29
|
import pickle
|
|
30
30
|
|
|
31
31
|
from PySide6.QtCore import Qt
|
|
32
|
-
from PySide6.QtGui import
|
|
32
|
+
from PySide6.QtGui import QFont
|
|
33
33
|
from PySide6.QtWidgets import QApplication, QFileDialog, QListWidgetItem, QMessageBox, QTableWidgetItem
|
|
34
34
|
|
|
35
35
|
|
|
@@ -223,7 +223,7 @@ def select_behaviors(
|
|
|
223
223
|
paramPanelWindow.resize(800, 600)
|
|
224
224
|
paramPanelWindow.setWindowTitle(title)
|
|
225
225
|
paramPanelWindow.lbBehaviors.setText(text)
|
|
226
|
-
for w in
|
|
226
|
+
for w in (
|
|
227
227
|
paramPanelWindow.lwSubjects,
|
|
228
228
|
paramPanelWindow.pbSelectAllSubjects,
|
|
229
229
|
paramPanelWindow.pbUnselectAllSubjects,
|
|
@@ -233,7 +233,7 @@ def select_behaviors(
|
|
|
233
233
|
paramPanelWindow.cbExcludeBehaviors,
|
|
234
234
|
paramPanelWindow.frm_time,
|
|
235
235
|
paramPanelWindow.frm_time_bin_size,
|
|
236
|
-
|
|
236
|
+
):
|
|
237
237
|
w.setVisible(False)
|
|
238
238
|
|
|
239
239
|
if behavioral_categories:
|
|
@@ -318,7 +318,7 @@ def import_ethogram_from_dict(self, project: dict):
|
|
|
318
318
|
if self.twBehaviors.rowCount():
|
|
319
319
|
response = dialog.MessageDialog(
|
|
320
320
|
cfg.programName,
|
|
321
|
-
("Some behaviors are already configured.
|
|
321
|
+
("Some behaviors are already configured. Do you want to append behaviors or replace them?"),
|
|
322
322
|
[cfg.APPEND, cfg.REPLACE, cfg.CANCEL],
|
|
323
323
|
)
|
|
324
324
|
if response == cfg.REPLACE:
|
|
@@ -473,7 +473,7 @@ def import_behaviors_from_project(self):
|
|
|
473
473
|
import ethogram from a BORIS project file
|
|
474
474
|
"""
|
|
475
475
|
file_name, _ = QFileDialog.getOpenFileName(
|
|
476
|
-
self, "Import behaviors from BORIS project file", "", ("Project files (*.boris *.boris.gz);;
|
|
476
|
+
self, "Import behaviors from BORIS project file", "", ("Project files (*.boris *.boris.gz);;All files (*)")
|
|
477
477
|
)
|
|
478
478
|
if not file_name:
|
|
479
479
|
return
|
|
@@ -887,7 +887,7 @@ def import_subjects_from_project(self):
|
|
|
887
887
|
"""
|
|
888
888
|
|
|
889
889
|
file_name, _ = QFileDialog().getOpenFileName(
|
|
890
|
-
self, "Import subjects from project file", "", ("Project files (*.boris *.boris.gz);;
|
|
890
|
+
self, "Import subjects from project file", "", ("Project files (*.boris *.boris.gz);;All files (*)")
|
|
891
891
|
)
|
|
892
892
|
if not file_name:
|
|
893
893
|
return
|
|
@@ -907,7 +907,7 @@ def import_subjects_from_project(self):
|
|
|
907
907
|
if self.twSubjects.rowCount():
|
|
908
908
|
response = dialog.MessageDialog(
|
|
909
909
|
cfg.programName,
|
|
910
|
-
("There are subjects already configured.
|
|
910
|
+
("There are subjects already configured. Do you want to append subjects or replace them?"),
|
|
911
911
|
[cfg.APPEND, cfg.REPLACE, cfg.CANCEL],
|
|
912
912
|
)
|
|
913
913
|
|
|
@@ -941,7 +941,7 @@ def import_subjects_from_text_file(self):
|
|
|
941
941
|
if self.twSubjects.rowCount():
|
|
942
942
|
response = dialog.MessageDialog(
|
|
943
943
|
cfg.programName,
|
|
944
|
-
("There are subjects already configured.
|
|
944
|
+
("There are subjects already configured. Do you want to append subjects or replace them?"),
|
|
945
945
|
[cfg.APPEND, cfg.REPLACE, cfg.CANCEL],
|
|
946
946
|
)
|
|
947
947
|
|
|
@@ -1048,7 +1048,7 @@ def import_indep_variables_from_project(self):
|
|
|
1048
1048
|
self,
|
|
1049
1049
|
"Import independent variables from project file",
|
|
1050
1050
|
"",
|
|
1051
|
-
("Project files (*.boris *.boris.gz);;
|
|
1051
|
+
("Project files (*.boris *.boris.gz);;All files (*)"),
|
|
1052
1052
|
)
|
|
1053
1053
|
if not file_name:
|
|
1054
1054
|
return
|
boris/select_observations.py
CHANGED
|
@@ -55,9 +55,7 @@ def select_observations2(self, mode: str, windows_title: str = "") -> Tuple[str,
|
|
|
55
55
|
indep_var_header.append(pj[cfg.INDEPENDENT_VARIABLES][idx]["label"])
|
|
56
56
|
column_type.append(pj[cfg.INDEPENDENT_VARIABLES][idx]["type"])
|
|
57
57
|
|
|
58
|
-
state_events_list = [
|
|
59
|
-
pj[cfg.ETHOGRAM][x][cfg.BEHAVIOR_CODE] for x in pj[cfg.ETHOGRAM] if cfg.STATE in pj[cfg.ETHOGRAM][x][cfg.TYPE].upper()
|
|
60
|
-
]
|
|
58
|
+
state_events_list = util.state_behavior_codes(pj[cfg.ETHOGRAM])
|
|
61
59
|
|
|
62
60
|
data: list = []
|
|
63
61
|
not_paired: list = []
|
boris/select_subj_behav.py
CHANGED
|
@@ -38,6 +38,8 @@ def choose_obs_subj_behav_category(
|
|
|
38
38
|
selected_observations: list,
|
|
39
39
|
start_coding: Optional[dec] = dec("NaN"), # Union[..., None]
|
|
40
40
|
end_coding: Optional[dec] = dec("NaN"),
|
|
41
|
+
start_interval: Optional[dec] = dec("NaN"),
|
|
42
|
+
end_interval: Optional[dec] = dec("NaN"),
|
|
41
43
|
maxTime: Optional[dec] = None,
|
|
42
44
|
show_include_modifiers: bool = True,
|
|
43
45
|
show_exclude_non_coded_behaviors: bool = True,
|
|
@@ -66,7 +68,7 @@ def choose_obs_subj_behav_category(
|
|
|
66
68
|
"selected behaviors": selectedBehaviors,
|
|
67
69
|
"include modifiers": True/False,
|
|
68
70
|
"exclude behaviors": True/False,
|
|
69
|
-
"time": TIME_FULL_OBS / TIME_EVENTS / TIME_ARBITRARY_INTERVAL
|
|
71
|
+
"time": TIME_FULL_OBS / TIME_EVENTS / TIME_ARBITRARY_INTERVAL / TIME_OBS_INTERVAL
|
|
70
72
|
"start time": startTime,
|
|
71
73
|
"end time": endTime
|
|
72
74
|
}
|
|
@@ -97,6 +99,8 @@ def choose_obs_subj_behav_category(
|
|
|
97
99
|
paramPanelWindow.media_duration = maxTime
|
|
98
100
|
paramPanelWindow.start_coding = start_coding
|
|
99
101
|
paramPanelWindow.end_coding = end_coding
|
|
102
|
+
paramPanelWindow.start_interval = start_interval
|
|
103
|
+
paramPanelWindow.end_interval = end_interval
|
|
100
104
|
|
|
101
105
|
if self.timeFormat == cfg.S:
|
|
102
106
|
paramPanelWindow.start_time.rb_seconds.setChecked(True)
|
|
@@ -112,6 +116,7 @@ def choose_obs_subj_behav_category(
|
|
|
112
116
|
paramPanelWindow.rb_observed_events.setEnabled(False)
|
|
113
117
|
paramPanelWindow.frm_time_interval.setVisible(False)
|
|
114
118
|
paramPanelWindow.rb_user_defined.setVisible(False)
|
|
119
|
+
paramPanelWindow.rb_obs_interval.setVisible(False)
|
|
115
120
|
paramPanelWindow.rb_media_duration.setVisible(False)
|
|
116
121
|
else:
|
|
117
122
|
paramPanelWindow.frm_time_interval.setEnabled(False)
|
|
@@ -242,6 +247,10 @@ def choose_obs_subj_behav_category(
|
|
|
242
247
|
)
|
|
243
248
|
return {cfg.SELECTED_SUBJECTS: [], cfg.SELECTED_BEHAVIORS: []}
|
|
244
249
|
|
|
250
|
+
elif paramPanelWindow.rb_obs_interval.isChecked() and not ((start_interval is None) or start_interval.is_nan()):
|
|
251
|
+
startTime = paramPanelWindow.start_time.get_time()
|
|
252
|
+
endTime = paramPanelWindow.end_time.get_time()
|
|
253
|
+
|
|
245
254
|
else:
|
|
246
255
|
startTime = None
|
|
247
256
|
endTime = None
|
|
@@ -255,6 +264,8 @@ def choose_obs_subj_behav_category(
|
|
|
255
264
|
time_param = cfg.TIME_FULL_OBS
|
|
256
265
|
if paramPanelWindow.rb_observed_events.isChecked():
|
|
257
266
|
time_param = cfg.TIME_EVENTS
|
|
267
|
+
if paramPanelWindow.rb_obs_interval.isChecked():
|
|
268
|
+
time_param = cfg.TIME_OBS_INTERVAL
|
|
258
269
|
if paramPanelWindow.rb_user_defined.isChecked():
|
|
259
270
|
time_param = cfg.TIME_ARBITRARY_INTERVAL
|
|
260
271
|
|
boris/synthetic_time_budget.py
CHANGED
|
@@ -64,11 +64,15 @@ def synthetic_time_budget(self) -> None:
|
|
|
64
64
|
|
|
65
65
|
start_coding, end_coding, _ = observation_operations.coding_time(self.pj[cfg.OBSERVATIONS], selected_observations)
|
|
66
66
|
|
|
67
|
+
start_interval, end_interval = observation_operations.time_intervals_range(self.pj[cfg.OBSERVATIONS], selected_observations)
|
|
68
|
+
|
|
67
69
|
synth_tb_param = select_subj_behav.choose_obs_subj_behav_category(
|
|
68
70
|
self,
|
|
69
71
|
selected_observations,
|
|
70
72
|
start_coding=start_coding,
|
|
71
73
|
end_coding=end_coding,
|
|
74
|
+
start_interval=start_interval,
|
|
75
|
+
end_interval=end_interval,
|
|
72
76
|
maxTime=max_media_duration_all_obs,
|
|
73
77
|
show_exclude_non_coded_behaviors=False,
|
|
74
78
|
by_category=False,
|
|
@@ -179,6 +183,8 @@ def synthetic_binned_time_budget(self) -> None:
|
|
|
179
183
|
|
|
180
184
|
start_coding, end_coding, _ = observation_operations.coding_time(self.pj[cfg.OBSERVATIONS], selected_observations)
|
|
181
185
|
|
|
186
|
+
start_interval, end_interval = observation_operations.time_intervals_range(self.pj[cfg.OBSERVATIONS], selected_observations)
|
|
187
|
+
|
|
182
188
|
# exit with message if events do not have timestamp
|
|
183
189
|
if start_coding.is_nan():
|
|
184
190
|
QMessageBox.critical(
|
|
@@ -195,6 +201,8 @@ def synthetic_binned_time_budget(self) -> None:
|
|
|
195
201
|
selected_observations,
|
|
196
202
|
start_coding=start_coding,
|
|
197
203
|
end_coding=end_coding,
|
|
204
|
+
start_interval=start_interval,
|
|
205
|
+
end_interval=end_interval,
|
|
198
206
|
maxTime=max_media_duration_all_obs,
|
|
199
207
|
show_exclude_non_coded_behaviors=False,
|
|
200
208
|
by_category=False,
|
boris/time_budget_functions.py
CHANGED
|
@@ -35,14 +35,14 @@ from . import project_functions
|
|
|
35
35
|
from . import observation_operations
|
|
36
36
|
|
|
37
37
|
|
|
38
|
-
def default_value(ethogram: dict,
|
|
38
|
+
def default_value(ethogram: dict, behavior_code: str, param):
|
|
39
39
|
"""
|
|
40
40
|
return value for duration in case of point event
|
|
41
41
|
"""
|
|
42
42
|
default_value_ = 0.0
|
|
43
|
-
|
|
43
|
+
behavior_type = project_functions.event_type(behavior_code, ethogram)
|
|
44
44
|
|
|
45
|
-
if
|
|
45
|
+
if behavior_type in cfg.POINT_EVENT_TYPES and param in (
|
|
46
46
|
"duration",
|
|
47
47
|
"duration mean",
|
|
48
48
|
"duration stdev",
|
|
@@ -50,7 +50,7 @@ def default_value(ethogram: dict, behav: str, param):
|
|
|
50
50
|
):
|
|
51
51
|
default_value_ = cfg.NA
|
|
52
52
|
|
|
53
|
-
if
|
|
53
|
+
if behavior_type in cfg.STATE_EVENT_TYPES and param in (
|
|
54
54
|
"duration mean",
|
|
55
55
|
"duration stdev",
|
|
56
56
|
):
|
|
@@ -259,6 +259,13 @@ def synthetic_time_budget_bin(pj: dict, selected_observations: list, parameters_
|
|
|
259
259
|
min_time = dec(start_time)
|
|
260
260
|
max_time = dec(end_time)
|
|
261
261
|
|
|
262
|
+
if time_interval == cfg.TIME_OBS_INTERVAL:
|
|
263
|
+
obs_interval = pj[cfg.OBSERVATIONS][obs_id][cfg.OBSERVATION_TIME_INTERVAL]
|
|
264
|
+
offset = pj[cfg.OBSERVATIONS][obs_id][cfg.TIME_OFFSET]
|
|
265
|
+
min_time = dec(obs_interval[0]) + offset
|
|
266
|
+
# Use max media duration for max time if no interval is defined (=0)
|
|
267
|
+
max_time = dec(obs_interval[1]) + offset if obs_interval[1] != 0 else dec(obs_length)
|
|
268
|
+
|
|
262
269
|
events_interval = {}
|
|
263
270
|
mem_events_interval = {}
|
|
264
271
|
|
|
@@ -324,7 +331,7 @@ def synthetic_time_budget_bin(pj: dict, selected_observations: list, parameters_
|
|
|
324
331
|
behaviors[subject][behav]["number"] = nocc
|
|
325
332
|
|
|
326
333
|
behav_type = project_functions.event_type(behav[0], pj[cfg.ETHOGRAM])
|
|
327
|
-
if behav_type
|
|
334
|
+
if behav_type in cfg.STATE_EVENT_TYPES:
|
|
328
335
|
dur = interval_len(interval_intersec)
|
|
329
336
|
behaviors[subject][behav]["duration"] = f"{dur:.3f}"
|
|
330
337
|
behaviors[subject][behav]["duration mean"] = f"{interval_mean(interval_intersec):.3f}"
|
|
@@ -336,7 +343,7 @@ def synthetic_time_budget_bin(pj: dict, selected_observations: list, parameters_
|
|
|
336
343
|
proportion = dur / ((time_bin_end - time_bin_start) - time_to_subtract)
|
|
337
344
|
behaviors[subject][behav]["proportion of time"] = f"{proportion:.3f}"
|
|
338
345
|
|
|
339
|
-
if behav_type
|
|
346
|
+
if behav_type in cfg.POINT_EVENT_TYPES:
|
|
340
347
|
behaviors[subject][behav]["duration"] = cfg.NA
|
|
341
348
|
behaviors[subject][behav]["duration mean"] = cfg.NA
|
|
342
349
|
behaviors[subject][behav]["duration stdev"] = cfg.NA
|
|
@@ -696,7 +703,7 @@ def time_budget_analysis(
|
|
|
696
703
|
|
|
697
704
|
if not distinct_modifiers:
|
|
698
705
|
if not parameters[cfg.EXCLUDE_BEHAVIORS]:
|
|
699
|
-
if
|
|
706
|
+
if project_functions.event_type(behavior, ethogram) in cfg.STATE_EVENT_TYPES:
|
|
700
707
|
# check if observation from pictures
|
|
701
708
|
if parameters["start time"] == dec("0.000") and parameters["end time"] == dec("0.000"):
|
|
702
709
|
duration = cfg.NA
|
|
@@ -732,10 +739,8 @@ def time_budget_analysis(
|
|
|
732
739
|
)
|
|
733
740
|
continue
|
|
734
741
|
|
|
735
|
-
if
|
|
742
|
+
if project_functions.event_type(behavior, ethogram) in cfg.POINT_EVENT_TYPES:
|
|
736
743
|
for modifier in distinct_modifiers:
|
|
737
|
-
print(f"{modifier=}")
|
|
738
|
-
|
|
739
744
|
cursor.execute(
|
|
740
745
|
(
|
|
741
746
|
"SELECT occurence, observation FROM events "
|
|
@@ -806,7 +811,7 @@ def time_budget_analysis(
|
|
|
806
811
|
}
|
|
807
812
|
)
|
|
808
813
|
|
|
809
|
-
if
|
|
814
|
+
if project_functions.event_type(behavior, ethogram) in cfg.STATE_EVENT_TYPES:
|
|
810
815
|
for modifier in distinct_modifiers:
|
|
811
816
|
cursor.execute(
|
|
812
817
|
(
|
|
@@ -920,9 +925,9 @@ def time_budget_analysis(
|
|
|
920
925
|
)
|
|
921
926
|
|
|
922
927
|
else: # no modifiers
|
|
923
|
-
if
|
|
928
|
+
if project_functions.event_type(behavior, ethogram) in cfg.POINT_EVENT_TYPES:
|
|
924
929
|
cursor.execute(
|
|
925
|
-
("SELECT occurence, observation FROM events
|
|
930
|
+
("SELECT occurence, observation FROM events WHERE subject = ? AND code = ? ORDER BY observation, occurence"),
|
|
926
931
|
(subject, behavior),
|
|
927
932
|
)
|
|
928
933
|
|
|
@@ -985,7 +990,7 @@ def time_budget_analysis(
|
|
|
985
990
|
}
|
|
986
991
|
)
|
|
987
992
|
|
|
988
|
-
if
|
|
993
|
+
if project_functions.event_type(behavior, ethogram) in cfg.STATE_EVENT_TYPES:
|
|
989
994
|
cursor.execute(
|
|
990
995
|
("SELECT occurence, observation FROM events WHERE subject = ? AND code = ? ORDER BY observation, occurence"),
|
|
991
996
|
(subject, behavior),
|
|
@@ -1116,7 +1121,7 @@ def time_budget_analysis(
|
|
|
1116
1121
|
if category not in categories[subject]:
|
|
1117
1122
|
categories[subject][category] = {"duration": 0, "number": 0}
|
|
1118
1123
|
|
|
1119
|
-
if
|
|
1124
|
+
if project_functions.event_type(behav["behavior"], ethogram) in cfg.STATE_EVENT_TYPES:
|
|
1120
1125
|
if behav["duration"] not in ("-", cfg.NA) and categories[subject][category]["duration"] not in (
|
|
1121
1126
|
"-",
|
|
1122
1127
|
cfg.NA,
|
boris/time_budget_widget.py
CHANGED
|
@@ -429,11 +429,15 @@ def time_budget(self, mode: str, mode2: str = "list"):
|
|
|
429
429
|
|
|
430
430
|
start_coding, end_coding, _ = observation_operations.coding_time(self.pj[cfg.OBSERVATIONS], selected_observations)
|
|
431
431
|
|
|
432
|
+
start_interval, end_interval = observation_operations.time_intervals_range(self.pj[cfg.OBSERVATIONS], selected_observations)
|
|
433
|
+
|
|
432
434
|
parameters: dict = select_subj_behav.choose_obs_subj_behav_category(
|
|
433
435
|
self,
|
|
434
436
|
selected_observations,
|
|
435
437
|
start_coding=start_coding,
|
|
436
438
|
end_coding=end_coding,
|
|
439
|
+
start_interval=start_interval,
|
|
440
|
+
end_interval=end_interval,
|
|
437
441
|
maxTime=max_media_duration_all_obs,
|
|
438
442
|
by_category=(mode == "by_category"),
|
|
439
443
|
n_observations=len(selected_observations),
|
|
@@ -452,9 +456,9 @@ def time_budget(self, mode: str, mode2: str = "list"):
|
|
|
452
456
|
if start_coding is not None and not start_coding.is_nan():
|
|
453
457
|
cancel_pressed, parameters[cfg.EXCLUDED_BEHAVIORS] = self.filter_behaviors(
|
|
454
458
|
title="Select behaviors to exclude from the total time",
|
|
455
|
-
text=("The duration of the selected behaviors will
|
|
459
|
+
text=("The duration of the selected behaviors will be subtracted from the total time"),
|
|
456
460
|
table="",
|
|
457
|
-
behavior_type=
|
|
461
|
+
behavior_type=cfg.STATE_EVENT_TYPES,
|
|
458
462
|
)
|
|
459
463
|
if cancel_pressed:
|
|
460
464
|
return
|
|
@@ -497,6 +501,13 @@ def time_budget(self, mode: str, mode2: str = "list"):
|
|
|
497
501
|
except Exception:
|
|
498
502
|
max_time = float(obs_length)
|
|
499
503
|
|
|
504
|
+
if parameters[cfg.TIME_INTERVAL] == cfg.TIME_OBS_INTERVAL:
|
|
505
|
+
obs_interval = self.pj[cfg.OBSERVATIONS][obsId][cfg.OBSERVATION_TIME_INTERVAL]
|
|
506
|
+
offset = float(self.pj[cfg.OBSERVATIONS][obsId][cfg.TIME_OFFSET])
|
|
507
|
+
min_time = float(obs_interval[0]) + offset
|
|
508
|
+
# Use max media duration for max time if no interval is defined (=0)
|
|
509
|
+
max_time = float(obs_interval[1]) + offset if obs_interval[1] != 0 else float(obs_length)
|
|
510
|
+
|
|
500
511
|
if parameters[cfg.TIME_INTERVAL] == cfg.TIME_EVENTS: # events duration
|
|
501
512
|
try:
|
|
502
513
|
min_time = float(self.pj[cfg.OBSERVATIONS][obsId][cfg.EVENTS][0][0]) # first event
|
|
@@ -516,7 +527,7 @@ def time_budget(self, mode: str, mode2: str = "list"):
|
|
|
516
527
|
for subj in parameters[cfg.SELECTED_SUBJECTS]:
|
|
517
528
|
for behav in parameters[cfg.SELECTED_BEHAVIORS]:
|
|
518
529
|
# if cfg.POINT in self.eventType(behav).upper():
|
|
519
|
-
if
|
|
530
|
+
if project_functions.event_type(behav, self.pj[cfg.ETHOGRAM]) in cfg.POINT_EVENT_TYPES:
|
|
520
531
|
continue
|
|
521
532
|
|
|
522
533
|
# extract modifiers
|
|
@@ -564,7 +575,7 @@ def time_budget(self, mode: str, mode2: str = "list"):
|
|
|
564
575
|
% 2
|
|
565
576
|
):
|
|
566
577
|
cursor.execute(
|
|
567
|
-
("INSERT INTO events (observation, subject, code, type, modifiers, occurence)
|
|
578
|
+
("INSERT INTO events (observation, subject, code, type, modifiers, occurence) VALUES (?,?,?,?,?,?)"),
|
|
568
579
|
(obsId, subj, behav, "STATE", modifier[0], max_time),
|
|
569
580
|
)
|
|
570
581
|
try:
|
|
@@ -853,7 +864,7 @@ def time_budget(self, mode: str, mode2: str = "list"):
|
|
|
853
864
|
# check intervals
|
|
854
865
|
for subj in parameters[cfg.SELECTED_SUBJECTS]:
|
|
855
866
|
for behav in parameters[cfg.SELECTED_BEHAVIORS]:
|
|
856
|
-
if
|
|
867
|
+
if project_functions.event_type(behav, self.pj[cfg.ETHOGRAM]) in cfg.POINT_EVENT_TYPES:
|
|
857
868
|
continue
|
|
858
869
|
|
|
859
870
|
cursor.execute(
|
|
@@ -877,7 +888,7 @@ def time_budget(self, mode: str, mode2: str = "list"):
|
|
|
877
888
|
% 2
|
|
878
889
|
):
|
|
879
890
|
cursor.execute(
|
|
880
|
-
("INSERT INTO events (observation, subject, code, type, modifiers, occurence)
|
|
891
|
+
("INSERT INTO events (observation, subject, code, type, modifiers, occurence) VALUES (?,?,?,?,?,?)"),
|
|
881
892
|
(obsId, subj, behav, "STATE", modifier[0], min_time),
|
|
882
893
|
)
|
|
883
894
|
if (
|
|
@@ -893,7 +904,7 @@ def time_budget(self, mode: str, mode2: str = "list"):
|
|
|
893
904
|
% 2
|
|
894
905
|
):
|
|
895
906
|
cursor.execute(
|
|
896
|
-
("INSERT INTO events (observation, subject, code, type, modifiers, occurence)
|
|
907
|
+
("INSERT INTO events (observation, subject, code, type, modifiers, occurence) VALUES (?,?,?,?,?,?)"),
|
|
897
908
|
(obsId, subj, behav, cfg.STATE, modifier[0], max_time),
|
|
898
909
|
)
|
|
899
910
|
try:
|
boris/utilities.py
CHANGED
|
@@ -522,7 +522,7 @@ def behav_category_user_color(behavioral_categories: dict, name: str) -> Union[s
|
|
|
522
522
|
|
|
523
523
|
def state_behavior_codes(ethogram: dict) -> list:
|
|
524
524
|
"""
|
|
525
|
-
behavior codes defined as STATE event
|
|
525
|
+
returns a list of behavior codes defined as STATE event
|
|
526
526
|
|
|
527
527
|
Args:
|
|
528
528
|
ethogram (dict): ethogram dictionary
|
|
@@ -531,12 +531,12 @@ def state_behavior_codes(ethogram: dict) -> list:
|
|
|
531
531
|
list: list of behavior codes defined as STATE event
|
|
532
532
|
|
|
533
533
|
"""
|
|
534
|
-
return [ethogram[x][cfg.BEHAVIOR_CODE] for x in ethogram if ethogram[x][cfg.TYPE] in
|
|
534
|
+
return [ethogram[x][cfg.BEHAVIOR_CODE] for x in ethogram if ethogram[x][cfg.TYPE] in cfg.STATE_EVENT_TYPES]
|
|
535
535
|
|
|
536
536
|
|
|
537
537
|
def point_behavior_codes(ethogram: dict) -> list:
|
|
538
538
|
"""
|
|
539
|
-
behavior codes defined as POINT event
|
|
539
|
+
returns a list of behavior codes defined as POINT event
|
|
540
540
|
|
|
541
541
|
Args:
|
|
542
542
|
ethogram (dict): ethogram dictionary
|
boris/version.py
CHANGED
boris/write_event.py
CHANGED
|
@@ -381,7 +381,8 @@ def write_event(self, event: dict, mem_time: dec) -> int:
|
|
|
381
381
|
behavior_to_stop = [
|
|
382
382
|
self.pj[cfg.ETHOGRAM][x]
|
|
383
383
|
for x in self.pj[cfg.ETHOGRAM]
|
|
384
|
-
if self.pj[cfg.ETHOGRAM][x][cfg.BEHAVIOR_CODE] == cs
|
|
384
|
+
if self.pj[cfg.ETHOGRAM][x][cfg.BEHAVIOR_CODE] == cs
|
|
385
|
+
and self.pj[cfg.ETHOGRAM][x]["type"] in (cfg.STATE_EVENT, cfg.STATE_EVENT_WITH_CODING_MAP)
|
|
385
386
|
]
|
|
386
387
|
if behavior_to_stop:
|
|
387
388
|
behavior_to_stop = behavior_to_stop[0]
|
|
@@ -3,34 +3,34 @@ boris/__main__.py,sha256=ANjTbXgXDoz2nB1tCtOIllfIVotCa602iebACX7rXaE,764
|
|
|
3
3
|
boris/about.py,sha256=KEUz6nryrg8FceVyFsf8sMz-xWd2cGwIUfuVydHxqC4,5366
|
|
4
4
|
boris/add_modifier.py,sha256=DWqxkKDBm21QH_kPvhpnltwLtFvPxne0VmZ1SY26hj8,26340
|
|
5
5
|
boris/add_modifier_ui.py,sha256=Y7TLO5uS6zW7zpjXmjA4V_VIp_bFDNtjOTbJ9Q6m-mQ,11601
|
|
6
|
-
boris/advanced_event_filtering.py,sha256=
|
|
6
|
+
boris/advanced_event_filtering.py,sha256=DyPHEj2QsTpkkYjBD0iMXqFYCkrMjMcmp1MOuSITtGk,15411
|
|
7
7
|
boris/behav_coding_map_creator.py,sha256=PSEYMLvOwt0HR7H4kQZl6dli3q89wezWMv-Ri3EZWWc,37443
|
|
8
|
-
boris/behavior_binary_table.py,sha256=
|
|
8
|
+
boris/behavior_binary_table.py,sha256=SsaPrXyGXwWYPJ_4R0BlfqeV-q1n0vGNDo0HB3ZmQi8,12426
|
|
9
9
|
boris/behaviors_coding_map.py,sha256=Pat6U2JHxH8epWH42ZlwzZJ0Rmgl-BKQ5KARjp3GbNg,7291
|
|
10
10
|
boris/boris_cli.py,sha256=n0OiVvZM1gM6E7yKaff9wlgmpAGK4TK052VRi8AabJo,13196
|
|
11
11
|
boris/cmd_arguments.py,sha256=oWb-FvhKLbKJhATlTHy9muWu8XnnUfOZ-3Fmz2M8Yzc,1848
|
|
12
12
|
boris/coding_pad.py,sha256=fBKdp7DDyupySJosIYtqNd8s2E-GruzCgVhDFsoVWKE,10986
|
|
13
|
-
boris/config.py,sha256=
|
|
14
|
-
boris/config_file.py,sha256=
|
|
15
|
-
boris/connections.py,sha256=
|
|
13
|
+
boris/config.py,sha256=cy4MSVFMHYaEHpHdncljuiaMSTpV6rFNm1OyVYF28Bc,17295
|
|
14
|
+
boris/config_file.py,sha256=1-2ZmTvKET57rwrLR1dXblt0AxMpGB1LAiHxu-Sy8es,13543
|
|
15
|
+
boris/connections.py,sha256=y_KkIj3WQQEepJASATHBpZaqwT-ERyFNovy2Q8e7FAA,19321
|
|
16
16
|
boris/converters.py,sha256=c1Jps-URoglY5ILQHz-pCCf6-4DFUHZLtqr_ofsrFg0,11722
|
|
17
17
|
boris/converters_ui.py,sha256=uu7LOBV_fKv2DBdOqsqPwjGsjgONr5ODBoscAA-EP48,9900
|
|
18
|
-
boris/cooccurence.py,sha256=
|
|
19
|
-
boris/core.py,sha256=
|
|
18
|
+
boris/cooccurence.py,sha256=NV3lPhzKptyYh_pSjx1a_FqwaKstqIwj46GpNcyJ4aY,10236
|
|
19
|
+
boris/core.py,sha256=ncIjy9W5jDKkdmytTNGwq2qscZVlZ0tMd9bOOro_9dg,237708
|
|
20
20
|
boris/core_qrc.py,sha256=T3ki5e2Pj0I0QBGz63MPUgZzl8F_VHZwSq074mRNBDU,650669
|
|
21
21
|
boris/core_ui.py,sha256=SeC26uveDCjrCBLsRPuQ6FaapKfON_HIRcQStEDLhl4,76384
|
|
22
22
|
boris/db_functions.py,sha256=Uw9wWH_Pe-qNzpV1k21YG_jKsoOmfY_iiK_7ARZHGDc,13352
|
|
23
23
|
boris/dev.py,sha256=9pUElbjl9g17rFUJXX5aVSu55_iIKIuDxNdrB0DI_d0,3671
|
|
24
|
-
boris/dialog.py,sha256=
|
|
24
|
+
boris/dialog.py,sha256=IAX5_CtTfEUGm5lhzxajjx0oVTs8HNEAw2twTW8AmkE,32859
|
|
25
25
|
boris/duration_widget.py,sha256=GjZgCAMGOcsNjoPiRImEVe6yMkH2vuNoh44ulpd5nlg,6924
|
|
26
|
-
boris/edit_event.py,sha256=
|
|
26
|
+
boris/edit_event.py,sha256=2hpxn9DYuJW1CK02hF4iU0--J_0C_KTiN9gGZ1frJBc,7678
|
|
27
27
|
boris/edit_event_ui.py,sha256=vhglQrhkF9tt0HVlkXnkG7symW0eOFA7nhbk6l_qn3k,7772
|
|
28
|
-
boris/event_operations.py,sha256=
|
|
28
|
+
boris/event_operations.py,sha256=ys1DxZ6iooMvvq_hzpPVZSW0dF9Trbx921XV3jeKOxw,38209
|
|
29
29
|
boris/events_cursor.py,sha256=VPY_ygD0fxE5lp25mcd2l00XQXurCR6hprffF4tKRbU,2078
|
|
30
|
-
boris/events_snapshots.py,sha256=
|
|
30
|
+
boris/events_snapshots.py,sha256=PjWzQvUGQtIcEc_7FDsRphf7fAhhTccQgYc2eQSA65g,27621
|
|
31
31
|
boris/exclusion_matrix.py,sha256=ff88xD6aqc8bpIuj9ZCz9ju_HeqqgibQwoaJrIOJ6RI,5272
|
|
32
|
-
boris/export_events.py,sha256
|
|
33
|
-
boris/export_observation.py,sha256=
|
|
32
|
+
boris/export_events.py,sha256=YoqE0vHXeDMAk28e6rewI3TODdfMr8YbJsNnJqiXv0Y,39720
|
|
33
|
+
boris/export_observation.py,sha256=uPJH_5MXqGm4JSeaSlTikh1i6OKSyLIaZFzS9wp-9qk,50729
|
|
34
34
|
boris/external_processes.py,sha256=vpmhA4Lj2GblBIrDD0YjesB8HPOgx4K9gSWVhTop4Cg,11927
|
|
35
35
|
boris/geometric_measurement.py,sha256=4pI-AYpBSFlJBqS-f8dnkgLtj_Z2E5kwwAdh6WwZ4kk,35049
|
|
36
36
|
boris/gui_utilities.py,sha256=402qypJ44JkcZ1PDeV79j8Z9faQ473TzEkjjO-scBz0,4170
|
|
@@ -47,15 +47,15 @@ boris/mpv-1.0.3.py,sha256=EXRtzQqFjOn4wMC6482Ilq3fNQ9N1GRP1VxwLzdeaBY,88077
|
|
|
47
47
|
boris/mpv.py,sha256=EfzIHjPbgewG4w3smEtqEUPZoVwYmMQkL4Q8ZyW-a58,76410
|
|
48
48
|
boris/mpv2.py,sha256=IUI4t4r9GYX7G5OXTjd3RhMMOkDdfal_15buBgksLsk,92152
|
|
49
49
|
boris/observation.py,sha256=oop08nflDLZAgDbIB8GOiVdTgLhppJ_ODH0Z24cyqvE,57176
|
|
50
|
-
boris/observation_operations.py,sha256=
|
|
50
|
+
boris/observation_operations.py,sha256=w295Vlj6qparn7xcdh1tkwgXXx2QTnq9J6KUJGh1zvg,105533
|
|
51
51
|
boris/observation_ui.py,sha256=DAnU94QBNvkLuHT6AxTwqSk_D_n6VUhSl8PexZv_dUk,33309
|
|
52
52
|
boris/observations_list.py,sha256=NqwECGHtHYmKhSe-qCfqPmJ24SSfzlXvIXS2i3op_zE,10591
|
|
53
53
|
boris/otx_parser.py,sha256=70QvilzFHXbjAHR88YH0aEXJ3xxheLS5fZGgHFHGpNE,16367
|
|
54
|
-
boris/param_panel.py,sha256=
|
|
55
|
-
boris/param_panel_ui.py,sha256=
|
|
54
|
+
boris/param_panel.py,sha256=Sna2SlJt1CSUEE_bNX2X6ibFjs2Um0-ZjtQf5-JlJTc,8693
|
|
55
|
+
boris/param_panel_ui.py,sha256=4emQDFmuL4_R7bKxosLjdUb-VSPWkDm7suy38F5EKcA,13260
|
|
56
56
|
boris/player_dock_widget.py,sha256=VBuuGoAb2D027oFnMBlIQPiSQcEdedhoQltNFSJq8mw,5982
|
|
57
57
|
boris/plot_data_module.py,sha256=6QbLKfyGp4TYRyHnB9G45y5XrpeXLytcorltEAWfYak,16562
|
|
58
|
-
boris/plot_events.py,sha256=
|
|
58
|
+
boris/plot_events.py,sha256=hA_Yt-ZaxbAOKjN7gYHiaEx5TPR-7HIWGJXXg4cq6lw,24048
|
|
59
59
|
boris/plot_events_rt.py,sha256=xig__Uea3mQqO5raMBVB3pm3vuQkjAbJpwSS7AwIob8,8327
|
|
60
60
|
boris/plot_spectrogram_rt.py,sha256=JV8N7T8133wGVhlPxmgOb426u1g1p21-LbTqgaeddkk,8361
|
|
61
61
|
boris/plot_waveform_rt.py,sha256=05JN_6HCq674ROore_6PNw93GQNZJQDlDxp2ODAFkkA,7474
|
|
@@ -63,41 +63,41 @@ boris/plugins.py,sha256=2RyrS3fdJ2lA8FhG_qymDCfaFyzK3TaRy2ll3yHjlz4,2817
|
|
|
63
63
|
boris/preferences.py,sha256=qPfd9Tyg7u30kXwVqMOgkdy2RXri9bItRa5U2-ZVQmg,16847
|
|
64
64
|
boris/preferences_ui.py,sha256=D2bFLb3E0m6IwSeqKoItRDiqvPmJGoeXLHF2K02n1Zo,26293
|
|
65
65
|
boris/project.py,sha256=hAeAb5pD0u_l0bezU9ePvbTOYQKfxrFGvYB2NAqSDHg,84377
|
|
66
|
-
boris/project_functions.py,sha256=
|
|
67
|
-
boris/project_import_export.py,sha256=
|
|
66
|
+
boris/project_functions.py,sha256=Bu-HD58uYL__v2ih5OhQnVF22_lPrnvX3LCw4wheC1I,79251
|
|
67
|
+
boris/project_import_export.py,sha256=1FdsYFzZ_jrhPRaH7xEkcPnh-hQXN4HFz1PhsIsSoL8,38361
|
|
68
68
|
boris/project_ui.py,sha256=yB-ewhHt8S8DTTRIk-dNK2tPMNU24lNji9fDW_Xazu8,38805
|
|
69
69
|
boris/qrc_boris.py,sha256=aH-qUirYY1CGxmTK1SFCPvuZfazIHX4DdUKF1gxZeYM,675008
|
|
70
70
|
boris/qrc_boris5.py,sha256=prnOw7VGXWXRuVCYp_yIrmWhrlG1F9rx-3BQvkPenjY,161608
|
|
71
71
|
boris/select_modifiers.py,sha256=42uG9F75pfPoPJ-blp-vFgmpBpVJtL42FlIxpNpq9z4,13319
|
|
72
|
-
boris/select_observations.py,sha256=
|
|
73
|
-
boris/select_subj_behav.py,sha256=
|
|
72
|
+
boris/select_observations.py,sha256=HM0suMes1YxVwQ-Xakw7ROaxbN0EyeSiZFZNrTQIHAA,7886
|
|
73
|
+
boris/select_subj_behav.py,sha256=5ln2e83nVEcMW1TTeOE5K1gqd4lSvh7LeiSfhloZPrU,11537
|
|
74
74
|
boris/state_events.py,sha256=R5CcT_cldnxqhQkvX_V1AMNxH0Nc6jLzMZYiWkeJwAE,7770
|
|
75
75
|
boris/subjects_pad.py,sha256=lSRRGfLfD10_YpGua8RGVdKhoXlsXawGhNibPkRhuzM,3541
|
|
76
|
-
boris/synthetic_time_budget.py,sha256=
|
|
77
|
-
boris/time_budget_functions.py,sha256=
|
|
78
|
-
boris/time_budget_widget.py,sha256=
|
|
76
|
+
boris/synthetic_time_budget.py,sha256=NwJt6TO6XZwxF2s7ETvqiDEqrz9ad30g1sQ0bVBsN9o,10364
|
|
77
|
+
boris/time_budget_functions.py,sha256=1-7_G84SDs7rp1EWr5zHInzRVDUkUdIfm_AX0516ceQ,52539
|
|
78
|
+
boris/time_budget_widget.py,sha256=_yYzLa6aJRWHRataek_ciXMEKGW75HA9y0auhAJwzbA,43137
|
|
79
79
|
boris/transitions.py,sha256=_aZJfJWv3EBrtmQ7qsdTCayQo6uWU7BXqtQQgflEhr4,12250
|
|
80
|
-
boris/utilities.py,sha256=
|
|
81
|
-
boris/version.py,sha256=
|
|
80
|
+
boris/utilities.py,sha256=zwWpH-lozAUj_8K6Gf2Hl-BSW0aRdWo37HGXTWQ86qk,52782
|
|
81
|
+
boris/version.py,sha256=MwBl656ww2Munfb847fzP6VQ6OX5HrRbTL8ngrLBaS8,787
|
|
82
82
|
boris/video_equalizer.py,sha256=FartoGghFK-T53zklP70rPKYqTuzL8qdvfGlsOF2wwc,5854
|
|
83
83
|
boris/video_equalizer_ui.py,sha256=1CG3s79eM4JAbaCx3i1ILZXLceb41_gGXlOLNfpBgnw,10142
|
|
84
84
|
boris/video_operations.py,sha256=mh3iR__Sm2KnV44L_sW2pOo3AgLwlM7wiTnnqQiAVs4,9381
|
|
85
85
|
boris/view_df.py,sha256=AKScLASX2Uatw7rqPbsnio83eVT4GZYCFhL091eMvlY,3370
|
|
86
86
|
boris/view_df_ui.py,sha256=CaMeRH_vQ00CTDDFQn73ZZaS-r8BSTWpL-dMCFqzJ_Q,2775
|
|
87
|
-
boris/write_event.py,sha256=
|
|
87
|
+
boris/write_event.py,sha256=jKZWzvDvQ-wwFvTLjA-zUjtXQCWwVC49Y5g-1UctpYw,23821
|
|
88
88
|
boris/analysis_plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
89
|
-
boris/analysis_plugins/number_of_occurences.py,sha256=
|
|
89
|
+
boris/analysis_plugins/number_of_occurences.py,sha256=U0NuU8leQixwDWlH26FsQmZl-wrvWKxNH_CWAWb8us4,1972
|
|
90
90
|
boris/analysis_plugins/number_of_occurences_by_independent_variable.py,sha256=fkyOuc1AiOSnrz7L6Ocd742XmDHhhQEtgi2KSiTOG4c,2252
|
|
91
|
-
boris/analysis_plugins/time_budget.py,sha256=
|
|
91
|
+
boris/analysis_plugins/time_budget.py,sha256=_eNv_9oxwa-L6pZVyATc8YNnsmUj_3Px2F0F3Y603p0,3547
|
|
92
92
|
boris/portion/__init__.py,sha256=ZBUG4I7YWhRkeWdP-JEpxhxldJlUYQkeaJseTjdhtJE,602
|
|
93
93
|
boris/portion/const.py,sha256=hEp26BKcEg1Js4DfZsBHmDtJJts83Tl1HWQ0CNJNwEc,1588
|
|
94
94
|
boris/portion/dict.py,sha256=SyHxc7PfDw2ufNLFQycwJtzmRfL48rDp4UrM2KN7IWc,11282
|
|
95
95
|
boris/portion/func.py,sha256=3TkQtFKLfsqntwd27HSGHceFhnXHmT-EbNMqktElC5Q,2174
|
|
96
96
|
boris/portion/interval.py,sha256=bAdUiJjGeUAPgsBAImwNeviiwfQq5odfhFZccAWzOTA,20299
|
|
97
97
|
boris/portion/io.py,sha256=ppNeRpiLNrocF1yzGeuEUIhYMf2LfsR-cji3d0nmvUs,6371
|
|
98
|
-
boris_behav_obs-9.
|
|
99
|
-
boris_behav_obs-9.
|
|
100
|
-
boris_behav_obs-9.
|
|
101
|
-
boris_behav_obs-9.
|
|
102
|
-
boris_behav_obs-9.
|
|
103
|
-
boris_behav_obs-9.
|
|
98
|
+
boris_behav_obs-9.1.1.dist-info/LICENSE.TXT,sha256=WJ7YI-moTFb-uVrFjnzzhGJrnL9P2iqQe8NuED3hutI,35141
|
|
99
|
+
boris_behav_obs-9.1.1.dist-info/METADATA,sha256=zuFFmX5VePSe15dz0kKJdQR-TulX0i47xsTTwUkEnLw,42102
|
|
100
|
+
boris_behav_obs-9.1.1.dist-info/WHEEL,sha256=SrDKpSbFN1G94qcmBqS9nyHcDMp9cUS9OC06hC0G3G0,109
|
|
101
|
+
boris_behav_obs-9.1.1.dist-info/entry_points.txt,sha256=-Vl37ZFjZYK5wTSDf5LAzd2cVLON1Pfy1xkx490Wxak,47
|
|
102
|
+
boris_behav_obs-9.1.1.dist-info/top_level.txt,sha256=fJSgm62S7WesiwTorGbOO4nNN0yzgZ3klgfGi3Px4qI,6
|
|
103
|
+
boris_behav_obs-9.1.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|