Skip to content
Snippets Groups Projects
Select Git revision
  • 0c89a26d40e4fca5f23cf3c1f105bd37f189f166
  • main default protected
  • seed_variation_ruegen
  • cami_seed_variation
  • cami_restructured
  • camis
6 results

RobustWrapper.py

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    RobustWrapper.py 4.18 KiB
    from algorithms.AlgorithmWrapper import AlgorithmWrapper
    from graph_tool import Graph
    import subprocess
    import os
    import preprocess
    import tempfile
    #MC:
    from configparser import ConfigParser
    import ast
    
    # python robust.py data/human_annotated_PPIs_brain.txt data/ms_seeds.txt ms.graphml 0.25 0.9 30 0.1
    # python ../tools/robust/robust.py ../tools/robust/data/human_annotated_PPIs_brain.txt ../tools/robust/data/ms_seeds.txt ms.graphml 0.25 0.9 30 0.1
    # ./cami.py -n ../tools/robust/data/human_annotated_PPIs_brain.txt -s ../tools/robust/data/ms_seeds.txt -v -id test_run -ncbi
    # python -m pdb cami.py -n ../tools/robust/data/human_annotated_PPIs_brain.txt -s ../tools/robust/data/ms_seeds.txt -v -id test_run -ncbi
    #           "*${ProgramArgs}",
    
    
    class RobustWrapper(AlgorithmWrapper):
        def __init__(self):
            super().__init__()
            self.name = 'ROBUST'
            self.code = 3
            config = ConfigParser()
            config.read(self.config)
    
            self.initialFraction = float(config.get('robust', 'initial_fraction'))
            self.reductionFactor = float(config.get('robust', 'reduction_factor'))
            self.numberSteinerTrees = int(config.get('robust', 'number_steiner_trees'))
            self.threshold = float(config.get('robust', 'threshold'))
    
        def run_algorithm(self, inputparams):
            # -----------------------------------------------------
            # Checking for input from the command line:
            # -----------------------------------------------------
            # [1] file providing the network in the form of an edgelist
            #     (tab-separated table, columns 1 & 2 will be used)
            # [2] file with the seed genes (if table contains more than one
            #     column they must be tab-separated; the first column will be
            #     used only)
            # [3] path to output file
            # [4] initial fraction
            # [5] reduction factor
            # [6] number of steiner trees to be computed
            # [7] threshold
            robust_path = os.path.join(self.home_path, 'tools/robust')
            robust = f'cd "{robust_path}"; python robust.py'
    
            ppi = inputparams[0]
            seeds = inputparams[1]
    
            out_filename = self.name_file('out')
            algo_output = os.path.join(self.output_dir, out_filename)
            # algo_output = f'./ms.graphml'
            #0.25 0.9 30 0.1
            #MC:
            #CONFIG according to robust documentation https://github.com/bionetslab/robust
            command = f'{robust} "{ppi}" "{seeds}" "{algo_output}" \
                {self.initialFraction} {self.reductionFactor} \
                {self.numberSteinerTrees} {self.threshold}'
            subprocess.call(command, shell=True, stdout=subprocess.PIPE)
            print(f"Robust results saved in {algo_output}")
            return self.extract_output(algo_output)
    
            # inputparams = []
            # home_path = os.path.dirname(os.getcwd())
            # ppi_file = f"{home_path}/tool/robust/data/human_annotated_PPIs_brain.txt"
            # seed_file = f"{home_path}/tool/robust/data/ms_seeds.txt"
    
        def prepare_input(self):
            """prepares the input ppi and seed genes as needed by the algorithm
            """
            inputparams = []
    
            # prepare inputfiles
            ppi_filename = self.name_file('ppi')
            ppi_file = os.path.join(self.output_dir, ppi_filename)
            seed_filename = self.name_file('seeds')
            seed_file = os.path.join(self.output_dir, seed_filename)
    
            with open(ppi_file, "w") as file:
                file.write('node1\tnode2\n')
                for edge in self.ppi_network.edges():
                    file.write(f"{str(edge.source())}\t{str(edge.target())}\n")
            inputparams.append(ppi_file)
            if self.debug:
                print(f'{self.name} ppi is saved in {ppi_file}')
    
            with open(seed_file, "w") as file:
                for seed in self.seeds:
                    file.write(f"{seed}\n")
            if self.debug:
                print(f'{self.name} seeds are saved in {seed_file}')
            inputparams.append(seed_file)
    
            return inputparams
    
        def extract_output(self, algo_output):
            nodes = []
            with open(algo_output, "r") as output:
                for line in output.readlines():
                    for node in line.split(' '):
                        nodes.append(int(node.strip()))
            return nodes