diff options
Diffstat (limited to 'academic')
-rw-r--r-- | academic/pyCRAC/GTF2-scripts.patch | 79 | ||||
-rw-r--r-- | academic/pyCRAC/MANIFEST_slack.txt | 69 | ||||
-rw-r--r-- | academic/pyCRAC/README | 27 | ||||
-rw-r--r-- | academic/pyCRAC/README.tests | 7 | ||||
-rw-r--r-- | academic/pyCRAC/pyCRAC.SlackBuild | 115 | ||||
-rw-r--r-- | academic/pyCRAC/pyCRAC.info | 12 | ||||
-rw-r--r-- | academic/pyCRAC/setup_slack.py | 104 | ||||
-rw-r--r-- | academic/pyCRAC/slack-desc | 19 |
8 files changed, 432 insertions, 0 deletions
diff --git a/academic/pyCRAC/GTF2-scripts.patch b/academic/pyCRAC/GTF2-scripts.patch new file mode 100644 index 0000000000..35f9512876 --- /dev/null +++ b/academic/pyCRAC/GTF2-scripts.patch @@ -0,0 +1,79 @@ +diff -Naur sgrann-pycrac-8792459eeef7/pyCRAC/scripts/pyGTF2bedGraph.py sgrann-pycrac-8792459eeef7-slack/pyCRAC/scripts/pyGTF2bedGraph.py +--- sgrann-pycrac-8792459eeef7/pyCRAC/scripts/pyGTF2bedGraph.py 2017-09-11 15:11:12.000000000 +0100 ++++ sgrann-pycrac-8792459eeef7-slack/pyCRAC/scripts/pyGTF2bedGraph.py 2017-09-10 00:47:13.014633000 +0100 +@@ -2,7 +2,7 @@ + # not compatible with python 3 + __author__ = "Sander Granneman" + __copyright__ = "Copyright 2017" +-__version__ = "0.0.7" ++__version__ = "0.0.6" + __credits__ = ["Sander Granneman"] + __maintainer__ = "Sander Granneman" + __email__ = "sgrannem@staffmail.ed.ac.uk" +@@ -80,14 +80,12 @@ + chromdata = processChromFile(chromlengthfile) + ### + +- normvalue = 1.0 +- if permillion and normvalue == 1.0: +- assert data.mapped_reads, "No information on the number of mapped reads could be found in the gtf file. Cannot normalize the data" +- normvalue = float(data.mapped_reads)/1000000.0 +- + while True: + lines = data.readLineByLine() +- # to normalize the data to per million reads ++ normvalue = 1.0 ++ if permillion and normvalue == 1.0: ++ assert data.mapped_reads, "No information on the number of mapped reads could be found in the gtf file. Cannot normalize the data" ++ normvalue = float(data.mapped_reads)/1000000.0 # to normalize the data to per million reads + if current_chromosome and data.chromosome != current_chromosome or not lines: + for strand in chromdict: + start = 0 +diff -Naur sgrann-pycrac-8792459eeef7/pyCRAC/scripts/pyGTF2sgr.py sgrann-pycrac-8792459eeef7-slack/pyCRAC/scripts/pyGTF2sgr.py +--- sgrann-pycrac-8792459eeef7/pyCRAC/scripts/pyGTF2sgr.py 2017-09-11 15:11:12.000000000 +0100 ++++ sgrann-pycrac-8792459eeef7-slack/pyCRAC/scripts/pyGTF2sgr.py 2017-09-10 00:47:13.014633000 +0100 +@@ -1,8 +1,8 @@ + #!/usr/bin/python + # not compatible with python 3 + __author__ = "Sander Granneman" +-__copyright__ = "Copyright 2017" +-__version__ = "0.0.6" ++__copyright__ = "Copyright 2015" ++__version__ = "0.0.5" + __credits__ = ["Sander Granneman"] + __maintainer__ = "Sander Granneman" + __email__ = "sgrannem@staffmail.ed.ac.uk" +@@ -13,7 +13,7 @@ + # pyGTF2sgr.py + # + # +-# Copyright (c) Sander Granneman 2017 ++# Copyright (c) Sander Granneman 2015 + # + # Permission is hereby granted, free of charge, to any person obtaining a copy + # of this software and associated documentation files (the "Software"), to deal +@@ -73,12 +73,11 @@ + ### + + normvalue = 1.0 +- if permillion: +- assert data.mapped_reads, "No information on the number of mapped reads could be found in the gtf file. Cannot normalize the data" +- normvalue = float(data.mapped_reads)/1000000.0 +- + while True: + lines = data.readLineByLine() ++ if permillion and normvalue == 1.0: ++ assert data.mapped_reads, "No information on the number of mapped reads could be found in the gtf file. Cannot normalize the data" ++ normvalue = float(data.mapped_reads)/1000000.0 + if current_chromosome and data.chromosome != current_chromosome or not lines: + for strand in strands: + if min_cov: +@@ -118,6 +117,8 @@ + if data.substitutions: chromdict[data.strand][data.substitutions] += data.number_of_reads + elif type == "deletions": + if data.deletions: chromdict[data.strand][data.deletions] += data.number_of_reads ++ else: ++ break + + def gtf2dropoffrates(gtffile,chromosomedata,out_files=[],score=False,log=sys.stdout,zeros=False,min_cov=0): + """Produces an sgr output file for hits, substitutions and deletions. It requires, besides data a file containing diff --git a/academic/pyCRAC/MANIFEST_slack.txt b/academic/pyCRAC/MANIFEST_slack.txt new file mode 100644 index 0000000000..95a4931773 --- /dev/null +++ b/academic/pyCRAC/MANIFEST_slack.txt @@ -0,0 +1,69 @@ +setup.py +MANIFEST.txt +LICENCE.txt +README.txt +pyCRAC/tests/test.novo +pyCRAC/tests/test.sh +pyCRAC/tests/test_coordinates.txt +pyCRAC/tests/test.gtf +pyCRAC/tests/test_f.fastq +pyCRAC/tests/test_f.fastq.gz +pyCRAC/tests/test_f_dm.fastq +pyCRAC/tests/test_r.fastq +pyCRAC/tests/test_r.fastq.gz +pyCRAC/tests/test_r_dm.fastq +pyCRAC/tests/indexes.txt +pyCRAC/tests/barcodes.txt +pyCRAC/tests/genes.lis +pyCRAC/Classes/NGSFormatWriters.py +pyCRAC/Classes/NGSFormatReaders.py +pyCRAC/Classes/PairedReads.py +pyCRAC/Classes/Pileups.py +pyCRAC/Classes/Aligner.py +pyCRAC/Classes/Motifs.py +pyCRAC/Classes/Barcodes.py +pyCRAC/Classes/Coverage.py +pyCRAC/Classes/Exceptions.py +pyCRAC/Classes/FDR.py +pyCRAC/Classes/Clustering +pyCRAC/db/Saccharomyces_cerevisiae.EF2.59.1.0_chr_lengths.txt +pyCRAC/db/Saccharomyces_cerevisiae.EF2.59.1.0.fa +pyCRAC/db/Saccharomyces_cerevisiae.EF2.59.1.0.fa.tab +pyCRAC/db/Saccharomyces_cerevisiae.EF2.59.1.3.gtf +pyCRAC/kinetic_crac_pipeline/CRAC_pipeline_PE.py +pyCRAC/kinetic_crac_pipeline/CRAC_pipeline_PeakFinder.py +pyCRAC/kinetic_crac_pipeline/CRAC_pipeline_SE.py +pyCRAC/kinetic_crac_pipeline/TrimNucs.py +pyCRAC/scripts/pybed2GTF.py +pyCRAC/scripts/pyGTF2bed.py +pyCRaC/scripts/pyGTF2bedGraph.py +pyCRAC/scripts/pyGTF2sgr.py +pyCRAC/scripts/pyNormalizeIntervalLengths.py +pyCRAC/scripts/pyFastqDuplicateRemover.py +pyCRAC/scripts/pyFastqJoiner.py +pyCRAC/scripts/pyFastqSplitter.py +pyCRAC/scripts/pyGetGeneNamesFromGTF.py +pyCRAC/scripts/pySelectMotifsFromGTF.py +pyCRAC/scripts/pyGetGTFSources.py +pyCRAC/scripts/pyFilterGTF.py +pyCRAC/scripts/pyFasta2tab.py +pyCRAC/scripts/pyAlignment2Tab.py +pyCRAC/scripts/pyExtractLinesFromGTF.py +pyCRAC/scripts/pyCheckGTFfile.py +pyCRAC/scripts/pyCalculateChromosomeLengths.py +pyCRAC/pyClusterReads.py +pyCRAC/pyCalculateFDRs.py +pyCRAC/pyCalculateMutationFrequencies.py +pyCRAC/pyBinCollector.py +pyCRAC/pyMotif.py +pyCRAC/pyPileup.py +pyCRAC/pyReadAligner.py +pyCRAC/pyReadCounters.py +pyCRAC/pyBarcodeFilter.py +pyCRAC/Parsers/Blast.py +pyCRAC/Parsers/GTF2.py +pyCRAC/Parsers/Novoalign.py +pyCRAC/Parsers/ParseAlignments.py +pyCRAC/Parsers/SAM.py +pyCRAC/Parsers/fasta2dict.py +pyCRAC/Parsers/tab2dict.py diff --git a/academic/pyCRAC/README b/academic/pyCRAC/README new file mode 100644 index 0000000000..dd847d0935 --- /dev/null +++ b/academic/pyCRAC/README @@ -0,0 +1,27 @@ +The pyCRAC package is a collection of python2-scripts to analyse high +throughput data generated by RNA-sequencing, especially of molecules +crosslinked by UV to an immunoprecipitated protein of interest (i.e. +data generated by CLIP or CRAC protocols). +It can be used to remove duplicate reads,tackles directional libraries +and reports sense and anti-sense hits. + +Included is the pipeline used for the analysis of a group of CRAC data +sets. + +An R-function used for kinetic CRAC analysis can be found in +/usr/share/pyCRAC/kinetic_crac_pipeline + +References + +Genome Biol. 2014 Jan 7;15(1):R8. doi: 10.1186/gb-2014-15-1-r8. +PAR-CLIP data indicate that Nrd1-Nab3-dependent transcription +termination regulates expression of hundreds of protein coding genes in +yeast. Webb S, Hector RD, Kudla G, Granneman S. + +Nature Communications, 2017; DOI: 10.1038/s41467-017-00025-5 +Kinetic CRAC uncovers a role for Nab3 in determining gene expression +profiles during stress. van Nues R, Schweikert G, de Leau E, Selega +A, Langford A, Franklin R, Iosub I, Wadsworth P, Sanguinetti G, +Granneman S. + +If you want to run the test suite after installation, see README.tests. diff --git a/academic/pyCRAC/README.tests b/academic/pyCRAC/README.tests new file mode 100644 index 0000000000..15def4bfeb --- /dev/null +++ b/academic/pyCRAC/README.tests @@ -0,0 +1,7 @@ +To test the pyCRAC scripts after installing the package on Slackware: + + cp -R /usr/share/pyCRAC <path-to-your-work-directory>/ + cd <path-to-your-work-directory>/pyCRAC/tests + sh test.sh + +If all tests complete without an error, the package is working. diff --git a/academic/pyCRAC/pyCRAC.SlackBuild b/academic/pyCRAC/pyCRAC.SlackBuild new file mode 100644 index 0000000000..7a386f452d --- /dev/null +++ b/academic/pyCRAC/pyCRAC.SlackBuild @@ -0,0 +1,115 @@ +#!/bin/sh + +# Slackware build script for pyCRAC + +# Copyright 2017 Rob van Nues +# All rights reserved. +# +# Redistribution and use of this script, with or without modification, is +# permitted provided that the following conditions are met: +# +# 1. Redistributions of this script must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +PRGNAM=pyCRAC +VERSION=${VERSION:-1.2.3.0} +BUILD=${BUILD:-1} +TAG=${TAG:-_SBo} + +SRCNAM=sgrann-pycrac +SRCVER=${SRCVER:-8792459eeef7} + +PIPENAM=kinetic_crac_pipeline +PIPEVER=${PIPEVER:-73dff1be9488} + +if [ -z "$ARCH" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +CWD=$(pwd) +TMP=${TMP:-/tmp/SBo} +PKG=$TMP/package-$PRGNAM +OUTPUT=${OUTPUT:-/tmp} + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf $PKG +mkdir -p $TMP $PKG $OUTPUT +cd $TMP +rm -rf $SRCNAM-$SRCVER +tar xvf $CWD/$SRCNAM-$SRCVER.tar.gz || tar xvf $CWD/$SRCVER.tar.gz +cd $SRCNAM-$SRCVER + +mkdir $PRGNAM/$PIPENAM +tar xvf $CWD/sgrann-$PIPENAM-$PIPEVER.tar.gz -C $PRGNAM/$PIPENAM --strip-components=1 || \ + tar xvf $CWD/$PIPEVER.tar.gz -C $PRGNAM/$PIPENAM --strip-components=1 + +patch -p1 < $CWD/GTF2-scripts.patch + +#replace setup.py +rm setup.py +cp $CWD/setup_slack.py setup.py +#replace Manifest +rm MANIFEST.txt +cp $CWD/MANIFEST_slack.txt MANIFEST.txt + +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +python setup.py install --root=$PKG + +find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +# The pipeline-R script +mkdir -p $PKG/usr/share/$PRGNAM-$VERSION/$PIPENAM +cp $PRGNAM/$PIPENAM/gaussianProcessAnalysis.R $PKG/usr/share/$PRGNAM-$VERSION/$PIPENAM + +# the manual etc. +mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION +cp -a \ + LICENCE.txt README.txt "The pyCRAC Manual.pdf" VERSION.txt \ + $CWD/README.tests $CWD/setup_slack.py $CWD/MANIFEST_slack.txt \ + $CWD/README \ + $PKG/usr/doc/$PRGNAM-$VERSION +cp -a $PRGNAM/$PIPENAM/README.md $PKG/usr/doc/$PRGNAM-$VERSION/$PIPENAM-README.md +cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild + +mkdir -p $PKG/install +cat $CWD/slack-desc > $PKG/install/slack-desc + +cd $PKG +/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz} diff --git a/academic/pyCRAC/pyCRAC.info b/academic/pyCRAC/pyCRAC.info new file mode 100644 index 0000000000..9051b43654 --- /dev/null +++ b/academic/pyCRAC/pyCRAC.info @@ -0,0 +1,12 @@ +PRGNAM="pyCRAC" +VERSION="1.2.3.0" +HOMEPAGE="https://bitbucket.org/sgrann/" +DOWNLOAD="https://bitbucket.org/sgrann/pycrac/get/8792459eeef7.tar.gz \ + https://bitbucket.org/sgrann/kinetic_crac_pipeline/get/73dff1be9488.tar.gz" +MD5SUM="a0e05b812dc765a2b1f673078ea43e3d \ + 8f968d1dca38aa2b3ac401ba8da70cef" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="flexbar novocraft numpy pysam scipy pandas ruffus" +MAINTAINER="rob van nues" +EMAIL="rvnues at tesco {dot} net" diff --git a/academic/pyCRAC/setup_slack.py b/academic/pyCRAC/setup_slack.py new file mode 100644 index 0000000000..621b944573 --- /dev/null +++ b/academic/pyCRAC/setup_slack.py @@ -0,0 +1,104 @@ +#!/usr/bin/python +# not compatible with python 3 +__author__ = "Sander Granneman" +__copyright__ = "Copyright 2017" +__version__ = "1.2.3.0" +__credits__ = ["Sander Granneman","Hywell Dunn Davies"] +__maintainer__ = ["Rob van Nues, via SlackBuilds.org"] +__email__ = "sgrannem@staffmail.ed.ac.uk" +__status__ = "Production" + +import sys +import os +import platform +import setuptools +from setuptools import setup + +DEFAULT_PATH = "/usr/share/" + +if sys.version[0:3] < '2.7' : raise ImportError('Python version 2.7 or above is required for pyCRAC') +if sys.version[0:3] >= '3.0': raise ImportError('pyCRAC is not compatible with Python 3.0 or higher') + +sys.stdout.write("\nInstalling pyCRAC version %s...\n" % __version__) + +path_files = open("pyCRAC/defaults.py","w") +#path_files.write("DEFAULT_PATH=\"%s\"\n" % DEFAULT_PATH) +path_files.write("GTF=\"%spyCRAC-%s/db/Saccharomyces_cerevisiae.EF2.59.1.3.gtf\"\nTAB=\"%spyCRAC-%s/db/Saccharomyces_cerevisiae.EF2.59.1.0.fa.tab\"\nCHROM=\"%spyCRAC-%s/db/Saccharomyces_cerevisiae.EF2.59.1.0_chr_lengths.txt\"\n" % (DEFAULT_PATH,__version__,DEFAULT_PATH,__version__,DEFAULT_PATH,__version__)) +path_files.close() + +setup(name='pyCRAC', + version='%s' % __version__, + description='Python NextGen sequencing data processing software', + author='Sander Granneman', + author_email='sgrannem@staffmail.ed.ac.uk', + url='http://sandergranneman.bio.ed.ac.uk/Granneman_Lab/pyCRAC_software.html', + packages=['pyCRAC','pyCRAC.Parsers','pyCRAC.Classes','pyCRAC.Methods'], + install_requires=['numpy >= 1.5.1', 'cython >=0.19', 'pysam >= 0.6'], + scripts=[ + 'pyCRAC/pyReadAligner.py', + 'pyCRAC/pyMotif.py', + 'pyCRAC/pyPileup.py', + 'pyCRAC/pyBarcodeFilter.py', + 'pyCRAC/pyReadCounters.py', + 'pyCRAC/pyBinCollector.py', + 'pyCRAC/pyCalculateFDRs.py', + 'pyCRAC/pyClusterReads.py', + 'pyCRAC/pyCalculateMutationFrequencies.py', + 'pyCRAC/scripts/pyCalculateChromosomeLengths.py', + 'pyCRAC/scripts/pyFastqDuplicateRemover.py', + 'pyCRAC/scripts/pyAlignment2Tab.py', + 'pyCRAC/scripts/pyGetGTFSources.py', + 'pyCRAC/scripts/pySelectMotifsFromGTF.py', + 'pyCRAC/scripts/pyFasta2tab.py', + 'pyCRAC/scripts/pyFastqJoiner.py', + 'pyCRAC/scripts/pyFastqSplitter.py', + 'pyCRAC/scripts/pyExtractLinesFromGTF.py', + 'pyCRAC/scripts/pyGetGeneNamesFromGTF.py', + 'pyCRAC/scripts/pyCheckGTFfile.py', + 'pyCRAC/scripts/pybed2GTF.py', + 'pyCRAC/scripts/pyGTF2sgr.py', + 'pyCRAC/scripts/pyGTF2bed.py', + 'pyCRAC/scripts/pyGTF2bedGraph.py', + 'pyCRAC/scripts/pyFilterGTF.py', + 'pyCRAC/scripts/pyNormalizeIntervalLengths.py', + 'pyCRAC/kinetic_crac_pipeline/CRAC_pipeline_PE.py', + 'pyCRAC/kinetic_crac_pipeline/CRAC_pipeline_PeakFinder.py', + 'pyCRAC/kinetic_crac_pipeline/CRAC_pipeline_SE.py', + 'pyCRAC/kinetic_crac_pipeline/TrimNucs.py' + ], + classifiers=[ 'Development Status :: 5 - Production/Stable', + 'Environment :: Terminal', + 'Intended Audience :: Education', + 'Intended Audience :: Developers', + 'Intended Audience :: Science/Research', + 'License :: Freeware', + 'Operating System :: MacOS :: MacOS X', + 'Operating System :: POSIX', + 'Programming Language :: Python :: 2.7', + 'Topic :: Scientific/Engineering :: Bio-Informatics', + 'Topic :: Software Development :: Libraries :: Application Frameworks' + ], + data_files=[ ('%spyCRAC-%s/db/' % (DEFAULT_PATH,__version__), [ + 'pyCRAC/db/Saccharomyces_cerevisiae.EF2.59.1.0_chr_lengths.txt', + 'pyCRAC/db/Saccharomyces_cerevisiae.EF2.59.1.3.gtf', + 'pyCRAC/db/Saccharomyces_cerevisiae.EF2.59.1.0.fa', + 'pyCRAC/db/Saccharomyces_cerevisiae.EF2.59.1.0.fa.tab']), + ('%spyCRAC-%s/tests/' % (DEFAULT_PATH,__version__), [ + 'tests/test.novo', + 'tests/test.sh', + 'tests/test_coordinates.txt', + 'tests/test.gtf', + 'tests/test_f.fastq', + 'tests/test_f.fastq.gz', + 'tests/test_f_dm.fastq', + 'tests/test_r.fastq', + 'tests/test_r.fastq.gz', + 'tests/test_r_dm.fastq', + 'tests/indexes.txt', + 'tests/barcodes.txt', + 'tests/genes.list']) + ] + ) + + + diff --git a/academic/pyCRAC/slack-desc b/academic/pyCRAC/slack-desc new file mode 100644 index 0000000000..fe2f4d9ac1 --- /dev/null +++ b/academic/pyCRAC/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +pyCRAC: pyCRAC (Next generation sequencing analysis with Python) +pyCRAC: +pyCRAC: pyCRAC combines cross-linking and immunoprecipitation (CLIP)/ +pyCRAC: cross-linking and cDNA analysis (CRAC) analysis methods. +pyCRAC: It can be used to remove duplicate reads, tackles directional +pyCRAC: libraries and reports sense and anti-sense hits. +pyCRAC: +pyCRAC: Included is a pipeline that allows analysis of a group of data-sets. +pyCRAC: +pyCRAC: https://bitbucket.org/sgrann/ +pyCRAC: |