Warning
This document is for an old release of Galaxy. You can alternatively view this page in the latest release if it exists or view the top of the latest release's documentation.
Source code for galaxy.datatypes.converters.pbed_ldreduced_converter
# converter for ldreduced rgenetics datatype
# used for grr and eigenstrat - shellfish if we get around to it
import os
import subprocess
import sys
import tempfile
import time
prog = "pbed_ldreduced_converter.py"
galhtmlprefix = """<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Galaxy %s tool output - see http://getgalaxy.org" />
<title></title>
<link rel="stylesheet" href="/static/style/base.css" type="text/css" />
</head>
<body>
<div class="document">
"""
plinke = "plink"
[docs]def timenow():
"""return current time as a string"""
return time.strftime("%d/%m/%Y %H:%M:%S", time.localtime(time.time()))
[docs]def pruneLD(plinktasks=None, cd="./", vclbase=None):
""" """
plinktasks = plinktasks or []
vclbase = vclbase or []
alog = ["## Rgenetics: http://rgenetics.org Galaxy Tools rgQC.py Plink pruneLD runner\n"]
with tempfile.NamedTemporaryFile(mode="r+") as plog:
for task in plinktasks: # each is a list
vcl = vclbase + task
subprocess.check_call(vcl, stdout=plog, stderr=plog, cwd=cd)
try:
plog.seek(0)
lplog = [elem for elem in plog.readlines() if elem.find("Pruning SNP") == -1]
alog += lplog
alog.append("\n")
except Exception:
alog.append(
f"### {timenow()} Strange - no std out from plink when running command line\n{' '.join(vcl)}\n"
)
return alog
[docs]def makeLDreduced(
basename,
infpath=None,
outfpath=None,
plinke="plink",
forcerebuild=False,
returnFname=False,
winsize="60",
winmove="40",
r2thresh="0.1",
):
"""not there so make and leave in output dir for post job hook to copy back into input extra files path for next time"""
outbase = os.path.join(outfpath, basename)
inbase = os.path.join(infpath)
plinktasks = []
vclbase = [plinke, "--noweb"]
plinktasks += [
["--bfile", inbase, f"--indep-pairwise {winsize} {winmove} {r2thresh}", f"--out {outbase}"],
["--bfile", inbase, f"--extract {outbase}.prune.in --make-bed --out {outbase}"],
]
vclbase = [plinke, "--noweb"]
pruneLD(plinktasks=plinktasks, cd=outfpath, vclbase=vclbase)
[docs]def main():
"""
need to work with rgenetics composite datatypes
so in and out are html files with data in extrafiles path
.. raw:: xml
<command>
python '$__tool_directory__/pbed_ldreduced_converter.py' '$input1.extra_files_path/$input1.metadata.base_name' '$winsize' '$winmove' '$r2thresh'
'$output1' '$output1.files_path' 'plink'
</command>
"""
nparm = 7
if len(sys.argv) < nparm:
sys.stderr.write("## %s called with %s - needs %d parameters \n" % (prog, sys.argv, nparm))
sys.exit(1)
inpedfilepath = sys.argv[1]
base_name = os.path.split(inpedfilepath)[-1]
winsize = sys.argv[2]
winmove = sys.argv[3]
r2thresh = sys.argv[4]
outhtmlname = sys.argv[5]
outfilepath = sys.argv[6]
try:
os.makedirs(outfilepath)
except Exception:
pass
plink = sys.argv[7]
makeLDreduced(
base_name,
infpath=inpedfilepath,
outfpath=outfilepath,
plinke=plink,
forcerebuild=False,
returnFname=False,
winsize=winsize,
winmove=winmove,
r2thresh=r2thresh,
)
flist = os.listdir(outfilepath)
with open(outhtmlname, "w") as f:
f.write(galhtmlprefix % prog)
s1 = f"## Rgenetics: http://rgenetics.org Galaxy Tools {prog} {timenow()}" # becomes info
s2 = f"Input {base_name}, winsize={winsize}, winmove={winmove}, r2thresh={r2thresh}"
print(f"{s1} {s2}")
f.write(f"<div>{s1}\n{s2}\n<ol>")
for data in flist:
f.write(f'<li><a href="{os.path.split(data)[-1]}">{os.path.split(data)[-1]}</a></li>\n')
f.write("</div></body></html>")
if __name__ == "__main__":
main()