Skip to content
Snippets Groups Projects
quick_task.py 2.42 KiB
Newer Older
from tasks.task_hook import TaskHook

def quick_task(task_hook: TaskHook):
    def run_closeness(parameters, network, original_seeds=None):
        from .closeness_centrality import closeness_centrality

        def closeness_progress(progress, status):
            task_hook.set_progress(2 / 3 + 1 / 3 * progress, status)

        def closeness_set_result(result):
            result["network"]["edges"].extend(network["edges"])
            if original_seeds is not None:
                result['node_attributes']['is_seed'] = original_seeds
            task_hook.set_results(result)

        # Prepare intermediate hook
        closeness_task_hook = TaskHook(parameters,
                                       task_hook.data_directory,
                                       closeness_progress,
                                       closeness_set_result)

        # Run closeness centrality
        closeness_centrality(closeness_task_hook)

    def run_multi_steiner(parameters):
        from .multi_steiner import multi_steiner

        def ms_progress(progress, status):
            task_hook.set_progress(0 + 2 / 3 * progress, status)

        def ms_set_result(result):
            node_attributes = result.get("node_attributes", {})
            node_types = node_attributes.get("node_types", {})
            seeds = [seed for seed in result["network"]["nodes"] if node_types.get(seed) == 'protein']

            if len(seeds) == 0:
                task_hook.set_results({"network": {"nodes": [], "edges": []}})
                return
            og_seeds = parameters.get('seeds')
            parameters.update({
                "seeds": seeds,
                "result_size": 10,
                "hub_penalty": 1,
                "target": "drug",
                "include_non_approved_drugs": True
            })
            is_seed = result.get('node_attributes')
            run_closeness(parameters, result["network"], result['node_attributes']['is_seed'])
            # parameters.update({
            #     "seeds": og_seeds
            # })

        parameters["num_trees"] = 1
        parameters["hub_penalty"] = 1

        # Prepare intermediate hook
        ms_task_hook = TaskHook(parameters,
                                task_hook.data_directory,
                                ms_progress,
                                ms_set_result)

        # Run multi_steiner
        multi_steiner(ms_task_hook)

    run_multi_steiner(task_hook.parameters)