Source code for simba.ui.pop_ups.fsttc_pop_up
__author__ = "Simon Nilsson; sronilsson@gmail.com"
import os
from tkinter import *
from typing import Union
from simba.data_processors.fsttc_calculator import FSTTCCalculator
from simba.mixins.config_reader import ConfigReader
from simba.mixins.pop_up_mixin import PopUpMixin
from simba.ui.tkinter_functions import (CreateLabelFrameWithIcon, Entry_Box,
SimbaCheckbox)
from simba.utils.checks import check_int
from simba.utils.enums import Formats, Keys, Links
from simba.utils.errors import CountError
[docs]class FSTTCPopUp(PopUpMixin, ConfigReader):
def __init__(self,
config_path: Union[str, os.PathLike]):
ConfigReader.__init__(self, config_path=config_path, read_video_info=False)
if len(self.clf_names) < 2:
raise CountError(msg=f'Cannot compute FSTTC: Needs project with at least 2 classified behaviors, got {len(self.clf_names)}', source=self.__class__.__name__)
PopUpMixin.__init__(self, title="FORWARD SPIKE TIME TILING COEFFICIENTS", icon='dependency')
settings_frm = CreateLabelFrameWithIcon( parent=self.main_frm, header="SETTINGS", icon_name=Keys.DOCUMENTATION.value, icon_link=Links.FSTTC.value,)
self.time_delta_eb = Entry_Box(parent=settings_frm, fileDescription="TIME-DELTA", labelwidth=25, validation="numeric", entry_box_width=20, img='timer_2')
graph_cb, self.graph_cb_var = SimbaCheckbox(parent=settings_frm, font=Formats.FONT_REGULAR.value, val=False, txt_img='line_chart_blue', txt="CREATE GRAPH")
join_bouts_within_delta_cb, self.join_bouts_within_delta_var = SimbaCheckbox(parent=settings_frm, font=Formats.FONT_REGULAR.value, val=False, txt_img='join_purple', txt="JOIN BOUTS WITHIN TIME-DELTA")
time_delta_at_onset_cb, self.time_delta_at_onset_var = SimbaCheckbox(parent=settings_frm, font=Formats.FONT_REGULAR.value, val=False, txt_img='play', txt="TIME-DELTA AT BOUT START")
settings_frm.grid(row=0, column=0, sticky=NW)
self.time_delta_eb.grid(row=0, column=0, sticky="NW")
join_bouts_within_delta_cb.grid(row=1, column=0, sticky="NW")
time_delta_at_onset_cb.grid(row=2, column=0, sticky="NW")
graph_cb.grid(row=3, column=0, sticky="NW")
self.clf_cb_dict = self.create_cb_frame(main_frm=self.main_frm, cb_titles=self.clf_names, frm_title="BEHAVIORS")
self.create_run_frm(run_function=self.run, title="RUN")
self.main_frm.mainloop()
[docs] def run(self):
check_int("Time delta", value=self.time_delta_eb.entry_get)
targets = []
for behaviour, behavior_val in self.clf_cb_dict.items():
if behavior_val.get():
targets.append(behaviour)
if len(targets) < 2:
raise CountError(msg="FORWARD SPIKE TIME TILING COEFFICIENTS REQUIRE 2 OR MORE BEHAVIORS.", source=self.__class__.__name__,)
fsttc_calculator = FSTTCCalculator(config_path=self.config_path,
time_window=self.time_delta_eb.entry_get,
join_bouts_within_delta=self.join_bouts_within_delta_var.get(),
time_delta_at_onset=self.time_delta_at_onset_var.get(),
behavior_lst=targets,
create_graphs=self.graph_cb_var.get())
fsttc_calculator.run()
#_ = FSTTCPopUp(config_path=r"C:\troubleshooting\multi_animal_dlc_two_c57\project_folder\project_config.ini")
#_ = FSTTCPopUp(config_path=r"C:\troubleshooting\mitra\project_folder\project_config.ini")