From 19712194eceaf76bf3a81b2343da1b4dc582f140 Mon Sep 17 00:00:00 2001 From: Zhongqu Duan Date: Fri, 9 Aug 2019 11:12:02 +0800 Subject: [PATCH 01/45] Update HUPANassem.pm fix a small bug --- lib/HUPANassem.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/HUPANassem.pm b/lib/HUPANassem.pm index 040f6ea..f17cc03 100644 --- a/lib/HUPANassem.pm +++ b/lib/HUPANassem.pm @@ -19,7 +19,7 @@ Commands: if($com eq "soapdenovo"){ soap(@ARGV); } - elsif($com eq "linearK.pl"){ + elsif($com eq "linearK"){ linearK(@ARGV); } elsif($com eq "sga"){ From 0759187b8e6c29bf89eb5a8cbe5e355993c577d5 Mon Sep 17 00:00:00 2001 From: Zhongqu Duan Date: Fri, 9 Aug 2019 11:15:11 +0800 Subject: [PATCH 02/45] Update HUPANassemLSF.pm fix a small bug --- lib/HUPANassemLSF.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/HUPANassemLSF.pm b/lib/HUPANassemLSF.pm index fe47723..c143cc6 100644 --- a/lib/HUPANassemLSF.pm +++ b/lib/HUPANassemLSF.pm @@ -19,7 +19,7 @@ Commands: if($com eq "soapdenovo"){ soap(@ARGV); } - elsif($com eq "linearK.pl"){ + elsif($com eq "linearK"){ linearK(@ARGV); } elsif($com eq "sga"){ From c299bc589fdf37ce22b2e439d3dd28c4e5f8acf5 Mon Sep 17 00:00:00 2001 From: Zhongqu Duan Date: Fri, 9 Aug 2019 11:17:03 +0800 Subject: [PATCH 03/45] Update HUPANassemSLURM.pm fix a small bug --- lib/HUPANassemSLURM.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/HUPANassemSLURM.pm b/lib/HUPANassemSLURM.pm index 78e2459..4c26508 100644 --- a/lib/HUPANassemSLURM.pm +++ b/lib/HUPANassemSLURM.pm @@ -18,7 +18,7 @@ Commands: if($com eq "soapdenovo"){ soap(@ARGV); } - elsif($com eq "linearK.pl"){ + elsif($com eq "linearK"){ linearK(@ARGV); } elsif($com eq "sga"){ From a49eae82fc53b744f7094697bc3a79202f421939 Mon Sep 17 00:00:00 2001 From: zqduan Date: Sat, 28 Sep 2019 14:19:28 +0800 Subject: [PATCH 04/45] Change --- tools/MUMmer3.23/annotate | Bin 25415 -> 0 bytes tools/MUMmer3.23/aux_bin/postnuc | Bin 84916 -> 0 bytes tools/MUMmer3.23/aux_bin/postpro | Bin 93818 -> 0 bytes tools/MUMmer3.23/aux_bin/prenuc | Bin 16880 -> 0 bytes tools/MUMmer3.23/aux_bin/prepro | Bin 24219 -> 0 bytes tools/MUMmer3.23/combineMUMs | Bin 56513 -> 0 bytes tools/MUMmer3.23/delta-filter | Bin 80367 -> 0 bytes tools/MUMmer3.23/dnadiff | 839 --------- tools/MUMmer3.23/exact-tandems | 23 - tools/MUMmer3.23/gaps | Bin 16666 -> 0 bytes tools/MUMmer3.23/mapview | 967 ---------- tools/MUMmer3.23/mgaps | Bin 22069 -> 0 bytes tools/MUMmer3.23/mummer | Bin 60955 -> 0 bytes tools/MUMmer3.23/mummerplot | 1602 ----------------- tools/MUMmer3.23/nucmer | 394 ---- tools/MUMmer3.23/nucmer2xfig | 139 -- tools/MUMmer3.23/promer | 382 ---- tools/MUMmer3.23/repeat-match | Bin 35649 -> 0 bytes tools/MUMmer3.23/run-mummer1 | 26 - tools/MUMmer3.23/run-mummer3 | 28 - tools/MUMmer3.23/show-aligns | Bin 116325 -> 0 bytes tools/MUMmer3.23/show-coords | Bin 119430 -> 0 bytes tools/MUMmer3.23/show-diff | Bin 94335 -> 0 bytes tools/MUMmer3.23/show-snps | Bin 117517 -> 0 bytes tools/MUMmer3.23/show-tiling | Bin 125433 -> 0 bytes .../src/kurtz/libbasedir/cleanMUMcand.o | Bin 1864 -> 0 bytes tools/MUMmer3.23/src/kurtz/libbasedir/clock.o | Bin 2008 -> 0 bytes .../MUMmer3.23/src/kurtz/libbasedir/libbase.a | Bin 39582 -> 0 bytes .../MUMmer3.23/src/kurtz/libbasedir/mapfile.o | Bin 8768 -> 0 bytes .../src/kurtz/libbasedir/multiseq.o | Bin 4344 -> 0 bytes .../MUMmer3.23/src/kurtz/libbasedir/procopt.o | Bin 7824 -> 0 bytes .../src/kurtz/libbasedir/safescpy.o | Bin 2328 -> 0 bytes .../src/kurtz/libbasedir/seterror.o | Bin 1872 -> 0 bytes tools/MUMmer3.23/src/kurtz/libbasedir/space.o | Bin 9304 -> 0 bytes .../MUMmer3.23/src/kurtz/mm3src/findmaxmat.o | Bin 4528 -> 0 bytes .../MUMmer3.23/src/kurtz/mm3src/findmumcand.o | Bin 2120 -> 0 bytes tools/MUMmer3.23/src/kurtz/mm3src/maxmat3.o | Bin 2960 -> 0 bytes tools/MUMmer3.23/src/kurtz/mm3src/maxmatinp.o | Bin 4488 -> 0 bytes tools/MUMmer3.23/src/kurtz/mm3src/maxmatopt.o | Bin 8816 -> 0 bytes .../MUMmer3.23/src/kurtz/mm3src/procmaxmat.o | Bin 9584 -> 0 bytes tools/MUMmer3.23/src/kurtz/streesrc/access.o | Bin 4136 -> 0 bytes .../src/kurtz/streesrc/addleafcount.o | Bin 2840 -> 0 bytes .../MUMmer3.23/src/kurtz/streesrc/construct.o | Bin 14344 -> 0 bytes .../MUMmer3.23/src/kurtz/streesrc/depthtab.o | Bin 2440 -> 0 bytes tools/MUMmer3.23/src/kurtz/streesrc/dfs.o | Bin 4448 -> 0 bytes tools/MUMmer3.23/src/kurtz/streesrc/ex2leav.o | Bin 1320 -> 0 bytes .../MUMmer3.23/src/kurtz/streesrc/iterator.o | Bin 3480 -> 0 bytes .../MUMmer3.23/src/kurtz/streesrc/libstree.a | Bin 48998 -> 0 bytes tools/MUMmer3.23/src/kurtz/streesrc/linkloc.o | Bin 2656 -> 0 bytes tools/MUMmer3.23/src/kurtz/streesrc/overmax.o | Bin 2280 -> 0 bytes .../MUMmer3.23/src/kurtz/streesrc/oversucc.o | Bin 2024 -> 0 bytes .../MUMmer3.23/src/kurtz/streesrc/scanpref.o | Bin 7504 -> 0 bytes tools/MUMmer3.23/src/tigr/delta.o | Bin 79360 -> 0 bytes tools/MUMmer3.23/src/tigr/sw_align.o | Bin 20992 -> 0 bytes tools/MUMmer3.23/src/tigr/tigrinc.o | Bin 12064 -> 0 bytes tools/MUMmer3.23/src/tigr/translate.o | Bin 8488 -> 0 bytes 56 files changed, 4400 deletions(-) delete mode 100755 tools/MUMmer3.23/annotate delete mode 100755 tools/MUMmer3.23/aux_bin/postnuc delete mode 100755 tools/MUMmer3.23/aux_bin/postpro delete mode 100755 tools/MUMmer3.23/aux_bin/prenuc delete mode 100755 tools/MUMmer3.23/aux_bin/prepro delete mode 100755 tools/MUMmer3.23/combineMUMs delete mode 100755 tools/MUMmer3.23/delta-filter delete mode 100755 tools/MUMmer3.23/dnadiff delete mode 100755 tools/MUMmer3.23/exact-tandems delete mode 100755 tools/MUMmer3.23/gaps delete mode 100755 tools/MUMmer3.23/mapview delete mode 100755 tools/MUMmer3.23/mgaps delete mode 100755 tools/MUMmer3.23/mummer delete mode 100755 tools/MUMmer3.23/mummerplot delete mode 100755 tools/MUMmer3.23/nucmer delete mode 100755 tools/MUMmer3.23/nucmer2xfig delete mode 100755 tools/MUMmer3.23/promer delete mode 100755 tools/MUMmer3.23/repeat-match delete mode 100755 tools/MUMmer3.23/run-mummer1 delete mode 100755 tools/MUMmer3.23/run-mummer3 delete mode 100755 tools/MUMmer3.23/show-aligns delete mode 100755 tools/MUMmer3.23/show-coords delete mode 100755 tools/MUMmer3.23/show-diff delete mode 100755 tools/MUMmer3.23/show-snps delete mode 100755 tools/MUMmer3.23/show-tiling delete mode 100644 tools/MUMmer3.23/src/kurtz/libbasedir/cleanMUMcand.o delete mode 100644 tools/MUMmer3.23/src/kurtz/libbasedir/clock.o delete mode 100644 tools/MUMmer3.23/src/kurtz/libbasedir/libbase.a delete mode 100644 tools/MUMmer3.23/src/kurtz/libbasedir/mapfile.o delete mode 100644 tools/MUMmer3.23/src/kurtz/libbasedir/multiseq.o delete mode 100644 tools/MUMmer3.23/src/kurtz/libbasedir/procopt.o delete mode 100644 tools/MUMmer3.23/src/kurtz/libbasedir/safescpy.o delete mode 100644 tools/MUMmer3.23/src/kurtz/libbasedir/seterror.o delete mode 100644 tools/MUMmer3.23/src/kurtz/libbasedir/space.o delete mode 100644 tools/MUMmer3.23/src/kurtz/mm3src/findmaxmat.o delete mode 100644 tools/MUMmer3.23/src/kurtz/mm3src/findmumcand.o delete mode 100644 tools/MUMmer3.23/src/kurtz/mm3src/maxmat3.o delete mode 100644 tools/MUMmer3.23/src/kurtz/mm3src/maxmatinp.o delete mode 100644 tools/MUMmer3.23/src/kurtz/mm3src/maxmatopt.o delete mode 100644 tools/MUMmer3.23/src/kurtz/mm3src/procmaxmat.o delete mode 100644 tools/MUMmer3.23/src/kurtz/streesrc/access.o delete mode 100644 tools/MUMmer3.23/src/kurtz/streesrc/addleafcount.o delete mode 100644 tools/MUMmer3.23/src/kurtz/streesrc/construct.o delete mode 100644 tools/MUMmer3.23/src/kurtz/streesrc/depthtab.o delete mode 100644 tools/MUMmer3.23/src/kurtz/streesrc/dfs.o delete mode 100644 tools/MUMmer3.23/src/kurtz/streesrc/ex2leav.o delete mode 100644 tools/MUMmer3.23/src/kurtz/streesrc/iterator.o delete mode 100644 tools/MUMmer3.23/src/kurtz/streesrc/libstree.a delete mode 100644 tools/MUMmer3.23/src/kurtz/streesrc/linkloc.o delete mode 100644 tools/MUMmer3.23/src/kurtz/streesrc/overmax.o delete mode 100644 tools/MUMmer3.23/src/kurtz/streesrc/oversucc.o delete mode 100644 tools/MUMmer3.23/src/kurtz/streesrc/scanpref.o delete mode 100644 tools/MUMmer3.23/src/tigr/delta.o delete mode 100644 tools/MUMmer3.23/src/tigr/sw_align.o delete mode 100644 tools/MUMmer3.23/src/tigr/tigrinc.o delete mode 100644 tools/MUMmer3.23/src/tigr/translate.o diff --git a/tools/MUMmer3.23/annotate b/tools/MUMmer3.23/annotate deleted file mode 100755 index 15f55778ae8ff42e59b0e922436ddccbd767f62b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25415 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 D^vO23 diff --git a/tools/MUMmer3.23/aux_bin/postpro b/tools/MUMmer3.23/aux_bin/postpro deleted file mode 100755 index 6c60deb35e89d4c089a6784697b307fbc20fb6f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 93818 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 K0{8h#@P7ft*G-@R diff --git a/tools/MUMmer3.23/aux_bin/prenuc b/tools/MUMmer3.23/aux_bin/prenuc deleted file mode 100755 index 042c3fb20fe8742179886a8894aa501a352d1644..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16880 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�s;he2(nB;(2z$WK;&T_aaxDGFSMWG>$z zx-45twY8{|;FjF?|3+acY9jZ)LVQZ@y1EcA%Uw?w;!~O2hYIm&Oztm*csY~%Mj?I$ zzMxZ$5YLyg3MS*cQCNzdRL1W@{7NR{av?q=cfO<$x909E3UM3aqH2VAz7$bH#yz93 z6klM=cvgs4;rvIJ5#sq$HWP7YGJF=|$z=F!oClcG#?%?`!*;x@!
>;Nt?9>v2H%Ic)M%tp5ABpDLCz_5Wu%eib{sSVb1r35bTOZB)7{p(a{;6980 zGWHHA>8mC`6bA_(5xBfRE=R`_-X(D9r%K@CCVYXw=`$)yGx;xLH%LDMpC#}*fh(qR z*9lxT>9>qk1%iAmPHC)QrKXUx?b@T*qIzjOr(|kBt z1b>nHxqSWp8n`madOQcbO4PwfE^&MYqpxQvS@={>6JL{>%@eWD)&GIevK@{$>&VR1uuc(@oZI zuNT3mmg@aBI7j6b=g;7fTgq_`75p>;zl!F+Sikc6=GG$mF5y2_rE)(F!dtkAe!K|& z`6Bq^z$ZKR^8?_Olgz6h7V+~-@?){FUQ=8;S4963*PqGgqibWDjt-%DNS}36qWdLE z^MO-6Q>HllA)!Am;&8pL&K$riv5y=S`T}ORaec|<>CPhf?jm@y2>xY`BR-3DA;;_6 z0v|Mu<5NZa{9NcOGgMy5PEpm2^dsJTzAx}U0jKt+P3^r@#D5j86DOPJOMp*yKJ4Zq z`df*xiM;Vc^S zL}JlcKfZAB;80d`=avqavu$f99Z_?&6mYjR8${lat0xfJ=?=K~12C7ne}LiPRyg3p zn;-j{m8;e=61e={0dTA9alDJ3p?UlJ`u50jS~s`wVm5X-ZfkW(j*5}_d@1~C8!sh{ zuT1*+dn3auq~@)+cQ$MGRjZlIt(Cbo^)k0ApZjnQTPbs>qp)3_$8ug)=5niZwkvbF z)wyz4u4b+~?x?Rfyz*^taJ6l5(R<&Hc27rOYrV_gTEEuiYVT<6?EIK(U1A_{YClEmSfAJ_I9Y!>jd`JBX^5c&9+P1Yjnmsh#4CfF{+Prr98N)(}{$8{YH>!M?CWX)^G~-}-?~lffPJb$lXi zi@JM!m>U>1JjoXGMw~D$G!e&43qiCHhg2`aaN@KO!?e@;Pk)cy*GCg^1@BSuCcS-E zpE!|fwp`0As^JSVUQg6KKXFlSS~~g()j~sY0Jad+PpuYW`VrPbOjN26bouxr|H;nt Ys;c3Lt2hi>Xsmy)R*3NfviczXFV|@Yr2qf` diff --git a/tools/MUMmer3.23/aux_bin/prepro b/tools/MUMmer3.23/aux_bin/prepro deleted file mode 100755 index c44f85802b43d26a18ad85c6fb607f377b7e4490..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24219 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�W~JZwwY2Y#fPYwDx{ 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

c`OwHp*C8X^X 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 z%0A%#%KrWtjWu0fPJG}lBx~NUFqk5Byz7RhUvNmbC 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 AL;wH) diff --git a/tools/MUMmer3.23/mummerplot b/tools/MUMmer3.23/mummerplot deleted file mode 100755 index aa4436b..0000000 --- a/tools/MUMmer3.23/mummerplot +++ /dev/null @@ -1,1602 +0,0 @@ -#!/usr/bin/perl - -################################################################################ -# Programmer: Adam M Phillippy, The Institute for Genomic Research -# File: mummerplot -# Date: 01 / 08 / 03 -# 01 / 06 / 05 rewritten (v3.0) -# -# Usage: -# mummerplot [options] -# -# Try 'mummerplot -h' for more information. -# -# Purpose: To generate a gnuplot plot for the display of mummer, nucmer, -# promer, and show-tiling alignments. -# -################################################################################ - -use lib "/export/home/zqhu/tools/MUMmer3.23/scripts"; -use Foundation; -use strict; -use IO::Socket; - -my $BIN_DIR = "/export/home/zqhu/tools/MUMmer3.23"; -my $SCRIPT_DIR = "/export/home/zqhu/tools/MUMmer3.23/scripts"; - - -#================================================================= Globals ====# -#-- terminal types -my $X11 = "x11"; -my $PS = "postscript"; -my $PNG = "png"; - -#-- terminal sizes -my $SMALL = "small"; -my $MEDIUM = "medium"; -my $LARGE = "large"; - -my %TERMSIZE = - ( - $X11 => { $SMALL => 500, $MEDIUM => 700, $LARGE => 900 }, # screen pix - $PS => { $SMALL => 1, $MEDIUM => 2, $LARGE => 3 }, # pages - $PNG => { $SMALL => 800, $MEDIUM => 1024, $LARGE => 1400 } # image pix - ); - -#-- terminal format -my $FFACE = "Courier"; -my $FSIZE = "8"; -my $TFORMAT = "%.0f"; -my $MFORMAT = "[%.0f, %.0f]"; - -#-- output suffixes -my $FILTER = "filter"; -my $FWDPLOT = "fplot"; -my $REVPLOT = "rplot"; -my $HLTPLOT = "hplot"; -my $GNUPLOT = "gnuplot"; - -my %SUFFIX = - ( - $FILTER => ".filter", - $FWDPLOT => ".fplot", - $REVPLOT => ".rplot", - $HLTPLOT => ".hplot", - $GNUPLOT => ".gp", - $PS => ".ps", - $PNG => ".png" - ); - - -#================================================================= Options ====# -my $OPT_breaklen; # -b option -my $OPT_color; # --[no]color option -my $OPT_coverage; # --[no]coverage option -my $OPT_filter; # -f option -my $OPT_layout; # -l option -my $OPT_prefix = "out"; # -p option -my $OPT_rv; # --rv option -my $OPT_terminal = $X11; # -t option -my $OPT_IdR; # -r option -my $OPT_IdQ; # -q option -my $OPT_IDRfile; # -R option -my $OPT_IDQfile; # -Q option -my $OPT_rport; # -rport option -my $OPT_qport; # -qport option -my $OPT_size = $SMALL; # -small, -medium, -large -my $OPT_SNP; # -S option -my $OPT_xrange; # -x option -my $OPT_yrange; # -y option -my $OPT_title; # -title option - -my $OPT_Mfile; # match file -my $OPT_Dfile; # delta filter file -my $OPT_Ffile; # .fplot output -my $OPT_Rfile; # .rplot output -my $OPT_Hfile; # .hplot output -my $OPT_Gfile; # .gp output -my $OPT_Pfile; # .ps .png output - -my $OPT_gpstatus; # gnuplot status - -my $OPT_ONLY_USE_FATTEST; # Only use fattest alignment for layout - - -#============================================================== Foundation ====# -my $VERSION = '3.5'; - -my $USAGE = qq~ - USAGE: mummerplot [options] - ~; - -my $HELP = qq~ - USAGE: mummerplot [options] - - DESCRIPTION: - mummerplot generates plots of alignment data produced by mummer, nucmer, - promer or show-tiling by using the GNU gnuplot utility. After generating - the appropriate scripts and datafiles, mummerplot will attempt to run - gnuplot to generate the plot. If this attempt fails, a warning will be - output and the resulting .gp and .[frh]plot files will remain so that the - user may run gnuplot independently. If the attempt succeeds, either an x11 - window will be spawned or an additional output file will be generated - (.ps or .png depending on the selected terminal). Feel free to edit the - resulting gnuplot script (.gp) and rerun gnuplot to change line thinkness, - labels, colors, plot size etc. - - MANDATORY: - match file Set the alignment input to 'match file' - Valid inputs are from mummer, nucmer, promer and - show-tiling (.out, .cluster, .delta and .tiling) - - OPTIONS: - -b|breaklen Highlight alignments with breakpoints further than - breaklen nucleotides from the nearest sequence end - --[no]color Color plot lines with a percent similarity gradient or - turn off all plot color (default color by match dir) - If the plot is very sparse, edit the .gp script to plot - with 'linespoints' instead of 'lines' - -c - --[no]coverage Generate a reference coverage plot (default for .tiling) - --depend Print the dependency information and exit - -f - --filter Only display .delta alignments which represent the "best" - hit to any particular spot on either sequence, i.e. a - one-to-one mapping of reference and query subsequences - -h - --help Display help information and exit - -l - --layout Layout a .delta multiplot in an intelligible fashion, - this option requires the -R -Q options - --fat Layout sequences using fattest alignment only - -p|prefix Set the prefix of the output files (default '$OPT_prefix') - -rv Reverse video for x11 plots - -r|IdR Plot a particular reference sequence ID on the X-axis - -q|IdQ Plot a particular query sequence ID on the Y-axis - -R|Rfile Plot an ordered set of reference sequences from Rfile - -Q|Qfile Plot an ordered set of query sequences from Qfile - Rfile/Qfile Can either be the original DNA multi-FastA - files or lists of sequence IDs, lens and dirs [ /+/-] - -r|rport Specify the port to send reference ID and position on - mouse double click in X11 plot window - -q|qport Specify the port to send query IDs and position on mouse - double click in X11 plot window - -s|size Set the output size to small, medium or large - --small --medium --large (default '$OPT_size') - -S - --SNP Highlight SNP locations in each alignment - -t|terminal Set the output terminal to x11, postscript or png - --x11 --postscript --png (default '$OPT_terminal') - -t|title Specify the gnuplot plot title (default none) - -x|xrange Set the xrange for the plot '[min:max]' - -y|yrange Set the yrange for the plot '[min:max]' - -V - --version Display the version information and exit - ~; - -my @DEPEND = - ( - "$SCRIPT_DIR/Foundation.pm", - "$BIN_DIR/delta-filter", - "$BIN_DIR/show-coords", - "$BIN_DIR/show-snps", - "gnuplot" - ); - -my $tigr = new TIGR::Foundation - or die "ERROR: TIGR::Foundation could not be initialized\n"; - -$tigr -> setVersionInfo ($VERSION); -$tigr -> setUsageInfo ($USAGE); -$tigr -> setHelpInfo ($HELP); -$tigr -> addDependInfo (@DEPEND); - - -#=========================================================== Function Decs ====# -sub GetParseFunc( ); - -sub ParseIDs($$); - -sub ParseDelta($); -sub ParseCluster($); -sub ParseMummer($); -sub ParseTiling($); - -sub LayoutIDs($$); -sub SpanXwY ($$$$$); - -sub PlotData($$$); -sub WriteGP($$); -sub RunGP( ); -sub ListenGP($$); - -sub ParseOptions( ); - - -#=========================================================== Function Defs ====# -MAIN: -{ - my @aligns; # (sR eR sQ eQ sim lenR lenQ idR idQ) - my %refs; # (id => (off, len, [1/-1])) - my %qrys; # (id => (off, len, [1/-1])) - - #-- Get the command line options (sets OPT_ global vars) - ParseOptions( ); - - - #-- Get the alignment type - my $parsefunc = GetParseFunc( ); - - if ( $parsefunc != \&ParseDelta && - ($OPT_filter || $OPT_layout || $OPT_SNP) ) { - print STDERR "WARNING: -f -l -S only work with delta input\n"; - undef $OPT_filter; - undef $OPT_layout; - undef $OPT_SNP; - } - - #-- Parse the reference and query IDs - if ( defined $OPT_IdR ) { $refs{$OPT_IdR} = [ 0, 0, 1 ]; } - elsif ( defined $OPT_IDRfile ) { - ParseIDs ($OPT_IDRfile, \%refs); - } - - if ( defined $OPT_IdQ ) { $qrys{$OPT_IdQ} = [ 0, 0, 1 ]; } - elsif ( defined $OPT_IDQfile ) { - ParseIDs ($OPT_IDQfile, \%qrys); - } - - - #-- Filter the alignments - if ( $OPT_filter || $OPT_layout ) { - print STDERR "Writing filtered delta file $OPT_Dfile\n"; - system ("$BIN_DIR/delta-filter -r -q $OPT_Mfile > $OPT_Dfile") - and die "ERROR: Could not run delta-filter, $!\n"; - if ( $OPT_filter ) { $OPT_Mfile = $OPT_Dfile; } - } - - - #-- Parse the alignment data - $parsefunc->(\@aligns); - - - #-- Layout the alignment data if requested - if ( $OPT_layout ) { - if ( scalar (keys %refs) || scalar (keys %qrys) ) { - LayoutIDs (\%refs, \%qrys); - } - else { - print STDERR "WARNING: --layout option only works with -R or -Q\n"; - undef $OPT_layout; - } - } - - - #-- Plot the alignment data - PlotData (\@aligns, \%refs, \%qrys); - - - #-- Write the gnuplot script - WriteGP (\%refs, \%qrys); - - - #-- Run gnuplot script and fork a clipboard listener - unless ( $OPT_gpstatus == -1 ) { - - my $child = 1; - if ( $OPT_gpstatus == 0 && $OPT_terminal eq $X11 ) { - print STDERR "Forking mouse listener\n"; - $child = fork; - } - - #-- parent runs gnuplot - if ( $child ) { - RunGP( ); - kill 1, $child; - } - #-- child listens to clipboard - elsif ( defined $child ) { - ListenGP(\%refs, \%qrys); - } - else { - print STDERR "WARNING: Could not fork mouse listener\n"; - } - } - - exit (0); -} - - -#------------------------------------------------------------ GetParseFunc ----# -sub GetParseFunc ( ) -{ - my $fref; - - open (MFILE, "<$OPT_Mfile") - or die "ERROR: Could not open $OPT_Mfile, $!\n"; - - $_ = ; - if ( !defined ) { die "ERROR: Could not read $OPT_Mfile, File is empty\n" } - - SWITCH: { - #-- tiling - if ( /^>\S+ \d+ bases/ ) { - $fref = \&ParseTiling; - last SWITCH; - } - - #-- mummer - if ( /^> \S+/ ) { - $fref = \&ParseMummer; - last SWITCH; - } - - #-- nucmer/promer - if ( /^(\S+) (\S+)/ ) { - if ( ! defined $OPT_IDRfile ) { - $OPT_IDRfile = $1; - } - if ( ! defined $OPT_IDQfile ) { - $OPT_IDQfile = $2; - } - - $_ = ; - if ( (defined) && (/^NUCMER$/ || /^PROMER$/) ) { - $_ = ; # sequence header - $_ = ; # alignment header - if ( !defined ) { - $fref = \&ParseDelta; - last SWITCH; - } - elsif ( /^\d+ \d+ \d+ \d+ \d+ \d+ \d+$/ ) { - $fref = \&ParseDelta; - last SWITCH; - } - elsif ( /^[ \-][1-3] [ \-][1-3]$/ ) { - $fref = \&ParseCluster; - last SWITCH; - } - } - } - - #-- default - die "ERROR: Could not read $OPT_Mfile, Unrecognized file type\n"; - } - - close (MFILE) - or print STDERR "WARNING: Trouble closing $OPT_Mfile, $!\n"; - - return $fref; -} - - -#---------------------------------------------------------------- ParseIDs ----# -sub ParseIDs ($$) -{ - my $file = shift; - my $href = shift; - - open (IDFILE, "<$file") - or print STDERR "WARNING: Could not open $file, $!\n"; - - my $dir; - my $aref; - my $isfasta; - my $offset = 0; - while ( ) { - #-- Ignore blank lines - if ( /^\s*$/ ) { next; } - - #-- FastA header - if ( /^>(\S+)/ ) { - if ( exists $href->{$1} ) { - print STDERR "WARNING: Duplicate sequence '$1' ignored\n"; - undef $aref; - next; - } - - if ( !$isfasta ) { $isfasta = 1; } - if ( defined $aref ) { $offset += $aref->[1] - 1; } - - $aref = [ $offset, 0, 1 ]; - $href->{$1} = $aref; - next; - } - - #-- FastA sequence - if ( $isfasta && /^\S+$/ ) { - if ( defined $aref ) { $aref->[1] += (length) - 1; } - next; - } - - #-- ID len dir - if ( !$isfasta && /^(\S+)\s+(\d+)\s+([+-]?)$/ ) { - if ( exists $href->{$1} ) { - print STDERR "WARNING: Duplicate sequence '$1' ignored\n"; - undef $aref; - next; - } - - $dir = (defined $3 && $3 eq "-") ? -1 : 1; - $aref = [ $offset, $2, $dir ]; - $offset += $2 - 1; - $href->{$1} = $aref; - next; - } - - #-- default - print STDERR "WARNING: Could not parse $file\n$_"; - undef %$href; - last; - } - - close (IDFILE) - or print STDERR "WARNING: Trouble closing $file, $!\n"; -} - - -#-------------------------------------------------------------- ParseDelta ----# -sub ParseDelta ($) -{ - my $aref = shift; - - print STDERR "Reading delta file $OPT_Mfile\n"; - - open (MFILE, "<$OPT_Mfile") - or die "ERROR: Could not open $OPT_Mfile, $!\n"; - - my @align; - my $ispromer; - my ($sim, $tot); - my ($lenR, $lenQ, $idR, $idQ); - - $_ = ; - $_ = ; - $ispromer = /^PROMER/; - - while ( ) { - #-- delta int - if ( /^([-]?\d+)$/ ) { - if ( $1 < 0 ) { - $tot ++; - } - elsif ( $1 == 0 ) { - $align[4] = ($tot - $sim) / $tot * 100.0; - push @$aref, [ @align ]; - $tot = 0; - } - next; - } - - #-- alignment header - if ( /^(\d+) (\d+) (\d+) (\d+) \d+ (\d+) \d+$/ ) { - if ( $tot == 0 ) { - @align = ($1, $2, $3, $4, 0, $lenR, $lenQ, $idR, $idQ); - $tot = abs($1 - $2) + 1; - $sim = $5; - if ( $ispromer ) { $tot /= 3.0; } - next; - } - #-- drop to default - } - - #-- sequence header - if ( /^>(\S+) (\S+) (\d+) (\d+)$/ ) { - ($idR, $idQ, $lenR, $lenQ) = ($1, $2, $3, $4); - $tot = 0; - next; - } - - #-- default - die "ERROR: Could not parse $OPT_Mfile\n$_"; - } - - close (MFILE) - or print STDERR "WARNING: Trouble closing $OPT_Mfile, $!\n"; -} - - -#------------------------------------------------------------ ParseCluster ----# -sub ParseCluster ($) -{ - my $aref = shift; - - print STDERR "Reading cluster file $OPT_Mfile\n"; - - open (MFILE, "<$OPT_Mfile") - or die "ERROR: Could not open $OPT_Mfile, $!\n"; - - my @align; - my ($dR, $dQ, $len); - my ($lenR, $lenQ, $idR, $idQ); - - $_ = ; - $_ = ; - - while ( ) { - #-- match - if ( /^\s+(\d+)\s+(\d+)\s+(\d+)\s+\S+\s+\S+$/ ) { - @align = ($1, $1, $2, $2, 100, $lenR, $lenQ, $idR, $idQ); - $len = $3 - 1; - $align[1] += $dR == 1 ? $len : -$len; - $align[3] += $dQ == 1 ? $len : -$len; - push @$aref, [ @align ]; - next; - } - - #-- cluster header - if ( /^[ \-][1-3] [ \-][1-3]$/ ) { - $dR = /^-/ ? -1 : 1; - $dQ = /-[1-3]$/ ? -1 : 1; - next; - } - - #-- sequence header - if ( /^>(\S+) (\S+) (\d+) (\d+)$/ ) { - ($idR, $idQ, $lenR, $lenQ) = ($1, $2, $3, $4); - next; - } - - #-- default - die "ERROR: Could not parse $OPT_Mfile\n$_"; - } - - close (MFILE) - or print STDERR "WARNING: Trouble closing $OPT_Mfile, $!\n"; -} - - -#------------------------------------------------------------- ParseMummer ----# -sub ParseMummer ($) -{ - my $aref = shift; - - print STDERR "Reading mummer file $OPT_Mfile (use mummer -c)\n"; - - open (MFILE, "<$OPT_Mfile") - or die "ERROR: Could not open $OPT_Mfile, $!\n"; - - my @align; - my ($dQ, $len); - my ($lenQ, $idQ); - - while ( ) { - #-- 3 column match - if ( /^\s+(\d+)\s+(\d+)\s+(\d+)$/ ) { - @align = ($1, $1, $2, $2, 100, 0, $lenQ, "REF", $idQ); - $len = $3 - 1; - $align[1] += $len; - $align[3] += $dQ == 1 ? $len : -$len; - push @$aref, [ @align ]; - next; - } - - #-- 4 column match - if ( /^\s+(\S+)\s+(\d+)\s+(\d+)\s+(\d+)$/ ) { - @align = ($2, $2, $3, $3, 100, 0, $lenQ, $1, $idQ); - $len = $4 - 1; - $align[1] += $len; - $align[3] += $dQ == 1 ? $len : -$len; - push @$aref, [ @align ]; - next; - } - - #-- sequence header - if ( /^> (\S+)/ ) { - $idQ = $1; - $dQ = /^> \S+ Reverse/ ? -1 : 1; - $lenQ = /Len = (\d+)/ ? $1 : 0; - next; - } - - #-- default - die "ERROR: Could not parse $OPT_Mfile\n$_"; - } - - close (MFILE) - or print STDERR "WARNING: Trouble closing $OPT_Mfile, $!\n"; -} - - -#------------------------------------------------------------- ParseTiling ----# -sub ParseTiling ($) -{ - my $aref = shift; - - print STDERR "Reading tiling file $OPT_Mfile\n"; - - open (MFILE, "<$OPT_Mfile") - or die "ERROR: Could not open $OPT_Mfile, $!\n"; - - my @align; - my ($dR, $dQ, $len); - my ($lenR, $lenQ, $idR, $idQ); - - while ( ) { - #-- tile - if ( /^(\S+)\s+\S+\s+\S+\s+(\d+)\s+\S+\s+(\S+)\s+([+-])\s+(\S+)$/ ) { - @align = ($1, $1, 1, 1, $3, $lenR, $2, $idR, $5); - $len = $2 - 1; - $align[1] += $len; - $align[($4 eq "-" ? 2 : 3)] += $len; - push @$aref, [ @align ]; - next; - } - - #-- sequence header - if ( /^>(\S+) (\d+) bases$/ ) { - ($idR, $lenR) = ($1, $2); - next; - } - - #-- default - die "ERROR: Could not parse $OPT_Mfile\n$_"; - } - - close (MFILE) - or print STDERR "WARNING: Trouble closing $OPT_Mfile, $!\n"; - - if ( ! defined $OPT_coverage ) { $OPT_coverage = 1; } -} - - -#--------------------------------------------------------------- LayoutIDs ----# -# For each reference and query sequence, find the set of alignments that -# produce the heaviest (both in non-redundant coverage and percent -# identity) alignment subset of each sequence using a modified version -# of the longest increasing subset algorithm. Let R be the union of all -# reference LIS subsets, and Q be the union of all query LIS -# subsets. Let S be the intersection of R and Q. Using this LIS subset, -# recursively span reference and query sequences by their smaller -# counterparts until all spanning sequences have been placed. The goal -# is to cluster all the "major" alignment information along the main -# diagonal for easy viewing and interpretation. -sub LayoutIDs ($$) -{ - my $rref = shift; - my $qref = shift; - - my %rc; # chains of qry seqs needed to span each ref - my %qc; # chains of ref seqs needed to span each qry - # {idR} -> [ placed, len, {idQ} -> [ \slope, \loR, \hiR, \loQ, \hiQ ] ] - # {idQ} -> [ placed, len, {idR} -> [ \slope, \loQ, \hiQ, \loR, \hiR ] ] - - my @rl; # oo of ref seqs - my @ql; # oo of qry seqs - # [ [idR, slope] ] - # [ [idQ, slope] ] - - #-- get the filtered alignments - open (BTAB, "$BIN_DIR/show-coords -B $OPT_Dfile |") - or die "ERROR: Could not open show-coords pipe, $!\n"; - - my @align; - my ($sR, $eR, $sQ, $eQ, $lenR, $lenQ, $idR, $idQ); - my ($loR, $hiR, $loQ, $hiQ); - my ($dR, $dQ, $slope); - while ( ) { - chomp; - @align = split "\t"; - if ( scalar @align != 21 ) { - die "ERROR: Could not read show-coords pipe, invalid btab format\n"; - } - - $sR = $align[8]; $eR = $align[9]; - $sQ = $align[6]; $eQ = $align[7]; - $lenR = $align[18]; $lenQ = $align[2]; - $idR = $align[5]; $idQ = $align[0]; - - #-- skip it if not on include list - if ( !exists $rref->{$idR} || !exists $qref->{$idQ} ) { next; } - - #-- get orientation of both alignments and alignment slope - $dR = $sR < $eR ? 1 : -1; - $dQ = $sQ < $eQ ? 1 : -1; - $slope = $dR == $dQ ? 1 : -1; - - #-- get lo's and hi's - $loR = $dR == 1 ? $sR : $eR; - $hiR = $dR == 1 ? $eR : $sR; - - $loQ = $dQ == 1 ? $sQ : $eQ; - $hiQ = $dQ == 1 ? $eQ : $sQ; - - if ($OPT_ONLY_USE_FATTEST) - { - #-- Check to see if there is another better alignment - if (exists $qc{$idQ}) - { - my ($oldR) = keys %{$qc{$idQ}[2]}; - my $val = $qc{$idQ}[2]{$oldR}; - - if (${$val->[4]} - ${$val->[3]} > $hiR - $loR) - { - #-- Old alignment is better, skip this one - next; - } - else - { - #-- This alignment is better, prune old alignment - delete $rc{$oldR}[2]{$idQ}; - delete $qc{$idQ}; - } - } - } - - #-- initialize - if ( !exists $rc{$idR} ) { $rc{$idR} = [ 0, $lenR, { } ]; } - if ( !exists $qc{$idQ} ) { $qc{$idQ} = [ 0, $lenQ, { } ]; } - - #-- if no alignments for these two exist OR - #-- this alignment is bigger than the current - if ( !exists $rc{$idR}[2]{$idQ} || !exists $qc{$idQ}[2]{$idR} || - $hiR - $loR > - ${$rc{$idR}[2]{$idQ}[2]} - ${$rc{$idR}[2]{$idQ}[1]} ) { - - #-- rc and qc reference these anonymous values - my $aref = [ $slope, $loR, $hiR, $loQ, $hiQ ]; - - #-- rc is ordered [ slope, loR, hiR, loQ, hiQ ] - #-- qc is ordered [ slope, loQ, hiQ, loR, hiR ] - $rc{$idR}[2]{$idQ}[0] = $qc{$idQ}[2]{$idR}[0] = \$aref->[0]; - $rc{$idR}[2]{$idQ}[1] = $qc{$idQ}[2]{$idR}[3] = \$aref->[1]; - $rc{$idR}[2]{$idQ}[2] = $qc{$idQ}[2]{$idR}[4] = \$aref->[2]; - $rc{$idR}[2]{$idQ}[3] = $qc{$idQ}[2]{$idR}[1] = \$aref->[3]; - $rc{$idR}[2]{$idQ}[4] = $qc{$idQ}[2]{$idR}[2] = \$aref->[4]; - } - } - - close (BTAB) - or print STDERR "WARNING: Trouble closing show-coords pipe, $!\n"; - - #-- recursively span sequences to generate the layout - foreach $idR ( sort { $rc{$b}[1] <=> $rc{$a}[1] } keys %rc ) { - SpanXwY ($idR, \%rc, \@rl, \%qc, \@ql); - } - - #-- undefine the current offsets - foreach $idR ( keys %{$rref} ) { undef $rref->{$idR}[0]; } - foreach $idQ ( keys %{$qref} ) { undef $qref->{$idQ}[0]; } - - #-- redefine the offsets according to the new layout - my $roff = 0; - foreach my $r ( @rl ) { - $idR = $r->[0]; - $rref->{$idR}[0] = $roff; - $rref->{$idR}[2] = $r->[1]; - $roff += $rref->{$idR}[1] - 1; - } - #-- append the guys left out of the layout - foreach $idR ( keys %{$rref} ) { - if ( !defined $rref->{$idR}[0] ) { - $rref->{$idR}[0] = $roff; - $roff += $rref->{$idR}[1] - 1; - } - } - - #-- redefine the offsets according to the new layout - my $qoff = 0; - foreach my $q ( @ql ) { - $idQ = $q->[0]; - $qref->{$idQ}[0] = $qoff; - $qref->{$idQ}[2] = $q->[1]; - $qoff += $qref->{$idQ}[1] - 1; - } - #-- append the guys left out of the layout - foreach $idQ ( keys %{$qref} ) { - if ( !defined $qref->{$idQ}[0] ) { - $qref->{$idQ}[0] = $qoff; - $qoff += $qref->{$idQ}[1] - 1; - } - } -} - - -#----------------------------------------------------------------- SpanXwY ----# -sub SpanXwY ($$$$$) { - my $x = shift; # idX - my $xcr = shift; # xc ref - my $xlr = shift; # xl ref - my $ycr = shift; # yc ref - my $ylr = shift; # yl ref - - my @post; - foreach my $y ( sort { ${$xcr->{$x}[2]{$a}[1]} <=> ${$xcr->{$x}[2]{$b}[1]} } - keys %{$xcr->{$x}[2]} ) { - - #-- skip if already placed (RECURSION BASE) - if ( $ycr->{$y}[0] ) { next; } - else { $ycr->{$y}[0] = 1; } - - #-- get len and slope info for y - my $len = $ycr->{$y}[1]; - my $slope = ${$xcr->{$x}[2]{$y}[0]}; - - #-- if we need to flip, reverse complement all y records - if ( $slope == -1 ) { - foreach my $xx ( keys %{$ycr->{$y}[2]} ) { - ${$ycr->{$y}[2]{$xx}[0]} *= -1; - - my $loy = ${$ycr->{$y}[2]{$xx}[1]}; - my $hiy = ${$ycr->{$y}[2]{$xx}[2]}; - ${$ycr->{$y}[2]{$xx}[1]} = $len - $hiy + 1; - ${$ycr->{$y}[2]{$xx}[2]} = $len - $loy + 1; - } - } - - #-- place y - push @{$ylr}, [ $y, $slope ]; - - #-- RECURSE if y > x, else save for later - if ( $len > $xcr->{$x}[1] ) { SpanXwY ($y, $ycr, $ylr, $xcr, $xlr); } - else { push @post, $y; } - } - - #-- RECURSE for all y < x - foreach my $y ( @post ) { SpanXwY ($y, $ycr, $ylr, $xcr, $xlr); } -} - - -#---------------------------------------------------------------- PlotData ----# -sub PlotData ($$$) -{ - my $aref = shift; - my $rref = shift; - my $qref = shift; - - print STDERR "Writing plot files $OPT_Ffile, $OPT_Rfile", - (defined $OPT_Hfile ? ", $OPT_Hfile\n" : "\n"); - - open (FFILE, ">$OPT_Ffile") - or die "ERROR: Could not open $OPT_Ffile, $!\n"; - print FFILE "#-- forward hits sorted by %sim\n0 0 0\n0 0 0\n\n\n"; - - open (RFILE, ">$OPT_Rfile") - or die "ERROR: Could not open $OPT_Rfile, $!\n"; - print RFILE "#-- reverse hits sorted by %sim\n0 0 0\n0 0 0\n\n\n"; - - if ( defined $OPT_Hfile ) { - open (HFILE, ">$OPT_Hfile") - or die "ERROR: Could not open $OPT_Hfile, $!\n"; - print HFILE "#-- highlighted hits sorted by %sim\n0 0 0\n0 0 0\n\n\n"; - } - - my $fh; - my $align; - my $isplotted; - my $ismultiref; - my $ismultiqry; - my ($plenR, $plenQ, $pidR, $pidQ); - - #-- for each alignment sorted by ascending identity - foreach $align ( sort { $a->[4] <=> $b->[4] } @$aref ) { - - my ($sR, $eR, $sQ, $eQ, $sim, $lenR, $lenQ, $idR, $idQ) = @$align; - - if ( ! defined $pidR ) { - ($plenR, $plenQ, $pidR, $pidQ) = ($lenR, $lenQ, $idR, $idQ); - } - - #-- set the sequence offset, length, direction, etc... - my ($refoff, $reflen, $refdir); - my ($qryoff, $qrylen, $qrydir); - - if ( defined (%$rref) ) { - #-- skip reference sequence or set atts from hash - if ( !exists ($rref->{$idR}) ) { next; } - else { ($refoff, $reflen, $refdir) = @{$rref->{$idR}}; } - } - else { - #-- no reference hash, so default atts - ($refoff, $reflen, $refdir) = (0, $lenR, 1); - } - - if ( defined (%$qref) ) { - #-- skip query sequence or set atts from hash - if ( !exists ($qref->{$idQ}) ) { next; } - else { ($qryoff, $qrylen, $qrydir) = @{$qref->{$idQ}}; } - } - else { - #-- no query hash, so default atts - ($qryoff, $qrylen, $qrydir) = (0, $lenQ, 1); - } - - #-- get the orientation right - if ( $refdir == -1 ) { - $sR = $reflen - $sR + 1; - $eR = $reflen - $eR + 1; - } - if ( $qrydir == -1 ) { - $sQ = $qrylen - $sQ + 1; - $eQ = $qrylen - $eQ + 1; - } - - #-- forward file, reverse file, highlight file - my @fha; - - if ( defined $OPT_breaklen && - ( ($sR - 1 > $OPT_breaklen && - $sQ - 1 > $OPT_breaklen && - $reflen - $sR > $OPT_breaklen && - $qrylen - $sQ > $OPT_breaklen) - || - ($eR - 1 > $OPT_breaklen && - $eQ - 1 > $OPT_breaklen && - $reflen - $eR > $OPT_breaklen && - $qrylen - $eQ > $OPT_breaklen) ) ) { - push @fha, \*HFILE; - } - - push @fha, (($sR < $eR) == ($sQ < $eQ) ? \*FFILE : \*RFILE); - - #-- plot it - $sR += $refoff; $eR += $refoff; - $sQ += $qryoff; $eQ += $qryoff; - - if ( $OPT_coverage ) { - foreach $fh ( @fha ) { - print $fh - "$sR 10 $sim\n", "$eR 10 $sim\n\n\n", - "$sR $sim 0\n", "$eR $sim 0\n\n\n"; - } - } - else { - foreach $fh ( @fha ) { - print $fh "$sR $sQ $sim\n", "$eR $eQ $sim\n\n\n"; - } - } - - #-- set some flags - if ( !$ismultiref && $idR ne $pidR ) { $ismultiref = 1; } - if ( !$ismultiqry && $idQ ne $pidQ ) { $ismultiqry = 1; } - if ( !$isplotted ) { $isplotted = 1; } - } - - - #-- highlight the SNPs - if ( defined $OPT_SNP ) { - - print STDERR "Determining SNPs from sequence and alignment data\n"; - - open (SNPS, "$BIN_DIR/show-snps -H -T -l $OPT_Mfile |") - or die "ERROR: Could not open show-snps pipe, $!\n"; - - my @snps; - my ($pR, $pQ, $lenR, $lenQ, $idR, $idQ); - while ( ) { - chomp; - @snps = split "\t"; - if ( scalar @snps != 14 ) { - die "ERROR: Could not read show-snps pipe, invalid format\n"; - } - - $pR = $snps[0]; $pQ = $snps[3]; - $lenR = $snps[8]; $lenQ = $snps[9]; - $idR = $snps[12]; $idQ = $snps[13]; - - #-- set the sequence offset, length, direction, etc... - my ($refoff, $reflen, $refdir); - my ($qryoff, $qrylen, $qrydir); - - if ( defined (%$rref) ) { - #-- skip reference sequence or set atts from hash - if ( !exists ($rref->{$idR}) ) { next; } - else { ($refoff, $reflen, $refdir) = @{$rref->{$idR}}; } - } - else { - #-- no reference hash, so default atts - ($refoff, $reflen, $refdir) = (0, $lenR, 1); - } - - if ( defined (%$qref) ) { - #-- skip query sequence or set atts from hash - if ( !exists ($qref->{$idQ}) ) { next; } - else { ($qryoff, $qrylen, $qrydir) = @{$qref->{$idQ}}; } - } - else { - #-- no query hash, so default atts - ($qryoff, $qrylen, $qrydir) = (0, $lenQ, 1); - } - - #-- get the orientation right - if ( $refdir == -1 ) { $pR = $reflen - $pR + 1; } - if ( $qrydir == -1 ) { $pQ = $qrylen - $pQ + 1; } - - #-- plot it - $pR += $refoff; - $pQ += $qryoff; - - if ( $OPT_coverage ) { - print HFILE "$pR 10 0\n", "$pR 10 0\n\n\n", - } - else { - print HFILE "$pR $pQ 0\n", "$pR $pQ 0\n\n\n"; - } - } - - close (SNPS) - or print STDERR "WARNING: Trouble closing show-snps pipe, $!\n"; - } - - - close (FFILE) - or print STDERR "WARNING: Trouble closing $OPT_Ffile, $!\n"; - - close (RFILE) - or print STDERR "WARNING: Trouble closing $OPT_Rfile, $!\n"; - - if ( defined $OPT_Hfile ) { - close (HFILE) - or print STDERR "WARNING: Trouble closing $OPT_Hfile, $!\n"; - } - - - if ( !defined (%$rref) ) { - if ( $ismultiref ) { - print STDERR - "WARNING: Multiple ref sequences overlaid, try -R or -r\n"; - } - elsif ( defined $pidR ) { - $rref->{$pidR} = [ 0, $plenR, 1 ]; - } - } - - if ( !defined (%$qref) ) { - if ( $ismultiqry && !$OPT_coverage ) { - print STDERR - "WARNING: Multiple qry sequences overlaid, try -Q, -q or -c\n"; - } - elsif ( defined $pidQ ) { - $qref->{$pidQ} = [ 0, $plenQ, 1 ]; - } - } - - if ( !$isplotted ) { - die "ERROR: No alignment data to plot\n"; - } -} - - -#----------------------------------------------------------------- WriteGP ----# -sub WriteGP ($$) -{ - my $rref = shift; - my $qref = shift; - - print STDERR "Writing gnuplot script $OPT_Gfile\n"; - - open (GFILE, ">$OPT_Gfile") - or die "ERROR: Could not open $OPT_Gfile, $!\n"; - - my ($FWD, $REV, $HLT) = (1, 2, 3); - my $SIZE = $TERMSIZE{$OPT_terminal}{$OPT_size}; - - #-- terminal specific stuff - my ($P_TERM, $P_SIZE, %P_PS, %P_LW); - foreach ( $OPT_terminal ) { - /^$X11/ and do { - $P_TERM = $OPT_gpstatus == 0 ? - "$X11 font \"$FFACE,$FSIZE\"" : "$X11"; - - %P_PS = ( $FWD => 1.0, $REV => 1.0, $HLT => 1.0 ); - - %P_LW = $OPT_coverage || $OPT_color ? - ( $FWD => 3.0, $REV => 3.0, $HLT => 3.0 ) : - ( $FWD => 2.0, $REV => 2.0, $HLT => 2.0 ); - - $P_SIZE = $OPT_coverage ? - "set size 1,1" : - "set size 1,1"; - - last; - }; - - /^$PS/ and do { - $P_TERM = defined $OPT_color && $OPT_color == 0 ? - "$PS monochrome" : "$PS color"; - $P_TERM .= $OPT_gpstatus == 0 ? - " solid \"$FFACE\" $FSIZE" : " solid \"$FFACE\" $FSIZE"; - - %P_PS = ( $FWD => 0.5, $REV => 0.5, $HLT => 0.5 ); - - %P_LW = $OPT_coverage || $OPT_color ? - ( $FWD => 4.0, $REV => 4.0, $HLT => 4.0 ) : - ( $FWD => 2.0, $REV => 2.0, $HLT => 2.0 ); - - $P_SIZE = $OPT_coverage ? - "set size ".(1.0 * $SIZE).",".(0.5 * $SIZE) : - "set size ".(1.0 * $SIZE).",".(1.0 * $SIZE); - - last; - }; - - /^$PNG/ and do { - $P_TERM = $OPT_gpstatus == 0 ? - "$PNG tiny size $SIZE,$SIZE" : "$PNG small"; - if ( defined $OPT_color && $OPT_color == 0 ) { - $P_TERM .= " xffffff x000000 x000000"; - $P_TERM .= " x000000 x000000 x000000"; - $P_TERM .= " x000000 x000000 x000000"; - } - - %P_PS = ( $FWD => 1.0, $REV => 1.0, $HLT => 1.0 ); - - %P_LW = $OPT_coverage || $OPT_color ? - ( $FWD => 3.0, $REV => 3.0, $HLT => 3.0 ) : - ( $FWD => 3.0, $REV => 3.0, $HLT => 3.0 ); - - $P_SIZE = $OPT_coverage ? - "set size 1,.375" : - "set size 1,1"; - - last; - }; - - die "ERROR: Don't know how to initialize terminal, $OPT_terminal\n"; - } - - #-- plot commands - my ($P_WITH, $P_FORMAT, $P_LS, $P_KEY, %P_PT, %P_LT); - - %P_PT = ( $FWD => 6, $REV => 6, $HLT => 6 ); - %P_LT = defined $OPT_Hfile ? - ( $FWD => 2, $REV => 2, $HLT => 1 ) : - ( $FWD => 1, $REV => 3, $HLT => 2 ); - - $P_WITH = $OPT_coverage || $OPT_color ? "w l" : "w lp"; - - $P_FORMAT = "set format \"$TFORMAT\""; - if ( $OPT_gpstatus == 0 ) { - $P_LS = "set style line"; - $P_KEY = "unset key"; - $P_FORMAT .= "\nset mouse format \"$TFORMAT\""; - $P_FORMAT .= "\nset mouse mouseformat \"$MFORMAT\""; - $P_FORMAT .= "\nset mouse clipboardformat \"$MFORMAT\""; - } - else { - $P_LS = "set linestyle"; - $P_KEY = "set nokey"; - } - - - my @refk = keys (%$rref); - my @qryk = keys (%$qref); - my ($xrange, $yrange); - my ($xlabel, $ylabel); - my ($tic, $dir); - my $border = 0; - - #-- terminal header and output - print GFILE "set terminal $P_TERM\n"; - - if ( defined $OPT_Pfile ) { - print GFILE "set output \"$OPT_Pfile\"\n"; - } - - if ( defined $OPT_title ) { - print GFILE "set title \"$OPT_title\"\n"; - } - - #-- set tics, determine labels, ranges (ref) - if ( scalar (@refk) == 1 ) { - $xlabel = $refk[0]; - $xrange = $rref->{$xlabel}[1]; - } - else { - $xrange = 0; - print GFILE "set xtics rotate \( \\\n"; - foreach $xlabel ( sort { $rref->{$a}[0] <=> $rref->{$b}[0] } @refk ) { - $xrange += $rref->{$xlabel}[1]; - $tic = $rref->{$xlabel}[0] + 1; - $dir = ($rref->{$xlabel}[2] == 1) ? "" : "*"; - print GFILE " \"$dir$xlabel\" $tic, \\\n"; - } - print GFILE " \"\" $xrange \\\n\)\n"; - $xlabel = "REF"; - } - if ( $xrange == 0 ) { $xrange = "*"; } - - #-- set tics, determine labels, ranges (qry) - if ( $OPT_coverage ) { - $ylabel = "%SIM"; - $yrange = 110; - } - elsif ( scalar (@qryk) == 1 ) { - $ylabel = $qryk[0]; - $yrange = $qref->{$ylabel}[1]; - } - else { - $yrange = 0; - print GFILE "set ytics \( \\\n"; - foreach $ylabel ( sort { $qref->{$a}[0] <=> $qref->{$b}[0] } @qryk ) { - $yrange += $qref->{$ylabel}[1]; - $tic = $qref->{$ylabel}[0] + 1; - $dir = ($qref->{$ylabel}[2] == 1) ? "" : "*"; - print GFILE " \"$dir$ylabel\" $tic, \\\n"; - } - print GFILE " \"\" $yrange \\\n\)\n"; - $ylabel = "QRY"; - } - if ( $yrange == 0 ) { $yrange = "*"; } - - #-- determine borders - if ( $xrange ne "*" && scalar (@refk) == 1 ) { $border |= 10; } - if ( $yrange ne "*" && scalar (@qryk) == 1 ) { $border |= 5; } - if ( $OPT_coverage ) { $border |= 5; } - - #-- grid, labels, border - print GFILE - "$P_SIZE\n", - "set grid\n", - "$P_KEY\n", - "set border $border\n", - "set tics scale 0\n", - "set xlabel \"$xlabel\"\n", - "set ylabel \"$ylabel\"\n", - "$P_FORMAT\n"; - - #-- ranges - if ( defined $OPT_xrange ) { print GFILE "set xrange $OPT_xrange\n"; } - else { print GFILE "set xrange [1:$xrange]\n"; } - - if ( defined $OPT_yrange ) { print GFILE "set yrange $OPT_yrange\n"; } - else { print GFILE "set yrange [1:$yrange]\n"; } - - #-- if %sim plot - if ( $OPT_color ) { - print GFILE - "set zrange [0:100]\n", - "set colorbox default\n", - "set cblabel \"%similarity\"\n", - "set cbrange [0:100]\n", - "set cbtics 20\n", - "set pm3d map\n", - "set palette model RGB defined ( \\\n", - " 0 \"#000000\", \\\n", - " 4 \"#DD00DD\", \\\n", - " 6 \"#0000DD\", \\\n", - " 7 \"#00DDDD\", \\\n", - " 8 \"#00DD00\", \\\n", - " 9 \"#DDDD00\", \\\n", - " 10 \"#DD0000\" \\\n)\n"; - } - - foreach my $s ( ($FWD, $REV, $HLT) ) { - my $ss = "$P_LS $s "; - $ss .= $OPT_color ? " palette" : " lt $P_LT{$s}"; - $ss .= " lw $P_LW{$s}"; - if ( ! $OPT_coverage || $s == $HLT ) { - $ss .= " pt $P_PT{$s} ps $P_PS{$s}"; - } - print GFILE "$ss\n"; - } - - #-- plot it - print GFILE - ($OPT_color ? "splot \\\n" : "plot \\\n"); - print GFILE - " \"$OPT_Ffile\" title \"FWD\" $P_WITH ls $FWD, \\\n", - " \"$OPT_Rfile\" title \"REV\" $P_WITH ls $REV", - (! defined $OPT_Hfile ? "\n" : - ", \\\n \"$OPT_Hfile\" title \"HLT\" w lp ls $HLT"); - - #-- interactive mode - if ( $OPT_terminal eq $X11 ) { - print GFILE "\n", - "print \"-- INTERACTIVE MODE --\"\n", - "print \"consult gnuplot docs for command list\"\n", - "print \"mouse 1: coords to clipboard\"\n", - "print \"mouse 2: mark on plot\"\n", - "print \"mouse 3: zoom box\"\n", - "print \"'h' for help in plot window\"\n", - "print \"enter to exit\"\n", - "pause -1\n"; - } - - close (GFILE) - or print STDERR "WARNING: Trouble closing $OPT_Gfile, $!\n"; -} - - -#------------------------------------------------------------------- RunGP ----# -sub RunGP ( ) -{ - if ( defined $OPT_Pfile ) { - print STDERR "Rendering plot $OPT_Pfile\n"; - } - else { - print STDERR "Rendering plot to screen\n"; - } - - my $cmd = "gnuplot"; - - #-- x11 specifics - if ( $OPT_terminal eq $X11 ) { - my $size = $TERMSIZE{$OPT_terminal}{$OPT_size}; - $cmd .= " -geometry ${size}x"; - if ( $OPT_coverage ) { $size = sprintf ("%.0f", $size * .375); } - $cmd .= "${size}+0+0 -title mummerplot"; - - if ( defined $OPT_color && $OPT_color == 0 ) { - $cmd .= " -mono"; - $cmd .= " -xrm 'gnuplot*line1Dashes: 0'"; - $cmd .= " -xrm 'gnuplot*line2Dashes: 0'"; - $cmd .= " -xrm 'gnuplot*line3Dashes: 0'"; - } - - if ( $OPT_rv ) { - $cmd .= " -rv"; - $cmd .= " -xrm 'gnuplot*background: black'"; - $cmd .= " -xrm 'gnuplot*textColor: white'"; - $cmd .= " -xrm 'gnuplot*borderColor: white'"; - $cmd .= " -xrm 'gnuplot*axisColor: white'"; - } - } - - $cmd .= " $OPT_Gfile"; - - system ($cmd) - and print STDERR "WARNING: Unable to run '$cmd', $!\n"; -} - - -#---------------------------------------------------------------- ListenGP ----# -sub ListenGP($$) -{ - my $rref = shift; - my $qref = shift; - - my ($refc, $qryc); - my ($refid, $qryid); - my ($rsock, $qsock); - my $oldclip = ""; - - #-- get IDs sorted by offset - my @refo = sort { $rref->{$a}[0] <=> $rref->{$b}[0] } keys %$rref; - my @qryo = sort { $qref->{$a}[0] <=> $qref->{$b}[0] } keys %$qref; - - #-- attempt to connect sockets - if ( $OPT_rport ) { - $rsock = IO::Socket::INET->new("localhost:$OPT_rport") - or print STDERR "WARNING: Could not connect to rport $OPT_rport\n"; - } - - if ( $OPT_qport ) { - $qsock = IO::Socket::INET->new("localhost:$OPT_qport") - or print STDERR "WARNING: Could not connect to qport $OPT_qport\n"; - } - - #-- while parent still exists - while ( getppid != 1 ) { - - #-- query the clipboard - $_ = `xclip -o -silent -selection primary`; - if ( $? >> 8 ) { - die "WARNING: Unable to query clipboard with xclip\n"; - } - - #-- if cliboard has changed and contains a coordinate - if ( $_ ne $oldclip && (($refc, $qryc) = /^\[(\d+), (\d+)\]/) ) { - - $oldclip = $_; - - #-- translate the reference position - $refid = "NULL"; - for ( my $i = 0; $i < (scalar @refo); ++ $i ) { - my $aref = $rref->{$refo[$i]}; - if ( $i == $#refo || $aref->[0] + $aref->[1] > $refc ) { - $refid = $refo[$i]; - $refc -= $aref->[0]; - if ( $aref->[2] == -1 ) { - $refc = $aref->[1] - $refc + 1; - } - last; - } - } - - #-- translate the query position - $qryid = "NULL"; - for ( my $i = 0; $i < (scalar @qryo); ++ $i ) { - my $aref = $qref->{$qryo[$i]}; - if ( $i == $#qryo || $aref->[0] + $aref->[1] > $qryc ) { - $qryid = $qryo[$i]; - $qryc -= $aref->[0]; - if ( $aref->[2] == -1 ) { - $qryc = $aref->[1] - $qryc + 1; - } - last; - } - } - - #-- print the info to stdout and socket - print "$refid\t$qryid\t$refc\t$qryc\n"; - - if ( $rsock ) { - print $rsock "contig I$refid $refc\n"; - print "sent \"contig I$refid $refc\" to $OPT_rport\n"; - } - if ( $qsock ) { - print $qsock "contig I$qryid $qryc\n"; - print "sent \"contig I$qryid $qryc\" to $OPT_qport\n"; - } - } - - #-- sleep for half second - select undef, undef, undef, .5; - } - - exit (0); -} - - -#------------------------------------------------------------ ParseOptions ----# -sub ParseOptions ( ) -{ - my ($opt_small, $opt_medium, $opt_large); - my ($opt_ps, $opt_x11, $opt_png); - my $cnt; - - #-- Get options - my $err = $tigr -> TIGR_GetOptions - ( - "b|breaklen:i" => \$OPT_breaklen, - "color!" => \$OPT_color, - "c|coverage!" => \$OPT_coverage, - "f|filter!" => \$OPT_filter, - "l|layout!" => \$OPT_layout, - "p|prefix=s" => \$OPT_prefix, - "rv" => \$OPT_rv, - "r|IdR=s" => \$OPT_IdR, - "q|IdQ=s" => \$OPT_IdQ, - "R|Rfile=s" => \$OPT_IDRfile, - "Q|Qfile=s" => \$OPT_IDQfile, - "rport=i" => \$OPT_rport, - "qport=i" => \$OPT_qport, - "s|size=s" => \$OPT_size, - "S|SNP" => \$OPT_SNP, - "t|terminal=s" => \$OPT_terminal, - "title=s" => \$OPT_title, - "x|xrange=s" => \$OPT_xrange, - "y|yrange=s" => \$OPT_yrange, - "x11" => \$opt_x11, - "postscript" => \$opt_ps, - "png" => \$opt_png, - "small" => \$opt_small, - "medium" => \$opt_medium, - "large" => \$opt_large, - "fat" => \$OPT_ONLY_USE_FATTEST, - ); - - if ( !$err || scalar (@ARGV) != 1 ) { - $tigr -> printUsageInfo( ); - die "Try '$0 -h' for more information.\n"; - } - - $cnt = 0; - if ( $opt_png ) { $OPT_terminal = $PNG; $cnt ++; } - if ( $opt_ps ) { $OPT_terminal = $PS; $cnt ++; } - if ( $opt_x11 ) { $OPT_terminal = $X11; $cnt ++; } - if ( $cnt > 1 ) { - print STDERR - "WARNING: Multiple terminals not allowed, using '$OPT_terminal'\n"; - } - - $cnt = 0; - if ( $opt_large ) { $OPT_size = $LARGE; $cnt ++; } - if ( $opt_medium ) { $OPT_size = $MEDIUM; $cnt ++; } - if ( $opt_small ) { $OPT_size = $SMALL; $cnt ++; } - if ( $cnt > 1 ) { - print STDERR - "WARNING: Multiple sizes now allowed, using '$OPT_size'\n"; - } - - #-- Check that status of gnuplot - $OPT_gpstatus = system ("gnuplot --version"); - - if ( $OPT_gpstatus == -1 ) { - print STDERR - "WARNING: Could not find gnuplot, plot will not be rendered\n"; - } - elsif ( $OPT_gpstatus ) { - print STDERR - "WARNING: Using outdated gnuplot, use v4.0 for best results\n"; - - if ( $OPT_color ) { - print STDERR - "WARNING: Turning of --color option for compatibility\n"; - undef $OPT_color; - } - - if ( $OPT_terminal eq $PNG && $OPT_size ne $SMALL ) { - print STDERR - "WARNING: Turning of --size option for compatibility\n"; - $OPT_size = $SMALL; - } - } - - #-- Check options - if ( !exists $TERMSIZE{$OPT_terminal} ) { - die "ERROR: Invalid terminal type, $OPT_terminal\n"; - } - - if ( !exists $TERMSIZE{$OPT_terminal}{$OPT_size} ) { - die "ERROR: Invalid terminal size, $OPT_size\n"; - } - - if ( $OPT_xrange ) { - $OPT_xrange =~ tr/,/:/; - $OPT_xrange =~ /^\[\d+:\d+\]$/ - or die "ERROR: Invalid xrange format, $OPT_xrange\n"; - } - - if ( $OPT_yrange ) { - $OPT_yrange =~ tr/,/:/; - $OPT_yrange =~ /^\[\d+:\d+\]$/ - or die "ERROR: Invalid yrange format, $OPT_yrange\n"; - } - - #-- Set file names - $OPT_Mfile = $ARGV[0]; - $tigr->isReadableFile ($OPT_Mfile) - or die "ERROR: Could not read $OPT_Mfile, $!\n"; - - $OPT_Ffile = $OPT_prefix . $SUFFIX{$FWDPLOT}; - $tigr->isWritableFile ($OPT_Ffile) or $tigr->isCreatableFile ($OPT_Ffile) - or die "ERROR: Could not write $OPT_Ffile, $!\n"; - - $OPT_Rfile = $OPT_prefix . $SUFFIX{$REVPLOT}; - $tigr->isWritableFile ($OPT_Rfile) or $tigr->isCreatableFile ($OPT_Rfile) - or die "ERROR: Could not write $OPT_Rfile, $!\n"; - - if ( defined $OPT_breaklen || defined $OPT_SNP ) { - $OPT_Hfile = $OPT_prefix . $SUFFIX{$HLTPLOT}; - $tigr->isWritableFile($OPT_Hfile) or $tigr->isCreatableFile($OPT_Hfile) - or die "ERROR: Could not write $OPT_Hfile, $!\n"; - } - - if ($OPT_ONLY_USE_FATTEST) - { - $OPT_layout = 1; - } - - if ( $OPT_filter || $OPT_layout ) { - $OPT_Dfile = $OPT_prefix . $SUFFIX{$FILTER}; - $tigr->isWritableFile($OPT_Dfile) or $tigr->isCreatableFile($OPT_Dfile) - or die "ERROR: Could not write $OPT_Dfile, $!\n"; - } - - $OPT_Gfile = $OPT_prefix . $SUFFIX{$GNUPLOT}; - $tigr->isWritableFile ($OPT_Gfile) or $tigr->isCreatableFile ($OPT_Gfile) - or die "ERROR: Could not write $OPT_Gfile, $!\n"; - - if ( exists $SUFFIX{$OPT_terminal} ) { - $OPT_Pfile = $OPT_prefix . $SUFFIX{$OPT_terminal}; - $tigr->isWritableFile($OPT_Pfile) or $tigr->isCreatableFile($OPT_Pfile) - or die "ERROR: Could not write $OPT_Pfile, $!\n"; - } - - if ( defined $OPT_IDRfile ) { - $tigr->isReadableFile ($OPT_IDRfile) - or die "ERROR: Could not read $OPT_IDRfile, $!\n"; - } - - if ( defined $OPT_IDQfile ) { - $tigr->isReadableFile ($OPT_IDQfile) - or die "ERROR: Could not read $OPT_IDQfile, $!\n"; - } - - if ( (defined $OPT_rport || defined $OPT_qport) && - ($OPT_terminal ne $X11 || $OPT_gpstatus ) ) { - print STDERR - "WARNING: Port options available only for v4.0 X11 plots\n"; - undef $OPT_rport; - undef $OPT_qport; - } - - - if ( defined $OPT_color && defined $OPT_Hfile ) { - print STDERR - "WARNING: Turning off --color option so highlighting is visible\n"; - undef $OPT_color; - } -} diff --git a/tools/MUMmer3.23/nucmer b/tools/MUMmer3.23/nucmer deleted file mode 100755 index b396406..0000000 --- a/tools/MUMmer3.23/nucmer +++ /dev/null @@ -1,394 +0,0 @@ -#!/usr/bin/perl - -#------------------------------------------------------------------------------- -# Programmer: Adam M Phillippy, The Institute for Genomic Research -# File: nucmer -# Date: 04 / 09 / 03 -# -# Usage: -# nucmer [options] -# -# Try 'nucmer -h' for more information. -# -# Purpose: To create alignments between two multi-FASTA inputs by using -# the MUMmer matching and clustering algorithms. -# -#------------------------------------------------------------------------------- - -use lib "/export/home/zqhu/tools/MUMmer3.23/scripts"; -use Foundation; -use File::Spec::Functions; -use strict; - -my $AUX_BIN_DIR = "/export/home/zqhu/tools/MUMmer3.23/aux_bin"; -my $BIN_DIR = "/export/home/zqhu/tools/MUMmer3.23"; -my $SCRIPT_DIR = "/export/home/zqhu/tools/MUMmer3.23/scripts"; - - -my $VERSION_INFO = q~ -NUCmer (NUCleotide MUMmer) version 3.1 - ~; - - -my $HELP_INFO = q~ - USAGE: nucmer [options] - - DESCRIPTION: - nucmer generates nucleotide alignments between two mutli-FASTA input - files. The out.delta output file lists the distance between insertions - and deletions that produce maximal scoring alignments between each - sequence. The show-* utilities know how to read this format. - - MANDATORY: - Reference Set the input reference multi-FASTA filename - Query Set the input query multi-FASTA filename - - OPTIONS: - --mum Use anchor matches that are unique in both the reference - and query - --mumcand Same as --mumreference - --mumreference Use anchor matches that are unique in in the reference - but not necessarily unique in the query (default behavior) - --maxmatch Use all anchor matches regardless of their uniqueness - - -b|breaklen Set the distance an alignment extension will attempt to - extend poor scoring regions before giving up (default 200) - --[no]banded Enforce absolute banding of dynamic programming matrix - based on diagdiff parameter EXPERIMENTAL (default no) - -c|mincluster Sets the minimum length of a cluster of matches (default 65) - --[no]delta Toggle the creation of the delta file (default --delta) - --depend Print the dependency information and exit - -D|diagdiff Set the maximum diagonal difference between two adjacent - anchors in a cluster (default 5) - -d|diagfactor Set the maximum diagonal difference between two adjacent - anchors in a cluster as a differential fraction of the gap - length (default 0.12) - --[no]extend Toggle the cluster extension step (default --extend) - -f - --forward Use only the forward strand of the Query sequences - -g|maxgap Set the maximum gap between two adjacent matches in a - cluster (default 90) - -h - --help Display help information and exit - -l|minmatch Set the minimum length of a single match (default 20) - -o - --coords Automatically generate the original NUCmer1.1 coords - output file using the 'show-coords' program - --[no]optimize Toggle alignment score optimization, i.e. if an alignment - extension reaches the end of a sequence, it will backtrack - to optimize the alignment score instead of terminating the - alignment at the end of the sequence (default --optimize) - -p|prefix Set the prefix of the output files (default "out") - -r - --reverse Use only the reverse complement of the Query sequences - --[no]simplify Simplify alignments by removing shadowed clusters. Turn - this option off if aligning a sequence to itself to look - for repeats (default --simplify) - -V - --version Display the version information and exit - ~; - - -my $USAGE_INFO = q~ - USAGE: nucmer [options] - ~; - - -my @DEPEND_INFO = - ( - "$BIN_DIR/mummer", - "$BIN_DIR/mgaps", - "$BIN_DIR/show-coords", - "$AUX_BIN_DIR/postnuc", - "$AUX_BIN_DIR/prenuc", - "$SCRIPT_DIR/Foundation.pm" - ); - - -my %DEFAULT_PARAMETERS = - ( - "OUTPUT_PREFIX" => "out", # prefix for all output files - "MATCH_ALGORITHM" => "-mumreference", # match finding algo switch - "MATCH_DIRECTION" => "-b", # match direction switch - "MIN_MATCH" => "20", # minimum match size - "MAX_GAP" => "90", # maximum gap between matches - "MIN_CLUSTER" => "65", # minimum cluster size - "DIAG_DIFF" => "5", # diagonal difference absolute - "DIAG_FACTOR" => ".12", # diagonal difference fraction - "BREAK_LEN" => "200", # extension break length - "POST_SWITCHES" => "" # switches for the post processing - ); - - -sub main ( ) -{ - my $tigr; # TIGR::Foundation object - my @err; # Error variable - - my $ref_file; # path of the reference input file - my $qry_file; # path of the query input file - - #-- The command line options for the various programs - my $pfx = $DEFAULT_PARAMETERS { "OUTPUT_PREFIX" }; - my $algo = $DEFAULT_PARAMETERS { "MATCH_ALGORITHM" }; - my $mdir = $DEFAULT_PARAMETERS { "MATCH_DIRECTION" }; - my $size = $DEFAULT_PARAMETERS { "MIN_MATCH" }; - my $gap = $DEFAULT_PARAMETERS { "MAX_GAP" }; - my $clus = $DEFAULT_PARAMETERS { "MIN_CLUSTER" }; - my $ddiff = $DEFAULT_PARAMETERS { "DIAG_DIFF" }; - my $dfrac = $DEFAULT_PARAMETERS { "DIAG_FACTOR" }; - my $blen = $DEFAULT_PARAMETERS { "BREAK_LEN" }; - my $psw = $DEFAULT_PARAMETERS { "POST_SWITCHES" }; - - my $fwd; # if true, use forward strand - my $rev; # if true, use reverse strand - my $maxmatch; # matching algorithm switches - my $mumreference; - my $mum; - my $banded = 0; # if true, enforce absolute dp banding - my $extend = 1; # if true, extend clusters - my $delta = 1; # if true, create the delta file - my $optimize = 1; # if true, optimize alignment scores - my $simplify = 1; # if true, simplify shadowed alignments - - my $generate_coords; - - #-- Initialize TIGR::Foundation - $tigr = new TIGR::Foundation; - if ( !defined ($tigr) ) { - print (STDERR "ERROR: TIGR::Foundation could not be initialized"); - exit (1); - } - - #-- Set help and usage information - $tigr->setHelpInfo ($HELP_INFO); - $tigr->setUsageInfo ($USAGE_INFO); - $tigr->setVersionInfo ($VERSION_INFO); - $tigr->addDependInfo (@DEPEND_INFO); - - #-- Get command line parameters - $err[0] = $tigr->TIGR_GetOptions - ( - "maxmatch" => \$maxmatch, - "mumcand" => \$mumreference, - "mumreference" => \$mumreference, - "mum" => \$mum, - "b|breaklen=i" => \$blen, - "banded!" => \$banded, - "c|mincluster=i" => \$clus, - "delta!" => \$delta, - "D|diagdiff=i" => \$ddiff, - "d|diagfactor=f" => \$dfrac, - "extend!" => \$extend, - "f|forward" => \$fwd, - "g|maxgap=i" => \$gap, - "l|minmatch=i" => \$size, - "o|coords" => \$generate_coords, - "optimize!" => \$optimize, - "p|prefix=s" => \$pfx, - "r|reverse" => \$rev, - "simplify!" => \$simplify - ); - - - #-- Check if the parsing was successful - if ( $err[0] == 0 || $#ARGV != 1 ) { - $tigr->printUsageInfo( ); - print (STDERR "Try '$0 -h' for more information.\n"); - exit (1); - } - - $ref_file = File::Spec->rel2abs ($ARGV[0]); - $qry_file = File::Spec->rel2abs ($ARGV[1]); - - #-- Set up the program parameters - if ( $fwd && $rev ) { - $mdir = "-b"; - } elsif ( $fwd ) { - $mdir = ""; - } elsif ( $rev ) { - $mdir = "-r"; - } - if ( ! $extend ) { - $psw .= "-e "; - } - if ( ! $delta ) { - $psw .= "-d "; - } - if ( ! $optimize ) { - $psw .= "-t "; - } - if ( ! $simplify ) { - $psw .= "-s "; - } - - undef (@err); - $err[0] = 0; - if ( $mum ) { - $err[0] ++; - $algo = "-mum"; - } - if ( $mumreference ) { - $err[0] ++; - $algo = "-mumreference"; - } - if ( $maxmatch ) { - $err[0] ++; - $algo = "-maxmatch"; - } - if ( $err[0] > 1 ) { - $tigr->printUsageInfo( ); - print (STDERR "ERROR: Multiple matching algorithms selected\n"); - print (STDERR "Try '$0 -h' for more information.\n"); - exit (1); - } - - #-- Set up the program path names - my $algo_path = "$BIN_DIR/mummer"; - my $mgaps_path = "$BIN_DIR/mgaps"; - my $prenuc_path = "$AUX_BIN_DIR/prenuc"; - my $postnuc_path = "$AUX_BIN_DIR/postnuc"; - my $showcoords_path = "$BIN_DIR/show-coords"; - - #-- Check that the files needed are all there and readable/writable - { - undef (@err); - if ( !$tigr->isExecutableFile ($algo_path) ) { - push (@err, $algo_path); - } - - if ( !$tigr->isExecutableFile ($mgaps_path) ) { - push (@err, $mgaps_path); - } - - if ( !$tigr->isExecutableFile ($prenuc_path) ) { - push (@err, $prenuc_path); - } - - if ( !$tigr->isExecutableFile ($postnuc_path) ) { - push (@err, $postnuc_path); - } - - if ( !$tigr->isReadableFile ($ref_file) ) { - push (@err, $ref_file); - } - - if ( !$tigr->isReadableFile ($qry_file) ) { - push (@err, $qry_file); - } - - if ( !$tigr->isCreatableFile ("$pfx.ntref") ) { - if ( !$tigr->isWritableFile ("$pfx.ntref") ) { - push (@err, "$pfx.ntref"); - } - } - - if ( !$tigr->isCreatableFile ("$pfx.mgaps") ) { - if ( !$tigr->isWritableFile ("$pfx.mgaps") ) { - push (@err, "$pfx.mgaps"); - } - } - - if ( !$tigr->isCreatableFile ("$pfx.delta") ) { - if ( !$tigr->isWritableFile ("$pfx.delta") ) { - push (@err, "$pfx.delta"); - } - } - - if ( $generate_coords ) { - if ( !$tigr->isExecutableFile ($showcoords_path) ) { - push (@err, $showcoords_path); - } - if ( !$tigr->isCreatableFile ("$pfx.coords") ) { - if ( !$tigr->isWritableFile ("$pfx.coords") ) { - push (@err, "$pfx.coords"); - } - } - } - - #-- If 1 or more files could not be processed, terminate script - if ( $#err >= 0 ) { - $tigr->logError - ("ERROR: The following critical files could not be used", 1); - while ( $#err >= 0 ) { - $tigr->logError (pop(@err), 1); - } - $tigr->logError - ("Check your paths and file permissions and try again", 1); - $tigr->bail( ); - } - } - - - #-- Run prenuc and assert return value is zero - print (STDERR "1: PREPARING DATA\n"); - $err[0] = $tigr->runCommand - ("$prenuc_path $ref_file > $pfx.ntref"); - - if ( $err[0] != 0 ) { - $tigr->bail - ("ERROR: prenuc returned non-zero\n"); - } - - - #-- Run mummer | mgaps and assert return value is zero - print (STDERR "2,3: RUNNING mummer AND CREATING CLUSTERS\n"); - open(ALGO_PIPE, "$algo_path $algo $mdir -l $size -n $pfx.ntref $qry_file |") - or $tigr->bail ("ERROR: could not open $algo_path output pipe $!"); - open(CLUS_PIPE, "| $mgaps_path -l $clus -s $gap -d $ddiff -f $dfrac > $pfx.mgaps") - or $tigr->bail ("ERROR: could not open $mgaps_path input pipe $!"); - while ( ) { - print CLUS_PIPE - or $tigr->bail ("ERROR: could not write to $mgaps_path pipe $!"); - } - $err[0] = close(ALGO_PIPE); - $err[1] = close(CLUS_PIPE); - - if ( $err[0] == 0 || $err[1] == 0 ) { - $tigr->bail ("ERROR: mummer and/or mgaps returned non-zero\n"); - } - - - #-- Run postnuc and assert return value is zero - print (STDERR "4: FINISHING DATA\n"); - if ( $banded ) - { - $err[0] = $tigr->runCommand - ("$postnuc_path $psw -b $blen -B $ddiff $ref_file $qry_file $pfx < $pfx.mgaps"); - } - else - { - $err[0] = $tigr->runCommand - ("$postnuc_path $psw -b $blen $ref_file $qry_file $pfx < $pfx.mgaps"); - } - - if ( $err[0] != 0 ) { - $tigr->bail ("ERROR: postnuc returned non-zero\n"); - } - - #-- If the -o flag was set, run show-coords using NUCmer1.1 settings - if ( $generate_coords ) { - print (STDERR "5: GENERATING COORDS FILE\n"); - $err[0] = $tigr->runCommand - ("$showcoords_path -r $pfx.delta > $pfx.coords"); - - if ( $err[0] != 0 ) { - $tigr->bail ("ERROR: show-coords returned non-zero\n"); - } - } - - #-- Remove the temporary output - $err[0] = unlink ("$pfx.ntref", "$pfx.mgaps"); - - if ( $err[0] != 2 ) { - $tigr->logError ("WARNING: there was a problem deleting". - " the temporary output files", 1); - } - - #-- Return success - return (0); -} - -exit ( main ( ) ); - -#-- END OF SCRIPT diff --git a/tools/MUMmer3.23/nucmer2xfig b/tools/MUMmer3.23/nucmer2xfig deleted file mode 100755 index 7ec16ae..0000000 --- a/tools/MUMmer3.23/nucmer2xfig +++ /dev/null @@ -1,139 +0,0 @@ -#!/usr/bin/perl -# (c) Steven Salzberg 2001 -# Make an xfig plot for a comparison of a reference chromosome (or single -# molecule) versus a multifasta file of contigs from another genome. -# The input file here is a NUCmer coords file such as: -# 2551 2577 | 240 266 | 27 27 | 96.30 | 20302755 1424 | 0.00 1.90 | 2R 1972084 -# generated by running 'show-coords -c -l ' -# For the above example, D. melanogaster chr 2R is the reference and the query -# is an assembly with 1000s of contigs from D. pseudoobscura -# The file needs to be sorted by the smaller contig ids, via: -# tail +6 Dmel2R-vs-Dpseudo.coords | sort -k 19n -k 4n > Dmel2R-vs-Dpseudo-resort.coords -# and remember to get rid of top 5 (header) lines. -# Usage: plot-drosoph-align-xfig.perl Dmel2R-vs-Dpseudo-resort.coords -unless (open(coordsfile,$ARGV[0])) { - die ("can't open file $ARGV[0].\n"); -} -$Xscale = 0.005; -$Yscale = 20; -$chrcolor = 4; # 4 is red, 1 is blue, 2 is green -$green = 2; -$contigcolor = 1; # contigs are blue - -# print header info -print "#FIG 3.2\nLandscape\nCenter\nInches\nLetter \n100.00\nSingle\n-2\n1200 2\n"; -$first_time = 1; -while () { - ($s1,$e1,$x1,$s2,$e2,$x2,$l1,$l2,$x3,$percent_id,$x4,$Rlen,$Qlen,$x5,$Rcov,$Qcov,$x6,$Rid,$Qid) = split(" "); - if ($prevQid eq $Qid) { # query contig is same as prev line - $dist = abs($s1 - $prev_s1); - if ( $dist > 2 * $Qlen) { # if this match is too far away - # print the contig here if the matching bit is > 1000 - if ($right_end{$Qid} - $left_end{$Qid} > 1000) { - # print it at y=50 rather than 100 because the scale is 0-50, - # where 0=50% identical and 50 is 100% identical - print_xfig_line($left_end{$Qid},50,$right_end{$Qid},50,$contigcolor); - print_label($left_end{$Qid},50,$right_end{$Qid},$Qid,5); - } - $left_end{$Qid} = $s1; # then re-set the start and end of the contig - $right_end{$Qid} = $e1; # and we'll print it again later - } - else { # extend the boundaries of the match - if ($s1 < $left_end{$Qid}) { $left_end{$Qid} = $s1; } - if ($e1 > $right_end{$Qid}) { $right_end{$Qid} = $e1; } - } - } - else { # this is a different contig, first time seeing it - $left_end{$Qid} = $s1; - $right_end{$Qid} = $e1; - # print the previous contig as a line at y=100 for 100% - if ($first_time < 1) { - print_xfig_line($left_end{$prevQid},50,$right_end{$prevQid},50,$contigcolor); - print_label($left_end{$prevQid},50,$right_end{$prevQid},$prevQid,5); - } - else { $first_time = 0; } - } - $prevQid = $Qid; - $prev_s1 = $s1; - $prev_Qlen = $Qlen; - # next print the matching bit as a separate line, with a separate color, - # with its height determined by percent match - $Xleft = int($Xscale * $s1); - $Xright = int($Xscale * $e1); - if ($Xleft == $Xright) { $Xright += 1; } - if ($percent_id < 50) { $percent_id = 50; } - print_xfig_line($s1,$percent_id - 50,$e1,$percent_id - 50,$green); -} -# print very last contig -$left_end{$Qid} = $s1; -$right_end{$Qid} = $e1; -print_xfig_line($s1,50,$e1,50,$contigcolor); -print_label($s1,50,$e1,$Qid,5); -close(coordsfile); - -# now draw the horizontal chr line for the reference -$label_xpos = $Xscale * $Rlen; -print "4 0 0 100 0 0 12 0.0000 4 135 405 "; -printf("%.0f %.0f",$label_xpos, 0); -print " ", $Rid, "\\001\n"; -print "2 1 0 2 $chrcolor 7 100 0 -1 0.000 0 0 -1 0 0 2\n"; -printf("\t %.0f %.0f %.0f %.0f\n", 0, 0, - $Xscale * $Rlen, 0); -# print some X-axis coordinates -$pointsize = 5; -for ($i = 250000; $i < $Rlen - 50000; $i+= 250000) { - print "4 0 0 100 0 0 $pointsize 0.0000 4 135 405 "; - printf("%.0f %.0f",$i * $Xscale + 20, -20 + ($Yscale * -0.5)); - print " $i", "\\001\n"; - #print a vertical tic mark - print "2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2\n"; - printf("%.0f %.0f %.0f -50\n", - $i * $Xscale, 0, $i * $Xscale); -} -# print tic marks indicating % identity on the y-axis -for ($percent_id = 50; $percent_id < 101; $percent_id += 10) { - print "4 0 0 100 0 0 $pointsize 0.0000 4 135 405 "; - printf("-150 %.0f", ($percent_id - 50) * $Yscale + 10); # shift down 10 pixels - print " $percent_id", "\\001\n"; - # print the tic mark - print "2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 2\n"; - printf("-50 %.0f 0 %.0f\n", - ($percent_id - 50) * $Yscale, ($percent_id - 50) * $Yscale); -} - -# print a line in the appropriate color, scaled with Xscale,Yscale -sub print_xfig_line { - my ($xleft,$yleft,$xright,$yright,$color) = @_; - # print it at the given coordinates, scaled - $xleft_scaled = int($Xscale * $xleft); - $xright_scaled = int($Xscale * $xright); - # Xfig has a bug: if we re-scale and the resulting X coordinates are equal, - # then it will print a fixed-size (large) rectangle, rather than a 1-pixel - # wide one. So check fo this and correct. - if ($xleft_scaled == $xright_scaled) { $xright_scaled += 1; } - # set up and print line in xfig format - print "2 1 0 2 $color 7 100 0 -1 0.000 0 0 -1 0 0 2\n"; - printf("\t %.0f %.0f %.0f %.0f\n", - $xleft_scaled, $Yscale * $yleft, $xright_scaled, $Yscale * $yright); -} - -# print a label for each contig using its ID -sub print_label { - my ($xleft,$yleft,$xright,$id,$psize) = @_; - # print it at the left edge of the contig. The angle - # of 4.7124 means text goes down vertically. 5th argument - # here is pointsize of the label. - # bump the label down 20 pixels - $yposition = $yleft * $Yscale + 20; - # to keep the display clean, don't print the label unless the - # contig itself is wider than the width of the text in the label - $xleft_scaled = $xleft * $Xscale; - $xright_scaled = $xright * $Xscale; - # each point of type is 8 pixels - $textheight = $psize * 8; - if ($xright_scaled - $xleft_scaled > $textheight) { - print "4 0 0 50 0 0 $psize 4.7124 4 135 435 "; - printf("%.0f %.0f",$xleft_scaled, $yposition); - print " $id", "\\001\n"; - } -} diff --git a/tools/MUMmer3.23/promer b/tools/MUMmer3.23/promer deleted file mode 100755 index d317dd3..0000000 --- a/tools/MUMmer3.23/promer +++ /dev/null @@ -1,382 +0,0 @@ -#!/usr/bin/perl - -#------------------------------------------------------------------------------- -# Programmer: Adam M Phillippy, The Institute for Genomic Research -# File: promer -# Date: 04 / 09 / 03 -# -# Usage: -# promer [options] -# -# Try 'promer -h' for more information. -# -# Purpose: To create alignments between two multi-FASTA inputs by using -# the MUMmer matching and clustering algorithms. -# -#------------------------------------------------------------------------------- - -use lib "/export/home/zqhu/tools/MUMmer3.23/scripts"; -use Foundation; -use File::Spec::Functions; -use strict; - -my $AUX_BIN_DIR = "/export/home/zqhu/tools/MUMmer3.23/aux_bin"; -my $BIN_DIR = "/export/home/zqhu/tools/MUMmer3.23"; -my $SCRIPT_DIR = "/export/home/zqhu/tools/MUMmer3.23/scripts"; - - - -my $VERSION_INFO = q~ -PROmer (PROtein MUMmer) version 3.07 - ~; - - - -my $HELP_INFO = q~ - USAGE: promer [options] - - DESCRIPTION: - promer generates amino acid alignments between two mutli-FASTA DNA input - files. The out.delta output file lists the distance between insertions - and deletions that produce maximal scoring alignments between each - sequence. The show-* utilities know how to read this format. The DNA - input is translated into all 6 reading frames in order to generate the - output, but the output coordinates reference the original DNA input. - - MANDATORY: - Reference Set the input reference multi-FASTA DNA file - Query Set the input query multi-FASTA DNA file - - OPTIONS: - --mum Use anchor matches that are unique in both the reference - and query - --mumcand Same as --mumreference - --mumreference Use anchor matches that are unique in in the reference - but not necessarily unique in the query (default behavior) - --maxmatch Use all anchor matches regardless of their uniqueness - - -b|breaklen Set the distance an alignment extension will attempt to - extend poor scoring regions before giving up, measured in - amino acids (default 60) - -c|mincluster Sets the minimum length of a cluster of matches, measured in - amino acids (default 20) - --[no]delta Toggle the creation of the delta file (default --delta) - --depend Print the dependency information and exit - -d|diagfactor Set the clustering diagonal difference separation factor - (default .11) - --[no]extend Toggle the cluster extension step (default --extend) - -g|maxgap Set the maximum gap between two adjacent matches in a - cluster, measured in amino acids (default 30) - -h - --help Display help information and exit. - -l|minmatch Set the minimum length of a single match, measured in amino - acids (default 6) - -m|masklen Set the maximum bookend masking lenth, measured in amino - acids (default 8) - -o - --coords Automatically generate the original PROmer1.1 ".coords" - output file using the "show-coords" program - --[no]optimize Toggle alignment score optimization, i.e. if an alignment - extension reaches the end of a sequence, it will backtrack - to optimize the alignment score instead of terminating the - alignment at the end of the sequence (default --optimize) - - -p|prefix Set the prefix of the output files (default "out") - -V - --version Display the version information and exit - -x|matrix Set the alignment matrix number to 1 [BLOSUM 45], 2 [BLOSUM - 62] or 3 [BLOSUM 80] (default 2) - ~; - - -my $USAGE_INFO = q~ - USAGE: promer [options] - ~; - - -my @DEPEND_INFO = - ( - "$BIN_DIR/mummer", - "$BIN_DIR/mgaps", - "$BIN_DIR/show-coords", - "$AUX_BIN_DIR/postpro", - "$AUX_BIN_DIR/prepro", - "$SCRIPT_DIR/Foundation.pm" - ); - - -my %DEFAULT_PARAMETERS = - ( - "OUTPUT_PREFIX" => "out", # prefix for all output files - "MATCH_ALGORITHM" => "-mumreference", # match finding algo switch - "MIN_MATCH" => "6", # minimum match size (aminos) - "MAX_GAP" => "30", # maximum gap between matches (aminos) - "MIN_CLUSTER" => "20", # minimum cluster size (aminos) - "DIAG_FACTOR" => ".11", # diagonal difference fraction - "BREAK_LEN" => "60", # extension break length - "BLOSUM_NUMBER" => "2", # options are 1,2,3 (BLOSUM 45,62,80) - "MASKING_LENGTH" => "8", # set bookend masking length - "POST_SWITCHES" => "" # switches for the post processing - ); - - -sub main ( ) -{ - my $tigr; # TIGR::Foundation object - my @err; # Error variable - - my $ref_file; # path of the reference input file - my $qry_file; # path of the query input file - - #-- The command line options for the various programs - my $pfx = $DEFAULT_PARAMETERS { "OUTPUT_PREFIX" }; - my $algo = $DEFAULT_PARAMETERS { "MATCH_ALGORITHM" }; - my $size = $DEFAULT_PARAMETERS { "MIN_MATCH" }; - my $gap = $DEFAULT_PARAMETERS { "MAX_GAP" }; - my $clus = $DEFAULT_PARAMETERS { "MIN_CLUSTER" }; - my $diff = $DEFAULT_PARAMETERS { "DIAG_FACTOR" }; - my $blen = $DEFAULT_PARAMETERS { "BREAK_LEN" }; - my $blsm = $DEFAULT_PARAMETERS { "BLOSUM_NUMBER" }; - my $mask = $DEFAULT_PARAMETERS { "MASKING_LENGTH" }; - my $psw = $DEFAULT_PARAMETERS { "POST_SWITCHES" }; - - my $maxmatch; # matching algorithm switches - my $mumreference; - my $mum; - my $extend = 1; # if true, extend clusters - my $delta = 1; # if true, create the delta file - my $optimize = 1; # if true, optimize alignment scores - - my $generate_coords; - - #-- Initialize TIGR::Foundation - $tigr = new TIGR::Foundation; - if ( !defined ($tigr) ) { - print (STDERR "ERROR: TIGR::Foundation could not be initialized"); - exit (1); - } - - #-- Set help and usage information - $tigr->setHelpInfo ($HELP_INFO); - $tigr->setUsageInfo ($USAGE_INFO); - $tigr->setVersionInfo ($VERSION_INFO); - $tigr->addDependInfo (@DEPEND_INFO); - - #-- Get command line parameters - $err[0] = $tigr->TIGR_GetOptions - ( - "maxmatch" => \$maxmatch, - "mumcand" => \$mumreference, - "mumreference" => \$mumreference, - "mum" => \$mum, - "b|breaklen=i" => \$blen, - "c|mincluster=i" => \$clus, - "delta!" => \$delta, - "d|diagfactor=f" => \$diff, - "extend!" => \$extend, - "g|maxgap=i" => \$gap, - "l|minmatch=i" => \$size, - "m|masklen=i" => \$mask, - "o|coords" => \$generate_coords, - "optimize!" => \$optimize, - "p|prefix=s" => \$pfx, - "x|matrix=i" => \$blsm - ); - - #-- Check if the parsing was successful - if ( $err[0] == 0 || $#ARGV != 1 ) { - $tigr->printUsageInfo( ); - print (STDERR "Try '$0 -h' for more information.\n"); - exit (1); - } - - $ref_file = File::Spec->rel2abs ($ARGV[0]); - $qry_file = File::Spec->rel2abs ($ARGV[1]); - - #-- Set up the program parameters - if ( ! $extend ) { - $psw .= "-e "; - } - if ( ! $delta ) { - $psw .= "-d "; - } - if ( ! $optimize ) { - $psw .= "-t "; - } - - undef (@err); - $err[0] = 0; - if ( $mum ) { - $err[0] ++; - $algo = "-mum"; - } - if ( $mumreference ) { - $err[0] ++; - $algo = "-mumreference"; - } - if ( $maxmatch ) { - $err[0] ++; - $algo = "-maxmatch"; - } - if ( $err[0] > 1 ) { - $tigr->printUsageInfo( ); - print (STDERR "ERROR: Multiple matching algorithms selected\n"); - print (STDERR "Try '$0 -h' for more information.\n"); - exit (1); - } - - #-- Set up the program path names - my $algo_path = "$BIN_DIR/mummer"; - my $mgaps_path = "$BIN_DIR/mgaps"; - my $prepro_path = "$AUX_BIN_DIR/prepro"; - my $postpro_path = "$AUX_BIN_DIR/postpro"; - my $showcoords_path = "$BIN_DIR/show-coords"; - - #-- Check that the files needed are all there and readable/writable - { - undef (@err); - if ( !$tigr->isExecutableFile ($algo_path) ) { - push (@err, $algo_path); - } - - if ( !$tigr->isExecutableFile ($mgaps_path) ) { - push (@err, $mgaps_path); - } - - if ( !$tigr->isExecutableFile ($prepro_path) ) { - push (@err, $prepro_path); - } - - if ( !$tigr->isExecutableFile ($postpro_path) ) { - push (@err, $postpro_path); - } - - if ( !$tigr->isReadableFile ($ref_file) ) { - push (@err, $ref_file); - } - - if ( !$tigr->isReadableFile ($qry_file) ) { - push (@err, $qry_file); - } - - if ( !$tigr->isCreatableFile ("$pfx.aaref") ) { - if ( !$tigr->isWritableFile ("$pfx.aaref") ) { - push (@err, "$pfx.aaref"); - } - } - - if ( !$tigr->isCreatableFile ("$pfx.aaqry") ) { - if ( !$tigr->isWritableFile ("$pfx.aaqry") ) { - push (@err, "$pfx.aaqry"); - } - } - - if ( !$tigr->isCreatableFile ("$pfx.mgaps") ) { - if ( !$tigr->isWritableFile ("$pfx.mgaps") ) { - push (@err, "$pfx.mgaps"); - } - } - - if ( !$tigr->isCreatableFile ("$pfx.delta") ) { - if ( !$tigr->isWritableFile ("$pfx.delta") ) { - push (@err, "$pfx.delta"); - } - } - - if ( $generate_coords ) { - if ( !$tigr->isExecutableFile ($showcoords_path) ) { - push (@err, $showcoords_path); - } - if ( !$tigr->isCreatableFile ("$pfx.coords") ) { - if ( !$tigr->isWritableFile ("$pfx.coords") ) { - push (@err, "$pfx.coords"); - } - } - } - - #-- If 1 or more files could not be processed, terminate script - if ( $#err >= 0 ) { - $tigr->logError - ("ERROR: The following critical files could not be used", 1); - while ( $#err >= 0 ) { - $tigr->logError (pop(@err), 1); - } - $tigr->logError - ("Check your paths and file permissions and try again", 1); - $tigr->bail( ); - } - } - - - #-- Run prepro -r and -q and assert return value is zero - print (STDERR "1: PREPARING DATA\n"); - $err[0] = $tigr->runCommand - ("$prepro_path -m $mask -r $ref_file > $pfx.aaref"); - - if ( $err[0] != 0 ) { - $tigr->bail - ("ERROR: prepro -r returned non-zero\n"); - } - - $err[0] = $tigr->runCommand - ("$prepro_path -m $mask -q $qry_file > $pfx.aaqry"); - - if ( $err[0] != 0 ) { - $tigr->bail ("ERROR: prepro -q returned non-zero\n"); - } - - - #-- Run mummer | mgaps and assert return value is zero - print (STDERR "2,3: RUNNING mummer AND CREATING CLUSTERS\n"); - open(ALGO_PIPE, "$algo_path $algo -l $size $pfx.aaref $pfx.aaqry |") - or $tigr->bail ("ERROR: could not open $algo_path output pipe $!"); - open(CLUS_PIPE, "| $mgaps_path -l $clus -s $gap -f $diff > $pfx.mgaps") - or $tigr->bail ("ERROR: could not open $mgaps_path input pipe $!"); - while ( ) { - print CLUS_PIPE - or $tigr->bail ("ERROR: could not write to $mgaps_path pipe $!"); - } - $err[0] = close(ALGO_PIPE); - $err[1] = close(CLUS_PIPE); - - if ( $err[0] == 0 || $err[1] == 0 ) { - $tigr->bail ("ERROR: mummer and/or mgaps returned non-zero\n"); - } - - - #-- Run postpro and assert return value is zero - print (STDERR "4: FINISHING DATA\n"); - $err[0] = $tigr->runCommand - ("$postpro_path $psw -x $blsm -b $blen ". - "$ref_file $qry_file $pfx < $pfx.mgaps"); - - if ( $err[0] != 0 ) { - $tigr->bail ("ERROR: postpro returned non-zero\n"); - } - - #-- If the -o flag was set, run show-coords using PROmer1.1 settings - if ( $generate_coords ) { - print (STDERR "5: GENERATING COORDS FILE\n"); - $err[0] = $tigr->runCommand - ("$showcoords_path -r $pfx.delta > $pfx.coords"); - - if ( $err[0] != 0 ) { - $tigr->bail ("ERROR: show-coords returned non-zero\n"); - } - } - - #-- Remove the temporary output - $err[0] = unlink ("$pfx.aaref", "$pfx.aaqry", "$pfx.mgaps"); - - if ( $err[0] != 3 ) { - $tigr->logError ("WARNING: there was a problem deleting". - " the temporary output files", 1); - } - - #-- Return success - return (0); -} - -exit ( main ( ) ); - -#-- END OF SCRIPT diff --git a/tools/MUMmer3.23/repeat-match b/tools/MUMmer3.23/repeat-match deleted file mode 100755 index 9316a6e7b19fbc835262d5ea4c250d94b7883dce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35649 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 YS78iHVXVT18Ab;=2!)%mcp*gj-?nEFk^lez diff --git a/tools/MUMmer3.23/run-mummer1 b/tools/MUMmer3.23/run-mummer1 deleted file mode 100755 index 084a5e5..0000000 --- a/tools/MUMmer3.23/run-mummer1 +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/csh -f -# -# **SEVERELY** antiquated script for running the mummer 1 suite -# -r option reverse complements the query sequence, coordinates of the reverse -# matches will be relative to the reversed sequence -# - -set ref = $1 -set qry = $2 -set pfx = $3 -set rev = $4 - -set bindir = /export/home/zqhu/tools/MUMmer3.23 - -if($ref == '' || $qry == '' || $pfx == '') then - echo "USAGE: $0 [-r]" - exit(-1) -endif - -echo "Find MUMs" -$bindir/mummer -mum -l 20 $rev $ref $qry | tail +2 > $pfx.out -echo "Determine gaps" -$bindir/gaps $ref $rev < $pfx.out > $pfx.gaps -echo "Align gaps" -$bindir/annotate $pfx.gaps $qry > $pfx.align -mv witherrors.gaps $pfx.errorsgaps diff --git a/tools/MUMmer3.23/run-mummer3 b/tools/MUMmer3.23/run-mummer3 deleted file mode 100755 index a80ce95..0000000 --- a/tools/MUMmer3.23/run-mummer3 +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/csh -f -# -# for running the basic mummer 3 suite, should use nucmer instead when possible -# to avoid the confusing reverse coordinate system of the raw programs. -# -# NOTE: be warned that all reverse matches will then -# be relative to the reverse complement of the query sequence. -# -# Edit this script as necessary to alter the matching and clustering values -# - -set ref = $1 -set qry = $2 -set pfx = $3 - -set bindir = /export/home/zqhu/tools/MUMmer3.23 - -if($ref == '' || $qry == '' || $pfx == '') then - echo "USAGE: $0 " - exit(-1) -endif - -echo "Find MUMs" -$bindir/mummer -mumreference -b -l 20 $ref $qry > $pfx.out -echo "Determine gaps" -$bindir/mgaps -l 100 -f .12 -s 600 < $pfx.out > $pfx.gaps -echo "Align gaps" -$bindir/combineMUMs -x -e .10 -W $pfx.errorsgaps $ref $qry $pfx.gaps > $pfx.align diff --git a/tools/MUMmer3.23/show-aligns b/tools/MUMmer3.23/show-aligns deleted file mode 100755 index fbb9c3d313bfce8e09b83c3b683f26301715d45c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 116325 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

ttdVJl5rrj-Y-}tbbv!#Fk4v-T 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 diff --git a/tools/MUMmer3.23/src/kurtz/streesrc/overmax.o b/tools/MUMmer3.23/src/kurtz/streesrc/overmax.o deleted file mode 100644 index 6e83182ff219aa8c3cec1b9c70d01260b707ee27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2280 zcmbVNO>7%Q6dwO1aZ_hwkPi{Hls#BrOJrrIky{uKn_o}^QBvdHe!6O+dk^N&=n z`M1JOBqIt_ld=BhkHA%}S7SxrsFc zOX~);P9+m6`>n+JGP{?zC;bD@rkGzuF`Ky^IR6s{np*+ImUE$TJK5w_L7>e3 z@zi!J+iJB|aBa7q0p&sKrXHt5Dym-)+Jf&E%w>-5{( zV@vUO&R-p8f3gjQ-KDMXRLfoj=JrRW6>B15hl`4xShkKwtkI}qZpH&&rLS#&2rZEb z;Z5CCtUd@KYxw%)33z>u$6yQ1wFeq(oKe&Dp~LeF^Hr@eSJf)wTwR=)RMlQWj*N~z zE2fT2Os2&VX+%084rj8%nf=-QV(OSaD=M1N#)n4IB#slq2)uQS1RAlxzGzQm1@b6> zB^(bSdoXWah+Pimg@H?w=?%-;#kfNSwy4Q^(QvJ=Up`8P1)Y`Jl zwVGbhBtvf)M4HtMjY#L}bt2Uk&_H@t$`Wa2p<31Ffik~f=n^z%sBUO8uK^FE_41ig zO{?lW+apU6BC%cFz8P|^eFvSM5%cJ%?t>@n!_a&&(gx4A1;M`HR4z;gT>MEF_goW> zClhoDKH<;xH287OM~%-yEY>v)k9Y9=xIXXT?cg#8PSi7A66iDZh;Tit= z(e~Gl^lR>ce8CNf0=5Spe}2R|LcsK+d`D zgdcbapDetg*WikmW*kkcRGgci!+7(zfx0oP*J`A6p*CmeL~qO)n2ua`>%udEXYOD4 pMdJ9z#o>3ct7|`d_;^M*|F#Fm9~8$$&~f1W-g8%R&>fuj=Rdp>J{Qc<0v6-oK-tiHbbO^G!gmAu=!dZlSgCbyD`PwxEv`;iup^vy;UlemXzg> z-n&nMt}MSbRBwBTM3;98r{tfn01Fw5725eB^M_(?M$Fx)xl`Iuiv6B}V&@uA7dEa< z$`kUWJoVDsehbU~FQV|CCC_g#YV5_9bI3L8ixx9(Ou4!J*xO#4hf{{kUAgoLiQh&+ zKI%o`6AvL31iE1_}GC!`V*+g1YH7dq)Mq12glQcDxrO75j2K)QZ zi2lKgV;y3z)GM79y92@QKu@qo^pDV_sHjE-@9OO!XZ_RA^mwg$41xJ0ke+HAIBKodeEGO@dz*#IVo`oUq_g4q=?6FJufg z4!xmO`ZTvRI;TnoEf_>fs)kCWxULgP%b|nxpwvgCL@tw|S)gQd29;noUAmzrW`T#% zG<`j#sTs-??!OZu6sLEyi4+dsZfxPKVS<2im9F#FmAM5bB&G&+`M z*N?tkJJLPuK=!eKX21?2j)Ty6eZ=b34>A2xnO*(Z>sLo=E#$e$_fjod@mzIx40Y5~ zf_S|ZM!cb3dcc`@+o)@A_O%19ziuxfxL!vrI{7`u`)a?#nCv{SE6C@-B diff --git a/tools/MUMmer3.23/src/kurtz/streesrc/scanpref.o b/tools/MUMmer3.23/src/kurtz/streesrc/scanpref.o deleted file mode 100644 index 2012203557631879cf55b995c7b349704109dd74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7504 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 I|L#=(UsATYP5=M^ diff --git a/tools/MUMmer3.23/src/tigr/sw_align.o b/tools/MUMmer3.23/src/tigr/sw_align.o deleted file mode 100644 index 60354ef63db6784f846880f5caeff9fad06f0e61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20992 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 LfFB{`JWBrqUu|7p diff --git a/tools/MUMmer3.23/src/tigr/tigrinc.o b/tools/MUMmer3.23/src/tigr/tigrinc.o deleted file mode 100644 index 85b90c73b093dbb1e366395a1d5b9626d5992b8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12064 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 diff --git a/tools/MUMmer3.23/src/tigr/translate.o b/tools/MUMmer3.23/src/tigr/translate.o deleted file mode 100644 index 8b1ff050d61a197af4a55921c0ba6c5c3afa1754..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8488 zcmeHM-)~b@9KT%$Ou%*`iHk&cqeaJrW`h|9M6=tq+a0?!Tg%2_g7wmMKV)l3SH=Jn zH3f0Z;$BR6(Lcb%#21V)1|=#czUq??N(?a&NQjA=DX{we+@8Zu&)Pun!3_Id&pqGo z=X}54bI#|Sd)l169@oU{J}Z}U8M}?? zANtJcKg{emuBbVE)0)0vX0O*>fwvW(Gjc&+-kcuu)$Giz-I1NE@}8=vo_57ATe)NN z-MM}1^IhA1_GaH8_aVQx{siK*iy=)jXI}HwIBCqYX7=m4m-ZX`jQz&TM(nFu&mji2x&eEAKt=K52lftlUAjHGOTS+G)(rxhLP{ucKgU_3Uvo(T6n_w{Nc0a%)@Z{Y$H9+gP<>98s{(3(;3>;$$UOPG+Wxw z@%Yq3zSrIy^4142r;_GXZdcK-+oC(KKmDOc5^>2;J91dyPwvDH?m3`AYotJM%5=x4_@kB)NI(?}5Md0K?++VFI)dM9F zy!`ZeU?so;n49x>U?*9bSUCm;*Z{+)BKO9Cg~N|N6{#>#VW7f5g@FnK6$X|r1Gulk zJ(su>#~l~$t8jOP`z+jR;l2y^W4If`eHiYxaIb|sIIXk2eY@V!8SdMlxAP0JL?hSJce9Owx3iBp+Z<0Z;9_ zRRK@k8F#>==c+qA4eu-qdYax^ZhBg?D|UK%sv;{rt%j$`@HCJIc~V5cQxl+3`X`Q# zXY2!1XVQgwL}=;6nC;IbrZSp;(9YPJ|G>nA=1-?!z`fbuDoo8EPmPZ!lH{69WfFdx z=cb8_9Y078$dVX|4W;ezgfr%U^Ux_6YXIJ5Y2${&htyCj=}^~E!8)l@`(y#R0zOHw zhUf=t3=!+`4C%m~1SxyyL*d`aeRtx^`%v9)q=&&fr6ZmgX(H zMO=*jxz!Vo#zwVRY Date: Thu, 10 Oct 2019 19:01:45 +0800 Subject: [PATCH 05/45] Update Makefile --- src/perl/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/perl/Makefile b/src/perl/Makefile index e1cedb0..0fb9e54 100644 --- a/src/perl/Makefile +++ b/src/perl/Makefile @@ -14,7 +14,7 @@ install: clean: @rm ${BINDIR}/hupan;\ - rm ${BINDIR}/hupanSLF;\ + rm ${BINDIR}/hupanLSF;\ rm ${BINDIR}/hupanSLURM;\ rm ${BINDIR}/adjCdhit.pl;\ rm ${BINDIR}/blastCluster.pl;\ From f6da1d14b103e6d82d88e98b0357d506c683ed9e Mon Sep 17 00:00:00 2001 From: Zhongqu Duan Date: Thu, 10 Oct 2019 19:08:55 +0800 Subject: [PATCH 06/45] Update Makefile --- src/bam2cov/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bam2cov/Makefile b/src/bam2cov/Makefile index f2cbe64..95d710c 100644 --- a/src/bam2cov/Makefile +++ b/src/bam2cov/Makefile @@ -1,6 +1,6 @@ ../../bin/bam2cov: - g++ -O2 -o ../../bin/bam2cov bam2cov.cpp -lbamtools -L ../../lib/ -I ../../lib/include/ + g++ -O2 -o ../../bin/bam2cov bam2cov.cpp -lbamtools -L ../../lib/ -I ../../lib/include/ -D_GLIBCXX_USE_CXX11_ABI=0 clean: rm ../../bin/bam2cov debug: - g++ -g -O2 -o ../../bin/bam2cov bam2cov.cpp -lbamtools -L ../../lib/ -I ../../lib/include/ + g++ -g -O2 -o ../../bin/bam2cov bam2cov.cpp -lbamtools -L ../../lib/ -I ../../lib/include/ -D_GLIBCXX_USE_CXX11_ABI=0 From 522b75ae345d0d583b78ecc84acc68c558c939d8 Mon Sep 17 00:00:00 2001 From: Zhongqu Duan Date: Thu, 10 Oct 2019 19:09:32 +0800 Subject: [PATCH 07/45] Update Makefile --- src/ccov/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ccov/Makefile b/src/ccov/Makefile index ef7f6ee..b0d7b5f 100644 --- a/src/ccov/Makefile +++ b/src/ccov/Makefile @@ -1,6 +1,6 @@ ../../bin/ccov: - g++ -O2 -o ../../bin/ccov CCOV.cpp GTF.cpp -lz -lbamtools -L ../../lib/ -I ../../lib/include/ + g++ -O2 -o ../../bin/ccov CCOV.cpp GTF.cpp -lz -lbamtools -L ../../lib/ -I ../../lib/include/ -D_GLIBCXX_USE_CXX11_ABI=0 clean: rm ../../bin/ccov debug: - g++ -g -o ../../bin/ccov CCOV.cpp GTF.cpp -lz -lbamtools -L ../../lib/ -I ../../lib/include/ + g++ -g -o ../../bin/ccov CCOV.cpp GTF.cpp -lz -lbamtools -L ../../lib/ -I ../../lib/include/ -D_GLIBCXX_USE_CXX11_ABI=0 From 0ced5935127630e5b9c83243dd79d0faa7180162 Mon Sep 17 00:00:00 2001 From: Zhongqu Duan Date: Thu, 10 Oct 2019 19:19:47 +0800 Subject: [PATCH 08/45] Update README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 3feb741..fd4b128 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,10 @@ The human reference genome is still incomplete, especially for those population-specific or individual-specific regions, which may have important functions. It encourages us to build the pan-genome of human population. Previously, our team developed a "map-to-pan" strategy, [EUPAN][1], specific for eukaryotic pan-genome analysis. However, due to the large genome size of individual human genome, [EUPAN][2] is not suit for pan-genome analysis involving in hundreds of individual genomes. Here, we present an improved tool, HUPAN (Human Pan-genome Analysis), for human pan-genome analysis. +The HUPAN hompage is http://cgm.sjtu.edu.cn/hupan/ + +The HUPAN paper is available at https://genomebiology.biomedcentral.com/articles/10.1186/s13059-019-1751-y + **2. Installation** **Requirements** From f424acf4039ed892e991f203bf181e6b34683747 Mon Sep 17 00:00:00 2001 From: Zhongqu Duan Date: Thu, 10 Oct 2019 19:30:31 +0800 Subject: [PATCH 09/45] Update Makefile --- src/R/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/R/Makefile b/src/R/Makefile index 8260234..695eb75 100644 --- a/src/R/Makefile +++ b/src/R/Makefile @@ -1,6 +1,6 @@ export BINDIR = ../../bin install: - @cp plotNovelSeq.R ${BINDIR};\ + @cp pav_plot.R ${BINDIR};\ cp plotNovelSeq.R ${BINDIR};\ cp plotQual.R ${BINDIR} From 9385b2cb9aeceb4853e24d8ade6978e36cb1978e Mon Sep 17 00:00:00 2001 From: Zhongqu Duan Date: Tue, 5 Nov 2019 08:54:44 +0800 Subject: [PATCH 10/45] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fd4b128..f1c84ab 100644 --- a/README.md +++ b/README.md @@ -151,7 +151,7 @@ Please note that this startegy requires huge memory for assembly an individual h ii.Assembly by the iterative use of SOAPDenovo2. Not Recommend. - hupanSLURM linearK data assembly_linearK/ /path/to/SOAPDenovo2 + hupanSLURM assemble linearK data assembly_linearK/ /path/to/SOAPDenovo2 iii. Assembly by [SGA][11]. From 74c71129a050fc20531c5f8a7f59f2e47af9e96f Mon Sep 17 00:00:00 2001 From: Zhongqu Duan Date: Thu, 7 Nov 2019 09:42:37 +0800 Subject: [PATCH 11/45] Update HUPANassem.pm --- lib/HUPANassem.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/HUPANassem.pm b/lib/HUPANassem.pm index f17cc03..dda0260 100644 --- a/lib/HUPANassem.pm +++ b/lib/HUPANassem.pm @@ -397,7 +397,7 @@ use warnings; use Cwd 'abs_path'; use Getopt::Std; use vars qw($opt_h $opt_t $opt_d $opt_m); -getopts("ht:d:m"); +getopts("ht:d:m:"); my $usage="\nUsage: hupan assemble sga [options] From 4695ffa132228fcbe6452886e64d7e816c3e6877 Mon Sep 17 00:00:00 2001 From: Zhongqu Duan Date: Thu, 14 Nov 2019 10:00:50 +0800 Subject: [PATCH 12/45] Update getUnalnCtg.pl --- src/perl/getUnalnCtg.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/perl/getUnalnCtg.pl b/src/perl/getUnalnCtg.pl index a19fcbc..35cb7d8 100755 --- a/src/perl/getUnalnCtg.pl +++ b/src/perl/getUnalnCtg.pl @@ -33,7 +33,7 @@ "; -die $usage if @ARGV!=4; +die $usage if @ARGV!=5; die $usage if defined($opt_h); my ($contig_file,$info_file,$coords_file,$output_prefix,$prefix)=@ARGV; From c2a4aaab2235ec3d71b75f6e05a7fdfbe28efddc Mon Sep 17 00:00:00 2001 From: Zhongqu Duan Date: Thu, 14 Nov 2019 10:42:02 +0800 Subject: [PATCH 13/45] Update README.md --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index f1c84ab..a1fec7d 100644 --- a/README.md +++ b/README.md @@ -177,9 +177,7 @@ iv. Two types of non-reference sequences, fully unaligned sequences and partiall hupanSLURM getUnalnCtg -p .contig candidate/data/ quast_result/data/ Unalign_result -v. Non-reference sequences from multiple individuals are merged: - - hupanSLURM mergeUnalnCtg Unalign_result/data/ mergeUnalnCtg_result +v. Non-reference sequences from multiple individuals are merged and avaivable in the Unalign_result/total. **(5) Remove redundancy and potential commination sequences** From f688d80e2db1032466fc8848f126942d742f7607 Mon Sep 17 00:00:00 2001 From: Zhongqu Duan Date: Thu, 14 Nov 2019 10:52:10 +0800 Subject: [PATCH 14/45] Update README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a1fec7d..b4e126b 100644 --- a/README.md +++ b/README.md @@ -177,8 +177,10 @@ iv. Two types of non-reference sequences, fully unaligned sequences and partiall hupanSLURM getUnalnCtg -p .contig candidate/data/ quast_result/data/ Unalign_result -v. Non-reference sequences from multiple individuals are merged and avaivable in the Unalign_result/total. +v. Non-reference sequences from multiple individuals are merged: + hupanSLURM mergeUnalnCtg Unalign_result/data/ mergeUnalnCtg_result + **(5) Remove redundancy and potential commination sequences** After obtaining the non-reference sequences from multiple individuals, redundant sequences between different individuals should be excluded, and the potential commination sequences from non-human species are also removed for further analysis. From c3fbdd105fb73f02a13e9d69d41f0eacbcbdec5c Mon Sep 17 00:00:00 2001 From: Zhongqu Duan Date: Thu, 14 Nov 2019 11:09:09 +0800 Subject: [PATCH 15/45] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b4e126b..2d19d2e 100644 --- a/README.md +++ b/README.md @@ -196,8 +196,8 @@ ii. Then the non-redundant sequences are aligned to NCBI’s non-redundant nucle iii. According to the alignment result, the taxonomic classification of each sequences (if have) could be obtained: - hupanSLURM getTaxClass rmRedundant_blast/ data/fully/fully.non-redundant.blast info/ TaxClass_fully - hupanSLURM getTaxClass rmRedundant_blast/ data/partially/partially.non-redundant.blast info/ TaxClass_partially + hupanSLURM getTaxClass rmRedundant_blast/data/fully/fully.non-redundant.blast info/ TaxClass_fully + hupanSLURM getTaxClass rmRedundant_blast/data/partially/partially.non-redundant.blast info/ TaxClass_partially iv. And the sequences classifying as microbiology and non-primate eukaryotes are considered as non-human sequences and removed from further consideration: From d3ff7706b1767723784519d99111dc867d34b0c7 Mon Sep 17 00:00:00 2001 From: Zhongqu Duan Date: Thu, 14 Nov 2019 13:01:44 +0800 Subject: [PATCH 16/45] Update README.md --- README.md | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 2d19d2e..1fda666 100644 --- a/README.md +++ b/README.md @@ -181,6 +181,11 @@ v. Non-reference sequences from multiple individuals are merged: hupanSLURM mergeUnalnCtg Unalign_result/data/ mergeUnalnCtg_result + Alternatively, if you conducted step iv by `hupan`, you can find the merge result in the Unalign_result/total: + + mv Unalign_result/total/ mergeUnalnCtg_result + + **(5) Remove redundancy and potential commination sequences** After obtaining the non-reference sequences from multiple individuals, redundant sequences between different individuals should be excluded, and the potential commination sequences from non-human species are also removed for further analysis. @@ -192,12 +197,16 @@ i. The step of remove redundancy sequences is conducted by [CDHIT][14] for fully ii. Then the non-redundant sequences are aligned to NCBI’s non-redundant nucleotide database by [BLAST][15]: - hupanSLURM blastAlign blast rmRedundant rmRedundant_blast /path/to/nt /path/to/blast + mkdir nt & cd nt + wget https://ftp.ncbi.nih.gov/blast/db/FASTA/nt.gz|gunzip & cd .. + hupanSLURM blastAlign mkblastdb nt nt_index path/to/blast + mkdir rmRedundant & mv rmRedundant.fully.unaligned rmRedundant & mv rmRedundant.partially.unaligned rmRedundant + hupanSLURM blastAlign blast rmRedundant rmRedundant_blast /path/to/nt_index /path/to/blast iii. According to the alignment result, the taxonomic classification of each sequences (if have) could be obtained: - hupanSLURM getTaxClass rmRedundant_blast/data/fully/fully.non-redundant.blast info/ TaxClass_fully - hupanSLURM getTaxClass rmRedundant_blast/data/partially/partially.non-redundant.blast info/ TaxClass_partially + hupanSLURM getTaxClass rmRedundant_blast/data/rmRedundant.fully.unaligned/non-redundant.blast info/ TaxClass_fully + hupanSLURM getTaxClass rmRedundant_blast/data/rmRedundant.partially.unaligned/non-redundant.blast info/ TaxClass_partially iv. And the sequences classifying as microbiology and non-primate eukaryotes are considered as non-human sequences and removed from further consideration: From a72e72469f69567d6974f478d073378f8760407f Mon Sep 17 00:00:00 2001 From: Zhongqu Duan Date: Thu, 14 Nov 2019 13:04:35 +0800 Subject: [PATCH 17/45] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 1fda666..5adf07a 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ **1. Introduction** -The human reference genome is still incomplete, especially for those population-specific or individual-specific regions, which may have important functions. It encourages us to build the pan-genome of human population. Previously, our team developed a "map-to-pan" strategy, [EUPAN][1], specific for eukaryotic pan-genome analysis. However, due to the large genome size of individual human genome, [EUPAN][2] is not suit for pan-genome analysis involving in hundreds of individual genomes. Here, we present an improved tool, HUPAN (Human Pan-genome Analysis), for human pan-genome analysis. +The human reference genome is still incomplete, especially for those population-specific or individual-specific regions, which may have important functions. It encourages us to build the pan-genome of human population. Previously, our team developed a "map-to-pan" strategy, [EUPAN][1], specific for eukaryotic pan-genome analysis. However, due to the large genome size of individual human genome, [EUPAN][2] is not suit for pan-genome analysis involving in hundreds of individual genomes. Here, we present an improved tool, HUPAN (HUman Pan-genome ANalysis), for human pan-genome analysis. The HUPAN hompage is http://cgm.sjtu.edu.cn/hupan/ @@ -181,7 +181,7 @@ v. Non-reference sequences from multiple individuals are merged: hupanSLURM mergeUnalnCtg Unalign_result/data/ mergeUnalnCtg_result - Alternatively, if you conducted step iv by `hupan`, you can find the merge result in the Unalign_result/total: + Alternatively, if you conducted step iv by `hupan`, you can find the merged result in the Unalign_result/total: mv Unalign_result/total/ mergeUnalnCtg_result @@ -198,7 +198,7 @@ i. The step of remove redundancy sequences is conducted by [CDHIT][14] for fully ii. Then the non-redundant sequences are aligned to NCBI’s non-redundant nucleotide database by [BLAST][15]: mkdir nt & cd nt - wget https://ftp.ncbi.nih.gov/blast/db/FASTA/nt.gz|gunzip & cd .. + wget https://ftp.ncbi.nih.gov/blast/db/FASTA/nt.gz |gunzip & cd .. hupanSLURM blastAlign mkblastdb nt nt_index path/to/blast mkdir rmRedundant & mv rmRedundant.fully.unaligned rmRedundant & mv rmRedundant.partially.unaligned rmRedundant hupanSLURM blastAlign blast rmRedundant rmRedundant_blast /path/to/nt_index /path/to/blast From fb225b66c7b08732781bacb3b3e96c4d9aa4f0db Mon Sep 17 00:00:00 2001 From: Zhongqu Duan Date: Thu, 14 Nov 2019 13:13:09 +0800 Subject: [PATCH 18/45] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5adf07a..652f4c2 100644 --- a/README.md +++ b/README.md @@ -210,8 +210,8 @@ iii. According to the alignment result, the taxonomic classification of each seq iv. And the sequences classifying as microbiology and non-primate eukaryotes are considered as non-human sequences and removed from further consideration: - hupanSLURM rmCtm -i 60 rmRedundant/fully/fully.non-redundant.fa rmRedundant_blast/data/fully/fully.non-redundant.blast TaxClass_fully/data/accession.name rmCtm_fully - hupanSLURM rmCtm -i 60 rmRedundant/partially/partially.non-redundant.fa rmRedundant_blast/data/partially/partially.non-redundant.blast TaxClass_partially/data/accession.name rmCtm_partially + hupanSLURM rmCtm -i 60 rmRedundant/rmRedundant.fully.unaligned/non-redundant.fa rmRedundant_blast/data/rmRedundant.fully.unaligned/non-redundant.blast TaxClass_fully/data/accession.name rmCtm_fully + hupanSLURM rmCtm -i 60 rmRedundant/rmRedundant.partially.unaligned/non-redundant.fa rmRedundant_blast/data/rmRedundant.partially.unaligned/non-redundant.blast TaxClass_partially/data/accession.name rmCtm_partially **(6) Construction and annotation of pan-genome** From a6ecb533146c0ac2e99eebf5840037a468ab4a16 Mon Sep 17 00:00:00 2001 From: Zhongqu Duan Date: Thu, 14 Nov 2019 20:37:01 +0800 Subject: [PATCH 19/45] Update HUPANgeneExist.pm --- lib/HUPANgeneExist.pm | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/HUPANgeneExist.pm b/lib/HUPANgeneExist.pm index 714257c..c9c8548 100644 --- a/lib/HUPANgeneExist.pm +++ b/lib/HUPANgeneExist.pm @@ -72,6 +72,7 @@ my @n; open(IN,$matrix); while(){ + chomp; $i++; my @t=split /\t/,$_; if($i==1){ From e21ac4f22fe469c2876363385c8f2ab21512f5e4 Mon Sep 17 00:00:00 2001 From: Zhongqu Duan Date: Thu, 14 Nov 2019 20:39:19 +0800 Subject: [PATCH 20/45] Update HUPANgeneExistLSF.pm --- lib/HUPANgeneExistLSF.pm | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/HUPANgeneExistLSF.pm b/lib/HUPANgeneExistLSF.pm index b2ab3f6..a842e58 100644 --- a/lib/HUPANgeneExistLSF.pm +++ b/lib/HUPANgeneExistLSF.pm @@ -72,6 +72,7 @@ my @n; open(IN,$matrix); while(){ + chomp; $i++; my @t=split /\t/,$_; if($i==1){ From 82d3bec5796bdcda417d0ef12f32ba5248ebb1ba Mon Sep 17 00:00:00 2001 From: Zhongqu Duan Date: Sat, 23 Nov 2019 00:12:11 +0800 Subject: [PATCH 21/45] Update getTaxClass.pl --- src/perl/getTaxClass.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/perl/getTaxClass.pl b/src/perl/getTaxClass.pl index 234e5e7..10c108c 100755 --- a/src/perl/getTaxClass.pl +++ b/src/perl/getTaxClass.pl @@ -157,7 +157,7 @@ open(OUT,">$out_file")||die("Error10: cannot write the table: $out_file.\n"); print OUT "accesion\taccession.version\ttaxid\tsource\n"; while((my $key, my $value)=each %accession){ - print $key."\n"; + #print $key."\n"; my $taxonomy=$acc_tax{$key}; my $records; if(exists $source{$taxonomy}){ From 6958bfdfae2ee75151f5bc034b12156444189549 Mon Sep 17 00:00:00 2001 From: Zhongqu Duan Date: Sat, 11 Jan 2020 19:56:19 +0800 Subject: [PATCH 22/45] Update HUPANassem.pm --- lib/HUPANassem.pm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/HUPANassem.pm b/lib/HUPANassem.pm index dda0260..c5e1d4b 100644 --- a/lib/HUPANassem.pm +++ b/lib/HUPANassem.pm @@ -441,8 +441,8 @@ my ($data_dir,$out_dir,$sga_dir)=@ARGV; $data_dir=abs_path($data_dir); $out_dir=abs_path($out_dir); -print $data_dir."\n"; -print $out_dir."\n"; +#print $data_dir."\n"; +#print $out_dir."\n"; my $cmd_dir=$ENV{'PWD'}; #Check existence of output directory From 8ec1d07a0b4426226449c7ac79a0ce6cc7ee1f07 Mon Sep 17 00:00:00 2001 From: Zhongqu Duan Date: Sat, 11 Jan 2020 19:57:34 +0800 Subject: [PATCH 23/45] Update HUPANassemLSF.pm --- lib/HUPANassemLSF.pm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/HUPANassemLSF.pm b/lib/HUPANassemLSF.pm index c143cc6..48ccfbd 100644 --- a/lib/HUPANassemLSF.pm +++ b/lib/HUPANassemLSF.pm @@ -452,8 +452,8 @@ my ($data_dir,$out_dir,$sga_dir)=@ARGV; $data_dir=abs_path($data_dir); $out_dir=abs_path($out_dir); -print $data_dir."\n"; -print $out_dir."\n"; +#print $data_dir."\n"; +#print $out_dir."\n"; my $cmd_dir=$ENV{'PWD'}; #Check existence of output directory From a4e223a7dcaa41139fd2ed6c1f8761acfe61098b Mon Sep 17 00:00:00 2001 From: Zhongqu Duan Date: Sat, 11 Jan 2020 19:58:41 +0800 Subject: [PATCH 24/45] Update HUPANassemSLURM.pm --- lib/HUPANassemSLURM.pm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/HUPANassemSLURM.pm b/lib/HUPANassemSLURM.pm index 4c26508..fa12881 100644 --- a/lib/HUPANassemSLURM.pm +++ b/lib/HUPANassemSLURM.pm @@ -452,8 +452,8 @@ my ($data_dir,$out_dir,$sga_dir)=@ARGV; $data_dir=abs_path($data_dir); $out_dir=abs_path($out_dir); -print $data_dir."\n"; -print $out_dir."\n"; +#print $data_dir."\n"; +#print $out_dir."\n"; my $cmd_dir=$ENV{'PWD'}; #Check existence of output directory From f4ceac1346e2512eadfc846af2d785bb11d855c1 Mon Sep 17 00:00:00 2001 From: Zhongqu Duan Date: Thu, 9 Apr 2020 16:36:35 +0800 Subject: [PATCH 25/45] Update HUPANrmContaminate.pm --- lib/HUPANrmContaminate.pm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/HUPANrmContaminate.pm b/lib/HUPANrmContaminate.pm index 9775f7b..a213386 100644 --- a/lib/HUPANrmContaminate.pm +++ b/lib/HUPANrmContaminate.pm @@ -29,11 +29,11 @@ Necessary input description: Options: - -h Print this usage page. + -h Print this usage page. - -l The local alignment length. (default: 100 bp) + -l The local alignment length. (default: 100 bp) - -i The local alignment identity. (default: 90%) + -i The local alignment identity. (default: 90%) "; From bea4056f02f1d9718ace0bc75260c1dcb49d4992 Mon Sep 17 00:00:00 2001 From: Zhongqu Duan Date: Thu, 9 Apr 2020 16:38:19 +0800 Subject: [PATCH 26/45] Update HUPANrmContaminateLSF.pm --- lib/HUPANrmContaminateLSF.pm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/HUPANrmContaminateLSF.pm b/lib/HUPANrmContaminateLSF.pm index 9a88075..dc7f684 100644 --- a/lib/HUPANrmContaminateLSF.pm +++ b/lib/HUPANrmContaminateLSF.pm @@ -29,11 +29,11 @@ Necessary input description: Options: - -h Print this usage page. + -h Print this usage page. - -l The local alignment length. (default: 100 bp) + -l The local alignment length. (default: 100 bp) - -i The local alignment identity. (default: 90%) + -i The local alignment identity. (default: 90%) "; From 1fa3239763c80651ca22bcf580d094a48dab67bc Mon Sep 17 00:00:00 2001 From: Zhongqu Duan Date: Thu, 9 Apr 2020 16:39:52 +0800 Subject: [PATCH 27/45] Update HUPANrmContaminateSLURM.pm --- lib/HUPANrmContaminateSLURM.pm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/HUPANrmContaminateSLURM.pm b/lib/HUPANrmContaminateSLURM.pm index addb025..4e082c9 100644 --- a/lib/HUPANrmContaminateSLURM.pm +++ b/lib/HUPANrmContaminateSLURM.pm @@ -29,11 +29,11 @@ Necessary input description: Options: - -h Print this usage page. + -h Print this usage page. - -l The local alignment length. (default: 100 bp) + -l The local alignment length. (default: 100 bp) - -i The local alignment identity. (default: 90%) + -i The local alignment identity. (default: 90%) "; From 5b40826e6d4ff0c2f1b4d1dca8f4fac2334098f8 Mon Sep 17 00:00:00 2001 From: Zhongqu Duan Date: Thu, 9 Apr 2020 17:05:14 +0800 Subject: [PATCH 28/45] Update HUPANsplitSeq.pm --- lib/HUPANsplitSeq.pm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/HUPANsplitSeq.pm b/lib/HUPANsplitSeq.pm index 2527898..c1b3703 100644 --- a/lib/HUPANsplitSeq.pm +++ b/lib/HUPANsplitSeq.pm @@ -32,8 +32,7 @@ Options: #check existense of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of - existing files. We kindly request that the \noutput directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); } #adjust directory names and create output directory From 0d2abc5a1af7fa9bca4c5750a96262bc560dd7e5 Mon Sep 17 00:00:00 2001 From: Zhongqu Duan Date: Thu, 9 Apr 2020 17:06:07 +0800 Subject: [PATCH 29/45] Update HUPANsplitSeqLSF.pm --- lib/HUPANsplitSeqLSF.pm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/HUPANsplitSeqLSF.pm b/lib/HUPANsplitSeqLSF.pm index 075bd89..07e639c 100644 --- a/lib/HUPANsplitSeqLSF.pm +++ b/lib/HUPANsplitSeqLSF.pm @@ -32,8 +32,7 @@ Options: #check existense of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of - existing files. We kindly request that the \noutput directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); } #adjust directory names and create output directory From e73beed4d23f58b6e0d4cfb26f6ab280d43ee4d0 Mon Sep 17 00:00:00 2001 From: Zhongqu Duan Date: Thu, 9 Apr 2020 17:45:47 +0800 Subject: [PATCH 30/45] Update LICENCE.TXT --- tools/augustus.2.5.5/src/LICENCE.TXT | 163 +++++++++++++++------------ 1 file changed, 91 insertions(+), 72 deletions(-) diff --git a/tools/augustus.2.5.5/src/LICENCE.TXT b/tools/augustus.2.5.5/src/LICENCE.TXT index b3e65c7..6ddf106 100644 --- a/tools/augustus.2.5.5/src/LICENCE.TXT +++ b/tools/augustus.2.5.5/src/LICENCE.TXT @@ -1,72 +1,91 @@ -Artistic License 2.0 (http://www.opensource.org/licenses/artistic-license-2.0.php) - -Preamble - -This license establishes the terms under which a given free software Package may be copied, modified, distributed, and/or redistributed. The intent is that the Copyright Holder maintains some artistic control over the development of that Package while still keeping the Package available as open source and free software. - -You are always permitted to make arrangements wholly outside of this license directly with the Copyright Holder of a given Package. If the terms of this license do not permit the full use that you propose to make of the Package, you should contact the Copyright Holder and seek a different licensing arrangement. - -Definitions - -"Copyright Holder" means the individual(s) or organization(s) named in the copyright notice for the entire Package. - -"Contributor" means any party that has contributed code or other material to the Package, in accordance with the Copyright Holder's procedures. - -"You" and "your" means any person who would like to copy, distribute, or modify the Package. - -"Package" means the collection of files distributed by the Copyright Holder, and derivatives of that collection and/or of those files. A given Package may consist of either the Standard Version, or a Modified Version. - -"Distribute" means providing a copy of the Package or making it accessible to anyone else, or in the case of a company or organization, to others outside of your company or organization. - -"Distributor Fee" means any fee that you charge for Distributing this Package or providing support for this Package to another party. It does not mean licensing fees. - -"Standard Version" refers to the Package if it has not been modified, or has been modified only in ways explicitly requested by the Copyright Holder. - -"Modified Version" means the Package, if it has been changed, and such changes were not explicitly requested by the Copyright Holder. - -"Original License" means this Artistic License as Distributed with the Standard Version of the Package, in its current version or as it may be modified by The Perl Foundation in the future. - -"Source" form means the source code, documentation source, and configuration files for the Package. - -"Compiled" form means the compiled bytecode, object code, binary, or any other form resulting from mechanical transformation or translation of the Source form. -Permission for Use and Modification Without Distribution - -(1) You are permitted to use the Standard Version and create and use Modified Versions for any purpose without restriction, provided that you do not Distribute the Modified Version. -Permissions for Redistribution of the Standard Version - -(2) You may Distribute verbatim copies of the Source form of the Standard Version of this Package in any medium without restriction, either gratis or for a Distributor Fee, provided that you duplicate all of the original copyright notices and associated disclaimers. At your discretion, such verbatim copies may or may not include a Compiled form of the Package. - -(3) You may apply any bug fixes, portability changes, and other modifications made available from the Copyright Holder. The resulting Package will still be considered the Standard Version, and as such will be subject to the Original License. -Distribution of Modified Versions of the Package as Source - -(4) You may Distribute your Modified Version as Source (either gratis or for a Distributor Fee, and with or without a Compiled form of the Modified Version) provided that you clearly document how it differs from the Standard Version, including, but not limited to, documenting any non-standard features, executables, or modules, and provided that you do at least ONE of the following: - -(a) make the Modified Version available to the Copyright Holder of the Standard Version, under the Original License, so that the Copyright Holder may include your modifications in the Standard Version. -(b) ensure that installation of your Modified Version does not prevent the user installing or running the Standard Version. In addition, the Modified Version must bear a name that is different from the name of the Standard Version. -(c) allow anyone who receives a copy of the Modified Version to make the Source form of the Modified Version available to others under -(i) the Original License or -(ii) a license that permits the licensee to freely copy, modify and redistribute the Modified Version using the same licensing terms that apply to the copy that the licensee received, and requires that the Source form of the Modified Version, and of any works derived from it, be made freely available in that license fees are prohibited but Distributor Fees are allowed. -Distribution of Compiled Forms of the Standard Version or Modified Versions without the Source - -(5) You may Distribute Compiled forms of the Standard Version without the Source, provided that you include complete instructions on how to get the Source of the Standard Version. Such instructions must be valid at the time of your distribution. If these instructions, at any time while you are carrying out such distribution, become invalid, you must provide new instructions on demand or cease further distribution. If you provide valid instructions or cease distribution within thirty days after you become aware that the instructions are invalid, then you do not forfeit any of your rights under this license. - -(6) You may Distribute a Modified Version in Compiled form without the Source, provided that you comply with Section 4 with respect to the Source of the Modified Version. -Aggregating or Linking the Package - -(7) You may aggregate the Package (either the Standard Version or Modified Version) with other packages and Distribute the resulting aggregation provided that you do not charge a licensing fee for the Package. Distributor Fees are permitted, and licensing fees for other components in the aggregation are permitted. The terms of this license apply to the use and Distribution of the Standard or Modified Versions as included in the aggregation. - -(8) You are permitted to link Modified and Standard Versions with other works, to embed the Package in a larger work of your own, or to build stand-alone binary or bytecode versions of applications that include the Package, and Distribute the result without restriction, provided the result does not expose a direct interface to the Package. -Items That are Not Considered Part of a Modified Version - -(9) Works (including, but not limited to, modules and scripts) that merely extend or make use of the Package, do not, by themselves, cause the Package to be a Modified Version. In addition, such works are not considered parts of the Package itself, and are not subject to the terms of this license. -General Provisions - -(10) Any use, modification, and distribution of the Standard or Modified Versions is governed by this Artistic License. By using, modifying or distributing the Package, you accept this license. Do not use, modify, or distribute the Package, if you do not accept this license. - -(11) If your Modified Version has been derived from a Modified Version made by someone other than you, you are nevertheless required to ensure that your Modified Version complies with the requirements of this license. - -(12) This license does not grant you the right to use any trademark, service mark, tradename, or logo of the Copyright Holder. - -(13) This license includes the non-exclusive, worldwide, free-of-charge patent license to make, have made, use, offer to sell, sell, import and otherwise transfer the Package with respect to any patent claims licensable by the Copyright Holder that are necessarily infringed by the Package. If you institute patent litigation (including a cross-claim or counterclaim) against any party alleging that the Package constitutes direct or contributory patent infringement, then this Artistic License to you shall terminate on the date that such litigation is filed. - -(14) Disclaimer of Warranty: The package is provided by the copyright holder and contributors 'as is' and without any express or implied warranties. The implied warranties of merchantability, fitness for a particular purpose, or non-infringement are disclaimed to the extent permitted by your local law. Unless required by law, no copyright holder or contributor will be liable for any direct, indirect, incidental, or consequential damages arising in any way out of the use of the package, even if advised of the possibility of such damage. \ No newline at end of file +Artistic Licence (http://www.opensource.org/licenses/artistic-license.php) + +Preamble + +The intent of this document is to state the conditions under which a Package +may be copied, such that the Copyright Holder maintains some semblance of +artistic control over the development of the package, while giving the users +of the package the right to use and distribute the Package in a more-or-less +customary fashion, plus the right to make reasonable modifications. + +Definitions: +"Package" refers to the collection of files distributed by the Copyright Holder, +and derivatives of that collection of files created through textual modification. +"Standard Version" refers to such a Package if it has not been modified, or has +been modified in accordance with the wishes of the Copyright Holder. +"Copyright Holder" is whoever is named in the copyright or copyrights for the package. +"You" is you, if you're thinking about copying or distributing this Package. +"Reasonable copying fee" is whatever you can justify on the basis of media cost, +duplication charges, time of people involved, and so on. (You will not be required +to justify it to the Copyright Holder, but only to the computing community at large +as a market that must bear the fee.) +"Freely Available" means that no fee is charged for the item itself, though there +may be fees involved in handling the item. It also means that recipients of the +item may redistribute it under the same conditions they received it. + +1. You may make and give away verbatim copies of the source form of the Standard +Version of this Package without restriction, provided that you duplicate all of +the original copyright notices and associated disclaimers. + +2. You may apply bug fixes, portability fixes and other modifications derived +from the Public Domain or from the Copyright Holder. A Package modified in such +a way shall still be considered the Standard Version. + +3. You may otherwise modify your copy of this Package in any way, provided that +you insert a prominent notice in each changed file stating how and when you changed +that file, and provided that you do at least ONE of the following: + +a) place your modifications in the Public Domain or otherwise make them Freely +Available, such as by posting said modifications to Usenet or an equivalent medium, +or placing the modifications on a major archive site such as ftp.uu.net, or by +allowing the Copyright Holder to include your modifications in the Standard Version +of the Package. + +b) use the modified Package only within your corporation or organization. + +c) rename any non-standard executables so the names do not conflict with standard +executables, which must also be provided, and provide a separate manual page for +each non-standard executable that clearly documents how it differs from the Standard +Version. + +d) make other distribution arrangements with the Copyright Holder. + +4. You may distribute the programs of this Package in object code or executable +form, provided that you do at least ONE of the following: + +a) distribute a Standard Version of the executables and library files, together +with instructions (in the manual page or equivalent) on where to get the Standard Version. + +b) accompany the distribution with the machine-readable source of the Package with +your modifications. + +c) accompany any non-standard executables with their corresponding Standard Version +executables, giving the non-standard executables non-standard names, and clearly +documenting the differences in manual pages (or equivalent), together with instructions +on where to get the Standard Version. + +d) make other distribution arrangements with the Copyright Holder. + +5. You may charge a reasonable copying fee for any distribution of this Package. +You may charge any fee you choose for support of this Package. You may not charge +a fee for this Package itself. However, you may distribute this Package in aggregate +with other (possibly commercial) programs as part of a larger (possibly commercial) +software distribution provided that you do not advertise this Package as a product +of your own. + +6. The scripts and library files supplied as input to or produced as output from the +programs of this Package do not automatically fall under the copyright of this Package, +but belong to whomever generated them, and may be sold commercially, and may be +aggregated with this Package. + +7. C or perl subroutines supplied by you and linked into this Package shall not be +considered part of this Package. + +8. The name of the Copyright Holder may not be used to endorse or promote products +derived from this software without specific prior written permission. + +9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, +INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS +FOR A PARTICULAR PURPOSE. + +The End From ee25981b72181c9e99a0522ad7a112c2dc38e366 Mon Sep 17 00:00:00 2001 From: Zhongqu Duan Date: Thu, 9 Apr 2020 18:09:56 +0800 Subject: [PATCH 31/45] Fix some known bugs Now, pTpG support gff and gtf annotation file --- .DS_Store | Bin 0 -> 8196 bytes lib/HUPANassem.pm | 15 ++----- lib/HUPANassemLSF.pm | 15 ++----- lib/HUPANassemSLURM.pm | 15 ++----- lib/HUPANbam2bedSLURM.pm | 5 +-- lib/HUPANbamSta.pm | 10 +---- lib/HUPANpTpG.pm | 85 ++++++++++++++++++++++++++++++++------ lib/HUPANpTpGLSF.pm | 85 ++++++++++++++++++++++++++++++++------ lib/HUPANpTpGSLURM.pm | 85 ++++++++++++++++++++++++++++++++------ lib/HUPANsim.pm | 5 +-- lib/HUPANsimLSF.pm | 5 +-- lib/HUPANsimSLURM.pm | 5 +-- lib/HUPANsimSeq.pm | 2 +- lib/HUPANsimSeqLSF.pm | 2 +- lib/HUPANsimSeqSLURM.pm | 2 +- lib/HUPANsplitSeqSLURM.pm | 3 +- lib/HUPANtrim.pm | 5 +-- lib/HUPANtrimLSF.pm | 5 +-- lib/HUPANtrimSLURM.pm | 5 +-- lib/HUPANunalnCtg.pm | 5 +-- lib/HUPANunalnCtgLSF.pm | 10 +---- lib/HUPANunalnCtgSLURM.pm | 10 +---- 22 files changed, 243 insertions(+), 136 deletions(-) create mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..d53935f7e64401556071f7f909f2987c50d6533a GIT binary patch literal 8196 zcmeHMTWl0n7(U;&z?pVnrxoo5H@me|5KHJnEkOjg7tlhH%C@vzWSQL=>F9K(?96U~ zQc_7YUP8n-1fx9oqC}&{OT4_Pi6O=psstm6@}MtX9yBU1>OXU)rKR+Z7!u|r=ltjV z|2hAE&Nttg*>jdLhPHy1WUQJo#wmMJDW~EZ$+LTTMv4TQQj(zY%o)m>c9vRavqLj_ zhl&t^5P=YZ5P=YZ5P=&30s3ZpiO=%g7uK*05eN~uDG~7A4++YiOa*dGNdMJAg?|Jf z=^X+5M0LfhkW2(J7059m$wCQYC`mCC!4U&uIO!8Xzf>T{gcQRWg2M-b$Ouj-@S~Ie zgx{SZC1hBJ2!sgCM8MlVCCp?7%VvkCp5INwahsaXBT`a2XYM@C%Xr!RvPaSb_Hf!& z-GbAm=689mZq*&g2K64>HYe+9cDtbuXOxBQw&kjZrRV*@hNe@O-F=3o*~4vi!O|Sx zPg)o_m$;NsYDPwqP0fvoWU_g*F)@-{wW_5tvASi|=%~c28j|Ze_YNLBG;(HI<(x*oNaaIb7Ez2O>K)|K={G2(H&B6eWgZFNmFRu}8!e1~Uk)ijz_ed^icJ}v4~ zO9egZCs^VGBh{yx0tII=wvu(QF1DBD*$6wvPOvlVUG_fvfPKooWarsM_7nS!{lWfX zf3wSofTI$%s7C|t#1b@N9qva8t=NR^=tDnLWT8RFV{qW2h+!PYlXwbG;~6}U6L=A) z@Dg6d8+a3M;~jjA&u|W3;~SjE_xJ&q@H2kFpZGVzBl9B*#5^MtbbokaA%VV%WU!ry z?!k3jQAdnjj@882R&-zkHexHfu?=bTVh=I_cL!l(Kk~%i!#IL5Jb|Nl z4#$YS$MFJA5_@09D>#kU@Vd|9x9}l8A|8K&&+!$p_&Z#@inUv&vlc&IVQn#;w@lmG zN16$aPwyPIt{Va+!c(<({@*bB{r`1~7di?N2obpP5I|{1x}%NeHQO84J8LH>@1^V| xuiu!E{tzmrT?9~j@()9*C#b78CKbprAxT5&f4>Nr`b#$a{)gXxpM^JH@gKolD%Jo1 literal 0 HcmV?d00001 diff --git a/lib/HUPANassem.pm b/lib/HUPANassem.pm index c5e1d4b..599a9db 100644 --- a/lib/HUPANassem.pm +++ b/lib/HUPANassem.pm @@ -91,10 +91,7 @@ my ($data_dir,$out_dir,$tool_dir)=@ARGV; #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the - output directory should not exist. -"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); } $tool_dir.="/" unless $tool_dir=~/\/$/; @@ -328,10 +325,7 @@ my ($data_dir,$out_dir,$soapdenovo)=@ARGV; #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the - output directory should not exist -."); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist\n."); } #Check executable linearK.pl my $exec="linearK.pl"; @@ -447,10 +441,7 @@ my $cmd_dir=$ENV{'PWD'}; #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the - output directory should not exist -."); + die("Error: output directory \"$out_dir\" already exists.To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); } #Check executable sga diff --git a/lib/HUPANassemLSF.pm b/lib/HUPANassemLSF.pm index 48ccfbd..31e9bf1 100644 --- a/lib/HUPANassemLSF.pm +++ b/lib/HUPANassemLSF.pm @@ -94,10 +94,7 @@ my ($data_dir,$out_dir,$tool_dir)=@ARGV; #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the - output directory should not exist. -"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); } $tool_dir.="/" unless $tool_dir=~/\/$/; @@ -309,10 +306,7 @@ my ($data_dir,$out_dir,$soapdenovo)=@ARGV; #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the - output directory should not exist -."); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); } #Check executable linearK.pl my $exec="linearK.pl"; @@ -458,10 +452,7 @@ my $cmd_dir=$ENV{'PWD'}; #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the - output directory should not exist -."); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); } #Check executable sga diff --git a/lib/HUPANassemSLURM.pm b/lib/HUPANassemSLURM.pm index fa12881..113254c 100644 --- a/lib/HUPANassemSLURM.pm +++ b/lib/HUPANassemSLURM.pm @@ -93,10 +93,7 @@ my ($data_dir,$out_dir,$tool_dir)=@ARGV; #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the - output directory should not exist. -"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); } $tool_dir.="/" unless $tool_dir=~/\/$/; @@ -309,10 +306,7 @@ my ($data_dir,$out_dir,$soapdenovo)=@ARGV; #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the - output directory should not exist -."); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); } #Check executable linearK.pl my $exec="linearK.pl"; @@ -458,10 +452,7 @@ my $cmd_dir=$ENV{'PWD'}; #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the - output directory should not exist -."); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); } #Check executable sga diff --git a/lib/HUPANbam2bedSLURM.pm b/lib/HUPANbam2bedSLURM.pm index 55ce9df..ff44598 100644 --- a/lib/HUPANbam2bedSLURM.pm +++ b/lib/HUPANbam2bedSLURM.pm @@ -51,10 +51,7 @@ die("Executable bam2cov cannot be found in your PATH!\n #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the - output directory should not exist. -"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); } #Read threads diff --git a/lib/HUPANbamSta.pm b/lib/HUPANbamSta.pm index 7ad25e2..d62c90b 100644 --- a/lib/HUPANbamSta.pm +++ b/lib/HUPANbamSta.pm @@ -68,10 +68,7 @@ die("Error01: Cannot find bam_stats file in directory bin/ under $bamutil_dir\n" #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the - output directory should not exist. -"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); } #Read threads @@ -174,10 +171,7 @@ die("Error01: Cannot find qualimap file in directory bin/ under $qualimap_dir\n" #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the - output directory should not exist. -"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); } #Read threads diff --git a/lib/HUPANpTpG.pm b/lib/HUPANpTpG.pm index d6ea3de..1ca1eb3 100644 --- a/lib/HUPANpTpG.pm +++ b/lib/HUPANpTpG.pm @@ -1,26 +1,86 @@ #!/usr/bin/perl package pTpG; + +sub pTpG{ use strict; use warnings; use Getopt::Std; -use vars qw($opt_e); -getopts("e"); +use vars qw($opt_h $opt_e $opt_f); +getopts("hef"); +my $usage="\nUsage: hupan pTpG [options] inputfile outputfile -sub pTpG{ -my $usage = "hupan perTranPerGene +hupan pTpG is used to obtain the longest transcript of each protein-coding genes from annotation file. +Notice: a file named \"protein_coding.gtf\" will be automatically prodcued to store all the protein-coding genes. + +Necessary input description: + + inputfile Annotation file. Default: \"gff\" format. + If the annotation file is \"gtf\", please use the option \"-f\". + + outputfile Outputfile. + +Options: -This tool is to obtain the longest trancript of each gene. + -h Print this usage page. -Option: - -e Check \"exon\" length instead of check \"CDS\" length - Note \"exon\" or \"CDS\" should exist in the 3rd column of the input file + -e Check \"exon\" length instead of check \"CDS\" length. + -f The annotation file is \"gtf\" format. "; + +#print @ARGV; die $usage if @ARGV!=2; -my ($file,$out) = @ARGV; -my ($Vec, $num) = @{Read_GTF($file)}; +die $usage if defined($opt_h); +my ($gff_file,$out_file)=@ARGV; + +my $format="gff"; +$format="gtf" if defined($opt_f); + +open(IN,$gff_file)||die("Error: cannot read the file: $gff_file.\n"); +my $temp_file="protein_coding.gtf"; +open(OUT,">$temp_file")||die("Error: cannot write the file: $temp_file.\n"); +my $pre_gid=""; +my $pre_tid=""; +my %genes; + +while(my $line=){ + chomp $line; + next if $line=~/^#/; + my ($chr,$source,$type,$start,$end,$score,$sym,$phase,$record)=split /\t/,$line; + if($format eq "gff"){ + my @string=split /[;|=]/,$record; + if($type eq "gene"){ + if($string[5] eq "protein_coding"){ + $pre_gid=$string[3]; + } + }else{ + if($string[5] eq $pre_gid){ + $pre_tid=$string[7]; + print OUT "$chr\t$source\t$type\t$start\t$end\t$score\t$sym\t$phase\tgene_id \"$pre_gid\"; transcript_id \"$pre_tid\";\n"; + } + } + }else{ + if($type eq "gene"){ + $record=~/(gene_id \"[^\"]+\"); (gene_type \"[^\"]+\")/; + if($2 eq "gene_type \"protein_coding\""){ + $pre_gid=$1; + } + }else{ + $record=~/(gene_id \"[^\"]+\"); (transcript_id \"[^\"]+\")/; + if($1 eq $pre_gid ){ + $pre_tid=$2; + print OUT "$chr\t$source\t$type\t$start\t$end\t$score\t$sym\t$phase\t$pre_gid; $pre_tid;\n"; + } + } + } +} +close IN; +close OUT; -open(OUT,">$out"); +my ($Vec, $num) = @{Read_GTF($temp_file)}; + +#open(OUT,">$out"); +open(OUT,">$out_file")||die("Error: cannot write the file: $out_file.\n"); foreach my $d (@{$Vec}){ my $target=$d->[0]; my $len=getLen($d->[0]); @@ -32,7 +92,7 @@ foreach my $d (@{$Vec}){ } } if($len!=0){ - OutputTran($target); + OutputTran($target); } } @@ -90,7 +150,6 @@ sub Read_GTF{ while(){ chomp; if(/^[0-9a-zA-Z]+/){ - if($begin == 1){ @temp = split("\t",$_); $temp[8]=~/(gene_id \"[^\"]+\"); (transcript_id \"[^\"]+\")/; diff --git a/lib/HUPANpTpGLSF.pm b/lib/HUPANpTpGLSF.pm index 74a6067..1ca1eb3 100644 --- a/lib/HUPANpTpGLSF.pm +++ b/lib/HUPANpTpGLSF.pm @@ -1,26 +1,86 @@ #!/usr/bin/perl package pTpG; + +sub pTpG{ use strict; use warnings; use Getopt::Std; -use vars qw($opt_e); -getopts("e"); +use vars qw($opt_h $opt_e $opt_f); +getopts("hef"); +my $usage="\nUsage: hupan pTpG [options] inputfile outputfile -sub pTpG{ -my $usage = "hupanLSF perTranPerGene +hupan pTpG is used to obtain the longest transcript of each protein-coding genes from annotation file. +Notice: a file named \"protein_coding.gtf\" will be automatically prodcued to store all the protein-coding genes. + +Necessary input description: + + inputfile Annotation file. Default: \"gff\" format. + If the annotation file is \"gtf\", please use the option \"-f\". + + outputfile Outputfile. + +Options: -This tool is to obtain the longest trancript of each gene. + -h Print this usage page. -Option: - -e Check \"exon\" length instead of check \"CDS\" length - Note \"exon\" or \"CDS\" should exist in the 3rd column of the input file + -e Check \"exon\" length instead of check \"CDS\" length. + -f The annotation file is \"gtf\" format. "; + +#print @ARGV; die $usage if @ARGV!=2; -my ($file,$out) = @ARGV; -my ($Vec, $num) = @{Read_GTF($file)}; +die $usage if defined($opt_h); +my ($gff_file,$out_file)=@ARGV; + +my $format="gff"; +$format="gtf" if defined($opt_f); + +open(IN,$gff_file)||die("Error: cannot read the file: $gff_file.\n"); +my $temp_file="protein_coding.gtf"; +open(OUT,">$temp_file")||die("Error: cannot write the file: $temp_file.\n"); +my $pre_gid=""; +my $pre_tid=""; +my %genes; + +while(my $line=){ + chomp $line; + next if $line=~/^#/; + my ($chr,$source,$type,$start,$end,$score,$sym,$phase,$record)=split /\t/,$line; + if($format eq "gff"){ + my @string=split /[;|=]/,$record; + if($type eq "gene"){ + if($string[5] eq "protein_coding"){ + $pre_gid=$string[3]; + } + }else{ + if($string[5] eq $pre_gid){ + $pre_tid=$string[7]; + print OUT "$chr\t$source\t$type\t$start\t$end\t$score\t$sym\t$phase\tgene_id \"$pre_gid\"; transcript_id \"$pre_tid\";\n"; + } + } + }else{ + if($type eq "gene"){ + $record=~/(gene_id \"[^\"]+\"); (gene_type \"[^\"]+\")/; + if($2 eq "gene_type \"protein_coding\""){ + $pre_gid=$1; + } + }else{ + $record=~/(gene_id \"[^\"]+\"); (transcript_id \"[^\"]+\")/; + if($1 eq $pre_gid ){ + $pre_tid=$2; + print OUT "$chr\t$source\t$type\t$start\t$end\t$score\t$sym\t$phase\t$pre_gid; $pre_tid;\n"; + } + } + } +} +close IN; +close OUT; -open(OUT,">$out"); +my ($Vec, $num) = @{Read_GTF($temp_file)}; + +#open(OUT,">$out"); +open(OUT,">$out_file")||die("Error: cannot write the file: $out_file.\n"); foreach my $d (@{$Vec}){ my $target=$d->[0]; my $len=getLen($d->[0]); @@ -32,7 +92,7 @@ foreach my $d (@{$Vec}){ } } if($len!=0){ - OutputTran($target); + OutputTran($target); } } @@ -90,7 +150,6 @@ sub Read_GTF{ while(){ chomp; if(/^[0-9a-zA-Z]+/){ - if($begin == 1){ @temp = split("\t",$_); $temp[8]=~/(gene_id \"[^\"]+\"); (transcript_id \"[^\"]+\")/; diff --git a/lib/HUPANpTpGSLURM.pm b/lib/HUPANpTpGSLURM.pm index 1e7de5d..1ca1eb3 100644 --- a/lib/HUPANpTpGSLURM.pm +++ b/lib/HUPANpTpGSLURM.pm @@ -1,26 +1,86 @@ #!/usr/bin/perl package pTpG; + +sub pTpG{ use strict; use warnings; use Getopt::Std; -use vars qw($opt_e); -getopts("e"); +use vars qw($opt_h $opt_e $opt_f); +getopts("hef"); +my $usage="\nUsage: hupan pTpG [options] inputfile outputfile -sub pTpG{ -my $usage = "hupanSLURM perTranPerGene +hupan pTpG is used to obtain the longest transcript of each protein-coding genes from annotation file. +Notice: a file named \"protein_coding.gtf\" will be automatically prodcued to store all the protein-coding genes. + +Necessary input description: + + inputfile Annotation file. Default: \"gff\" format. + If the annotation file is \"gtf\", please use the option \"-f\". + + outputfile Outputfile. + +Options: -This tool is to obtain the longest trancript of each gene. + -h Print this usage page. -Option: - -e Check \"exon\" length instead of check \"CDS\" length - Note \"exon\" or \"CDS\" should exist in the 3rd column of the input file + -e Check \"exon\" length instead of check \"CDS\" length. + -f The annotation file is \"gtf\" format. "; + +#print @ARGV; die $usage if @ARGV!=2; -my ($file,$out) = @ARGV; -my ($Vec, $num) = @{Read_GTF($file)}; +die $usage if defined($opt_h); +my ($gff_file,$out_file)=@ARGV; + +my $format="gff"; +$format="gtf" if defined($opt_f); + +open(IN,$gff_file)||die("Error: cannot read the file: $gff_file.\n"); +my $temp_file="protein_coding.gtf"; +open(OUT,">$temp_file")||die("Error: cannot write the file: $temp_file.\n"); +my $pre_gid=""; +my $pre_tid=""; +my %genes; + +while(my $line=){ + chomp $line; + next if $line=~/^#/; + my ($chr,$source,$type,$start,$end,$score,$sym,$phase,$record)=split /\t/,$line; + if($format eq "gff"){ + my @string=split /[;|=]/,$record; + if($type eq "gene"){ + if($string[5] eq "protein_coding"){ + $pre_gid=$string[3]; + } + }else{ + if($string[5] eq $pre_gid){ + $pre_tid=$string[7]; + print OUT "$chr\t$source\t$type\t$start\t$end\t$score\t$sym\t$phase\tgene_id \"$pre_gid\"; transcript_id \"$pre_tid\";\n"; + } + } + }else{ + if($type eq "gene"){ + $record=~/(gene_id \"[^\"]+\"); (gene_type \"[^\"]+\")/; + if($2 eq "gene_type \"protein_coding\""){ + $pre_gid=$1; + } + }else{ + $record=~/(gene_id \"[^\"]+\"); (transcript_id \"[^\"]+\")/; + if($1 eq $pre_gid ){ + $pre_tid=$2; + print OUT "$chr\t$source\t$type\t$start\t$end\t$score\t$sym\t$phase\t$pre_gid; $pre_tid;\n"; + } + } + } +} +close IN; +close OUT; -open(OUT,">$out"); +my ($Vec, $num) = @{Read_GTF($temp_file)}; + +#open(OUT,">$out"); +open(OUT,">$out_file")||die("Error: cannot write the file: $out_file.\n"); foreach my $d (@{$Vec}){ my $target=$d->[0]; my $len=getLen($d->[0]); @@ -32,7 +92,7 @@ foreach my $d (@{$Vec}){ } } if($len!=0){ - OutputTran($target); + OutputTran($target); } } @@ -90,7 +150,6 @@ sub Read_GTF{ while(){ chomp; if(/^[0-9a-zA-Z]+/){ - if($begin == 1){ @temp = split("\t",$_); $temp[8]=~/(gene_id \"[^\"]+\"); (transcript_id \"[^\"]+\")/; diff --git a/lib/HUPANsim.pm b/lib/HUPANsim.pm index b3dad7f..90ccf47 100644 --- a/lib/HUPANsim.pm +++ b/lib/HUPANsim.pm @@ -39,10 +39,7 @@ Options: #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the - output directory should not exist. -"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); } #get simulation number diff --git a/lib/HUPANsimLSF.pm b/lib/HUPANsimLSF.pm index 60a26db..91736b4 100644 --- a/lib/HUPANsimLSF.pm +++ b/lib/HUPANsimLSF.pm @@ -39,10 +39,7 @@ Options: #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the - output directory should not exist. -"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); } #get simulation number diff --git a/lib/HUPANsimSLURM.pm b/lib/HUPANsimSLURM.pm index f99ce53..004674c 100644 --- a/lib/HUPANsimSLURM.pm +++ b/lib/HUPANsimSLURM.pm @@ -39,10 +39,7 @@ Options: #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the - output directory should not exist. -"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); } #get simulation number diff --git a/lib/HUPANsimSeq.pm b/lib/HUPANsimSeq.pm index 85ff978..54ff42b 100644 --- a/lib/HUPANsimSeq.pm +++ b/lib/HUPANsimSeq.pm @@ -73,7 +73,7 @@ Options: #check existense of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files. We kindly request that the \noutput directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); } #get simulation number diff --git a/lib/HUPANsimSeqLSF.pm b/lib/HUPANsimSeqLSF.pm index 3f1e6a7..481fdc4 100644 --- a/lib/HUPANsimSeqLSF.pm +++ b/lib/HUPANsimSeqLSF.pm @@ -73,7 +73,7 @@ Options: #check existense of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files. We kindly request that the \noutput directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); } #get simulation number diff --git a/lib/HUPANsimSeqSLURM.pm b/lib/HUPANsimSeqSLURM.pm index 76054bb..11f9d6b 100644 --- a/lib/HUPANsimSeqSLURM.pm +++ b/lib/HUPANsimSeqSLURM.pm @@ -73,7 +73,7 @@ Options: #check existense of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files. We kindly request that the \noutput directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); } #get simulation number diff --git a/lib/HUPANsplitSeqSLURM.pm b/lib/HUPANsplitSeqSLURM.pm index 85b5c0d..d6bddca 100644 --- a/lib/HUPANsplitSeqSLURM.pm +++ b/lib/HUPANsplitSeqSLURM.pm @@ -32,8 +32,7 @@ Options: #check existense of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of - existing files. We kindly request that the \noutput directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists.To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); } #adjust directory names and create output directory diff --git a/lib/HUPANtrim.pm b/lib/HUPANtrim.pm index 2be01e6..ffdc77c 100644 --- a/lib/HUPANtrim.pm +++ b/lib/HUPANtrim.pm @@ -83,10 +83,7 @@ my ($data_dir,$out_dir,$trim_dir)=@ARGV; #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the - output directory should not exist. -"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); } #Detect executable fastqc diff --git a/lib/HUPANtrimLSF.pm b/lib/HUPANtrimLSF.pm index 82020d0..f0ea165 100644 --- a/lib/HUPANtrimLSF.pm +++ b/lib/HUPANtrimLSF.pm @@ -84,10 +84,7 @@ my ($data_dir,$out_dir,$trim_dir)=@ARGV; #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the - output directory should not exist. -"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); } #Detect executable fastqc diff --git a/lib/HUPANtrimSLURM.pm b/lib/HUPANtrimSLURM.pm index daf89fc..18caf67 100644 --- a/lib/HUPANtrimSLURM.pm +++ b/lib/HUPANtrimSLURM.pm @@ -84,10 +84,7 @@ my ($data_dir,$out_dir,$trim_dir)=@ARGV; #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the - output directory should not exist. -"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); } #Detect executable fastqc diff --git a/lib/HUPANunalnCtg.pm b/lib/HUPANunalnCtg.pm index 9dffd5c..504539c 100644 --- a/lib/HUPANunalnCtg.pm +++ b/lib/HUPANunalnCtg.pm @@ -66,10 +66,7 @@ $quast_dir.="/" unless($quast_dir=~/\/$/); $out_dir.="/" unless($out_dir=~/\/$/); #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the - output directory should not exist. -"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); } my $thread_num=1; diff --git a/lib/HUPANunalnCtgLSF.pm b/lib/HUPANunalnCtgLSF.pm index 26509c9..2db5878 100644 --- a/lib/HUPANunalnCtgLSF.pm +++ b/lib/HUPANunalnCtgLSF.pm @@ -66,10 +66,7 @@ $quast_dir.="/" unless($quast_dir=~/\/$/); $out_dir.="/" unless($out_dir=~/\/$/); #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the - output directory should not exist. -"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); } my $thread_num=1; @@ -224,10 +221,7 @@ $out.="/" unless($out=~/\/$/); ##Check existence of output directory if(-e $out){ - die("Error: output directory \"$out\" already exists. - To avoid overwriting of existing files. We kindly request that the - output directory should not exist. - "); + die("Error: output directory \"$out\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); } mkdir($out); diff --git a/lib/HUPANunalnCtgSLURM.pm b/lib/HUPANunalnCtgSLURM.pm index 5a72f52..c12f9c7 100644 --- a/lib/HUPANunalnCtgSLURM.pm +++ b/lib/HUPANunalnCtgSLURM.pm @@ -66,10 +66,7 @@ $quast_dir.="/" unless($quast_dir=~/\/$/); $out_dir.="/" unless($out_dir=~/\/$/); #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the - output directory should not exist. -"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); } my $thread_num=1; @@ -226,10 +223,7 @@ $out.="/" unless($out=~/\/$/); ##Check existence of output directory if(-e $out){ - die("Error: output directory \"$out\" already exists. - To avoid overwriting of existing files. We kindly request that the - output directory should not exist. - "); + die("Error: output directory \"$out\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); } mkdir($out); From dac7f7ecbe427c26b44e111b1bfaa7c0e2ebda0a Mon Sep 17 00:00:00 2001 From: Zhongqu Duan Date: Thu, 9 Apr 2020 18:16:45 +0800 Subject: [PATCH 32/45] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 652f4c2..c388ba4 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -#HUPAN +# HUPAN: HUman Pan-genome ANalysis --- @@ -137,6 +137,7 @@ ii. If the reads are not so good, the users could trim or filter low-quality rea hupanSLURM trim -w 100 -m 100 data/ filter/ /path/to/Trimmomatic Results could be found in the trim or filter directory. + iii.After trimming or filtration of reads, the sequencing quality should be evaluated again by `qualitySta`, and if the trimming results are still not good for subsequent analyses, new parameters should be given and the above steps should be conducted for several times. **(3) *De novo* assembly of individual genomes** From 9a1face35047334b0e3959678fe45465e4d1e82f Mon Sep 17 00:00:00 2001 From: Zhongqu Duan Date: Thu, 9 Apr 2020 18:19:30 +0800 Subject: [PATCH 33/45] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c388ba4..85f338e 100644 --- a/README.md +++ b/README.md @@ -138,7 +138,7 @@ ii. If the reads are not so good, the users could trim or filter low-quality rea Results could be found in the trim or filter directory. -iii.After trimming or filtration of reads, the sequencing quality should be evaluated again by `qualitySta`, and if the trimming results are still not good for subsequent analyses, new parameters should be given and the above steps should be conducted for several times. +iii. After trimming or filtration of reads, the sequencing quality should be evaluated again by `qualitySta`, and if the trimming results are still not good for subsequent analyses, new parameters should be given and the above steps should be conducted for several times. **(3) *De novo* assembly of individual genomes** @@ -277,7 +277,7 @@ Any bugs or suggestions, please contact the [authors][20]. [3]: https://github.com/SJTU-CGM/HUPAN [4]: http://cgm.sjtu.edu.cn/hupan/download.php [5]: http://cgm.sjtu.edu.cn/eupan/ - [6]: ftp://ftp-trace.ncbi.nih.gov/giab/ftp/data/NA12878/NIST_NA12878_HG001_HiSeq_300x/NHGRI_Illumina300X_novoalign_bams/HG001.GRCh38_full_plus_hs38d1_analysis_set_minus_alts.300x.bam + [6]: http://ftp-trace.ncbi.nih.gov/giab/ftp/data/NA12878/NIST_NA12878_HG001_HiSeq_300x/NHGRI_Illumina300X_novoalign_bams/HG001.GRCh38_full_plus_hs38d1_analysis_set_minus_alts.300x.bam [7]: http://cgm.sjtu.edu.cn/hupan/data/hupanExample.tar.gz [8]: http://www.bioinformatics.babraham.ac.uk/projects/fastqc/ [9]: http://www.usadellab.org/cms/index.php?page=trimmomatic From 05beb05c6f121a6a8a2d86e2fbf12d078bb0be4c Mon Sep 17 00:00:00 2001 From: Zhongqu Duan Date: Thu, 9 Apr 2020 18:39:10 +0800 Subject: [PATCH 34/45] Update hupan_cmd.sh --- hupan_cmd.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/hupan_cmd.sh b/hupan_cmd.sh index d68b885..f7630ca 100644 --- a/hupan_cmd.sh +++ b/hupan_cmd.sh @@ -1,10 +1,10 @@ #!/bin/bash IFS=' ' -complete -W "qualSta trim alignRead sam2bam bamSta assemble alignContig extractSeq assemSta getUnalnCtg rmRedundant pTpG geneCov geneExist subSample gFamExist bam2bed fastaSta sim rmCtm blastAlign simSeq splitSeq getTaxClass genePre mergeNovGene" eupan +complete -W "qualSta trim alignRead sam2bam bamSta assemble alignContig extractSeq assemSta getUnalnCtg rmRedundant pTpG geneCov geneExist subSample gFamExist bam2bed fastaSta sim rmCtm blastAlign simSeq splitSeq getTaxClass genePre mergeNovGene" hupan -complete -W "qualSta mergeQualSta trim alignRead sam2bam bamSta assemble alignContig extractSeq assemSta mergeAssemSta getUnalnCtg mergeUnalnCtg rmRedundant pTpG geneCov mergeGeneCov geneExist subSample gFamExist bam2bed fastaSta sim rmCtm blastAlign simSeq splitSeq getTaxClass genePre mergeNovGene" eupanLSF +complete -W "qualSta mergeQualSta trim alignRead sam2bam bamSta assemble alignContig extractSeq assemSta mergeAssemSta getUnalnCtg mergeUnalnCtg rmRedundant pTpG geneCov mergeGeneCov geneExist subSample gFamExist bam2bed fastaSta sim rmCtm blastAlign simSeq splitSeq getTaxClass genePre mergeNovGene" hupanLSF -complete -W "qualSta mergeQualSta trim alignRead sam2bam bamSta assemble alignContig extractSeq assemSta mergeAssemSta getUnalnCtg mergeUnalnCtg rmRedundant pTpG geneCov mergeGeneCov geneExist subSample gFamExist bam2bed fastaSta sim rmCtm blastAlign simSeq splitSeq getTaxClass genePre mergeNovGene" eupanSLURM +complete -W "qualSta mergeQualSta trim alignRead sam2bam bamSta assemble alignContig extractSeq assemSta mergeAssemSta getUnalnCtg mergeUnalnCtg rmRedundant pTpG geneCov mergeGeneCov geneExist subSample gFamExist bam2bed fastaSta sim rmCtm blastAlign simSeq splitSeq getTaxClass genePre mergeNovGene" hupanSLURM From 5c81e6bcbecdbc80a3d8a0eceb7f7a61eb716478 Mon Sep 17 00:00:00 2001 From: Zhongqu Duan Date: Thu, 9 Apr 2020 18:41:24 +0800 Subject: [PATCH 35/45] Update hupan_cmd.sh --- hupan_cmd.sh | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/hupan_cmd.sh b/hupan_cmd.sh index f7630ca..714600b 100644 --- a/hupan_cmd.sh +++ b/hupan_cmd.sh @@ -1,10 +1,9 @@ #!/bin/bash IFS=' ' -complete -W "qualSta trim alignRead sam2bam bamSta assemble alignContig extractSeq assemSta getUnalnCtg rmRedundant pTpG geneCov geneExist subSample gFamExist bam2bed fastaSta sim rmCtm blastAlign simSeq splitSeq getTaxClass genePre mergeNovGene" hupan +complete -W "qualSta trim alignRead sam2bam bamSta assemble alignContig extractSeq assemSta getUnalnCtg rmRedundant pTpG geneCov geneExist subSample gFamExist bam2bed fastaSta sim getTaxClass rmCtm blastAlign simSeq splitSeq genePre mergeNovGene filterNovGene" hupan -complete -W "qualSta mergeQualSta trim alignRead sam2bam bamSta assemble alignContig extractSeq assemSta mergeAssemSta getUnalnCtg mergeUnalnCtg rmRedundant pTpG geneCov mergeGeneCov geneExist subSample gFamExist bam2bed fastaSta sim rmCtm blastAlign simSeq splitSeq getTaxClass genePre mergeNovGene" hupanLSF - -complete -W "qualSta mergeQualSta trim alignRead sam2bam bamSta assemble alignContig extractSeq assemSta mergeAssemSta getUnalnCtg mergeUnalnCtg rmRedundant pTpG geneCov mergeGeneCov geneExist subSample gFamExist bam2bed fastaSta sim rmCtm blastAlign simSeq splitSeq getTaxClass genePre mergeNovGene" hupanSLURM +complete -W "qualSta mergeQualSta trim alignRead sam2bam bamSta assemble alignContig extractSeq assemSta mergeAssemSta getUnalnCtg mergeUnalnCtg rmRedundant pTpG geneCov mergeGeneCov geneExist subSample gFamExist bam2bed fastaSta sim getTaxClass rmCtm blastAlign simSeq splitSeq genePre mergeNovGene filterNovGene" hupanLSF +complete -W "qualSta mergeQualSta trim alignRead sam2bam bamSta assemble alignContig extractSeq assemSta mergeAssemSta getUnalnCtg mergeUnalnCtg rmRedundant pTpG geneCov mergeGeneCov geneExist subSample gFamExist bam2bed fastaSta sim getTaxClass rmCtm blastAlign simSeq splitSeq genePre mergeNovGene filterNovGene" hupanSLURM From c1a0d7882e0ca6409b5d4c1b6553f71b7ebef473 Mon Sep 17 00:00:00 2001 From: Zhongqu Duan Date: Fri, 10 Apr 2020 18:25:59 +0800 Subject: [PATCH 36/45] Update .DS_Store --- .DS_Store | Bin 8196 -> 8196 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/.DS_Store b/.DS_Store index d53935f7e64401556071f7f909f2987c50d6533a..f376dcac842103f3fccf38580d5ae45fe7e841ba 100644 GIT binary patch literal 8196 zcmeHMTWl0n7(U;&z)VNlX{~KtE?ul##0FXy3uu64w#0O&Hqa^x5c+vmNnHJho;}eiDCz^aLAL$aVZGgikKlj!28DpcK|a6P}~l}I2dB?S31H6Aj0Knoa9kj1s6e<93ReVM3ssEU7 z&X5oo)?o(149w2}pFSnbVkXOEhOghhTc+zZHT{f8N$H}+OC+gGDqC81Bz?>oPJ5bH zaFbfTkKc7@-my&3?sOb$rmbZTn#S;eTAgxiPcv;J?>n2iK_-X0OW9B0}(0 zU=?#BeB)YpmRn4TvVW>nW8L>?rz&tv$uUfRST|hz_2vWEE=tvXSf4u zg-fxvWgWXCZxku6?yO@KhHTPQW;H8YAY)^vWu?s%!aAFGEUUwDP0w`fLp`2x+~Ydl z(JWO@uj}N!l;2s8N&O3}Dn7>k9CvmP8hMvcmd}*eE?>2J{l-mOx2L8m)XFNQTB+$S zny#6#jILo*_l_OX+^k{irhT-R@@aeK6Q+@uDeh3Wo`5US=FRYm*Ns#G%6cp z)s;J+q?apPo0Yhv>T;K*WeiJ*T9hr4x>xQlim-(6QDvJ{iAK36>kJLibGt&Eh$bcV zd#Rs~-LARb{+wac@H~pvmC@)SF5ju^hAv4`Lt^l2|Lr#<)(I9g2w_LlMtl9H;OsPUB^~g4Z#DcX0+E;v;;Fukamy z!g*Z46n?`WxQr{}2_w@?-Z%a50&$fvn5e|$;GiusabqUe`%GSQ+cNoLIj8U4)%VoY z##XQ25Z|&bIrHY{yzE(gyq<(U?*y@Y!c7xO5S>WAZ21bMzKf`69G^QmrYDWMgp*F1 z;?}F~tFKo%+r;gfwe^Y$nh>(DeQ+&lBY|#X6X{Bb`$D(rVWnPOL^KzkTOUyrwUp+8 z&~D#B+Qr0pp-r`tmhl-W|1Zk^Ct=UA^Xw9l^(y-Zi-@RIMA8`6pb;(Djs#L@#V$OC z4je!lokY^VQLArS1cH;tl7pi6*1knA=ABNP9ktz2{1UN2`Bvfwt UK>+`89IpQs!u8+h-!vFvP literal 8196 zcmeHMTWl0n7(U;&z?pVnrxoo5H@me|5KHJnEkOjg7tlhH%C@vzWSQL=>F9K(?96U~ zQc_7YUP8n-1fx9oqC}&{OT4_Pi6O=psstm6@}MtX9yBU1>OXU)rKR+Z7!u|r=ltjV z|2hAE&Nttg*>jdLhPHy1WUQJo#wmMJDW~EZ$+LTTMv4TQQj(zY%o)m>c9vRavqLj_ zhl&t^5P=YZ5P=YZ5P=&30s3ZpiO=%g7uK*05eN~uDG~7A4++YiOa*dGNdMJAg?|Jf z=^X+5M0LfhkW2(J7059m$wCQYC`mCC!4U&uIO!8Xzf>T{gcQRWg2M-b$Ouj-@S~Ie zgx{SZC1hBJ2!sgCM8MlVCCp?7%VvkCp5INwahsaXBT`a2XYM@C%Xr!RvPaSb_Hf!& z-GbAm=689mZq*&g2K64>HYe+9cDtbuXOxBQw&kjZrRV*@hNe@O-F=3o*~4vi!O|Sx zPg)o_m$;NsYDPwqP0fvoWU_g*F)@-{wW_5tvASi|=%~c28j|Ze_YNLBG;(HI<(x*oNaaIb7Ez2O>K)|K={G2(H&B6eWgZFNmFRu}8!e1~Uk)ijz_ed^icJ}v4~ zO9egZCs^VGBh{yx0tII=wvu(QF1DBD*$6wvPOvlVUG_fvfPKooWarsM_7nS!{lWfX zf3wSofTI$%s7C|t#1b@N9qva8t=NR^=tDnLWT8RFV{qW2h+!PYlXwbG;~6}U6L=A) z@Dg6d8+a3M;~jjA&u|W3;~SjE_xJ&q@H2kFpZGVzBl9B*#5^MtbbokaA%VV%WU!ry z?!k3jQAdnjj@882R&-zkHexHfu?=bTVh=I_cL!l(Kk~%i!#IL5Jb|Nl z4#$YS$MFJA5_@09D>#kU@Vd|9x9}l8A|8K&&+!$p_&Z#@inUv&vlc&IVQn#;w@lmG zN16$aPwyPIt{Va+!c(<({@*bB{r`1~7di?N2obpP5I|{1x}%NeHQO84J8LH>@1^V| xuiu!E{tzmrT?9~j@()9*C#b78CKbprAxT5&f4>Nr`b#$a{)gXxpM^JH@gKolD%Jo1 From 7ab5aac5065c254ca67f689ae73f0f8cb7fe21d2 Mon Sep 17 00:00:00 2001 From: Zhongqu Duan Date: Fri, 10 Apr 2020 21:38:16 +0800 Subject: [PATCH 37/45] update --- lib/HUPANgeneExist.pm | 2 +- lib/HUPANgeneExistLSF.pm | 2 +- lib/HUPANgeneExistSLURM.pm | 2 +- src/ccov/CCOV.cpp | 6 +++--- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/HUPANgeneExist.pm b/lib/HUPANgeneExist.pm index c9c8548..ff2f96a 100644 --- a/lib/HUPANgeneExist.pm +++ b/lib/HUPANgeneExist.pm @@ -152,7 +152,7 @@ while(){ close EX; print STDERR "Gene family number:",scalar(@group),"\n"; print STDERR "Gene number:",scalar(keys(%geneExt)),"\n"; -print STDERR "Rice line number:",scalar(@riceline),"\n"; +print STDERR "Genome number:",scalar(@riceline),"\n"; ############ end ############ ###### gene fam exist ####### diff --git a/lib/HUPANgeneExistLSF.pm b/lib/HUPANgeneExistLSF.pm index a842e58..c86a73a 100644 --- a/lib/HUPANgeneExistLSF.pm +++ b/lib/HUPANgeneExistLSF.pm @@ -153,7 +153,7 @@ while(){ close EX; print STDERR "Gene family number:",scalar(@group),"\n"; print STDERR "Gene number:",scalar(keys(%geneExt)),"\n"; -print STDERR "Rice line number:",scalar(@riceline),"\n"; +print STDERR "Genome number:",scalar(@riceline),"\n"; ############ end ############ ###### gene fam exist ####### diff --git a/lib/HUPANgeneExistSLURM.pm b/lib/HUPANgeneExistSLURM.pm index ec1cd75..81324e1 100644 --- a/lib/HUPANgeneExistSLURM.pm +++ b/lib/HUPANgeneExistSLURM.pm @@ -152,7 +152,7 @@ while(){ close EX; print STDERR "Gene family number:",scalar(@group),"\n"; print STDERR "Gene number:",scalar(keys(%geneExt)),"\n"; -print STDERR "Rice line number:",scalar(@riceline),"\n"; +print STDERR "Genome number:",scalar(@riceline),"\n"; ############ end ############ ###### gene fam exist ####### diff --git a/src/ccov/CCOV.cpp b/src/ccov/CCOV.cpp index 21a0742..d615849 100644 --- a/src/ccov/CCOV.cpp +++ b/src/ccov/CCOV.cpp @@ -231,10 +231,10 @@ void checkGeneCoverage(map > &mapper, GTF >f){ // cerr << i <<"\t**"<chr].size()<chr][i-1]; + // alength+=mapper[giter->chr][i-1]; if(mapper[giter->chr][i-1]>0){ - slength++; - alength+=mapper[giter->chr][i-1]; + slength++; + alength+=mapper[giter->chr][i-1]; } } giter->geneDep=(double)alength/(double)tlength; From 787bccf2728c003eb425c7d9375fb7ea3cd09c94 Mon Sep 17 00:00:00 2001 From: Zhongqu Duan Date: Thu, 16 Apr 2020 00:50:09 +0800 Subject: [PATCH 38/45] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 85f338e..2570524 100644 --- a/README.md +++ b/README.md @@ -187,9 +187,9 @@ v. Non-reference sequences from multiple individuals are merged: mv Unalign_result/total/ mergeUnalnCtg_result -**(5) Remove redundancy and potential commination sequences** +**(5) Remove redundancy and potential contamination sequences** -After obtaining the non-reference sequences from multiple individuals, redundant sequences between different individuals should be excluded, and the potential commination sequences from non-human species are also removed for further analysis. +After obtaining the non-reference sequences from multiple individuals, redundant sequences between different individuals should be excluded, and the potential contamination sequences from non-human species are also removed for further analysis. i. The step of remove redundancy sequences is conducted by [CDHIT][14] for fully unaligned sequences and partially unaligned sequences, respectively: From 70b2685c91649b7f494d7f94be4dca4a5f30f4a4 Mon Sep 17 00:00:00 2001 From: Zhongqu Duan Date: Thu, 16 Apr 2020 20:18:22 +0800 Subject: [PATCH 39/45] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 2570524..04a2c09 100644 --- a/README.md +++ b/README.md @@ -206,6 +206,9 @@ ii. Then the non-redundant sequences are aligned to NCBI’s non-redundant nucle iii. According to the alignment result, the taxonomic classification of each sequences (if have) could be obtained: + wget ftp://ftp.ncbi.nlm.nih.gov/pub/taxonomy/accession2taxid/nucl_gb.accession2taxid + wget https://ftp.ncbi.nlm.nih.gov/pub/taxonomy/new_taxdump/new_taxdump.tar.gz & tar -zvxf new_taxdump.tar.gz + mkdir info & mv nucl_gb.accession2taxid info & mv new_taxdump/rankedlineage.dmp info hupanSLURM getTaxClass rmRedundant_blast/data/rmRedundant.fully.unaligned/non-redundant.blast info/ TaxClass_fully hupanSLURM getTaxClass rmRedundant_blast/data/rmRedundant.partially.unaligned/non-redundant.blast info/ TaxClass_partially From ff6cdfe5c42b705ef32763b5603b8b8ad674a04a Mon Sep 17 00:00:00 2001 From: Zhongqu Duan Date: Fri, 17 Apr 2020 17:24:25 +0800 Subject: [PATCH 40/45] Update README.md --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 04a2c09..965df35 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ The human reference genome is still incomplete, especially for those population-specific or individual-specific regions, which may have important functions. It encourages us to build the pan-genome of human population. Previously, our team developed a "map-to-pan" strategy, [EUPAN][1], specific for eukaryotic pan-genome analysis. However, due to the large genome size of individual human genome, [EUPAN][2] is not suit for pan-genome analysis involving in hundreds of individual genomes. Here, we present an improved tool, HUPAN (HUman Pan-genome ANalysis), for human pan-genome analysis. -The HUPAN hompage is http://cgm.sjtu.edu.cn/hupan/ +The HUPAN homepage is http://cgm.sjtu.edu.cn/hupan/ The HUPAN paper is available at https://genomebiology.biomedcentral.com/articles/10.1186/s13059-019-1751-y @@ -19,9 +19,11 @@ The HUPAN paper is available at https://genomebiology.biomedcentral.com/articles R is utilized for visualization and statistical tests in HUPAN toolbox. Please install R first and make sure R and Rscript are under your PATH. - - R packages Several R packages are needed including ggplot2, reshape2 - and ape packages. Follow the Installation step, - - or you can install the packages by yourself. + + - R packages + + Several R packages are needed including ggplot2, reshape2 + and ape packages. Follow the Installation step, or you can install the packages by yourself. **Installation procedures** @@ -30,9 +32,7 @@ The HUPAN paper is available at https://genomebiology.biomedcentral.com/articles `git clone git@github.com:SJTU-CGM/HUPAN.git` - Alternatively, you also could obtain the toolbox in the [HUPAN][4] - website; - - - Please uncompress the HUPAN toolbox package: + website and uncompress the HUPAN toolbox package: `tar zxvf HUPAN-v**.tar.gz` From 67bfd045e25449e3be0ce6fae4be9000867e4a57 Mon Sep 17 00:00:00 2001 From: Zhongqu Duan Date: Sun, 26 Apr 2020 00:37:24 +0800 Subject: [PATCH 41/45] update --- README.md | 9 ++- lib/HUPANassem.pm | 89 +++++++++++++++------------ lib/HUPANassemLSF.pm | 106 ++++++++++++++++++--------------- lib/HUPANassemSLURM.pm | 89 +++++++++++++++------------ lib/HUPANassemSta.pm | 13 ++-- lib/HUPANassemStaLSF.pm | 21 +++---- lib/HUPANassemStaSLURM.pm | 21 +++---- lib/HUPANbam2bed.pm | 15 ++--- lib/HUPANbam2bedLSF.pm | 31 +++++----- lib/HUPANbam2bedSLURM.pm | 39 ++++++------ lib/HUPANbamSta.pm | 16 ++--- lib/HUPANbamStaLSF.pm | 30 ++++------ lib/HUPANbamStaSLURM.pm | 30 ++++------ lib/HUPANblastAlign.pm | 10 ++-- lib/HUPANblastAlignLSF.pm | 12 ++-- lib/HUPANblastAlignSLURM.pm | 8 +-- lib/HUPANfilterNovGene.pm | 4 +- lib/HUPANfilterNovGeneLSF.pm | 4 +- lib/HUPANfilterNovGeneSLURM.pm | 4 +- lib/HUPANgeneCov.pm | 13 ++-- lib/HUPANgeneCovLSF.pm | 13 ++-- lib/HUPANgeneCovSLURM.pm | 13 ++-- lib/HUPANgenePre.pm | 2 +- lib/HUPANgenePreLSF.pm | 2 +- lib/HUPANgenePreSLURM.pm | 2 +- lib/HUPANgetTaxClass.pm | 2 +- lib/HUPANgetTaxClassLSF.pm | 2 +- lib/HUPANgetTaxClassSLURM.pm | 2 +- lib/HUPANmap.pm | 6 +- lib/HUPANmapLSF.pm | 6 +- lib/HUPANmapSLURM.pm | 6 +- lib/HUPANmergeNovGene.pm | 2 +- lib/HUPANmergeNovGeneLSF.pm | 2 +- lib/HUPANmergeNovGeneSLURM.pm | 2 +- lib/HUPANqualSta.pm | 15 ++--- lib/HUPANqualStaLSF.pm | 14 ++--- lib/HUPANqualStaSLURM.pm | 14 ++--- lib/HUPANrmContaminate.pm | 4 +- lib/HUPANrmContaminateLSF.pm | 4 +- lib/HUPANrmContaminateSLURM.pm | 4 +- lib/HUPANrmHigh.pm | 50 +++++++--------- lib/HUPANrmHighLSF.pm | 56 ++++++++--------- lib/HUPANrmHighSLURM.pm | 45 +++++++------- lib/HUPANrmRdt.pm | 4 +- lib/HUPANrmRdtLSF.pm | 4 +- lib/HUPANrmRdtSLURM.pm | 4 +- lib/HUPANsamToBam.pm | 17 +++--- lib/HUPANsamToBamLSF.pm | 22 ++++--- lib/HUPANsamToBamSLURM.pm | 20 +++---- lib/HUPANsim.pm | 8 +-- lib/HUPANsimLSF.pm | 8 +-- lib/HUPANsimSLURM.pm | 8 +-- lib/HUPANsimSeq.pm | 11 ++-- lib/HUPANsimSeqLSF.pm | 11 ++-- lib/HUPANsimSeqSLURM.pm | 10 ++-- lib/HUPANsplitSeq.pm | 2 +- lib/HUPANsplitSeqLSF.pm | 2 +- lib/HUPANsplitSeqSLURM.pm | 2 +- lib/HUPANtrim.pm | 21 +++---- lib/HUPANtrimLSF.pm | 22 +++---- lib/HUPANtrimSLURM.pm | 21 ++++--- lib/HUPANunalnCtg.pm | 11 ++-- lib/HUPANunalnCtgLSF.pm | 16 ++--- lib/HUPANunalnCtgSLURM.pm | 16 ++--- src/perl/linearK.pl | 10 ++-- 65 files changed, 533 insertions(+), 549 deletions(-) diff --git a/README.md b/README.md index 965df35..0d6ec02 100644 --- a/README.md +++ b/README.md @@ -236,13 +236,12 @@ iii. Then after all procedures are finished, the outcomes are merged: iv. The new predicted genes may be highly similar to the genes that are located in reference genome, and additional filtering step should be conducted to ensure the novelty of predicted gene: - hupanSLURM filterNovGen GenePre_merge GenePre_filter /path/to/reference/ /path/to/blast /path/to/cdhit /path/to/RepeatMask + hupanSLURM filterNovGene GenePre_merge GenePre_filter /path/to/reference/ /path/to/blast /path/to/cdhit /path/to/RepeatMask v. The annotation of pan-genome sequences is simply merged to obtain by combine two annotation files: - - hupanSLURM pTpG ref/ref.gtf ref/ref-ptpg.gtf - cat ref/ref-ptpg.gtf non-reference.gtf >pan/pan.gtf + hupanSLURM pTpG ref/ref.gff ref/ref-ptpg.gff + cat ref/ref-ptpg.gff non-reference.gtf >pan/pan.gff **(7) PAV analysis** @@ -260,7 +259,7 @@ ii. The result of .sam should be converted to .bam and sorted and indexed use [S iii. Then the gene body coverage and the cds coverage of each gene are calculated: - hupanSLURM geneCov panBam/data geneCov/ pan/pan.gtf + hupanSLURM geneCov panBam/data geneCov/ pan/pan.gff iv. Finally, the gene presence-absence is determined by the threshold of cds coverage as 95%: diff --git a/lib/HUPANassem.pm b/lib/HUPANassem.pm index 599a9db..4de5a2b 100644 --- a/lib/HUPANassem.pm +++ b/lib/HUPANassem.pm @@ -2,6 +2,8 @@ #Created by Hu Zhiqiang, 2014-9-5 #Modefied by Duan Zhongqu, 2018-7-2 #Added the function of de novo assembly by sga with lower memory. +#Modefied by Duan Zhongqu, 2020-4-25 +#Fix some bugs, for example, the suffix of sequencing data files. package assembly; @@ -45,29 +47,29 @@ hupan assemble soapdenovo is used to assemble high-quality reads on large scale. Necessary input description: fastq_data_directory This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. + named by sample names, such as Sample1, Sample2,etc. In each sub-directory, there should be several - sequencing files ended by .fastq or .fastq.gz. + sequencing files ended by \".fq.gz\" or \".fastq.gz\". output_directory Alignment results will be output to this directory. - To avoid overwriting of existing files. We kindly request + To avoid overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. - sopadenovo_directory directory where soapdenovo2 executable files exists + sopadenovo_directory Directory where soapdenovo2 executable files exists Options: - -h Print this usage page. + -h Print this usage page. - -t Threads used. - Default: 1 + -t Threads used. + Default: 1 -s Suffix of files within data_directory. - Default: .fq.gz + Default: \".fastq.gz\" - -k Kmer. - Default: 35 + -k Kmer. + Default: 35 -c Parameters of soapdenovo2 config file. 8 parameters ligated by comma 1)maximal read length @@ -82,7 +84,7 @@ Options: (at least 32 for short insert size) Default: 80,460,0,3,80,1,3,32 - -g enable gapcloser + -g Enable gapcloser "; die $usage if @ARGV!=3; @@ -91,7 +93,7 @@ my ($data_dir,$out_dir,$tool_dir)=@ARGV; #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } $tool_dir.="/" unless $tool_dir=~/\/$/; @@ -113,7 +115,7 @@ my $kmer=35; $kmer=$opt_k if defined $opt_k; #define file suffix -my $suffix=".fq.gz"; +my $suffix=".fastq.gz"; $suffix=$opt_s if defined($opt_s); my ($max_rd_len,$avg_ins,$reverse_seq,$asm_flags,$rd_len_cutoff,$rank,$pair_num_cutoff,$map_len) @@ -259,29 +261,29 @@ hupan assmble linearK is used to assemble high-quality reads on large scale. Necessary input description: fastq_data_directory This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. + named by sample names, such as Sample1, Sample2,etc. In each sub-directory, there should be several - sequencing files ended by .fastq or .fastq.gz. + sequencing files ended by \".fq.gz\" or \".fastq.gz\". output_directory Alignment results will be output to this directory. - To avoid overwriting of existing files. We kindly request + To avoid overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. - sopadenovo_directory directory where soapdenovo2 executable files exists + sopadenovo_directory Directory where soapdenovo2 executable files exists Options: - -h Print this usage page. + -h Print this usage page. - -t Threads used. - Default: 1 + -t Threads used. + Default: 1 -g Genome size. Used to infer sequencing depth. - Default: 380000000 (460M) + Default: 3000000000 (3G) -s Suffix of files within data_directory. - Default: .fq.gz + Default: \".fastq.gz\" -r Parameters of linear function: Kmer=2*int(0.5*(a*Depth+b))+1. The parameter should be input as \"a,b\". @@ -325,7 +327,7 @@ my ($data_dir,$out_dir,$soapdenovo)=@ARGV; #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist\n."); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist\n."); } #Check executable linearK.pl my $exec="linearK.pl"; @@ -390,8 +392,8 @@ use strict; use warnings; use Cwd 'abs_path'; use Getopt::Std; -use vars qw($opt_h $opt_t $opt_d $opt_m); -getopts("ht:d:m:"); +use vars qw($opt_h $opt_t $opt_d $opt_m $opt_s); +getopts("ht:d:m:s:"); my $usage="\nUsage: hupan assemble sga [options] @@ -400,12 +402,12 @@ hupan assemble sga is used to assemble high-quality reads on large scale. Necessary input description: fastq_data_directory This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. + named by sample names, such as Sample1, Sample2,etc. In each sub-directory, there should be several - sequencing files ended by fastq.gz. + sequencing files ended by \".fastq.gz\" or \".fq.gz\". output_directory Alignment results will be output to this directory. - To avoid overwriting of existing files. We kindly request + To avoid overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. @@ -418,8 +420,11 @@ Options: -t Threads used. Default: 1. + -s Suffix of files within data_directory. + Default: \".fastq.gz\" + -d The parameter sets used for different depths of sequencing - data. We obtained two optimatial paramter sets from + data, we obtained two optimatial paramter sets from simulated data for 30-fold and 60-fold, respectively. Default: 30. @@ -441,7 +446,7 @@ my $cmd_dir=$ENV{'PWD'}; #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists.To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists.To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } #Check executable sga @@ -455,6 +460,10 @@ if(defined($opt_t)){ $thread_num=$opt_t; } +#define file suffix +my $suffix=".fastq.gz"; +$suffix=$opt_s if defined($opt_s); + #define depth my $depth=30; $depth=$opt_d if defined $opt_d; @@ -490,9 +499,9 @@ foreach my $s (@sample){ foreach my $f (@files){ next if $f=~/^\.+$/; next if $f=~/^single/; - print STDERR "Warnig: $f without suffix: fastq.gz\n" unless $f=~/fastq.gz$/; - next unless $f=~/fastq.gz$/; - my $fb=substr($f,0,length($f)-length(".fastq.gz")-1); + print STDERR "Warnig: $f without suffix: $suffix\n" unless $f=~/$suffix$/; + next unless $f=~/$suffix$/; + my $fb=substr($f,0,length($f)-length($suffix)-1); #print $fb."\n"; push @fq_base, $fb; } @@ -508,8 +517,10 @@ foreach my $s (@sample){ if($length==1){ my $b=$fq_base[0]; $preprocess_fastq=$o_dir.$s.".fastq"; - $fastq1=$s_dir.$b."1.fastq.gz"; - $fastq2=$s_dir.$b."2.fastq.gz"; + $fastq1=$s_dir.$b."1".$suffix; + $fastq2=$s_dir.$b."2".$suffix; + die("Error: missed file: $fastq1\n") unless -e $fastq1; + die("Error: missed file: $fastq2\n") unless -e $fastq2; $com="$sga preprocess -o $preprocess_fastq --pe-mode 1 $fastq1 $fastq2\n"; $com.="$sga index -a ropebwt --no-reverse -t $thread_num $preprocess_fastq\n"; } @@ -517,10 +528,10 @@ foreach my $s (@sample){ my @list; my $merge_prefix=$o_dir.$s; foreach my $b (@fq_base){ - $fastq1=$s_dir.$b."1.fastq.gz"; - $fastq2=$s_dir.$b."2.fastq.gz"; - print STDERR "Warning: missed file: $fastq1\n" unless -e $fastq1; - print STDERR "Warning: missed file: $fastq2\n" unless -e $fastq2; + $fastq1=$s_dir.$b."1".$suffix; + $fastq2=$s_dir.$b."2".$suffix; + die("Error: missed file: $fastq1\n") unless -e $fastq1; + die("Error: missed file: $fastq2\n") unless -e $fastq2; $preprocess_fastq=$s_dir.$s.".fastq"; $com="$sga preprocess -o $preprocess_fastq --pe-mode 1 $fastq1 $fastq2\n"; $com.="$sga index -a ropebwt --no-reverse -t $thread_num $preprocess_fastq\n"; diff --git a/lib/HUPANassemLSF.pm b/lib/HUPANassemLSF.pm index 31e9bf1..3b161b7 100644 --- a/lib/HUPANassemLSF.pm +++ b/lib/HUPANassemLSF.pm @@ -2,6 +2,8 @@ #Created by Hu Zhiqiang, 2014-9-5 #Modefied by Duan Zhongqu, 2018-7-2 #Added the function of de novo assembly by sga with lower memory. +#Modefied by Duan Zhongqu, 2020-4-25 +#Fix some bugs, for example, the suffix of sequencing data files. package assembly; @@ -45,29 +47,29 @@ hupanLSF assemble soapdenovo is used to assemble high-quality reads on large sca Necessary input description: fastq_data_directory This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. + named by sample names, such as Sample1, Sample2,etc. In each sub-directory, there should be several - sequencing files ended by .fastq or .fastq.gz. + sequencing files ended by \".fq.gz\" or \".fastq.gz\". output_directory Alignment results will be output to this directory. - To avoid overwriting of existing files. We kindly request + To avoid overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. - sopadenovo_directory directory where soapdenovo2 executable files exists + sopadenovo_directory Directory where soapdenovo2 executable files exists Options: - -h Print this usage page. + -h Print this usage page. - -t Threads used. - Default: 1 + -t Threads used. + Default: 1 -s Suffix of files within data_directory. - Default: .fq.gz + Default: .fastq.gz - -k Kmer. - Default: 35 + -k Kmer. + Default: 35 -c Parameters of soapdenovo2 config file. 8 parameters ligated by comma 1)maximal read length @@ -82,7 +84,7 @@ Options: (at least 32 for short insert size) Default: 80,460,0,3,80,1,3,32 - -g enable gapcloser + -g Enable gapcloser -q The queue name for job submiting. Default: default queue @@ -94,7 +96,7 @@ my ($data_dir,$out_dir,$tool_dir)=@ARGV; #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } $tool_dir.="/" unless $tool_dir=~/\/$/; @@ -116,7 +118,7 @@ my $kmer=35; $kmer=$opt_k if defined $opt_k; #define file suffix -my $suffix=".fq.gz"; +my $suffix=".fastq.gz"; $suffix=$opt_s if defined($opt_s); my ($max_rd_len,$avg_ins,$reverse_seq,$asm_flags,$rd_len_cutoff,$rank,$pair_num_cutoff,$map_len) @@ -238,29 +240,29 @@ hupanLSF assmble linearK is used to assemble high-quality reads on large scale. Necessary input description: fastq_data_directory This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. + named by sample names, such as Sample1, Sample2,etc. In each sub-directory, there should be several - sequencing files ended by .fastq or .fastq.gz. + sequencing files ended by \".fq.gz\" or \".fastq.gz\". output_directory Alignment results will be output to this directory. - To avoid overwriting of existing files. We kindly request + To avoid overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. - sopadenovo_directory directory where soapdenovo2 executable files exists + sopadenovo_directory Directory where soapdenovo2 executable files exists Options: - -h Print this usage page. + -h Print this usage page. - -t Threads used. - Default: 1 + -t Threads used. + Default: 1 -g Genome size. Used to infer sequencing depth. - Default: 380000000 (460M) + Default: 3000000000 (3G) -s Suffix of files within data_directory. - Default: .fq.gz + Default: .fastq.gz -r Parameters of linear function: Kmer=2*int(0.5*(a*Depth+b))+1. The parameter should be input as \"a,b\". @@ -296,6 +298,7 @@ Options: -m The number of consecutive Ns to be broken down to contigs.This is used in the process break gapclosed scaffolds to contigs. Default: 10. + -q The queue name for job submiting. Default: default queue "; @@ -306,7 +309,7 @@ my ($data_dir,$out_dir,$soapdenovo)=@ARGV; #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } #Check executable linearK.pl my $exec="linearK.pl"; @@ -399,8 +402,8 @@ use strict; use warnings; use Cwd 'abs_path'; use Getopt::Std; -use vars qw($opt_h $opt_t $opt_d $opt_q $opt_m); -getopts("ht:d:q:m:"); +use vars qw($opt_h $opt_t $opt_d $opt_q $opt_m $opt_s); +getopts("ht:d:q:m:s:"); my $usage="\nUsage: hupanLSF assemble sga [options] @@ -409,12 +412,12 @@ hupanLSF assemble sga is used to assemble high-quality reads on large scale. Necessary input description: fastq_data_directory This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. + named by sample names, such as Sample1, Sample2,etc. In each sub-directory, there should be several - sequencing files ended by fastq.gz. + sequencing files ended by \".fastq.gz\" or \".fq.gz\". output_directory Alignment results will be output to this directory. - To avoid overwriting of existing files. We kindly request + To avoid overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. @@ -422,18 +425,21 @@ Necessary input description: sga_directory Directory where sga executable files exists Options: - -h Print this usage page. + -h Print this usage page. + + -t Threads used. + Default: 1. - -t Threads used. - Default: 1. + -s Suffix of files within data_directory. + Default: \".fastq.gz\" - -d The parameter sets used for different depths of sequencing - data. We obtained two optimatial paramter sets from - simulated data for 30-fold and 60-fold, respectively. - Default: 30. + -d The parameter sets used for different depths of sequencing + data, we obtained two optimatial paramter sets from + simulated data for 30-fold and 60-fold, respectively. + Default: 30. - -q The queue name for job submiting. - Default: default queue + -q The queue name for job submiting. + Default: default queue -m The intermediate results are huge and we kindly suggested delete them after finishing each steps. If you want to keep @@ -452,7 +458,7 @@ my $cmd_dir=$ENV{'PWD'}; #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } #Check executable sga @@ -466,6 +472,10 @@ if(defined($opt_t)){ $thread_num=$opt_t; } +#define file suffix +my $suffix=".fastq.gz"; +$suffix=$opt_s if defined($opt_s); + #define depth my $depth=30; $depth=$opt_d if defined $opt_d; @@ -501,9 +511,9 @@ foreach my $s (@sample){ foreach my $f (@files){ next if $f=~/^\.+$/; next if $f=~/^single/; - print STDERR "Warnig: $f without suffix: fastq.gz\n" unless $f=~/fastq.gz$/; - next unless $f=~/fastq.gz$/; - my $fb=substr($f,0,length($f)-length(".fastq.gz")-1); + print STDERR "Warnig: $f without suffix: $suffix\n" unless $f=~/$suffix$/; + next unless $f=~/$suffix$/; + my $fb=substr($f,0,length($f)-length($suffix)-1); #print $fb."\n"; push @fq_base, $fb; } @@ -519,8 +529,10 @@ foreach my $s (@sample){ if($length==1){ my $b=$fq_base[0]; $preprocess_fastq=$o_dir.$s.".fastq"; - $fastq1=$s_dir.$b."1.fastq.gz"; - $fastq2=$s_dir.$b."2.fastq.gz"; + $fastq1=$s_dir.$b."1".$suffix; + $fastq2=$s_dir.$b."2".$suffix; + die("Error: missed file: $fastq1\n") unless -e $fastq1; + die("Error: missed file: $fastq2\n") unless -e $fastq2; $com="$sga preprocess -o $preprocess_fastq --pe-mode 1 $fastq1 $fastq2\n"; $com.="$sga index -a ropebwt --no-reverse -t $thread_num $preprocess_fastq\n"; } @@ -528,10 +540,10 @@ foreach my $s (@sample){ my @list; my $merge_prefix=$o_dir.$s; foreach my $b (@fq_base){ - $fastq1=$s_dir.$b."1.fastq.gz"; - $fastq2=$s_dir.$b."2.fastq.gz"; - print STDERR "Warning: missed file: $fastq1\n" unless -e $fastq1; - print STDERR "Warning: missed file: $fastq2\n" unless -e $fastq2; + $fastq1=$s_dir.$b."1".$suffix; + $fastq2=$s_dir.$b."2".$suffix; + die("Error: missed file: $fastq1\n") unless -e $fastq1; + die("Error: missed file: $fastq2\n") unless -e $fastq2; $preprocess_fastq=$s_dir.$s.".fastq"; $com="$sga preprocess -o $preprocess_fastq --pe-mode 1 $fastq1 $fastq2\n"; $com.="$sga index -a ropebwt --no-reverse -t $thread_num $preprocess_fastq\n"; diff --git a/lib/HUPANassemSLURM.pm b/lib/HUPANassemSLURM.pm index 113254c..72805b1 100644 --- a/lib/HUPANassemSLURM.pm +++ b/lib/HUPANassemSLURM.pm @@ -2,6 +2,9 @@ #Created by Hu Zhiqiang, 2014-9-5 #Modefied by Duan Zhongqu, 2018-7-2 #Added the function of de novo assembly by sga with lower memory. +#Modefied by Duan Zhongqu, 2020-4-25 +#Fix some bugs, for example, the suffix of sequencing data files. + package assembly; sub assemble{ @@ -44,29 +47,29 @@ hupanSLURM assemble soapdenovo is used to assemble high-quality reads on large s Necessary input description: fastq_data_directory This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. + named by sample names, such as Sample1, Sample2,etc. In each sub-directory, there should be several - sequencing files ended by .fastq or .fastq.gz. + sequencing files ended by \".fq.gz\" or \".fastq.gz\". output_directory Alignment results will be output to this directory. - To avoid overwriting of existing files. We kindly request + To avoid overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. - sopadenovo_directory directory where soapdenovo2 executable files exists + sopadenovo_directory Directory where soapdenovo2 executable files exists Options: - -h Print this usage page. + -h Print this usage page. - -t Threads used. - Default: 1 + -t Threads used. + Default: 1 -s Suffix of files within data_directory. - Default: .fq.gz + Default: \".fastq.gz\" - -k Kmer. - Default: 35 + -k Kmer. + Default: 35 -c Parameters of soapdenovo2 config file. 8 parameters ligated by comma 1)maximal read length @@ -81,7 +84,7 @@ Options: (at least 32 for short insert size) Default: 80,460,0,3,80,1,3,32 - -g enable gapcloser + -g Enable gapcloser -q The queue name for job submiting. Default: default queue @@ -93,7 +96,7 @@ my ($data_dir,$out_dir,$tool_dir)=@ARGV; #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } $tool_dir.="/" unless $tool_dir=~/\/$/; @@ -115,7 +118,7 @@ my $kmer=35; $kmer=$opt_k if defined $opt_k; #define file suffix -my $suffix=".fq.gz"; +my $suffix=".fastq.gz"; $suffix=$opt_s if defined($opt_s); my ($max_rd_len,$avg_ins,$reverse_seq,$asm_flags,$rd_len_cutoff,$rank,$pair_num_cutoff,$map_len) @@ -238,29 +241,29 @@ hupanSLURM assmble linearK is used to assemble high-quality reads on large scale Necessary input description: fastq_data_directory This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. + named by sample names, such as Sample1, Sample2,etc. In each sub-directory, there should be several sequencing files ended by .fastq or .fastq.gz. output_directory Alignment results will be output to this directory. - To avoid overwriting of existing files. We kindly request + To avoid overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. - sopadenovo_directory directory where soapdenovo2 executable files exists + sopadenovo_directory Directory where soapdenovo2 executable files exists Options: - -h Print this usage page. + -h Print this usage page. - -t Threads used. - Default: 1 + -t Threads used. + Default: 1 -g Genome size. Used to infer sequencing depth. - Default: 380000000 (460M) + Default: 3000000000 (3G) -s Suffix of files within data_directory. - Default: .fq.gz + Default: \".fastq.gz\" -r Parameters of linear function: Kmer=2*int(0.5*(a*Depth+b))+1. The parameter should be input as \"a,b\". @@ -296,6 +299,7 @@ Options: -m The number of consecutive Ns to be broken down to contigs.This is used in the process break gapclosed scaffolds to contigs. Default: 10. + -q The queue name for job submiting. Default: default queue "; @@ -306,7 +310,7 @@ my ($data_dir,$out_dir,$soapdenovo)=@ARGV; #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } #Check executable linearK.pl my $exec="linearK.pl"; @@ -399,8 +403,8 @@ use strict; use warnings; use Cwd 'abs_path'; use Getopt::Std; -use vars qw($opt_h $opt_t $opt_d $opt_q $opt_m); -getopts("ht:d:q:m:"); +use vars qw($opt_h $opt_t $opt_d $opt_q $opt_m $opt_s); +getopts("ht:d:q:m:s:"); my $usage="\nUsage: hupan assemble sga [options] @@ -409,12 +413,12 @@ hupan assemble sga is used to assemble high-quality reads on large scale. Necessary input description: fastq_data_directory This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. + named by sample names, such as Sample1, Sample2,etc. In each sub-directory, there should be several - sequencing files ended by fastq.gz. + sequencing files ended by \".fastq.gz\" or \".fq.gz\". output_directory Alignment results will be output to this directory. - To avoid overwriting of existing files. We kindly request + To avoid overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. @@ -427,8 +431,11 @@ Options: -t Threads used. Default: 1. + -s Suffix of files within data_directory. + Default: \".fastq.gz\" + -d The parameter sets used for different depths of sequencing - data. We obtained two optimatial paramter sets from + data, we obtained two optimatial paramter sets from simulated data for 30-fold and 60-fold, respectively. Default: 30. @@ -452,7 +459,7 @@ my $cmd_dir=$ENV{'PWD'}; #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } #Check executable sga @@ -470,6 +477,10 @@ if(defined($opt_t)){ my $depth=30; $depth=$opt_d if defined $opt_d; +#define file suffix +my $suffix=".fastq.gz"; +$suffix=$opt_s if defined($opt_s); + #whether keep the intermediate results my $keep=0; $keep=$opt_m if defined $opt_m; @@ -501,9 +512,9 @@ foreach my $s (@sample){ foreach my $f (@files){ next if $f=~/^\.+$/; next if $f=~/^single/; - print STDERR "Warnig: $f without suffix: fastq.gz\n" unless $f=~/fastq.gz$/; - next unless $f=~/fastq.gz$/; - my $fb=substr($f,0,length($f)-length(".fastq.gz")-1); + print STDERR "Warnig: $f without suffix: $suffix\n" unless $f=~/$suffix$/; + next unless $f=~/$suffix$/; + my $fb=substr($f,0,length($f)-length($suffix)-1); #print $fb."\n"; push @fq_base, $fb; } @@ -519,8 +530,10 @@ foreach my $s (@sample){ if($length==1){ my $b=$fq_base[0]; $preprocess_fastq=$o_dir.$s.".fastq"; - $fastq1=$s_dir.$b."1.fastq.gz"; - $fastq2=$s_dir.$b."2.fastq.gz"; + $fastq1=$s_dir.$b."1".$suffix; + $fastq2=$s_dir.$b."2".$suffix; + die("Error: missed file: $fastq1\n") unless -e $fastq1; + die("Error: missed file: $fastq2\n") unless -e $fastq2; $com="$sga preprocess -o $preprocess_fastq --pe-mode 1 $fastq1 $fastq2\n"; $com.="$sga index -a ropebwt --no-reverse -t $thread_num $preprocess_fastq\n"; } @@ -528,10 +541,10 @@ foreach my $s (@sample){ my @list; my $merge_prefix=$o_dir.$s; foreach my $b (@fq_base){ - $fastq1=$s_dir.$b."1.fastq.gz"; - $fastq2=$s_dir.$b."2.fastq.gz"; - print STDERR "Warning: missed file: $fastq1\n" unless -e $fastq1; - print STDERR "Warning: missed file: $fastq2\n" unless -e $fastq2; + $fastq1=$s_dir.$b."1".$suffix; + $fastq2=$s_dir.$b."2".$suffix; + die("Error: missed file: $fastq1\n") unless -e $fastq1; + die("Error: missed file: $fastq2\n") unless -e $fastq2; $preprocess_fastq=$s_dir.$s.".fastq"; $com="$sga preprocess -o $preprocess_fastq --pe-mode 1 $fastq1 $fastq2\n"; $com.="$sga index -a ropebwt --no-reverse -t $thread_num $preprocess_fastq\n"; diff --git a/lib/HUPANassemSta.pm b/lib/HUPANassemSta.pm index 3cc0f01..e12d614 100644 --- a/lib/HUPANassemSta.pm +++ b/lib/HUPANassemSta.pm @@ -18,12 +18,12 @@ The script will call QUAST program, so the directory where quast.py locates is n Necessary input description: assembly_directory This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. + named by sample names, such as Sample1, Sample2,etc. In each sub-directory, assembly results, including - files *.scafSeq and *.contig, should exist. + files \"*.scafSeq\" and \"*.contig\", should exist. output_directory Results will be output to this directory.To avoid - overwriting of existing files. We kindly request + overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. @@ -43,7 +43,7 @@ Options: -g Check the statistics of gap-closed assemblies if -g is enabled. In the assembly directory of each sample, - *_gc.scafSeq and *_gc.contig should exist. + \"*_gc.scafSeq\" and \"*_gc.contig\" should exist. Default: check statistics of raw assemblies -s Check the statistics of assembled scaffolds if -s is enabled. @@ -67,10 +67,7 @@ die("Error02: Cannot find reference sequence file\n") unless(-e $ref); #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the - output directory should not exist. -"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } #Read threads diff --git a/lib/HUPANassemStaLSF.pm b/lib/HUPANassemStaLSF.pm index 4f2306f..4a3219f 100644 --- a/lib/HUPANassemStaLSF.pm +++ b/lib/HUPANassemStaLSF.pm @@ -18,12 +18,12 @@ The script will call QUAST program, so the directory where quast.py locates is n Necessary input description: assembly_directory This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. + named by sample names, such as Sample1, Sample2,etc. In each sub-directory, assembly results, including - files *_gc.scafSeq and *_gc.contig, should exist. + files \"*_gc.scafSeq\" and \"*.contig\", should exist. output_directory Results will be output to this directory.To avoid - overwriting of existing files. We kindly request + overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. @@ -43,7 +43,7 @@ Options: -g Check the statistics of gap-closed assemblies if -g is enabled. In the assembly directory of each sample, - *_gc.scafSeq and *_gc.contig should exist. + \"*_gc.scafSeq\" and \"*_gc.contig\" should exist. Default: check statistics of raw assemblies -s Check the statistics of assembled scaffolds if -s is enabled. @@ -67,10 +67,7 @@ die("Error02: Cannot find reference sequence file\n") unless(-e $ref); #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the - output directory should not exist. -"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } #Read threads @@ -175,11 +172,11 @@ hupan LSF mergeAssemSta is used to collect statistices info of assembly from qua Necessary input description: - QUAST_output_directory_list One or more of quast . + QUAST_output_directory_list One or more of quast output results. - unaligned_contig_list File including a list of names of unaligned contigs. - In each directory, there should be sub directories - named by the sample names. + unaligned_contig_list File including a list of names of unaligned contigs. + In each directory, there should be sub directories + named by the sample names. "; die $usage if @ARGV<1; diff --git a/lib/HUPANassemStaSLURM.pm b/lib/HUPANassemStaSLURM.pm index b1b40a5..e3ce414 100644 --- a/lib/HUPANassemStaSLURM.pm +++ b/lib/HUPANassemStaSLURM.pm @@ -18,12 +18,12 @@ The script will call QUAST program, so the directory where quast.py locates is n Necessary input description: assembly_directory This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. + named by sample names, such as Sample1, Sample2,etc. In each sub-directory, assembly results, including - files *_gc.scafSeq and *_gc.contig, should exist. + files \"*_gc.scafSeq\" and \"*.contig\", should exist. output_directory Results will be output to this directory.To avoid - overwriting of existing files. We kindly request + overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. @@ -43,7 +43,7 @@ Options: -g Check the statistics of gap-closed assemblies if -g is enabled. In the assembly directory of each sample, - *_gc.scafSeq and *_gc.contig should exist. + \"*_gc.scafSeq\" and \"*_gc.contig\" should exist. Default: check statistics of raw assemblies -s Check the statistics of assembled scaffolds if -s is enabled. @@ -67,10 +67,7 @@ die("Error02: Cannot find reference sequence file\n") unless(-e $ref); #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the - output directory should not exist. -"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } #Read threads @@ -176,11 +173,11 @@ hupan SLURM mergeAssemSta is used to collect statistices info of assembly from q Necessary input description: - QUAST_output_directory_list One or more of quast . + QUAST_output_directory_list One or more of quast output results. - unaligned_contig_list File including a list of names of unaligned contigs. - In each directory, there should be sub directories - named by the sample names. + unaligned_contig_list File including a list of names of unaligned contigs. + In each directory, there should be sub directories + named by the sample names. "; die $usage if @ARGV<1; diff --git a/lib/HUPANbam2bed.pm b/lib/HUPANbam2bed.pm index 251c4e1..344be3b 100644 --- a/lib/HUPANbam2bed.pm +++ b/lib/HUPANbam2bed.pm @@ -5,20 +5,20 @@ package bam2cov; sub bam2bed{ use strict; use warnings; -my $usage="\nUsage: hupan bam2bed [options] +my $usage="\nUsage: hupan bam2bed This tool is used to calculate the covered region of the genome. -The outputs are covered fragments without overlap in 3-column .bed format. +The outputs are covered fragments without overlap in 3-column \".bed\" format. Necessary input description: bam_directory This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. - In each sub-directory, mapping result, a sorted .bam + named by sample names, such as Sample1, Sample2,etc. + In each sub-directory, mapping result, a sorted \".bam\" file, should exist. output_directory Results will be output to this directory. To avoid - overwriting of existing files. We kindly request + overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. @@ -46,10 +46,7 @@ die("Executable bam2cov cannot be found in your PATH!\n #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the - output directory should not exist. -"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } #Read threads diff --git a/lib/HUPANbam2bedLSF.pm b/lib/HUPANbam2bedLSF.pm index baa6cdc..b4cc35a 100644 --- a/lib/HUPANbam2bedLSF.pm +++ b/lib/HUPANbam2bedLSF.pm @@ -2,35 +2,39 @@ use strict; use warnings; package bam2cov; use Getopt::Std; -use vars qw($opt_q); -getopts("q:"); +use vars qw($opt_q $opt_h); +getopts("q:h"); sub bam2bed{ use strict; use warnings; -my $usage="\nUsage: hupanLSF bam2bed [options] +my $usage="\nUsage: hupanLSF bam2bed [options] This tool is used to calculate the covered region of the genome. -The outputs are covered fragments without overlap in 3-column .bed format. +The outputs are covered fragments without overlap in 3-column \".bed\" format. Necessary input description: bam_directory This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. - In each sub-directory, mapping result, a sorted .bam + named by sample names, such as Sample1, Sample2,etc. + In each sub-directory, mapping result, a sorted \".bam\" file, should exist. output_directory Results will be output to this directory. To avoid - overwriting of existing files. We kindly request + overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. - -q The queue name for job submiting. - default: default queue +Options: + -h Print this usage page. + + -q The queue name for job submiting. + Default: default queue "; die $usage if @ARGV<2; +die $usage if defined($opt_h); my ($data_dir,$out_dir)=@ARGV; #detect bam2cov @@ -51,10 +55,7 @@ die("Executable bam2cov cannot be found in your PATH!\n #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the - output directory should not exist. -"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } #Read threads @@ -112,7 +113,7 @@ foreach my $s (@sample){ #create job script open(JOB,">$job_file")||die("Error05: Unable to create job file: $job_file\n"); print JOB "\#BSUB -J $s","_bam2bed\n"; #job name - print JOB "\#BSUB -q $opt_q\n" if defined $opt_q; #queue name in the submission system + print JOB "\#BSUB -q $opt_q\n" if defined $opt_q; #queue name in the submission system print JOB "\#BSUB -o $out_file\n"; #stdout print JOB "\#BSUB -e $err_file\n"; #stderr print JOB "\#BSUB -n $thread_num\n"; #thread number @@ -120,8 +121,6 @@ foreach my $s (@sample){ close JOB; system("bsub <$job_file"); #submit job #***************************************************************************************** - - } } 1; diff --git a/lib/HUPANbam2bedSLURM.pm b/lib/HUPANbam2bedSLURM.pm index ff44598..813b8d8 100644 --- a/lib/HUPANbam2bedSLURM.pm +++ b/lib/HUPANbam2bedSLURM.pm @@ -2,35 +2,39 @@ use strict; use warnings; package bam2cov; use Getopt::Std; -use vars qw($opt_q); -getopts("q:"); +use vars qw($opt_q $opt_h); +getopts("q:h"); sub bam2bed{ use strict; use warnings; -my $usage="\nUsage: hupanSLURM bam2bed [options] +my $usage="\nUsage: hupanSLURM bam2bed [options] This tool is used to calculate the covered region of the genome. -The outputs are covered fragments without overlap in 3-column .bed format. +The outputs are covered fragments without overlap in 3-column \".bed\" format. Necessary input description: bam_directory This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. - In each sub-directory, mapping result, a sorted .bam + named by sample names, such as Sample1, Sample2,etc. + In each sub-directory, mapping result, a sorted \".bam\" file, should exist. output_directory Results will be output to this directory. To avoid - overwriting of existing files. We kindly request + overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. - -q The queue name for job submiting. - default: default queue +Options: + -h Print this usage page. + + -q The queue name for job submiting. + Default: default queue "; die $usage if @ARGV<2; +die $usage if defined($opt_h); my ($data_dir,$out_dir)=@ARGV; #detect bam2cov @@ -45,13 +49,12 @@ foreach my $p (@path){ last; } } -die("Executable bam2cov cannot be found in your PATH!\n -") unless($fpflag); +die("Executable bam2cov cannot be found in your PATH!\n") unless($fpflag); #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } #Read threads @@ -88,16 +91,16 @@ foreach my $s (@sample){ my $sd=$data_dir.$s."/"; next unless(-d $sd); print STDERR "Process sample $sd\n"; -#obtain *.bam file within the sample directory + #obtain *.bam file within the sample directory my $bam_file=$sd.$s.".bam"; unless(-e $bam_file){ - print STDERR "Warnings: cannot find bam file($bam_file) in $sd: skip this sample\n"; - next; + print STDERR "Warnings: cannot find bam file($bam_file) in $sd: skip this sample\n"; + next; } -#create output directory for a sample + #create output directory for a sample my $sample_out.=$out_data."$s.bed"; -#generate command + #generate command my $com; $com="$exec $bam_file >$sample_out\n"; @@ -118,8 +121,6 @@ foreach my $s (@sample){ close JOB; system("sbatch $job_file"); #submit job #***************************************************************************************** - - } } 1; diff --git a/lib/HUPANbamSta.pm b/lib/HUPANbamSta.pm index d62c90b..68a6f93 100644 --- a/lib/HUPANbamSta.pm +++ b/lib/HUPANbamSta.pm @@ -41,12 +41,12 @@ The script will call bam_stats (in BamUtil), so the directory where bamUtil loca Necessary input description: bam_directory This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. - In each sub-directory, mapping result, a sorted .bam + named by sample names, such as Sample1, Sample1,etc. + In each sub-directory, mapping result, a sorted \".bam\" file, should exist. output_directory Results will be output to this directory.To avoid - overwriting of existing files. We kindly request + overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. @@ -68,7 +68,7 @@ die("Error01: Cannot find bam_stats file in directory bin/ under $bamutil_dir\n" #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } #Read threads @@ -132,12 +132,12 @@ The script will call qualimap, so the directory where qualimap locates is needed Necessary input description: bam_directory This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. - In each sub-directory, mapping result, a sorted .bam + named by sample names, such as Sample1, Sample2,etc. + In each sub-directory, mapping result, a sorted \".bam\" file, should exist. output_directory Results will be output to this directory.To avoid - overwriting of existing files. We kindly request + overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. @@ -171,7 +171,7 @@ die("Error01: Cannot find qualimap file in directory bin/ under $qualimap_dir\n" #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } #Read threads diff --git a/lib/HUPANbamStaLSF.pm b/lib/HUPANbamStaLSF.pm index c013cf3..79d41aa 100644 --- a/lib/HUPANbamStaLSF.pm +++ b/lib/HUPANbamStaLSF.pm @@ -47,12 +47,12 @@ The script will call bam_stats (in BamUtil), so the directory where bamUtil loca Necessary input description: bam_directory This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. - In each sub-directory, mapping result, a sorted .bam + named by sample names, such as Sample1, Sample2,etc. + In each sub-directory, mapping result, a sorted \".bam\" file, should exist. output_directory Results will be output to this directory.To avoid - overwriting of existing files. We kindly request + overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. @@ -61,8 +61,8 @@ Necessary input description: Options: - -q The queue name for job submiting. - default: default queue + -q The queue name for job submiting. + Default: default queue "; @@ -79,10 +79,7 @@ die("Error01: Cannot find bam_stats file in directory bin/ under $bamutil_dir #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the - output directory should not exist. -"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } #Read threads @@ -169,12 +166,12 @@ The script will call qualimap, so the directory where qualimap locates is needed Necessary input description: bam_directory This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. - In each sub-directory, mapping result, a sorted .bam + named by sample names, such as Sample1, Sample2,etc. + In each sub-directory, mapping result, a sorted \".bam\" file, should exist. output_directory Results will be output to this directory.To avoid - overwriting of existing files. We kindly request + overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. @@ -209,10 +206,7 @@ die("Error01: Cannot find qualimap file in directory bin/ under $qualimap_dir #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the - output directory should not exist. -"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } #Read threads @@ -300,7 +294,7 @@ hupanLSF bamSta mergeBasicSta is used to collect and merge bam basic statistics. Necessary input description: - directory directories of bamUtil results. + directory Directories of bamUtil results. Each directory contains sub-directories named by sample names. data/ directory of bamSta basic output. @@ -377,7 +371,7 @@ hupanLSF bamSta mergeCovSta is used to collect and merge bam coverage statistics Necessary input description: - directory directories of qualimap results. + directory Directories of qualimap results. Each directory contains sub-directories named by sample names. diff --git a/lib/HUPANbamStaSLURM.pm b/lib/HUPANbamStaSLURM.pm index 001841f..1640c69 100644 --- a/lib/HUPANbamStaSLURM.pm +++ b/lib/HUPANbamStaSLURM.pm @@ -47,12 +47,12 @@ The script will call bam_stats (in BamUtil), so the directory where bamUtil loca Necessary input description: bam_directory This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. - In each sub-directory, mapping result, a sorted .bam + named by sample names, such as Sample1, Sample2,etc. + In each sub-directory, mapping result, a sorted \".bam\" file, should exist. output_directory Results will be output to this directory.To avoid - overwriting of existing files. We kindly request + overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. @@ -61,8 +61,8 @@ Necessary input description: Options: - -q The queue name for job submiting. - default: default queue + -q The queue name for job submiting. + Default: default queue "; @@ -79,10 +79,7 @@ die("Error01: Cannot find bam_stats file in directory bin/ under $bamutil_dir #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the - output directory should not exist. -"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } #Read threads @@ -170,12 +167,12 @@ The script will call qualimap, so the directory where qualimap locates is needed Necessary input description: bam_directory This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. - In each sub-directory, mapping result, a sorted .bam + named by sample names, such as Sample1, Sample2,etc. + In each sub-directory, mapping result, a sorted \".bam\" file, should exist. output_directory Results will be output to this directory.To avoid - overwriting of existing files. We kindly request + overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. @@ -210,10 +207,7 @@ die("Error01: Cannot find qualimap file in directory bin/ under $qualimap_dir #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the - output directory should not exist. -"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } #Read threads @@ -302,7 +296,7 @@ hupanSLURM bamSta mergeBasicSta is used to collect and merge bam basic statistic Necessary input description: - directory directories of bamUtil results. + directory Directories of bamUtil results. Each directory contains sub-directories named by sample names. data/ directory of bamSta basic output. @@ -379,7 +373,7 @@ hupanSLURM bamSta mergeCovSta is used to collect and merge bam coverage statisti Necessary input description: - directory directories of qualimap results. + directory Directories of qualimap results. Each directory contains sub-directories named by sample names. diff --git a/lib/HUPANblastAlign.pm b/lib/HUPANblastAlign.pm index b92f5cb..e634ca0 100644 --- a/lib/HUPANblastAlign.pm +++ b/lib/HUPANblastAlign.pm @@ -66,7 +66,7 @@ Options: #check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files. We kindly request that the\n output directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files, we kindly request that the\n output directory should not exist.\n"); } $out_dir.="/" unless $out_dir=~/\/$/; mkdir $out_dir; @@ -109,9 +109,9 @@ hupan blastAlign blast is used to align the sequences from multiple individual i Necessary input description: data_directory This directory should contain many sub-directories - named by sample names, such as CX101, B152, etc. + named by sample names, such as Sample1, Sample2, etc. In each sub-directory, there should be several - sequencing files ended by .fa or .fa.gz. + files ended by \".fa\" or \".fa.gz\". output_directory Output directory. @@ -136,7 +136,7 @@ Options: Default: 10-5 -s Suffix of files within data_directory. - Default: .fa + Default: \".fa\" "; @@ -146,7 +146,7 @@ Options: #check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files. We kindly request that the\n output directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files, we kindly request that the\n output directory should not exist.\n"); } #get the sequence type diff --git a/lib/HUPANblastAlignLSF.pm b/lib/HUPANblastAlignLSF.pm index 6264172..8421fce 100644 --- a/lib/HUPANblastAlignLSF.pm +++ b/lib/HUPANblastAlignLSF.pm @@ -66,7 +66,7 @@ Options: #check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files. We kindly request that the\n output directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files, we kindly request that the\n output directory should not exist.\n"); } $out_dir.="/" unless $out_dir=~/\/$/; mkdir $out_dir; @@ -132,9 +132,9 @@ hupanLSF blastAlign blast is used to align the sequences from multiple individua Necessary input description: data_directory This directory should contain many sub-directories - named by sample names, such as CX101, B152, etc. - In each sub-directory, there should be several - sequencing files ended by .fa or .fa.gz. + named by sample names, such as Sample1, Sample2, etc. + In each sub-directory, there should be several files + ended by \".fa\" or \".fa.gz\". output_directory Output directory. @@ -159,7 +159,7 @@ Options: Default: 10-5 -s Suffix of files within data_directory. - Default: .fa + Default: \".fa\" "; @@ -169,7 +169,7 @@ Options: #check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files. We kindly request that the\n output directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files, we kindly request that the\n output directory should not exist.\n"); } #get the sequence type diff --git a/lib/HUPANblastAlignSLURM.pm b/lib/HUPANblastAlignSLURM.pm index 38e9635..f78c0ba 100644 --- a/lib/HUPANblastAlignSLURM.pm +++ b/lib/HUPANblastAlignSLURM.pm @@ -66,7 +66,7 @@ Options: #check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files. We kindly request that the\n output directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files, we kindly request that the\n output directory should not exist.\n"); } $out_dir.="/" unless $out_dir=~/\/$/; mkdir $out_dir; @@ -133,9 +133,9 @@ hupanSLURM blastAlign blast is used to align the sequences from multiple individ Necessary input description: data_directory This directory should contain many sub-directories - named by sample names, such as CX101, B152, etc. + named by sample names, such as Sample1, Sample2, etc. In each sub-directory, there should be several - sequencing files ended by .fa or .fa.gz. + files ended by \".fa\" or \".fa.gz\". output_directory Output directory. @@ -170,7 +170,7 @@ Options: #check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files. We kindly request that the\n output directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files, we kindly request that the\n output directory should not exist.\n"); } #get the sequence type diff --git a/lib/HUPANfilterNovGene.pm b/lib/HUPANfilterNovGene.pm index 5e95d7b..b8094b0 100644 --- a/lib/HUPANfilterNovGene.pm +++ b/lib/HUPANfilterNovGene.pm @@ -26,7 +26,7 @@ Necessary descriptions: blast_dir The directory of blastn and makeblastdb locates. - cd-hit_dir The directory of cd-hit locates. + cd-hit_dir The directory of cd-hit-est locates. RepeatMask_dir The directory of RepeatMask locates. @@ -50,7 +50,7 @@ Options: #check existense of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files. We kindly request that the \noutput directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files, we kindly request that the \noutput directory should not exist.\n"); } #adjust directory names and create output directory diff --git a/lib/HUPANfilterNovGeneLSF.pm b/lib/HUPANfilterNovGeneLSF.pm index 54e4d6d..34ddd1d 100644 --- a/lib/HUPANfilterNovGeneLSF.pm +++ b/lib/HUPANfilterNovGeneLSF.pm @@ -26,7 +26,7 @@ Necessary descriptions: blast_dir The directory of blastn and makeblastdb locates. - cd-hit_dir The directory of cd-hit locates. + cd-hit_dir The directory of cd-hit-est locates. RepeatMask_dir The directory of RepeatMask locates. @@ -50,7 +50,7 @@ Options: #check existense of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files. We kindly request that the \noutput directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files, we kindly request that the \noutput directory should not exist.\n"); } #adjust directory names and create output directory diff --git a/lib/HUPANfilterNovGeneSLURM.pm b/lib/HUPANfilterNovGeneSLURM.pm index 5cdc9c4..274d7ae 100644 --- a/lib/HUPANfilterNovGeneSLURM.pm +++ b/lib/HUPANfilterNovGeneSLURM.pm @@ -26,7 +26,7 @@ Necessary descriptions: blast_dir The directory of blastn and makeblastdb locates. - cd-hit_dir The directory of cd-hit locates. + cd-hit_dir The directory of cd-hit-est locates. RepeatMask_dir The directory of RepeatMask locates. @@ -50,7 +50,7 @@ Options: #check existense of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files. We kindly request that the \noutput directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files, we kindly request that the \noutput directory should not exist.\n"); } #adjust directory names and create output directory diff --git a/lib/HUPANgeneCov.pm b/lib/HUPANgeneCov.pm index 60722ed..7ecb1cc 100644 --- a/lib/HUPANgeneCov.pm +++ b/lib/HUPANgeneCov.pm @@ -16,17 +16,17 @@ The script will call samtools and ccov. Necessary input description: bam_directory This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. - In each sub-directory, mapping result, a sorted .bam + named by sample names, such as Sample1, Sample2,etc. + In each sub-directory, mapping result, a sorted \".bam\" file, should exist. output_directory Results will be output to this directory.To avoid - overwriting of existing files. We kindly request + overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. - gene_annotation gene annotations in a single gtf file + gene_annotation Gene annotations in a single gtf file Options: -h Print this usage page. @@ -56,10 +56,7 @@ die("ccov cannot be found in your PATH!\n #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the - output directory should not exist. -"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } #Read threads diff --git a/lib/HUPANgeneCovLSF.pm b/lib/HUPANgeneCovLSF.pm index 5521682..d4b1eb0 100644 --- a/lib/HUPANgeneCovLSF.pm +++ b/lib/HUPANgeneCovLSF.pm @@ -17,17 +17,17 @@ The script will call samtools and ccov. Necessary input description: bam_directory This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. - In each sub-directory, mapping result, a sorted .bam + named by sample names, such as Sample1, Sample2,etc. + In each sub-directory, mapping result, a sorted \".bam\" file, should exist. output_directory Results will be output to this directory.To avoid - overwriting of existing files. We kindly request + overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. - gene_annotation gene annotations in a single gtf file + gene_annotation Gene annotations in a single gtf file Options: -h Print this usage page. @@ -59,10 +59,7 @@ die("ccov cannot be found in your PATH!\n #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the - output directory should not exist. -"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } #Read threads diff --git a/lib/HUPANgeneCovSLURM.pm b/lib/HUPANgeneCovSLURM.pm index 8e702f3..8ed00dc 100644 --- a/lib/HUPANgeneCovSLURM.pm +++ b/lib/HUPANgeneCovSLURM.pm @@ -17,17 +17,17 @@ The script will call samtools and ccov. Necessary input description: bam_directory This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. - In each sub-directory, mapping result, a sorted .bam + named by sample names, such as Sample1, Sample2,etc. + In each sub-directory, mapping result, a sorted \".bam\" file, should exist. output_directory Results will be output to this directory.To avoid - overwriting of existing files. We kindly request + overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. - gene_annotation gene annotations in a single gtf file + gene_annotation Gene annotations in a single gtf file Options: -h Print this usage page. @@ -59,10 +59,7 @@ die("ccov cannot be found in your PATH!\n #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the - output directory should not exist. -"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } #Read threads diff --git a/lib/HUPANgenePre.pm b/lib/HUPANgenePre.pm index beaa486..ece3e9f 100644 --- a/lib/HUPANgenePre.pm +++ b/lib/HUPANgenePre.pm @@ -39,7 +39,7 @@ Options: #check existense of output directory # if(-e $out_dir){ -# die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files. We kindly request that the \noutput directory should not exist.\n"); +# die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files, we kindly request that the \noutput directory should not exist.\n"); # } #adjust directory names and create output directory diff --git a/lib/HUPANgenePreLSF.pm b/lib/HUPANgenePreLSF.pm index 40e1697..c37d034 100644 --- a/lib/HUPANgenePreLSF.pm +++ b/lib/HUPANgenePreLSF.pm @@ -39,7 +39,7 @@ Options: #check existense of output directory # if(-e $out_dir){ -# die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files. We kindly request that the \noutput directory should not exist.\n"); +# die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files, we kindly request that the \noutput directory should not exist.\n"); # } #adjust directory names and create output directory diff --git a/lib/HUPANgenePreSLURM.pm b/lib/HUPANgenePreSLURM.pm index 2e7b336..cefe4cc 100644 --- a/lib/HUPANgenePreSLURM.pm +++ b/lib/HUPANgenePreSLURM.pm @@ -39,7 +39,7 @@ Options: #check existense of output directory # if(-e $out_dir){ -# die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files. We kindly request that the \noutput directory should not exist.\n"); +# die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files, we kindly request that the \noutput directory should not exist.\n"); # } #adjust directory names and create output directory diff --git a/lib/HUPANgetTaxClass.pm b/lib/HUPANgetTaxClass.pm index ea94d19..40c2164 100644 --- a/lib/HUPANgetTaxClass.pm +++ b/lib/HUPANgetTaxClass.pm @@ -37,7 +37,7 @@ Options: #check existense of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files. We kindly request that the \noutput directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files, we kindly request that the \noutput directory should not exist.\n"); } #adjust directory names and create output directory diff --git a/lib/HUPANgetTaxClassLSF.pm b/lib/HUPANgetTaxClassLSF.pm index 2574838..1aa95cc 100644 --- a/lib/HUPANgetTaxClassLSF.pm +++ b/lib/HUPANgetTaxClassLSF.pm @@ -37,7 +37,7 @@ Options: #check existense of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files. We kindly request that the \noutput directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files, we kindly request that the \noutput directory should not exist.\n"); } #adjust directory names and create output directory diff --git a/lib/HUPANgetTaxClassSLURM.pm b/lib/HUPANgetTaxClassSLURM.pm index 6568400..8a1e5ef 100644 --- a/lib/HUPANgetTaxClassSLURM.pm +++ b/lib/HUPANgetTaxClassSLURM.pm @@ -37,7 +37,7 @@ Options: #check existense of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files. We kindly request that the \noutput directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files, we kindly request that the \noutput directory should not exist.\n"); } #adjust directory names and create output directory diff --git a/lib/HUPANmap.pm b/lib/HUPANmap.pm index 066b0ed..9d7872c 100644 --- a/lib/HUPANmap.pm +++ b/lib/HUPANmap.pm @@ -17,12 +17,12 @@ The script will call mapping program (bwa mem or bowtie2), so the directory wher Necessary input description: fastq_data_directory This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. + named by sample names, such as Sample1, Sample2,etc. In each sub-directory, there should be several sequencing files ended by .fq(.gz) or .fastq(.gz). output_directory Alignment results will be output to this directory. - To avoid overwriting of existing files. We kindly request + To avoid overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. @@ -67,7 +67,7 @@ my ($data_dir,$out_dir,$map_dir,$map_index)=@ARGV; #Check existence of output directory if(-e $out_dir){ die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the +To avoid overwriting of existing files, we kindly request that the output directory should not exist. "); } diff --git a/lib/HUPANmapLSF.pm b/lib/HUPANmapLSF.pm index d3c2a2e..1a8a611 100644 --- a/lib/HUPANmapLSF.pm +++ b/lib/HUPANmapLSF.pm @@ -17,12 +17,12 @@ The script will call mapping program (bwa mem or bowtie2), so the directory wher Necessary input description: fastq_data_directory This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. + named by sample names, such as Sample1, Sample2,etc. In each sub-directory, there should be several sequencing files ended by .fq(.gz) or .fastq(.gz). output_directory Alignment results will be output to this directory. - To avoid overwriting of existing files. We kindly request + To avoid overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. @@ -71,7 +71,7 @@ my ($data_dir,$out_dir,$map_dir,$map_index)=@ARGV; #Check existence of output directory if(-e $out_dir){ die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the +To avoid overwriting of existing files, we kindly request that the output directory should not exist."); } diff --git a/lib/HUPANmapSLURM.pm b/lib/HUPANmapSLURM.pm index 69f9b3b..dd8521b 100644 --- a/lib/HUPANmapSLURM.pm +++ b/lib/HUPANmapSLURM.pm @@ -17,12 +17,12 @@ The script will call mapping program (bwa mem or bowtie2), so the directory wher Necessary input description: fastq_data_directory This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. + named by sample names, such as Sample1, Sample2,etc. In each sub-directory, there should be several sequencing files ended by .fq(.gz) or .fastq(.gz). output_directory Alignment results will be output to this directory. - To avoid overwriting of existing files. We kindly request + To avoid overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. @@ -71,7 +71,7 @@ my ($data_dir,$out_dir,$map_dir,$map_index)=@ARGV; #Check existence of output directory if(-e $out_dir){ die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the +To avoid overwriting of existing files, we kindly request that the output directory should not exist."); } diff --git a/lib/HUPANmergeNovGene.pm b/lib/HUPANmergeNovGene.pm index ec20338..97b0b68 100644 --- a/lib/HUPANmergeNovGene.pm +++ b/lib/HUPANmergeNovGene.pm @@ -40,7 +40,7 @@ Options: #check existense of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files. We kindly request that the \noutput directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files, we kindly request that the \noutput directory should not exist.\n"); } #adjust directory names and create output directory diff --git a/lib/HUPANmergeNovGeneLSF.pm b/lib/HUPANmergeNovGeneLSF.pm index 5b42318..f39208d 100644 --- a/lib/HUPANmergeNovGeneLSF.pm +++ b/lib/HUPANmergeNovGeneLSF.pm @@ -40,7 +40,7 @@ Options: #check existense of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files. We kindly request that the \noutput directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files, we kindly request that the \noutput directory should not exist.\n"); } #adjust directory names and create output directory diff --git a/lib/HUPANmergeNovGeneSLURM.pm b/lib/HUPANmergeNovGeneSLURM.pm index 61811f4..4a1af89 100644 --- a/lib/HUPANmergeNovGeneSLURM.pm +++ b/lib/HUPANmergeNovGeneSLURM.pm @@ -40,7 +40,7 @@ Options: #check existense of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files. We kindly request that the \noutput directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files, we kindly request that the \noutput directory should not exist.\n"); } #adjust directory names and create output directory diff --git a/lib/HUPANqualSta.pm b/lib/HUPANqualSta.pm index e73747d..65388b6 100644 --- a/lib/HUPANqualSta.pm +++ b/lib/HUPANqualSta.pm @@ -9,7 +9,7 @@ sub checkQual{ getopts("hf:t:v:"); my $usage="\nUsage: hupan qualSta [options] -qualSta is used to check qualities of .fastq/.fastq.gz files on a large scale. +qualSta is used to check qualities of \".fq.gz\"/\".fastq.gz\" files on a large scale. The script will call fastqc program, so please make sure fastqc is in your PATH, or you need to use -f option to tell the program where fastqc locates. @@ -17,13 +17,13 @@ PATH, or you need to use -f option to tell the program where fastqc locates. Necessary input description: data_directory This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. + named by sample names, such as Sample1, Sample2,etc. In each sub-directory, there should be several - sequencing files ended by .fastq or .fastq.gz. + sequencing files ended by \".fq.gz\" or \".fastq.gz\". output_directory Both final output files and intermediate results will be found in this directory. To avoid - overwriting of existing files. We kindly request + overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. @@ -52,10 +52,7 @@ Options: #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the - output directory should not exist. -"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } #Detect executable fastqc @@ -130,7 +127,7 @@ To avoid overwriting of existing files. We kindly request that the push @fastq, $f; } else{ - print STDERR "Warning: $f is not a .fastq or .fastq.gz file! => Not processed!\n"; + print STDERR "Warning: $f is not a .fq.gz or .fastq.gz file! => Not processed!\n"; } } #generate commandline diff --git a/lib/HUPANqualStaLSF.pm b/lib/HUPANqualStaLSF.pm index ec5a929..d5e7aa0 100644 --- a/lib/HUPANqualStaLSF.pm +++ b/lib/HUPANqualStaLSF.pm @@ -10,7 +10,7 @@ sub checkQual{ my $usage="\nUsage: hupanLSF qualSta [options] -qualSta is used to check qualities of .fastq/.fastq.gz files on a large scale. +qualSta is used to check qualities of \".fq.gz\"/\".fastq.gz\" files on a large scale. The script will call fastqc program, so please make sure fastqc is in your PATH, or you need to use -f option to tell the script where it locates. @@ -18,13 +18,13 @@ PATH, or you need to use -f option to tell the script where it locates. Necessary input description: data_directory This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. + named by sample names, such as Sample1, Sample2,etc. In each sub-directory, there should be several - sequencing files ended by .fastq or .fastq.gz. + sequencing files ended by \".fq.gz\" or \".fastq.gz\". output_directory Both final output files and intermediate results will be found in this directory. To avoid - overwriting of existing files. We kindly request + overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. @@ -53,9 +53,7 @@ Options: #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the - output directory should not exist."); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist."); } #Detect executable fastqc @@ -139,7 +137,7 @@ mkdir($stdout_out); push @fastq, $f; } else{ - print STDERR "Warning: $f is not a .fastq or .fastq.gz file! => Not processed!\n"; + print STDERR "Warning: $f is not a .fq.gz or .fastq.gz file! => Not processed!\n"; } } #generate commandline diff --git a/lib/HUPANqualStaSLURM.pm b/lib/HUPANqualStaSLURM.pm index 7b1398e..8212a68 100644 --- a/lib/HUPANqualStaSLURM.pm +++ b/lib/HUPANqualStaSLURM.pm @@ -10,7 +10,7 @@ sub checkQual{ my $usage="\nUsage: hupanSLURM qualSta [options] -qualSta is used to check qualities of .fastq/.fastq.gz files on a large scale. +qualSta is used to check qualities of \".fq.gz\"/\".fastq.gz\" files on a large scale. The script will call fastqc program, so please make sure fastqc is in your PATH, or you need to use -f option to tell the script where it locates. @@ -18,13 +18,13 @@ PATH, or you need to use -f option to tell the script where it locates. Necessary input description: data_directory This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. + named by sample names, such as Sample1, Sample2,etc. In each sub-directory, there should be several - sequencing files ended by .fastq or .fastq.gz. + sequencing files ended by \".fq.gz\" or \".fastq.gz\". output_directory Both final output files and intermediate results will be found in this directory. To avoid - overwriting of existing files. We kindly request + overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. @@ -53,9 +53,7 @@ Options: #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the - output directory should not exist."); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist."); } #Detect executable fastqc @@ -139,7 +137,7 @@ mkdir($stdout_out); push @fastq, $f; } else{ - print STDERR "Warning: $f is not a .fastq or .fastq.gz file! => Not processed!\n"; + print STDERR "Warning: $f is not a .fq.gz or .fastq.gz file! => Not processed!\n"; } } #generate commandline diff --git a/lib/HUPANrmContaminate.pm b/lib/HUPANrmContaminate.pm index a213386..0754e8f 100644 --- a/lib/HUPANrmContaminate.pm +++ b/lib/HUPANrmContaminate.pm @@ -22,7 +22,7 @@ Necessary input description: output_directory Both final output files and intermediate results will be found in this directory. To avoid - overwriting of existing files. We kindly request + overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. @@ -43,7 +43,7 @@ Options: #check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files. We kindly request that the \noutput directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files, we kindly request that the \noutput directory should not exist.\n"); } #adjust directory names and create output directory diff --git a/lib/HUPANrmContaminateLSF.pm b/lib/HUPANrmContaminateLSF.pm index dc7f684..9f8ebad 100644 --- a/lib/HUPANrmContaminateLSF.pm +++ b/lib/HUPANrmContaminateLSF.pm @@ -22,7 +22,7 @@ Necessary input description: output_directory Both final output files and intermediate results will be found in this directory. To avoid - overwriting of existing files. We kindly request + overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. @@ -43,7 +43,7 @@ Options: #check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files. We kindly request that the \noutput directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files, we kindly request that the \noutput directory should not exist.\n"); } #adjust directory names and create output directory diff --git a/lib/HUPANrmContaminateSLURM.pm b/lib/HUPANrmContaminateSLURM.pm index 4e082c9..dc149a8 100644 --- a/lib/HUPANrmContaminateSLURM.pm +++ b/lib/HUPANrmContaminateSLURM.pm @@ -22,7 +22,7 @@ Necessary input description: output_directory Both final output files and intermediate results will be found in this directory. To avoid - overwriting of existing files. We kindly request + overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. @@ -43,7 +43,7 @@ Options: #check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files. We kindly request that the \noutput directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files, we kindly request that the \noutput directory should not exist.\n"); } #adjust directory names and create output directory diff --git a/lib/HUPANrmHigh.pm b/lib/HUPANrmHigh.pm index 7ac8153..9878ef9 100644 --- a/lib/HUPANrmHigh.pm +++ b/lib/HUPANrmHigh.pm @@ -16,13 +16,13 @@ The script will call MUMmer program, so you need to tell the program where MUMme Necessary input description: data_directory This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. + named by sample names, such as Sample1, Sample2,etc. In each sub-directory, assembly results, including - files *.scafSeq and *.contig, should exist. + files \"*.scafSeq\" and \"*.contig\", should exist. output_directory Both final output files and intermediate results will be found in this directory. To avoid - overwriting of existing files. We kindly request + overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. @@ -32,10 +32,10 @@ Necessary input description: Reference sequence file (.fa or .fa.gz). Options: - -h Print this usage page. + -h Print this usage page. - -s Suffix of assembled file. - Defult: contigs.fa + -s Suffix of assembled file. + Defult: \"contigs.fa\" "; die $usage if @ARGV!=4; @@ -44,10 +44,7 @@ Options: #Check existence of output directory if(-e $out_dir){ -die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the - output directory should not exist. -"); +die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } #Detect executable nucmer and show-coords @@ -144,42 +141,41 @@ extractSeq is used to extract contigs that is lower similarity with reference ge Necessary input description: data_dir This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. + named by sample names, such as Sample1, Sample2,etc. In each sub-directory, assembly results, including - files *.scafSeq and *.contig, should exist. + files \"*.scafSeq\" and \"*.contig\", should exist. out_dir Results will be output to this directory. - To avoid overwriting of existing files. We kindly request + To avoid overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. MUMmer_output_dir This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. + named by sample names, such as Sample1, Sample2,etc. In each sub-directory, alignment results, including - files *.coords, should exist. + files \"*.coords\", should exist. Options: - -h Print this usage page. + -h Print this usage page. - -i The theshold of identity . + -i The theshold of identity. + Default: 0.95>. - -c The theshold of query coverage . + -c The theshold of query coverage. + Default: 0.95. - -s Suffix of assembled file. - Defult: contigs.fa + -s Suffix of assembled file. + Defult: \"contigs.fa\" "; die $usage if @ARGV!=3; die $usage if defined($opt_h); my ($contig_dir,$out_dir,$coords_dir)=@ARGV; -#Check existence of output directory -if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the - output directory should not exist. -"); -} + #Check existence of output directory + if(-e $out_dir){ + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); + } #get identity my $identity=0.95; diff --git a/lib/HUPANrmHighLSF.pm b/lib/HUPANrmHighLSF.pm index a242dbd..462f7ca 100644 --- a/lib/HUPANrmHighLSF.pm +++ b/lib/HUPANrmHighLSF.pm @@ -16,13 +16,13 @@ The script will call MUMmer program, so you need to tell the program where MUMme Necessary input description: data_directory This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. + named by sample names, such as Sample1, Sample2,etc. In each sub-directory, assembly results, including - files *.scafSeq and *.contig, should exist. + files \"*.scafSeq\" and \"*.contig\", should exist. output_directory Both final output files and intermediate results will be found in this directory. To avoid - overwriting of existing files. We kindly request + overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. @@ -32,13 +32,13 @@ Necessary input description: Reference sequence file (.fa or .fa.gz). Options: - -h Print this usage page. + -h Print this usage page. - -q The queue name for job submiting. - Default: default queue + -q The queue name for job submiting. + Default: default queue - -s Suffix of assembled file. - Defult: contigs.fa + -s Suffix of assembled file. + Defult: contigs.fa "; die $usage if @ARGV!=4; @@ -47,10 +47,7 @@ Options: #Check existence of output directory if(-e $out_dir){ -die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the - output directory should not exist. -"); +die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } #Detect executable nucmer and show-coords @@ -160,42 +157,41 @@ extractSeq is used to extract contigs that is lower similarity with reference ge Necessary input description: data_dir This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. + named by sample names, such as Sample1, Sample2,etc. In each sub-directory, assembly results, including - files *.scafSeq and *.contig, should exist. + files \"*.scafSeq\" and \"*.contig\", should exist. out_dir Results will be output to this directory. - To avoid overwriting of existing files. We kindly request + To avoid overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. MUMmer_output_dir This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. + named by sample names, such as Sample1, Sample2,etc. In each sub-directory, alignment results, including files *.coords, should exist. Options: - -h Print this usage page. + -h Print this usage page. + + -i The theshold of identity. + Default: 0.95 - -i The theshold of identity . - - -c The theshold of query coverage . - - -s Suffix of assembled file. - Defult: contigs.fa + -c The theshold of query coverage. + Default: 0.95 + + -s Suffix of assembled file. + Defult: \"contigs.fa\" "; die $usage if @ARGV!=3; die $usage if defined($opt_h); my ($contig_dir,$out_dir,$coords_dir)=@ARGV; -#Check existence of output directory -if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the - output directory should not exist. -"); -} + #Check existence of output directory + if(-e $out_dir){ + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); + } #get identity my $identity=0.95; diff --git a/lib/HUPANrmHighSLURM.pm b/lib/HUPANrmHighSLURM.pm index 34530b5..b646cc5 100644 --- a/lib/HUPANrmHighSLURM.pm +++ b/lib/HUPANrmHighSLURM.pm @@ -16,13 +16,13 @@ The script will call MUMmer program, so you need to tell the program where MUMme Necessary input description: data_directory This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. + named by sample names, such as Sample1, Sample2,etc. In each sub-directory, assembly results, including - files *.scafSeq and *.contig, should exist. + files \"*.scafSeq\" and \"*.contig\", should exist. output_directory Both final output files and intermediate results will be found in this directory. To avoid - overwriting of existing files. We kindly request + overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. @@ -32,16 +32,16 @@ Necessary input description: Reference sequence file (.fa or .fa.gz). Options: - -h Print this usage page. + -h Print this usage page. - -q The queue name for job submiting. - Default: default queue + -q The queue name for job submiting. + Default: default queue - -t Threads used. - Default: 1. + -t Threads used. + Default: 1. - -s Suffix of assembled file. - Defult: contigs.fa + -s Suffix of assembled file. + Defult: \"contigs.fa\" "; die $usage if @ARGV!=4; @@ -51,7 +51,7 @@ Options: #Check existence of output directory if(-e $out_dir){ die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the +To avoid overwriting of existing files, we kindly request that the output directory should not exist. "); } @@ -171,30 +171,32 @@ extractSeq is used to extract contigs that is lower similarity with reference ge Necessary input description: data_dir This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. + named by sample names, such as Sample1, Sample2,etc. In each sub-directory, assembly results, including files *.scafSeq and *.contigs.fa, should exist. out_dir Results will be output to this directory. - To avoid overwriting of existing files. We kindly request + To avoid overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. MUMmer_output_dir This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. + named by sample names, such as Sample1, Sample2,etc. In each sub-directory, alignment results, including files *.coords, should exist. Options: - -h Print this usage page. + -h Print this usage page. - -i The theshold of identity . + -i The theshold of identity. + Default: 0.95. - -c The theshold of query coverage . + -c The theshold of query coverage. + Default: 0.95. - -s Suffix of assembled file. - Defult: contigs.fa + -s Suffix of assembled file. + Defult: \"contigs.fa\" "; die $usage if @ARGV!=3; die $usage if defined($opt_h); @@ -202,10 +204,7 @@ Options: #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the - output directory should not exist. -"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } #get identity diff --git a/lib/HUPANrmRdt.pm b/lib/HUPANrmRdt.pm index 6d5e9ae..6ef455d 100644 --- a/lib/HUPANrmRdt.pm +++ b/lib/HUPANrmRdt.pm @@ -69,7 +69,7 @@ die(" $exe doesn't exist! if(-e $out_dir){ die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the +To avoid overwriting of existing files, we kindly request that the output directory should not exist. "); } @@ -175,7 +175,7 @@ die("Executable blastCluster.pl cannot be found in your PATH!\n die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the +To avoid overwriting of existing files, we kindly request that the output directory should not exist. ") if -e $out_dir; diff --git a/lib/HUPANrmRdtLSF.pm b/lib/HUPANrmRdtLSF.pm index e592112..8ef92a0 100644 --- a/lib/HUPANrmRdtLSF.pm +++ b/lib/HUPANrmRdtLSF.pm @@ -71,7 +71,7 @@ die(" $exe doesn't exist! if(-e $out_dir){ die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the +To avoid overwriting of existing files, we kindly request that the output directory should not exist. "); } @@ -195,7 +195,7 @@ die("Executable blastCluster.pl cannot be found in your PATH!\n die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the +To avoid overwriting of existing files, we kindly request that the output directory should not exist. ") if -e $out_dir; diff --git a/lib/HUPANrmRdtSLURM.pm b/lib/HUPANrmRdtSLURM.pm index 90e6f8e..431418a 100644 --- a/lib/HUPANrmRdtSLURM.pm +++ b/lib/HUPANrmRdtSLURM.pm @@ -71,7 +71,7 @@ die(" $exe doesn't exist! if(-e $out_dir){ die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the +To avoid overwriting of existing files, we kindly request that the output directory should not exist. "); } @@ -196,7 +196,7 @@ die("Executable blastCluster.pl cannot be found in your PATH!\n die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the +To avoid overwriting of existing files, we kindly request that the output directory should not exist. ") if -e $out_dir; diff --git a/lib/HUPANsamToBam.pm b/lib/HUPANsamToBam.pm index ea2e8ab..897bbac 100644 --- a/lib/HUPANsamToBam.pm +++ b/lib/HUPANsamToBam.pm @@ -17,22 +17,22 @@ The script will call samtools program, so the directory where samtools locates i Necessary input description: mapping_directory This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. + named by sample names, such as Sample1, Sample2,etc. In each sub-directory, One or more mapping results, - *.sam, should exist. + \"*.sam\", should exist. - output_directory Results will be output to this directory.To avoid - overwriting of existing files. We kindly request + output_directory Results will be output to this directory.To avoid + overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. - QUAST_directory samtools directory where executable samtools locates. + QUAST_directory samtools directory where executable samtools locates. Options: -h Print this usage page. - -t Threads used. + -t Threads used. Default: 1 "; @@ -48,10 +48,7 @@ die("Error01: Cannot find samtools file in directory $samtools_dir\n") unless(-e #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the - output directory should not exist. -"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } #Read threads diff --git a/lib/HUPANsamToBamLSF.pm b/lib/HUPANsamToBamLSF.pm index 5c1090b..d636409 100644 --- a/lib/HUPANsamToBamLSF.pm +++ b/lib/HUPANsamToBamLSF.pm @@ -17,26 +17,26 @@ The script will call samtools program, so the directory where samtools locates i Necessary input description: mapping_directory This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. - In each sub-directory, One or more mapping results, - *.sam, should exist. + named by sample names, such as Sample1, Sample2,etc. + In each sub-directory, one or more mapping results, + \"*.sam\", should exist. - output_directory Results will be output to this directory.To avoid - overwriting of existing files. We kindly request + output_directory Results will be output to this directory.To avoid + overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. - QUAST_directory samtools directory where executable samtools locates. + QUAST_directory samtools directory where executable samtools locates. Options: -h Print this usage page. - -t Threads used. + -t Threads used. Default: 1 - -q The queue name for job submiting. - default: default queue + -q The queue name for job submiting. + Default: default queue "; die $usage if @ARGV!=3; @@ -50,9 +50,7 @@ die("Error01: Cannot find samtools file in directory $samtools_dir\n") unless(-e #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the - output directory should not exist."); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } #Read threads diff --git a/lib/HUPANsamToBamSLURM.pm b/lib/HUPANsamToBamSLURM.pm index 3bc85d1..27c8463 100644 --- a/lib/HUPANsamToBamSLURM.pm +++ b/lib/HUPANsamToBamSLURM.pm @@ -17,26 +17,26 @@ The script will call samtools program, so the directory where samtools locates i Necessary input description: mapping_directory This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. + named by sample names, such as Sample1, Sample2,etc. In each sub-directory, One or more mapping results, - *.sam, should exist. + \"*.sam\", should exist. - output_directory Results will be output to this directory.To avoid - overwriting of existing files. We kindly request + output_directory Results will be output to this directory.To avoid + overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. - QUAST_directory samtools directory where executable samtools locates. + QUAST_directory samtools directory where executable samtools locates. Options: -h Print this usage page. - -t Threads used. + -t Threads used. Default: 1 - -q The queue name for job submiting. - default: default queue + -q The queue name for job submiting. + Default: default queue "; die $usage if @ARGV!=3; @@ -50,9 +50,7 @@ die("Error01: Cannot find samtools file in directory $samtools_dir\n") unless(-e #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. -To avoid overwriting of existing files. We kindly request that the - output directory should not exist."); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } #Read threads diff --git a/lib/HUPANsim.pm b/lib/HUPANsim.pm index 90ccf47..1b95595 100644 --- a/lib/HUPANsim.pm +++ b/lib/HUPANsim.pm @@ -15,11 +15,11 @@ sim is used to simulate the size of pan-genome and core-genome from gene presenc Necessary input description: - data_path This path leads to gene.exist or geneFam.exist + data_path This path leads to gene.exist or geneFam.exist output_directory Both final output files and intermediate results will be found in this directory. To avoid - overwriting of existing files. We kindly request + overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. @@ -29,7 +29,7 @@ Options: -n Specifies the number of random sampling times for simulation. - default: 100 + Default: 100 "; @@ -39,7 +39,7 @@ Options: #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } #get simulation number diff --git a/lib/HUPANsimLSF.pm b/lib/HUPANsimLSF.pm index 91736b4..390cdd1 100644 --- a/lib/HUPANsimLSF.pm +++ b/lib/HUPANsimLSF.pm @@ -15,11 +15,11 @@ sim is used to simulate the size of pan-genome and core-genome from gene presenc Necessary input description: - data_path This path leads to gene.exist or geneFam.exist + data_path This path leads to gene.exist or geneFam.exist output_directory Both final output files and intermediate results will be found in this directory. To avoid - overwriting of existing files. We kindly request + overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. @@ -29,7 +29,7 @@ Options: -n Specifies the number of random sampling times for simulation. - default: 100 + Default: 100 "; @@ -39,7 +39,7 @@ Options: #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } #get simulation number diff --git a/lib/HUPANsimSLURM.pm b/lib/HUPANsimSLURM.pm index 004674c..277e338 100644 --- a/lib/HUPANsimSLURM.pm +++ b/lib/HUPANsimSLURM.pm @@ -15,11 +15,11 @@ sim is used to simulate the size of pan-genome and core-genome from gene presenc Necessary input description: - data_path This path leads to gene.exist or geneFam.exist + data_path This path leads to gene.exist or geneFam.exist output_directory Both final output files and intermediate results will be found in this directory. To avoid - overwriting of existing files. We kindly request + overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. @@ -29,7 +29,7 @@ Options: -n Specifies the number of random sampling times for simulation. - default: 100 + Default: 100 "; @@ -39,7 +39,7 @@ Options: #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } #get simulation number diff --git a/lib/HUPANsimSeq.pm b/lib/HUPANsimSeq.pm index 54ff42b..52cc6c5 100644 --- a/lib/HUPANsimSeq.pm +++ b/lib/HUPANsimSeq.pm @@ -43,15 +43,15 @@ Necessary input description: data_path This directory should contain many sub-directories named by sample names, such as sample1, sample2,etc. In each sub-directory, there should be novel sequences - file ended by .contig. + file ended by \".contig\". out_path Results will be output to this directory. To avoid - overwriting of existing files. We kindly request + overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. - cdhit_directory directory where cdhit-est locates. + cdhit_directory Directory where cd-hit-est locates. Options: -h Print this usage. @@ -73,7 +73,7 @@ Options: #check existense of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } #get simulation number @@ -172,8 +172,7 @@ Options: #check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files. We -kindly request that the\n output directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files, we kindly request that the\n output directory should not exist.\n"); } $out_dir.="/" unless $out_dir=~/\/$/; mkdir $out_dir; diff --git a/lib/HUPANsimSeqLSF.pm b/lib/HUPANsimSeqLSF.pm index 481fdc4..fa1a01c 100644 --- a/lib/HUPANsimSeqLSF.pm +++ b/lib/HUPANsimSeqLSF.pm @@ -43,15 +43,15 @@ Necessary input description: data_path This directory should contain many sub-directories named by sample names, such as sample1, sample2,etc. In each sub-directory, there should be novel sequences - file ended by .contig. + file ended by \".contig\". out_path Results will be output to this directory. To avoid - overwriting of existing files. We kindly request + overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. - cdhit_directory directory where cdhit-est locates. + cdhit_directory Directory where cd-hit-est locates. Options: -h Print this usage. @@ -73,7 +73,7 @@ Options: #check existense of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } #get simulation number @@ -196,8 +196,7 @@ Options: #check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files. We -kindly request that the\n output directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files, we kindly request that the\n output directory should not exist.\n"); } $out_dir.="/" unless $out_dir=~/\/$/; mkdir $out_dir; diff --git a/lib/HUPANsimSeqSLURM.pm b/lib/HUPANsimSeqSLURM.pm index 11f9d6b..74d83d2 100644 --- a/lib/HUPANsimSeqSLURM.pm +++ b/lib/HUPANsimSeqSLURM.pm @@ -43,15 +43,15 @@ Necessary input description: data_path This directory should contain many sub-directories named by sample names, such as sample1, sample2,etc. In each sub-directory, there should be novel sequences - file ended by .contig. + file ended by \".contig\". out_path Results will be output to this directory. To avoid - overwriting of existing files. We kindly request + overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. - cdhit_directory directory where cdhit-est locates. + cdhit_directory Directory where cd-hit-est locates. Options: -h Print this usage. @@ -73,7 +73,7 @@ Options: #check existense of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } #get simulation number @@ -197,7 +197,7 @@ Options: #check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files. We + die("Error: output directory \"$out_dir\" already exists.\nTo avoid overwriting of existing files, we kindly request that the\n output directory should not exist.\n"); } $out_dir.="/" unless $out_dir=~/\/$/; diff --git a/lib/HUPANsplitSeq.pm b/lib/HUPANsplitSeq.pm index c1b3703..4cb4d44 100644 --- a/lib/HUPANsplitSeq.pm +++ b/lib/HUPANsplitSeq.pm @@ -32,7 +32,7 @@ Options: #check existense of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } #adjust directory names and create output directory diff --git a/lib/HUPANsplitSeqLSF.pm b/lib/HUPANsplitSeqLSF.pm index 07e639c..b7bbc6f 100644 --- a/lib/HUPANsplitSeqLSF.pm +++ b/lib/HUPANsplitSeqLSF.pm @@ -32,7 +32,7 @@ Options: #check existense of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } #adjust directory names and create output directory diff --git a/lib/HUPANsplitSeqSLURM.pm b/lib/HUPANsplitSeqSLURM.pm index d6bddca..030be9a 100644 --- a/lib/HUPANsplitSeqSLURM.pm +++ b/lib/HUPANsplitSeqSLURM.pm @@ -32,7 +32,7 @@ Options: #check existense of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists.To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists.To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } #adjust directory names and create output directory diff --git a/lib/HUPANtrim.pm b/lib/HUPANtrim.pm index ffdc77c..d7a1244 100644 --- a/lib/HUPANtrim.pm +++ b/lib/HUPANtrim.pm @@ -19,12 +19,12 @@ given to the script as a necessary input. Necessary input description: fastq_data_directory This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. + named by sample names, such as Sample1, Sample2,etc. In each sub-directory, there should be several - sequencing files ended by .fastq(or .fq) or .fastq.gz(or .fq.gz). + sequencing files ended by \".fq.gz\" or \".fastq.gz\". output_directory High-quality reads will be output to this directory. - To avoid overwriting of existing files. We kindly request + To avoid overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. @@ -34,21 +34,22 @@ Necessary input description: Options: -h Print this usage page. - -t thread number + -t Thread number. + Default: 1 -a Adaptor file in fasta utilized by trimmomatic program. Default: trimmomatoc_dir/adapters/TruSeq3-PE-2.fa -s Suffix of the fastq_file. Check your sequencing data and change it if needed. - Default: \".fq.gz\" + Default: \".fastq.gz\" -k Linker for paired_end identifer. Paired-end fastq file should end with *1suffix or *2suffix, where suffix is - \".fq.gz\"( or \".fastq\", etc. See -s option) and * is the + \".fq.gz\"( or \".fastq.gz\", etc. See -s option) and * is the linker such as \"_\".As an example, the file should - be like CX123_1.fq.gz (linker is \"_\", suffix is \".fq.gz\") - or BX125_R1.fastq(linker is \"_R\", suffix is \".fastq\") + be like Sample1.fq.gz (linker is \"_\", suffix is \".fq.gz\") + or Sample2.fastq.gz(linker is \"_R\", suffix is \".fastq.gz\") Default: \"_\" -p <33 or 64> Quality score version. @@ -83,7 +84,7 @@ my ($data_dir,$out_dir,$trim_dir)=@ARGV; #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } #Detect executable fastqc @@ -121,7 +122,7 @@ if(defined($opt_a)){ die("Error: unable to find trimmomatic adaptor file: $trim_adaptor\n") unless(-e $trim_adaptor); #read fastq suffix -my $suffix=".fq.gz"; +my $suffix=".fastq.gz"; if(defined($opt_s)){ $suffix=$opt_s; } diff --git a/lib/HUPANtrimLSF.pm b/lib/HUPANtrimLSF.pm index f0ea165..50f4e15 100644 --- a/lib/HUPANtrimLSF.pm +++ b/lib/HUPANtrimLSF.pm @@ -19,12 +19,12 @@ given to the script as a necessary input. Necessary input description: fastq_data_directory This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. + named by sample names, such as Sample1, Sample2,etc. In each sub-directory, there should be several - sequencing files ended by .fastq(or .fq) or .fastq.gz(or .fq.gz). + sequencing files ended by \".fq.gz\" or \".fastq.gz\". output_directory High-quality reads will be output to this directory. - To avoid overwriting of existing files. We kindly request + To avoid overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. @@ -34,22 +34,24 @@ Necessary input description: Options: -h Print this usage page. - -t thread number + -t Thread number. + Default: 1 -a Adaptor file in fasta utilized by trimmomatic program. Default: trimmomatoc_dir/adapters/TruSeq3-PE-2.fa - + -s Suffix of the fastq_file. Check your sequencing data and change it if needed. - Default: \".fq.gz\" + Default: \".fastq.gz\" -k Linker for paired_end identifer. Paired-end fastq file should end with *1suffix or *2suffix, where suffix is - \".fq.gz\"( or \".fastq\", etc. See -s option) and * is the + \".fq.gz\"( or \".fastq.gz\", etc. See -s option) and * is the linker such as \"_\".As an example, the file should - be like CX123_1.fq.gz (linker is \"_\", suffix is \".fq.gz\") - or BX125_R1.fastq(linker is \"_R\", suffix is \".fastq\") + be like Sample1.fq.gz (linker is \"_\", suffix is \".fq.gz\") + or Sample2.fastq.gz(linker is \"_R\", suffix is \".fastq.gz\") Default: \"_\" + -p <33 or 64> Quality score version. Default: 33 (phred+33) @@ -84,7 +86,7 @@ my ($data_dir,$out_dir,$trim_dir)=@ARGV; #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } #Detect executable fastqc diff --git a/lib/HUPANtrimSLURM.pm b/lib/HUPANtrimSLURM.pm index 18caf67..1aeb6c1 100644 --- a/lib/HUPANtrimSLURM.pm +++ b/lib/HUPANtrimSLURM.pm @@ -1,5 +1,6 @@ #!/usr/bin/perl #Created by Hu Zhiqiang, 2014-7-2 + package trim; sub trimFastq{ use strict; @@ -19,12 +20,12 @@ given to the script as a necessary input. Necessary input description: fastq_data_directory This directory should contain many sub-directories - named by sample names, such as CX101, B152,etc. + named by sample names, such as Sample1, Sample2,etc. In each sub-directory, there should be several - sequencing files ended by .fastq(or .fq) or .fastq.gz(or .fq.gz). + sequencing files ended by \".fq.gz\" or \".fastq.gz\". output_directory High-quality reads will be output to this directory. - To avoid overwriting of existing files. We kindly request + To avoid overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. @@ -34,22 +35,24 @@ Necessary input description: Options: -h Print this usage page. - -t thread number + -t Thread number. + Default: 1 -a Adaptor file in fasta utilized by trimmomatic program. Default: trimmomatoc_dir/adapters/TruSeq3-PE-2.fa -s Suffix of the fastq_file. Check your sequencing data and change it if needed. - Default: \".fq.gz\" + Default: \".fastq.gz\" -k Linker for paired_end identifer. Paired-end fastq file should end with *1suffix or *2suffix, where suffix is - \".fq.gz\"( or \".fastq\", etc. See -s option) and * is the + \".fq.gz\"( or \".fastq.gz\", etc. See -s option) and * is the linker such as \"_\".As an example, the file should - be like CX123_1.fq.gz (linker is \"_\", suffix is \".fq.gz\") - or BX125_R1.fastq(linker is \"_R\", suffix is \".fastq\") + be like Sample1.fq.gz (linker is \"_\", suffix is \".fq.gz\") + or Sample2.fastq.gz(linker is \"_R\", suffix is \".fastq.gz\") Default: \"_\" + -p <33 or 64> Quality score version. Default: 33 (phred+33) @@ -84,7 +87,7 @@ my ($data_dir,$out_dir,$trim_dir)=@ARGV; #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } #Detect executable fastqc diff --git a/lib/HUPANunalnCtg.pm b/lib/HUPANunalnCtg.pm index 504539c..3169aba 100644 --- a/lib/HUPANunalnCtg.pm +++ b/lib/HUPANunalnCtg.pm @@ -21,15 +21,15 @@ Necessary input description: assembly_directory This directory should contain many sub-directories named by sample names, such as sample1, sample2,etc. In each sub-directory, assembly results, including - file *.contig, should exist. + file \"*.contig.gz\", should exist. QUAST_assess_directory This directory should contain many sub-directories named by sample names, such as sample1, sample2,etc. In each sub-directory, quast assessment, including - directory file contigs_reports, should exist. + directory file \"contigs_reports\", should exist. output_directory Results will be output to this directory.To avoid - overwriting of existing files. We kindly request + overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. @@ -37,7 +37,8 @@ Necessary input description: Options: -h Print this usage page. - -p The suffix of contigs file in assembly directory. + -p The suffix of contigs file in assembly directory. + Default: \".contig.gz\" "; @@ -66,7 +67,7 @@ $quast_dir.="/" unless($quast_dir=~/\/$/); $out_dir.="/" unless($out_dir=~/\/$/); #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } my $thread_num=1; diff --git a/lib/HUPANunalnCtgLSF.pm b/lib/HUPANunalnCtgLSF.pm index 2db5878..070d07f 100644 --- a/lib/HUPANunalnCtgLSF.pm +++ b/lib/HUPANunalnCtgLSF.pm @@ -21,15 +21,15 @@ Necessary input description: assembly_directory This directory should contain many sub-directories named by sample names, such as sample1, sample2,etc. In each sub-directory, assembly results, including - file *.contig, should exist. + file \"*.contig.gz\", should exist. QUAST_assess_directory This directory should contain many sub-directories named by sample names, such as sample1, sample2,etc. In each sub-directory, quast assessment, including - directory file contigs_reports, should exist. + directory file \"contigs_reports\", should exist. output_directory Results will be output to this directory.To avoid - overwriting of existing files. We kindly request + overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. @@ -37,8 +37,8 @@ Necessary input description: Options: -h Print this usage page. - -p The suffix of contigs file in assembly directory. - default: .contig.gz + -p The suffix of contigs file in assembly directory. + Default: \".contig.gz\" "; @@ -66,7 +66,7 @@ $quast_dir.="/" unless($quast_dir=~/\/$/); $out_dir.="/" unless($out_dir=~/\/$/); #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } my $thread_num=1; @@ -202,7 +202,7 @@ Necessary input description: *.partially.contig and *.partially.coords, should exist. output_directory Results will be output to this directory.To avoid - overwriting of existing files. We kindly request + overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. @@ -221,7 +221,7 @@ $out.="/" unless($out=~/\/$/); ##Check existence of output directory if(-e $out){ - die("Error: output directory \"$out\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); + die("Error: output directory \"$out\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } mkdir($out); diff --git a/lib/HUPANunalnCtgSLURM.pm b/lib/HUPANunalnCtgSLURM.pm index c12f9c7..bc56bc3 100644 --- a/lib/HUPANunalnCtgSLURM.pm +++ b/lib/HUPANunalnCtgSLURM.pm @@ -21,15 +21,15 @@ Necessary input description: assembly_directory This directory should contain many sub-directories named by sample names, such as sample1, sample2,etc. In each sub-directory, assembly results, including - file *.contig, should exist. + file \"*.contig.gz\", should exist. QUAST_assess_directory This directory should contain many sub-directories named by sample names, such as sample1, sample2,etc. In each sub-directory, quast assessment, including - directory file contigs_reports, should exist. + directory file \"contigs_reports\", should exist. output_directory Results will be output to this directory.To avoid - overwriting of existing files. We kindly request + overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. @@ -37,8 +37,8 @@ Necessary input description: Options: -h Print this usage page. - -p The suffix of contigs file in assembly directory. - default: .contig.gz + -p The suffix of contigs file in assembly directory. + Default: \".contig.gz\" "; @@ -66,7 +66,7 @@ $quast_dir.="/" unless($quast_dir=~/\/$/); $out_dir.="/" unless($out_dir=~/\/$/); #Check existence of output directory if(-e $out_dir){ - die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); + die("Error: output directory \"$out_dir\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } my $thread_num=1; @@ -204,7 +204,7 @@ Necessary input description: *.partially.contig and *.partially.coords, should exist. output_directory Results will be output to this directory.To avoid - overwriting of existing files. We kindly request + overwriting of existing files, we kindly request that the output_directory should not exist. It is to say, this directory will be created by the script itself. @@ -223,7 +223,7 @@ $out.="/" unless($out=~/\/$/); ##Check existence of output directory if(-e $out){ - die("Error: output directory \"$out\" already exists. To avoid overwriting of existing files. We kindly request that the output directory should not exist.\n"); + die("Error: output directory \"$out\" already exists. To avoid overwriting of existing files, we kindly request that the output directory should not exist.\n"); } mkdir($out); diff --git a/src/perl/linearK.pl b/src/perl/linearK.pl index ff7eaec..3317eff 100755 --- a/src/perl/linearK.pl +++ b/src/perl/linearK.pl @@ -15,7 +15,7 @@ Necessary input description: data_directory This directory should contain one or more pair of FASTQ files - with suffix of .fq or .fq.gz. The suffix can be changed with -s option. + with suffix of .fastq.gz or .fq.gz. The suffix can be changed with -s option. output_directory The output directory. @@ -29,10 +29,10 @@ Default: 1 -g Genome size. Used to infer sequencing depth. - Default: 380000000 (460M) + Default: 3000000000 (3Gb) -s Suffix of files within data_directory. - Default: .fq.gz + Default: .fastq.gz -r Parameters of linear function: Kmer=2*int(0.5*(a*Depth+b))+1. The parameter should be input as \"a,b\". @@ -98,11 +98,11 @@ $thread_num=$opt_t if defined($opt_t); #define file suffix -my $suffix=".fq.gz"; +my $suffix=".fastq.gz"; $suffix=$opt_s if defined($opt_s); #define genome size -my $gsize=380000000; +my $gsize=3000000000; $gsize=$opt_g if defined($opt_g); #define linear function of Kmer From 68730303b2966b5cbdf2674880586ac79b8f4ad8 Mon Sep 17 00:00:00 2001 From: Zhongqu Duan Date: Sun, 26 Apr 2020 16:15:39 +0800 Subject: [PATCH 42/45] Update HUPANqualSta.pm --- lib/HUPANqualSta.pm | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/lib/HUPANqualSta.pm b/lib/HUPANqualSta.pm index 65388b6..bb0140a 100644 --- a/lib/HUPANqualSta.pm +++ b/lib/HUPANqualSta.pm @@ -5,8 +5,8 @@ sub checkQual{ use strict; use warnings; use Getopt::Std; - use vars qw($opt_h $opt_f $opt_t $opt_v); - getopts("hf:t:v:"); + use vars qw($opt_h $opt_f $opt_t); + getopts("hf:t:"); my $usage="\nUsage: hupan qualSta [options] qualSta is used to check qualities of \".fq.gz\"/\".fastq.gz\" files on a large scale. @@ -40,10 +40,7 @@ Options: program. It is recommended to set as the number of files within each sample. Pay attention that the machine should have this number of threads. - default: 1 - - -v Sets to: PE, if all files are PE data. - + default: 1 "; die $usage if @ARGV!=2; From b9d3fa7853f12904857228cd6c5c400fc1460952 Mon Sep 17 00:00:00 2001 From: Zhongqu Duan Date: Mon, 27 Apr 2020 14:45:57 +0800 Subject: [PATCH 43/45] update --- lib/HUPANqualSta.pm | 2 +- lib/HUPANqualStaLSF.pm | 4 ++-- lib/HUPANqualStaSLURM.pm | 4 ++-- lib/HUPANrmHigh.pm | 2 +- lib/HUPANunalnCtg.pm | 8 ++++---- lib/HUPANunalnCtgLSF.pm | 8 ++++---- lib/HUPANunalnCtgSLURM.pm | 8 ++++---- 7 files changed, 18 insertions(+), 18 deletions(-) diff --git a/lib/HUPANqualSta.pm b/lib/HUPANqualSta.pm index bb0140a..a5c1fb5 100644 --- a/lib/HUPANqualSta.pm +++ b/lib/HUPANqualSta.pm @@ -40,7 +40,7 @@ Options: program. It is recommended to set as the number of files within each sample. Pay attention that the machine should have this number of threads. - default: 1 + Default: 1 "; die $usage if @ARGV!=2; diff --git a/lib/HUPANqualStaLSF.pm b/lib/HUPANqualStaLSF.pm index d5e7aa0..fd55324 100644 --- a/lib/HUPANqualStaLSF.pm +++ b/lib/HUPANqualStaLSF.pm @@ -41,10 +41,10 @@ Options: program. It is recommended to set as the number of files within each sample. Pay attention that the machine should have this number of threads. - default: 1 + Default: 1 -q The queue name for job submiting. - default: default queue + Default: default queue "; die $usage if @ARGV!=2; diff --git a/lib/HUPANqualStaSLURM.pm b/lib/HUPANqualStaSLURM.pm index 8212a68..be1d7d7 100644 --- a/lib/HUPANqualStaSLURM.pm +++ b/lib/HUPANqualStaSLURM.pm @@ -41,10 +41,10 @@ Options: program. It is recommended to set as the number of files within each sample. Pay attention that the machine should have this number of threads. - default: 1 + Default: 1 -q The queue name for job submiting. - default: default queue + Default: default queue "; die $usage if @ARGV!=2; diff --git a/lib/HUPANrmHigh.pm b/lib/HUPANrmHigh.pm index 9878ef9..22525df 100644 --- a/lib/HUPANrmHigh.pm +++ b/lib/HUPANrmHigh.pm @@ -160,7 +160,7 @@ Options: -h Print this usage page. -i The theshold of identity. - Default: 0.95>. + Default: 0.95. -c The theshold of query coverage. Default: 0.95. diff --git a/lib/HUPANunalnCtg.pm b/lib/HUPANunalnCtg.pm index 3169aba..b541bea 100644 --- a/lib/HUPANunalnCtg.pm +++ b/lib/HUPANunalnCtg.pm @@ -9,8 +9,8 @@ sub getUnaln{ use strict; use warnings; use Getopt::Std; -use vars qw($opt_h $opt_p); -getopts("hp:"); +use vars qw($opt_h $opt_s); +getopts("hs:"); my $usage="\nUsage: hupan getUnalnCtg [options] @@ -37,7 +37,7 @@ Necessary input description: Options: -h Print this usage page. - -p The suffix of contigs file in assembly directory. + -s The suffix of contigs file in assembly directory. Default: \".contig.gz\" @@ -72,7 +72,7 @@ if(-e $out_dir){ my $thread_num=1; my $suffix=".contig.gz"; -$suffix=$opt_p if defined $opt_p; +$suffix=$opt_s if defined $opt_s; #Create output directory and sub-directories mkdir($out_dir); my $out_data=$out_dir."data/"; diff --git a/lib/HUPANunalnCtgLSF.pm b/lib/HUPANunalnCtgLSF.pm index 070d07f..85f6f6c 100644 --- a/lib/HUPANunalnCtgLSF.pm +++ b/lib/HUPANunalnCtgLSF.pm @@ -9,8 +9,8 @@ sub getUnaln{ use strict; use warnings; use Getopt::Std; -use vars qw($opt_h $opt_p); -getopts("hp:"); +use vars qw($opt_h $opt_s); +getopts("hs:"); my $usage="\nUsage: hupanLSF getUnalnCtg [options] @@ -37,7 +37,7 @@ Necessary input description: Options: -h Print this usage page. - -p The suffix of contigs file in assembly directory. + -s The suffix of contigs file in assembly directory. Default: \".contig.gz\" "; @@ -71,7 +71,7 @@ if(-e $out_dir){ my $thread_num=1; my $suffix=".contig.gz"; -$suffix=$opt_p if defined $opt_p; +$suffix=$opt_s if defined $opt_s; #Create output directory and sub-directories mkdir($out_dir); my $out_data=$out_dir."data/"; diff --git a/lib/HUPANunalnCtgSLURM.pm b/lib/HUPANunalnCtgSLURM.pm index bc56bc3..345fd04 100644 --- a/lib/HUPANunalnCtgSLURM.pm +++ b/lib/HUPANunalnCtgSLURM.pm @@ -9,8 +9,8 @@ sub getUnaln{ use strict; use warnings; use Getopt::Std; -use vars qw($opt_h $opt_p); -getopts("hp:"); +use vars qw($opt_h $opt_s); +getopts("hs:"); my $usage="\nUsage: hupanSLURM getUnalnCtg [options] @@ -37,7 +37,7 @@ Necessary input description: Options: -h Print this usage page. - -p The suffix of contigs file in assembly directory. + -s The suffix of contigs file in assembly directory. Default: \".contig.gz\" "; @@ -71,7 +71,7 @@ if(-e $out_dir){ my $thread_num=1; my $suffix=".contig.gz"; -$suffix=$opt_p if defined $opt_p; +$suffix=$opt_s if defined $opt_s; #Create output directory and sub-directories mkdir($out_dir); my $out_data=$out_dir."data/"; From 85fc61f2c340d94cb2ebb67eebbe218829cbc41b Mon Sep 17 00:00:00 2001 From: Zhongqu Duan Date: Mon, 27 Apr 2020 15:39:55 +0800 Subject: [PATCH 44/45] update --- lib/HUPANrmHigh.pm | 9 +++++---- lib/HUPANrmHighLSF.pm | 7 ++++--- lib/HUPANrmHighSLURM.pm | 7 ++++--- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/lib/HUPANrmHigh.pm b/lib/HUPANrmHigh.pm index 22525df..d240a35 100644 --- a/lib/HUPANrmHigh.pm +++ b/lib/HUPANrmHigh.pm @@ -247,7 +247,7 @@ foreach my $s (@sample){ while(){ chomp; if($_=~/^>/){ - my @t=split / /,$_; + my @t=split /\s+/,$_; my $name=substr($t[0],1,length($t[0])-1); $names{$name}=1; } @@ -269,7 +269,8 @@ foreach my $s (@sample){ } else{ chomp; - my @t=split ' ',$_; + $_=~s/^ +//; + my @t=split /\s+/,$_; #print @t; my $i=$t[9]; my $c=$t[15]; @@ -283,7 +284,7 @@ foreach my $s (@sample){ } close FILE2; my $length2=keys %contigs; - print "There are: ".$length2." contigs highly similarity with the reference genome with >= ".($identity*100)."% identity and >= ".($coverage*100)."% coverage .\n"; + print "There are: ".$length2." contigs highly similarity with the reference genome with >= ".($identity*100)."% identity and >= ".($coverage*100)."% coverage.\n"; #Remove the contigs name of high similarity with reference genome foreach my $key (keys %names){ @@ -302,7 +303,7 @@ foreach my $s (@sample){ while(my $line=){ chomp $line; if($line=~/^>/){ - my @t=split / /,$line; + my @t=split /\s+/,$line; my $name=substr($t[0],1,length($t[0])-1); if(exists $names{$name}){ print FILE4 $line."\n"; diff --git a/lib/HUPANrmHighLSF.pm b/lib/HUPANrmHighLSF.pm index 462f7ca..29c4993 100644 --- a/lib/HUPANrmHighLSF.pm +++ b/lib/HUPANrmHighLSF.pm @@ -263,7 +263,7 @@ foreach my $s (@sample){ while(){ chomp; if($_=~/^>/){ - my @t=split / /,$_; + my @t=split /\s+/,$_; my $name=substr($t[0],1,length($t[0])-1); $names{$name}=1; } @@ -285,7 +285,8 @@ foreach my $s (@sample){ } else{ chomp; - my @t=split ' ',$_; + $_=~s/^ +//; + my @t=split /\s+/,$_; #print @t; my $i=$t[9]; my $c=$t[15]; @@ -318,7 +319,7 @@ foreach my $s (@sample){ while(my $line=){ chomp $line; if($line=~/^>/){ - my @t=split / /,$line; + my @t=split /\s+/,$line; my $name=substr($t[0],1,length($t[0])-1); if(exists $names{$name}){ print FILE4 $line."\n"; diff --git a/lib/HUPANrmHighSLURM.pm b/lib/HUPANrmHighSLURM.pm index b646cc5..03a720e 100644 --- a/lib/HUPANrmHighSLURM.pm +++ b/lib/HUPANrmHighSLURM.pm @@ -277,7 +277,7 @@ foreach my $s (@sample){ while(){ chomp; if($_=~/^>/){ - my @t=split / /,$_; + my @t=split /\s+/,$_; my $name=substr($t[0],1,length($t[0])-1); $names{$name}=1; } @@ -299,7 +299,8 @@ foreach my $s (@sample){ } else{ chomp; - my @t=split ' ',$_; + $_=~s/^ +//; + my @t=split /\s+/,$_; #print @t; my $i=$t[9]; my $c=$t[15]; @@ -332,7 +333,7 @@ foreach my $s (@sample){ while(my $line=){ chomp $line; if($line=~/^>/){ - my @t=split / /,$line; + my @t=split /\s+/,$line; my $name=substr($t[0],1,length($t[0])-1); if(exists $names{$name}){ print FILE4 $line."\n"; From bafdfbc94840736450af651ed6ea48f3cea03432 Mon Sep 17 00:00:00 2001 From: Zhongqu Duan Date: Thu, 30 Apr 2020 08:27:30 +0800 Subject: [PATCH 45/45] Update HUPANqualSta.pm --- lib/HUPANqualSta.pm | 5 ----- 1 file changed, 5 deletions(-) diff --git a/lib/HUPANqualSta.pm b/lib/HUPANqualSta.pm index a5c1fb5..142c4f9 100644 --- a/lib/HUPANqualSta.pm +++ b/lib/HUPANqualSta.pm @@ -179,11 +179,6 @@ sub mergeFastqc{ next if $f=~/^\./; next if $f=~/\.zip$/; next if $f=~/\.html$/; - if(defined($opt_v)){ - if($opt_v eq "PE"){ - next if $f=~/^single/; - } - } my $fd=$sd."/".$f."/"."summary.txt"; open(FILE,$fd) ||die("Unable to open fastqc output file: $fd\n"); my @tmp=;

?@Yj1uAT)JebJ|6*?L&!=ynCcgLms4Gs6i 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 Xw`dn&pShudNP)-qZZgnTb@l%Nt;MR& diff --git a/tools/MUMmer3.23/show-coords b/tools/MUMmer3.23/show-coords deleted file mode 100755 index 018de94bc620e9658d36386fbbaf32ded59dce4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 119430 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%0AZL+j>Au))^oBV-oOV?_IIjv&{FH zneTVtXRFQn!1v@!{3(F!buHR|5$TC{g^hejA^DJH_Kf?15FGjS2zm|WcR=Pm6ZFqk z>F<7gB+sQ_+i&g(P}Y7ug`gy3{Wco?y5^o(>|4+++sYHmtBA`8#*ogqv3R+*TPT95 zC;aY3epUC!V)qj7I#0|mv3?PBON{Ruf57;zhpajWvi6%?<>sw{7-gy_J=AJN)d1cGX7-Qo2~qNFZ;LI%CGwU zHUo~MtOo*7;$_NM!`}B#mK%Z@%8Cp)Sx0M;W$;MYr`aF0S~pwlM>4GUW>hN5=NYu# zW3}Vf^wm~G0FhcGk}$`d`)u}4oXVrU?N6Sh?9D!4furptql9iMd$g~;y}$Cgs4UAo z%W~3IOUpAE*1Z|_k1~`)tV~M&gDT3vr&;Vf`zX&^`8Ls0cKefkm6v)yjIoCD$LAu& zQx^N$zDm?$|4m=zVXHlwrMzynN3xX8UiK%ml)v>F3j3Pg_II+B4|?0*$Wp#SZL^f$ z5Y;;RFd{lrQ6A`vAJpk8OX0KD#tSI2Xd7AvgmWLul@BL<&OUL zuXB`R+4gOxEB86+^QV*SNcHb0Gv?-#>3{s>Z!GZo@Kn_Hm4OUBJ`mPBbMUi1hxu;L zVJ>LNxnT<{c)!Ko)mzzYX-5pbm;Jfk%7eWxQk4C@;YKXyMvi5S-L*F58DcWwF26OG zyM(*)dBYSA{FvdU+cW`b@uiz#k)e>%^xnibNVEX|qHoGZ;`(!5`qk4p0?X>O6`E@|$U<`HT3 zxyj+?U z(wr>KnbMpq&1KTOUz(3f^C@X=k>)OG?w95fX)5?E_#216F=b^}s(E9^U7N37I_%P6 zSEv^k7F}F;Nzo;0-UR5YX*e7t{D<;P(y*4>=HS2%OkcBM)|ob_Xx272DZ`*GS39h9 zlzXVJdX{v}YVZ%c*+09!X6Wo1Wf)y`)h%_(u$tQ%ke^}tnvD=BYq#LsYl>q!!kTOA ztC>LBn(BSZFdQYtudjAKerLjgutuJnQHIslO&4dYrq|UVt?5FhGiFT3p{d#?-*i;J zzE&AVUH%qS!7zR{1JO}R^_<7b#C&B*!Y7R2W1JDeUR82_p7Or&N%nDkZ2 zaKVL7dT^bZ{4s9wcOD$Q@n@zVl;MI4Jg@Xng)8x6OIU@i2*1hcM`XB!{|K2rSGW>C z>FGx!=m==DS$~H|LGX z@MBany*d9;4~(BV-x)3=57SQbCj4=(G1Hs#%OqLAZW-AwO*5Wp-U5HlU8dWdzY4*L z@oN>oio*J{o@V`}w{klygsGX{oG+=z#Lt{B&GOCkX8YR^Cpo=2|K<>}@R{>9)03x2 zPk$Hu2v^pRpUH1bA!6Y(%Q0L=S*D$45P!+(o6d95TWON%SDF|KJTq`Uh_?(qEd^0cQW1d3L0wr@9co z7n_arT>B?~>E-W4AY+=*w$7~<(YMYu(yPLi_(?DSO#~&U*JXNLrcdv$^z?hv(jS%S zkIMAv@zdQOA-y@aU{w^8Uz=ytzr!%%_-&>)>-8CuB-g(~^1B`Ljf7@=kvD!!w`m?u zOKidjDl08uK#yuS2GPT&B-~Y%cjz zlO3@4MtYW1nC5S$FG%w@YGtHh5JZ~svXi6kmgPIm1TrwqDauX*k%+mv&4^iij*;+e z7^L+k+{|IYb%fb=Bc}1Y_uq~5j}A-rP1HNpw|keBwaajw5NHLpFz4CiKr3ou&Y!9N zw)i?N)!(j|^IfWculPDH)xWo5&QGcSnTk2@r26+!%=skMKP$dYOZD#?r~j$`{XoxM z$zH;4RWQk#^g1cjs$?rB9ZvEFbR3FFUsL^^ib*$9{ZCR%dYI~eGU!`rvX`)1l~WXx zekBK5v063hQmX%{ib-!${UNwD=}1z5RXI&D=|hq?+Lfc2<382@bj2Lcss3j`7rZ*z zOW3W7oV1fdfPuia{z^d_oH_1n%IC49sKPo3zm{&`aG~%&5e~(||3o;H!=L3=rjW@}o% zKP3E5tp8*1XSq#sJ{OtbrxSnO!EL*YZ_0V@kO}s~WV=>{Q``Hc^j|Ig&Gu#jAdJ5z z&Hqf{@4$kqROEcF%%6{HSuieIrN7woMcAFvzr$n1A1~v-CjDJ9{^ioYFNi4fQN2d| zG19+M`gchGE2Mu&`nO7dGoQ`y?-o8XzB19s-=x29Nq?90H`%2R&G?gy_!v>*`%L1H_%}+AHIm`Sg?iRWiQmKT!I&N`Gwah)*^1k^ZLq>O$$iO6G5t zd#UvANQ-~9nSWaS`6wvsxhk#P3DUnx#y8_s#5QX_B`)`)p6V-kr>hlV(eG{pM>uWOipdGi&dvA#BK3(f+=1Hku_J`p{M#^!5M@QsLG%>gI=7hiRlj@NeJ zjwW8N2OnccNYB#sEYs`z;O7^G|5FkEFQ?Fdi}9baF5Ic}kM7CWTf*nz2%jGcebgWL zaX9CcPY0Wp)3w2$cpXOYO~Ho*UjuIHN+AAs7Wf~4&-sYlo&!$xJoF)*&x$9N=`TC{-MEd{0;l%+jYxTKVtOVGear%<{9Lkie(Lh;M}+^T z@aMIg`0b?77li(h(7zz~*_y+Msgu_Qzwj}Q^E)7*xDy75(mnUE#(B*+@Gk+Ua_##u zogbPrr|Vn5hxji1@h^st$nE4F{X1=6lth0VxXD|PQx`bZ+b1LSwg#N?X+7vL`Pb#4 zXMvNPToidI2>y>L{NGN&X%|8&@8+Ls{=D`Vysl$hm=|pQ z08Zs~4(M{dDe_Q+>q&TFRO7VPi>?d6DL+p{^79=-AJI#+R+9J(wHw*v6>;z%!G;k`{laX>g zo5F|I{870s4eN55cC_Kp;-}c<0w?|#MSe`V?gvhMHpPzcyP0ds^scfK$5XuGToMwW8}daH_YnkLmIn ze~i{{5&gyihw1noSls=d@V9Q$d@6hRXX`z1?3w;;O;2n5=(-a)<>&OO!{7PcLEQb3 z(4Wp|{Fw0hCgV&R`uMK!*?dgXn|f|wAV&O0vN}Keh0h~`NBx{+# z=Q5iALz1fx2!2-d!%@LM0z8TT$AMEl9~ZeYcIwk9^sh3Gbnn*XrFVRMrv=*4IF7ZdXHa0x| zZtU#iDSZAS1^)-&RL@cS`+dPj&O6MX-^s$=F@%ap-cJ9bZWmrd2fQu#xhYN0@0J4p zEaSL|Tze5PN~*V?XB_t8e;s~;)|S%c0H=IL$2Io@r+RoSqTi~_M?V|FEShY?%wGY0=Bjni6Xx?W^l-v>Wm1HKROw9iN4 za(|yfe*gjLqgUl&{XCyS|4ItJAMx;{bf;4AqbYcWap>E>akv`z-38n| zmO}qr3VuEX|6AZ>N6t#W7~)j0P6;<8Khg2gwZN0gwZu5&@XL-x*Cc;h*7{H~{TasL zzkStV%9H$QS(}W@m%zWTF%J4acNjJN|5@;JFKZmb4Zg0rp3;Rq75oQ+-zNBw_-TuR z9|b-n_rZU^0-XDM#I8LdxO2i`a$`5Y4?L-UeiDv)68>JsVHd=H%}L_Jz)23zKIv&h z9EA_2@Oeb|T=+AcpZ^j*zYU!F%bPMD7uY(J!spv5_`d-sIoT9B*$_tWyD_<3jTHRj z!1u$Sc~1K89^vyOaH{9ch~9XM`M^)O;4me>1B1I;Z%R(L2At*gqne)g1_AvWf}azA z!}tUD-ki+msTBNkDfp|5qrYTzy1X|9(%pNDZbwJ-$q+EQY~V@q&=UINLT~KU25>6Z z@lQMayonq9X9^$pR!x85c}>snWaG(~1b2QvjNf&e&gUZ$y>}3JQa*o^akSSfnh(FL z2>$0&=-&|feP7e`^zIQ|-viF&62E0Z!`5xLYux#y!-(-4p9h|lpSOhm!pJn!KO}sv zK9Ed*Lkd2Tf>(f3J}uD$cL@LUDfE90JjqVIE_^z->Um-uphC?xkBa z{i^(!1)fw7hf{FHIQr4B=FfY(fY(#PKN^?&!xTQ7DfpWy_`eGOXngFN_b2B+1DxtP zHoi!qe~@wbSMSmFW7bi8CWZbR!vFLabv^vn9$ld~{!(&&CV*3ZEq-^Ogcf4ZuzE-$Z}blmw_PUc{7`lzeS zH%i9b4^rW^ew<2V8)$WCZeeD6PN}?V_RNVBmRcy5;iy>fo{YTsglmPgz}Dw8x`+(-uqpalNl_-X0n3 zEL`&Pr4i-2TdhlfYUEOR$y?#69%H#)eR@Ug79gLKNXV*||RlJ)P#{AaWN z-I$+lc8ul24s4EEm{j=%MLVPx3)Nz)WUFRMQ}A|>w0C4coYmrFp;>)krrzrpj*OvG zs($gvK-gN4u$JpKkm`J?Hk)xz4r4oW94RqMh@D|+IMnqzCscp3(ejpxVBt0z6(O@n zQt0jp(@jya;_Wof@+Aj;&^C^#jb)0oaPVNsEvxeM%$!Twg?gs)x?OKw)mLg^K&vJ- zd;k3O(R|LL^}C|3sI-2ElREH9E^5Z64!Z09NtF;|NVRG4`5y1?C4$0+5Y2X^IqOMQE?;`N$U{UI3$h*{iJLh#JmwyVY}>;U|@9H7iwB?X4qFkF)H=1X(<2Ac^RIhEbSkJd>b=7ydnTViAjB&IEPK$AumzP64i9@8h zW^FXDTAZTBRSRgk!jUSJHEMaL+pOyz)t^MU6iQgnK^W3G>MhPCC-!8qPOISSD#x~v zR+<;8t(Go@z4Pk!OXiDul5G(x)O}Vd9NN@Ty?P6K)#m46zOYtbRoB++38iqh2)5r< zIN_#Co80FMA!dFOrHmr0l_9I;PV}Y~9n<5UEUVHK{gqKeWLK|1V)kUdHm#6izBZ$J zGl>aD8_|ZX_GarZ_t$f2=T_BkQB65Z%6_-JPS<$kRA!Z6d&H9*PeBxdM{LV#exA zL4G})+tEMKZJ%-+=tsPpqU_-;RWj+(Xb#cbey<(P!@T6s(S=BqE36g{w@G-=Z<=w| zFzm=t_tmmOp4_fwWkhjbLaPRPj#v9toJzyJ^>S2R3rSG#;cg?H$aGuOWNBKJZB=He zf*P%2cjs_@wCXFl)qcCtfbtV#L9g(T&J3zr)--wx?{M8U$nu3Du|jOZ)w0)&{=7Ir z-U#}{HV!9pbf5H`1aIch!ong>Tl@rSNQJ zd=W@+;~`0=cZQV8C`$_|6^wi?n_gM8w{at>fnW|NXvl^B%dSVbY*eD2&b84;(gk$4 zf~kyYgl4aVGj>Y#kImIrd`~8;tvqe^o#G+HEq%DXcsM{+giX*_U{JI!w0FQ*`&DF} z$?D``kjYvvqcx+2HOi^qZIfP7t#-S!ZT~9R(dHZ2!YtcD()F&}va`~{#oTfSjtAL9 z^sEu;T)H&A2DRz?k;AO1GNmL^oo?hK8 zu=p4qL3PMAEiGsKJhm9*8ir*H6%2uzS?BRA9x3%(Xs(zi4{sJSs{2aYIQ(Ta@R)-9 zhFKC5s_#{_8IBe6S~x`#CsW}-MdiUci(4Rg9TH9;nNy`v@3NJ@SCTN}!x@e0X4kK^+Wa zX+jlCl{{r`j5b{`$`xMvU4BmO)ruxXF#+3V&?8PY~cGM}Faz1Xx zv^T1M3_GjU;JpI zOrp$}npp^0)I*}iP7gO*FqU3-Ny_Y7bm-JTJPhH{w7~^cZ9;{O!&&iK^(0Y<3|+N{ z8_?mQ-YClF9opw;4Fu%J-u*O>)`Ue&N5B=L8Sr|N;oY*R<4``ZMEM@gjEF&~Uod?85k9pimZ z2h2#FK$LbF0NttCNH7@~`025qpK!I^SvTJMTxG;9#JMA;3T;l-hFy0&ihfHG{bN0x zR1Aed^_tL$FfV{P8~U--9PQNW55)R{!mcKMP#?pJDL)pX$8ie19WgY_)Ot8szCuHx zfu0-;Cr9ABhhy;=S$eI`2`?%qJpM_LM0O&Bql1VzVsvn1i{XJ5pBx0UiyGk)4}y6~ zIsj!I6vQu}!fE4r)R$7ySTR|k;j@vqh8Y`*bHE#pt6J#G>T)Ms8&IHa984VsV=Zah z`lx#yD#EM>m##OCSSwD5CUX&)v7n?n>tU{}t{(_v5-Hw^>5vCa2nfPvEU-*q_*ycc zl@U=$(aO59C*Z^O)>o=-p&Flbkzpk*H^8ux#+4X-m@-2Y%;?|G(#~c(dpN;6HuADF zJcPwyloBhP` zd3#xT)hfb+{?r||zFKmzu0=l+8C$w;p-eV^OqC{8X*|i%wkOP_nLokd7UQNBQ)y&W z2l{p3P={dOencyd>TP!exossI6CEMpCSw|!-Pmo4aVtIOQ>jD8L4=6X4-Or-?HdV3 zj3>At{ZJs7&Fr1lOe$p2}B}TJ&ZzdTZt<_wi=T}HHAHLtb^cYotHW3 zRZgvd1P@j@abKxmwtXeBwu@1Xh0}$_jyw=Z6ZBXyr?ip-dmHy##nGcry%PEJk4U#3La7z@651a zb&$4YP{iXjXtEOAzB&cPsip>@OC8xu4_&IIwKdhj3Y|7)x|+~?Cr2V$*B)UPaE_u2 zbYT{y!6UWEiYyL4^qb3(%JTfEPtES)iV3sr z#MQzR@bIF3pDuu`!ZjZEE|>Pu@=RLT)6$W#*cd~bt=+_?Lvbd*72wBE)KIUoGRrrT zG(pJ0i8n2+tgsLn;^oar+Rv=xWMxgx(QZs`yqyOH2s%f8fMnnp1p_2O>5ETmO6-kg S@YIQB^~5YXba}l~xBd?Yh-a(- diff --git a/tools/MUMmer3.23/show-diff b/tools/MUMmer3.23/show-diff deleted file mode 100755 index cbb663238790f7111b1af17d14db9e55a17608f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 94335 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 b{UPKy=e8|TfRAzlJk8;ZVt~msQ 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 YwusnJ8gGk;Ylq=l0+%tw;z<_zKU3rNQ~&?~ diff --git a/tools/MUMmer3.23/show-tiling b/tools/MUMmer3.23/show-tiling deleted file mode 100755 index f87db3f7ef99457d5c289034f99c5306ab31c7d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125433 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 V-_n#LCNjqc7#^Q}*=OP6{{`uWwFm$J diff --git a/tools/MUMmer3.23/src/kurtz/libbasedir/libbase.a b/tools/MUMmer3.23/src/kurtz/libbasedir/libbase.a deleted file mode 100644 index c5d42f10ded2c8f2ad8b5826240694aab6389717..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39582 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 N_5E1mz|}u~{}2B^44(i1 diff --git a/tools/MUMmer3.23/src/kurtz/libbasedir/multiseq.o b/tools/MUMmer3.23/src/kurtz/libbasedir/multiseq.o deleted file mode 100644 index 762cc9c54ab714f3ab683e77a0e6e58d34346cf6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4344 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 IT;4bT3;*HyJ^%m! diff --git a/tools/MUMmer3.23/src/kurtz/libbasedir/safescpy.o b/tools/MUMmer3.23/src/kurtz/libbasedir/safescpy.o deleted file mode 100644 index 914233a307e4fe22308e9630330dd88304505805..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2328 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 diff --git a/tools/MUMmer3.23/src/kurtz/mm3src/findmumcand.o b/tools/MUMmer3.23/src/kurtz/mm3src/findmumcand.o deleted file mode 100644 index 58584a0cd170f434ff2a892022a35bbd4be74f2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2120 zcmbtUOKTHR6u#3`8z0QX;v(Q{gh4CXA*ltmie%Enj%BJ)Ti>skOlYu4G?_w_ib4`) z7^D3O{slMMl@zs$x^&^jh2laQe1MxOD8_SU?$ztG-ROatd(L-W-<*5z+)NsW+5~|x z5y(OE$6_cUu>hyLYK*KUtB7_YY0n*POa@!Y=$v+3vlp~cZDjPAZhzOSA5R)~LJ8{j zh!Qdy8AaA@Lka87iO`V!O?M0>XxQ)Pv6^0=(d}8o8CQZ6(GOR%sC%S@x`6|767-OHmU07NqKD$f++_FAV#g7wU#Vu5LHobRLF=SP3dj zJi!X}1*x_jzFmV#cQ%8Pus`htLeiE5AI%}_?CwS2# zHU?Xo^yo$_)^{Li^=kIKb61(d&vPb~a0{kTpRqPg|7^8ddiD9qGv~Ck+BxmKcHvo; zeJ{`k^6-%^b4Ckm09BV6&INflb5LdqhUoE{lWJ`MxZI@LSLosLvxX_RPM(`odj$bW zdp@xf_GdB4iB9a?dB4EJ1`t&y|)nI`Y;hHAz{PXj^Gr`+yHzd^RZjN2Z zmQs0>QvB~lh6;G!R{AQ%s4d_OI0G_hD#GcX(ih`c}h=eS*{u({&rgx$EtE z6287Pd{M7m;J}*ynjeK+B{EE;6YH9nty}_vN_}YaZ6Y}!`A`kpB+HtE$x2_4Nm<0(e`u4@EAQ%GEKm{fW7_w zR{^$E|BLke90xxy{{Fm=*D z0kUEdC;`&R@nQFEE8zaShROSu!4EBilWeY#$xr0dsX|6g^HvW2IcAxZ!E>c#W^A6xTU)DQg^YA6shBal3A7ZHUDl*inAFf#@j)%q$!xP^XLp^s zD^XA>G16fT#wP`R5bT2w5k#Q`A7qOW`q*cm#Fy3|)Yg}R#(2)mJ;~ka&Wj#$bME=> z`ME!HZ}QfpHPx5N080j*hHZ-}z*^sSzZi9kFa*273}4iLFvFUD(+vL%H>_}0|HDG_ zj(PFdHLVYBlCK$lAO2>BHzH%Hle=^U;o_Z4?(GfiGSguf5-FKZPNf=BIB+uhE*eJxk$wWK1pVn%Ud=_Q~Ai z>$h_+@1XF=Ip6t3Ux|8Z$kix+z7q{ZWz6=+`iHcH_Nx8~YO8%&|18q0`WM76uG7wZ zn;U*cofD@24&ZQbTss^L!Xd5v?DUK^d3N&b$>~W%(T`E6(9oHgQn{PaB;lXUCrfam zTt2RioH+H|5pBYlFpg@4v3y}{JU_0DoOWk5(-tuwoj5`<_tP(w%XFaL=xR z72GTx*(1>iz$x0i>38}UcbpmOTpd{MdpDbXI5RjjFtr=N2wwAqeIB*&V?D<`->un( za2Es^v$n9oI3EOH_zg11J#XZz;GI#=ho4`-Vm;Vix>@r?aZSWrE=%aRealX z<+T2n(lDBqwKI{WDD7y?${2o{U2+hu{w@+5Gxx-LMBbM@Xi}Yl7{fzSKPGur+N@~r zdr7j^6X--a|7(06W2saDn<`xYs0y*q(_&qeY+u6fnsngx@-W-1r)B&YJ4k(9#*ZdA z*Jb^@j8C}120J7Ml6YRmE6-XSAwe+_&+}$n!A|l_Xlwzm1PPxroj-jN9MAkdWXZEb z1VvfDMTR2D`ICLu+>srVAM^`y@LpszrDT1YQ?L3f(y@c%swC^HV``uL`r+25%DA81 z`ihvuI@@z5G{0UuOgws&yOW@mz3Vn}eqMcdNH#i|ZWbS3@>SqGySkmxqIY4RvMzo% z4#=@&z;FtudzgGz?Quuo*{DTyJIfZ|f!ojl_JX?$#4j5Ls zfM&H0)p}JpwFdqnXxe_@#x9Mfs5a^WTyRAUs`X||K+|tHvF*&c0aSd~^;$Ji4cu1% zi8CKGZO5&-_B?oA0$?h?RTowK6BCG8*Y}~)^s9AIp(0USGmh&v-5{_pxY0N~it8ew z>qmG0@6A{Yf+)o4PBK475QX>iI* zf+)$l*JHd@_mH%Il$!kME#o{l6t2$amcr=`X8*qwuC6yLA3R>Kbb~?3sjiy8q;Pfr PrxdR4zoyisTrB?r=2f`Q diff --git a/tools/MUMmer3.23/src/kurtz/mm3src/maxmatinp.o b/tools/MUMmer3.23/src/kurtz/mm3src/maxmatinp.o deleted file mode 100644 index 9fb944f1494880a4319e4aa045253f6bf64e6f71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4488 zcmbtWZERat89t8F)uh4KYs>JoYQ3!P@L1~EZN%D*4d3iudJ0LIwi+st65Tr2iG{!L zy%X2&hJpnw1S0XzQSzdEayI zO^z=yKj4+F&pFR|-jDOX=fjU^gP-aO1c)aAaxYmMc_<;#jcffh@1{wZY$D3%Q%&V_ z8au18ca)5BC_~w`2Pym6!P)*j2iWhZ{pToc+=B`;hhh?CZ!ci~68=#37v2u;`#W9I z(hhVasm#@(E7^@MLbOy%OI=)2VD2P6zENXfV>)T>n~3 zBG$IqPd`(CZ_9)T9dP#;@ny(d(d(WaNBsheSa>g~m(HvOi`irb{A=Q)$-T4itWJg1s`1*s;r ze;ob75oK68qI^*qS>8TncjvL!kpgh1VdEz*6p<< z&n)YoVVPd#tVUW5Es6`Vn*rrCE>`&w{xU7P^6mFqt(>#2A-6(jOqEyX=k}Sv%+@3u z>RZu)Wfx+hI&EYk^WC7UHlXwib?BXj&)GJxe#*4S%7c)q+zFt{%A-vZA!HuCsZ5J6 zSnUc!eV`yiX)m8#pI>U{XE=Xl@mi||>4pdt`_fuW3rjw>6V5OMFKs94Y`qTi5EkJp zSUB#nA+iv!2BZ_>AuB%s4Gz#Bez|6pvWA?e3r4YG9g|Ii&X?q3tzhLV^reC!=XBH3 zDN9mzI7AtZP?=DT*5@GX*2<<;<1agA3dVu?QW-3RuLE=7 z&6M*cnVxn`%eg@o8f0lOJ`Tnw(RjYFYIeuNsW~v%T6qDC&!6WD} z&7Xs*%dh3QtnN3;hGUl~E5!cF%QeVGV^`pkh{LrpIIG5b74{Ea>V-GZ347H^&~(%4 z!AkUM)6JUdVC>hF{f4q7(K}n@bNd#*zJCtFZPCVXEJ7QFSah&48k6A^#21}?sMN0p zC_6*h?{8d&i|F0uM_<1R9=W=GC2(W&-ShT^_b)HFm)HDTF!^5=OLoXrLm$nT#vrSe znuUci`b8^8bjalRJ&O)sRY;xXCvrjJMO9p~>$!0}|y^t$c zWusaxSBr*e>SKm%m7#h?y-+|klGRJ4vL%-*MoI7mI%|&erp$K}A^Y#U?=CsM|6t}e zxj)gLxKrMpOzlqYN$rv24;Z5|)h!3#)qfk>M%n5#B=D67NMJG&xT$wz=megAz_+<` zAHgF!5RQDaOASY#2-2`T+dUADKfXZ;Cy!sJhWFYV4~Fj#&IEeGdjV3y@qw^B5RQV% zKsfZ7O){vDyS84#_Ha1)c-Qfu-QAV%35WJ?LM&k(D_Z(dXsxQ#j(feTQP2~XF=>&+ zsBY;banv+PqFTlQ(o>04`*1HwWXr{(Q34Ifo{@l*?1F=p{Sxrdm@z(*tLjAq9shqK zgF4X`TTkl zeqVhsfj0kF{S@e8T)W{D#q+hu#}obbK7iho-`yn7GNmbe@5gfR;8@hEwGtS<`UxR*TqAp}7X z55wo-e?Sn#kB8iYh`0ow$N!dqi*Y{f;$EB|MWZ0k3VbonJQ@b^`1sDDlw2Ge+`pdR zr#tYU>A*kNf&YsR{3{*!*E;ZTb*~bC{CBuGs)_NZ1sv~WZ(U5lHw*Z81YG1_5O9(I zF98?p;$3b2I5)WG4RP@)>veIAU#!;+0=`9v^N?T%_or7!UEqI6;MW9PT$e4_!Fcw< zhw=@9e*=uYyqy$qF%Rbj9M|UY|0v*Me%^F(e}3K;a4|pc33kN%1l_}lc@y&^!x#l| O{5&bR9S`^JzkdU9I)8fr diff --git a/tools/MUMmer3.23/src/kurtz/mm3src/maxmatopt.o b/tools/MUMmer3.23/src/kurtz/mm3src/maxmatopt.o deleted file mode 100644 index 5dbd5fea92ff3c18d22c6bd3d37f3f2f68b6c9ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8816 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 F`yXm-ybk~X diff --git a/tools/MUMmer3.23/src/kurtz/streesrc/access.o b/tools/MUMmer3.23/src/kurtz/streesrc/access.o deleted file mode 100644 index b2449623aa7aacca8e9ba7f07951d5037a5bfd84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4136 zcmbtXZ){sv6~E7ZU0+hq&mGZ-)JnA=pjfPy-9;jq3VpYEj&C%Fg``o~(ynz~y9rC3 z5WlQ0D(asXuen?-IthgM07z&;P>|RcrtM2`5=h#CP#Tyt0Uy>1WlOVZRAo(7Si?E* z-RHV)_63gQ+;e~T{6F{H*PcnFx_pX4JW|M)$^D&&5)x~;&l?VFkVi=)iC65qisctw zpT#dM+lpJ$H)B15aV6id`{nG5+aWjd89c<`Yys2 zyEHTp#?InO`OQRp*y@9r~U=9tmCqNVGSAa zgR`*A{PNPJODysxo4w)VOY18lnYwyIS)$xfMKTrvh9pYMR=YG}HL#9Z-To_R3I%LV zF98>?P`juqObmvst%8P}c+0AWlGxxvP#Pkja=5;Oogu6`O=eb*HDfzp&|0ApX>=YXVp(P%~7t9Lb$YG*JK zY?`Z&KEPSI$zbKCm#qddp(zWLk4vw=x(8nS0+Bh&L#sc5O+VwenEif?i3=5UU#eIK z#b8_6^eJDs@H!y8OBK(wug?N&Oh(RKgRu6o*=ta?XW+hEpYg%Ld+;MdZQ*`q|1LHJ zu@YC12VEc+t;UyZD^TGs`}%Z%9_Z$OWc=og zALIrYe+yFhH>A)G(YS%6TGY}N>$8dY2f2$Tf6uSBFwq}Q@fB+SUeRCM>)UwC>=5swmAHcL`if6S&8o+=PrN8M@D=>l-5{7C$pP2f< zdX%0$-J%g|i+x9Vaj)nP@FjarVP)0e{Q)Wtw5V`3{LJqMl=rGsG_}|_6dvk^BdB6; zi0ZE$Xwjy7HHb*7Mg()n#ALBYm>^ZUtxw&90J=N=sh|G{7$&}d78d#jj*;j|r6P0g zB+>P2S8tS0Z&#?$oIaeP{EjQ;_K~hHS)J~ji-c@dxv7KlIT~5kOP9eaWTj9278riT z?RJkQ8cJ96=^?lP@;1!Z-i98G&?>TyKb(^&9YD?l!=EH42>|(LZVw;JMYXBq=ZrY1``)WZFQ$JCI&IZc6clF>C{j z18YBm{)?f&{S-|8Hnr!S#+ZC4Q1ul8Z|Dd7DXUFjvN}(uNFHF~Q!~#&$FUrQ+7-p* zRC}WtHqL!x+`sza$2h{!FPJ|$d!~2}qUeJh=V@eaHRuHD1YK6oQ2*((+Uj8#z??(X z`H;5`XHpYgT1Qtvx0}ItN+g=&x7{YLed+!@oO>7S?&GIaXygLbl*k>v!Diou@%)y? z6~<46n7yE~bN7f!h(5(J1F<(|Z){jAqBFqfARSf?^zlxp#x=O2+twFB#+dvW6N#d0 zUD|^NSFAzSu{hCJZSX*fMebH_ok+y4-f;T699iO2Mc1^ve?z*5_@JAoLR`^HCn0S2 zuEXSE-L}Ga=`m9bY9bj}t9j1`wX)g=lXSrpy_ztfoM3zHr`~(w$M!t#G{b3+SvH_O zUD`|=6s_8x87MR%=}abDC`2=aBs)8w3b!V|G7t&3McblZ4DX4>_r#uzKN)WA%N`4} zwB_Qv+agd5q$YPE$~XInQVc0O0$a6<;35S0PI>0M55OZ9lUTQ05rZ@xs(>C+8~ncJ zaD@C2R~ii2zGTqwJ>3`#(V%8-OS#O`+YWdPh@q{EC=cX3qOhW^R}cVt7XR!IhRVME z!RGJyQ^D{{su^sxw6Iy+Ot|7EX03PwMY?AYC1J*C`ip0J5BPa1Ci92sIV3x#VvP90?3)lttd9eUnr5^)_eqWU( za^71!t$x&wXRXon#PRItNd5(QG_zTPNH(1t$>+wZz|o0xJ~R9PG@MNzgY%L6@v78` zbP?a<(QMv@3d3V3$I}+R*kHFXnaPZfWzyEjSiayw=}`po$0iHe!gxB9eQ_i`ZcUJh zu`z2CX$U(f>wyc-68tmYp$|U+?~!?9A8T*PVYxvytea=&ec6C|`Fj$tmk)z365=uh xXOG`iBoFs`!(6zEACdcmb$D1B`(7Phk@(N+aPOYHQ-^!^WT(7`UOe7?_%GiWcDw)p diff --git a/tools/MUMmer3.23/src/kurtz/streesrc/addleafcount.o b/tools/MUMmer3.23/src/kurtz/streesrc/addleafcount.o deleted file mode 100644 index 0a5b683089555e0928186f808f74fb7f1effebed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2840 zcmbtW&2Jk;6rZ&XS<+y;$cIQN%1T(M6=da2B9T@I*|p;gB7#uUN>NDB#$My7jvaY7 zC?Gy8ZG%`=ks^Uaj}a%h<(PtG+@uh3Z2AZAaf(z9ttt+vNaelR8D}#j7kJY6z4x2n zdvEs5?5sbToGwNbg$Pl|E9B4R(ZF?m_!z z48Vd{O#XnZ&U5f{fRNHTB<0 z57KofotZR#&TRu9*7b{b3)1YxK1Ua_roUsjpHJRIbLP(y@8FrJnjN?^Y+A?(VgE- z43iS|9&{oIdXJz+29mRI2<5HuV;c~VncF31rBb)dYPq@6aP%@EQ~CS_?d;U+m(OYA z`ndj*HkvU;Gh@b>cJ`80(WvPJ_{jJ4t6)z1&<{vKl~XG#yKaCXLvRS-u85jJ9g;R9ohfg_Zx8Xb_EUcv8xe<^B-vZAh@+ zVHpC49f~jr_RLcOFoVfKPQgG^MF)hvf1sa-fq3XT0gsTkrMe7+AGy|xfML%68gD=> z)*pot7EwPD2Epc!)6-dwiSs7t*ZBHJ1i-Z%|0<7{XynET&oANy|0<7{=^}nh5V;op z7cjmba!+w?vp-<028!(;#)^2cf2RSHdygTMgEe$QBCj8PdF@EQ&ky7l4;TOphg=_z z*>UwZIq_SV4~twsJQuc+7b6cIhcRJCd%G`?Ku3>V39j$o9me-463Qd)H_Q|zPXq}= zzj)suU*j0N*TBZR2XVX$QP`aon2@KBTSry2*F_nZZvjFs07ZW1G3rei&p_QaIw0&W z1zmx09N#$szkUM#72ufvK7THD#{wpQM3!64vSr)&T_N0FXqk<2%{c0g60=@!md!?G z#kTBavuwS$Xf8XgBl&E&d@YMqtYxQGU2NG-;8y_*hrDY!L5;;mwHZ(V>V4V*1lJ0( z5GeR(bo7oD-xxgmc&_m)jIs$fip=i>Fnd?R{JR{N`M;gOAL9K)KGqiJW=z6)IC)vZ zH9j%Vam*2iA=dwKh#x*pZitU}s^I?^!tvY)JcfxuP=#>~K@h|_h56&`_Yl{(KO^C7 P?k`KY=)(;O7w7LE8efD) diff --git a/tools/MUMmer3.23/src/kurtz/streesrc/construct.o b/tools/MUMmer3.23/src/kurtz/streesrc/construct.o deleted file mode 100644 index 9cc18539a72adc5541c6535c5fc3cc33922d2783..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14344 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 JmR>7w`Ct5pU0MJD diff --git a/tools/MUMmer3.23/src/kurtz/streesrc/depthtab.o b/tools/MUMmer3.23/src/kurtz/streesrc/depthtab.o deleted file mode 100644 index 24515e70e23e6b30b707e9fa4d533097de97e28a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2440 zcmbtV-EZ4e6u*wM)?}Fzph6i%)DPK|32HT6#hO)`>c&|;wPVvtVQ6%fm%7T7ekt~v z!ULV;wZbwPeL?UK@WRtxd4X=DFocj`VgjiWnvjrMr4`~CN;t>9w{^W#LU1JK-t#-Z z^XcoG#lrB}2*(j7963YwG=>uLJ-@f__qP4y2#JwV&Dj~z>@C5)5MTPn>dCIx4<|bM ziG82TeQO@m+yZfaaog@JJ+!v6tIoqO(02oW-1BjdR9V;TFNG^(_Y)l|A<7%d>&mF| z+USVp{0VVW!|r@ibF8#5>De_`O$)<)cWy!i^NixQEUhjKDejEWR~8cXi%@#4!1d+h z^SqOfJKG-poc&dscK5f4#=m422uHmu_aJZT%9!$&GNxQr#{K*S_gx`hi!K(H8j7nf z3yzwOCT@KM*_^e4v!il5^)&VeS#tTf>1Ellw>jIKaM+z6X3#*;1XNP`~Z>uh_qH zLp61gKVR!vhFL`W@`72lS9g0x%x{<#wE5ugMkCR23xkn=S(1|bvD#XHZgNF){dxeP z^;ErjHa~=*&KhgY-oCllo#Jc+y30MP9;vsp{48GX5ev8Nlm#q$^HihJAgVEEm84@+ zH}Hv(2~;ipnp`AgFrPmyWd>gzJt6hTJ@P53yDQt>buxQW%3LxgBu%$`ytC&7A#Gl_ zgmCX%BHTifYmc`ID{wl}fWJU(L%1qpayg=kDVtYCX;Dmpu80B|1``}dPa60^42a1O zA_HRTHa{RrwdjDDdH;|ib}hFkVz1pgC|-<=$HZPh6fpw~V1mbhD4ad)2a(OUr=bxd zn^whNOKev$rgYgd7Azu9=$208YoZc8XeKh-Zp_8XG>RniVRp7pSNEcnPOHQ-b*4~0pJ;>Rf- zxNbblN+>U-KauNYFksC8>YoK)tg9QIps@VU2SL~)7lp0;bl-(wKt84QcLp%rGC#JS z3t&O&PY3kR{22Et^$*j3roaj#(v{7h!EeH*+55Zvl+R#&;rl~h=Fi^W(}0C%kDet8 zmQV>uxPH{bwIe;*>O1vPhd8KMQaC?i&GKuMi1Q6fIDgO<+#@ea{%8a-w&!=>B18O@ zZ(0e~*KERwAKD*)YCNIMhphZ=_xla}6JIYOIIm{{b$WLnU`OEzf5R9}f(Q8*Q33Jp zKv?m+XvPoT)Mjb6$}Vm)SGhi8O_FK7Y%mP2G{YeJ)YNQIpP9H}8s?l{H0H1Cb5;d& zq2PCj5`!l=l~+8}KO<=S3;r}vy6KB#`~>BlrZ}D{oB`vn9l-zY0Dh7l%5eM?#l!I> PnjdjW@enP9v-$o5NV;7b diff --git a/tools/MUMmer3.23/src/kurtz/streesrc/dfs.o b/tools/MUMmer3.23/src/kurtz/streesrc/dfs.o deleted file mode 100644 index 43d0e78810400d3411ea0e2306a2c53b4e649f7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4448 zcmbVPUu;{|89(+l`^7<`a{8!XE(3Z0LRI!nI=u+Vu+)~7q;-!G-JSPseC6>4~q^sP@>k(eO99Ai?j*pXKz%i)xGJ&=ltT0AXg6K5NGr#(@Gx)8GDD) z_HIho=kVp2MDS(lL{;J*DF35|;~L@kHEotY*UI09ZMsy|N*5t1ZUnT_Dm)d}0^Bn7 zS+P1We`bYcti9DiT`j}#B=j>@iG%zk^{?EBzfGE|$3!(v3xknGM&$s?MjY z00SHuE42be0MtsSaUdr0b8v~&xoNOtxZW$D zenFPl2WT!n1llM$JOi8W<#k;vUdK$V7FPlpF|@+Ki)D%LIR|}lE9Z-FZr9&AV8hWO zl^9?<{J20Tugps{;EUCVG|g6I5VQAws-FXV{=PCa<$+L2wQ_`FfRFC^+!|L5J9vq- zne@OLZ6lSh*YFi_*13N1v7}YX0v#5=53@SAKsCAvBCH&9;FO6ReL&EgLlG^qfI zrG^qDZMfn?ZVe*M$aRE2Fst&5)gThyLG-wR^IHm0gJw>0&ttm9*+GpuDJoBF$Yk2* zB@hdMSM}g@bwzk>6v zG5hH}^Wx2y!8NsT`i?v^+v^4P5xAE))U5tHX+vw@s{WI<3iyWls}1#6o7Ddp)aB8r zmH4?diEMLmi(5ZOqogXMz|?VSB`*Esf7R*&TvRKEF@p~~iE^TfVvano7d_PHi$bIaW`MouQTEcYT4-5_%qdRgaXE6v1;G`4%0dCKjVdVc)s&xEE(`bfQO(|+OcK#yM|B^0{8qdHjUyZ zVBvL{(zLi$=U~5R)8)@c;S^(7SNKFH~zagtuVsAR&i7lQe1VYRQ7(eK+MB**y8U3m3|BjqV}!ena0gVN3X|Tj%3GC5+UeW0lWq-~ z*x0ve!?5GOEu%B`EH0EMe!3PP!JPQ1@Z-t{&7&Bt!6SEwl4^#^2^uf_Y~0KqXYqnL zZGTU=v*}zu8#i;aCX0_`%`A%_FBDjOdXg5To`@${e0XwvJU0QAiAggTN5#4dW_I`# z^vF7Q;+fIu?0C)z_T@h@m{NXN5UZtWzgea_EtwlVYIt>D7CCK?kSsYHR=i# z{~ac)@8J0=;!e>5L-uTZ_u^@$|0BprKjt(J*<&GdesIPn3b|=>Y$Bh_j^@V-Cd=mY zlf&7Gk(olSFqIw7{d6olWlpn^+?07@bZoj{qVMH$Y!ol={&@COuI7W>6JKc%7rfb{ zdq9Kk0qx-rKsnwgA%vx9uH5C(l27jP F<^SD}7#{!t diff --git a/tools/MUMmer3.23/src/kurtz/streesrc/ex2leav.o b/tools/MUMmer3.23/src/kurtz/streesrc/ex2leav.o deleted file mode 100644 index df3fb7525334dc081adec2e12fc336b4d1628f0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1320 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 Jck#;1e*vi?`kVj& diff --git a/tools/MUMmer3.23/delta-filter b/tools/MUMmer3.23/delta-filter deleted file mode 100755 index d517bd315d5ec059f63bbe033992be0f72707fc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80367 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 X){RYRc_?jcDg;u!LKcq?NW=awrxLbg diff --git a/tools/MUMmer3.23/dnadiff b/tools/MUMmer3.23/dnadiff deleted file mode 100755 index f7ad317..0000000 --- a/tools/MUMmer3.23/dnadiff +++ /dev/null @@ -1,839 +0,0 @@ -#!/usr/bin/perl -w - -#------------------------------------------------------------------------------- -# Programmer: Adam M Phillippy, University of Maryland -# File: dnadiff -# Date: 11 / 29 / 06 -# -# Try 'dnadiff -h' for more information. -# -#------------------------------------------------------------------------------- - -use lib "/export/home/zqhu/tools/MUMmer3.23/scripts"; -use Foundation; -use File::Spec::Functions; -use strict; - -my $BIN_DIR = "/export/home/zqhu/tools/MUMmer3.23"; -my $SCRIPT_DIR = "/export/home/zqhu/tools/MUMmer3.23/scripts"; - -my $VERSION_INFO = q~ -DNAdiff version 1.3 - ~; - -my $HELP_INFO = q~ - USAGE: dnadiff [options] - or dnadiff [options] -d - - DESCRIPTION: - Run comparative analysis of two sequence sets using nucmer and its - associated utilities with recommended parameters. See MUMmer - documentation for a more detailed description of the - output. Produces the following output files: - - .report - Summary of alignments, differences and SNPs - .delta - Standard nucmer alignment output - .1delta - 1-to-1 alignment from delta-filter -1 - .mdelta - M-to-M alignment from delta-filter -m - .1coords - 1-to-1 coordinates from show-coords -THrcl .1delta - .mcoords - M-to-M coordinates from show-coords -THrcl .mdelta - .snps - SNPs from show-snps -rlTHC .1delta - .rdiff - Classified ref breakpoints from show-diff -rH .mdelta - .qdiff - Classified qry breakpoints from show-diff -qH .mdelta - .unref - Unaligned reference IDs and lengths (if applicable) - .unqry - Unaligned query IDs and lengths (if applicable) - - MANDATORY: - reference Set the input reference multi-FASTA filename - query Set the input query multi-FASTA filename - or - delta file Unfiltered .delta alignment file from nucmer - - OPTIONS: - -d|delta Provide precomputed delta file for analysis - -h - --help Display help information and exit - -p|prefix Set the prefix of the output files (default "out") - -V - --version Display the version information and exit - ~; - - -my $USAGE_INFO = q~ - USAGE: dnadiff [options] - or dnadiff [options] -d - ~; - - -my @DEPEND_INFO = - ( - "$BIN_DIR/delta-filter", - "$BIN_DIR/show-diff", - "$BIN_DIR/show-snps", - "$BIN_DIR/show-coords", - "$BIN_DIR/nucmer", - "$SCRIPT_DIR/Foundation.pm" - ); - -my $DELTA_FILTER = "$BIN_DIR/delta-filter"; -my $SHOW_DIFF = "$BIN_DIR/show-diff"; -my $SHOW_SNPS = "$BIN_DIR/show-snps"; -my $SHOW_COORDS = "$BIN_DIR/show-coords"; -my $NUCMER = "$BIN_DIR/nucmer"; - -my $SNPBuff = 20; # required buffer around "good" snps -my $OPT_Prefix = "out"; # prefix for all output files -my $OPT_RefFile; # reference file -my $OPT_QryFile; # query file -my $OPT_DeltaFile; # unfiltered alignment file -my $OPT_ReportFile = ".report"; # report file -my $OPT_DeltaFile1 = ".1delta"; # 1-to-1 delta alignment -my $OPT_DeltaFileM = ".mdelta"; # M-to-M delta alignment -my $OPT_CoordsFile1 = ".1coords"; # 1-to-1 alignment coords -my $OPT_CoordsFileM = ".mcoords"; # M-to-M alignment coords -my $OPT_SnpsFile = ".snps"; # snps output file -my $OPT_DiffRFile = ".rdiff"; # diffile for R -my $OPT_DiffQFile = ".qdiff"; # diffile for Q -my $OPT_UnRefFile = ".unref"; # unaligned ref IDs and lengths -my $OPT_UnQryFile = ".unqry"; # unaligned qry IDs and lengths - -my $TIGR; # TIGR Foundation object - - -sub RunAlignment(); -sub RunFilter(); -sub RunCoords(); -sub RunSNPs(); -sub RunDiff(); -sub MakeReport(); - -sub FastaSizes($$); - -sub FileOpen($$); -sub FileClose($$); - -sub GetOpt(); - - -#--------------------------------------------------------------------- main ---- - main: -{ - GetOpt(); - - RunAlignment() unless defined($OPT_DeltaFile); - RunFilter(); - RunCoords(); - RunSNPs(); - RunDiff(); - MakeReport(); - - exit(0); -} - - -#------------------------------------------------------------- RunAlignment ---- -# Run nucmer -sub RunAlignment() -{ - print STDERR "Building alignments\n"; - my $cmd = "$NUCMER --maxmatch -p $OPT_Prefix $OPT_RefFile $OPT_QryFile"; - my $err = "ERROR: Failed to run nucmer, aborting.\n"; - - system($cmd) == 0 or die $err; - $OPT_DeltaFile = $OPT_Prefix . ".delta"; -} - - -#---------------------------------------------------------------- RunFilter ---- -# Run delta-filter -sub RunFilter() -{ - print STDERR "Filtering alignments\n"; - my $cmd1 = "$DELTA_FILTER -1 $OPT_DeltaFile > $OPT_DeltaFile1"; - my $cmd2 = "$DELTA_FILTER -m $OPT_DeltaFile > $OPT_DeltaFileM"; - my $err = "ERROR: Failed to run delta-filter, aborting.\n"; - - system($cmd1) == 0 or die $err; - system($cmd2) == 0 or die $err; -} - - -#------------------------------------------------------------------ RunSNPs ---- -# Run show-snps -sub RunSNPs() -{ - print STDERR "Analyzing SNPs\n"; - my $cmd = "$SHOW_SNPS -rlTHC $OPT_DeltaFile1 > $OPT_SnpsFile"; - my $err = "ERROR: Failed to run show-snps, aborting.\n"; - - system($cmd) == 0 or die $err; -} - - -#---------------------------------------------------------------- RunCoords ---- -# Run show-coords -sub RunCoords() -{ - print STDERR "Extracting alignment coordinates\n"; - my $cmd1 = "$SHOW_COORDS -rclTH $OPT_DeltaFile1 > $OPT_CoordsFile1"; - my $cmd2 = "$SHOW_COORDS -rclTH $OPT_DeltaFileM > $OPT_CoordsFileM"; - my $err = "ERROR: Failed to run show-coords, aborting.\n"; - - system($cmd1) == 0 or die $err; - system($cmd2) == 0 or die $err; -} - - -#------------------------------------------------------------------ RunDiff ---- -# Run show-diff -sub RunDiff() -{ - print STDERR "Extracting alignment breakpoints\n"; - my $cmd1 = "$SHOW_DIFF -rH $OPT_DeltaFileM > $OPT_DiffRFile"; - my $cmd2 = "$SHOW_DIFF -qH $OPT_DeltaFileM > $OPT_DiffQFile"; - my $err = "ERROR: Failed to run show-diff, aborting.\n"; - - system($cmd1) == 0 or die $err; - system($cmd2) == 0 or die $err; -} - - -#--------------------------------------------------------------- MakeReport ---- -# Output alignment report -sub MakeReport() -{ - print STDERR "Generating report file\n"; - - my ($fhi, $fho); # filehandle-in and filehandle-out - my (%refs, %qrys) = ((),()); # R and Q ID->length - my ($rqnAligns1, $rqnAlignsM) = (0,0); # alignment counter - my ($rSumLen1, $qSumLen1) = (0,0); # alignment length sum - my ($rSumLenM, $qSumLenM) = (0,0); # alignment length sum - my ($rqSumLen1, $rqSumLenM) = (0,0); # combined alignment length sum - my ($rqSumIdy1, $rqSumIdyM) = (0,0); # weighted alignment identity sum - my ($qnIns, $rnIns) = (0,0); # insertion count - my ($qSumIns, $rSumIns) = (0,0); # insertion length sum - my ($qnTIns, $rnTIns) = (0,0); # tandem insertion count - my ($qSumTIns, $rSumTIns) = (0,0); # tandem insertion length sum - my ($qnInv, $rnInv) = (0,0); # inversion count - my ($qnRel, $rnRel) = (0,0); # relocation count - my ($qnTrn, $rnTrn) = (0,0); # translocation count - my ($rnSeqs, $qnSeqs) = (0,0); # sequence count - my ($rnASeqs, $qnASeqs) = (0,0); # aligned sequence count - my ($rnBases, $qnBases) = (0,0); # bases count - my ($rnABases, $qnABases) = (0,0); # aligned bases count - my ($rnBrk, $qnBrk) = (0,0); # breakpoint count - my ($rqnSNPs, $rqnIndels) = (0,0); # snp and indel counts - my ($rqnGSNPs, $rqnGIndels) = (0,0); # good snp and indel counts - my %rqSNPs = # SNP hash - ( "."=>{"A"=>0,"C"=>0,"G"=>0,"T"=>0}, - "A"=>{"."=>0,"C"=>0,"G"=>0,"T"=>0}, - "C"=>{"."=>0,"A"=>0,"G"=>0,"T"=>0}, - "G"=>{"."=>0,"A"=>0,"C"=>0,"T"=>0}, - "T"=>{"."=>0,"A"=>0,"C"=>0,"G"=>0} ); - my %rqGSNPs = # good SNP hash - ( "."=>{"A"=>0,"C"=>0,"G"=>0,"T"=>0}, - "A"=>{"."=>0,"C"=>0,"G"=>0,"T"=>0}, - "C"=>{"."=>0,"A"=>0,"G"=>0,"T"=>0}, - "G"=>{"."=>0,"A"=>0,"C"=>0,"T"=>0}, - "T"=>{"."=>0,"A"=>0,"C"=>0,"G"=>0} ); - - my $header; # delta header - - #-- Get delta header - $fhi = FileOpen("<", $OPT_DeltaFile); - $header .= <$fhi>; - $header .= <$fhi>; - $header .= "\n"; - FileClose($fhi, $OPT_DeltaFile); - - #-- Collect all reference and query IDs and lengths - FastaSizes($OPT_RefFile, \%refs); - FastaSizes($OPT_QryFile, \%qrys); - - #-- Count ref and qry seqs and lengths - foreach ( values(%refs) ) { - $rnSeqs++; - $rnBases += $_; - } - foreach ( values(%qrys) ) { - $qnSeqs++; - $qnBases += $_; - } - - #-- Count aligned seqs, aligned bases, and breakpoints for each R and Q - $fhi = FileOpen("<", $OPT_CoordsFileM); - while (<$fhi>) { - chomp; - my @A = split "\t"; - scalar(@A) == 13 - or die "ERROR: Unrecognized format $OPT_CoordsFileM, aborting.\n"; - - #-- Add to M-to-M alignment counts - $rqnAlignsM++; - $rSumLenM += $A[4]; - $qSumLenM += $A[5]; - $rqSumIdyM += ($A[6] / 100.0) * ($A[4] + $A[5]); - $rqSumLenM += ($A[4] + $A[5]); - - #-- If new ID, add to sequence and base count - if ( $refs{$A[11]} > 0 ) { - $rnASeqs++; - $rnABases += $refs{$A[11]}; - $refs{$A[11]} *= -1; # If ref has alignment, length will be -neg - } - if ( $qrys{$A[12]} > 0 ) { - $qnASeqs++; - $qnABases += $qrys{$A[12]}; - $qrys{$A[12]} *= -1; # If qry has alignment, length will be -neg - } - - #-- Add to breakpoint counts - my ($lo, $hi); - if ( $A[0] < $A[1] ) { $lo = $A[0]; $hi = $A[1]; } - else { $lo = $A[1]; $hi = $A[0]; } - $rnBrk++ if ( $lo != 1 ); - $rnBrk++ if ( $hi != $A[7] ); - - if ( $A[2] < $A[3] ) { $lo = $A[2]; $hi = $A[3]; } - else { $lo = $A[3]; $hi = $A[2]; } - $qnBrk++ if ( $lo != 1 ); - $qnBrk++ if ( $hi != $A[8] ); - } - FileClose($fhi, $OPT_CoordsFileM); - - #-- Calculate average %idy, length, etc. - $fhi = FileOpen("<", $OPT_CoordsFile1); - while (<$fhi>) { - chomp; - my @A = split "\t"; - scalar(@A) == 13 - or die "ERROR: Unrecognized format $OPT_CoordsFile1, aborting.\n"; - - #-- Add to 1-to-1 alignment counts - $rqnAligns1++; - $rSumLen1 += $A[4]; - $qSumLen1 += $A[5]; - $rqSumIdy1 += ($A[6] / 100.0) * ($A[4] + $A[5]); - $rqSumLen1 += ($A[4] + $A[5]); - } - FileClose($fhi, $OPT_CoordsFile1); - - #-- If you are reading this, you need to get out more... - - #-- Count reference diff features and indels - $fhi = FileOpen("<", $OPT_DiffRFile); - while (<$fhi>) { - chomp; - my @A = split "\t"; - defined($A[4]) - or die "ERROR: Unrecognized format $OPT_DiffRFile, aborting.\n"; - my $gap = $A[4]; - my $ins = $gap; - - #-- Add to tandem insertion counts - if ( $A[1] eq "GAP" ) { - scalar(@A) == 7 - or die "ERROR: Unrecognized format $OPT_DiffRFile, aborting.\n"; - $ins = $A[6] if ( $A[6] > $gap ); - if ( $A[4] <= 0 && $A[5] <= 0 && $A[6] > 0 ) { - $rnTIns++; - $rSumTIns += $A[6]; - } - } - - #-- Remove unaligned sequence from count - if ( $A[1] ne "DUP" ) { - $rnABases -= $gap if ( $gap > 0 ); - } - - #-- Add to insertion count - if ( $ins > 0 ) { - $rnIns++; - $rSumIns += $ins; - } - - #-- Add to rearrangement counts - $rnInv++ if ( $A[1] eq "INV" ); - $rnRel++ if ( $A[1] eq "JMP" ); - $rnTrn++ if ( $A[1] eq "SEQ" ); - } - FileClose($fhi, $OPT_DiffRFile); - - #-- Count query diff features and indels - $fhi = FileOpen("<", $OPT_DiffQFile); - while (<$fhi>) { - chomp; - my @A = split "\t"; - defined($A[4]) - or die "ERROR: Unrecognized format $OPT_DiffRFile, aborting.\n"; - my $gap = $A[4]; - my $ins = $gap; - - #-- Add to tandem insertion counts - if ( $A[1] eq "GAP" ) { - scalar(@A) == 7 - or die "ERROR: Unrecognized format $OPT_DiffRFile, aborting.\n"; - $ins = $A[6] if ( $A[6] > $gap ); - if ( $A[4] <= 0 && $A[5] <= 0 && $A[6] > 0 ) { - $qnTIns++; - $qSumTIns += $A[6]; - } - } - - #-- Remove unaligned sequence from count - if ( $A[1] ne "DUP" ) { - $qnABases -= $gap if ( $gap > 0 ); - } - - #-- Add to insertion count - if ( $ins > 0 ) { - $qnIns++; - $qSumIns += $ins; - } - - #-- Add to rearrangement counts - $qnInv++ if ( $A[1] eq "INV" ); - $qnRel++ if ( $A[1] eq "JMP" ); - $qnTrn++ if ( $A[1] eq "SEQ" ); - } - FileClose($fhi, $OPT_DiffQFile); - - #-- Count SNPs - $fhi = FileOpen("<", $OPT_SnpsFile); - while(<$fhi>) { - chomp; - my @A = split "\t"; - scalar(@A) == 12 - or die "ERROR: Unrecognized format $OPT_SnpsFile, aborting\n"; - - my $r = uc($A[1]); - my $q = uc($A[2]); - - #-- Plain SNPs - $rqSNPs{$r}{$q}++; - if ( !exists($rqSNPs{$q}{$r}) ) { $rqSNPs{$q}{$r} = 0; } - if ( $r eq '.' || $q eq '.' ) { $rqnIndels++; } - else { $rqnSNPs++; } - - #-- Good SNPs with sufficient match buffer - if ( $A[4] >= $SNPBuff ) { - $rqGSNPs{$r}{$q}++; - if ( !exists($rqGSNPs{$q}{$r}) ) { $rqGSNPs{$q}{$r} = 0; } - if ( $r eq '.' || $q eq '.' ) { $rqnGIndels++; } - else { $rqnGSNPs++; } - } - } - FileClose($fhi, $OPT_SnpsFile); - - - #-- Output report - $fho = FileOpen(">", $OPT_ReportFile); - - print $fho $header; - printf $fho "%-15s %20s %20s\n", "", "[REF]", "[QRY]"; - - print $fho "[Sequences]\n"; - - printf $fho "%-15s %20d %20d\n", - "TotalSeqs", $rnSeqs, $qnSeqs; - printf $fho "%-15s %20s %20s\n", - "AlignedSeqs", - ( sprintf "%10d(%.2f%%)", - $rnASeqs, ($rnSeqs ? $rnASeqs / $rnSeqs * 100.0 : 0) ), - ( sprintf "%10d(%.2f%%)", - $qnASeqs, ($rnSeqs ? $qnASeqs / $qnSeqs * 100.0 : 0) ); - printf $fho "%-15s %20s %20s\n", - "UnalignedSeqs", - ( sprintf "%10d(%.2f%%)", - $rnSeqs - $rnASeqs, - ($rnSeqs ? ($rnSeqs - $rnASeqs) / $rnSeqs * 100.0 : 0) ), - ( sprintf "%10d(%.2f%%)", - $qnSeqs - $qnASeqs, - ($qnSeqs ? ($qnSeqs - $qnASeqs) / $qnSeqs * 100.0 : 0) ); - - print $fho "\n[Bases]\n"; - - printf $fho "%-15s %20d %20d\n", - "TotalBases", $rnBases, $qnBases; - printf $fho "%-15s %20s %20s\n", - "AlignedBases", - ( sprintf "%10d(%.2f%%)", - $rnABases, ($rnBases ? $rnABases / $rnBases * 100.0 : 0) ), - ( sprintf "%10d(%.2f%%)", - $qnABases, ($qnBases ? $qnABases / $qnBases * 100.0 : 0) ); - printf $fho "%-15s %20s %20s\n", - "UnalignedBases", - ( sprintf "%10d(%.2f%%)", - $rnBases - $rnABases, - ($rnBases ? ($rnBases - $rnABases) / $rnBases * 100.0 : 0) ), - ( sprintf "%10d(%.2f%%)", - $qnBases - $qnABases, - ($qnBases ? ($qnBases - $qnABases) / $qnBases * 100.0 : 0) ); - - print $fho "\n[Alignments]\n"; - - printf $fho "%-15s %20d %20d\n", - "1-to-1", $rqnAligns1, $rqnAligns1; - printf $fho "%-15s %20d %20d\n", - "TotalLength", $rSumLen1, $qSumLen1; - printf $fho "%-15s %20.2f %20.2f\n", - "AvgLength", - ($rqnAligns1 ? $rSumLen1 / $rqnAligns1 : 0), - ($rqnAligns1 ? $qSumLen1 / $rqnAligns1 : 0); - printf $fho "%-15s %20.2f %20.2f\n", - "AvgIdentity", - ($rqSumLen1 ? $rqSumIdy1 / $rqSumLen1 * 100.0 : 0), - ($rqSumLen1 ? $rqSumIdy1 / $rqSumLen1 * 100.0 : 0); - - print $fho "\n"; - - printf $fho "%-15s %20d %20d\n", - "M-to-M", $rqnAlignsM, $rqnAlignsM; - printf $fho "%-15s %20d %20d\n", - "TotalLength", $rSumLenM, $qSumLenM; - printf $fho "%-15s %20.2f %20.2f\n", - "AvgLength", - ($rqnAlignsM ? $rSumLenM / $rqnAlignsM : 0), - ($rqnAlignsM ? $qSumLenM / $rqnAlignsM : 0); - printf $fho "%-15s %20.2f %20.2f\n", - "AvgIdentity", - ($rqSumLenM ? $rqSumIdyM / $rqSumLenM * 100.0 : 0), - ($rqSumLenM ? $rqSumIdyM / $rqSumLenM * 100.0 : 0); - - print $fho "\n[Feature Estimates]\n"; - - printf $fho "%-15s %20d %20d\n", - "Breakpoints", $rnBrk, $qnBrk; - printf $fho "%-15s %20d %20d\n", - "Relocations", $rnRel, $qnRel; - printf $fho "%-15s %20d %20d\n", - "Translocations", $rnTrn, $qnTrn; - printf $fho "%-15s %20d %20d\n", - "Inversions", $rnInv, $qnInv; - - print $fho "\n"; - - printf $fho "%-15s %20d %20d\n", - "Insertions", $rnIns, $qnIns; - printf $fho "%-15s %20d %20d\n", - "InsertionSum", $rSumIns, $qSumIns; - printf $fho "%-15s %20.2f %20.2f\n", - "InsertionAvg", - ($rnIns ? $rSumIns / $rnIns : 0), - ($qnIns ? $qSumIns / $qnIns : 0); - - print $fho "\n"; - - printf $fho "%-15s %20d %20d\n", - "TandemIns", $rnTIns, $qnTIns; - printf $fho "%-15s %20d %20d\n", - "TandemInsSum", $rSumTIns, $qSumTIns; - printf $fho "%-15s %20.2f %20.2f\n", - "TandemInsAvg", - ($rnTIns ? $rSumTIns / $rnTIns : 0), - ($qnTIns ? $qSumTIns / $qnTIns : 0); - - print $fho "\n[SNPs]\n"; - - printf $fho "%-15s %20d %20d\n", - "TotalSNPs", $rqnSNPs, $rqnSNPs; - foreach my $r (keys %rqSNPs) { - foreach my $q (keys %{$rqSNPs{$r}}) { - if ( $r ne "." && $q ne "." ) { - printf $fho "%-15s %20s %20s\n", - "$r$q", - ( sprintf "%10d(%.2f%%)", - $rqSNPs{$r}{$q}, - ($rqnSNPs ? $rqSNPs{$r}{$q} / $rqnSNPs * 100.0 : 0) ), - ( sprintf "%10d(%.2f%%)", - $rqSNPs{$q}{$r}, - ($rqnSNPs ? $rqSNPs{$q}{$r} / $rqnSNPs * 100.0 : 0) ); - } - } - } - - print $fho "\n"; - - printf $fho "%-15s %20d %20d\n", - "TotalGSNPs", $rqnGSNPs, $rqnGSNPs; - foreach my $r (keys %rqGSNPs) { - foreach my $q (keys %{$rqGSNPs{$r}}) { - if ( $r ne "." && $q ne "." ) { - printf $fho "%-15s %20s %20s\n", - "$r$q", - ( sprintf "%10d(%.2f%%)", - $rqGSNPs{$r}{$q}, - ($rqnGSNPs ? $rqGSNPs{$r}{$q} / $rqnGSNPs * 100.0 : 0) ), - ( sprintf "%10d(%.2f%%)", - $rqGSNPs{$q}{$r}, - ($rqnGSNPs ? $rqGSNPs{$q}{$r} / $rqnGSNPs * 100.0 : 0) ); - } - } - } - - print $fho "\n"; - - printf $fho "%-15s %20d %20d\n", - "TotalIndels", $rqnIndels, $rqnIndels; - foreach my $r (keys %rqSNPs) { - foreach my $q (keys %{$rqSNPs{$r}}) { - if ( $q eq "." ) { - printf $fho "%-15s %20s %20s\n", - "$r$q", - ( sprintf "%10d(%.2f%%)", - $rqSNPs{$r}{$q}, - ($rqnIndels ? $rqSNPs{$r}{$q} / $rqnIndels * 100.0 : 0) ), - ( sprintf "%10d(%.2f%%)", - $rqSNPs{$q}{$r}, - ($rqnIndels ? $rqSNPs{$q}{$r} / $rqnIndels * 100.0 : 0) ); - } - } - } - foreach my $r (keys %rqSNPs) { - foreach my $q (keys %{$rqSNPs{$r}}) { - if ( $r eq "." ) { - printf $fho "%-15s %20s %20s\n", - "$r$q", - ( sprintf "%10d(%.2f%%)", - $rqSNPs{$r}{$q}, - ($rqnIndels ? $rqSNPs{$r}{$q} / $rqnIndels * 100.0 : 0) ), - ( sprintf "%10d(%.2f%%)", - $rqSNPs{$q}{$r}, - ($rqnIndels ? $rqSNPs{$q}{$r} / $rqnIndels * 100.0 : 0) ); - } - } - } - - print $fho "\n"; - - printf $fho "%-15s %20d %20d\n", - "TotalGIndels", $rqnGIndels, $rqnGIndels; - foreach my $r (keys %rqGSNPs) { - foreach my $q (keys %{$rqGSNPs{$r}}) { - if ( $q eq "." ) { - printf $fho "%-15s %20s %20s\n", - "$r$q", - ( sprintf "%10d(%.2f%%)", - $rqGSNPs{$r}{$q}, - ($rqnGIndels ? $rqGSNPs{$r}{$q} / $rqnGIndels * 100.0 : 0) ), - ( sprintf "%10d(%.2f%%)", - $rqGSNPs{$q}{$r}, - ($rqnGIndels ? $rqGSNPs{$q}{$r} / $rqnGIndels * 100.0 : 0) ); - } - } - } - foreach my $r (keys %rqGSNPs) { - foreach my $q (keys %{$rqGSNPs{$r}}) { - if ( $r eq "." ) { - printf $fho "%-15s %20s %20s\n", - "$r$q", - ( sprintf "%10d(%.2f%%)", - $rqGSNPs{$r}{$q}, - ($rqnGIndels ? $rqGSNPs{$r}{$q} / $rqnGIndels * 100.0 : 0) ), - ( sprintf "%10d(%.2f%%)", - $rqGSNPs{$q}{$r}, - ($rqnGIndels ? $rqGSNPs{$q}{$r} / $rqnGIndels * 100.0 : 0) ); - } - } - } - - FileClose($fho, $OPT_ReportFile); - - - #-- Output unaligned reference and query IDs, if applicable - if ( $rnSeqs != $rnASeqs ) { - $fho = FileOpen(">", $OPT_UnRefFile); - while ( my ($key, $val) = each(%refs) ) { - print $fho "$key\tUNI\t1\t$val\t$val\n" unless $val < 0; - } - FileClose($fho, $OPT_UnRefFile); - } - if ( $qnSeqs != $qnASeqs ) { - $fho = FileOpen(">", $OPT_UnQryFile); - while ( my ($key, $val) = each(%qrys) ) { - print $fho "$key\tUNI\t1\t$val\t$val\n" unless $val < 0; - } - FileClose($fho, $OPT_UnQryFile); - } -} - - -#--------------------------------------------------------------- FastaSizes ---- -# Compute lengths for a multi-fasta file and store in hash reference -sub FastaSizes($$) -{ - - my $file = shift; - my $href = shift; - my ($tag, $len); - - my $fhi = FileOpen("<", $file); - while (<$fhi>) { - chomp; - - if ( /^>/ ) { - $href->{$tag} = $len if defined($tag); - ($tag) = /^>(\S+)/; - $len = 0; - } else { - if ( /\s/ ) { - die "ERROR: Whitespace found in FastA $file, aborting.\n"; - } - $len += length; - } - } - $href->{$tag} = $len if defined($tag); - FileClose($fhi, $file); -} - - -#----------------------------------------------------------------- FileOpen ---- -# Open file, return filehandle, or die -sub FileOpen($$) -{ - my ($mode, $name) = @_; - my $fhi; - open($fhi, $mode, $name) - or die "ERROR: Could not open $name, aborting. $!\n"; - return $fhi; -} - - -#---------------------------------------------------------------- FileClose ---- -# Close file, or die -sub FileClose($$) -{ - my ($fho, $name) = @_; - close($fho) or die "ERROR: Could not close $name, aborting. $!\n" -} - - -#------------------------------------------------------------------- GetOpt ---- -# Get command options and check file permissions -sub GetOpt() -{ - #-- Initialize TIGR::Foundation - $TIGR = new TIGR::Foundation; - if ( !defined($TIGR) ) { - print STDERR "ERROR: TIGR::Foundation could not be initialized"; - exit(1); - } - - #-- Set help and usage information - $TIGR->setHelpInfo($HELP_INFO); - $TIGR->setUsageInfo($USAGE_INFO); - $TIGR->setVersionInfo($VERSION_INFO); - $TIGR->addDependInfo(@DEPEND_INFO); - - #-- Get options - my $err = !$TIGR->TIGR_GetOptions - ( - "d|delta=s" => \$OPT_DeltaFile, - "p|prefix=s" => \$OPT_Prefix, - ); - - #-- Check if the parsing was successful - if ( $err - || (defined($OPT_DeltaFile) && scalar(@ARGV) != 0) - || (!defined($OPT_DeltaFile) && scalar(@ARGV) != 2) ) { - $TIGR->printUsageInfo(); - print STDERR "Try '$0 -h' for more information.\n"; - exit(1); - } - - my @errs; - - $TIGR->isExecutableFile($DELTA_FILTER) - or push(@errs, $DELTA_FILTER); - - $TIGR->isExecutableFile($SHOW_DIFF) - or push(@errs, $SHOW_DIFF); - - $TIGR->isExecutableFile($SHOW_SNPS) - or push(@errs, $SHOW_SNPS); - - $TIGR->isExecutableFile($SHOW_COORDS) - or push(@errs, $SHOW_COORDS); - - $TIGR->isExecutableFile($NUCMER) - or push(@errs, $NUCMER); - - if ( defined($OPT_DeltaFile) ) { - $TIGR->isReadableFile($OPT_DeltaFile) - or push(@errs, $OPT_DeltaFile); - - my $fhi = FileOpen("<", $OPT_DeltaFile); - $_ = <$fhi>; - FileClose($fhi, $OPT_DeltaFile); - - ($OPT_RefFile, $OPT_QryFile) = /^(.+) (.+)$/; - } - else { - $OPT_RefFile = File::Spec->rel2abs($ARGV[0]); - $OPT_QryFile = File::Spec->rel2abs($ARGV[1]); - } - - $TIGR->isReadableFile($OPT_RefFile) - or push(@errs, $OPT_RefFile); - - $TIGR->isReadableFile($OPT_QryFile) - or push(@errs, $OPT_QryFile); - - $OPT_ReportFile = $OPT_Prefix . $OPT_ReportFile; - $TIGR->isCreatableFile("$OPT_ReportFile") - or $TIGR->isWritableFile("$OPT_ReportFile") - or push(@errs, "$OPT_ReportFile"); - - $OPT_DeltaFile1 = $OPT_Prefix . $OPT_DeltaFile1; - $TIGR->isCreatableFile("$OPT_DeltaFile1") - or $TIGR->isWritableFile("$OPT_DeltaFile1") - or push(@errs, "$OPT_DeltaFile1"); - - $OPT_DeltaFileM = $OPT_Prefix . $OPT_DeltaFileM; - $TIGR->isCreatableFile("$OPT_DeltaFileM") - or $TIGR->isWritableFile("$OPT_DeltaFileM") - or push(@errs, "$OPT_DeltaFileM"); - - $OPT_CoordsFile1 = $OPT_Prefix . $OPT_CoordsFile1; - $TIGR->isCreatableFile("$OPT_CoordsFile1") - or $TIGR->isWritableFile("$OPT_CoordsFile1") - or push(@errs, "$OPT_CoordsFile1"); - - $OPT_CoordsFileM = $OPT_Prefix . $OPT_CoordsFileM; - $TIGR->isCreatableFile("$OPT_CoordsFileM") - or $TIGR->isWritableFile("$OPT_CoordsFileM") - or push(@errs, "$OPT_CoordsFileM"); - - $OPT_SnpsFile = $OPT_Prefix . $OPT_SnpsFile; - $TIGR->isCreatableFile("$OPT_SnpsFile") - or $TIGR->isWritableFile("$OPT_SnpsFile") - or push(@errs, "$OPT_SnpsFile"); - - $OPT_DiffRFile = $OPT_Prefix . $OPT_DiffRFile; - $TIGR->isCreatableFile("$OPT_DiffRFile") - or $TIGR->isWritableFile("$OPT_DiffRFile") - or push(@errs, "$OPT_DiffRFile"); - - $OPT_DiffQFile = $OPT_Prefix . $OPT_DiffQFile; - $TIGR->isCreatableFile("$OPT_DiffQFile") - or $TIGR->isWritableFile("$OPT_DiffQFile") - or push(@errs, "$OPT_DiffQFile"); - - $OPT_UnRefFile = $OPT_Prefix . $OPT_UnRefFile; - $TIGR->isCreatableFile("$OPT_UnRefFile") - or $TIGR->isWritableFile("$OPT_UnRefFile") - or push(@errs, "$OPT_UnRefFile"); - - $OPT_UnQryFile = $OPT_Prefix . $OPT_UnQryFile; - $TIGR->isCreatableFile("$OPT_UnQryFile") - or $TIGR->isWritableFile("$OPT_UnQryFile") - or push(@errs, "$OPT_UnQryFile"); - - if ( scalar(@errs) ) { - print STDERR "ERROR: The following critical files could not be used\n"; - while ( scalar(@errs) ) { print(STDERR pop(@errs),"\n"); } - print STDERR "Check your paths and file permissions and try again\n"; - exit(1); - } -} diff --git a/tools/MUMmer3.23/exact-tandems b/tools/MUMmer3.23/exact-tandems deleted file mode 100755 index d24ec3e..0000000 --- a/tools/MUMmer3.23/exact-tandems +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/csh -f -# -# Find exact tandem repeats in specified file involving an -# exact duplicate of at least the specified length - -set filename = $1 -set matchlen = $2 - -set bindir = /export/home/zqhu/tools/MUMmer3.23 -set scriptdir = /export/home/zqhu/tools/MUMmer3.23/scripts - -if ($filename == '' || $matchlen == '') then - echo "USAGE: $0 " - exit -1 -endif - -echo "Finding matches" -$bindir/repeat-match -t -n $matchlen $filename | tail +3 > $$.tmp.matches -if ($status != 0) exit -1 - -echo "Tandem repeats" -sort -k1n -k2n $$.tmp.matches | awk -f $scriptdir/tandem-repeat.awk -rm -f $$.tmp.matches diff --git a/tools/MUMmer3.23/gaps b/tools/MUMmer3.23/gaps deleted file mode 100755 index 17eddbdb1480e840e6c66e2736a750d6a86ff5f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16666 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 D=+%Gv diff --git a/tools/MUMmer3.23/mapview b/tools/MUMmer3.23/mapview deleted file mode 100755 index 85dd7db..0000000 --- a/tools/MUMmer3.23/mapview +++ /dev/null @@ -1,967 +0,0 @@ -#!/usr/bin/perl - -use lib "/export/home/zqhu/tools/MUMmer3.23/scripts"; -use Foundation; - -my $SCRIPT_DIR = "/export/home/zqhu/tools/MUMmer3.23/scripts"; - - -my $VERSION_INFO = q~ -mapview version 1.01 - ~; - - -my $HELP_INFO = q~ - USAGE: mapview [options] [UTR coords] [CDS coords] - - DESCRIPTION: - mapview is a utility program for displaying sequence alignments as - provided by MUMmer, NUCmer, PROmer or Mgaps. mapview takes the output of - show-coords and converts it to a FIG, PDF or PS file for visual analysis. - It can also break the output into multiple files for easier viewing and - printing. - - MANDATORY: - coords file The output of 'show-coords -rl[k]' or 'mgaps' - - OPTIONS: - UTR coords UTR coordinate file in GFF format - CDS coords CDS coordinate file in GFF format - - -d|maxdist Set the maximum base-pair distance between linked matches - (default 50000) - -f|format Set the output format to 'pdf', 'ps' or 'fig' - (default 'fig') - -h - --help Display help information and exit - -m|mag Set the magnification at which the figure is rendered, - this is an option for fig2dev which is used to generate - the PDF and PS files (default 1.0) - -n|num Set the number of output files used to partition the - output, this is to avoid generating files that are too - large to display (default 10) - -p|prefix Set the output file prefix - (default "PROMER_graph or NUCMER_graph") - -v - --verbose Verbose logging of the processed files - -V - --version Display the version information and exit - -x1 coord Set the lower coordinate bound of the display - -x2 coord Set the upper coordinate bound of the display - -g|ref If the input file is provided by 'mgaps', set the - reference sequence ID (as it appears in the first column - of the UTR/CDS coords file) - -I Display the name of query sequences - -Ir Display the name of reference genes - ~; - - -my $USAGE_INFO = q~ - USAGE: mapview [options] [UTR coords] [CDS coords] - ~; - - -my @DEPEND_INFO = - ( - "fig2dev", - "$SCRIPT_DIR/Foundation.pm" - ); - -my $err_gff = q~ - ERROR in the input files ! The reference seq ID can't be found in GFF files ! - The first column in the GFF file should be the ID of the reference seq. - The alignments file should provide the same info in the column before the last one. - - Here are some example records for the GFF file: - - gnl|FlyBase|X Dmel3 initial-exon 2155 2413 . - . X_CG3038.1 - gnl|FlyBase|X Dmel3 last-exon 1182 2077 . - . X_CG3038.1 - ... - The fields are : - - ~; - -my $tigr; -my $err; - -my $alignm; -my $futr; -my $fcds; - -#-- Initialize TIGR::Foundation -$tigr = new TIGR::Foundation; -if ( !defined ($tigr) ) { - print (STDERR "ERROR: TIGR::Foundation could not be initialized"); - exit (1); -} - -#-- Set help and usage information -$tigr->setHelpInfo ($HELP_INFO); -$tigr->setUsageInfo ($USAGE_INFO); -$tigr->setVersionInfo ($VERSION_INFO); -$tigr->addDependInfo (@DEPEND_INFO); - -$err = $tigr->TIGR_GetOptions - ( - "d|maxdist=i" => \$match_dist, - "f|format=s" => \$format, - "m|mag=f" => \$magn, - "n|num=i" => \$noOutfiles, - "p|prefix=s" => \$outfilename, - "x1=i" => \$x1win, - "x2=i" => \$x2win, - "v|verbose" => \$verb, - "g|ref=s" => \$Mgaps, - "I" => \$printIDconting, - "Ir" => \$printIDgenes - ); - -if ( $err == 0 || scalar(@ARGV) < 1 || scalar(@ARGV) > 3 ) { - $tigr->printUsageInfo( ); - print (STDERR "Try '$0 -h' for more information.\n"); - exit (1); -} - -($alignm,$futr,$fcds)=@ARGV; - -if ((substr($x1win,0,1) eq '-') || (substr($x2win,0,1) eq '-')){ - print "ERROR2 : coords x1,x2 should be positive integers !!\n"; - $info=1; -} -if ($x1win > $x2win) { - print "ERROR3 : wrong range coords : x1 >= x2 !!!\n"; - $info=1; -} -if ($Mgaps){ #formating the mgaps output to be similar with show-coords output - format_mgaps(); -} - -if (!$format){$format="fig";} -if (($x1win) and ($x2win)){ $startfind=0; } -else{ $startfind=1; } -$endfind=0; -if (!$noOutfiles) {$noOutfiles=10;} -if (!$match_dist){$match_dist=50000;} - -#```````init colors```````````````````````````` -$color{"2"}=27;#dark pink 5utr -$color{"3"}=2;#green ex -$color{"4"}=1;#blue 3utr -#`````````````````````` -@linkcolors=(31,14,11); -#`````````````````````````````````````````````` -open(F,$alignm); -; -$prog=; chomp($prog); -; -$_=; -@a=(m/\s+(\||\[.+?\])/g) ; -for ($ind=0;$ind<=$#a;$ind++){ - if ($a[$ind] eq "[S1]") { - $ind_s1=$ind; - } - elsif ($a[$ind] eq "[E1]"){ - $ind_e1=$ind; - } - elsif ($a[$ind] eq "[% IDY]"){ - $ind_pidy=$ind; - } - elsif ($a[$ind] eq "[LEN R]"){ - $ind_lenchr=$ind; - } -# elsif ($a[$ind] eq "[TAGS]"){ -# $ind_tags=$ind+1; #there are two columns for this header col -# } -} -;$mref=-1; -while (){ - chomp; - @a=split; - if (!exists $hRefContigId{$a[-2]}) { # print $a[-2]."\n"; - $hRefContigId{$a[-2]}=$a[$ind_lenchr]; - $lenrefseqs+=$a[$ind_lenchr]; - $mref++; - } -} -$nobpinfile=int($lenrefseqs/$noOutfiles); - -close(F); - -#`````````````````````` - - -if (@ARGV > 1) { - get_cds_ends(); - get_utrcds_info(); - test_overlap(); -} -elsif(!$mref) { - $fileno=$noOutfiles; - $startcoord=0;$endcoord=0; - for ($i=0;$i<$fileno;$i++) { - $endcoord=$startcoord+$nobpinfile-1; - $endcoord=$lenrefseqs if ($endcoord>$lenrefseqs); - $file[$i]="$startcoord $endcoord"; - $startcoord=$endcoord+1; - } -} - - -$Yorig=3000; -$YdistPID=2000; -$yscale=$YdistPID/50; -$Xscale=14.5; -$gap=800; -#$maxfiles = ($fileno < 10) ? $fileno : 10; -#--------------------------------- - -if (!$mref){ - for($i=0; $i < $fileno; $i++) { - $nrf=$i; - set_output_fname(); - ($startcoord,$endcoord)=split(/\s+/,$file[$i]); - open(O,">$procfile".$nrf.".fig"); - print_header(); - print $procfile.$nrf.".fig\t range : $startcoord\t$endcoord \n" if ($verb && ($format eq "fig")); - - $xs=0; - $xe=int(($endcoord-$startcoord+1)/$Xscale); - #$xs=200; - #$xe=$xs+int(($endcoord-$startcoord+1)/$Xscale); - print_grid($xs,$xe,$startcoord,$endcoord); - - $tmpIdQrycontig=""; - $linkcolor=$linkcolors[0]; - - open(F,$alignm); - ;;;;; - while() { - chomp; - @a=split; - if($a[$ind_s1] > $endcoord) { last;} - if($a[$ind_s1]<$startcoord && $a[$ind_e1] > $startcoord ) { $a[$ind_s1]=$startcoord;} - if($a[$ind_s1] < $endcoord && $endcoord < $a[$ind_e1]) { $a[$ind_e1]=$endcoord;} - - if($a[$ind_s1]>=$startcoord && $a[$ind_e1]<=$endcoord) { - $x1=int(($a[$ind_s1]-$startcoord)/$Xscale);# - $x2=int(($a[$ind_e1]-$startcoord)/$Xscale);# - print_align($x1,$x2); - } - } - close(F); - %hQrycontig=(); - print_genes() if ($futr); - print_legend(); - close(O); - change_file_format() if ($format ne "fig"); - } -} -elsif($mref){#multiple ref seqs - set_output_fname(); - $tmpIdQrycontig=""; - $linkcolor=$linkcolors[0]; - $startdrawX=0; - $proclen=0; - $first=1; - $nrf=0; - open(F,$alignm); - ;;;;; - while() { - chomp; - @a=split; - if ($a[-2] ne $tmpcontig){ - %hQrycontig=(); - $tmpcontig=$a[-2]; - if ($first){ - $first=0; - $nrf++; - open(O,">$procfile".$nrf.".fig"); - print_header(); - print $procfile.$nrf.".fig"."\n" if ($verb && ($format eq "fig")); - $len=$hRefContigId{$a[-2]}; - } - else { - $startdrawX+=int($len/$Xscale)+$gap; - $len=$hRefContigId{$a[-2]}; - if (($proclen+$len>$nobpinfile) and ($proclen != 0)){ - print_legend(); - close(O); - change_file_format() if ($format ne "fig"); - $nrf++; - open(O,">$procfile".$nrf.".fig"); - print_header(); - print "\n".$procfile.$nrf.".fig"."\n" if ($verb && ($format eq "fig")); - $proclen=0; - $startdrawX=0; - } - } - $xs=$startdrawX; - $xe=$startdrawX+int($len/$Xscale); - print_grid($xs,$xe,0,$len); - #print genes from %geneinfo for contig - print $a[-2]."\t".$hRefContigId{$a[-2]}."\n"; - print_genes_mr() if ($futr); - $proclen+=$len; - }#end if new contig - $x1=$startdrawX+int($a[$ind_s1]/$Xscale); - $x2=$startdrawX+int($a[$ind_e1]/$Xscale); - print_align($x1,$x2); - } - print_legend(); - close(O); - change_file_format() if ($format ne "fig"); - - close(F); -} -#******************************************************************************* -#******************************************************************************* -sub set_output_fname{ - - if (!$outfilename) {$procfile=$prog."_graph"."_";} - else {$procfile=$outfilename."_";} - - if ($format ne "fig"){ - $procfile="tmp".$procfile; - } -} -#********************************* -sub get_cds_ends{ -#3. print "create \%hcds_ends...\n"; -$testGffFormat=0; - open(F,"<".$fcds);#|| die "can't open \" $fcds cds \" file !"; - while() { - chomp; - if($_) { - @a=split; - if (exists $hRefContigId{$a[0]}){#record if at least one of the ref id is the same in GFF and Align files - $testGffFormat++; - } - $genename=$a[8]; - if ($genename ne $tmpname){ - if ($sign eq "+"){ $hcds_ends{$tmpname} = "$cds5 $cds3";} - elsif ($sign eq "-"){ $hcds_ends{$tmpname} = "$cds3 $cds5";} - $tmpname=$genename; - $sign=$a[6]; - } - if($sign eq "-") { - $temp=$a[3]; - $a[3]=$a[4]; - $a[4]=$temp; - } - if ($a[2] eq "single-exon"){ - $cds5=$a[3]; - $cds3=$a[4]; - } - elsif ($a[2] eq "initial-exon"){ - $cds5=$a[3]; - } - elsif ($a[2] eq "last-exon"){ - $cds3=$a[4]; - } - } - } - if ($sign eq "+"){ $hcds_ends{$tmpname} = "$cds5 $cds3";} - elsif ($sign eq "-"){$hcds_ends{$tmpname} = "$cds3 $cds5";} - - test_formatGFF(); - - #foreach $k ( keys %hcds_ends){ - # print "cds_ends: ".$k."\t"."\n"; - #} exit; - -} - -#********************************* -sub test_formatGFF{ - if ($testGffFormat==0){ - print (STDERR "$err_gff \n"); - exit (1); - } - -} - -#********************************* -sub get_utrcds_info{ -#test for gene overlap $geneinfo{gene_name}->[0]=level,stock gene 5'3' utr ends, -#determina %geneinfo{id gene}->5utr,ex,3utr -#and @file -# get_gene_ends(); - $testGffFormat=0; -open(F,"<".$futr);# || die "can't open \" $futr utr \" file !"; -while() { - chomp; - if($_) { - @a=split; - #get gene ends-utr - $genename=$a[8]; - if (exists $hRefContigId{$a[0]}){ #check if [align file(col before the last one)] = [GFF file(col 1)] - $testGffFormat++; - } - - if ($genename ne $tmpname){ - if ($sign eq "+"){ $utr_ends{$tmpname} = "$utr5 $utr3";} - elsif ($sign eq "-"){ $utr_ends{$tmpname} = "$utr3 $utr5";} - - if ($tmpgene) {# for the distinct_utr_cds - get_utrcds_ends() ; - } - $tmpgene="$a[3] $a[4]";# - - $tmpname=$genename; - $sign=$a[6]; - $hContig_genes{$a[0]}.=" ".$a[8]; # for multiple ref. seqs - } - else{# for the distinct_utr_cds - if($sign eq "-") { - $tmpgene="$a[3] $a[4];".$tmpgene; - } - else { $tmpgene.=";$a[3] $a[4]"; } - }# - - if($sign eq "-") { - $temp=$a[3]; - $a[3]=$a[4]; - $a[4]=$temp; - } - if ($a[2] eq "single-exon"){ - $utr5=$a[3]; - $utr3=$a[4]; - } - elsif ($a[2] eq "initial-exon"){ - $utr5=$a[3]; - } - elsif ($a[2] eq "last-exon"){ - $utr3=$a[4]; - } - - #init gene info (level) - $geneinfo{$a[8]}->[0]=1 if (!exists $geneinfo{$a[8]}); - - } -} - # for the distinct_utr_cds - get_utrcds_ends(); - %cds_ends=();# - - if ($sign eq "+"){$utr_ends{$tmpname}="$utr5 $utr3"; } - elsif ($sign eq "-"){$utr_ends{$tmpname}="$utr3 $utr5"; } - $hContig_genes{$a[0]}.=" ".$a[8]; - - close(F); - test_formatGFF(); - -} - - -#**************************************************************** -sub get_utrcds_ends{ - $u5="";$ex="";$u3=""; - - if ($fcds eq $futr) { - $ex=$tmpgene; - } - else { - @ex=split(";",$tmpgene); - @cds=split(" ",$hcds_ends{$tmpname}); - - for($i=0;$i<=$#ex;$i++){ - @coord=split(" ",$ex[$i]); - - if ($cds[0]>$coord[0]){ - if ($cds[0]>$coord[1]){ - $u5.="$coord[0] $coord[1];"; - } - else{ - $u5.= "$coord[0] "; $u5.=$cds[0]-1 .";" ; #? - if ($cds[1]<$coord[1]){ - $ex.="$cds[0] $cds[1];"; - $u3.=$cds[1]+1 ." $coord[1];"; - } - else{ $ex.="$cds[0] $coord[1];";} - } - } - else { - if ($cds[1]>$coord[0]){ - if ($cds[1]>$coord[1]){ - $ex.="$coord[0] $coord[1];"; - } - else{ - $ex.="$coord[0] $cds[1];"; - $u3.=$cds[1]+1 ." $coord[1];"; - } - } - else { $u3.="$coord[0] $coord[1];";} - } - } - chop($u5, $ex, $u3); - } - $geneinfo{$tmpname}->[1]=$sign; - $geneinfo{$tmpname}->[2]=$u5; - $geneinfo{$tmpname}->[3]=$ex; - $geneinfo{$tmpname}->[4]=$u3; -} -#********************************* -sub test_overlap{ - - if (!$mref){ - $fileno=0;### - $endcoord=0;### - } - foreach $kcontgid (sort keys %hContig_genes){ - @allgenes=split(/\s+/,$hContig_genes{$kcontgid}); - for ($i=1;$i<=$#allgenes;$i++){ - @g1=split (" ", $utr_ends{$allgenes[$i]}); - $Utr5End{$allgenes[$i]}=$g1[0]; ### - - for ($j=$i+1;$j<=$#allgenes;$j++){ #comparing with the rest of the genes - @g2=split (" ", $utr_ends{$allgenes[$j]}); - #if the genes are overpaling and they have the same level ,the second gene is liflet to the next level - if ( (($g2[0]>=$g1[0]) and ($g2[0]<=$g1[1])) or (($g2[1]>=$g1[0]) and ($g2[1]<=$g1[1])) or (($g1[0]>=$g2[0]) and ($g1[0]<=$g2[1])) ){ - if ($geneinfo{$allgenes[$i]}->[0] == $geneinfo{$allgenes[$j]}->[0]){ - $geneinfo{$allgenes[$j]}->[0]=$geneinfo{$allgenes[$i]}->[0] + 1 ; - } - } - } - SetTheRangeForEachFile() if ((!$endfind) and (!$mref)); ### - } - } - $file[$fileno++]="$startcoord $endcoord" if (!$mref);### - %utr_ends=();### - -} - -#************************************** -sub SetTheRangeForEachFile{ - $currstart=$g1[0]; - $currend=$g1[1]; - #---test range ends intersection - if (!$startfind) { - if (($x1win <= $currstart) || ($x1win <= $currend)){ - $currstart = $x1win; - $startfind = 1; - } - } - if ( $startfind && $x1win && $x2win){ - if (($x2win <= $currstart) || ($x2win <= $currend) ){ - $currend = $x2win; - $endfind = 1; - } - } -#-------------------- - if ($startfind) { - if(!$endcoord) { - #$startcoord=0; - $startcoord = $x1win ? $x1win : 0; - $endcoord=$currend; - } - else { - if($currend > $endcoord) { - if($currend-$startcoord < $nobpinfile) { - $endcoord=$currend; - } - else { - $file[$fileno++]="$startcoord $endcoord"; - $startcoord=$endcoord+1; - $endcoord=$currend; - } - } - } - }#if startfind -} -#********************************* -sub print_header{ - print O "#FIG 3.2\nLandscape\nCenter\nInches\nLetter \n100.00\nMultiple\n-2\n1200 2\n"; -} -#********************************* -sub print_align{ - my ($x1,$x2)=@_; - - $a[$ind_pidy]=50 if ($a[$ind_pidy]<50); - $a[$ind_pidy]=int($a[$ind_pidy]); - if ($Mgaps){ - $y=$Yorig+250+$YdistPID-$yscale*2; - if($a[$#a]=~/rev$/){$y-=25*$yscale;} - } - else{ - $y=$Yorig+250+$YdistPID-$yscale*($a[$ind_pidy]-50); - } - if($x1==$x2) { $x2++;} - #draw the line between matches. is dif color for each contig - if ($a[$#a] eq $tmpIdQrycontig) { - print_connections($hQrycontig{$tmpIdQrycontig}->[1], $x1,$y); - } - else{#new contig - #remember the start coord for printing the id alignments - if ($printIDconting){ - if ( $x1 - $XlastPrint > 400 ) { - print O "4 0 0 5 0 0 8 0.0000 4 90 270 "; - printf O ("\t%.0f %.0f ",$x1,$y); - print O $a[$#a], "\\001\n"; - $XlastPrint=$x1; $YlastPrint=$y; - } - } - # - ##if it was seen before,but interrupted by another contig - if ((exists $hQrycontig{$a[$#a]}) and ($a[$ind_s1]-$hQrycontig{$a[$#a]}->[2] < $match_dist )) { - $linkcolor=$hQrycontig{$a[$#a]}->[0]; - print_connections($hQrycontig{$a[$#a]}->[1], $x1,$y); - } - else{ - #change the link color - unshift(@linkcolors, pop(@linkcolors)); - $linkcolor=$linkcolors[0]; - $hQrycontig{$a[$#a]}->[0] = $linkcolor; - } - } - $tmpIdQrycontig=$a[$#a]; - $hQrycontig{$tmpIdQrycontig}->[1]="$x2 $y"; - $hQrycontig{$tmpIdQrycontig}->[2]=$a[$ind_e1]; - - #the matches line is red - print O "2 1 0 2 4 0 40 0 -1 0.000 0 0 -1 0 0 2\n"; - print O "\t$x1 $y $x2 $y\n"; - print O "2 1 0 5 20 0 50 0 -1 0.000 0 0 -1 0 0 2\n"; - printf O ("\t $x1 %.0f $x2 %.0f\n",$Yorig+150 , $Yorig+150); -} -#********************************* -sub print_connections{ - my ($setc1,$setx2,$sety2)=@_; # print "\nparam connect @_\n"; - my ($setx1,$sety1) =split(/ /,$setc1); - - if ($Mgaps){ - if ($setx1>$setx2){ - $tmpsetx1=$setx1; - $setx1=$setx2; - $setx2=$tmpsetx1; - } - $distx1x2=int(($setx2-$setx1)/2); - $xcenter= $setx1+$distx1x2; - - if ($setx2-$setx1>4000) { #if the distance is to big then heigh of the arc is set to 20 - $heightArcUp = 20*$yscale; - $yoffcenter=int((($distx1x2**2)+$heightArcUp**2)*(1/(2*$heightArcUp)))-$heightArcUp ; - } - else{ - $heightArcUp = int (0.447 * $distx1x2);#sectorul de cerc la 1/3 din raza. - $yoffcenter=2*$heightArcUp; - } - print O "5 1 0 2 $linkcolor 0 50 0 -1 0.000 0 0 0 0 "; - printf O ("%.3f %.3f $setx1 $sety1 $xcenter %.0f $setx2 $sety1 \n",$xcenter,$sety1+$yoffcenter,$sety1-$heightArcUp); - } - else{ - print O "2 1 0 1 $linkcolor 0 50 0 -1 0.000 0 0 -1 0 0 2\n"; - print O "\t".$setc1." $setx2 $sety2\n"; - - } -} -#********************************* -sub print_genes_mr{ - %hLastOnLevel=(); - @g=split(/\s+/,$hContig_genes{$a[-2]}); - for ($i=1;$i<=$#g;$i++){ - $kname=$g[$i]; - $tmpx2=0; - $y=$Yorig-100-200*$geneinfo{$kname}->[0]; - #print id gena - $xid =$startdrawX+ int($Utr5End{$kname}/$Xscale); - print_Id_genes() if ($printIDgenes); - # - for ($l=2;$l<5;$l++){ - @c=split(";",$geneinfo{$kname}->[$l] ) ; - if (@c){ #print "de unde?@c\n" if (($l==2) or ($l==4)); - $colorend=$color{$l}; - if ($geneinfo{$kname}->[1] eq "-"){ - if ($l==2) { $colorend=$color{"4"}; } - elsif ($l==4) {$colorend=$color{"2"};} - } - for ($k=0;$k<=$#c;$k++){ - @e=split (" ",$c[$k]); - $x1=$startdrawX+int($e[0]/$Xscale); - $x2=$startdrawX+int($e[1]/$Xscale); - if($x1==$x2) { $x2++;} - if ( ($tmpx2) and ($x1-$tmpx2>1)){ #print the intron - print O "2 1 0 1 0 0 50 0 -1 0.000 0 0 -1 0 0 2\n"; - print O "\t $tmpx2 $y $x1 $y\n"; - } - $tmpx2=$x2; - print O "2 1 0 5 $colorend 0 50 0 -1 0.000 0 0 -1 0 0 2\n";# - print O "\t $x1 $y $x2 $y\n"; - } - } - } - #delete ($geneinfo{$kname}); - } -} - -#********************************* -sub print_Id_genes{ - if (exists $hLastOnLevel{$geneinfo{$kname}->[0]}){ - $lastOnlevel=$hLastOnLevel{$geneinfo{$kname}->[0]}; - $printidspace = int(($Utr5End{$kname}-$Utr5End{$lastOnlevel})/$Xscale); - } - else{$printidspace=601;} - if ($printidspace > 600){ - #print contig name# - print O "4 0 0 5 0 0 6 0.0000 4 90 270 "; - printf O ("\t%.0f %.0f ",$xid,$y-50); - print O $kname, "\\001\n"; - $hLastOnLevel{$geneinfo{$kname}->[0]}=$kname; - } -} -#********************************* -sub print_genes{ - %hLastOnLevel=(); - foreach $kname (sort {$Utr5End{$a} <=> $Utr5End{$b}} keys %Utr5End){ - $tmpx2=0; - if ($Utr5End{$kname}>$startcoord && $Utr5End{$kname}<$endcoord){ - $y=$Yorig-100-200*$geneinfo{$kname}->[0]; - #print id gena - $xid = int(($Utr5End{$kname}-$startcoord)/$Xscale); - print_Id_genes() if ($printIDgenes); - # - for ($l=2;$l<5;$l++){ - @c=split(";",$geneinfo{$kname}->[$l] ); - $colorend=$color{$l}; - if ($geneinfo{$kname}->[1] eq "-"){ - if ($l==2) { $colorend=$color{"4"}; } - elsif ($l==4) {$colorend=$color{"2"};} - } - - for ($k=0;$k<=$#c;$k++){ - @e=split (" ",$c[$k]); - $x1=int(($e[0]-$startcoord)/$Xscale); - $x2=int(($e[1]-$startcoord)/$Xscale); - if($x1==$x2) { $x2++;} - if ( ($tmpx2) and ($x1-$tmpx2>1)){ #print the intron - print O "2 1 0 1 0 0 50 0 -1 0.000 0 0 -1 0 0 2\n"; - print O "\t $tmpx2 $y $x1 $y\n"; - } - $tmpx2=$x2; - print O "2 1 0 5 $colorend 0 50 0 -1 0.000 0 0 -1 0 0 2\n";# - print O "\t $x1 $y $x2 $y\n"; - } - } - }#endif "is in interval" - } - # delete ($Utr5End{$kname}); - # delete ($geneinfo{$kname}); - -} -#********************************* -sub print_grid{ - -my ($xs,$xe,$startcontg,$endcontg)=@_; - -$XlastPrint=0;$YlastPrint=0; - - #print ref contig - print O "2 1 0 10 11 0 50 0 -1 0.000 0 0 -1 0 0 2\n"; - printf O ("\t $xs %.0f $xe %.0f\n",$Yorig+50,$Yorig+50); - #print orizontal axes for PId (100%,75%,50%) - for ($percent_id = 50; $percent_id < 101; $percent_id += 25) { - print O "2 1 2 1 0 7 60 0 -1 4.000 0 0 -1 0 0 2\n"; - printf O ("\t$xs %.0f $xe %.0f\n",$Yorig+250+$YdistPID-($percent_id - 50) * $yscale,$Yorig+250+$YdistPID-($percent_id - 50) * $yscale); - #last if ($Mgaps); - } - #print orizontal markers for bp. - $increment=10000/$Xscale; - $no_incr=0; - $xmark = $xs ;$xmark_float= $xs; - while ($xmark < $xe){ - print O "2 1 0 1 0 7 60 0 -1 0.000 0 0 -1 0 0 2\n"; - printf O ("\t$xmark %.0f $xmark %.0f\n",$Yorig+$YdistPID+250,$Yorig+$YdistPID+300); - #bp scale - print O "4 0 0 100 0 0 8 0.0000 4 135 405 "; - printf O ("\t %.0f %.0f",$xmark,$Yorig+$YdistPID+400); - print O " $no_incr"."k", "\\001\n"; - $no_incr += 10; - $xmark_float += $increment; - $xmark=int($xmark_float); - } - - #coord for chr ends - print O "4 0 0 50 0 0 14 0.0000 4 135 450 $xs $Yorig $startcontg\\001\n"; - printf O ("4 0 0 50 0 0 14 0.0000 4 135 810 %.0f $Yorig $endcontg\\001\n",$xe-length($xe)*125); - - #print contig name# - if ($mref){ - print O "4 0 0 5 0 0 8 0.0000 4 135 405 "; - printf O ("\t%.0f %.0f ",$xs,$Yorig+70); - print O $a[-2], "\\001\n"; - } - #print vertical markers for PId scale - if (!$Mgaps){ - for ($percent_id = 50; $percent_id < 101; $percent_id += 25) { - #left - print O "4 0 0 100 0 0 8 0.0000 4 135 405 "; - printf O ("\t%.0f %.0f", $xs-200,$Yorig+$YdistPID+250-($percent_id - 50) * $yscale + 20); - print O " $percent_id%", "\\001\n"; - #right - print O "4 0 0 100 0 0 8 0.0000 4 135 405 "; - printf O ("\t%.0f %.0f",$xe+20, $Yorig+$YdistPID+250-($percent_id - 50) * $yscale+20 ); - print O " $percent_id%", "\\001\n"; - - # print the tick mark - #left - # print O "2 1 0 1 0 7 60 0 -1 0.000 0 0 -1 0 0 2\n"; - # printf O ("\t%.0f %.0f $xs %.0f\n",$xs-50, - # $Yorig+$YdistPID+250-($percent_id - 50) * $yscale, $Yorig+$YdistPID+250-($percent_id - 50) * $yscale); - #right - # print O "2 1 0 1 0 7 60 0 -1 0.000 0 0 -1 0 0 2\n"; - # printf O ("\t$xe %.0f %.0f %.0f\n", - # $Yorig+$YdistPID+250-($percent_id - 50) * $yscale,$xe+50, $Yorig+$YdistPID+250-($percent_id - 50) * $yscale); - } - } - else{ # for Mgaps - print O "4 0 0 100 0 0 7 1.5710 4 135 405 "; - printf O ("\t%.0f %.0f", $xs-50,$Yorig+$YdistPID+250 - 5 * $yscale + 10); - print O " + qry strand", "\\001\n"; - - print O "4 0 0 100 0 0 7 1.5710 4 135 405 "; - printf O ("\t%.0f %.0f", $xs-50,$Yorig+$YdistPID+250 - 30 * $yscale + 10); - print O " - qry strand", "\\001\n"; - } - -} -#********************************* -sub print_legend{ - - print O "4 0 0 100 0 0 8 0.0000 4 135 405 "; - printf O ("\t%.0f %.0f ",100,$Yorig+$YdistPID+1100); - print O " Legend ", "\\001\n"; - $y= $Yorig+$YdistPID+1300; #utr - print O "2 1 0 1 0 0 50 0 -1 0.000 0 0 -1 0 0 2\n";#intron - print O "\t 70 $y 99 $y\n"; - print O "2 1 0 5 27 0 50 0 -1 0.000 0 0 -1 0 0 2\n"; - print O "\t 100 $y 200 $y\n"; - print O "2 1 0 1 0 0 50 0 -1 0.000 0 0 -1 0 0 2\n";#intron - print O "\t 200 $y 230 $y\n"; - print O "4 0 0 100 0 0 8 0.0000 4 135 405 "; - printf O ("\t%.0f %.0f ",300,$y+30); - print O " 5' utr ", "\\001\n"; - $y += 150 ;#cds - print O "2 1 0 1 0 0 50 0 -1 0.000 0 0 -1 0 0 2\n";#intron - print O "\t 70 $y 99 $y\n"; - print O "2 1 0 5 2 0 50 0 -1 0.000 0 0 -1 0 0 2\n"; - print O "\t 100 $y 200 $y\n"; - print O "2 1 0 1 0 0 50 0 -1 0.000 0 0 -1 0 0 2\n";#intron - print O "\t 200 $y 230 $y\n"; - print O "4 0 0 100 0 0 8 0.0000 4 135 405 "; - printf O ("\t%.0f %.0f ",300,$y+30); - print O " cds ", "\\001\n"; - $y += 150; #3' utr - print O "2 1 0 1 0 0 50 0 -1 0.000 0 0 -1 0 0 2\n";#intron - print O "\t 70 $y 99 $y\n"; - print O "2 1 0 5 1 0 50 0 -1 0.000 0 0 -1 0 0 2\n"; - print O "\t 100 $y 200 $y\n"; - print O "2 1 0 1 0 0 50 0 -1 0.000 0 0 -1 0 0 2\n";#intron - print O "\t 200 $y 230 $y\n"; - print O "4 0 0 100 0 0 8 0.0000 4 135 405 "; - printf O ("\t%.0f %.0f ",300,$y+30); - print O " 3' utr ", "\\001\n"; - $y += 150; # match - print O "2 1 0 2 4 0 50 0 -1 0.000 0 0 -1 0 0 2\n"; - print O "\t100 $y 200 $y\n"; - print O "4 0 0 100 0 0 8 0.0000 4 135 405 "; - printf O ("\t%.0f %.0f ",300,$y+30); - print O " match found by $prog ", "\\001\n"; -} -#********************************* -sub change_file_format{ - - $procfile =~ /^tmp(.+)/; - $outfile = $1.$nrf.".".$format; - $comand = "fig2dev -L $format -x 100"; - $comand .= " -m $magn" if ($magn); - $comand .= " -M ".$procfile.$nrf.".fig ".$outfile; - - $status =system($comand); - print E "ERROR 1: fig2dev !\n" unless $status == 0; - - $status =system("rm $procfile".$nrf.".fig"); - - if ($verb){ - print "$outfile"; - if ($mref){ - print "\n" ; - } - else { - print "\t range : $startcoord\t$endcoord \n" ; - } - } -} -#********************************* -sub format_mgaps{ -$tmpfile="tmpmgaps"; -$tmpfile2=$alignm."coords" ; -get_ref_len(); #print $maxlenref."\n"; - open(M,">".$tmpfile2) || die "can't open \" $tmpfile2 \" file !"; - print M "$alignm\n"; - print M "Mgaps\n\n"; - print M " [S1] [E1] | [S2] [E2] | [LEN 1] [LEN 2] | [% IDY] | [LEN R] [LEN Q] | [COV R] [COV Q] | [TAGS]\n"; - print M "===============================================================================================================================\n"; - - open(T,">".$tmpfile) || die "can't open \" $tmpfile \" file !"; - - open(A,"<".$alignm) || die "can't open \" $alignm \" file !"; - - - while() { - chomp; - @a=split; - if ($a[0] =~ /^>/){ - $nr_cluster=1; - $idquery=$a[1]; - if ($a[2] eq "Reverse"){$idquery .= "_rev";} - } - #elsif ($a[0] eq "#") {$nr_cluster++;} - elsif($a[0] ne "#"){ - $e1=$a[0]+$a[2]; - print T $a[0]."\t".$e1."\t"."|"; - print T "\t-\t-\t|"; - print T "\t-\t-\t|"; - print T "\t-\t|"; #pid - print T "\t$maxlenref\t-\t|";#len seqs - # print "\t-\t-\t|"; - # print "\t-\t-\t|"; - # print T " $Mgaps\t$idquery.$nr_cluster\n"; - print T " $Mgaps\t$idquery\n"; - } - - } - close(A); - close(T); - $command="sort -n -k 1 $tmpfile >> $tmpfile2"; - $status =system($command); - system("rm $tmpfile"); - close(M); - $alignm=$tmpfile2; - print STDERR "ERROR 1: can't sort $tmpfile \n" unless $status == 0; - print STDERR "\n**************************************** \n"; - print STDERR "New input file created : $alignm\n"; - print STDERR "**************************************** \n\n"; - -} -#***************************** -sub get_ref_len{ - $firstrow=1; - open(A,"<".$alignm) || die "can't open \" $alignm \" file !"; - while() { - chomp; - @a=split; - if ($firstrow) { - $firstrow=0; - if ($a[0] !~ /^>/){ - print "\nWrong file format for MGAPS file : $alignm ! \n"; - exit; - } - } - - if ($a[0] =~ /^>/){ next; } - elsif($a[0] ne "#"){ - $e1=$a[0]+$a[2]; - $maxlenref=($maxlenref < $e1 ? $e1 : $maxlenref); - } - } - close(A); -} diff --git a/tools/MUMmer3.23/mgaps b/tools/MUMmer3.23/mgaps deleted file mode 100755 index ea8a34d5cab9ae826300461362166aa36fed9a1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22069 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