Source code for tvb.interfaces.web.entities.context_transfer_vector

# -*- coding: utf-8 -*-
#
#
# TheVirtualBrain-Framework Package. This package holds all Data Management, and
# Web-UI helpful to run brain-simulations. To use it, you also need to download
# TheVirtualBrain-Scientific Package (for simulators). See content of the
# documentation-folder for more details. See also http://www.thevirtualbrain.org
#
# (c) 2012-2023, Baycrest Centre for Geriatric Care ("Baycrest") and others
#
# This program is free software: you can redistribute it and/or modify it under the
# terms of the GNU General Public License as published by the Free Software Foundation,
# either version 3 of the License, or (at your option) any later version.
# This program is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.  See the GNU General Public License for more details.
# You should have received a copy of the GNU General Public License along with this
# program.  If not, see <http://www.gnu.org/licenses/>.
#
#
#   CITATION:
# When using The Virtual Brain for scientific publications, please cite it as explained here:
# https://www.thevirtualbrain.org/tvb/zwei/neuroscience-publications
#
#

"""
.. moduleauthor:: Robert Vincze <robert.vincze@codemart.ro>
"""

from tvb.basic.logger.builder import get_logger
from tvb.core.neocom import h5
from tvb.core.neotraits.spatial_model import SpatialModel
from tvb.interfaces.web.controllers.burst.transfer_vector_controller import TransferVectorForm

KEY_EQUATION = "equation"
KEY_RESULT = "result"


[docs] class TransferVectorContext(SpatialModel): def __init__(self, current_transfer_function, current_model_param, current_connectivity_measure): self.logger = get_logger(self.__class__.__module__) self.applied_transfer_functions = {} self.current_transfer_function = current_transfer_function self.current_model_param = current_model_param self.current_connectivity_measure = current_connectivity_measure
[docs] @staticmethod def get_equation_information(): return { TransferVectorForm.transfer_function_label: 'current_transfer_function' }
[docs] def apply_transfer_function(self): """ Applies a transfer function on the given model parameter. """ cm = h5.load_from_gid(self.current_connectivity_measure) result = self.current_transfer_function.evaluate(cm.array_data) self.applied_transfer_functions[self.current_model_param] = { KEY_EQUATION: self.current_transfer_function, KEY_RESULT: result } return result
[docs] def get_applied_transfer_functions(self): """ :returns: a dictionary which contains information about the applied transfer functions on the model parameters. """ result = {} for param in self.applied_transfer_functions: transfer_function = self.applied_transfer_functions[param][KEY_EQUATION] keys = sorted(list(transfer_function.parameters), key=lambda x: len(x)) keys.reverse() base_tf = transfer_function.equation base_tf = base_tf.replace('var', 'x') for tf_param in keys: while True: stripped_tf = "".join(base_tf.split()) param_idx = stripped_tf.find('\\' + tf_param) if param_idx < 0: break if param_idx > 0 and stripped_tf[param_idx - 1].isalnum(): base_tf = transfer_function.replace('\\' + tf_param, '*' + str(transfer_function.parameters[tf_param])) else: base_tf = base_tf.replace('\\' + tf_param, str(transfer_function.parameters[tf_param])) base_tf = base_tf.replace(tf_param, str(transfer_function.parameters[tf_param])) result[param] = base_tf return result