From 3530396ec646a5c9c5f69e1e8dccc93f3744d114 Mon Sep 17 00:00:00 2001 From: Justin Bedo Date: Fri, 1 Mar 2019 09:04:05 +1100 Subject: ascat: init --- tools/ascat-app.nix | 269 ++++++++++++++++++++++++++++++++++++++++++++++ tools/ascat-callCNV.nix | 37 +++++++ tools/ascat-gccorrect.nix | 36 +++++++ tools/ascat.nix | 9 ++ 4 files changed, 351 insertions(+) create mode 100644 tools/ascat-app.nix create mode 100644 tools/ascat-callCNV.nix create mode 100644 tools/ascat-gccorrect.nix create mode 100644 tools/ascat.nix (limited to 'tools') diff --git a/tools/ascat-app.nix b/tools/ascat-app.nix new file mode 100644 index 0000000..51aa677 --- /dev/null +++ b/tools/ascat-app.nix @@ -0,0 +1,269 @@ +{stdenv, callPackage, buildPerlPackage, fetchurl, fetchFromGitHub, perlPackages, R, bwa, samtools, pkgconfig, zlib, htslib, curl, bzip2, lzma, gnutls, nettle, gmp, p11-kit, libtasn1, perl, psmisc, time, vcftools, rWrapper, rPackages}: + +let + ascat = fetchurl { + url = "https://raw.githubusercontent.com/Crick-CancerGenomics/ascat/v2.5.1/ASCAT/R/ascat.R"; + sha256 = "1rja9s6rksmi0kc6lhx1vr5yqv2xazgxdlwc7mbj2m881x8nngb1"; + }; + + libmaus2 = stdenv.mkDerivation rec { + name = "libmaus-${version}"; + version = "2.0.499-release-20180606122508"; + src = fetchFromGitHub { + owner = "gt1"; + repo = "libmaus2"; + rev = version; + sha256 = "1rk2f3jirn84vgsfml4c8pr6vl5s0xbds1d0givb5pvjmc6jz61x"; + }; + buildInputs = [ zlib ]; + }; + + biobambam2 = stdenv.mkDerivation rec { + name = "biobambam-${version}"; + version = "2.0.87-release-20180301132713"; + src = fetchFromGitHub { + owner = "gt1"; + repo = "biobambam2"; + rev = version; + sha256 = "1hjh6kl62hr9afi6fa6x563823lmmmijh1y2204db0nfnaybnrn6"; + }; + nativeBuildInputs = [ pkgconfig ]; + buildInputs = [ libmaus2 zlib ]; + }; + + libBigWig = stdenv.mkDerivation rec { + name = "libBigWig-${version}"; + version = "0.4.2"; + src = fetchFromGitHub { + owner = "dpryan79"; + repo = "libBigWig"; + rev = version; + sha256 = "0h2smg24v5srdcqzrmz2g23cmlp4va465mgx8r2z571sfz8pv454"; + }; + buildInputs = [ curl ]; + makeFlags = [ "prefix=$(out)" ]; + }; + + cgpBigWig = stdenv.mkDerivation rec { + name = "cgpBigWig-${version}"; + version = "1.0.2"; + src = fetchFromGitHub { + owner = "cancerit"; + repo = "cgpBigWig"; + rev = version; + sha256 = "1piprbibmrwbh524plp9s35z5cf1yk7713dxsdik2qv363p6pfsa"; + }; + buildInputs = [ htslib libBigWig curl bzip2 lzma gnutls libtasn1 nettle gmp p11-kit ]; + configurePhase = '' + cd c + patchShebangs . + ''; + makeFlags = [ "HTSLIB=${htslib}" "LIBBIGWIG=${libBigWig}" ]; + installPhase = '' + mkdir -p $out + cp -r ../bin $out + ''; + }; + + BioDBHTS = buildPerlPackage rec { + name = "Bio-DB-HTS-${version}"; + version = "2.11"; + src = fetchFromGitHub { + owner = "Ensembl"; + repo = "Bio-DB-HTS"; + rev = version; + sha256 = "0n60vmsd39pz6zbkwz78fdzsmfg8dxgwx0m166vm8515q446922c"; + }; + nativeBuildInputs = with perlPackages; [ ModuleBuild ]; + buildInputs = [ htslib zlib ]; + #propagatedBuildInputs = [ BioRootVersion ]; + configurePhase = '' + export HTSLIB_DIR=${htslib} + sed -i 's|"-Wl,-rpath,\$hts_lib",||' Build.PL + perl ./Build.PL --install_base=$out + ''; + buildPhase = '' + ./Build + ''; + installPhase = '' + ./Build install + mkdir -p $out/lib/perl5/site_perl/${perl.version} + mv $out/lib/perl5/x86_64-linux-thread-multi $out/lib/perl5/site_perl/${perl.version} + ''; + }; + + BioPerl = buildPerlPackage rec { + name = "BioPerl-1.7.4"; + src = fetchurl { + url = "mirror://cpan/authors/id/C/CD/CDRAUG/${name}.tar.gz"; + sha256 = "0yvhgifs8g9rwdcq84zw4b005nq2jml6c75zgjscv6d2pd3lj1ss"; + }; + propagatedBuildInputs = with perlPackages; [DBI DataStag Error GD Graph HTTPMessage HTTPMessage IOstringy IOString IPCRun LWP ListMoreUtils SetScalar TestMost TestRequiresInternet URI XMLDOM XMLDOMXPath XMLLibXML XMLLibXML libxml_perl XMLSAX XMLSAXBase XMLSAXWriter XMLTwig XMLWriter YAML DBFile ]; + nativeBuildInputs = with perlPackages; [ TestException TestWarn TestDifferences TestDeep ]; + }; + + DataStag = buildPerlPackage rec { + name = "Data-Stag-0.14"; + src = fetchurl { + url = "mirror://cpan/authors/id/C/CM/CMUNGALL/${name}.tar.gz"; + sha256 = "0ncf4l39ka23nb01jlm6rzxdb5pqbip01x0m38bnvf1gim825caa"; + }; + propagatedBuildInputs = with perlPackages; [IOString Graph XMLLibXSLT ]; + }; + + XMLDOMXPath = buildPerlPackage rec { + name = "XML-DOM-XPath-0.14"; + src = fetchurl { + url = "mirror://cpan/authors/id/M/MI/MIROD/${name}.tar.gz"; + sha256 = "1si9m1pqih3ibbd6jnw69fh98dd4krxpx90p65x9j4aja55afwq1"; + }; + propagatedBuildInputs= with perlPackages; [XMLDOM XMLXPathEngine]; + doCheck = false; + }; + + pcapCore = buildPerlPackage rec { + name = "PCAP-core-${version}"; + version = "4.2.3"; + src = fetchFromGitHub { + owner = "cancerit"; + repo = "PCAP-core"; + rev = version; + sha256 = "0ia9z0k4jpa02596smivpkw85vi9sv7sbxnysv7jdyh2g1rv1s5c"; + }; + nativeBuildInputs = with perlPackages; [ TestFatal TestWarn ]; + propagatedBuildInputs = with perlPackages; [ + bwa + samtools + biobambam2 + cgpBigWig + ConstFast + FileWhich + IPCSystemSimple + CaptureTiny + TermUI + BioDBHTS + DataUUID + YAML + BioPerl + JSON + psmisc + ]; + preConfigure = '' + sed -i 's|/usr/bin/time|${time}/bin/time|' lib/PCAP/Threaded.pm + sed -i 's|/bin/bash|${stdenv.shell}|' lib/PCAP/Threaded.pm + ''; + }; + + cgpVcf = buildPerlPackage rec { + name = "cgpVCF-${version}"; + version = "2.0.4"; + outputs = [ "out" "dev" ]; + src = fetchFromGitHub { + owner = "cancerit"; + repo = "cgpVcf"; + rev = "v${version}"; + sha256 = "0j8spk02v4l0nrqsa42d57djb4nm71daz5hvlm5fwakfq8037yx4"; + }; + nativeBuildInputs = with perlPackages; [ TestFatal TestWarn ]; + propagatedBuildInputs = with perlPackages; [ + ConstFast + samtools + vcftools + DataUUID + DateTime + IPCSystemSimple + ]; + }; + + BDebug = buildPerlPackage rec { + name = "B-Debug-1.26"; + src = fetchurl { + url = "mirror://cpan/authors/id/R/RU/RURBAN/${name}.tar.gz"; + sha256 = "0fhdaxpkirgnwivd0a7x83dvfwqbngsq2rcfwvfxipgh6i8kyvcd"; + }; + }; + + DevelCover = buildPerlPackage rec { + name = "Devel-Cover-1.31"; + src = fetchurl { + url = "mirror://cpan/authors/id/P/PJ/PJCJ/${name}.tar.gz"; + sha256 = "0wsd7fkpy5qwnz68hz624frnbqii5igg6l2q7n1mx1lh32vn0kcr"; + }; + nativeBuildInputs = with perlPackages; [ BDebug ]; + doCheck = false; + }; + + + alleleCount = stdenv.mkDerivation rec { + name = "alleleCount-${version}"; + version = "4.0.1"; + src = fetchFromGitHub { + owner = "cancerit"; + repo = "alleleCount"; + rev = "v${version}"; + sha256 = "0nkwnjqglgshzhlmz1r0khdjai9mfz4ih8bzrzg0g18d1725k6gp"; + }; + buildInputs = [ htslib perl zlib bzip2 lzma ]; + preConfigure = "cd c"; + installPhase = '' + mkdir -p $out/bin + cp bin/* $out/bin + ''; + }; + + alleleCountPerl = buildPerlPackage rec { + name = "alleleCount.pl-${version}"; + version = "4.0.1"; + src = fetchFromGitHub { + owner = "cancerit"; + repo = "alleleCount"; + rev = "v${version}"; + sha256 = "0nkwnjqglgshzhlmz1r0khdjai9mfz4ih8bzrzg0g18d1725k6gp"; + }; + preConfigure = '' + cd perl + ''; + nativeBuildInputs = with perlPackages; [ + TestFatal + ]; + propagatedBuildInputs = with perlPackages; [ + ConstFast + DevelCover + FileSlurp + FileWhich + PodCoverage + TryTiny + alleleCount + IPCSystemSimple + ]; + }; + + ascatR = rWrapper.overrideAttrs (attrs: { + packages = with rPackages; [ RColorBrewer ]; + }); + + ascatNGS = buildPerlPackage rec { + name = "ascatNGS-${version}"; + version = "4.1.2"; + src = fetchFromGitHub { + owner = "cancerit"; + repo = "ascatNgs"; + rev = "v${version}"; + sha256 = "0qc1wp37k2c9vya992cfiphp2jpp8hvfvqz5ydi2d5b71prfaw82"; + }; + preConfigure = '' + cd perl + cp ${ascat} share/ascat/ascat.R + ''; + nativeBuildInputs = with perlPackages; [ TestFatal TestWarn ]; + propagatedBuildInputs = with perlPackages; [ + ascatR + FileShareDirInstall + pcapCore + FileShareDir + cgpVcf + alleleCountPerl + ]; + }; + +in ascatNGS diff --git a/tools/ascat-callCNV.nix b/tools/ascat-callCNV.nix new file mode 100644 index 0000000..357ab8a --- /dev/null +++ b/tools/ascat-callCNV.nix @@ -0,0 +1,37 @@ +{ bionix +, ref +, gc +, indexAttrs ? {} +, bamIndexAttrs ? {} +, flags ? null +}: + +{tumour, normal, gender}: + +with bionix; +with lib; +with types; + +stage rec { + name = "ascat-callCNV"; + buildInputs = with pkgs; [ ascat.app ]; + buildCommand = '' + mkdir $out + ln -s ${tumour} tumour.bam + ln -s ${bionix.samtools.index bamIndexAttrs tumour} tumour.bai + ln -s ${normal} normal.bam + ln -s ${bionix.samtools.index bamIndexAttrs normal} normal.bai + ln -s ${ref} ref.fa + ln -s ${samtools.faidx indexAttrs ref} ref.fa.fai + ascat.pl \ + -outdir $out \ + -tumour tumour.bam \ + -normal normal.bam \ + -reference ref.fa \ + -snp_gc ${gc} \ + -gender ${gender} \ + -genderChr Y \ + -protocol WGS \ + -cpus $NIX_BUILD_CORES + ''; +} diff --git a/tools/ascat-gccorrect.nix b/tools/ascat-gccorrect.nix new file mode 100644 index 0000000..c1838d9 --- /dev/null +++ b/tools/ascat-gccorrect.nix @@ -0,0 +1,36 @@ +{ bionix +, ref +, chrPrefix ? "" +, flags ? null +}: + +snp: + +with bionix; +with lib; +with types; + +stage rec { + name = "ascat-gccorrect"; + buildInputs = with pkgs; [ ascat.app gawk ]; + script = pkgs.writeText "convert.awk" '' + BEGIN{ + FS = OFS = "\t" + } + /^#/{next} + !loc[$1,$2]{ + print $3, "${chrPrefix}" $1, $2 + loc[$1,$2]++ + } + ''; + buildCommand = '' + awk -f ${script} ${snp} > snpPos.tsv + mkdir splitPos splitGc splitGcLogs + split --number=l/$NIX_BUILD_CORES -d snpPos.tsv splitPos/snpPos. + ls -1 splitPos/ | xargs -n1 -P$NIX_BUILD_CORES -I '{}' sh -c 'ascatSnpPanelGcCorrections.pl ${ref} splitPos/{} > splitGc/{}' + mv splitGc/snpPos.00 $out + for f in splitGc/* ; do + sed 1d $f >> $out + done + ''; +} diff --git a/tools/ascat.nix b/tools/ascat.nix new file mode 100644 index 0000000..05e2299 --- /dev/null +++ b/tools/ascat.nix @@ -0,0 +1,9 @@ +{bionix}: + +with bionix; + +{ + app = pkgs.callPackage ./ascat-app.nix {}; + gccorrect = callBionixE ./ascat-gccorrect.nix; + callCNV = callBionixE ./ascat-callCNV.nix; +} -- cgit v1.2.3