2853: Avoid using reserved word "hash" as a variable name.
[arvados.git] / crunch_scripts / arvados_gatk2.py
1 import arvados
2 import re
3 import os
4 import sys
5 import fcntl
6 import subprocess
7
8 gatk2_install_path = None
9
10 def install_path():
11     global gatk2_install_path
12     if gatk2_install_path:
13         return gatk2_install_path
14     gatk2_install_path = arvados.util.tarball_extract(
15         tarball = arvados.current_job()['script_parameters']['gatk_tbz'],
16         path = 'gatk2')
17     return gatk2_install_path
18
19 def memory_limit():
20     taskspernode = int(os.environ.get('CRUNCH_NODE_SLOTS', '1'))
21     with open('/proc/meminfo', 'r') as f:
22         ram = int(re.search(r'MemTotal:\s*(\d+)', f.read()).group(1)) / 1024
23     if taskspernode > 1:
24         ram = ram / taskspernode
25     return max(ram-700, 500)
26
27 def cpus_on_this_node():
28     with open('/proc/cpuinfo', 'r') as cpuinfo:
29         return max(int(os.environ.get('SLURM_CPUS_ON_NODE', 1)),
30                    len(re.findall(r'^processor\s*:\s*\d',
31                                   cpuinfo.read(),
32                                   re.MULTILINE)))
33
34 def cpus_per_task():
35     return max(1, (cpus_on_this_node()
36                    / int(os.environ.get('CRUNCH_NODE_SLOTS', 1))))
37
38 def run(**kwargs):
39     kwargs.setdefault('cwd', arvados.current_task().tmpdir)
40     kwargs.setdefault('stdout', sys.stderr)
41     execargs = ['java',
42                 '-Xmx%dm' % memory_limit(),
43                 '-Djava.io.tmpdir=' + arvados.current_task().tmpdir,
44                 '-jar', os.path.join(install_path(), 'GenomeAnalysisTK.jar')]
45     execargs += [str(arg) for arg in kwargs.pop('args', [])]
46     sys.stderr.write("%s.run: exec %s\n" % (__name__, str(execargs)))
47     return arvados.util.run_command(execargs, **kwargs)
48