hhblits.py 805 Bytes
Newer Older
LuGY's avatar
LuGY committed
1
from typing import List
Fazzie-Maqianli's avatar
Fazzie-Maqianli committed
2
3
4
5

import ray
from ray.dag.function_node import FunctionNode

LuGY's avatar
LuGY committed
6
7
8
9
10
11
12
from fastfold.workflow.factory import TaskFactory
import fastfold.data.tools.hhblits as ffHHBlits

class HHBlitsFactory(TaskFactory):

    keywords = ['binary_path', 'databases', 'n_cpu']

Fazzie-Maqianli's avatar
Fazzie-Maqianli committed
13
    def gen_node(self, fasta_path: str, output_path: str, after: List[FunctionNode]=None) -> FunctionNode:
LuGY's avatar
LuGY committed
14
15
16
17
18
        
        self.isReady()

        # setup runner
        runner = ffHHBlits.HHBlits(
Fazzie-Maqianli's avatar
Fazzie-Maqianli committed
19
            **self.config
LuGY's avatar
LuGY committed
20
21
        )

Fazzie-Maqianli's avatar
Fazzie-Maqianli committed
22
23
24
        # generate function node
        @ray.remote
        def hhblits_node_func(after: List[FunctionNode]) -> None:
LuGY's avatar
LuGY committed
25
            result = runner.query(fasta_path)
Fazzie-Maqianli's avatar
Fazzie-Maqianli committed
26
27
            with open(output_path, 'w') as f:
                f.write(result['a3m'])
LuGY's avatar
LuGY committed
28

Fazzie-Maqianli's avatar
Fazzie-Maqianli committed
29
        return hhblits_node_func.bind(after)