Repository 'srnapipe'
hg clone https://toolshed.g2.bx.psu.edu/repos/brasset_jensen/srnapipe

Changeset 67:740884893563 (2019-01-31)
Previous changeset 66:ff36e76d696a (2019-01-30) Next changeset 68:a5a99218ef7a (2019-02-06)
Commit message:
planemo upload for repository https://github.com/GReD-Clermont/sRNAPipe/ commit fa75629bca78685de0106390758c0e85f1ca0836
modified:
README.rst
sRNAPipe.xml
removed:
bin/sRNAPipe.pl
lib/sRNAPipe.pm
lib/sRNAPipe/Rcall.pm
lib/sRNAPipe/align.pm
lib/sRNAPipe/css/bootstrap-responsive.css
lib/sRNAPipe/css/bootstrap-table.css
lib/sRNAPipe/css/bootstrap.css
lib/sRNAPipe/html.pm
lib/sRNAPipe/js/bootstrap-table.js
lib/sRNAPipe/js/bootstrap.min.js
lib/sRNAPipe/js/filter.js
lib/sRNAPipe/js/jquery.galleriffic.js
lib/sRNAPipe/js/jquery.js
lib/sRNAPipe/js/jquery.opacityrollover.js
lib/sRNAPipe/ppp.pm
lib/sRNAPipe/resize.pm
lib/sRNAPipe/subgroups.pm
b
diff -r ff36e76d696a -r 740884893563 README.rst
--- a/README.rst Wed Jan 30 06:26:32 2019 -0500
+++ b/README.rst Thu Jan 31 16:10:58 2019 -0500
b
@@ -7,13 +7,13 @@
 A GALAXY-based pipeline for bioinformatic in-depth exploration of small RNA-seq data
 
 Description
-===========
+-----------
 
 The field of small RNA is one of the most investigated research areas since they were shown to regulate gene expression and play essential roles in fundamental biological processes.
 sRNAPipe  a computational pipeline (sRNAPipe: small RNA pipeline) based on the Galaxy framework that takes as input a fastq file of small RNA-seq reads and performs successive steps of mapping to categories of genomic sequences: microRNAs, gene transcripts, small nuclear RNAs, ribosomal RNAs, transfer RNAs and transposable elements. It also provides individual mapping and counting for chromosomes, gene transcripts and transposable elements, normalization, small RNA length analysis and plotting of the data along genomic coordinates to build publication-quality graphs and figures. sRNAPipe evaluates 10-nucleotide 5’-overlaps of reads on opposite strands to test ping-pong amplification for putative PIWI-interacting RNAs, providing numbers of overlaps and corresponding z-scores.
 
 Prerequisites
-=============
+-------------
 
 1. Unix system with A Galaxy server (release 16.01 or later installed)
 
@@ -29,7 +29,7 @@
 4. R project version higher than 3.1 is needed with libraries "plotrix", "bioconductor-sushi", "RColorBrewer" and "ggplot2"  installed. You can find respectively these libraries here: https://cran.r-project.org/web/packages/plotrix/index.html and https://bioconductor.org/packages/release/bioc/html/Sushi.html and https://cran.r-project.org/web/packages/RColorBrewer/index.html and https://cran.r-project.org/web/packages/ggplot2/index.html
 
 Installation
-============
+------------
 
 The process has to be completed by an administrator of your Galaxy server to install sRNAPipe.
 
b
diff -r ff36e76d696a -r 740884893563 bin/sRNAPipe.pl
--- a/bin/sRNAPipe.pl Wed Jan 30 06:26:32 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
b'@@ -1,307 +0,0 @@\n-#!/usr/bin/env perl\n-package main;\n-use strict;\n-use warnings;\n-use Getopt::Long;\n-use Parallel::ForkManager;\n-use File::Basename;\n-use File::Copy;\n-use POSIX;\n-use FindBin;\n-use lib "$FindBin::Bin/../lib";\n-use sRNAPipe;\n-use sRNAPipe::resize qw ( size_distribution );\n-use sRNAPipe::subgroups qw ( subgroups );\n-use sRNAPipe::ppp qw ( ping_pong_partners );\n-use sRNAPipe::Rcall qw (pie_chart bg_to_png );\n-use sRNAPipe::align qw ( to_build get_unique sam_count sam_count_mis sam_sorted_bam rpms_rpkm rpms_rpkm_te BWA_call get_fastq_seq extract_sam sam_to_bam_bg );\n-use sRNAPipe::html qw ( main_page details_pages menu_page ppp_page copy_css copy_js );\n-\n-if(@ARGV) {\n-    my ( @fastq, @fastq_n, $dir, $min, $max, $mis, $misTE, $help, $Pcheck, $mapnumf, $html_out);\n-    my ( $ref, $tRNAs, $rRNAs, $snRNAs, $miRNAs, $transcripts, $TE );\n-    my ( $si_min, $si_max, $pi_min, $pi_max );\n-    my ( $build_index, $build_tRNAs, $build_rRNAs, $build_snRNAs, $build_miRNAs, $build_transcripts, $build_TE );\n-    my $max_procs = 8;\n-    \n-    ( $build_index, $build_tRNAs, $build_rRNAs, $build_snRNAs, $build_miRNAs, $build_transcripts, $build_TE ) = (0,0,0,0,0,0,0);\n-    ( $min, $max, $mis, $misTE, $si_min, $si_max, $pi_min, $pi_max, $dir ) = ( 18, 29, 0, 3, 21, 21, 23, 29 );\n-    $Pcheck =\'true\';\n-    \n-    GetOptions (\n-        "fastq=s" => \\@fastq,\n-        "fastq_n=s" => \\@fastq_n,\n-        "dir=s" => \\$dir,\n-        "min:i" => \\$min,\n-        "max:i" => \\$max,\n-        "si_min:i" => \\$si_min,\n-        "si_max:i" => \\$si_max,\n-        "pi_min:i" => \\$pi_min,\n-        "pi_max:i" => \\$pi_max,\n-        "mis:i" => \\$mis,\n-        "misTE:i" => \\$misTE,\n-        "html:s" => \\$html_out,\n-        "PPPon:s" => \\$Pcheck,\n-        "help"   =>  \\$help,\n-        "ref:s" => \\$ref,\n-        "tRNAs:s" => \\$tRNAs,\n-        "rRNAs:s" => \\$rRNAs,\n-        "snRNAs:s" => \\$snRNAs,\n-        "miRNAs:s" => \\$miRNAs,\n-        "transcripts:s" => \\$transcripts,\n-        "TE:s" => \\$TE,\n-        "build_index" => \\$build_index,\n-        "build_tRNAs" => \\$build_tRNAs,\n-        "build_snRNAs" => \\$build_snRNAs,\n-        "build_miRNAs" => \\$build_miRNAs,\n-        "build_transcripts" => \\$build_transcripts,\n-        "build_rRNAs" => \\$build_rRNAs,\n-        "build_TE" => \\$build_TE\n-    );\n-    \n-    my $fq_collection = \'fastq_dir/\';\n-    mkdir $dir; mkdir $fq_collection;\n-    $dir = $dir.\'/\' unless $dir =~ /\\/$/;\n-    mkdir $dir.\'/css\';mkdir $dir.\'/js\';\n-    copy_css( $dir );\n-    copy_js( $dir );\n-    \n-    my $file = $dir.\'report.txt\';\n-    open my $report, \'>\', $file or die "Cannot open $file $!\\n";\n-    \n-    my @toBuild = ( [$build_index, \\$ref],  [$build_tRNAs, \\$tRNAs], [$build_rRNAs, \\$rRNAs], [$build_snRNAs, \\$snRNAs], [$build_miRNAs, \\$miRNAs], [$build_transcripts, \\$transcripts], [$build_TE, \\$TE] );\n-    to_build ( \\@toBuild, $report, $dir );\n-    \n-    my $proc_child = ceil($max_procs / scalar(@fastq));\n-    my $proc_grand_child = ceil($proc_child/4);\n-    my $pm = Parallel::ForkManager->new($max_procs);\n-    my $pm2 = Parallel::ForkManager->new($proc_grand_child);\n-    \n-    $pm->run_on_finish( sub {\n-        my ($pid, $exit_code, $ident) = @_;\n-        print $report "Fastq fork $ident just finished ".\n-        "with PID $pid and exit code: $exit_code\\n";\n-        die "Something went wrong!\\n" if $exit_code != 0;\n-    });\n-    \n-    \n-    $pm->run_on_start( sub {\n-        my ($pid,$ident)=@_;\n-        print $report "Fastq fork : $ident started, pid: $pid\\n";\n-    });\n-    \n-    \n-    $pm2->run_on_finish( sub {\n-        my ($pid, $exit_code, $ident) = @_;\n-        print $report "** Subgroup fork $ident just finished ".\n-        "with PID $pid and exit code: $exit_code\\n";\n-        die "Something went wrong!\\n" if $exit_code != 0;\n-    });\n-    \n-    \n-    $pm2->run_on_start( sub {\n-        my ($pid,$ident)=@_;\n-        print $report "** Subgroup fork $ident started, pid: $pid\\n";\n-    });\n-    \n-    foreach my $child ( 0 .. $#fastq )\n-    {\n-  '..b's.bedgraph\', $Gviz_TEs, \'Kb\' );\n-    \n-            my $Gviz_genome=  $type_dir.\'Gviz_genome/\';\n-            my $Gviz_genome_rand = $Gviz_genome.\'rand/\';\n-            my $Gviz_genome_uni = $Gviz_genome.\'unique/\';\n-            mkdir $Gviz_genome; mkdir $Gviz_genome_uni; mkdir $Gviz_genome_rand;\n-    \n-            sam_to_bam_bg ( $type_sam_genome, $scale, $grand_child );\n-            sam_to_bam_bg ( $type_sam_uni_genome, $scale, $grand_child );\n-    \n-            bg_to_png ( $fai_file, $type_dir.$type_prefix.\'genome_unique_plus.bedgraph\', $type_dir.$type_prefix.\'genome_unique_minus.bedgraph\', $Gviz_genome_uni, \'Mb\' );\n-            bg_to_png ( $fai_file, $type_dir.$type_prefix.\'genome_plus.bedgraph\', $type_dir.$type_prefix.\'genome_minus.bedgraph\', $Gviz_genome_rand, \'Mb\' );\n-    \n-            #HTML Details\n-            my $prefix_details_pages = $dir.$fastq_n[$child].\'-\'.$types_names[$grand_child];\n-            details_pages ( $type_dir, $prefix_details_pages, \\@fastq_n, $fastq_n[$child], $misTE, $dir, $Pcheck );\n-    \n-            $pm2->finish();\n-        }\n-        $pm2->wait_all_children;\n-    \n-        if ( $Pcheck eq \'true\' )\n-        {\n-            my $ppp = $group_dir.\'PPPartners/\'; mkdir $ppp;\n-            print $report "ping_pong_partners $group_dir/piRNAs/TEs.sam $ppp\\n";\n-            ping_pong_partners ( $group_dir.\'TEs.fai\', $group_dir.\'piRNAs/piRNAs-TEs_sorted.bam\', $ppp, $pi_min );\n-            my $ppp_page = $dir.$fastq_n[$child].\'-piRNAs-PPP.html\';\n-            ppp_page ( $group_dir, $ppp_page, \\@fastq_n, $fastq_n[$child], $ppp, $dir );\n-        }\n-    \n-        #HTML Main Webpage\n-        my $index_page = $dir.$fastq_n[$child].\'.html\';\n-        main_page ( $gen_dir, $index_page, \\@fastq_n, $fastq_n[$child], $ma, $ma_uni, $dir );\n-        copy ($index_page, $html_out) if $child == 0;\n-        #HTML Menu\n-        my $menu_page = $dir.$fastq_n[$child].\'-sub.html\';\n-        menu_page ( $group_dir, $menu_page, \\@fastq_n, $fastq_n[$child], $min, $max, $si_min, $si_max, $pi_min, $pi_max, $dir );\n-        unlink glob "\'$group_dir\'*.sam"; unlink glob "\'$group_dir\'*.fastq";\n-        $pm->finish(); # pass an exit code to finish\n-    }\n-    $pm->wait_all_children;\n-    unlink glob "\'$dir\'"."dataset_*symlink.fa*";\n-    print $report "Job done!\\n";\n-    close $report;\n-} else {\n-    print "sRNAPipe version $sRNAPipe::VERSION\n-\n-Usage:\n-\n-sRNAPipe.pl --fastq <fastq file 1> --fastq_n <name 1> [--fastq <fastq file 2> --fastq_n <name 2> --fastq <fastq file 3> -- fastq_n <name 3> ...] --ref <reference genome> [--build_index] --transcripts <transcripts> [--build_transcripts] --TE <transposable elements> [--build_TE] --miRNAs <miRNAs> [--build_miRNAs] --snRNAs <snRNAs> [--build_snRNAs] --rRNAs <rRNAs> [--build_rRNAs] --tRNAs <tRNAs> [--buid_tRNAs] [options]\n-\n-Arguments:\n---fastq <fastq file>\\t\\tFastq file to process\n---fastq_n <name>\\t\\tName of the content to process\n---ref <reference>\\t\\tFasta file containing the reference genome\n---transcripts <transcripts>\\tFasta file containing the transcripts\n---TE <TE>\\t\\t\\tFasta file containing the transposable elements\n---miRNAs <miRNAs>\\t\\tFasta file containing the miRNAs\n---snRNAs <snRNAs>\\t\\tFasta file containing the snRNAs\n---rRNAs <rRNAs>\\t\\t\\tFasta file containing the rRNAs\n---tRNAs <tRNAS>\\t\\t\\tFasta file containing the tRNAs\n-\n-For any fasta file, if a bwa index is not provided, you should build it through the corresponding \'--build_[element]\' argument\n-\n-Options:\n---min <INT>\\t\\t\\tMinimum read size (default: 18)\n---max <INT>\\t\\t\\tMaximum read size (default: 29)\n---si_min <INT>\\t\\t\\tLower bound of siRNA range (default: 21)\n---si_max <INT>\\t\\t\\tHigher bound of siRNA range (default: 21)\n---pi_min <INT>\\t\\t\\tLower bound of piRNA range (default: 23)\n---pi_max <INT>\\t\\t\\tHigher bound of piRNA range (default: 29)\n---mis <INT>\\t\\t\\tMaximal genome mismatches (default: 0)\n---misTE <INT>\\t\\t\\tMaximal TE mismatches (default: 3)\n---PPPon <true|false>\\t\\tPing-pong partners (default: true)\n-";\n-}\n'
b
diff -r ff36e76d696a -r 740884893563 lib/sRNAPipe.pm
--- a/lib/sRNAPipe.pm Wed Jan 30 06:26:32 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
b
@@ -1,5 +0,0 @@
-package sRNAPipe;
-
-our $VERSION = '1.1';
-
-1;
b
diff -r ff36e76d696a -r 740884893563 lib/sRNAPipe/Rcall.pm
--- a/lib/sRNAPipe/Rcall.pm Wed Jan 30 06:26:32 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
@@ -1,136 +0,0 @@
-package sRNAPipe::Rcall;
-
-use strict;
-use warnings;
-use Statistics::R;
-
-use Exporter;
-our @ISA = qw(Exporter);
-our @EXPORT_OK = qw( &histogram &pie_chart &bg_to_png );
-
-sub histogram
-{
-    my ($size_hashR, $out_png, $size)    = @_;
-    my (@abs, @ord);
-    my $i = 0;
-    foreach my $k (sort {$a <=> $b} keys %{$size_hashR})
-    {
-        my $percentage = 0;
-        $percentage = $size_hashR->{$k} * 100 / $size if $size != 0;
-        $abs[$i] = $k ; $ord[$i] = $percentage; $i++;
-    }
-    my $abs = join (",", @abs );
-    my $ord = join (",", @ord );
-    if (scalar(@abs) != 0)
-    {
-
-        my $R = Statistics::R->new();
-        $R->startR;
-        $R->send(
-            qq`library(ggplot2)
-            percentage = c($ord)
-            size =c($abs)
-            min = min(size)
-            max = max(size)
-            dat = data.frame(size,percentage)
-            png(filename=\"$out_png\", width = 640, height = 640)
-            c = ggplot(dat,aes(size,percentage))
-            c + geom_bar(stat="identity") + scale_x_continuous(breaks=min:max)+theme( axis.text.x = element_text(angle=90, hjust=0.5, size=20), axis.text.y = element_text( size=20 ), axis.title.x = element_text( size=25, face="bold"), axis.title.y = element_text( size=25, face="bold") )
-            dev.off()`);
-        $R->stopR();
-
-    }
-}
-
-sub bg_to_png
-{
-    my ( $fai, $bgP, $bgM, $dir, $sb ) = @_;
-    my $R = Statistics::R->new();
-    $R->startR;
-    $R->send(
-    qq`library('Sushi')
-    fai =read.table("$fai")
-    if ( file.info("$bgP")\$size !=0 )
-    {
-        bgP = read.table("$bgP")
-    } else { bgP = data.frame(factor(),integer()) }
-
-    if ( file.info("$bgM")\$size !=0 )
-    {
-        bgM = read.table("$bgM")
-    } else { bgM = data.frame(factor(),integer()) }
-
-    f_both = function(chr,end) {
-        jpeg( paste0("$dir",as.character(chr),".png"), quality=100)
-        par(mfrow=c(2,1),mar=c(1,10,1,3))
-        plotBedgraph(bgP, chrom=chr,chromstart=0,chromend=end,transparency=.50,    color=SushiColors(2)(2)[1])
-        axis(side=2,las=2,tcl=.2)
-        mtext("Scaled Read Depth",side=2,line=4,cex=1,font=2)
-        plotBedgraph(bgM, chrom=chr,chromstart=0,chromend=end,transparency=.50, flip=TRUE, color=SushiColors(2)(2)[2])
-        labelgenome(chrom=chr,chromstart=0,chromend=end,side=3,n=3,scale="$sb", line=0,    chromline = 0.5,    scaleline = 0.5, scaleadjust =1.05, chromadjust = -0.4)
-        axis(side=2,las=2,tcl=.2,at=pretty(par("yaxp")[c(1,2)]),labels=-1*pretty(par("yaxp")[c(1,2)]))
-        mtext("Scaled Read Depth",side=2,line=4.5,cex=1,font=2)
-        dev.off()
-    }
-
-    f_plus = function(chr,end) {
-        jpeg( paste0("$dir",as.character(chr),".png"), quality=100)
-        plotBedgraph(bgP, chrom=chr,chromstart=0,chromend=end,transparency=.50,    color=SushiColors(2)(2)[1])
-        labelgenome(chrom=chr,chromstart=0,chromend=end,n=3,scale="$sb", line=0,    chromline = 0.5,    scaleline = 0.5, scaleadjust =1.05, chromadjust = -0.4)
-        axis(side=2,las=2,tcl=.2)
-        mtext("Scaled Read Depth",side=2,line=4,cex=1,font=2)
-        dev.off()
-    }
-
-    f_minus = function(chr,end) {
-        jpeg( paste0("$dir",as.character(chr),".png"), quality=100)
-        plotBedgraph(bgM, chrom=chr,chromstart=0,chromend=end,transparency=.50, flip=TRUE, color=SushiColors(2)(2)[2])
-        labelgenome(chrom=chr,chromstart=0,chromend=end,n=3,scale="$sb", line=0,    chromline = 0.5,    scaleline = 0.5, scaleadjust =1.05, chromadjust = -0.4)
-        axis(side=2,las=2,tcl=.2,at=pretty(par("yaxp")[c(1,2)]),labels=-1*pretty(par("yaxp")[c(1,2)]))
-        mtext("Scaled Read Depth",side=2,line=4.5,cex=1,font=2)
-        dev.off()
-    }
-
-    fai_b = fai[fai\$V1 %in% intersect(bgM\$V1,bgP\$V1), ]
-    mapply( f_both, fai_b\$V1, fai_b\$V2)
-
-    fai_p = fai[fai\$V1 %in% setdiff(bgP\$V1,bgM\$V1), ]
-    mapply( f_plus, fai_p\$V1, fai_p\$V2)
-
-    fai_m = fai[fai\$V1 %in% setdiff(bgM\$V1,bgP\$V1), ]
-    mapply( f_minus, fai_m\$V1, fai_m\$V2) `);
-
-    $R->stopR();
-}
-
-sub pie_chart
-{
-    my $dir = shift;
-    my $in = $dir.'repartition.txt';
-    my $out = $dir.'pie_chart.png';
-
-    my $R = Statistics::R->new();
-    $R->startR;
-    $R->send(
-    qq`
-    library(plotrix)
-    library(RColorBrewer)
-    R =read.table("$in",header=T)
-    values = round(R\$percentage)
-    keys = R\$type
-    lab = paste(values, "%", sep="")
-    png("$out")
-    colors <- brewer.pal(7,"Paired")
-    pie(values, col=colors, labels=lab, clockwise=TRUE)
-    legend("bottom", legend = keys, fill=colors, bty="n", ncol = 3)
-    par(mai = c(0,0,0,0))
-    layout(c(1,2),heights=c(0.3,1))
-    plot.new()
-    legend("bottom", legend = keys, fill=colors, bty="n",ncol = 3)
-    pie(values, col=colors, labels=lab, clockwise=TRUE)
-    dev.off()`
-    );
-    $R->stopR();
-}
-
-1;
b
diff -r ff36e76d696a -r 740884893563 lib/sRNAPipe/align.pm
--- a/lib/sRNAPipe/align.pm Wed Jan 30 06:26:32 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
b'@@ -1,551 +0,0 @@\n-package sRNAPipe::align;\n-\n-use strict;\n-use warnings;\n-use File::Basename;\n-use String::Random;\n-\n-use FindBin;\n-use lib "$FindBin::Bin/../lib";\n-use sRNAPipe::Rcall qw ( histogram );\n-\n-use Exporter;\n-our @ISA         = qw( Exporter );\n-our @EXPORT    = qw( &rpms_rpkm_te &BWA_call &to_build &get_unique &sam_sorted_bam &get_hash_alignment &sam_to_bam_bg &sam_count &sam_count_mis &rpms_rpkm &get_fastq_seq &extract_sam );\n-\n-sub to_build\n-{\n-    my ( $toBuildTabP, $log, $newdir ) = @_;\n-\n-    foreach my    $pairs ( @{ $toBuildTabP } )\n-    {\n-        if (    $pairs->[0] == 1 )\n-        {\n-            my $sym = $newdir.basename(${$pairs->[1]}).\'_symlink.fa\';\n-            symlink( ${$pairs->[1]}, $sym );\n-            ${$pairs->[1]} = $sym;\n-            build_index ( ${$pairs->[1]}, $log );\n-        }\n-    }\n-}\n-\n-sub build_index\n-{\n-    my $to_index = shift;\n-    my $log = shift;\n-    my $index_log = $to_index.\'_index.err\';\n-    `bwa index \'$to_index\' 2> \'$index_log\'`;\n-    print $log "Creating index for $to_index\\n";\n-}\n-\n-sub get_unique\n-{\n-    my ( $sam, $s_uni, $out_prefix, $col_prefix, $details, $report ) = @_;\n-\n-    my $fout = $col_prefix.\'_all_mappers.fastq\';\n-    my $funi = $col_prefix.\'_unique_mappers.fastq\';\n-    my $frej = $col_prefix.\'_unmapped.fastq\';\n-    \n-    my $repartition = $out_prefix.\'distribution.txt\';\n-    my $png_rep = $out_prefix.\'distribution.png\';\n-    my ( %duplicates, %genome_hits) ;\n-\n-    #alignement to the first reference\n-    my @return = sam_parse( $sam, $fout, $funi, $frej, $s_uni, \\%duplicates, \\%genome_hits, $report );\n-    my $ref_fai = $return[4];\n-    my $mappers =    $return[5];\n-    my $mappers_uni = $return[6];\n-    my $size_mappedHashR = $return[7];\n-\n-    if ( $details == 1 )\n-    {\n-        #print number of duplicates and hits number\n-        my ($pourcentage, $total) =(0,0);\n-\n-        $total += $_ foreach values %{$size_mappedHashR};\n-        open (my $rep, \'>\'.$repartition) || die "cannot create $repartition $!\\n";\n-        print $rep "size\\tnumber\\tpercentage\\n";\n-        foreach my $k (sort{$a cmp $b} keys (%{$size_mappedHashR}))\n-        {\n-            $pourcentage = 0;\n-            $pourcentage = $size_mappedHashR->{$k} / $total * 100 unless $total ==0;\n-\n-            print $rep "$k\\t$size_mappedHashR->{$k}\\t";\n-            printf $rep "%.2f\\n",$pourcentage;\n-        }\n-\n-        histogram($size_mappedHashR, $png_rep, $total);\n-\n-\n-        my $dup = $out_prefix.\'dup_mapnum.txt\';\n-        my $dup_u = $out_prefix .\'dup_unique.txt\';\n-        my $dup_r = $out_prefix .\'dup_nonmapp.txt\';\n-        open(my $tab,">".$dup) || die "cannot open output txt file\\n";\n-        open(my $tab_r,">".$dup_r) || die "cannot open output txt file\\n";\n-        open(my $tab_u,">".$dup_u) || die "cannot open output txt file\\n";\n-        print $tab "sequence\\tcount\\tmapnum\\n";\n-        print $tab_u "sequence\\tcount\\n";\n-        print $tab_r "sequence\\tcount\\n";\n-        foreach my $k (sort {$duplicates{$b} <=> $duplicates{$a}}keys %duplicates)\n-        {\n-            $duplicates{$k} = 0 unless exists($duplicates{$k});\n-            $genome_hits{$k} = 0 unless exists($genome_hits{$k});\n-            if ($genome_hits{$k} != 0) { print $tab $k."\\t".$duplicates{$k}."\\t".$genome_hits{$k}."\\n"; }\n-            else {print $tab_r $k."\\t".$duplicates{$k}."\\n";}\n-            if ($genome_hits{$k} == 1) { print $tab_u $k."\\t".$duplicates{$k}."\\n"; }\n-        }\n-    close $dup; close $dup_r; close $dup_u;\n-    }\n-    return ( $ref_fai, $mappers, $mappers_uni );\n-}\n-\n-sub sam_parse\n-{\n-    my ( $sam, $fastq_accepted, $fastq_accepted_unique, $fastq_rejected, $sam_unique, $duplicate_hashR, $best_hit_number_hashR, $report ) = @_ ;\n-    my ($reads, $mappers, $mappersUnique, @garbage, %size_num, %size_num_spe, %number, %numberSens, %numberReverse, %unique_number, %numberNM, %numberM, %size);\n-    $mappers = $mappersUnique = $reads = 0;\n-\n-    open my $fic, \'<\', $sam || die "cannot open $sam $!\\n";\n-    op'..b'> \'$samse_err\' > \'$sam\'\\n";\n-    `bwa aln -t $number_of_cpus -n $mismatches \'$index\' \'$fastq\' 2> \'$aln_err\' | bwa samse $index /dev/stdin \'$fastq\' 2> \'$samse_err\' > \'$sam\' `;\n-}\n-\n-sub rpms_rpkm\n-{\n-    my ( $counthashR, $sizehashR, $mapped, $out_file, $piRNA_number, $miRNA_number, $bonafide_number ) =@_;\n-    open(my $out, ">".$out_file) || die "cannot open normalized file $! \\n";\n-    print $out "ID\\treads counts\\tRPKM";\n-    print $out "\\tper million of piRNAs" if ($piRNA_number != 0);\n-    print $out "\\tper million of miRNAs" if ($miRNA_number != 0);\n-    print $out "\\tper million of bonafide reads" if ($bonafide_number != 0);\n-    print $out "\\n";\n-    foreach my $k    ( sort keys %{$counthashR} )\n-    {\n-        my ($rpkm, $pirna, $mirna, $bonafide) = (0,0,0,0);\n-        \n-        $rpkm = ( $counthashR->{$k} * 1000000000) / ( $sizehashR->{$k} * $mapped) if ( $sizehashR->{$k} * $mapped) != 0 ;\n-        print $out $k."\\t".$counthashR->{$k}."\\t"; printf $out "%.2f",$rpkm;\n-        \n-        if ($piRNA_number != 0 )\n-        {\n-            $pirna = ( $counthashR->{$k}    * 1000000) / $piRNA_number;\n-            printf $out "\\t%.2f",$pirna;\n-        }\n-        if ($miRNA_number != 0 )\n-        {\n-            $mirna = ( $counthashR->{$k}    * 1000000) / $miRNA_number;\n-            printf $out "\\t%.2f",$mirna;\n-        }\n-        if ($bonafide_number != 0 )\n-        {\n-            $bonafide = ( $counthashR->{$k}    * 1000000) / $bonafide_number;\n-            printf $out "\\t%.2f",$bonafide;\n-        }\n-        print $out "\\n";\n-     }\n-    close $out;\n-}\n-\n-sub extract_sam\n-{\n-    my ( $hashRef, $sam_in, $sam_out, $sam_uni_out, $fastq_out, $fastq_uni_out ) = @_;\n-    \n-    open my $s_in, \'<\', $sam_in || die "cannot open $sam_in file $!\\n";\n-\n-    open my $f_out, \'>\', $fastq_out || die "cannot create $fastq_out $!\\n";\n-    open my $f_uni_out, \'>\', $fastq_uni_out || die "cannot create $fastq_uni_out $!\\n";\n-    \n-    open my $s_out, \'>\', $sam_out || die "cannot create $sam_out file $!\\n" if defined ($hashRef);\n-    open my $s_uni_out, \'>\', $sam_uni_out || die "cannot create $sam_uni_out file $!\\n";\n-\n-    my $sequence = \'\';\n-    while(<$s_in>)\n-    {\n-        if ($_ =~ /^\\@[A-Za-z][A-Za-z](\\t[A-Za-z][A-Za-z0-9]:[ -~]+)+$/ || $_ =~ /^\\@CO\\t.*/ )\n-        {\n-            print $s_out $_ if defined ($hashRef);\n-            print $s_uni_out $_;\n-            next;\n-        }\n-        my @line = split (/\\t/,$_);\n-        $sequence = $line[0];\n-        if ( (! defined ($hashRef) )|| (    exists $hashRef->{$sequence}    &&    $hashRef->{$sequence} == 1 ) )\n-        {\n-            my $arn    =    $line[9];\n-            if ($line[1] & 16)\n-            {\n-                $arn =reverse($arn);\n-                $arn =~ tr/atgcuATGCU/tacgaTACGA/;\n-            }\n-\n-            if    ( ( $line[1] == 16 || $line[1] == 0 ) )\n-            {\n-                print $f_out "\\@".$line[0]."\\n".$arn."\\n+\\n".$line[10]."\\n" ;\n-                print $s_out $_ if defined ($hashRef);\n-                if ( $line[11] eq "XT:A:U" )\n-                {\n-                    print $f_uni_out "\\@".$line[0]."\\n".$arn."\\n+\\n".$line[10]."\\n" ;\n-                    print $s_uni_out $_ ;\n-                }\n-            }\n-        }\n-    }\n-    close $s_in; close $s_out if defined ($hashRef);\n-    close $s_uni_out; close $f_out; close $f_uni_out;\n-}\n-\n-sub get_fastq_seq\n-{\n-    my $fastq = shift;\n-    my %hash; my $cmp = 0;\n-\n-    open my $fic, \'<\', $fastq || die "cannot open input file $! \\n";\n-    while(<$fic>)\n-    {\n-        chomp $_;\n-        $cmp++;\n-        if ($cmp % 4 == 1)\n-        {\n-            die "file do not contain a @ at line $cmp\\n" unless ($_ =~ /^\\@/ );\n-            if ($_ =~ /^\\@(.*)\\s.*/) { $hash{$1} = 1;}\n-            elsif ($_ =~ /^\\@(.*)/) { $hash{$1} = 1;}\n-        }\n-        elsif ($cmp % 4 == 3 )\n-        {\n-            die "file do not contain a + at line $cmp\\n" unless $_ =~ /^\\+/;\n-        }\n-    }\n-    close $fic;\n-    return \\%hash;\n-}\n-\n-1;\n'
b
diff -r ff36e76d696a -r 740884893563 lib/sRNAPipe/css/bootstrap-responsive.css
--- a/lib/sRNAPipe/css/bootstrap-responsive.css Wed Jan 30 06:26:32 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
b'@@ -1,1109 +0,0 @@\n-/*!\n- * Bootstrap Responsive v2.3.2\n- *\n- * Copyright 2012 Twitter, Inc\n- * Licensed under the Apache License v2.0\n- * http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Designed and built with all the love in the world @twitter by @mdo and @fat.\n- */\n-\n-.clearfix {\n-  *zoom: 1;\n-}\n-\n-.clearfix:before,\n-.clearfix:after {\n-  display: table;\n-  line-height: 0;\n-  content: "";\n-}\n-\n-.clearfix:after {\n-  clear: both;\n-}\n-\n-.hide-text {\n-  font: 0/0 a;\n-  color: transparent;\n-  text-shadow: none;\n-  background-color: transparent;\n-  border: 0;\n-}\n-\n-.input-block-level {\n-  display: block;\n-  width: 100%;\n-  min-height: 30px;\n-  -webkit-box-sizing: border-box;\n-     -moz-box-sizing: border-box;\n-          box-sizing: border-box;\n-}\n-\n-@-ms-viewport {\n-  width: device-width;\n-}\n-\n-.hidden {\n-  display: none;\n-  visibility: hidden;\n-}\n-\n-.visible-phone {\n-  display: none !important;\n-}\n-\n-.visible-tablet {\n-  display: none !important;\n-}\n-\n-.hidden-desktop {\n-  display: none !important;\n-}\n-\n-.visible-desktop {\n-  display: inherit !important;\n-}\n-\n-@media (min-width: 768px) and (max-width: 979px) {\n-  .hidden-desktop {\n-    display: inherit !important;\n-  }\n-  .visible-desktop {\n-    display: none !important ;\n-  }\n-  .visible-tablet {\n-    display: inherit !important;\n-  }\n-  .hidden-tablet {\n-    display: none !important;\n-  }\n-}\n-\n-@media (max-width: 767px) {\n-  .hidden-desktop {\n-    display: inherit !important;\n-  }\n-  .visible-desktop {\n-    display: none !important;\n-  }\n-  .visible-phone {\n-    display: inherit !important;\n-  }\n-  .hidden-phone {\n-    display: none !important;\n-  }\n-}\n-\n-.visible-print {\n-  display: none !important;\n-}\n-\n-@media print {\n-  .visible-print {\n-    display: inherit !important;\n-  }\n-  .hidden-print {\n-    display: none !important;\n-  }\n-}\n-\n-@media (min-width: 1200px) {\n-  .row {\n-    margin-left: -30px;\n-    *zoom: 1;\n-  }\n-  .row:before,\n-  .row:after {\n-    display: table;\n-    line-height: 0;\n-    content: "";\n-  }\n-  .row:after {\n-    clear: both;\n-  }\n-  [class*="span"] {\n-    float: left;\n-    min-height: 1px;\n-    margin-left: 30px;\n-  }\n-  .container,\n-  .navbar-static-top .container,\n-  .navbar-fixed-top .container,\n-  .navbar-fixed-bottom .container {\n-    width: 1170px;\n-  }\n-  .span12 {\n-    width: 1170px;\n-  }\n-  .span11 {\n-    width: 1070px;\n-  }\n-  .span10 {\n-    width: 970px;\n-  }\n-  .span9 {\n-    width: 870px;\n-  }\n-  .span8 {\n-    width: 770px;\n-  }\n-  .span7 {\n-    width: 670px;\n-  }\n-  .span6 {\n-    width: 570px;\n-  }\n-  .span5 {\n-    width: 470px;\n-  }\n-  .span4 {\n-    width: 370px;\n-  }\n-  .span3 {\n-    width: 270px;\n-  }\n-  .span2 {\n-    width: 170px;\n-  }\n-  .span1 {\n-    width: 70px;\n-  }\n-  .offset12 {\n-    margin-left: 1230px;\n-  }\n-  .offset11 {\n-    margin-left: 1130px;\n-  }\n-  .offset10 {\n-    margin-left: 1030px;\n-  }\n-  .offset9 {\n-    margin-left: 930px;\n-  }\n-  .offset8 {\n-    margin-left: 830px;\n-  }\n-  .offset7 {\n-    margin-left: 730px;\n-  }\n-  .offset6 {\n-    margin-left: 630px;\n-  }\n-  .offset5 {\n-    margin-left: 530px;\n-  }\n-  .offset4 {\n-    margin-left: 430px;\n-  }\n-  .offset3 {\n-    margin-left: 330px;\n-  }\n-  .offset2 {\n-    margin-left: 230px;\n-  }\n-  .offset1 {\n-    margin-left: 130px;\n-  }\n-  .row-fluid {\n-    width: 100%;\n-    *zoom: 1;\n-  }\n-  .row-fluid:before,\n-  .row-fluid:after {\n-    display: table;\n-    line-height: 0;\n-    content: "";\n-  }\n-  .row-fluid:after {\n-    clear: both;\n-  }\n-  .row-fluid [class*="span"] {\n-    display: block;\n-    float: left;\n-    width: 100%;\n-    min-height: 30px;\n-    margin-left: 2.564102564102564%;\n-    *margin-left: 2.5109110747408616%;\n-    -webkit-box-sizing: border-box;\n-       -moz-box-sizing: border-box;\n-            box-sizing: border-box;\n-  }\n-  .row-fluid [class*="span"]:first-child {\n-    margin-left: 0;\n-  }\n-  .row-fluid .controls-row [class*="span"] + [class*="span"] {\n-    margin-left: 2.564102564102564%;\n-  }\n-  .row-fluid .span12 {\n-    width: 100%;\n-    *width: 99.9468'..b'tic;\n-  }\n-}\n-\n-@media (max-width: 979px) {\n-  body {\n-    padding-top: 0;\n-  }\n-  .navbar-fixed-top,\n-  .navbar-fixed-bottom {\n-    position: static;\n-  }\n-  .navbar-fixed-top {\n-    margin-bottom: 20px;\n-  }\n-  .navbar-fixed-bottom {\n-    margin-top: 20px;\n-  }\n-  .navbar-fixed-top .navbar-inner,\n-  .navbar-fixed-bottom .navbar-inner {\n-    padding: 5px;\n-  }\n-  .navbar .container {\n-    width: auto;\n-    padding: 0;\n-  }\n-  .navbar .brand {\n-    padding-right: 10px;\n-    padding-left: 10px;\n-    margin: 0 0 0 -5px;\n-  }\n-  .nav-collapse {\n-    clear: both;\n-  }\n-  .nav-collapse .nav {\n-    float: none;\n-    margin: 0 0 10px;\n-  }\n-  .nav-collapse .nav > li {\n-    float: none;\n-  }\n-  .nav-collapse .nav > li > a {\n-    margin-bottom: 2px;\n-  }\n-  .nav-collapse .nav > .divider-vertical {\n-    display: none;\n-  }\n-  .nav-collapse .nav .nav-header {\n-    color: #777777;\n-    text-shadow: none;\n-  }\n-  .nav-collapse .nav > li > a,\n-  .nav-collapse .dropdown-menu a {\n-    padding: 9px 15px;\n-    font-weight: bold;\n-    color: #777777;\n-    -webkit-border-radius: 3px;\n-       -moz-border-radius: 3px;\n-            border-radius: 3px;\n-  }\n-  .nav-collapse .btn {\n-    padding: 4px 10px 4px;\n-    font-weight: normal;\n-    -webkit-border-radius: 4px;\n-       -moz-border-radius: 4px;\n-            border-radius: 4px;\n-  }\n-  .nav-collapse .dropdown-menu li + li a {\n-    margin-bottom: 2px;\n-  }\n-  .nav-collapse .nav > li > a:hover,\n-  .nav-collapse .nav > li > a:focus,\n-  .nav-collapse .dropdown-menu a:hover,\n-  .nav-collapse .dropdown-menu a:focus {\n-    background-color: #f2f2f2;\n-  }\n-  .navbar-inverse .nav-collapse .nav > li > a,\n-  .navbar-inverse .nav-collapse .dropdown-menu a {\n-    color: #999999;\n-  }\n-  .navbar-inverse .nav-collapse .nav > li > a:hover,\n-  .navbar-inverse .nav-collapse .nav > li > a:focus,\n-  .navbar-inverse .nav-collapse .dropdown-menu a:hover,\n-  .navbar-inverse .nav-collapse .dropdown-menu a:focus {\n-    background-color: #111111;\n-  }\n-  .nav-collapse.in .btn-group {\n-    padding: 0;\n-    margin-top: 5px;\n-  }\n-  .nav-collapse .dropdown-menu {\n-    position: static;\n-    top: auto;\n-    left: auto;\n-    display: none;\n-    float: none;\n-    max-width: none;\n-    padding: 0;\n-    margin: 0 15px;\n-    background-color: transparent;\n-    border: none;\n-    -webkit-border-radius: 0;\n-       -moz-border-radius: 0;\n-            border-radius: 0;\n-    -webkit-box-shadow: none;\n-       -moz-box-shadow: none;\n-            box-shadow: none;\n-  }\n-  .nav-collapse .open > .dropdown-menu {\n-    display: block;\n-  }\n-  .nav-collapse .dropdown-menu:before,\n-  .nav-collapse .dropdown-menu:after {\n-    display: none;\n-  }\n-  .nav-collapse .dropdown-menu .divider {\n-    display: none;\n-  }\n-  .nav-collapse .nav > li > .dropdown-menu:before,\n-  .nav-collapse .nav > li > .dropdown-menu:after {\n-    display: none;\n-  }\n-  .nav-collapse .navbar-form,\n-  .nav-collapse .navbar-search {\n-    float: none;\n-    padding: 10px 15px;\n-    margin: 10px 0;\n-    border-top: 1px solid #f2f2f2;\n-    border-bottom: 1px solid #f2f2f2;\n-    -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n-       -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n-            box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n-  }\n-  .navbar-inverse .nav-collapse .navbar-form,\n-  .navbar-inverse .nav-collapse .navbar-search {\n-    border-top-color: #111111;\n-    border-bottom-color: #111111;\n-  }\n-  .navbar .nav-collapse .nav.pull-right {\n-    float: none;\n-    margin-left: 0;\n-  }\n-  .nav-collapse,\n-  .nav-collapse.collapse {\n-    height: 0;\n-    overflow: hidden;\n-  }\n-  .navbar .btn-navbar {\n-    display: block;\n-  }\n-  .navbar-static .navbar-inner {\n-    padding-right: 10px;\n-    padding-left: 10px;\n-  }\n-}\n-\n-@media (min-width: 980px) {\n-  .nav-collapse.collapse {\n-    height: auto !important;\n-    overflow: visible !important;\n-  }\n-}\n'
b
diff -r ff36e76d696a -r 740884893563 lib/sRNAPipe/css/bootstrap-table.css
--- a/lib/sRNAPipe/css/bootstrap-table.css Wed Jan 30 06:26:32 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
@@ -1,313 +0,0 @@
-/**
- * @author zhixin wen <wenzhixin2010@gmail.com>
- * version: 1.11.1
- * https://github.com/wenzhixin/bootstrap-table/
- */
-
-.bootstrap-table .table {
-    margin-bottom: 0 !important;
-    border-bottom: 1px solid #dddddd;
-    border-collapse: collapse !important;
-    border-radius: 1px;
-}
-
-.bootstrap-table .table:not(.table-condensed),
-.bootstrap-table .table:not(.table-condensed) > tbody > tr > th,
-.bootstrap-table .table:not(.table-condensed) > tfoot > tr > th,
-.bootstrap-table .table:not(.table-condensed) > thead > tr > td,
-.bootstrap-table .table:not(.table-condensed) > tbody > tr > td,
-.bootstrap-table .table:not(.table-condensed) > tfoot > tr > td {
-    padding: 8px;
-}
-
-.bootstrap-table .table.table-no-bordered > thead > tr > th,
-.bootstrap-table .table.table-no-bordered > tbody > tr > td {
-    border-right: 2px solid transparent;
-}
-
-.bootstrap-table .table.table-no-bordered > tbody > tr > td:last-child {
-    border-right: none;
-}
-
-.fixed-table-container {
-    position: relative;
-    clear: both;
-    border: 1px solid #dddddd;
-    border-radius: 4px;
-    -webkit-border-radius: 4px;
-    -moz-border-radius: 4px;
-}
-
-.fixed-table-container.table-no-bordered {
-    border: 1px solid transparent;
-}
-
-.fixed-table-footer,
-.fixed-table-header {
-    overflow: hidden;
-}
-
-.fixed-table-footer {
-    border-top: 1px solid #dddddd;
-}
-
-.fixed-table-body {
-    overflow-x: auto;
-    overflow-y: auto;
-    height: 100%;
-}
-
-.fixed-table-container table {
-    width: 100%;
-}
-
-.fixed-table-container thead th {
-    height: 0;
-    padding: 0;
-    margin: 0;
-    border-left: 1px solid #dddddd;
-}
-
-.fixed-table-container thead th:focus {
-    outline: 0 solid transparent;
-}
-
-.fixed-table-container thead th:first-child {
-    border-left: none;
-    border-top-left-radius: 4px;
-    -webkit-border-top-left-radius: 4px;
-    -moz-border-radius-topleft: 4px;
-}
-
-.fixed-table-container thead th .th-inner,
-.fixed-table-container tbody td .th-inner {
-    padding: 8px;
-    line-height: 24px;
-    vertical-align: top;
-    overflow: hidden;
-    text-overflow: ellipsis;
-    white-space: nowrap;
-}
-
-.fixed-table-container thead th .sortable {
-    cursor: pointer;
-    background-position: right;
-    background-repeat: no-repeat;
-    padding-right: 30px;
-}
-
-.fixed-table-container thead th .both {
-    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAQAAADYWf5HAAAAkElEQVQoz7X QMQ5AQBCF4dWQSJxC5wwax1Cq1e7BAdxD5SL+Tq/QCM1oNiJidwox0355mXnG/DrEtIQ6azioNZQxI0ykPhTQIwhCR+BmBYtlK7kLJYwWCcJA9M4qdrZrd8pPjZWPtOqdRQy320YSV17OatFC4euts6z39GYMKRPCTKY9UnPQ6P+GtMRfGtPnBCiqhAeJPmkqAAAAAElFTkSuQmCC');
-}
-
-.fixed-table-container thead th .asc {
-    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZ0lEQVQ4y2NgGLKgquEuFxBPAGI2ahhWCsS/gDibUoO0gPgxEP8H4ttArEyuQYxAPBdqEAxPBImTY5gjEL9DM+wTENuQahAvEO9DMwiGdwAxOymGJQLxTyD+jgWDxCMZRsEoGAVoAADeemwtPcZI2wAAAABJRU5ErkJggg==');
-}
-
-.fixed-table-container thead th .desc {
-    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZUlEQVQ4y2NgGAWjYBSggaqGu5FA/BOIv2PBIPFEUgxjB+IdQPwfC94HxLykus4GiD+hGfQOiB3J8SojEE9EM2wuSJzcsFMG4ttQgx4DsRalkZENxL+AuJQaMcsGxBOAmGvopk8AVz1sLZgg0bsAAAAASUVORK5CYII= ');
-}
-
-.fixed-table-container th.detail {
-    width: 30px;
-}
-
-.fixed-table-container tbody td {
-    border-left: 1px solid #dddddd;
-}
-
-.fixed-table-container tbody tr:first-child td {
-    border-top: none;
-}
-
-.fixed-table-container tbody td:first-child {
-    border-left: none;
-}
-
-/* the same color with .active */
-.fixed-table-container tbody .selected td {
-    background-color: #f5f5f5;
-}
-
-.fixed-table-container .bs-checkbox {
-    text-align: center;
-}
-
-.fixed-table-container .bs-checkbox .th-inner {
-    padding: 8px 0;
-}
-
-.fixed-table-container input[type="radio"],
-.fixed-table-container input[type="checkbox"] {
-    margin: 0 auto !important;
-}
-
-.fixed-table-container .no-records-found {
-    text-align: center;
-}
-
-.fixed-table-pagination div.pagination,
-.fixed-table-pagination .pagination-detail {
-    margin-top: 10px;
-    margin-bottom: 10px;
-}
-
-.fixed-table-pagination div.pagination .pagination {
-    margin: 0;
-}
-
-.fixed-table-pagination .pagination a {
-    padding: 6px 12px;
-    line-height: 1.428571429;
-}
-
-.fixed-table-pagination .pagination-info {
-    line-height: 34px;
-    margin-right: 5px;
-}
-
-.fixed-table-pagination .btn-group {
-    position: relative;
-    display: inline-block;
-    vertical-align: middle;
-}
-
-.fixed-table-pagination .dropup .dropdown-menu {
-    margin-bottom: 0;
-}
-
-.fixed-table-pagination .page-list {
-    display: inline-block;
-}
-
-.fixed-table-toolbar .columns-left {
-    margin-right: 5px;
-}
-
-.fixed-table-toolbar .columns-right {
-    margin-left: 5px;
-}
-
-.fixed-table-toolbar .columns label {
-    display: block;
-    padding: 3px 20px;
-    clear: both;
-    font-weight: normal;
-    line-height: 1.428571429;
-}
-
-.fixed-table-toolbar .bs-bars,
-.fixed-table-toolbar .search,
-.fixed-table-toolbar .columns {
-    position: relative;
-    margin-top: 10px;
-    margin-bottom: 10px;
-    line-height: 34px;
-}
-
-.fixed-table-pagination li.disabled a {
-    pointer-events: none;
-    cursor: default;
-}
-
-.fixed-table-loading {
-    display: none;
-    position: absolute;
-    top: 42px;
-    right: 0;
-    bottom: 0;
-    left: 0;
-    z-index: 99;
-    background-color: #fff;
-    text-align: center;
-}
-
-.fixed-table-body .card-view .title {
-    font-weight: bold;
-    display: inline-block;
-    min-width: 30%;
-    text-align: left !important;
-}
-
-/* support bootstrap 2 */
-.fixed-table-body thead th .th-inner {
-    box-sizing: border-box;
-}
-
-.table th, .table td {
-    vertical-align: middle;
-    box-sizing: border-box;
-}
-
-.fixed-table-toolbar .dropdown-menu {
-    text-align: left;
-    max-height: 300px;
-    overflow: auto;
-}
-
-.fixed-table-toolbar .btn-group > .btn-group {
-    display: inline-block;
-    margin-left: -1px !important;
-}
-
-.fixed-table-toolbar .btn-group > .btn-group > .btn {
-    border-radius: 0;
-}
-
-.fixed-table-toolbar .btn-group > .btn-group:first-child > .btn {
-    border-top-left-radius: 4px;
-    border-bottom-left-radius: 4px;
-}
-
-.fixed-table-toolbar .btn-group > .btn-group:last-child > .btn {
-    border-top-right-radius: 4px;
-    border-bottom-right-radius: 4px;
-}
-
-.bootstrap-table .table > thead > tr > th {
-    vertical-align: bottom;
-    border-bottom: 1px solid #ddd;
-}
-
-/* support bootstrap 3 */
-.bootstrap-table .table thead > tr > th {
-    padding: 0;
-    margin: 0;
-}
-
-.bootstrap-table .fixed-table-footer tbody > tr > td {
-    padding: 0 !important;
-}
-
-.bootstrap-table .fixed-table-footer .table {
-    border-bottom: none;
-    border-radius: 0;
-    padding: 0 !important;
-}
-
-.bootstrap-table .pull-right .dropdown-menu {
-    right: 0;
-    left: auto;
-}
-
-/* calculate scrollbar width */
-p.fixed-table-scroll-inner {
-    width: 100%;
-    height: 200px;
-}
-
-div.fixed-table-scroll-outer {
-    top: 0;
-    left: 0;
-    visibility: hidden;
-    width: 200px;
-    height: 150px;
-    overflow: hidden;
-}
-
-/* for get correct heights  */
-.fixed-table-toolbar:after, .fixed-table-pagination:after {
-    content: "";
-    display: block;
-    clear: both;
-}
b
diff -r ff36e76d696a -r 740884893563 lib/sRNAPipe/css/bootstrap.css
--- a/lib/sRNAPipe/css/bootstrap.css Wed Jan 30 06:26:32 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
b'@@ -1,6167 +0,0 @@\n-/*!\n- * Bootstrap v2.3.2\n- *\n- * Copyright 2012 Twitter, Inc\n- * Licensed under the Apache License v2.0\n- * http://www.apache.org/licenses/LICENSE-2.0\n- *\n- * Designed and built with all the love in the world @twitter by @mdo and @fat.\n- */\n-\n-.clearfix {\n-  *zoom: 1;\n-}\n-\n-.clearfix:before,\n-.clearfix:after {\n-  display: table;\n-  line-height: 0;\n-  content: "";\n-}\n-\n-.clearfix:after {\n-  clear: both;\n-}\n-\n-.hide-text {\n-  font: 0/0 a;\n-  color: transparent;\n-  text-shadow: none;\n-  background-color: transparent;\n-  border: 0;\n-}\n-\n-.input-block-level {\n-  display: block;\n-  width: 100%;\n-  min-height: 30px;\n-  -webkit-box-sizing: border-box;\n-     -moz-box-sizing: border-box;\n-          box-sizing: border-box;\n-}\n-\n-article,\n-aside,\n-details,\n-figcaption,\n-figure,\n-footer,\n-header,\n-hgroup,\n-nav,\n-section {\n-  display: block;\n-}\n-\n-audio,\n-canvas,\n-video {\n-  display: inline-block;\n-  *display: inline;\n-  *zoom: 1;\n-}\n-\n-audio:not([controls]) {\n-  display: none;\n-}\n-\n-html {\n-  font-size: 100%;\n-  -webkit-text-size-adjust: 100%;\n-      -ms-text-size-adjust: 100%;\n-}\n-\n-a:focus {\n-  outline: thin dotted #333;\n-  outline: 5px auto -webkit-focus-ring-color;\n-  outline-offset: -2px;\n-}\n-\n-a:hover,\n-a:active {\n-  outline: 0;\n-}\n-\n-sub,\n-sup {\n-  position: relative;\n-  font-size: 75%;\n-  line-height: 0;\n-  vertical-align: baseline;\n-}\n-\n-sup {\n-  top: -0.5em;\n-}\n-\n-sub {\n-  bottom: -0.25em;\n-}\n-\n-img {\n-  width: auto\\9;\n-  height: auto;\n-  max-width: 100%;\n-  vertical-align: middle;\n-  border: 0;\n-  -ms-interpolation-mode: bicubic;\n-}\n-\n-#map_canvas img,\n-.google-maps img {\n-  max-width: none;\n-}\n-\n-button,\n-input,\n-select,\n-textarea {\n-  margin: 0;\n-  font-size: 100%;\n-  vertical-align: middle;\n-}\n-\n-button,\n-input {\n-  *overflow: visible;\n-  line-height: normal;\n-}\n-\n-button::-moz-focus-inner,\n-input::-moz-focus-inner {\n-  padding: 0;\n-  border: 0;\n-}\n-\n-button,\n-html input[type="button"],\n-input[type="reset"],\n-input[type="submit"] {\n-  cursor: pointer;\n-  -webkit-appearance: button;\n-}\n-\n-label,\n-select,\n-button,\n-input[type="button"],\n-input[type="reset"],\n-input[type="submit"],\n-input[type="radio"],\n-input[type="checkbox"] {\n-  cursor: pointer;\n-}\n-\n-input[type="search"] {\n-  -webkit-box-sizing: content-box;\n-     -moz-box-sizing: content-box;\n-          box-sizing: content-box;\n-  -webkit-appearance: textfield;\n-}\n-\n-input[type="search"]::-webkit-search-decoration,\n-input[type="search"]::-webkit-search-cancel-button {\n-  -webkit-appearance: none;\n-}\n-\n-textarea {\n-  overflow: auto;\n-  vertical-align: top;\n-}\n-\n-@media print {\n-  * {\n-    color: #000 !important;\n-    text-shadow: none !important;\n-    background: transparent !important;\n-    box-shadow: none !important;\n-  }\n-  a,\n-  a:visited {\n-    text-decoration: underline;\n-  }\n-  a[href]:after {\n-    content: " (" attr(href) ")";\n-  }\n-  abbr[title]:after {\n-    content: " (" attr(title) ")";\n-  }\n-  .ir a:after,\n-  a[href^="javascript:"]:after,\n-  a[href^="#"]:after {\n-    content: "";\n-  }\n-  pre,\n-  blockquote {\n-    border: 1px solid #999;\n-    page-break-inside: avoid;\n-  }\n-  thead {\n-    display: table-header-group;\n-  }\n-  tr,\n-  img {\n-    page-break-inside: avoid;\n-  }\n-  img {\n-    max-width: 100% !important;\n-  }\n-  @page  {\n-    margin: 0.5cm;\n-  }\n-  p,\n-  h2,\n-  h3 {\n-    orphans: 3;\n-    widows: 3;\n-  }\n-  h2,\n-  h3 {\n-    page-break-after: avoid;\n-  }\n-}\n-\n-body {\n-  margin: 0;\n-  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n-  font-size: 14px;\n-  line-height: 20px;\n-  color: #333333;\n-  background-color: #ffffff;\n-}\n-\n-a {\n-  color: #0088cc;\n-  text-decoration: none;\n-}\n-\n-a:hover,\n-a:focus {\n-  color: #005580;\n-  text-decoration: underline;\n-}\n-\n-.img-rounded {\n-  -webkit-border-radius: 6px;\n-     -moz-border-radius: 6px;\n-          border-radius: 6px;\n-}\n-\n-.img-polaroid {\n-  padding: 4px;\n-  background-color: #fff;\n-  border: 1px solid #ccc;\n-  border: 1px solid rgba(0, 0, 0, 0.2);\n-  -webkit-box-shadow: 0 1px 3'..b', 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n-  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n-}\n-\n-.accordion {\n-  margin-bottom: 20px;\n-}\n-\n-.accordion-group {\n-  margin-bottom: 2px;\n-  border: 1px solid #e5e5e5;\n-  -webkit-border-radius: 4px;\n-     -moz-border-radius: 4px;\n-          border-radius: 4px;\n-}\n-\n-.accordion-heading {\n-  border-bottom: 0;\n-}\n-\n-.accordion-heading .accordion-toggle {\n-  display: block;\n-  padding: 8px 15px;\n-}\n-\n-.accordion-toggle {\n-  cursor: pointer;\n-}\n-\n-.accordion-inner {\n-  padding: 9px 15px;\n-  border-top: 1px solid #e5e5e5;\n-}\n-\n-.carousel {\n-  position: relative;\n-  margin-bottom: 20px;\n-  line-height: 1;\n-}\n-\n-.carousel-inner {\n-  position: relative;\n-  width: 100%;\n-  overflow: hidden;\n-}\n-\n-.carousel-inner > .item {\n-  position: relative;\n-  display: none;\n-  -webkit-transition: 0.6s ease-in-out left;\n-     -moz-transition: 0.6s ease-in-out left;\n-       -o-transition: 0.6s ease-in-out left;\n-          transition: 0.6s ease-in-out left;\n-}\n-\n-.carousel-inner > .item > img,\n-.carousel-inner > .item > a > img {\n-  display: block;\n-  line-height: 1;\n-}\n-\n-.carousel-inner > .active,\n-.carousel-inner > .next,\n-.carousel-inner > .prev {\n-  display: block;\n-}\n-\n-.carousel-inner > .active {\n-  left: 0;\n-}\n-\n-.carousel-inner > .next,\n-.carousel-inner > .prev {\n-  position: absolute;\n-  top: 0;\n-  width: 100%;\n-}\n-\n-.carousel-inner > .next {\n-  left: 100%;\n-}\n-\n-.carousel-inner > .prev {\n-  left: -100%;\n-}\n-\n-.carousel-inner > .next.left,\n-.carousel-inner > .prev.right {\n-  left: 0;\n-}\n-\n-.carousel-inner > .active.left {\n-  left: -100%;\n-}\n-\n-.carousel-inner > .active.right {\n-  left: 100%;\n-}\n-\n-.carousel-control {\n-  position: absolute;\n-  top: 40%;\n-  left: 15px;\n-  width: 40px;\n-  height: 40px;\n-  margin-top: -20px;\n-  font-size: 60px;\n-  font-weight: 100;\n-  line-height: 30px;\n-  color: #ffffff;\n-  text-align: center;\n-  background: #222222;\n-  border: 3px solid #ffffff;\n-  -webkit-border-radius: 23px;\n-     -moz-border-radius: 23px;\n-          border-radius: 23px;\n-  opacity: 0.5;\n-  filter: alpha(opacity=50);\n-}\n-\n-.carousel-control.right {\n-  right: 15px;\n-  left: auto;\n-}\n-\n-.carousel-control:hover,\n-.carousel-control:focus {\n-  color: #ffffff;\n-  text-decoration: none;\n-  opacity: 0.9;\n-  filter: alpha(opacity=90);\n-}\n-\n-.carousel-indicators {\n-  position: absolute;\n-  top: 15px;\n-  right: 15px;\n-  z-index: 5;\n-  margin: 0;\n-  list-style: none;\n-}\n-\n-.carousel-indicators li {\n-  display: block;\n-  float: left;\n-  width: 10px;\n-  height: 10px;\n-  margin-left: 5px;\n-  text-indent: -999px;\n-  background-color: #ccc;\n-  background-color: rgba(255, 255, 255, 0.25);\n-  border-radius: 5px;\n-}\n-\n-.carousel-indicators .active {\n-  background-color: #fff;\n-}\n-\n-.carousel-caption {\n-  position: absolute;\n-  right: 0;\n-  bottom: 0;\n-  left: 0;\n-  padding: 15px;\n-  background: #333333;\n-  background: rgba(0, 0, 0, 0.75);\n-}\n-\n-.carousel-caption h4,\n-.carousel-caption p {\n-  line-height: 20px;\n-  color: #ffffff;\n-}\n-\n-.carousel-caption h4 {\n-  margin: 0 0 5px;\n-}\n-\n-.carousel-caption p {\n-  margin-bottom: 0;\n-}\n-\n-.hero-unit {\n-  padding: 60px;\n-  margin-bottom: 30px;\n-  font-size: 18px;\n-  font-weight: 200;\n-  line-height: 30px;\n-  color: inherit;\n-  background-color: #eeeeee;\n-  -webkit-border-radius: 6px;\n-     -moz-border-radius: 6px;\n-          border-radius: 6px;\n-}\n-\n-.hero-unit h1 {\n-  margin-bottom: 0;\n-  font-size: 60px;\n-  line-height: 1;\n-  letter-spacing: -1px;\n-  color: inherit;\n-}\n-\n-.hero-unit li {\n-  line-height: 30px;\n-}\n-\n-.pull-right {\n-  float: right;\n-}\n-\n-.pull-left {\n-  float: left;\n-}\n-\n-.hide {\n-  display: none;\n-}\n-\n-.show {\n-  display: block;\n-}\n-\n-.invisible {\n-  visibility: hidden;\n-}\n-\n-.affix {\n-  position: fixed;\n-}\n'
b
diff -r ff36e76d696a -r 740884893563 lib/sRNAPipe/html.pm
--- a/lib/sRNAPipe/html.pm Wed Jan 30 06:26:32 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
b'@@ -1,926 +0,0 @@\n-package sRNAPipe::html;\n-\n-use strict;\n-use warnings;\n-use File::Basename;\n-use File::Copy::Recursive qw( dircopy );\n-\n-use Exporter;\n-our @ISA = qw( Exporter );\n-our @EXPORT_OK = qw( &main_page &details_pages &menu_page &ppp_page &copy_css &copy_js );\n-\n-sub main_page\n-{\n-  my ( $dir, $file, $list_mainTabP, $current, $ma, $ma_uni, $dir_root ) = @_;\n-  my ( $futHashP, $uniqueTabP, $randTabP, $pngTabP ) = get_genome ( $dir, $dir_root );\n-\n-  open my $h, \'>\', $file || die "cannot create $file $!\\n";\n-  header ( $h );\n-  navbar ( $h, $list_mainTabP, $current );\n-  print $h "<div class=\\"container\\"><p><a class=\\"btn\\" href=\\"$current-sub.html\\">View details &raquo;</a></p></div>\\n";\n-  futurette( $h, $current, $pngTabP, $futHashP );\n-  print  $h "<div class=\\"container\\"><h2>mappers #: $ma</h2><h2>unique mappers #: $ma_uni</h2> </div>\\n";\n-  carousel2( $h, $uniqueTabP, $randTabP, $dir_root );\n-  footer($h);\n-  close $h;\n-}\n-\n-sub menu_page\n-{\n-  my ( $dir, $file, $list_mainTabP, $current, $min, $max, $simin, $simax, $pimin, $pimax, $dir_root ) = @_;\n-  my $html_ref = $1 if $dir =~ /$dir_root(.*)/;\n-  open my $h, \'>\', $file || die "cannot create $file $!\\n";\n-  header($h);\n-  navbar ( $h, $list_mainTabP, $current );\n-  span( $h, $current, $min, $max, $simin, $simax, $pimin, $pimax );\n-  print $h "  <div class=\\"container\\"> <div class=\\"row text-center\\">  <img  src=\\"$html_ref/pie_chart.png\\"/><br />\\n";\n-  print $h "  <A HREF=\\"$html_ref/repartition.txt\\">text file</A><br/>\\n </div></div>";\n-  footer($h);\n-  close $h;\n-}\n-\n-sub details_pages\n-{\n-  my ( $dir_details, $prefix, $list_mainTabP, $current, $misTE, $dir_root, $ppp ) = @_;\n-  my ($Hex, $HTE, $HG, $NonUniTE, $NonUniG, $UniG ) = get_subgroups( $dir_details, $current, $misTE, $dir_root );\n-\n-  my $html_ref = $1.\'-PPP.html\' if $prefix =~ /$dir_root(.*)/;\n-  open my $h, \'>\',  $prefix.\'-TEs.html\' || die "cannot create  $prefix-TEs.html $!\\n";\n-  header($h);\n-  navbar ( $h, $list_mainTabP, $current );\n-  if ( $prefix =~ /piRNAs$/ && $ppp eq \'true\' )\n-  {\n-    print $h " <div class=\\"container\\">";\n-    print $h " <p><a class=\\"btn\\" href=\\"$html_ref\\">Ping Pong Partners</a></p>\\n";\n-    print $h "</div>";\n-  }\n-  fut($h,\'Transposable elements\',$HTE);\n-  carousel($h,$NonUniTE,$dir_root);\n-  footer($h);\n-  close $h;\n-\n-  open $h, \'>\',  $prefix.\'-genome.html\' || die "cannot create  $prefix-genome.html $!\\n";\n-  header($h);\n-  navbar ( $h, $list_mainTabP, $current );\n-  fut($h,\'Genome\',$HG);\n-  carousel2($h,$UniG, $NonUniG,$dir_root);\n-  footer($h);\n-  close $h;\n-\n-  open  $h, \'>\',  $prefix.\'-transcripts.html\' || die "cannot create  $prefix-transcripts.html $!\\n";\n-  header($h);\n-  navbar ( $h, $list_mainTabP, $current );\n-  fut($h,\'transcripts\',$Hex);\n-  footer($h);\n-  close $h;\n-}\n-\n-sub ppp_page\n-{\n-  my ( $dir, $file, $list_mainTabP, $current, $ppp, $dir_root ) = @_;\n-\n-  my $ppp_file = $ppp.\'ppp.txt\';\n-  open my $h, \'>\', $file || die "cannot create $file $!\\n";\n-  header($h);\n-  navbar ( $h, $list_mainTabP, $current );\n-  print $h \'<div class="container"> <table class="wb-tables table table-striped table-hover">\'."\\n";\n-  print $h \'<thead>\n-  <tr>\n-    <th data-sortable="true">ID</th>\n-    <th data-sortable="true">overlap sum</th>\n-    <th data-sortable="true">ten overlap sum</th>\n-    <th data-sortable="true">mean</th>\n-    <th data-sortable="true">standard deviation</th>\n-  \t<th data-sortable="true">z-score</th>\n-  \t<th data-sortable="true">p-value</th>\n-\t</tr>\n-  </thead>\n-  <tbody>\';\n-\n-  open my $f, \'<\', $ppp_file || die "cannot open $ppp_file  $!\\n";\n-  while ( <$f> )\n-  {\n-    chomp;\n-    print $h \'<tr>\';\n-    my ( $id, $sum, $ten, $mean, $sd, $zscore, $prob) = split /\\t/, $_;\n-    if( -d "$ppp/$id" )\n-    {\n-      my $sub_html = $ppp.$id.\'.html\';\n-      my $sub_html_ref = $1.$id if $ppp =~ /$dir_root(.*)/;\n-      print $h "<td> <a href=\\"$sub_html_ref.html\\">$id</a> </td>";\n-\n-      open my $sub, \'>\', $sub_html || die "cannot create $sub_html\\n";\n-'..b'=~ /.*($name-subgroups-bonafide_reads-TE-.*distribution-.*\\.png)/ )\n-    {\n-      my $tmp = $1;\n-      push @out, $1;\n-    }\n-  }\n-  return (\\@out);\n-}\n-\n-sub get_PPP\n-{\n-  my ($dir,$name) = @_;\n-  my (%distri,@group);\n-  my $group = "\'$dir\'".\'/\'."\'$name\'".\'-subgroups-bonafide_reads-TE-PPPartners-*\';\n-  @group = glob $group;\n-\n-  foreach (my $g =0; $g <= $#group; $g++)\n-  {\n-    if ($group[$g] =~ /.*($name-subgroups-bonafide_reads-TE-PPPartners-.*)/ )\n-    {\n-      my $tmp = $1;\n-      if ($tmp =~ /PPPartners-(.*?)-sens\\.txt$/)\n-      {\n-        $distri{$1} = [\'\',\'\',\'\',\'\',\'\',\'\'] unless exists $distri{$1};\n-        $distri{$1}->[0] = $tmp;\n-      }\n-      elsif ($tmp =~ /PPPartners-(.*?)-antisens\\.txt$/)\n-      {\n-        $distri{$1} = [\'\',\'\',\'\',\'\',\'\',\'\'] unless exists $distri{$1};\n-        $distri{$1}->[1] = $tmp;\n-      }\n-      elsif ($tmp =~ /PPPartners-(.*?)-sensPPP\\.txt$/)\n-      {\n-        $distri{$1} = [\'\',\'\',\'\',\'\',\'\',\'\'] unless exists $distri{$1};\n-        $distri{$1}->[2] = $tmp;\n-      }\n-      elsif ($tmp =~ /PPPartners-(.*?)-antisensPPP\\.txt$/)\n-      {\n-        $distri{$1} = [\'\',\'\',\'\',\'\',\'\',\'\'] unless exists $distri{$1};\n-        $distri{$1}->[3] = $tmp;\n-      }\n-      elsif ($tmp =~ /PPPartners-(.*?)-overlap_size\\.txt$/)\n-      {\n-        $distri{$1} = [\'\',\'\',\'\',\'\',\'\',\'\'] unless exists $distri{$1};\n-        $distri{$1}->[4] = $tmp;\n-      }\n-      elsif ($tmp =~ /PPPartners-(.*?)-histogram\\.png$/)\n-      {\n-        $distri{$1} = [\'\',\'\',\'\',\'\',\'\',\'\'] unless exists $distri{$1};\n-        $distri{$1}->[5] = $tmp;\n-      }\n-    }\n-  }\n-  return \\%distri;\n-}\n-\n-sub PPPrint\n-{\n-  my ($h, $hash) = @_;\n-  my $cmp = 0;\n-\n-  print $h "<div class=\\"container\\">\\n";\n-  print $h "<div class=\\"row text-center\\">";\n-  while ( my ($k,$v) = each %{$hash} )\n-  {\n-    print $h "</div><div class=\\"row text-center\\">" if $cmp != 0 && $cmp % 2 == 0;\n-    print $h "\n-    \n-    <div class=\\"span6\\">\n-    <h2>$k</h2>\n-    <p class=\\"featurette-p\\"> <img src=\\"$v->[5]\\"/></p>\n-    <p class=\\"featurette-p\\"><a href=\\"$v->[4]\\">ping pong signature</a></p>\n-    <p class=\\"featurette-p\\"><a href=\\"$v->[2]\\">sense reads with PPP</a></p>\n-    <p class=\\"featurette-p\\"><a href=\\"$v->[3]\\">reverse reads  with PPP</a></p>\n-    <p class=\\"featurette-p\\"><a href=\\"$v->[0]\\">sense reads without PPP</a></p>\n-    <p class=\\"featurette-p\\"><a href=\\"$v->[1]\\">reverse reads without PPP</a></p>\n-    </div>\n-    ";\n-    $cmp++;\n-  }\n-\n-  print $h "</div></div>";\n-}\n-\n-sub printDistri\n-{\n-  my ($h, $tab) = @_;\n-  my ($txt, $name);\n-  my $cmp = 0;\n-  print $h "<div class=\\"container\\">\\n";\n-  print $h "<div class=\\"row text-center\\">";\n-  foreach my $k (@{$tab})\n-  {\n-    if ($k =~ /(.*)-(.*)\\.png$/)\n-    {\n-      $txt = $1.\'-\'.$2.\'.txt\';\n-      $name = $2;\n-    }\n-    print $h "</div><div class=\\"row text-center\\">" if $cmp != 0 && $cmp % 2 == 0;\n-    print $h "\n-    \n-    <div class=\\"span6\\">\n-    <h2>$name</h2>\n-    <p> <img src=\\"$k\\"/></p>\n-    <p class=\\"featurette-p\\"><a href=\\"$txt\\">text file</a></p>\n-    </div>\n-    ";\n-    $cmp++;\n-  }\n-\n-  print $h "</div></div>";\n-}\n-\n-sub mapnum\n-{\n-  my $dupmapnum = shift;\n-  my $dupnum_genome = shift;\n-  open (my $dupTE, $dupmapnum) || die "cannot open ".$dupmapnum."\\n";\n-  my %dupnum_TE = ();\n-  my $header = <$dupTE>;\n-  while (<$dupTE>)\n-  {\n-    chomp $_;\n-    my @dupline = split /\\t/, $_;\n-    $dupnum_TE{$dupline[0]} = $dupline[2];\n-  }\n-  close $dupTE;\n-  open (my $du_TE, \'>\'.$dupmapnum) || die "cannot open to write ".$dupmapnum."\\n";\n-  print $du_TE "sequence\\tduplicate\\tgenome map num\\tmap num\\n";\n-  while (my ($k, $v) = each %dupnum_TE )\n-  {\n-    my $hashRef = ${$dupnum_genome}{$k};\n-    print $du_TE "$k\\t$hashRef->[0]\\t$hashRef->[1]\\t$v\\n";\n-  }\n-  close $du_TE;\n-}\n-\n-sub copy_css\n-{\n-  my $dir = shift;\n-  my $path = dirname(__FILE__);\n-  dircopy( $path.\'/css\', $dir.\'/css\' );\n-}\n-\n-\n-sub copy_js\n-{\n-  my $dir = shift;\n-  my $path = dirname(__FILE__);\n-  dircopy( $path.\'/js\', $dir.\'/js\' );\n-}\n-\n-1;\n'
b
diff -r ff36e76d696a -r 740884893563 lib/sRNAPipe/js/bootstrap-table.js
--- a/lib/sRNAPipe/js/bootstrap-table.js Wed Jan 30 06:26:32 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
b"@@ -1,3094 +0,0 @@\n-/**\n- * @author zhixin wen <wenzhixin2010@gmail.com>\n- * version: 1.11.1\n- * https://github.com/wenzhixin/bootstrap-table/\n- */\n-\n-(function ($) {\n-    'use strict';\n-\n-    // TOOLS DEFINITION\n-    // ======================\n-\n-    var cachedWidth = null;\n-\n-    // it only does '%s', and return '' when arguments are undefined\n-    var sprintf = function (str) {\n-        var args = arguments,\n-            flag = true,\n-            i = 1;\n-\n-        str = str.replace(/%s/g, function () {\n-            var arg = args[i++];\n-\n-            if (typeof arg === 'undefined') {\n-                flag = false;\n-                return '';\n-            }\n-            return arg;\n-        });\n-        return flag ? str : '';\n-    };\n-\n-    var getPropertyFromOther = function (list, from, to, value) {\n-        var result = '';\n-        $.each(list, function (i, item) {\n-            if (item[from] === value) {\n-                result = item[to];\n-                return false;\n-            }\n-            return true;\n-        });\n-        return result;\n-    };\n-\n-    var getFieldIndex = function (columns, field) {\n-        var index = -1;\n-\n-        $.each(columns, function (i, column) {\n-            if (column.field === field) {\n-                index = i;\n-                return false;\n-            }\n-            return true;\n-        });\n-        return index;\n-    };\n-\n-    // http://jsfiddle.net/wenyi/47nz7ez9/3/\n-    var setFieldIndex = function (columns) {\n-        var i, j, k,\n-            totalCol = 0,\n-            flag = [];\n-\n-        for (i = 0; i < columns[0].length; i++) {\n-            totalCol += columns[0][i].colspan || 1;\n-        }\n-\n-        for (i = 0; i < columns.length; i++) {\n-            flag[i] = [];\n-            for (j = 0; j < totalCol; j++) {\n-                flag[i][j] = false;\n-            }\n-        }\n-\n-        for (i = 0; i < columns.length; i++) {\n-            for (j = 0; j < columns[i].length; j++) {\n-                var r = columns[i][j],\n-                    rowspan = r.rowspan || 1,\n-                    colspan = r.colspan || 1,\n-                    index = $.inArray(false, flag[i]);\n-\n-                if (colspan === 1) {\n-                    r.fieldIndex = index;\n-                    // when field is undefined, use index instead\n-                    if (typeof r.field === 'undefined') {\n-                        r.field = index;\n-                    }\n-                }\n-\n-                for (k = 0; k < rowspan; k++) {\n-                    flag[i + k][index] = true;\n-                }\n-                for (k = 0; k < colspan; k++) {\n-                    flag[i][index + k] = true;\n-                }\n-            }\n-        }\n-    };\n-\n-    var getScrollBarWidth = function () {\n-        if (cachedWidth === null) {\n-            var inner = $('<p/>').addClass('fixed-table-scroll-inner'),\n-                outer = $('<div/>').addClass('fixed-table-scroll-outer'),\n-                w1, w2;\n-\n-            outer.append(inner);\n-            $('body').append(outer);\n-\n-            w1 = inner[0].offsetWidth;\n-            outer.css('overflow', 'scroll');\n-            w2 = inner[0].offsetWidth;\n-\n-            if (w1 === w2) {\n-                w2 = outer[0].clientWidth;\n-            }\n-\n-            outer.remove();\n-            cachedWidth = w1 - w2;\n-        }\n-        return cachedWidth;\n-    };\n-\n-    var calculateObjectValue = function (self, name, args, defaultValue) {\n-        var func = name;\n-\n-        if (typeof name === 'string') {\n-            // support obj.func1.func2\n-            var names = name.split('.');\n-\n-            if (names.length > 1) {\n-                func = window;\n-                $.each(names, function (i, f) {\n-                    func = func[f];\n-                });\n-            } else {\n-                func = window[name];\n-            }\n-        }\n-        if (typeof func === 'object') {\n-            return func;\n-        }\n-        if (typeof func === 'function') {\n-"..b' i < trs.length; i++) {\n-                this.expandRow_(true, $(trs[i]).data("index"));\n-            }\n-        }\n-    };\n-\n-    BootstrapTable.prototype.collapseAllRows = function (isSubTable) {\n-        if (isSubTable) {\n-            this.expandRow_(false, 0);\n-        } else {\n-            var trs = this.$body.children();\n-            for (var i = 0; i < trs.length; i++) {\n-                this.expandRow_(false, $(trs[i]).data("index"));\n-            }\n-        }\n-    };\n-\n-    BootstrapTable.prototype.updateFormatText = function (name, text) {\n-        if (this.options[sprintf(\'format%s\', name)]) {\n-            if (typeof text === \'string\') {\n-                this.options[sprintf(\'format%s\', name)] = function () {\n-                    return text;\n-                };\n-            } else if (typeof text === \'function\') {\n-                this.options[sprintf(\'format%s\', name)] = text;\n-            }\n-        }\n-        this.initToolbar();\n-        this.initPagination();\n-        this.initBody();\n-    };\n-\n-    // BOOTSTRAP TABLE PLUGIN DEFINITION\n-    // =======================\n-\n-    var allowedMethods = [\n-        \'getOptions\',\n-        \'getSelections\', \'getAllSelections\', \'getData\',\n-        \'load\', \'append\', \'prepend\', \'remove\', \'removeAll\',\n-        \'insertRow\', \'updateRow\', \'updateCell\', \'updateByUniqueId\', \'removeByUniqueId\',\n-        \'getRowByUniqueId\', \'showRow\', \'hideRow\', \'getHiddenRows\',\n-        \'mergeCells\',\n-        \'checkAll\', \'uncheckAll\', \'checkInvert\',\n-        \'check\', \'uncheck\',\n-        \'checkBy\', \'uncheckBy\',\n-        \'refresh\',\n-        \'resetView\',\n-        \'resetWidth\',\n-        \'destroy\',\n-        \'showLoading\', \'hideLoading\',\n-        \'showColumn\', \'hideColumn\', \'getHiddenColumns\', \'getVisibleColumns\',\n-        \'showAllColumns\', \'hideAllColumns\',\n-        \'filterBy\',\n-        \'scrollTo\',\n-        \'getScrollPosition\',\n-        \'selectPage\', \'prevPage\', \'nextPage\',\n-        \'togglePagination\',\n-        \'toggleView\',\n-        \'refreshOptions\',\n-        \'resetSearch\',\n-        \'expandRow\', \'collapseRow\', \'expandAllRows\', \'collapseAllRows\',\n-        \'updateFormatText\'\n-    ];\n-\n-    $.fn.bootstrapTable = function (option) {\n-        var value,\n-            args = Array.prototype.slice.call(arguments, 1);\n-\n-        this.each(function () {\n-            var $this = $(this),\n-                data = $this.data(\'bootstrap.table\'),\n-                options = $.extend({}, BootstrapTable.DEFAULTS, $this.data(),\n-                    typeof option === \'object\' && option);\n-\n-            if (typeof option === \'string\') {\n-                if ($.inArray(option, allowedMethods) < 0) {\n-                    throw new Error("Unknown method: " + option);\n-                }\n-\n-                if (!data) {\n-                    return;\n-                }\n-\n-                value = data[option].apply(data, args);\n-\n-                if (option === \'destroy\') {\n-                    $this.removeData(\'bootstrap.table\');\n-                }\n-            }\n-\n-            if (!data) {\n-                $this.data(\'bootstrap.table\', (data = new BootstrapTable(this, options)));\n-            }\n-        });\n-\n-        return typeof value === \'undefined\' ? this : value;\n-    };\n-\n-    $.fn.bootstrapTable.Constructor = BootstrapTable;\n-    $.fn.bootstrapTable.defaults = BootstrapTable.DEFAULTS;\n-    $.fn.bootstrapTable.columnDefaults = BootstrapTable.COLUMN_DEFAULTS;\n-    $.fn.bootstrapTable.locales = BootstrapTable.LOCALES;\n-    $.fn.bootstrapTable.methods = allowedMethods;\n-    $.fn.bootstrapTable.utils = {\n-        sprintf: sprintf,\n-        getFieldIndex: getFieldIndex,\n-        compareObjects: compareObjects,\n-        calculateObjectValue: calculateObjectValue,\n-        getItemField: getItemField,\n-        objectKeys: objectKeys,\n-        isIEBrowser: isIEBrowser\n-    };\n-\n-    // BOOTSTRAP TABLE INIT\n-    // =======================\n-\n-    $(function () {\n-        $(\'[data-toggle="table"]\').bootstrapTable();\n-    });\n-})(jQuery);\n'
b
diff -r ff36e76d696a -r 740884893563 lib/sRNAPipe/js/bootstrap.min.js
--- a/lib/sRNAPipe/js/bootstrap.min.js Wed Jan 30 06:26:32 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
b'@@ -1,6 +0,0 @@\n-/**\n-* Bootstrap.js v2.3.2 by @fat & @mdo\n-* Copyright 2013 Twitter, Inc.\n-* http://www.apache.org/licenses/LICENSE-2.0.txt\n-*/\n-!function(e){"use strict";e(function(){e.support.transition=function(){var e=function(){var e=document.createElement("bootstrap"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},n;for(n in t)if(e.style[n]!==undefined)return t[n]}();return e&&{end:e}}()})}(window.jQuery),!function(e){"use strict";var t=\'[data-dismiss="alert"]\',n=function(n){e(n).on("click",t,this.close)};n.prototype.close=function(t){function s(){i.trigger("closed").remove()}var n=e(this),r=n.attr("data-target"),i;r||(r=n.attr("href"),r=r&&r.replace(/.*(?=#[^\\s]*$)/,"")),i=e(r),t&&t.preventDefault(),i.length||(i=n.hasClass("alert")?n:n.parent()),i.trigger(t=e.Event("close"));if(t.isDefaultPrevented())return;i.removeClass("in"),e.support.transition&&i.hasClass("fade")?i.on(e.support.transition.end,s):s()};var r=e.fn.alert;e.fn.alert=function(t){return this.each(function(){var r=e(this),i=r.data("alert");i||r.data("alert",i=new n(this)),typeof t=="string"&&i[t].call(r)})},e.fn.alert.Constructor=n,e.fn.alert.noConflict=function(){return e.fn.alert=r,this},e(document).on("click.alert.data-api",t,n.prototype.close)}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.button.defaults,n)};t.prototype.setState=function(e){var t="disabled",n=this.$element,r=n.data(),i=n.is("input")?"val":"html";e+="Text",r.resetText||n.data("resetText",n[i]()),n[i](r[e]||this.options[e]),setTimeout(function(){e=="loadingText"?n.addClass(t).attr(t,t):n.removeClass(t).removeAttr(t)},0)},t.prototype.toggle=function(){var e=this.$element.closest(\'[data-toggle="buttons-radio"]\');e&&e.find(".active").removeClass("active"),this.$element.toggleClass("active")};var n=e.fn.button;e.fn.button=function(n){return this.each(function(){var r=e(this),i=r.data("button"),s=typeof n=="object"&&n;i||r.data("button",i=new t(this,s)),n=="toggle"?i.toggle():n&&i.setState(n)})},e.fn.button.defaults={loadingText:"loading..."},e.fn.button.Constructor=t,e.fn.button.noConflict=function(){return e.fn.button=n,this},e(document).on("click.button.data-api","[data-toggle^=button]",function(t){var n=e(t.target);n.hasClass("btn")||(n=n.closest(".btn")),n.button("toggle")})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.$indicators=this.$element.find(".carousel-indicators"),this.options=n,this.options.pause=="hover"&&this.$element.on("mouseenter",e.proxy(this.pause,this)).on("mouseleave",e.proxy(this.cycle,this))};t.prototype={cycle:function(t){return t||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(e.proxy(this.next,this),this.options.interval)),this},getActiveIndex:function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},to:function(t){var n=this.getActiveIndex(),r=this;if(t>this.$items.length-1||t<0)return;return this.sliding?this.$element.one("slid",function(){r.to(t)}):n==t?this.pause().cycle():this.slide(t>n?"next":"prev",e(this.$items[t]))},pause:function(t){return t||(this.paused=!0),this.$element.find(".next, .prev").length&&e.support.transition.end&&(this.$element.trigger(e.support.transition.end),this.cycle(!0)),clearInterval(this.interval),this.interval=null,this},next:function(){if(this.sliding)return;return this.slide("next")},prev:function(){if(this.sliding)return;return this.slide("prev")},slide:function(t,n){var r=this.$element.find(".item.active"),i=n||r[t](),s=this.interval,o=t=="next"?"left":"right",u=t=="next"?"first":"last",a=this,f;this.sliding=!0,s&&this.pause(),i=i.length?i:this.$element.find(".item")[u](),f=e.Event("slide",{relatedTarget:i[0],direction:o});if(i.hasClass("active"))return;this.$indicat'..b',next:function(t){var n=this.$menu.find(".active").removeClass("active"),r=n.next();r.length||(r=e(this.$menu.find("li")[0])),r.addClass("active")},prev:function(e){var t=this.$menu.find(".active").removeClass("active"),n=t.prev();n.length||(n=this.$menu.find("li").last()),n.addClass("active")},listen:function(){this.$element.on("focus",e.proxy(this.focus,this)).on("blur",e.proxy(this.blur,this)).on("keypress",e.proxy(this.keypress,this)).on("keyup",e.proxy(this.keyup,this)),this.eventSupported("keydown")&&this.$element.on("keydown",e.proxy(this.keydown,this)),this.$menu.on("click",e.proxy(this.click,this)).on("mouseenter","li",e.proxy(this.mouseenter,this)).on("mouseleave","li",e.proxy(this.mouseleave,this))},eventSupported:function(e){var t=e in this.$element;return t||(this.$element.setAttribute(e,"return;"),t=typeof this.$element[e]=="function"),t},move:function(e){if(!this.shown)return;switch(e.keyCode){case 9:case 13:case 27:e.preventDefault();break;case 38:e.preventDefault(),this.prev();break;case 40:e.preventDefault(),this.next()}e.stopPropagation()},keydown:function(t){this.suppressKeyPressRepeat=~e.inArray(t.keyCode,[40,38,9,13,27]),this.move(t)},keypress:function(e){if(this.suppressKeyPressRepeat)return;this.move(e)},keyup:function(e){switch(e.keyCode){case 40:case 38:case 16:case 17:case 18:break;case 9:case 13:if(!this.shown)return;this.select();break;case 27:if(!this.shown)return;this.hide();break;default:this.lookup()}e.stopPropagation(),e.preventDefault()},focus:function(e){this.focused=!0},blur:function(e){this.focused=!1,!this.mousedover&&this.shown&&this.hide()},click:function(e){e.stopPropagation(),e.preventDefault(),this.select(),this.$element.focus()},mouseenter:function(t){this.mousedover=!0,this.$menu.find(".active").removeClass("active"),e(t.currentTarget).addClass("active")},mouseleave:function(e){this.mousedover=!1,!this.focused&&this.shown&&this.hide()}};var n=e.fn.typeahead;e.fn.typeahead=function(n){return this.each(function(){var r=e(this),i=r.data("typeahead"),s=typeof n=="object"&&n;i||r.data("typeahead",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.typeahead.defaults={source:[],items:8,menu:\'<ul class="typeahead dropdown-menu"></ul>\',item:\'<li><a href="#"></a></li>\',minLength:1},e.fn.typeahead.Constructor=t,e.fn.typeahead.noConflict=function(){return e.fn.typeahead=n,this},e(document).on("focus.typeahead.data-api",\'[data-provide="typeahead"]\',function(t){var n=e(this);if(n.data("typeahead"))return;n.typeahead(n.data())})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.options=e.extend({},e.fn.affix.defaults,n),this.$window=e(window).on("scroll.affix.data-api",e.proxy(this.checkPosition,this)).on("click.affix.data-api",e.proxy(function(){setTimeout(e.proxy(this.checkPosition,this),1)},this)),this.$element=e(t),this.checkPosition()};t.prototype.checkPosition=function(){if(!this.$element.is(":visible"))return;var t=e(document).height(),n=this.$window.scrollTop(),r=this.$element.offset(),i=this.options.offset,s=i.bottom,o=i.top,u="affix affix-top affix-bottom",a;typeof i!="object"&&(s=o=i),typeof o=="function"&&(o=i.top()),typeof s=="function"&&(s=i.bottom()),a=this.unpin!=null&&n+this.unpin<=r.top?!1:s!=null&&r.top+this.$element.height()>=t-s?"bottom":o!=null&&n<=o?"top":!1;if(this.affixed===a)return;this.affixed=a,this.unpin=a=="bottom"?r.top-n:null,this.$element.removeClass(u).addClass("affix"+(a?"-"+a:""))};var n=e.fn.affix;e.fn.affix=function(n){return this.each(function(){var r=e(this),i=r.data("affix"),s=typeof n=="object"&&n;i||r.data("affix",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.affix.Constructor=t,e.fn.affix.defaults={offset:0},e.fn.affix.noConflict=function(){return e.fn.affix=n,this},e(window).on("load",function(){e(\'[data-spy="affix"]\').each(function(){var t=e(this),n=t.data();n.offset=n.offset||{},n.offsetBottom&&(n.offset.bottom=n.offsetBottom),n.offsetTop&&(n.offset.top=n.offsetTop),t.affix(n)})})}(window.jQuery);\n\\ No newline at end of file\n'
b
diff -r ff36e76d696a -r 740884893563 lib/sRNAPipe/js/filter.js
--- a/lib/sRNAPipe/js/filter.js Wed Jan 30 06:26:32 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
@@ -1,20 +0,0 @@
-function search(input) {
-  // Declare variables
-  var elt, filter, uls, li, a, i;
-  elt = input.parentElement;
-  filter = input.value.toUpperCase();
-  uls = elt.getElementsByClassName('thumbs');
-
-  // Loop through all list items, and hide those who don't match the search query
-  for (j = 0; j < uls.length; j++) {
-    li = uls[j].getElementsByTagName('li');
-    for (i = 0; i < li.length; i++) {
-      a = li[i].getElementsByTagName("a")[0];
-      if (a.innerHTML.toUpperCase().indexOf(filter) > -1) {
-        li[i].style.display = "";
-      } else {
-        li[i].style.display = "none";
-      }
-    }
-  }
-}
b
diff -r ff36e76d696a -r 740884893563 lib/sRNAPipe/js/jquery.galleriffic.js
--- a/lib/sRNAPipe/js/jquery.galleriffic.js Wed Jan 30 06:26:32 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
b"@@ -1,979 +0,0 @@\n-/**\r\n- * jQuery Galleriffic plugin\r\n- *\r\n- * Copyright (c) 2008 Trent Foley (http://trentacular.com)\r\n- * Licensed under the MIT License:\r\n- *   http://www.opensource.org/licenses/mit-license.php\r\n- *\r\n- * Much thanks to primary contributer Ponticlaro (http://www.ponticlaro.com)\r\n- */\r\n-;(function($) {\r\n-\t// Globally keep track of all images by their unique hash.  Each item is an image data object.\r\n-\tvar allImages = {};\r\n-\tvar imageCounter = 0;\r\n-\n-\t// Galleriffic static class\r\n-\t$.galleriffic = {\n-\t\tversion: '2.0.1',\n-\n-\t\t// Strips invalid characters and any leading # characters\n-\t\tnormalizeHash: function(hash) {\r\n-\t\t\treturn hash.replace(/^.*#/, '').replace(/\\?.*$/, '');\n-\t\t},\n-\n-\t\tgetImage: function(hash) {\n-\t\t\tif (!hash)\n-\t\t\t\treturn undefined;\n-\n-\t\t\thash = $.galleriffic.normalizeHash(hash);\r\n-\t\t\treturn allImages[hash];\n-\t\t},\n-\r\n-\t\t// Global function that looks up an image by its hash and displays the image.\n-\t\t// Returns false when an image is not found for the specified hash.\n-\t\t// @param {String} hash This is the unique hash value assigned to an image.\n-\t\tgotoImage: function(hash) {\r\n-\t\t\tvar imageData = $.galleriffic.getImage(hash);\r\n-\t\t\tif (!imageData)\n-\t\t\t\treturn false;\r\n-\n-\t\t\tvar gallery = imageData.gallery;\n-\t\t\tgallery.gotoImage(imageData);\n-\t\t\t\n-\t\t\treturn true;\r\n-\t\t},\n-\n-\t\t// Removes an image from its respective gallery by its hash.\n-\t\t// Returns false when an image is not found for the specified hash or the\n-\t\t// specified owner gallery does match the located images gallery.\n-\t\t// @param {String} hash This is the unique hash value assigned to an image.\n-\t\t// @param {Object} ownerGallery (Optional) When supplied, the located images\n-\t\t// gallery is verified to be the same as the specified owning gallery before\n-\t\t// performing the remove operation.\n-\t\tremoveImageByHash: function(hash, ownerGallery) {\n-\t\t\tvar imageData = $.galleriffic.getImage(hash);\n-\t\t\tif (!imageData)\n-\t\t\t\treturn false;\n-\n-\t\t\tvar gallery = imageData.gallery;\n-\t\t\tif (ownerGallery && ownerGallery != gallery)\n-\t\t\t\treturn false;\n-\n-\t\t\treturn gallery.removeImageByIndex(imageData.index);\n-\t\t}\r\n-\t};\n-\r\n-\tvar defaults = {\r\n-\t\tdelay:                     3000,\r\n-\t\tnumThumbs:                 20,\r\n-\t\tpreloadAhead:              40, // Set to -1 to preload all images\r\n-\t\tenableTopPager:            false,\r\n-\t\tenableBottomPager:         true,\r\n-\t\tmaxPagesToShow:            7,\r\n-\t\timageContainerSel:         '',\r\n-\t\tcaptionContainerSel:       '',\r\n-\t\tcontrolsContainerSel:      '',\r\n-\t\tloadingContainerSel:       '',\r\n-\t\trenderSSControls:          true,\r\n-\t\trenderNavControls:         true,\r\n-\t\tplayLinkText:              'Play',\r\n-\t\tpauseLinkText:             'Pause',\r\n-\t\tprevLinkText:              'Previous',\r\n-\t\tnextLinkText:              'Next',\r\n-\t\tnextPageLinkText:          'Next &rsaquo;',\r\n-\t\tprevPageLinkText:          '&lsaquo; Prev',\r\n-\t\tenableHistory:             false,\n-\t\tenableKeyboardNavigation:  true,\r\n-\t\tautoStart:                 false,\r\n-\t\tsyncTransitions:           false,\r\n-\t\tdefaultTransitionDuration: 1000,\r\n-\t\tonSlideChange:             undefined, // accepts a delegate like such: function(prevIndex, nextIndex) { ... }\r\n-\t\tonTransitionOut:           undefined, // accepts a delegate like such: function(slide, caption, isSync, callback) { ... }\r\n-\t\tonTransitionIn:            undefined, // accepts a delegate like such: function(slide, caption, isSync) { ... }\r\n-\t\tonPageTransitionOut:       undefined, // accepts a delegate like such: function(callback) { ... }\r\n-\t\tonPageTransitionIn:        undefined, // accepts a delegate like such: function() { ... }\n-\t\tonImageAdded:              undefined, // accepts a delegate like such: function(imageData, $li) { ... }\n-\t\tonImageRemoved:            undefined  // accepts a delegate like such: function(imageData, $li) { ... }\r\n-\t};\r\n-\n-\t// Primary Galleriffic initialization function that should be called on the thumbnail container.\r\n-\t$.fn.galleriffic = function(settings) {\r\n-\t\t//  Extend Gallery O"..b'display all thumbnails.\r\n-\t\t\tbuildPageLink: function(pager, pageNum, numPages) {\r\n-\t\t\t\tvar pageLabel = pageNum + 1;\r\n-\t\t\t\tvar currentPage = this.getCurrentPage();\r\n-\t\t\t\tif (pageNum == currentPage)\r\n-\t\t\t\t\tpager.append(\'<span class="current">\'+pageLabel+\'</span>\');\r\n-\t\t\t\telse if (pageNum < numPages) {\r\n-\t\t\t\t\tvar imageIndex = pageNum*this.numThumbs;\r\n-\t\t\t\t\tpager.append(\'<a rel="history" href="#\'+this.data[imageIndex].hash+\'" title="\'+pageLabel+\'">\'+pageLabel+\'</a>\');\r\n-\t\t\t\t}\n-\t\t\t\t\n-\t\t\t\treturn this;\r\n-\t\t\t}\r\n-\t\t});\r\n-\r\n-\t\t// Now initialize the gallery\r\n-\t\t$.extend(this, defaults, settings);\r\n-\t\t\r\n-\t\t// Verify the history plugin is available\r\n-\t\tif (this.enableHistory && !$.historyInit)\r\n-\t\t\tthis.enableHistory = false;\r\n-\t\t\r\n-\t\t// Select containers\r\n-\t\tif (this.imageContainerSel) this.$imageContainer = $(this.imageContainerSel);\r\n-\t\tif (this.captionContainerSel) this.$captionContainer = $(this.captionContainerSel);\r\n-\t\tif (this.loadingContainerSel) this.$loadingContainer = $(this.loadingContainerSel);\r\n-\n-\t\t// Initialize the thumbails\r\n-\t\tthis.initializeThumbs();\r\n-\t\t\r\n-\t\tif (this.maxPagesToShow < 3)\r\n-\t\t\tthis.maxPagesToShow = 3;\r\n-\r\n-\t\tthis.displayedPage = -1;\n-\t\tthis.currentImage = this.data[0];\r\n-\t\tvar gallery = this;\r\n-\r\n-\t\t// Hide the loadingContainer\r\n-\t\tif (this.$loadingContainer)\r\n-\t\t\tthis.$loadingContainer.hide();\r\n-\r\n-\t\t// Setup controls\r\n-\t\tif (this.controlsContainerSel) {\r\n-\t\t\tthis.$controlsContainer = $(this.controlsContainerSel).empty();\r\n-\t\t\t\r\n-\t\t\tif (this.renderSSControls) {\r\n-\t\t\t\tif (this.autoStart) {\r\n-\t\t\t\t\tthis.$controlsContainer\r\n-\t\t\t\t\t\t.append(\'<div class="ss-controls"><a href="#pause" class="pause" title="\'+this.pauseLinkText+\'">\'+this.pauseLinkText+\'</a></div>\');\r\n-\t\t\t\t} else {\r\n-\t\t\t\t\tthis.$controlsContainer\r\n-\t\t\t\t\t\t.append(\'<div class="ss-controls"><a href="#play" class="play" title="\'+this.playLinkText+\'">\'+this.playLinkText+\'</a></div>\');\r\n-\t\t\t\t}\r\n-\r\n-\t\t\t\tthis.$controlsContainer.find(\'div.ss-controls a\')\r\n-\t\t\t\t\t.click(function(e) {\r\n-\t\t\t\t\t\tgallery.toggleSlideshow();\r\n-\t\t\t\t\t\te.preventDefault();\r\n-\t\t\t\t\t\treturn false;\r\n-\t\t\t\t\t});\r\n-\t\t\t}\r\n-\t\t\r\n-\t\t\tif (this.renderNavControls) {\r\n-\t\t\t\tthis.$controlsContainer\r\n-\t\t\t\t\t.append(\'<div class="nav-controls"><a class="prev" rel="history" title="\'+this.prevLinkText+\'">\'+this.prevLinkText+\'</a><a class="next" rel="history" title="\'+this.nextLinkText+\'">\'+this.nextLinkText+\'</a></div>\')\r\n-\t\t\t\t\t.find(\'div.nav-controls a\')\r\n-\t\t\t\t\t.click(function(e) {\r\n-\t\t\t\t\t\tgallery.clickHandler(e, this);\r\n-\t\t\t\t\t});\r\n-\t\t\t}\r\n-\t\t}\r\n-\n-\t\tvar initFirstImage = !this.enableHistory || !location.hash;\n-\t\tif (this.enableHistory && location.hash) {\n-\t\t\tvar hash = $.galleriffic.normalizeHash(location.hash);\n-\t\t\tvar imageData = allImages[hash];\r\n-\t\t\tif (!imageData)\n-\t\t\t\tinitFirstImage = true;\n-\t\t}\n-\r\n-\t\t// Setup gallery to show the first image\n-\t\tif (initFirstImage)\r\n-\t\t\tthis.gotoIndex(0, false, true);\r\n-\n-\t\t// Setup Keyboard Navigation\n-\t\tif (this.enableKeyboardNavigation) {\n-\t\t\t$(document).keydown(function(e) {\n-\t\t\t\tvar key = e.charCode ? e.charCode : e.keyCode ? e.keyCode : 0;\n-\t\t\t\tswitch(key) {\n-\t\t\t\t\tcase 32: // space\n-\t\t\t\t\t\tgallery.next();\n-\t\t\t\t\t\te.preventDefault();\n-\t\t\t\t\t\tbreak;\n-\t\t\t\t\tcase 33: // Page Up\n-\t\t\t\t\t\tgallery.previousPage();\n-\t\t\t\t\t\te.preventDefault();\n-\t\t\t\t\t\tbreak;\n-\t\t\t\t\tcase 34: // Page Down\n-\t\t\t\t\t\tgallery.nextPage();\n-\t\t\t\t\t\te.preventDefault();\n-\t\t\t\t\t\tbreak;\n-\t\t\t\t\tcase 35: // End\n-\t\t\t\t\t\tgallery.gotoIndex(gallery.data.length-1);\n-\t\t\t\t\t\te.preventDefault();\n-\t\t\t\t\t\tbreak;\n-\t\t\t\t\tcase 36: // Home\n-\t\t\t\t\t\tgallery.gotoIndex(0);\n-\t\t\t\t\t\te.preventDefault();\n-\t\t\t\t\t\tbreak;\n-\t\t\t\t\tcase 37: // left arrow\n-\t\t\t\t\t\tgallery.previous();\n-\t\t\t\t\t\te.preventDefault();\n-\t\t\t\t\t\tbreak;\n-\t\t\t\t\tcase 39: // right arrow\n-\t\t\t\t\t\tgallery.next();\n-\t\t\t\t\t\te.preventDefault();\n-\t\t\t\t\t\tbreak;\n-\t\t\t\t}\n-\t\t\t});\n-\t\t}\n-\n-\t\t// Auto start the slideshow\r\n-\t\tif (this.autoStart)\r\n-\t\t\tthis.play();\r\n-\r\n-\t\t// Kickoff Image Preloader after 1 second\r\n-\t\tsetTimeout(function() { gallery.preloadInit(); }, 1000);\r\n-\r\n-\t\treturn this;\r\n-\t};\r\n-})(jQuery);\r\n'
b
diff -r ff36e76d696a -r 740884893563 lib/sRNAPipe/js/jquery.js
--- a/lib/sRNAPipe/js/jquery.js Wed Jan 30 06:26:32 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
b'@@ -1,5 +0,0 @@\n-/*! jQuery v1.9.1 | (c) 2005, 2012 jQuery Foundation, Inc. | jquery.org/license\n-//@ sourceMappingURL=jquery.min.map\n-*/(function(e,t){var n,r,i=typeof t,o=e.document,a=e.location,s=e.jQuery,u=e.$,l={},c=[],p="1.9.1",f=c.concat,d=c.push,h=c.slice,g=c.indexOf,m=l.toString,y=l.hasOwnProperty,v=p.trim,b=function(e,t){return new b.fn.init(e,t,r)},x=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,w=/\\S+/g,T=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,N=/^(?:(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,C=/^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/,k=/^[\\],:{}\\s]*$/,E=/(?:^|:|,)(?:\\s*\\[)+/g,S=/\\\\(?:["\\\\\\/bfnrt]|u[\\da-fA-F]{4})/g,A=/"[^"\\\\\\r\\n]*"|true|false|null|-?(?:\\d+\\.|)\\d+(?:[eE][+-]?\\d+|)/g,j=/^-ms-/,D=/-([\\da-z])/gi,L=function(e,t){return t.toUpperCase()},H=function(e){(o.addEventListener||"load"===e.type||"complete"===o.readyState)&&(q(),b.ready())},q=function(){o.addEventListener?(o.removeEventListener("DOMContentLoaded",H,!1),e.removeEventListener("load",H,!1)):(o.detachEvent("onreadystatechange",H),e.detachEvent("onload",H))};b.fn=b.prototype={jquery:p,constructor:b,init:function(e,n,r){var i,a;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof b?n[0]:n,b.merge(this,b.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:o,!0)),C.test(i[1])&&b.isPlainObject(n))for(i in n)b.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(a=o.getElementById(i[2]),a&&a.parentNode){if(a.id!==i[2])return r.find(e);this.length=1,this[0]=a}return this.context=o,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):b.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),b.makeArray(e,this))},selector:"",length:0,size:function(){return this.length},toArray:function(){return h.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=b.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return b.each(this,e,t)},ready:function(e){return b.ready.promise().done(e),this},slice:function(){return this.pushStack(h.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(b.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:d,sort:[].sort,splice:[].splice},b.fn.init.prototype=b.fn,b.extend=b.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},u=1,l=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},u=2),"object"==typeof s||b.isFunction(s)||(s={}),l===u&&(s=this,--u);l>u;u++)if(null!=(o=arguments[u]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(b.isPlainObject(r)||(n=b.isArray(r)))?(n?(n=!1,a=e&&b.isArray(e)?e:[]):a=e&&b.isPlainObject(e)?e:{},s[i]=b.extend(c,a,r)):r!==t&&(s[i]=r));return s},b.extend({noConflict:function(t){return e.$===b&&(e.$=u),t&&e.jQuery===b&&(e.jQuery=s),b},isReady:!1,readyWait:1,holdReady:function(e){e?b.readyWait++:b.ready(!0)},ready:function(e){if(e===!0?!--b.readyWait:!b.isReady){if(!o.body)return setTimeout(b.ready);b.isReady=!0,e!==!0&&--b.readyWait>0||(n.resolveWith(o,[b]),b.fn.trigger&&b(o).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===b.type(e)},isArray:Array.isArray||function(e){return"array"===b.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[m.call(e)]||"object":typeof e},isPlainObject:function(e){if(!e||"object"!==b.type(e)||e.nodeType||b.isWindow(e))return!1;try{if(e.constructor&&!y.call(e,"constructor")&&!y.call(e.constructor.prototype,"isPrototypeOf"))r'..b' ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}b.each({slideDown:ir("show"),slideUp:ir("hide"),slideToggle:ir("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){b.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),b.speed=function(e,t,n){var r=e&&"object"==typeof e?b.extend({},e):{complete:n||!n&&t||b.isFunction(e)&&e,duration:e,easing:n&&t||t&&!b.isFunction(t)&&t};return r.duration=b.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in b.fx.speeds?b.fx.speeds[r.duration]:b.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){b.isFunction(r.old)&&r.old.call(this),r.queue&&b.dequeue(this,r.queue)},r},b.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},b.timers=[],b.fx=rr.prototype.init,b.fx.tick=function(){var e,n=b.timers,r=0;for(Xn=b.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||b.fx.stop(),Xn=t},b.fx.timer=function(e){e()&&b.timers.push(e)&&b.fx.start()},b.fx.interval=13,b.fx.start=function(){Un||(Un=setInterval(b.fx.tick,b.fx.interval))},b.fx.stop=function(){clearInterval(Un),Un=null},b.fx.speeds={slow:600,fast:200,_default:400},b.fx.step={},b.expr&&b.expr.filters&&(b.expr.filters.animated=function(e){return b.grep(b.timers,function(t){return e===t.elem}).length}),b.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){b.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,b.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},b.offset={setOffset:function(e,t,n){var r=b.css(e,"position");"static"===r&&(e.style.position="relative");var i=b(e),o=i.offset(),a=b.css(e,"top"),s=b.css(e,"left"),u=("absolute"===r||"fixed"===r)&&b.inArray("auto",[a,s])>-1,l={},c={},p,f;u?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),b.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(l.top=t.top-o.top+p),null!=t.left&&(l.left=t.left-o.left+f),"using"in t?t.using.call(e,l):i.css(l)}},b.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===b.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),b.nodeName(e[0],"html")||(n=e.offset()),n.top+=b.css(e[0],"borderTopWidth",!0),n.left+=b.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-b.css(r,"marginTop",!0),left:t.left-n.left-b.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||o.documentElement;while(e&&!b.nodeName(e,"html")&&"static"===b.css(e,"position"))e=e.offsetParent;return e||o.documentElement})}}),b.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);b.fn[e]=function(i){return b.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?b(a).scrollLeft():o,r?o:b(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return b.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}b.each({Height:"height",Width:"width"},function(e,n){b.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){b.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return b.access(this,function(n,r,i){var o;return b.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?b.css(n,r,s):b.style(n,r,i,s)},n,a?i:t,a,null)}})}),e.jQuery=e.$=b,"function"==typeof define&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return b})})(window);\n\\ No newline at end of file\n'
b
diff -r ff36e76d696a -r 740884893563 lib/sRNAPipe/js/jquery.opacityrollover.js
--- a/lib/sRNAPipe/js/jquery.opacityrollover.js Wed Jan 30 06:26:32 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
b
@@ -1,42 +0,0 @@
-/**
- * jQuery Opacity Rollover plugin
- *
- * Copyright (c) 2009 Trent Foley (http://trentacular.com)
- * Licensed under the MIT License:
- *   http://www.opensource.org/licenses/mit-license.php
- */
-;(function($) {
- var defaults = {
- mouseOutOpacity:   0.67,
- mouseOverOpacity:  1.0,
- fadeSpeed:         'fast',
- exemptionSelector: '.selected'
- };
-
- $.fn.opacityrollover = function(settings) {
- // Initialize the effect
- $.extend(this, defaults, settings);
-
- var config = this;
-
- function fadeTo(element, opacity) {
- var $target = $(element);
-
- if (config.exemptionSelector)
- $target = $target.not(config.exemptionSelector);
-
- $target.fadeTo(config.fadeSpeed, opacity);
- }
-
- this.css('opacity', this.mouseOutOpacity)
- .hover(
- function () {
- fadeTo(this, config.mouseOverOpacity);
- },
- function () {
- fadeTo(this, config.mouseOutOpacity);
- });
-
- return this;
- };
-})(jQuery);
b
diff -r ff36e76d696a -r 740884893563 lib/sRNAPipe/ppp.pm
--- a/lib/sRNAPipe/ppp.pm Wed Jan 30 06:26:32 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
b'@@ -1,230 +0,0 @@\n-package sRNAPipe::ppp;\n-\n-use strict;\n-use warnings;\n-use FindBin;\n-use lib "$FindBin::Bin/../lib";\n-use sRNAPipe::Rcall qw ( histogram );\n-use Math::CDF;\n-\n-use Exporter;\n-our @ISA = qw( Exporter );\n-our @EXPORT_OK = qw( &ping_pong_partners );\n-\n-sub ping_pong_partners\n-{\n-    my ( $TE_fai, $sam, $dir, $max ) = @_;\n-    my ( $hashRef, $dupRef, $hasPpp ) = count_mapped ( $TE_fai, $sam );\n-    my ( %num_per_overlap_size, $overlap_number, $reverseR, $begRev, $endRev, $sensR, $begSens, $endSens, $snum, $rnum, $overlap );\n-    my ( $SP, $AP, $SN, $AN, $txt );\n-    my $flag = 0;\n-    my @distri_overlap = (); my @overlaps_names = ();\n-\n-    open my $ppp_f, \'>\', $dir."ppp.txt" || die "cannot create ppp.txt $!\\n";\n-    foreach my $k ( sort keys %{$hashRef} )\n-    {\n-        my $v = $hashRef->{$k};\n-        my $TE_dir = $dir.$k.\'/\';\n-\n-        %num_per_overlap_size = (); $overlap_number = 0;\n-        $flag = 0;\n-        for ( my $i = 0; $i <= $#{$v->[1]} ; $i++ )\n-        {\n-            $reverseR = ${$v->[1]}[$i] ;\n-            $begRev = $reverseR->[0];\n-            $endRev = $begRev + length($reverseR->[1]) - 1;\n-\n-            my $revR = reverse($reverseR->[1]);\n-            $revR =~ tr/atgcuATGCU/tacgaTACGA/;\n-\n-            for ( my $j = 0; $j <= $#{$v->[0]}; $j++ )\n-            {\n-                $sensR = ${$v->[0]}[$j];\n-                $begSens = $sensR->[0];\n-                $endSens = $begSens + length($sensR->[1]) - 1;\n-\n-                if ( $begSens <= $endRev && $endSens > $endRev )\n-                {\n-                    $flag = 1;\n-                    mkdir $TE_dir;\n-                    open    $txt, \'>\', $TE_dir.\'overlap_size.txt\' || die "cannot open repartition\\n";\n-\n-                    $overlap = $endRev - $begSens + 1;\n-                    $snum =    $dupRef->{$sensR->[0].$sensR->[1].$sensR->[2].$sensR->[3]};\n-                    $rnum = $dupRef->{$reverseR->[0].$reverseR->[1].$reverseR->[2].$reverseR->[3]};\n-\n-                    if ( $overlap == 10 )\n-                    {\n-                        $hasPpp->{ $sensR->[0].$sensR->[1].$sensR->[2].$sensR->[3] } = 1;\n-                        $hasPpp->{ $reverseR->[0].$reverseR->[1].$reverseR->[2].$reverseR->[3] } = 1;\n-                    }\n-                    next if $overlap > $max;\n-                    if ( $snum < $rnum )\n-                    {\n-                        $num_per_overlap_size{$overlap} += $snum;\n-                        $overlap_number += $snum;\n-                    }\n-                    else\n-                    {\n-                        $num_per_overlap_size{$overlap} += $rnum ;\n-                        $overlap_number += $rnum ;\n-                    }\n-                }\n-            }\n-        }\n-        if ( $max != 0 )\n-        {\n-            my @overlaps = ();\n-            push @overlaps_names, $k;\n-            for my $i (1..$max)\n-            {\n-                $num_per_overlap_size{$i} = 0 unless exists( $num_per_overlap_size{$i} );\n-                push @overlaps, $num_per_overlap_size{$i};\n-            }\n-            push @distri_overlap, \\@overlaps;\n-        }\n-\n-        if ( $flag == 1 )\n-        {\n-            open    $AP, \'>\', $TE_dir."antisensPPP.txt" || die "cannot create antisensPPP\\n";\n-            open    $AN, \'>\', $TE_dir."antisens.txt"    || die "cannot create antisens\\n";\n-            for ( my $i = 0; $i <= $#{$v->[1]} ; $i++ )\n-            {\n-                $reverseR = ${$v->[1]}[$i] ;\n-                my $revR = reverse($reverseR->[1]);\n-                $revR =~ tr/atgcuATGCU/tacgaTACGA/;\n-                $rnum = $dupRef->{$reverseR->[0].$reverseR->[1].$reverseR->[2].$reverseR->[3]};\n-                if ( $hasPpp->{ $reverseR->[0].$reverseR->[1].$reverseR->[2].$reverseR->[3] } == 1 )\n-                {\n-                    print $AP ">$reverseR->[0]|$reverseR->[2]|$reverseR->[3]|$rnum\\n$revR\\n";\n-                }\n-                else\n-                {\n-                    print $AN ">$reverseR->[0]|$re'..b' open    $SP, \'>\', $TE_dir."sensPPP.txt" || die "cannot create sensPPP\\n";\n-            open    $SN, \'>\', $TE_dir."sens.txt"    || die "cannot create sens\\n";\n-            for ( my $j = 0; $j <= $#{$v->[0]}; $j++ )\n-            {\n-                $sensR = ${$v->[0]}[$j];\n-                $snum =    $dupRef->{$sensR->[0].$sensR->[1].$sensR->[2].$sensR->[3]};\n-                if ( $hasPpp->{ $sensR->[0].$sensR->[1].$sensR->[2].$sensR->[3] } == 1 )\n-                {\n-                    print $SP ">$sensR->[0]|$sensR->[2]|$sensR->[3]|$snum\\n$sensR->[1]\\n";\n-                }\n-                else\n-                {\n-                    print $SN ">$sensR->[0]|$sensR->[2]|$sensR->[3]|$snum\\n$sensR->[1]\\n";\n-                }\n-            }\n-            close $SP; close $SN;\n-\n-            my $histo_png = $TE_dir.\'histogram.png\';\n-            histogram( \\%num_per_overlap_size, $histo_png, $overlap_number );\n-            print $txt "size\\tnumber\\tpercentage of the total overlap number\\n";\n-            foreach my $k ( sort {$a <=> $b} keys %num_per_overlap_size )\n-            {\n-                my $percentage = 0;\n-                $percentage = $num_per_overlap_size{$k} * 100 / $overlap_number unless $overlap_number == 0;\n-                print $txt "$k\\t$num_per_overlap_size{$k}\\t"; printf $txt "%.2f\\n",$percentage;\n-            }\n-            close $txt;\n-        }\n-    }\n-\n-    foreach my $tabP (    @distri_overlap )\n-    {\n-        my $sum = sum($tabP);\n-        my $ten = $tabP->[9];\n-        my $mean = mean($tabP);\n-        my $std = standard_deviation($tabP, $mean);\n-        my $zsc = z_significance($ten, $mean, $std);\n-        my $name = shift @overlaps_names;\n-        my $prob = \'NA\';\n-        $prob =    1 - &Math::CDF::pnorm( $zsc ) if $zsc ne \'NA\';\n-        print $ppp_f (join ("\\t", $name, $sum, $ten, $mean, $std, $zsc, $prob ),"\\n" );\n-    }\n-    close $ppp_f;\n-}\n-\n-sub count_mapped\n-{\n-    my ( $fai, $in_file ) = @_;\n-    my ( %mapped, %dup, %has_ppp );\n-\n-    open my $f, \'<\', $fai || die "cannot open $fai $! \\n";\n-    while(<$f>)\n-    {\n-        if ($_ =~ /(.*)\\t(\\d+)\\n/)\n-        {\n-            $mapped{$1} = [];\n-            $mapped{$1}->[0] = []; $mapped{$1}->[1] = [];\n-        }\n-    }\n-    close $f;\n-\n-    open my $infile, "samtools view \'$in_file\' |"|| die "cannot open input file $! \\n";\n-    while(<$infile>)\n-    {\n-        unless ($_ =~ /^\\@[A-Za-z][A-Za-z](\\t[A-Za-z][A-Za-z0-9]:[ -~]+)+$/ || $_ =~ /^\\@CO\\t.*/ )\n-        {\n-            my @line = split (/\\t/,$_);\n-            if ($line[1] == 0)\n-            {\n-                unless ( exists ($dup{$line[3].$line[9].$line[1].$line[2]}) )\n-                {\n-                    push @{$mapped{$line[2]}->[0]} , [$line[3], $line[9], $line[1],    $line[2]];\n-                    $has_ppp {$line[3].$line[9].$line[1].$line[2]} = 0;\n-                }\n-                $dup{$line[3].$line[9].$line[1].$line[2]}+=1;\n-            }\n-            elsif ($line[1] == 16)\n-            {\n-                unless ( exists ($dup{$line[3].$line[9].$line[1].$line[2]}) )\n-                {\n-                    push @{$mapped{$line[2]}->[1]} , [$line[3], $line[9], $line[1],    $line[2]];\n-                    $has_ppp{$line[3].$line[9].$line[1].$line[2]} = 0;\n-                }\n-                $dup{$line[3].$line[9].$line[1].$line[2]}+=1\n-            }\n-        }\n-    }\n-    close $infile;\n-    return (\\%mapped, \\%dup, \\%has_ppp );\n-}\n-\n-sub sum\n-{\n-    my $arrayref = shift;\n-    my $result = 0;\n-    foreach (@$arrayref) {$result += $_}\n-    return $result;\n-}\n-\n-sub mean\n-{\n-    my $arrayref = shift;\n-    my $result;\n-    foreach (@$arrayref) {$result += $_}\n-    return $result / scalar(@$arrayref);\n-}\n-\n-sub standard_deviation\n-{\n-    my ($arrayref, $mean) =    @_;\n-    return sqrt ( mean ( [map $_**2 , @$arrayref ]) - ($mean**2));\n-}\n-\n-sub z_significance\n-{\n-    my ($ten, $mean, $std) = @_;\n-    my $z = \'NA\';\n-    $z = (($ten - $mean) / $std) if $std != 0;\n-    return $z;\n-}\n-\n-1;\n-\n'
b
diff -r ff36e76d696a -r 740884893563 lib/sRNAPipe/resize.pm
--- a/lib/sRNAPipe/resize.pm Wed Jan 30 06:26:32 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
@@ -1,101 +0,0 @@
-package sRNAPipe::resize;
-
-use strict;
-use warnings;
-
-use FindBin;
-use lib "$FindBin::Bin/../lib";
-use sRNAPipe::Rcall qw ( histogram );
-
-use Exporter;
-our @ISA = qw( Exporter );
-our @EXPORT_OK = qw( &size_distribution );
-
-sub size_distribution
-{
-    my ( $fastq, $fastq_out, $dir, $min, $max ) = @_;
-
-    my ( %fragments_size, %duplicates ) ;
-    my $num = size($min, $max, $fastq, $fastq_out, \%fragments_size, \%duplicates);
-
-    my $png = $dir.'histogram.png';
-    histogram(\%fragments_size, $png, $num);
-    
-    my $size = $dir.'reads_size.txt';
-    
-
-    my $pourcentage;
-    open    my $o, '>', $size || die "cannot open $size $!\n";
-    print $o "size\tnumber\tpercentage\n";
-    foreach my    $k (sort { $a <=> $b } keys %fragments_size )
-    {
-        $pourcentage = $fragments_size{$k} / $num * 100;
-        
-        print $o "$k\t$fragments_size{$k}\t";
-        printf $o "%.2f\n",$pourcentage;
-    }
-    close $o;
-    
-    my $dup = $dir.'duplicates.txt' ;
-    open $o, '>', $dup || die "cannot open $size $!\n";
-    print $o "size\tnumber\n";
-    foreach my    $k (sort { $duplicates{$b} <=> $duplicates{$a} } keys %duplicates )
-    {
-        print $o "$k\t$duplicates{$k}\n";
-    }
-    close $o;
-}
-
-sub size
-{
-    my ($min, $max, $in_file, $out_file, $sizeHashR, $duplicateHashR) = @_;
-    my ($numreads, $size, $cmp, $ok, $line) = (0, 0, 0, 0);
-    my @fastq;
-    open (my $in, $in_file) || die "cannot open $in_file $!\n";
-    open (my $out, ">".$out_file)    || die "cannot create $out_file $!\n";
-    while(<$in>)
-    {
-        chomp $_;
-        $cmp++; $line++;
-        if ($cmp == 1)
-        {
-            die "file do not contain a @ at line $line\n" unless ($_ =~ /^\@/ );
-            $ok = 0; @fastq = ();
-            push(@fastq,$_);
-        }
-        elsif ($cmp == 2)
-        {
-            #die "unrecognized symbol at line $line\n" unless ($_ =~ /[atcgATCGnN]+/ || $_ =~ /^$/ );
-            push(@fastq,$_);
-            $size = length($_);
-            if ($size >= $min && $size <= $max)
-            {
-                $numreads++;
-                ${$sizeHashR}{$size}+=1;
-                ${$duplicateHashR}{$_}+=1 if (defined($duplicateHashR));
-                $ok = 1;
-            }
-        }
-        elsif ($cmp == 3 )
-        {
-            die "file do not contain a + at line $line\n" unless $_ =~ /^\+/;
-            push(@fastq,$_);
-        }
-        elsif ($cmp == 4 )
-        {
-            push(@fastq,$_);
-            $cmp = 0;
-            if ($ok == 1)
-            {
-                foreach my $t (@fastq)
-                {
-                    print $out $t."\n";
-                }
-            }
-        }
-    }
-    close $in; close $out;
-    return $numreads;
-}
-
-1;
b
diff -r ff36e76d696a -r 740884893563 lib/sRNAPipe/subgroups.pm
--- a/lib/sRNAPipe/subgroups.pm Wed Jan 30 06:26:32 2019 -0500
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
@@ -1,174 +0,0 @@
-package sRNAPipe::subgroups;
-
-use strict;
-use warnings;
-use Exporter;
-our @ISA = qw( Exporter );
-our @EXPORT_OK = qw( &subgroups );
-
-use POSIX;
-use File::Copy;
-use FindBin;
-use lib "$FindBin::Bin/../lib";
-use sRNAPipe::align qw ( get_hash_alignment );
-
-sub subgroups
-{
-    my ($fin, $dir, $mis, $mis_TE, $proc, $tRNAs, $rRNAs, $snRNAs, $miRNAs, $transcripts, $TE, $min_si, $max_si, $min_pi, $max_pi, $report ) = @_;
-    my (@files, $sum, $pie, $repar, %ismapped, %isjunk, %repartition, @junk_ref, @all_ref );
-
-    srand();
-    print $report "----------------------------\n";
-    print $report "Create subgroups:\nfastq_in: $fin\ndirectory_out: $dir\nmismatches: $mis\nmismatches TE: $mis_TE\n";
-
-    mkdir $dir;
-    $dir = $dir.'/' unless $dir =~ /(.*)\/$/;
-
-    my $accept_miRNas = $dir.'miRNAs.fastq';
-    my $reject_miRNAs = $dir.'miRNAs_rejected.fastq';
-    my $sam_miRNAs = $dir.'miRNAs.sam';
-    my @tmp = get_hash_alignment($miRNAs, $mis, 1, 1, $accept_miRNas, $reject_miRNAs, $fin, $proc, 'miRNAs',$sam_miRNAs, $report);
-    my $mi = $tmp[0]; my $sam = '';
-    $repartition{'miRNAs'} = $mi;
-
-
-    my $reject_rRNAs = $dir.'rRNAs_rejected.fastq';
-    if ( $rRNAs eq 'None')
-    {
-        move($reject_miRNAs,$reject_rRNAs);
-    }
-    else
-    {
-        $sam = new String::Random;
-        $sam = $sam->randpattern("CCcccccc");
-        @tmp = get_hash_alignment($rRNAs, $mis, 0, 1, 'NA', $reject_rRNAs, $reject_miRNAs, $proc, 'rRNAs', $sam, $report);
-        $repartition{'rRNAs'} = $tmp[0];
-        unlink $sam, $sam.'_aln.err', $sam.'_samse.err';
-    }
-
-    my $reject_tRNAs = $dir.'rRNAs_rejected.fastq';
-    if ( $rRNAs eq 'None')
-    {
-        move($reject_rRNAs,$reject_tRNAs);
-    }
-    else
-    {
-        $sam = new String::Random;
-        $sam = $sam->randpattern("CCcccccc");
-        @tmp = get_hash_alignment($tRNAs, $mis, 0, 1, 'NA', $reject_tRNAs, $reject_rRNAs, $proc, 'tRNAs', $sam, $report);
-        $repartition{'tRNAs'} = $tmp[0];
-        unlink $sam, $sam.'_aln.err', $sam.'_samse.err';
-    }
-
-
-    my $bonafide = $dir.'bonafide_reads.fastq';
-    if ( $rRNAs eq 'None')
-    {
-        move($reject_tRNAs,$bonafide);
-    }
-    else
-    {
-        $sam = new String::Random;
-        $sam = $sam->randpattern("CCcccccc");
-        @tmp = get_hash_alignment($snRNAs, $mis, 0, 1, 'NA', $bonafide, $reject_tRNAs, $proc, 'snRNAs', $sam, $report);
-        $repartition{'snRNAs'} = $tmp[0];
-
-        unlink $sam, $sam.'_aln.err', $sam.'_samse.err';
-    }
-    my $bo = $tmp[1];
-
-    my $sam_transcripts = $dir.'transcripts.sam';
-    my $reject_transcripts = $dir.'rejected_transcripts.fastq';
-    @tmp = get_hash_alignment($transcripts, $mis, 0, 1, 'NA', $reject_transcripts, $bonafide, $proc, 'transcripts', $sam_transcripts, $report, $dir.'transcripts.fai');
-    $repartition{'transcripts'} = $tmp[0];
-
-    
-    my $sam_TEs = $dir.'TEs.sam';
-    my $reject_TEs = $dir.'rejected.fastq';
-    @tmp = get_hash_alignment($TE, $mis_TE, 0, 1, 'NA', $reject_TEs, $reject_transcripts, $proc, 'TEs', $sam_TEs, $report, $dir.'TEs.fai' );
-    $repartition{'TEs'} = $tmp[0] ; $repartition{'others'} = $tmp[1];
-    unlink $sam, $sam.'_aln.err', $sam.'_samse.err';
-    unlink $reject_transcripts;
-    unlink $reject_rRNAs;
-    unlink $reject_miRNAs;
-    unlink $reject_tRNAs;
-
-    #create repartition
-    my $pi = fastqSubgroups($bonafide, $dir, $min_si, $max_si, $min_pi, $max_pi );
-
-    open (my $re, '>'.$dir.'repartition.txt') || die "cannot open $dir repartition.txt $!\n";
-    print $re "type\tnumber\tpercentage\n";
-    $sum += $_ foreach values %repartition;
-    foreach my $k    ( sort keys    %repartition )
-    {
-        my $prct = 0;
-        $prct = $repartition{$k} / $sum * 100 if $sum != 0;
-        print $re "$k\t$repartition{$k}\t"; printf $re "%.2f\n",$prct;
-    }
-    return ( $bo, $mi, $pi);
-}
-
-sub fastqSubgroups
-{
-    my ( $fastq, $output_directory, $min_si, $max_si, $min_pi, $max_pi ) = @_;
-    my $fastq_siRNA = $output_directory."siRNAs.fastq";
-    my $fastq_piRNA = $output_directory."piRNAs.fastq";
-
-    open my $fic, '<', $fastq || die "cannot open input file $! \n";
-    open my $si, '>', $fastq_siRNA || die "cannot open siRNA.fastq $! \n";
-    open my $pi, '>', $fastq_piRNA || die "cannot open piRNA.fastq $! \n";
-    
-    my ($length, $cmp, $type, $siRNA_number, $miRNA_h_number, $piRNA_number, $not_pi_number) = (0,0,0,0,0,0,0);
-    my (@fastq) =(); my $seq_name;
-    my $out;
-    while(<$fic>)
-    {
-        chomp $_;
-        $cmp++;
-        if ($cmp == 1)
-        {
-            die "file do not contain a @ at line $cmp\n" unless ($_ =~ /^\@/ );
-            $type = 0; @fastq = ();
-            if ($_ =~ /^\@(.*)\s.*/) { $seq_name = $1;}
-            elsif ($_ =~ /^\@(.*)/) {$seq_name = $1;}
-            push(@fastq,$_);
-        }
-        elsif ($cmp == 2)
-        {
-            #die "unrecognized symbol at line $cmp\n" unless $_ =~ /[atcgATCGnN]+/;
-            push(@fastq,$_);
-            $length = length($_);
-            $type = 0;
-            if ( $length >= $min_si    && $length <= $max_si )
-            {
-                 $type = 2;
-                 $siRNA_number++;
-            }
-            if ($length >= $min_pi    && $length <= $max_pi )
-            {
-                $type += 4;
-                $piRNA_number++;
-            }
-        }
-        elsif ($cmp == 3 )
-        {
-            die "file do not contain a + at line $cmp\n" unless $_ =~ /^\+/;
-            push(@fastq,$_);
-        }
-        elsif ($cmp == 4 )
-        {
-            push(@fastq,$_);
-            $cmp = 0;
-            if ($type != 0)
-            {
-                if ($type & 4 ) { foreach my $t (@fastq) { print $pi $t."\n";} }
-                if ($type & 2 ) { foreach my $t (@fastq) { print $si $t."\n";} }
-            }
-        }
-    }
-    close $fic;
-    close $si; close $pi;
-    return ($piRNA_number);
-}
-
-1;
b
diff -r ff36e76d696a -r 740884893563 sRNAPipe.xml
--- a/sRNAPipe.xml Wed Jan 30 06:26:32 2019 -0500
+++ b/sRNAPipe.xml Thu Jan 31 16:10:58 2019 -0500
[
@@ -22,25 +22,11 @@
         </xml>
     </macros>
     <requirements>
-        <requirement type="package" version="1.9">samtools</requirement>
-        <requirement type="package">bwa</requirement>
-        <requirement type="package">bedtools</requirement>
-        <requirement type="package">perl</requirement>
-        <requirement type="package">perl-getopt-long</requirement>
-        <requirement type="package">perl-parallel-forkmanager</requirement>
-        <requirement type="package">perl-statistics-r</requirement>
-        <requirement type="package">perl-string-random</requirement>
-        <requirement type="package">perl-file-copy-recursive</requirement>
-        <requirement type="package">perl-math-cdf</requirement>
-        <requirement type="package">r-base</requirement>
-        <requirement type="package">r-plotrix</requirement>
-        <requirement type="package">r-rcolorbrewer</requirement>
-        <requirement type="package">r-ggplot2</requirement>
-        <requirement type="package" version="1.14.0">bioconductor-sushi</requirement>
+        <requirement type="package" version="1.1">srnapipe</requirement>
     </requirements>
-    <version_command>perl '$__tool_directory__/bin/sRNAPipe.pl' | grep 'version' | grep "version" | cut -d ' ' -f 3</version_command>
+    <version_command>srnapipe | grep 'version' | grep "version" | cut -d ' ' -f 3</version_command>
     <command detect_errors="aggressive"><![CDATA[
-        perl '$__tool_directory__/bin/sRNAPipe.pl'
+        srnapipe
 
         --fastq '${first_input}'
         --fastq_n '${first_input.name}'