예제 #1
0
 def __init__(self, parent, main, app: FastFlixApp, *args, **kwargs):
     super().__init__(parent, *args, **kwargs)
     self.main = main
     self.app = app
     self.widgets = Box()
     self.labels = Box()
     self.opts = Box()
     self.only_int = QtGui.QIntValidator()
     self.only_float = QtGui.QDoubleValidator()
예제 #2
0
    def append_more_cb(self):
        # print("---- append_more_cb()")
        # self.create_user_param()
        # self.scrollLayout.addRow(NewUserParam(self))
        for idx in range(5):
            # self.main_layout.addLayout(NewUserParam(self))
            hbox = QHBoxLayout()
            w = QCheckBox("")
            self.select.append(w)
            hbox.addWidget(w)

            w = QLineEdit()
            self.name.append(w)
            hbox.addWidget(w)

            w = QLineEdit()
            self.value.append(w)
            w.setValidator(QtGui.QDoubleValidator())
            hbox.addWidget(w)

            w = QLineEdit()
            w.setFixedWidth(self.units_width)
            self.units.append(w)
            hbox.addWidget(w)

            self.main_layout.addLayout(hbox)

            hbox = QHBoxLayout()
            w = QLabel("Desc:")
            hbox.addWidget(w)

            w = QLineEdit()
            self.description.append(w)
            hbox.addWidget(w)
            w.setStyleSheet("background-color: lightgray")

            # units = QLabel("micron^2/min")
            # units.setFixedWidth(units_width)
            # hbox.addWidget(units)
            self.main_layout.addLayout(hbox)

            self.count = self.count + 1
            print(self.count)
예제 #3
0
    def __init__(self):
        super().__init__()
        # global self.microenv_params

        self.param_d = {}  # a dict of dicts - rwh/todo, used anymore?
        # self.substrate = {}
        self.current_substrate = None
        self.xml_root = None
        self.celldef_tab = None
        self.new_substrate_count = 1

        # self.stacked_w = QStackedWidget()
        # self.stack_w = []
        # self.stack_w.append(QStackedWidget())
        # self.stacked_w.addWidget(self.stack_w[0])

        #---------------
        # self.cell_defs = CellDefInstances()
        self.microenv_hbox = QHBoxLayout()

        splitter = QSplitter()

        tree_widget_width = 160

        self.tree = QTreeWidget()  # tree is overkill; list would suffice; meh.
        # self.tree.setStyleSheet("background-color: lightgray")
        self.tree.setFixedWidth(tree_widget_width)
        # self.tree.currentChanged(self.tree_item_changed_cb)
        self.tree.itemClicked.connect(self.tree_item_changed_cb)
        # self.tree.itemSelectionChanged()
        # self.tree.setColumnCount(1)

        # self.tree.setCurrentItem(0)  # rwh/TODO

        header = QTreeWidgetItem(["---  Substrate ---"])
        self.tree.setHeaderItem(header)

        # cellname = QTreeWidgetItem(["virus"])
        # self.tree.insertTopLevelItem(0,cellname)

        # cellname = QTreeWidgetItem(["interferon"])
        # self.tree.insertTopLevelItem(1,cellname)

        self.microenv_hbox.addWidget(self.tree)

        self.scroll_cell_def_tree = QScrollArea()
        self.scroll_cell_def_tree.setWidget(self.tree)

        # splitter.addWidget(self.tree)
        splitter.addWidget(self.scroll_cell_def_tree)

        #-------------------------------------------
        # self.tab = QWidget()
        # self.tabs.resize(200,5)

        #-------------------------------------------
        label_width = 150
        units_width = 80

        # self.scroll = QScrollArea()
        self.scroll_area = QScrollArea()
        splitter.addWidget(self.scroll_area)
        # self.microenv_hbox.addWidget(self.scroll_area)

        self.microenv_params = QWidget()
        self.vbox = QVBoxLayout()
        self.vbox.addStretch(0)

        # self.microenv_hbox.addWidget(self.)

        #------------------
        controls_hbox = QHBoxLayout()
        self.new_button = QPushButton("New")
        self.new_button.clicked.connect(self.new_substrate)
        controls_hbox.addWidget(self.new_button)

        self.copy_button = QPushButton("Copy")
        self.copy_button.clicked.connect(self.copy_substrate)
        controls_hbox.addWidget(self.copy_button)

        self.delete_button = QPushButton("Delete")
        self.delete_button.clicked.connect(self.delete_substrate)
        controls_hbox.addWidget(self.delete_button)

        # self.vbox.addLayout(hbox)
        # self.vbox.addWidget(QHLine())

        #------------------
        hbox = QHBoxLayout()
        label = QLabel("Name of substrate:")
        label.setFixedWidth(180)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)

        self.substrate_name = QLineEdit()
        # Want to validate name, e.g., starts with alpha, no special chars, etc.
        # self.cycle_trate0_0.setValidator(QtGui.QDoubleValidator())
        # self.cycle_trate0_1.enter.connect(self.save_xml)
        hbox.addWidget(self.substrate_name)
        self.vbox.addLayout(hbox)

        #------------------
        hbox = QHBoxLayout()
        label = QLabel("diffusion coefficient")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)

        self.diffusion_coef = QLineEdit()
        self.diffusion_coef.setValidator(QtGui.QDoubleValidator())
        self.diffusion_coef.textChanged.connect(self.diffusion_coef_changed)
        # self.diffusion_coef.enter.connect(self.save_xml)
        hbox.addWidget(self.diffusion_coef)

        units = QLabel("micron^2/min")
        units.setFixedWidth(units_width)
        hbox.addWidget(units)
        self.vbox.addLayout(hbox)

        #----------
        hbox = QHBoxLayout()
        label = QLabel("decay rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)

        self.decay_rate = QLineEdit()
        self.decay_rate.setValidator(QtGui.QDoubleValidator())
        self.decay_rate.textChanged.connect(self.decay_rate_changed)
        # self.decay_rate.enter.connect(self.save_xml)
        hbox.addWidget(self.decay_rate)

        units = QLabel("1/min")
        units.setFixedWidth(units_width)
        hbox.addWidget(units)
        self.vbox.addLayout(hbox)

        #----------
        hbox = QHBoxLayout()
        label = QLabel("initial condition")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)

        self.init_cond = QLineEdit()
        self.init_cond.setValidator(QtGui.QDoubleValidator())
        self.init_cond.textChanged.connect(self.init_cond_changed)
        # self.init_cond.enter.connect(self.save_xml)
        hbox.addWidget(self.init_cond)

        units = QLabel("mmol")
        units.setFixedWidth(units_width)
        hbox.addWidget(units)
        self.vbox.addLayout(hbox)
        #----------

        hbox = QHBoxLayout()
        label = QLabel("Dirichlet BC")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)

        self.dirichlet_bc = QLineEdit()
        self.dirichlet_bc.setValidator(QtGui.QDoubleValidator())
        self.dirichlet_bc.textChanged.connect(self.dirichlet_bc_changed)
        # self.bdy_cond.enter.connect(self.save_xml)
        hbox.addWidget(self.dirichlet_bc)

        units = QLabel("mmol")
        units.setFixedWidth(units_width)
        hbox.addWidget(units)

        # 			<Dirichlet_boundary_condition units="dimensionless" enabled="false">0</Dirichlet_boundary_condition>
        self.dirichlet_bc_enabled = QCheckBox("on/off")
        self.dirichlet_bc_enabled.stateChanged.connect(
            self.dirichlet_toggle_cb)
        # self.motility_enabled.setAlignment(QtCore.Qt.AlignRight)
        # label.setFixedWidth(label_width)
        hbox.addWidget(self.dirichlet_bc_enabled)

        self.vbox.addLayout(hbox)

        #--------------------------
        # <!--
        # 			<Dirichlet_options>
        # 				<boundary_value ID="xmin" enabled="false">0</boundary_value>
        # 				<boundary_value ID="xmax" enabled="false">0</boundary_value>
        # 				<boundary_value ID="ymin" enabled="false">0</boundary_value>
        # 				<boundary_value ID="ymax" enabled="false">0</boundary_value>
        # 				<boundary_value ID="zmin" enabled="false">1</boundary_value>
        # 				<boundary_value ID="zmax" enabled="false">0</boundary_value>
        # 			</Dirichlet_options>
        # -->
        #  		</variable>
        dirichlet_options_bdy = QLabel("Dirichlet options per boundary:")
        # units.setFixedWidth(units_width)
        self.vbox.addWidget(dirichlet_options_bdy)

        #----
        hbox = QHBoxLayout()
        label = QLabel("xmin:")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)

        self.dirichlet_xmin = QLineEdit()
        self.dirichlet_xmin.setValidator(QtGui.QDoubleValidator())
        self.dirichlet_xmin.textChanged.connect(self.dirichlet_xmin_changed)
        hbox.addWidget(self.dirichlet_xmin)

        self.enable_xmin = QCheckBox("on/off")
        self.enable_xmin.stateChanged.connect(self.enable_xmin_cb)
        # self.motility_enabled.setAlignment(QtCore.Qt.AlignRight)
        # label.setFixedWidth(label_width)
        hbox.addWidget(self.enable_xmin)
        self.vbox.addLayout(hbox)
        #----
        hbox = QHBoxLayout()
        label = QLabel("xmax:")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)

        self.dirichlet_xmax = QLineEdit()
        self.dirichlet_xmax.setValidator(QtGui.QDoubleValidator())
        self.dirichlet_xmax.textChanged.connect(self.dirichlet_xmax_changed)
        hbox.addWidget(self.dirichlet_xmax)

        self.enable_xmax = QCheckBox("on/off")
        self.enable_xmax.stateChanged.connect(self.enable_xmax_cb)
        hbox.addWidget(self.enable_xmax)
        self.vbox.addLayout(hbox)
        #---------
        hbox = QHBoxLayout()
        label = QLabel("ymin:")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)

        self.dirichlet_ymin = QLineEdit()
        self.dirichlet_ymin.setValidator(QtGui.QDoubleValidator())
        self.dirichlet_ymin.textChanged.connect(self.dirichlet_ymin_changed)
        hbox.addWidget(self.dirichlet_ymin)

        self.enable_ymin = QCheckBox("on/off")
        self.enable_ymin.stateChanged.connect(self.enable_ymin_cb)
        # self.motility_enabled.setAlignment(QtCore.Qt.AlignRight)
        # label.setFixedWidth(label_width)
        hbox.addWidget(self.enable_ymin)
        self.vbox.addLayout(hbox)
        #----
        hbox = QHBoxLayout()
        label = QLabel("ymax:")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)

        self.dirichlet_ymax = QLineEdit()
        self.dirichlet_ymax.setValidator(QtGui.QDoubleValidator())
        self.dirichlet_ymax.textChanged.connect(self.dirichlet_ymax_changed)
        hbox.addWidget(self.dirichlet_ymax)

        self.enable_ymax = QCheckBox("on/off")
        self.enable_ymax.stateChanged.connect(self.enable_ymax_cb)
        hbox.addWidget(self.enable_ymax)
        self.vbox.addLayout(hbox)
        #---------
        hbox = QHBoxLayout()
        label = QLabel("zmin:")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)

        self.dirichlet_zmin = QLineEdit()
        self.dirichlet_zmin.setValidator(QtGui.QDoubleValidator())
        self.dirichlet_zmin.textChanged.connect(self.dirichlet_zmin_changed)
        hbox.addWidget(self.dirichlet_zmin)

        self.enable_zmin = QCheckBox("on/off")
        self.enable_zmin.stateChanged.connect(self.enable_zmin_cb)
        # self.motility_enabled.setAlignment(QtCore.Qt.AlignRight)
        # label.setFixedWidth(label_width)
        hbox.addWidget(self.enable_zmin)
        self.vbox.addLayout(hbox)
        #----
        hbox = QHBoxLayout()
        label = QLabel("zmax:")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)

        self.dirichlet_zmax = QLineEdit()
        self.dirichlet_zmax.setValidator(QtGui.QDoubleValidator())
        self.dirichlet_zmax.textChanged.connect(self.dirichlet_zmax_changed)
        hbox.addWidget(self.dirichlet_zmax)

        self.enable_zmax = QCheckBox("on/off")
        self.enable_zmax.stateChanged.connect(self.enable_zmax_cb)
        hbox.addWidget(self.enable_zmax)
        self.vbox.addLayout(hbox)

        #-------------
        # Toggles for overall microenv (all substrates)
        self.vbox.addWidget(QHLine())

        hbox = QHBoxLayout()
        hbox.addWidget(QLabel("For all substrates: "))

        self.gradients = QCheckBox("calculate gradients")
        # self.gradients.stateChanged.connect(self.gradients_cb)
        hbox.addWidget(self.gradients)
        # self.vbox.addLayout(hbox)

        # hbox = QHBoxLayout()
        self.track_in_agents = QCheckBox("track in agents")
        # self.track_in_agents.stateChanged.connect(self.track_in_agents_cb)
        hbox.addWidget(self.track_in_agents)
        self.vbox.addLayout(hbox)

        #--------------------------
        # Dummy widget for filler??
        # label = QLabel("")
        # label.setFixedHeight(1000)
        # # label.setStyleSheet("background-color: orange")
        # label.setAlignment(QtCore.Qt.AlignCenter)
        # self.vbox.addWidget(label)

        #==================================================================
        # self.vbox.setAlignment(QtCore.Qt.AlignTop)

        # spacerItem = QSpacerItem(20, 237, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
        # spacerItem = QSpacerItem(100,500)
        # self.vbox.addItem(spacerItem)
        self.vbox.addStretch()

        self.microenv_params.setLayout(self.vbox)

        self.scroll_area.setVerticalScrollBarPolicy(
            QtCore.Qt.ScrollBarAlwaysOn)
        self.scroll_area.setHorizontalScrollBarPolicy(
            QtCore.Qt.ScrollBarAlwaysOn)
        self.scroll_area.setWidgetResizable(True)
        self.scroll_area.setWidget(self.microenv_params)

        # self.save_button = QPushButton("Save")
        # self.text = QLabel("Hello World",alignment=QtCore.Qt.AlignCenter)

        self.layout = QVBoxLayout(self)

        self.layout.addLayout(controls_hbox)

        # self.layout.addWidget(self.tabs)
        # self.layout.addWidget(QHLine())
        # self.layout.addWidget(self.params)

        # self.layout.addWidget(self.scroll_area)
        self.layout.addWidget(splitter)
예제 #4
0
def argument_widget_factory(component: str, title: str = None, optional: bool = True) -> QtWidgets.QWidget:
    """
    Factory function for generating various subclasses of instance `PySide6.QtWidgets.QWidgets` pre-configured for user-input. 

    Parameters
    ----------
    1. **components** : ``str``
        Allowable values: `date`, `decimal`, `currency`, `integer`, `select`, `flag`, `symbols`, `symbol`. If `components=None`, a `PySide6.QtWidgets.QWidget` will be returned.
    """
    widget = atomic_widget_factory(None, None)
    widget.setObjectName('input-container')

    if optional:
        toggle_widget = QtWidgets.QCheckBox()
        toggle_widget.setObjectName('input-toggle')
        toggle_widget.setSizePolicy(QtWidgets.QSizePolicy(
            QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum))

    label_widget = QtWidgets.QLabel(title)
    label_widget.setAlignment(QtCore.Qt.AlignBottom)
    label_widget.setObjectName('input-label')

    if component == 'date':
        main_widget = QtWidgets.QDateEdit()
        main_widget.setDate(QtCore.QDate.currentDate())
        main_widget.setMaximumDate(QtCore.QDate.currentDate())
        main_widget.setMinimumDate(QtCore.QDate(
            constants.constants['PRICE_YEAR_CUTOFF'], 1, 1))
        main_widget.setObjectName(component)
        main_widget.setEnabled(False)

    elif component == 'decimal':
        main_widget = QtWidgets.QLineEdit()
        main_widget.setObjectName(component)
        main_widget.setValidator(
            QtGui.QDoubleValidator(-100, 100, 5, main_widget))
        main_widget.setEnabled(False)
        main_widget.setSizePolicy(QtWidgets.QSizePolicy(
            QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum))

    elif component == 'currency':
        main_widget = QtWidgets.QLineEdit()
        main_widget.setObjectName(component)
        # https://stackoverflow.com/questions/354044/what-is-the-best-u-s-currency-regex
        main_widget.setValidator(QtGui.QRegularExpressionValidator(
            r"[+-]?[0-9]{1,3}(?:,?[0-9]{3})*(?:\.[0-9]{2})", main_widget))
        main_widget.setEnabled(False)
        main_widget.setSizePolicy(QtWidgets.QSizePolicy(
            QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum))

    elif component == 'integer':
        main_widget = QtWidgets.QLineEdit()
        main_widget.setObjectName(component)
        main_widget.setValidator(QtGui.QIntValidator(0, 100, main_widget))
        main_widget.setEnabled(False)
        main_widget.setSizePolicy(QtWidgets.QSizePolicy(
            QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum))

    elif component == 'select':
        return None

    elif component == 'flag':
        main_widget = QtWidgets.QRadioButton(title)
        main_widget.setObjectName(component)
        main_widget.setSizePolicy(QtWidgets.QSizePolicy(
            QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum))

    elif component == 'symbols':
        main_widget = QtWidgets.QLineEdit()
        main_widget.setObjectName(component)
        main_widget.setMaxLength(100)
        main_widget.setSizePolicy(QtWidgets.QSizePolicy(
            QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Maximum))

    elif component == 'symbol':
        main_widget = QtWidgets.QLineEdit()
        main_widget.setObjectName(component)
        main_widget.setMaxLength(100)
        main_widget.setSizePolicy(QtWidgets.QSizePolicy(
            QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Maximum))
        main_widget.setValidator(
            QtGui.QRegularExpressionValidator(r"[A-Za-z]+", main_widget))

    else:
        main_widget = QtWidgets.QWidget()

    widget.layout().addWidget(label_widget)
    widget.layout().addWidget(main_widget)

    if optional:
        toggle_widget.stateChanged.connect(
            lambda: main_widget.setEnabled((not main_widget.isEnabled())))
        widget.layout().addWidget(toggle_widget)

    return widget
예제 #5
0
    def __init__(self):
        super().__init__()
        # global self.config_params

        self.xml_root = None

        # self.tab = QWidget()
        # self.tabs.resize(200,5)

        #-------------------------------------------
        label_width = 110
        domain_value_width = 100
        value_width = 60
        label_height = 20
        units_width = 70

        self.scroll = QScrollArea()  # might contain centralWidget

        self.config_params = QWidget()
        self.vbox = QVBoxLayout()
        self.vbox.addStretch(0)

        #============  Domain ================================
        label = QLabel("Domain (micron)")
        label.setFixedHeight(label_height)
        label.setStyleSheet("background-color: orange")
        label.setAlignment(QtCore.Qt.AlignCenter)
        self.vbox.addWidget(label)

        hbox = QHBoxLayout()

        label = QLabel("Xmin")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.xmin = QLineEdit()
        self.xmin.setFixedWidth(domain_value_width)
        self.xmin.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.xmin)

        label = QLabel("Xmax")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.xmax = QLineEdit()
        self.xmax.setFixedWidth(domain_value_width)
        self.xmax.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.xmax)

        label = QLabel("dx")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.xdel = QLineEdit()
        self.xdel.setFixedWidth(value_width)
        self.xdel.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.xdel)

        self.vbox.addLayout(hbox)
        #----------
        hbox = QHBoxLayout()
        label = QLabel("Ymin")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.ymin = QLineEdit()
        self.ymin.setFixedWidth(domain_value_width)
        self.ymin.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.ymin)

        label = QLabel("Ymax")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.ymax = QLineEdit()
        self.ymax.setFixedWidth(domain_value_width)
        self.ymax.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.ymax)

        label = QLabel("dy")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.ydel = QLineEdit()
        self.ydel.setFixedWidth(value_width)
        self.ydel.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.ydel)

        self.vbox.addLayout(hbox)
        #----------
        hbox = QHBoxLayout()
        label = QLabel("Zmin")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.zmin = QLineEdit()
        self.zmin.setFixedWidth(domain_value_width)
        self.zmin.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.zmin)

        label = QLabel("Zmax")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.zmax = QLineEdit()
        self.zmax.setFixedWidth(domain_value_width)
        self.zmax.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.zmax)

        label = QLabel("dz")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.zdel = QLineEdit()
        self.zdel.setFixedWidth(value_width)
        self.zdel.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.zdel)

        self.vbox.addLayout(hbox)
        #----------
        hbox = QHBoxLayout()
        self.virtual_walls = QCheckBox("Virtual walls")
        # self.motility_enabled.setAlignment(QtCore.Qt.AlignRight)
        # label.setFixedWidth(label_width)
        hbox.addWidget(self.virtual_walls)
        self.vbox.addLayout(hbox)

        # self.vbox.addWidget(QHLine())

        #============  Misc ================================
        label = QLabel("Misc runtime parameters")
        label.setFixedHeight(label_height)
        label.setStyleSheet("background-color: orange")
        label.setAlignment(QtCore.Qt.AlignCenter)
        self.vbox.addWidget(label)

        hbox = QHBoxLayout()
        # hbox.setFixedHeight(label_width)

        label = QLabel("Max Time")
        # label_width = 210
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)

        self.max_time = QLineEdit()
        # self.max_time.setFixedWidth(200)
        self.max_time.setFixedWidth(domain_value_width)
        self.max_time.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.max_time)

        label = QLabel("min")
        label.setFixedWidth(units_width)
        label.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(label)

        self.vbox.addLayout(hbox)
        #----------
        hbox = QHBoxLayout()

        label = QLabel("# threads")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)

        self.num_threads = QLineEdit()
        # self.num_threads.setFixedWidth(value_width)
        self.num_threads.setFixedWidth(domain_value_width)
        self.num_threads.setValidator(QtGui.QIntValidator())
        hbox.addWidget(self.num_threads)

        label = QLabel("   ")
        label.setFixedWidth(units_width)
        label.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(label)

        self.vbox.addLayout(hbox)

        #------------------
        hbox = QHBoxLayout()

        label = QLabel("Save data:")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(label)

        #------
        self.save_svg = QCheckBox("SVG")
        # self.motility_2D.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(self.save_svg)

        label = QLabel("every")
        # label_width = 210
        # label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)

        self.svg_interval = QLineEdit()
        self.svg_interval.setFixedWidth(value_width)
        self.svg_interval.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.svg_interval)

        label = QLabel("min")
        # label.setFixedWidth(units_width)
        label.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(label)

        #------
        self.save_full = QCheckBox("Full")
        # self.motility_2D.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(self.save_full)

        label = QLabel("every")
        # label_width = 210
        # label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)

        self.full_interval = QLineEdit()
        self.full_interval.setFixedWidth(value_width)
        self.full_interval.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.full_interval)

        label = QLabel("min")
        # label.setFixedWidth(units_width)
        label.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(label)

        self.vbox.addLayout(hbox)

        #============  Cells IC ================================
        label = QLabel("Initial conditions of cells (x,y,z, type)")
        label.setFixedHeight(label_height)
        label.setStyleSheet("background-color: orange")
        label.setAlignment(QtCore.Qt.AlignCenter)

        self.vbox.addWidget(label)
        self.cells_csv = QCheckBox("config/cells.csv")
        self.vbox.addWidget(self.cells_csv)

        #--------------------------
        # Dummy widget for filler??
        # label = QLabel("")
        # label.setFixedHeight(1000)
        # # label.setStyleSheet("background-color: orange")
        # label.setAlignment(QtCore.Qt.AlignCenter)
        # self.vbox.addWidget(label)

        self.vbox.addStretch()

        #==================================================================
        self.config_params.setLayout(self.vbox)

        self.scroll.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
        self.scroll.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
        self.scroll.setWidgetResizable(True)

        self.scroll.setWidget(
            self.config_params)  # self.config_params = QWidget()

        self.layout = QVBoxLayout(self)

        self.layout.addWidget(self.scroll)
예제 #6
0
    def tab_cell_defs(self):
        units_width = 70
        label_width = 210

        layout = QVBoxLayout()

        self.params_cell_def = QWidget()
        layout = QVBoxLayout()

        self.params_config = QWidget()

        self.cycle_dropdown = QComboBox()
        self.cycle_dropdown.setFixedWidth(300)
        self.cycle_dropdown.currentIndexChanged.connect(self.cycle_changed_cb)

        # Rf. Section 17 of User Guide
        self.cycle_dropdown.addItem("live cells")
        self.cycle_dropdown.addItem("basic Ki67")
        self.cycle_dropdown.addItem("advanced Ki67")
        self.cycle_dropdown.addItem("flow cytometry")
        self.cycle_dropdown.addItem("flow cytometry separated")
        self.cycle_dropdown.addItem("cycling quiescent")
        self.cycle_dropdown.addItem("live apoptotic")
        self.cycle_dropdown.addItem("total cells")

        layout.addWidget(self.cycle_dropdown)

        #=====  Phenotype
        #============  Cycle ================================
        label = QLabel("Phenotype: cycle")
        label.setStyleSheet("background-color: orange")
        label.setAlignment(QtCore.Qt.AlignCenter)
        layout.addWidget(label)

        hbox = QHBoxLayout()
        label = QLabel("Phase 0->0 transition rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)

        self.cycle_trate0_0 = QLineEdit()
        self.cycle_trate0_0.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.cycle_trate0_0)

        units = QLabel("1/min")
        units.setFixedWidth(units_width)
        hbox.addWidget(units)
        layout.addLayout(hbox)
        #----------
        hbox = QHBoxLayout()
        label = QLabel("Phase 0->1 transition rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)

        self.cycle_trate0_1 = QLineEdit()
        self.cycle_trate0_1.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.cycle_trate0_1)

        units = QLabel("1/min")
        units.setFixedWidth(units_width)
        hbox.addWidget(units)
        layout.addLayout(hbox)
        #----------
        hbox = QHBoxLayout()
        label = QLabel("Phase 1->2 transition rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)

        self.cycle_trate1_2 = QLineEdit()
        self.cycle_trate1_2.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.cycle_trate1_2)

        units = QLabel("1/min")
        units.setFixedWidth(units_width)
        hbox.addWidget(units)
        layout.addLayout(hbox)
        #----------
        hbox = QHBoxLayout()
        label = QLabel("Phase 2->3 transition rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)

        self.cycle_trate2_3 = QLineEdit()
        self.cycle_trate2_3.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.cycle_trate2_3)

        units = QLabel("1/min")
        units.setFixedWidth(units_width)
        hbox.addWidget(units)
        layout.addLayout(hbox)
        #----------
        hbox = QHBoxLayout()
        label = QLabel("Phase 3->0 transition rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)

        self.cycle_trate3_0 = QLineEdit()
        self.cycle_trate3_0.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.cycle_trate3_0)

        units = QLabel("1/min")
        units.setFixedWidth(units_width)
        hbox.addWidget(units)
        layout.addLayout(hbox)

        #============  Death ================================
        label = QLabel("Phenotype: death")
        label.setStyleSheet("background-color: orange")
        label.setAlignment(QtCore.Qt.AlignCenter)
        layout.addWidget(label)
        # layout.addWidget(QHLine())

        #-----
        label = QLabel("Apoptosis")
        label.setAlignment(QtCore.Qt.AlignCenter)
        label.setStyleSheet('background-color: yellow')
        layout.addWidget(label)

        hbox = QHBoxLayout()
        label = QLabel("death rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.death_apop_rate = QLineEdit()
        self.death_apop_rate.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.death_apop_rate)
        units = QLabel("1/min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        layout.addLayout(hbox)

        hbox = QHBoxLayout()
        label = QLabel("phase 0 duration")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.phase0_duration = QLineEdit()
        self.phase0_duration.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.phase0_duration)
        units = QLabel("min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        layout.addLayout(hbox)

        hbox = QHBoxLayout()
        label = QLabel("phase 1 duration")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.phase1_duration = QLineEdit()
        self.phase1_duration.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.phase1_duration)
        units = QLabel("min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        layout.addLayout(hbox)

        hbox = QHBoxLayout()
        label = QLabel("unlysed_fluid_change_rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.apoptosis_unlysed_rate = QLineEdit()
        self.apoptosis_unlysed_rate.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.apoptosis_unlysed_rate)
        units = QLabel("1/min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        layout.addLayout(hbox)

        hbox = QHBoxLayout()
        label = QLabel("lysed_fluid_change_rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.apoptosis_lysed_rate = QLineEdit()
        self.apoptosis_lysed_rate.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.apoptosis_lysed_rate)
        units = QLabel("1/min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        layout.addLayout(hbox)

        hbox = QHBoxLayout()
        label = QLabel("cytoplasmic_biomass_change_rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.apoptosis_cytoplasmic_biomass_change_rate = QLineEdit()
        self.apoptosis_cytoplasmic_biomass_change_rate.setValidator(
            QtGui.QDoubleValidator())
        hbox.addWidget(self.apoptosis_cytoplasmic_biomass_change_rate)
        units = QLabel("1/min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        layout.addLayout(hbox)

        hbox = QHBoxLayout()
        label = QLabel("nuclear_biomass_change_rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.apoptosis_nuclear_biomass_change_rate = QLineEdit()
        self.apoptosis_nuclear_biomass_change_rate.setValidator(
            QtGui.QDoubleValidator())
        hbox.addWidget(self.apoptosis_nuclear_biomass_change_rate)
        units = QLabel("1/min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        layout.addLayout(hbox)

        hbox = QHBoxLayout()
        label = QLabel("calcification_rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.calcification_rate = QLineEdit()
        self.calcification_rate.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.calcification_rate)
        units = QLabel("1/min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        layout.addLayout(hbox)

        hbox = QHBoxLayout()
        label = QLabel("relative_rupture_volume")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.relative_rupture_volume = QLineEdit()
        self.relative_rupture_volume.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.relative_rupture_volume)
        units = QLabel("")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        layout.addLayout(hbox)

        #-----------------------------------------------------------
        # layout.addWidget(QHLine())
        label = QLabel("Necrosis")
        label.setAlignment(QtCore.Qt.AlignCenter)
        label.setStyleSheet('background-color: yellow')
        layout.addWidget(label)
        # layout.addWidget(QHLine())

        # label_width = 210
        # units_width = 45
        hbox = QHBoxLayout()
        label = QLabel("death rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.death_necrosis_rate = QLineEdit()
        self.death_necrosis_rate.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.death_necrosis_rate)
        units = QLabel("1/min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        layout.addLayout(hbox)

        hbox = QHBoxLayout()
        label = QLabel("phase 0 duration")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.phase0_duration = QLineEdit()
        self.phase0_duration.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.phase0_duration)
        units = QLabel("min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        layout.addLayout(hbox)

        hbox = QHBoxLayout()
        label = QLabel("phase 1 duration")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.phase1_duration = QLineEdit()
        self.phase1_duration.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.phase1_duration)
        units = QLabel("min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        layout.addLayout(hbox)

        hbox = QHBoxLayout()
        label = QLabel("unlysed_fluid_change_rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.necrosis_unlysed_rate = QLineEdit()
        self.necrosis_unlysed_rate.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.necrosis_unlysed_rate)
        units = QLabel("1/min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        layout.addLayout(hbox)

        hbox = QHBoxLayout()
        label = QLabel("lysed_fluid_change_rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.necrosis_lysed_rate = QLineEdit()
        self.necrosis_lysed_rate.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.necrosis_lysed_rate)
        units = QLabel("1/min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        layout.addLayout(hbox)

        hbox = QHBoxLayout()
        label = QLabel("cytoplasmic_biomass_change_rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.necrosis_cytoplasmic_biomass_change_rate = QLineEdit()
        self.necrosis_cytoplasmic_biomass_change_rate.setValidator(
            QtGui.QDoubleValidator())
        hbox.addWidget(self.necrosis_cytoplasmic_biomass_change_rate)
        units = QLabel("1/min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        layout.addLayout(hbox)

        hbox = QHBoxLayout()
        label = QLabel("nuclear_biomass_change_rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.necrosis_nuclear_biomass_change_rate = QLineEdit()
        self.necrosis_nuclear_biomass_change_rate.setValidator(
            QtGui.QDoubleValidator())
        hbox.addWidget(self.necrosis_nuclear_biomass_change_rate)
        units = QLabel("1/min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        layout.addLayout(hbox)

        hbox = QHBoxLayout()
        label = QLabel("calcification_rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.calcification_rate = QLineEdit()
        self.calcification_rate.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.calcification_rate)
        units = QLabel("1/min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        layout.addLayout(hbox)

        hbox = QHBoxLayout()
        label = QLabel("relative_rupture_volume")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.relative_rupture_volume = QLineEdit()
        self.relative_rupture_volume.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.relative_rupture_volume)
        units = QLabel("")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        layout.addLayout(hbox)

        #============  Volume ================================
        label = QLabel("Phenotype: volume")
        label.setStyleSheet("background-color: orange")
        label.setAlignment(QtCore.Qt.AlignCenter)
        layout.addWidget(label)

        hbox = QHBoxLayout()
        label = QLabel("total")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.volume_total = QLineEdit()
        self.volume_total.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.volume_total)
        units = QLabel("micron^3")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        layout.addLayout(hbox)

        hbox = QHBoxLayout()
        label = QLabel("fluid_fraction")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.volume_fluid_fraction = QLineEdit()
        self.volume_fluid_fraction.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.volume_fluid_fraction)
        units = QLabel("")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        layout.addLayout(hbox)

        hbox = QHBoxLayout()
        label = QLabel("nuclear")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.volume_nuclear = QLineEdit()
        self.volume_nuclear.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.volume_nuclear)
        units = QLabel("micron^3")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        layout.addLayout(hbox)

        hbox = QHBoxLayout()
        label = QLabel("fluid_change_rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.volume_fluid_change_rate = QLineEdit()
        self.volume_fluid_change_rate.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.volume_fluid_change_rate)
        units = QLabel("1/min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        layout.addLayout(hbox)

        hbox = QHBoxLayout()
        label = QLabel("cytoplasmic_biomass_change_rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.cytoplasmic_biomass_change_rate = QLineEdit()
        self.cytoplasmic_biomass_change_rate.setValidator(
            QtGui.QDoubleValidator())
        hbox.addWidget(self.cytoplasmic_biomass_change_rate)
        units = QLabel("1/min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        layout.addLayout(hbox)

        hbox = QHBoxLayout()
        label = QLabel("nuclear_biomass_change_rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.nuclear_biomass_change_rate = QLineEdit()
        self.nuclear_biomass_change_rate.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.nuclear_biomass_change_rate)
        units = QLabel("1/min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        layout.addLayout(hbox)

        hbox = QHBoxLayout()
        label = QLabel("calcified_fraction")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.calcified_fraction = QLineEdit()
        self.calcified_fraction.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.calcified_fraction)
        units = QLabel("")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        layout.addLayout(hbox)

        hbox = QHBoxLayout()
        label = QLabel("calcified_rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.calcified_rate = QLineEdit()
        self.calcified_rate.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.calcified_rate)
        units = QLabel("1/min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        layout.addLayout(hbox)

        #============  Mechanics ================================
        label = QLabel("Phenotype: mechanics")
        label.setStyleSheet("background-color: orange")
        label.setAlignment(QtCore.Qt.AlignCenter)
        layout.addWidget(label)
        # layout.addWidget(QHLine())

        hbox = QHBoxLayout()
        label = QLabel("cell_cell_adhesion_strength")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.cell_cell_adhesion_strength = QLineEdit()
        self.cell_cell_adhesion_strength.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.cell_cell_adhesion_strength)
        units = QLabel("micron/min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        layout.addLayout(hbox)

        hbox = QHBoxLayout()
        label = QLabel("cell_cell_repulsion_strength")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.cell_cell_repulsion_strength = QLineEdit()
        self.cell_cell_repulsion_strength.setValidator(
            QtGui.QDoubleValidator())
        hbox.addWidget(self.cell_cell_repulsion_strength)
        units = QLabel("micron/min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        layout.addLayout(hbox)

        hbox = QHBoxLayout()
        label = QLabel("relative_maximum_adhesion_distance")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.relative_maximum_adhesion_distance = QLineEdit()
        self.relative_maximum_adhesion_distance.setValidator(
            QtGui.QDoubleValidator())
        hbox.addWidget(self.relative_maximum_adhesion_distance)
        units = QLabel("")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        layout.addLayout(hbox)

        hbox = QHBoxLayout()
        label = QLabel("set_relative_equilibrium_distance")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.set_relative_equilibrium_distance = QLineEdit()
        self.set_relative_equilibrium_distance.setValidator(
            QtGui.QDoubleValidator())
        hbox.addWidget(self.set_relative_equilibrium_distance)
        units = QLabel("")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        layout.addLayout(hbox)

        hbox = QHBoxLayout()
        label = QLabel("set_absolute_equilibrium_distance")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.set_absolute_equilibrium_distance = QLineEdit()
        self.set_absolute_equilibrium_distance.setValidator(
            QtGui.QDoubleValidator())
        hbox.addWidget(self.set_absolute_equilibrium_distance)
        units = QLabel("micron")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        layout.addLayout(hbox)

        #============  Motility ================================
        label = QLabel("Phenotype: motility")
        label.setStyleSheet("background-color: orange")
        label.setAlignment(QtCore.Qt.AlignCenter)
        layout.addWidget(label)
        # layout.addWidget(QHLine())

        hbox = QHBoxLayout()
        label = QLabel("speed")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.speed = QLineEdit()
        self.speed.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.speed)
        units = QLabel("micron/min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        layout.addLayout(hbox)

        hbox = QHBoxLayout()
        label = QLabel("persistence_time")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.persistence_time = QLineEdit()
        self.persistence_time.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.persistence_time)
        units = QLabel("min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        layout.addLayout(hbox)

        hbox = QHBoxLayout()
        label = QLabel("migration_bias")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.migration_bias = QLineEdit()
        self.migration_bias.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.migration_bias)
        units = QLabel("")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        layout.addLayout(hbox)

        hbox = QHBoxLayout()
        self.motility_enabled = QCheckBox("enable")
        # self.motility_enabled.setAlignment(QtCore.Qt.AlignRight)
        # label.setFixedWidth(label_width)
        hbox.addWidget(self.motility_enabled)

        self.motility_2D = QCheckBox("2D")
        # self.motility_2D.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(self.motility_2D)
        layout.addLayout(hbox)

        hbox = QHBoxLayout()
        label = QLabel("Chemotaxis")
        label.setFixedWidth(200)
        label.setAlignment(QtCore.Qt.AlignCenter)
        label.setStyleSheet('background-color: yellow')
        hbox.addWidget(label)

        self.chemotaxis_enabled = QCheckBox("enabled")
        # self.motility_2D.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(self.chemotaxis_enabled)
        layout.addLayout(hbox)

        self.motility_substrate_dropdown = QComboBox()
        self.motility_substrate_dropdown.setFixedWidth(300)
        # self.cycle_dropdown.currentIndex.connect(self.cycle_changed_cb)
        # self.motility_substrate_dropdown.currentIndexChanged.connect(self.motility_substrate_changed_cb)
        self.motility_substrate_dropdown.addItem("oxygen")
        layout.addWidget(self.motility_substrate_dropdown)

        #============  Secretion ================================
        label = QLabel("Phenotype: secretion")
        label.setStyleSheet("background-color: orange")
        label.setAlignment(QtCore.Qt.AlignCenter)
        layout.addWidget(label)

        label = QLabel("oxygen")
        label.setStyleSheet('background-color: lightgreen')
        label.setFixedWidth(150)
        layout.addWidget(label)

        hbox = QHBoxLayout()
        label = QLabel("secretion_rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.secretion_rate1 = QLineEdit()
        self.secretion_rate1.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.secretion_rate1)
        units = QLabel("1/min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        layout.addLayout(hbox)

        hbox = QHBoxLayout()
        label = QLabel("target")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.secretion_target1 = QLineEdit()
        self.secretion_target1.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.secretion_target1)
        units = QLabel("")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        layout.addLayout(hbox)

        hbox = QHBoxLayout()
        label = QLabel("uptake_rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.uptake_rate1 = QLineEdit()
        self.uptake_rate1.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.uptake_rate1)
        units = QLabel("1/min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        layout.addLayout(hbox)

        hbox = QHBoxLayout()
        label = QLabel("net_export_rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.secretion_net_export_rate = QLineEdit()
        self.secretion_net_export_rate.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.secretion_net_export_rate)
        units = QLabel("total/min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        layout.addLayout(hbox)

        #============  Molecular ================================
        label = QLabel("Phenotype: molecular")
        label.setStyleSheet("background-color: orange")
        label.setAlignment(QtCore.Qt.AlignCenter)
        layout.addWidget(label)
        # layout.addWidget(QHLine())

        #=====  Custom data
        label = QLabel("Custom data")
        label.setStyleSheet("background-color: cyan")
        layout.addWidget(label)

        #==================================================================
        self.params_cell_def.setLayout(layout)

        self.scroll = QtWidgets.QScrollArea()
        self.scroll.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
        self.scroll.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
        self.scroll.setWidgetResizable(True)
        self.scroll.setWidget(self.params_cell_def)

        self.layout = QtWidgets.QVBoxLayout(self)
        self.layout.addWidget(self.scroll)
예제 #7
0
    def __init__(self):
        super().__init__()
        # global self.params_cell_def

        self.tabs = QtWidgets.QTabWidget()
        self.tab1 = QtWidgets.QWidget()
        self.tab2 = QtWidgets.QWidget()
        self.tab3 = QtWidgets.QWidget()
        self.tab4 = QtWidgets.QWidget()
        # self.tabs.resize(300,200)
        self.tabs.resize(200, 5)

        self.tabs.addTab(self.tab1, "Config")
        self.tabs.addTab(self.tab2, "Microenv")
        self.tabs.addTab(self.tab3, "Cell Types")
        self.tabs.addTab(self.tab4, "User Params")
        # self.tabs.addTab("tab1")
        self.tabs.currentChanged.connect(self.tab_changed_cb)

        #-------------------------------------------
        self.vbox_config = QtWidgets.QVBoxLayout()
        self.vbox_microenv = QtWidgets.QVBoxLayout()
        self.vbox_user_params = QtWidgets.QVBoxLayout()

        #-------------------------------------------
        self.scroll = QtWidgets.QScrollArea()  # might contain centralWidget

        self.params_cell_def = QtWidgets.QWidget()
        self.vbox_cell_def = QtWidgets.QVBoxLayout()

        self.params_config = QtWidgets.QWidget()
        self.vbox_config = QtWidgets.QVBoxLayout()

        self.cycle_dropdown = QtWidgets.QComboBox()

        self.cycle_dropdown.addItem("advanced Ki67")
        self.cycle_dropdown.addItem("basic Ki67")
        self.cycle_dropdown.addItem("flow cytometry")
        self.cycle_dropdown.addItem("live apoptotic")
        self.cycle_dropdown.addItem("total cells")
        self.cycle_dropdown.addItem("live cells")
        self.cycle_dropdown.addItem("flow cytometry separated")
        self.cycle_dropdown.addItem("cycling quiescent")

        self.vbox_cell_def.addWidget(self.cycle_dropdown)

        #=====  Phenotype
        #============  Cycle ================================
        label = QtWidgets.QLabel("Phenotype: cycle")
        label.setStyleSheet("background-color: orange")
        self.vbox_cell_def.addWidget(label)

        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("Phase 0->0 transition rate")
        hbox.addWidget(label)

        self.cycle_trate0_0 = QtWidgets.QLineEdit()
        # self.cycle_trate0_1.setValidator(QtGui.QIntValidator())
        self.cycle_trate0_0.setValidator(QtGui.QDoubleValidator())
        # self.cycle_trate0_1.enter.connect(self.save_xml)
        hbox.addWidget(self.cycle_trate0_0)

        units = QtWidgets.QLabel("1/min")
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)
        #----------
        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("Phase 0->1 transition rate")
        hbox.addWidget(label)

        self.cycle_trate0_1 = QtWidgets.QLineEdit()
        # self.cycle_trate0_1.setValidator(QtGui.QIntValidator())
        self.cycle_trate0_1.setValidator(QtGui.QDoubleValidator())
        # self.cycle_trate0_1.enter.connect(self.save_xml)
        hbox.addWidget(self.cycle_trate0_1)

        units = QtWidgets.QLabel("1/min")
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)
        #----------
        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("Phase 1->2 transition rate")
        hbox.addWidget(label)

        self.cycle_trate1_2 = QtWidgets.QLineEdit()
        self.cycle_trate1_2.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.cycle_trate1_2)

        units = QtWidgets.QLabel("1/min")
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)
        #----------
        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("Phase 2->3 transition rate")
        hbox.addWidget(label)

        self.cycle_trate2_3 = QtWidgets.QLineEdit()
        self.cycle_trate2_3.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.cycle_trate2_3)

        units = QtWidgets.QLabel("1/min")
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)
        #----------
        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("Phase 3->4 transition rate")
        hbox.addWidget(label)

        self.cycle_trate3_4 = QtWidgets.QLineEdit()
        self.cycle_trate3_4.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.cycle_trate3_4)

        units = QtWidgets.QLabel("1/min")
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)

        # self.vbox_cell_def.addWidget(QHLine())
        #--------------------------
        # hbox = QtWidgets.QHBoxLayout()
        # label = QtWidgets.QLabel("Phase0->Phase0 transition rate")
        # hbox.addWidget(label)

        # self.cycle_trate0_0 = QtWidgets.QLineEdit()
        # self.cycle_trate0_0.setValidator(QtGui.QDoubleValidator())
        # hbox.addWidget(self.cycle_trate0_0)

        # units = QtWidgets.QLabel("1/min")
        # hbox.addWidget(units)
        # self.vbox_cell_def.addLayout(hbox)

        #--------------------------
        # self.vbox_cell_def.addWidget(QHLine())

        # self.vbox_cell_def.addLayout(hbox)
        #----------
        #============  Death ================================
        label = QtWidgets.QLabel("Phenotype: death")
        label.setStyleSheet("background-color: orange")
        self.vbox_cell_def.addWidget(label)
        # self.vbox_cell_def.addWidget(QHLine())

        #-----
        label = QtWidgets.QLabel("Apoptosis")
        label.setStyleSheet('background-color: yellow')
        self.vbox_cell_def.addWidget(label)

        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("death rate")
        hbox.addWidget(label)
        self.death_apop_rate = QtWidgets.QLineEdit()
        self.death_apop_rate.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.death_apop_rate)
        units = QtWidgets.QLabel("1/min")
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)

        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("phase 0 duration")
        hbox.addWidget(label)
        self.phase0_duration = QtWidgets.QLineEdit()
        self.phase0_duration.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.phase0_duration)
        units = QtWidgets.QLabel("min")
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)

        # <phase_durations units="min">
        #     <duration index="0" fixed_duration="true">516</duration>

        # <unlysed_fluid_change_rate units="1/min">0.05</unlysed_fluid_change_rate>
        # <lysed_fluid_change_rate units="1/min">0</lysed_fluid_change_rate>
        # <cytoplasmic_biomass_change_rate units="1/min">1.66667e-02</cytoplasmic_biomass_change_rate>
        # <nuclear_biomass_change_rate units="1/min">5.83333e-03</nuclear_biomass_change_rate>
        # <calcification_rate units="1/min">0</calcification_rate>
        # <relative_rupture_volume units="dimensionless">2.0</relative_rupture_volume>
        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("unlysed_fluid_change_rate")
        hbox.addWidget(label)
        self.apoptosis_unlysed_rate = QtWidgets.QLineEdit()
        self.apoptosis_unlysed_rate.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.apoptosis_unlysed_rate)
        units = QtWidgets.QLabel("1/min")
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)

        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("lysed_fluid_change_rate")
        hbox.addWidget(label)
        self.apoptosis_lysed_rate = QtWidgets.QLineEdit()
        self.apoptosis_lysed_rate.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.apoptosis_lysed_rate)
        units = QtWidgets.QLabel("1/min")
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)

        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("cytoplasmic_biomass_change_rate")
        hbox.addWidget(label)
        self.apoptosis_cytoplasmic_biomass_change_rate = QtWidgets.QLineEdit()
        self.apoptosis_cytoplasmic_biomass_change_rate.setValidator(
            QtGui.QDoubleValidator())
        hbox.addWidget(self.apoptosis_cytoplasmic_biomass_change_rate)
        units = QtWidgets.QLabel("1/min")
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)

        #-----
        # self.vbox_cell_def.addWidget(QHLine())
        label = QtWidgets.QLabel("Necrosis")
        label.setStyleSheet('background-color: yellow')
        self.vbox_cell_def.addWidget(label)
        # self.vbox_cell_def.addWidget(QHLine())
        #============  Volume ================================
        label = QtWidgets.QLabel("Phenotype: volume")
        label.setStyleSheet("background-color: orange")
        self.vbox_cell_def.addWidget(label)
        # self.vbox_cell_def.addWidget(QHLine())
        #============  Mechanics ================================
        label = QtWidgets.QLabel("Phenotype: mechanics")
        label.setStyleSheet("background-color: orange")
        self.vbox_cell_def.addWidget(label)
        # self.vbox_cell_def.addWidget(QHLine())
        #============  Motility ================================
        label = QtWidgets.QLabel("Phenotype: motility")
        label.setStyleSheet("background-color: orange")
        self.vbox_cell_def.addWidget(label)
        # self.vbox_cell_def.addWidget(QHLine())
        #============  Secretion ================================
        label = QtWidgets.QLabel("Phenotype: secretion")
        label.setStyleSheet("background-color: orange")
        self.vbox_cell_def.addWidget(label)
        # self.vbox_cell_def.addWidget(QHLine())
        #============  Molecular ================================
        label = QtWidgets.QLabel("Phenotype: molecular")
        label.setStyleSheet("background-color: orange")
        self.vbox_cell_def.addWidget(label)
        # self.vbox_cell_def.addWidget(QHLine())

        #=====  Custom data
        label = QtWidgets.QLabel("Custom data")
        label.setStyleSheet("background-color: cyan")
        self.vbox_cell_def.addWidget(label)
        # self.vbox_cell_def.addWidget(QHLine())

        #==================================================================
        self.params_cell_def.setLayout(self.vbox_cell_def)

        self.scroll.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
        self.scroll.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
        self.scroll.setWidgetResizable(True)
        self.scroll.setWidget(self.params_cell_def)

        self.save_button = QtWidgets.QPushButton("Save")
        # self.text = QtWidgets.QLabel("Hello World",alignment=QtCore.Qt.AlignCenter)

        self.layout = QtWidgets.QVBoxLayout(self)
        # self.layout.addWidget(self.tabs)
        # self.layout.addWidget(QHLine())
        # self.layout.addWidget(self.params)
        self.layout.addWidget(self.scroll)
        # self.layout.addWidget(self.vbox_cell_def)
        # self.layout.addWidget(self.text)
        self.layout.addWidget(self.save_button)

        self.save_button.clicked.connect(self.save_xml)
예제 #8
0
파일: ToolBox.py 프로젝트: chiefenne/PyAero
    def itemMeshing(self):

        self.form_mesh_airfoil = QtWidgets.QFormLayout()

        label = QtWidgets.QLabel(u'Gridpoints along airfoil')
        label.setToolTip('Number of points as derived from splining')
        points = 0
        self.points_on_airfoil = QtWidgets.QLineEdit(str(points))
        self.points_on_airfoil.setEnabled(False)
        self.form_mesh_airfoil.addRow(label, self.points_on_airfoil)

        label = QtWidgets.QLabel(u'Divisions normal to airfoil')
        label.setToolTip('Number of points in the mesh which is constructed ' +
                         ' normal to the airfoil contour')
        self.points_n = QtWidgets.QSpinBox()
        self.points_n.setSingleStep(1)
        self.points_n.setRange(1, 500)
        self.points_n.setValue(15)
        self.form_mesh_airfoil.addRow(label, self.points_n)

        label = QtWidgets.QLabel('1st cell layer thickness (m)')
        label.setToolTip(
            'Thickness of 1st cell layer perpendicular to the airfoil')
        self.normal_thickness = QtWidgets.QDoubleSpinBox()
        self.normal_thickness.setSingleStep(0.001)
        self.normal_thickness.setRange(1.e-10, 1.e10)
        self.normal_thickness.setDecimals(8)
        self.normal_thickness.setValue(0.00400)
        self.form_mesh_airfoil.addRow(label, self.normal_thickness)

        label = QtWidgets.QLabel('Cell growth rate (-)')
        label.setToolTip('Rate at which 1st cell layer grows')
        self.ratio = QtWidgets.QDoubleSpinBox()
        self.ratio.setSingleStep(0.01)
        self.ratio.setRange(1., 100.)
        self.ratio.setValue(1.05)
        self.ratio.setDecimals(3)
        self.form_mesh_airfoil.addRow(label, self.ratio)

        self.form_mesh_TE = QtWidgets.QFormLayout()

        label = QtWidgets.QLabel(u'Divisions at trailing edge')
        label.setToolTip(
            'Number of subdivisions along the vertical part of the TE')
        self.te_div = QtWidgets.QSpinBox()
        self.te_div.setSingleStep(1)
        self.te_div.setRange(1, 20)
        self.te_div.setValue(3)
        self.form_mesh_TE.addRow(label, self.te_div)

        label = QtWidgets.QLabel(u'Divisions downstream')
        label.setToolTip(
            'Number of subdivisions downstream within the TE block')
        self.points_te = QtWidgets.QSpinBox()
        self.points_te.setSingleStep(1)
        self.points_te.setRange(1, 100)
        self.points_te.setValue(15)
        self.form_mesh_TE.addRow(label, self.points_te)

        label = QtWidgets.QLabel('1st cell layer thickness (m)')
        label.setToolTip(
            'Thickness of first cell layer in downstream direction')
        self.length_te = QtWidgets.QDoubleSpinBox()
        self.length_te.setSingleStep(0.001)
        self.length_te.setRange(1.e-10, 1.e10)
        self.length_te.setDecimals(8)
        self.length_te.setValue(0.00400)
        self.form_mesh_TE.addRow(label, self.length_te)

        label = QtWidgets.QLabel('Cell growth rate (-)')
        label.setToolTip(
            'Rate at which 1st cell layer downstream the TE grows')
        self.ratio_te = QtWidgets.QDoubleSpinBox()
        self.ratio_te.setSingleStep(0.01)
        self.ratio_te.setRange(1., 100.)
        self.ratio_te.setValue(1.05)
        self.ratio_te.setDecimals(3)
        self.form_mesh_TE.addRow(label, self.ratio_te)

        self.form_mesh_tunnel = QtWidgets.QFormLayout()

        label = QtWidgets.QLabel('Windtunnel Height (chords)')
        label.setToolTip('The height of the windtunnel in units ' +
                         'of chord length')
        self.tunnel_height = QtWidgets.QDoubleSpinBox()
        self.tunnel_height.setSingleStep(0.1)
        self.tunnel_height.setRange(0.1, 100.)
        self.tunnel_height.setValue(3.5)
        self.tunnel_height.setDecimals(1)
        self.form_mesh_tunnel.addRow(label, self.tunnel_height)

        label = QtWidgets.QLabel(u'Divisions of Tunnel Height')
        self.divisions_height = QtWidgets.QSpinBox()
        self.divisions_height.setSingleStep(10)
        self.divisions_height.setRange(1, 1000)
        self.divisions_height.setValue(100)
        self.form_mesh_tunnel.addRow(label, self.divisions_height)

        label = QtWidgets.QLabel('Cell Thickness ratio (-)')
        self.ratio_height = QtWidgets.QDoubleSpinBox()
        self.ratio_height.setSingleStep(1.0)
        self.ratio_height.setRange(0.1, 100.)
        self.ratio_height.setValue(10.0)
        self.ratio_height.setDecimals(1)
        self.form_mesh_tunnel.addRow(label, self.ratio_height)

        label = QtWidgets.QLabel('Distribution biasing')
        self.dist = QtWidgets.QComboBox()
        self.dist.addItems(['symmetric', 'lower', 'upper'])
        self.dist.setCurrentIndex(0)
        self.form_mesh_tunnel.addRow(label, self.dist)

        self.form_mesh_wake = QtWidgets.QFormLayout()

        label = QtWidgets.QLabel('Windtunnel Wake (chords)')
        label.setToolTip('The length of the wake of the windtunnel in ' +
                         'units of chord length')
        self.tunnel_wake = QtWidgets.QDoubleSpinBox()
        self.tunnel_wake.setSingleStep(0.1)
        self.tunnel_wake.setRange(0.1, 100.)
        self.tunnel_wake.setValue(7.0)
        self.tunnel_wake.setDecimals(1)
        self.form_mesh_wake.addRow(label, self.tunnel_wake)

        label = QtWidgets.QLabel(u'Divisions in the wake')
        self.divisions_wake = QtWidgets.QSpinBox()
        self.divisions_wake.setSingleStep(10)
        self.divisions_wake.setRange(1, 1000)
        self.divisions_wake.setValue(100)
        self.form_mesh_wake.addRow(label, self.divisions_wake)

        label = QtWidgets.QLabel('Cell Thickness ratio (-)')
        label.setToolTip('Thickness of the last cell vs. the first cell in ' +
                         'the wake mesh block')
        self.ratio_wake = QtWidgets.QDoubleSpinBox()
        self.ratio_wake.setSingleStep(0.1)
        self.ratio_wake.setRange(0.01, 100.0)
        self.ratio_wake.setValue(15.0)
        self.ratio_wake.setDecimals(1)
        self.form_mesh_wake.addRow(label, self.ratio_wake)

        label = QtWidgets.QLabel('Equalize vertical wake line at (%)')
        label.setToolTip('Equalize  the wake line vertically. ' +
                         'Homogeneous vertical distribution at x% downstream')
        self.spread = QtWidgets.QDoubleSpinBox()
        self.spread.setSingleStep(5.0)
        self.spread.setRange(10.0, 90.0)
        self.spread.setValue(30.0)
        self.spread.setDecimals(1)
        self.form_mesh_wake.addRow(label, self.spread)

        # smoothing parameters
        label = QtWidgets.QLabel('Smoothing')
        label.setToolTip('Specify algorithm and parameters for smoothing')
        self.btn_smoother_1 = QtWidgets.QRadioButton('Simple (fast)')
        self.btn_smoother_2 = QtWidgets.QRadioButton('Elliptic (medium)')
        self.btn_smoother_3 = QtWidgets.QRadioButton('Angle based (slow)')
        # initialize simple smoother
        self.btn_smoother_1.setChecked(True)
        self.smoothing_algorithm = 'simple'

        self.btn_smoother_1.clicked.connect(self.smoother_btn_clicked)
        self.btn_smoother_2.clicked.connect(self.smoother_btn_clicked)
        self.btn_smoother_3.clicked.connect(self.smoother_btn_clicked)

        smoother_settings = QtWidgets.QFormLayout()

        label = QtWidgets.QLabel('Iterations')
        self.smoother_iterations = QtWidgets.QSpinBox()
        self.smoother_iterations.setValue(20)
        self.smoother_iterations.setSingleStep(5)
        self.smoother_iterations.setRange(0, 1000)
        self.smoother_iterations.setEnabled(False)
        smoother_settings.addRow(label, self.smoother_iterations)

        label = QtWidgets.QLabel('Tolerance')
        self.smoother_tolerance = QtWidgets.QLineEdit()
        self.onlyFloat = QtGui.QDoubleValidator()
        self.smoother_tolerance.setValidator(self.onlyFloat)
        self.smoother_tolerance.setText('1.e-5')
        self.onlyFloat.setRange(1.e-8, 1.0)
        self.onlyFloat.setDecimals(8)
        self.smoother_tolerance.setEnabled(False)
        smoother_settings.addRow(label, self.smoother_tolerance)

        hbox_smoothing = QtWidgets.QHBoxLayout()
        vbox1 = QtWidgets.QVBoxLayout()
        vbox2 = QtWidgets.QVBoxLayout()
        vbox1.addWidget(self.btn_smoother_1)
        vbox1.addWidget(self.btn_smoother_2)
        vbox1.addWidget(self.btn_smoother_3)
        vbox2.addLayout(smoother_settings)
        hbox_smoothing.addLayout(vbox1)
        hbox_smoothing.addLayout(vbox2)

        vbox = QtWidgets.QVBoxLayout()
        vbox.addLayout(self.form_mesh_airfoil)
        box_airfoil = QtWidgets.QGroupBox('Airfoil contour mesh')
        box_airfoil.setLayout(vbox)

        vbox = QtWidgets.QVBoxLayout()
        vbox.addLayout(self.form_mesh_TE)
        box_TE = QtWidgets.QGroupBox('Airfoil trailing edge mesh')
        box_TE.setLayout(vbox)

        vbox = QtWidgets.QVBoxLayout()
        vbox.addLayout(self.form_mesh_tunnel)
        box_tunnel = QtWidgets.QGroupBox('Windtunnel mesh (around airfoil)')
        box_tunnel.setLayout(vbox)

        vbox = QtWidgets.QVBoxLayout()
        vbox.addLayout(self.form_mesh_wake)
        box_wake = QtWidgets.QGroupBox('Windtunnel mesh (wake)')
        box_wake.setLayout(vbox)

        box_smoothing = QtWidgets.QGroupBox('Smoothing')
        box_smoothing.setLayout(hbox_smoothing)

        self.createMeshButton = QtWidgets.QPushButton('Create Mesh')
        hbl_cm = QtWidgets.QHBoxLayout()
        hbl_cm.addStretch(stretch=1)
        hbl_cm.addWidget(self.createMeshButton, stretch=4)
        hbl_cm.addStretch(stretch=1)

        # export menu and boundary definitions
        self.form_bnd = QtWidgets.QFormLayout()

        label = QtWidgets.QLabel('Boundary name for airfoil')
        label.setToolTip('Name of the boundary definition for the airfoil')
        self.lineedit_airfoil = QtWidgets.QLineEdit('Airfoil')
        self.form_bnd.addRow(label, self.lineedit_airfoil)

        label = QtWidgets.QLabel('Boundary name for inlet')
        label.setToolTip('Name of the boundary definition for the inlet flow')
        self.lineedit_inlet = QtWidgets.QLineEdit('Inlet')
        self.form_bnd.addRow(label, self.lineedit_inlet)

        label = QtWidgets.QLabel('Boundary name for outlet')
        label.setToolTip('Name of the boundary definition for the outlet flow')
        self.lineedit_outlet = QtWidgets.QLineEdit('Outlet')
        self.form_bnd.addRow(label, self.lineedit_outlet)

        label = QtWidgets.QLabel('Boundary name for symmetry')
        label.setToolTip('Name of the boundary definition for the symmetry')
        self.lineedit_symmetry = QtWidgets.QLineEdit('Symmetry')
        self.form_bnd.addRow(label, self.lineedit_symmetry)

        self.check_FIRE = QtWidgets.QCheckBox('AVL FIRE')
        self.check_SU2 = QtWidgets.QCheckBox('SU2')
        self.check_GMSH = QtWidgets.QCheckBox('GMSH')
        self.check_VTK = QtWidgets.QCheckBox('VTK')
        self.check_CGNS = QtWidgets.QCheckBox('CGNS')
        self.check_ABAQUS = QtWidgets.QCheckBox('ABAQUS')
        self.check_FIRE.setChecked(True)
        self.check_SU2.setChecked(True)
        self.check_GMSH.setChecked(False)
        self.check_VTK.setChecked(True)
        self.check_CGNS.setChecked(False)
        self.check_ABAQUS.setChecked(False)
        label = QtWidgets.QLabel('Export format:')
        label.setToolTip('Check format to be exported')

        grid = QtWidgets.QGridLayout()
        grid.addWidget(label, 0, 0)
        grid.addWidget(self.check_FIRE, 0, 1)
        grid.addWidget(self.check_SU2, 0, 2)
        grid.addWidget(self.check_GMSH, 0, 3)
        grid.addWidget(self.check_VTK, 1, 1)
        grid.addWidget(self.check_CGNS, 1, 2)
        grid.addWidget(self.check_ABAQUS, 1, 3)

        exportMeshButton = QtWidgets.QPushButton('Export Mesh')
        hbl = QtWidgets.QHBoxLayout()
        hbl.addStretch(stretch=1)
        hbl.addWidget(exportMeshButton, stretch=4)
        hbl.addStretch(stretch=1)

        vbl1 = QtWidgets.QVBoxLayout()
        vbl1.addLayout(self.form_bnd)
        vbl1.addLayout(grid)
        vbl1.addLayout(hbl)

        self.box_meshexport = QtWidgets.QGroupBox('Mesh Export')
        self.box_meshexport.setLayout(vbl1)
        self.box_meshexport.setEnabled(False)

        vbl = QtWidgets.QVBoxLayout()
        vbl.addStretch(1)
        vbl.addWidget(box_airfoil)
        vbl.addWidget(box_TE)
        vbl.addWidget(box_tunnel)
        vbl.addWidget(box_wake)
        vbl.addWidget(box_smoothing)
        vbl.addLayout(hbl_cm)
        vbl.addStretch(1)
        vbl.addWidget(self.box_meshexport)
        vbl.addStretch(10)

        self.item_msh = QtWidgets.QWidget()
        self.item_msh.setLayout(vbl)

        self.createMeshButton.clicked.connect(self.generateMesh)
        exportMeshButton.clicked.connect(self.exportMesh)
예제 #9
0
    def __init__(self):
        super().__init__()
        # global self.params_cell_def

        # self.cell_defs = CellDefInstances()
        self.cell_def_horiz_layout = QtWidgets.QHBoxLayout()

        splitter = QtWidgets.QSplitter()

        self.tree = QtWidgets.QTreeWidget()
        self.tree.setStyleSheet("background-color: lightgray")
        # self.tree.setColumnCount(1)

        header = QTreeWidgetItem(["---  Cell Types  ---"])
        self.tree.setHeaderItem(header)

        cellname = QTreeWidgetItem(["epi cell"])
        self.tree.insertTopLevelItem(0,cellname)

        cellname = QTreeWidgetItem(["macrophage"])
        self.tree.insertTopLevelItem(1,cellname)

        # cities =  QTreeWidgetItem(treeWidget)

        # titem = QtWidgets.QTreeWidgetItem
        # titem.setText(0,'ttt')

        # header.setText(0,"epithelial cell")
        # header.setText(1,"macrophage")
        # self.tree.addTopLevelItem(QTreeWidgetItem("foo"))

        items = []
        model = QtCore.QStringListModel()
        model.setStringList(["aaa","bbb"])
        # self.tree.insertTopLevelItems(None, model)
        # slist = QtCore.QStringList()
        # for i in range(10):
        #     items.append(QTreeWidgetItem(None, QtGui.QStringList(QString("item: %1").arg(i))))
        # self.tree.insertTopLevelItems(None, items)

        # self.log_widget.setHeaderItem(QtWidgets.QTreeWidgetItem(["date", "origin", "type", "message"]))


        self.cell_def_horiz_layout.addWidget(self.tree)

        self.scroll_cell_def_tree = QtWidgets.QScrollArea()
        self.scroll_cell_def_tree.setWidget(self.tree)

        # splitter.addWidget(self.tree)
        splitter.addWidget(self.scroll_cell_def_tree)

        #-------------------------------------------
        # self.tab = QtWidgets.QWidget()
        # self.tabs.resize(200,5)
        
        #-------------------------------------------
        label_width = 210
        units_width = 70

        self.scroll = QtWidgets.QScrollArea()
        splitter.addWidget(self.scroll)
        # self.cell_def_horiz_layout.addWidget(self.scroll)

        self.params_cell_def = QtWidgets.QWidget()
        self.vbox_cell_def = QtWidgets.QVBoxLayout()

        # self.cell_def_horiz_layout.addWidget(self.)

        #------------------
        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("Name of cell type:")
        label.setFixedWidth(110)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)

        self.cell_type_name = QLineEdit()
        # Want to validate name, e.g., starts with alpha, no special chars, etc.
        # self.cycle_trate0_0.setValidator(QtGui.QDoubleValidator())
        # self.cycle_trate0_1.enter.connect(self.save_xml)
        hbox.addWidget(self.cell_type_name)
        self.vbox_cell_def.addLayout(hbox)

        #------------------
        self.cycle_dropdown = QtWidgets.QComboBox()
        self.cycle_dropdown.setFixedWidth(300)
        # self.cycle_dropdown.currentIndex.connect(self.cycle_changed_cb)
        self.cycle_dropdown.currentIndexChanged.connect(self.cycle_changed_cb)

        # Rf. Section 17 of User Guide
        self.cycle_dropdown.addItem("live cells")
        self.cycle_dropdown.addItem("basic Ki67")
        self.cycle_dropdown.addItem("advanced Ki67")
        self.cycle_dropdown.addItem("flow cytometry")
        self.cycle_dropdown.addItem("flow cytometry separated")
        self.cycle_dropdown.addItem("cycling quiescent")
        self.cycle_dropdown.addItem("live apoptotic")
        self.cycle_dropdown.addItem("total cells")

        self.vbox_cell_def.addWidget(self.cycle_dropdown)

        #=====  Phenotype 
        #============  Cycle ================================
        label = QtWidgets.QLabel("Phenotype: cycle")
        label.setStyleSheet("background-color: orange")
        label.setAlignment(QtCore.Qt.AlignCenter)
        self.vbox_cell_def.addWidget(label)

        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("Phase 0->0 transition rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)

        self.cycle_trate0_0 = QtWidgets.QLineEdit()
        # self.cycle_trate0_1.setValidator(QtGui.QIntValidator())
        self.cycle_trate0_0.setValidator(QtGui.QDoubleValidator())
        # self.cycle_trate0_1.enter.connect(self.save_xml)
        hbox.addWidget(self.cycle_trate0_0)

        units = QtWidgets.QLabel("1/min")
        units.setFixedWidth(units_width)
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)
        #----------
        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("Phase 0->1 transition rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)

        self.cycle_trate0_1 = QtWidgets.QLineEdit()
        # self.cycle_trate0_1.setValidator(QtGui.QIntValidator())
        self.cycle_trate0_1.setValidator(QtGui.QDoubleValidator())
        # self.cycle_trate0_1.enter.connect(self.save_xml)
        hbox.addWidget(self.cycle_trate0_1)

        units = QtWidgets.QLabel("1/min")
        units.setFixedWidth(units_width)
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)
        #----------
        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("Phase 1->2 transition rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)

        self.cycle_trate1_2 = QtWidgets.QLineEdit()
        self.cycle_trate1_2.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.cycle_trate1_2)

        units = QtWidgets.QLabel("1/min")
        units.setFixedWidth(units_width)
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)
        #----------
        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("Phase 2->3 transition rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)

        self.cycle_trate2_3 = QtWidgets.QLineEdit()
        self.cycle_trate2_3.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.cycle_trate2_3)

        units = QtWidgets.QLabel("1/min")
        units.setFixedWidth(units_width)
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)
        #----------
        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("Phase 3->0 transition rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)

        self.cycle_trate3_0 = QtWidgets.QLineEdit()
        self.cycle_trate3_0.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.cycle_trate3_0)

        units = QtWidgets.QLabel("1/min")
        units.setFixedWidth(units_width)
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)

        #============  Death ================================
        label = QtWidgets.QLabel("Phenotype: death")
        label.setStyleSheet("background-color: orange")
        label.setAlignment(QtCore.Qt.AlignCenter)
        self.vbox_cell_def.addWidget(label)
        # self.vbox_cell_def.addWidget(QHLine())

        #-----
        label = QtWidgets.QLabel("Apoptosis")
        label.setAlignment(QtCore.Qt.AlignCenter)
        label.setStyleSheet('background-color: yellow')
        self.vbox_cell_def.addWidget(label)

        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("death rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.death_apop_rate = QtWidgets.QLineEdit()
        self.death_apop_rate.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.death_apop_rate)
        units = QtWidgets.QLabel("1/min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)

        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("phase 0 duration")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.phase0_duration = QtWidgets.QLineEdit()
        self.phase0_duration.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.phase0_duration)
        units = QtWidgets.QLabel("min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)

        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("phase 1 duration")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.phase1_duration = QtWidgets.QLineEdit()
        self.phase1_duration.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.phase1_duration)
        units = QtWidgets.QLabel("min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)

        # <phase_durations units="min">
        #     <duration index="0" fixed_duration="true">516</duration>

        # <unlysed_fluid_change_rate units="1/min">0.05</unlysed_fluid_change_rate>
        # <lysed_fluid_change_rate units="1/min">0</lysed_fluid_change_rate>
        # <cytoplasmic_biomass_change_rate units="1/min">1.66667e-02</cytoplasmic_biomass_change_rate>
        # <nuclear_biomass_change_rate units="1/min">5.83333e-03</nuclear_biomass_change_rate>
        # <calcification_rate units="1/min">0</calcification_rate>
        # <relative_rupture_volume units="dimensionless">2.0</relative_rupture_volume>
        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("unlysed_fluid_change_rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.apoptosis_unlysed_rate = QtWidgets.QLineEdit()
        self.apoptosis_unlysed_rate.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.apoptosis_unlysed_rate)
        units = QtWidgets.QLabel("1/min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)

        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("lysed_fluid_change_rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.apoptosis_lysed_rate = QtWidgets.QLineEdit()
        self.apoptosis_lysed_rate.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.apoptosis_lysed_rate)
        units = QtWidgets.QLabel("1/min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)

        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("cytoplasmic_biomass_change_rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.apoptosis_cytoplasmic_biomass_change_rate = QtWidgets.QLineEdit()
        self.apoptosis_cytoplasmic_biomass_change_rate.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.apoptosis_cytoplasmic_biomass_change_rate)
        units = QtWidgets.QLabel("1/min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)
        # <nuclear_biomass_change_rate units="1/min">5.83333e-03</nuclear_biomass_change_rate>
        # <calcification_rate units="1/min">0</calcification_rate>
        # <relative_rupture_volume units="dimensionless">2.0</relative_rupture_volume>

        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("nuclear_biomass_change_rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.apoptosis_nuclear_biomass_change_rate = QtWidgets.QLineEdit()
        self.apoptosis_nuclear_biomass_change_rate.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.apoptosis_nuclear_biomass_change_rate)
        units = QtWidgets.QLabel("1/min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)

        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("calcification_rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.calcification_rate = QtWidgets.QLineEdit()
        self.calcification_rate.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.calcification_rate)
        units = QtWidgets.QLabel("1/min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)

        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("relative_rupture_volume")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.relative_rupture_volume = QtWidgets.QLineEdit()
        self.relative_rupture_volume.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.relative_rupture_volume)
        units = QtWidgets.QLabel("")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)

        #-----------------------------------------------------------
        # self.vbox_cell_def.addWidget(QHLine())
        label = QtWidgets.QLabel("Necrosis")
        label.setAlignment(QtCore.Qt.AlignCenter)
        label.setStyleSheet('background-color: yellow')
        self.vbox_cell_def.addWidget(label)
        # self.vbox_cell_def.addWidget(QHLine())

        # label_width = 210
        # units_width = 45
        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("death rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.death_necrosis_rate = QtWidgets.QLineEdit()
        self.death_necrosis_rate.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.death_necrosis_rate)
        units = QtWidgets.QLabel("1/min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)

        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("phase 0 duration")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.phase0_duration = QtWidgets.QLineEdit()
        self.phase0_duration.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.phase0_duration)
        units = QtWidgets.QLabel("min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)

        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("phase 1 duration")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.phase1_duration = QtWidgets.QLineEdit()
        self.phase1_duration.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.phase1_duration)
        units = QtWidgets.QLabel("min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)

        # <phase_durations units="min">
        #     <duration index="0" fixed_duration="true">516</duration>

        # <unlysed_fluid_change_rate units="1/min">0.05</unlysed_fluid_change_rate>
        # <lysed_fluid_change_rate units="1/min">0</lysed_fluid_change_rate>
        # <cytoplasmic_biomass_change_rate units="1/min">1.66667e-02</cytoplasmic_biomass_change_rate>
        # <nuclear_biomass_change_rate units="1/min">5.83333e-03</nuclear_biomass_change_rate>
        # <calcification_rate units="1/min">0</calcification_rate>
        # <relative_rupture_volume units="dimensionless">2.0</relative_rupture_volume>
        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("unlysed_fluid_change_rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.necrosis_unlysed_rate = QtWidgets.QLineEdit()
        self.necrosis_unlysed_rate.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.necrosis_unlysed_rate)
        units = QtWidgets.QLabel("1/min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)

        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("lysed_fluid_change_rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.necrosis_lysed_rate = QtWidgets.QLineEdit()
        self.necrosis_lysed_rate.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.necrosis_lysed_rate)
        units = QtWidgets.QLabel("1/min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)

        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("cytoplasmic_biomass_change_rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.necrosis_cytoplasmic_biomass_change_rate = QtWidgets.QLineEdit()
        self.necrosis_cytoplasmic_biomass_change_rate.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.necrosis_cytoplasmic_biomass_change_rate)
        units = QtWidgets.QLabel("1/min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)
        # <nuclear_biomass_change_rate units="1/min">5.83333e-03</nuclear_biomass_change_rate>
        # <calcification_rate units="1/min">0</calcification_rate>
        # <relative_rupture_volume units="dimensionless">2.0</relative_rupture_volume>

        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("nuclear_biomass_change_rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.necrosis_nuclear_biomass_change_rate = QtWidgets.QLineEdit()
        self.necrosis_nuclear_biomass_change_rate.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.necrosis_nuclear_biomass_change_rate)
        units = QtWidgets.QLabel("1/min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)

        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("calcification_rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.calcification_rate = QtWidgets.QLineEdit()
        self.calcification_rate.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.calcification_rate)
        units = QtWidgets.QLabel("1/min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)

        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("relative_rupture_volume")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.relative_rupture_volume = QtWidgets.QLineEdit()
        self.relative_rupture_volume.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.relative_rupture_volume)
        units = QtWidgets.QLabel("")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)

        #============  Volume ================================
        label = QtWidgets.QLabel("Phenotype: volume")
        label.setStyleSheet("background-color: orange")
        label.setAlignment(QtCore.Qt.AlignCenter)
        self.vbox_cell_def.addWidget(label)
        # <total units="micron^3">2494</total>
        # <fluid_fraction units="dimensionless">0.75</fluid_fraction>
        # <nuclear units="micron^3">540</nuclear>
        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("total")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.volume_total = QtWidgets.QLineEdit()
        self.volume_total.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.volume_total)
        units = QtWidgets.QLabel("micron^3")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)

        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("fluid_fraction")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.volume_fluid_fraction = QtWidgets.QLineEdit()
        self.volume_fluid_fraction.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.volume_fluid_fraction)
        units = QtWidgets.QLabel("")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)

        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("nuclear")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.volume_nuclear = QtWidgets.QLineEdit()
        self.volume_nuclear.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.volume_nuclear)
        units = QtWidgets.QLabel("micron^3")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)
        
        # <fluid_change_rate units="1/min">0.05</fluid_change_rate>
        # <cytoplasmic_biomass_change_rate units="1/min">0.0045</cytoplasmic_biomass_change_rate>
        # <nuclear_biomass_change_rate units="1/min">0.0055</nuclear_biomass_change_rate>

        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("fluid_change_rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.volume_fluid_change_rate = QtWidgets.QLineEdit()
        self.volume_fluid_change_rate.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.volume_fluid_change_rate)
        units = QtWidgets.QLabel("1/min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)

        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("cytoplasmic_biomass_change_rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.cytoplasmic_biomass_change_rate = QtWidgets.QLineEdit()
        self.cytoplasmic_biomass_change_rate.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.cytoplasmic_biomass_change_rate)
        units = QtWidgets.QLabel("1/min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)

        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("nuclear_biomass_change_rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.nuclear_biomass_change_rate = QtWidgets.QLineEdit()
        self.nuclear_biomass_change_rate.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.nuclear_biomass_change_rate)
        units = QtWidgets.QLabel("1/min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)
        
        # <calcified_fraction units="dimensionless">0</calcified_fraction>
        # <calcification_rate units="1/min">0</calcification_rate>
        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("calcified_fraction")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.calcified_fraction = QtWidgets.QLineEdit()
        self.calcified_fraction.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.calcified_fraction)
        units = QtWidgets.QLabel("")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)

        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("calcified_rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.calcified_rate = QtWidgets.QLineEdit()
        self.calcified_rate.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.calcified_rate)
        units = QtWidgets.QLabel("1/min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)
        
        # <relative_rupture_volume units="dimensionless">2.0</relative_rupture_volume>


        # self.vbox_cell_def.addWidget(QHLine())
        #============  Mechanics ================================
        label = QtWidgets.QLabel("Phenotype: mechanics")
        label.setStyleSheet("background-color: orange")
        label.setAlignment(QtCore.Qt.AlignCenter)
        self.vbox_cell_def.addWidget(label)
        # self.vbox_cell_def.addWidget(QHLine())

    # <cell_cell_adhesion_strength units="micron/min">0.4</cell_cell_adhesion_strength>
    # <cell_cell_repulsion_strength units="micron/min">10.0</cell_cell_repulsion_strength>
    # <relative_maximum_adhesion_distance units="dimensionless">1.25</relative_maximum_adhesion_distance>
        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("cell_cell_adhesion_strength")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.cell_cell_adhesion_strength = QtWidgets.QLineEdit()
        self.cell_cell_adhesion_strength.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.cell_cell_adhesion_strength)
        units = QtWidgets.QLabel("micron/min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)

        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("cell_cell_repulsion_strength")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.cell_cell_repulsion_strength = QtWidgets.QLineEdit()
        self.cell_cell_repulsion_strength.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.cell_cell_repulsion_strength)
        units = QtWidgets.QLabel("micron/min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)

        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("relative_maximum_adhesion_distance")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.relative_maximum_adhesion_distance = QtWidgets.QLineEdit()
        self.relative_maximum_adhesion_distance.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.relative_maximum_adhesion_distance)
        units = QtWidgets.QLabel("")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)
    
    # <options>
    #     <set_relative_equilibrium_distance enabled="false" units="dimensionless">1.8</set_relative_equilibrium_distance>
    #     <set_absolute_equilibrium_distance enabled="false" units="micron">15.12</set_absolute_equilibrium_distance>
    # </options>
        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("set_relative_equilibrium_distance")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.set_relative_equilibrium_distance = QtWidgets.QLineEdit()
        self.set_relative_equilibrium_distance.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.set_relative_equilibrium_distance)
        units = QtWidgets.QLabel("")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)

        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("set_absolute_equilibrium_distance")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.set_absolute_equilibrium_distance = QtWidgets.QLineEdit()
        self.set_absolute_equilibrium_distance.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.set_absolute_equilibrium_distance)
        units = QtWidgets.QLabel("micron")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)


        #============  Motility ================================
        label = QtWidgets.QLabel("Phenotype: motility")
        label.setStyleSheet("background-color: orange")
        label.setAlignment(QtCore.Qt.AlignCenter)
        self.vbox_cell_def.addWidget(label)
        # self.vbox_cell_def.addWidget(QHLine())

        # <speed units="micron/min">1</speed>
        # <persistence_time units="min">1</persistence_time>
        # <migration_bias units="dimensionless">.75</migration_bias>
        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("speed")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.speed = QtWidgets.QLineEdit()
        self.speed.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.speed)
        units = QtWidgets.QLabel("micron/min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)

        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("persistence_time")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.persistence_time = QtWidgets.QLineEdit()
        self.persistence_time.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.persistence_time)
        units = QtWidgets.QLabel("min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)

        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("migration_bias")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.migration_bias = QtWidgets.QLineEdit()
        self.migration_bias.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.migration_bias)
        units = QtWidgets.QLabel("")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)
        
        # <options>
        #     <enabled>false</enabled>
        #     <use_2D>true</use_2D>
        #     <chemotaxis>
        #         <enabled>false</enabled>
        #         <substrate>virus</substrate>
        #         <direction>1</direction>
        #     </chemotaxis>
        # </options>
        hbox = QtWidgets.QHBoxLayout()
        self.motility_enabled = QtWidgets.QCheckBox("enable")
        # self.motility_enabled.setAlignment(QtCore.Qt.AlignRight)
        # label.setFixedWidth(label_width)
        hbox.addWidget(self.motility_enabled)

        self.motility_2D = QtWidgets.QCheckBox("2D")
        # self.motility_2D.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(self.motility_2D)
        self.vbox_cell_def.addLayout(hbox)

        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("Chemotaxis")
        label.setFixedWidth(200)
        label.setAlignment(QtCore.Qt.AlignCenter)
        label.setStyleSheet('background-color: yellow')
        hbox.addWidget(label)

        self.chemotaxis_enabled = QtWidgets.QCheckBox("enabled")
        # self.motility_2D.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(self.chemotaxis_enabled)
        self.vbox_cell_def.addLayout(hbox)

        self.motility_substrate_dropdown = QtWidgets.QComboBox()
        self.motility_substrate_dropdown.setFixedWidth(300)
        # self.cycle_dropdown.currentIndex.connect(self.cycle_changed_cb)
        # self.motility_substrate_dropdown.currentIndexChanged.connect(self.motility_substrate_changed_cb)
        self.motility_substrate_dropdown.addItem("oxygen")
        self.vbox_cell_def.addWidget(self.motility_substrate_dropdown)

        #============  Secretion ================================
        label = QtWidgets.QLabel("Phenotype: secretion")
        label.setStyleSheet("background-color: orange")
        label.setAlignment(QtCore.Qt.AlignCenter)
        self.vbox_cell_def.addWidget(label)
        # self.vbox_cell_def.addWidget(QHLine())

        # <substrate name="virus">
        #     <secretion_rate units="1/min">0</secretion_rate>
        #     <secretion_target units="substrate density">1</secretion_target>
        #     <uptake_rate units="1/min">10</uptake_rate>
        #     <net_export_rate units="total substrate/min">0</net_export_rate> 
        # </substrate> 
        
        # <substrate name="interferon">
        #     <secretion_rate units="1/min">0</secretion_rate>
        #     <secretion_target units="substrate density">1</secretion_target>
        #     <uptake_rate units="1/min">0</uptake_rate>
        #     <net_export_rate units="total substrate/min">0</net_export_rate> 
        # </substrate> 
        label = QtWidgets.QLabel("oxygen")
        label.setStyleSheet('background-color: lightgreen')
        label.setFixedWidth(150)
        self.vbox_cell_def.addWidget(label)

        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("secretion_rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.secretion_rate1 = QtWidgets.QLineEdit()
        self.secretion_rate1.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.secretion_rate1)
        units = QtWidgets.QLabel("1/min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)

        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("target")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.secretion_target1 = QtWidgets.QLineEdit()
        self.secretion_target1.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.secretion_target1)
        units = QtWidgets.QLabel("")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)

        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("uptake_rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.uptake_rate1 = QtWidgets.QLineEdit()
        self.uptake_rate1.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.uptake_rate1)
        units = QtWidgets.QLabel("1/min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)

        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("net_export_rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)
        self.secretion_net_export_rate = QtWidgets.QLineEdit()
        self.secretion_net_export_rate.setValidator(QtGui.QDoubleValidator())
        hbox.addWidget(self.secretion_net_export_rate)
        units = QtWidgets.QLabel("total/min")
        units.setFixedWidth(units_width)
        units.setAlignment(QtCore.Qt.AlignLeft)
        hbox.addWidget(units)
        self.vbox_cell_def.addLayout(hbox)


        #============  Molecular ================================
        label = QtWidgets.QLabel("Phenotype: molecular")
        label.setStyleSheet("background-color: orange")
        label.setAlignment(QtCore.Qt.AlignCenter)
        self.vbox_cell_def.addWidget(label)
        # self.vbox_cell_def.addWidget(QHLine())

        #=====  Custom data 
        label = QtWidgets.QLabel("Custom data")
        label.setStyleSheet("background-color: cyan")
        self.vbox_cell_def.addWidget(label)
        # self.vbox_cell_def.addWidget(QHLine())

        #==================================================================
        self.params_cell_def.setLayout(self.vbox_cell_def)

        self.scroll.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
        self.scroll.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
        self.scroll.setWidgetResizable(True)
        self.scroll.setWidget(self.params_cell_def)


        self.save_button = QtWidgets.QPushButton("Save")
        # self.text = QtWidgets.QLabel("Hello World",alignment=QtCore.Qt.AlignCenter)

        self.layout = QtWidgets.QVBoxLayout(self)

        # self.layout.addWidget(self.tabs)
        # self.layout.addWidget(QHLine())
        # self.layout.addWidget(self.params)

        # self.layout.addWidget(self.scroll)
        self.layout.addWidget(splitter)
예제 #10
0
    def __init__(self):
        super().__init__()

        # self.current_param = None
        self.xml_root = None
        self.count = 0

        #-------------------------------------------
        self.label_width = 150
        self.units_width = 90

        self.scroll_area = QScrollArea()
        # splitter.addWidget(self.scroll)
        # self.cell_def_horiz_layout.addWidget(self.scroll)

        self.custom_data_params = QWidget()
        self.main_layout = QVBoxLayout()
        # self.main_layout.addStretch(0)

        #------------------
        controls_hbox = QHBoxLayout()
        # self.new_button = QPushButton("New")
        self.new_button = QPushButton("Append 5 more rows")
        controls_hbox.addWidget(self.new_button)
        self.new_button.clicked.connect(self.append_more_cb)

        # self.copy_button = QPushButton("Copy")
        # controls_hbox.addWidget(self.copy_button)

        self.clear_button = QPushButton("Clear selected rows")
        controls_hbox.addWidget(self.clear_button)
        self.clear_button.clicked.connect(self.clear_rows_cb)

        #------------------
        # <random_seed type="int" units="dimensionless">0</random_seed>
        # <cargo_signal_D type="double" units="micron/min^2">1e3</cargo_signal_D>

        # Fixed names for columns:
        hbox = QHBoxLayout()
        # self.select = QCheckBox("")
        col1 = QLabel("Name (required)")
        col1.setAlignment(QtCore.Qt.AlignCenter)
        hbox.addWidget(col1)
        # col2 = QLabel("Type")
        # col2.setAlignment(QtCore.Qt.AlignCenter)
        # hbox.addWidget(col2)
        col3 = QLabel("Default Value (floating point)")
        col3.setAlignment(QtCore.Qt.AlignCenter)
        hbox.addWidget(col3)
        col4 = QLabel("Units")
        col4.setFixedWidth(self.units_width)
        col4.setAlignment(QtCore.Qt.AlignCenter)
        hbox.addWidget(col4)
        # label.setFixedWidth(180)
        self.main_layout.addLayout(hbox)

        #------------------

        # Create lists for the various input boxes
        self.select = []
        self.name = []
        # self.type = []
        self.value = []
        self.units = []
        self.description = []

        # self.type_dropdown = QComboBox()
        # self.type_dropdown.setFixedWidth(300)
        # # self.type_dropdown.currentIndexChanged.connect(self.cycle_changed_cb)
        # self.type_dropdown.addItem("int")
        # self.type_dropdown.addItem("double")
        # self.type_dropdown.addItem("bool")
        # self.type_dropdown.addItem("text")

        for idx in range(25):
            # self.main_layout.addLayout(NewUserParam(self))
            hbox = QHBoxLayout()
            w = QCheckBox("")
            self.select.append(w)
            hbox.addWidget(w)

            w = QLineEdit()
            self.name.append(w)
            # self.name.setValidator(QtGui.QDoubleValidator())
            # self.diffusion_coef.enter.connect(self.save_xml)
            hbox.addWidget(w)
            # if idx == 0:
            #     w.setText("random_seed")

            # w = QComboBox()
            # # xml2jupyter: {"double":"FloatText", "int":"IntText", "bool":"Checkbox", "string":"Text", "divider":""}
            # w.addItem("double")
            # w.addItem("int")
            # w.addItem("bool")
            # w.addItem("string")
            # if idx == 0:
            #     w.setCurrentIndex(1)
            # self.type.append(w)
            # hbox.addWidget(w)

            w = QLineEdit()
            w.setText("0.0")
            self.value.append(w)
            w.setValidator(QtGui.QDoubleValidator())
            # if idx == 0:
            #     w.setText("0")
            hbox.addWidget(w)

            w = QLineEdit()
            w.setFixedWidth(self.units_width)
            self.units.append(w)
            hbox.addWidget(w)

            # units = QLabel("micron^2/min")
            # units.setFixedWidth(units_width)
            # hbox.addWidget(units)
            self.main_layout.addLayout(hbox)

            #-----
            hbox = QHBoxLayout()
            w = QLabel("Desc:")
            hbox.addWidget(w)

            w = QLineEdit()
            self.description.append(w)
            hbox.addWidget(w)
            w.setStyleSheet("background-color: lightgray")
            # w.setStyleSheet("background-color: #e4e4e4")
            self.main_layout.addLayout(hbox)

            #-----
            # self.vbox.addLayout(hbox)
            self.count = self.count + 1
            # print(self.count)

        #==================================================================
        self.custom_data_params.setLayout(self.main_layout)

        self.scroll_area.setVerticalScrollBarPolicy(
            QtCore.Qt.ScrollBarAlwaysOn)
        self.scroll_area.setHorizontalScrollBarPolicy(
            QtCore.Qt.ScrollBarAlwaysOn)
        self.scroll_area.setWidgetResizable(True)

        self.scroll_area.setWidget(self.custom_data_params)

        self.layout = QVBoxLayout(self)

        self.layout.addLayout(controls_hbox)
        self.layout.addWidget(self.scroll_area)
예제 #11
0
    def __init__(self):
        super().__init__()
        # global self.params_cell_def

        # self.cell_defs = CellDefInstances()
        self.cell_def_horiz_layout = QtWidgets.QHBoxLayout()

        splitter = QtWidgets.QSplitter()

        self.tree = QtWidgets.QTreeWidget()
        self.tree.setStyleSheet("background-color: lightgray")
        # self.tree.setColumnCount(1)

        header = QTreeWidgetItem(["---  Substrate or Signal---"])
        self.tree.setHeaderItem(header)

        cellname = QTreeWidgetItem(["virus"])
        self.tree.insertTopLevelItem(0, cellname)

        cellname = QTreeWidgetItem(["interferon"])
        self.tree.insertTopLevelItem(1, cellname)

        self.cell_def_horiz_layout.addWidget(self.tree)

        self.scroll_cell_def_tree = QtWidgets.QScrollArea()
        self.scroll_cell_def_tree.setWidget(self.tree)

        # splitter.addWidget(self.tree)
        splitter.addWidget(self.scroll_cell_def_tree)

        #-------------------------------------------
        # self.tab = QtWidgets.QWidget()
        # self.tabs.resize(200,5)

        #-------------------------------------------
        label_width = 150
        units_width = 70

        self.scroll = QtWidgets.QScrollArea()
        splitter.addWidget(self.scroll)
        # self.cell_def_horiz_layout.addWidget(self.scroll)

        self.params_cell_def = QtWidgets.QWidget()
        self.vbox = QtWidgets.QVBoxLayout()
        self.vbox.addStretch(0)

        # self.cell_def_horiz_layout.addWidget(self.)

        #------------------
        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("Name of substrate or signal:")
        label.setFixedWidth(180)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)

        self.cell_type_name = QLineEdit()
        # Want to validate name, e.g., starts with alpha, no special chars, etc.
        # self.cycle_trate0_0.setValidator(QtGui.QDoubleValidator())
        # self.cycle_trate0_1.enter.connect(self.save_xml)
        hbox.addWidget(self.cell_type_name)
        self.vbox.addLayout(hbox)

        #------------------
        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("diffusion coefficient")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)

        self.diffusion_coef = QtWidgets.QLineEdit()
        self.diffusion_coef.setValidator(QtGui.QDoubleValidator())
        # self.diffusion_coef.enter.connect(self.save_xml)
        hbox.addWidget(self.diffusion_coef)

        units = QtWidgets.QLabel("micron^2/min")
        units.setFixedWidth(units_width)
        hbox.addWidget(units)
        self.vbox.addLayout(hbox)

        #----------
        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("decay rate")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)

        self.decay_rate = QtWidgets.QLineEdit()
        self.decay_rate.setValidator(QtGui.QDoubleValidator())
        # self.decay_rate.enter.connect(self.save_xml)
        hbox.addWidget(self.decay_rate)

        units = QtWidgets.QLabel("1/min")
        units.setFixedWidth(units_width)
        hbox.addWidget(units)
        self.vbox.addLayout(hbox)

        #----------
        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("initial condition")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)

        self.init_cond = QtWidgets.QLineEdit()
        self.init_cond.setValidator(QtGui.QDoubleValidator())
        # self.init_cond.enter.connect(self.save_xml)
        hbox.addWidget(self.init_cond)

        units = QtWidgets.QLabel("mmol")
        units.setFixedWidth(units_width)
        hbox.addWidget(units)
        self.vbox.addLayout(hbox)
        #----------

        hbox = QtWidgets.QHBoxLayout()
        label = QtWidgets.QLabel("Dirichlet BC")
        label.setFixedWidth(label_width)
        label.setAlignment(QtCore.Qt.AlignRight)
        hbox.addWidget(label)

        self.bdy_cond = QtWidgets.QLineEdit()
        self.bdy_cond.setValidator(QtGui.QDoubleValidator())
        # self.bdy_cond.enter.connect(self.save_xml)
        hbox.addWidget(self.bdy_cond)

        units = QtWidgets.QLabel("mmol")
        units.setFixedWidth(units_width)
        hbox.addWidget(units)

        self.dirichlet_bc_enabled = QtWidgets.QCheckBox("on/off")
        # self.motility_enabled.setAlignment(QtCore.Qt.AlignRight)
        # label.setFixedWidth(label_width)
        hbox.addWidget(self.dirichlet_bc_enabled)

        self.vbox.addLayout(hbox)
        #-------------

        hbox = QtWidgets.QHBoxLayout()
        self.gradients = QtWidgets.QCheckBox("calculate gradients")
        hbox.addWidget(self.gradients)
        self.vbox.addLayout(hbox)

        hbox = QtWidgets.QHBoxLayout()
        self.track_in_agents = QtWidgets.QCheckBox("track in agents")
        hbox.addWidget(self.track_in_agents)
        self.vbox.addLayout(hbox)

        #--------------------------
        # Dummy widget for filler??
        label = QLabel("")
        label.setFixedHeight(300)
        # label.setStyleSheet("background-color: orange")
        label.setAlignment(QtCore.Qt.AlignCenter)
        self.vbox.addWidget(label)

        #==================================================================
        self.params_cell_def.setLayout(self.vbox)

        self.scroll.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
        self.scroll.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
        self.scroll.setWidgetResizable(True)
        self.scroll.setWidget(self.params_cell_def)

        # self.save_button = QtWidgets.QPushButton("Save")
        # self.text = QtWidgets.QLabel("Hello World",alignment=QtCore.Qt.AlignCenter)

        self.layout = QtWidgets.QVBoxLayout(self)

        # self.layout.addWidget(self.tabs)
        # self.layout.addWidget(QHLine())
        # self.layout.addWidget(self.params)

        # self.layout.addWidget(self.scroll)
        self.layout.addWidget(splitter)