Giter Site home page Giter Site logo

chomp's Introduction

CHOMP ๐ŸŠ

GitHub version GitHub license codecov Github Issues Pending Pull-Requests

CRISPR Tool

CHOMP will search for all 'n' window sized guide RNAs (gRNAs) sequences containing an NGG at the tail end. Default window size is 23.

ex.) ATGTAGCTAGCTAGCTAGTAGGG.

It will report how many occurrences of this sequence are present in the target sequence (off-target sites), along with number of matching bases for each subject/query hit. You can use that to determine which gRNAs you may want to use as CRISPR target(s).

Run CHOMP

perl chomp.pl -seq usr/test.fasta -out gRNAs

Arguments

-seq                Sequence file to search gRNAs [required]
-genome             Genome sequence file(s) to BLAST search (search instead of -seq)
-down               Down sequence to append
-up                 Up sequence to append
-window             Window size for gRNA oligo (default = 23)
-ss                 Secondary structure prediction
-out                Out file name [required]
-outdir             Out directory name
-help               Shows this message

Output

Writes 2 files under the default directory gRNAs:

'.fasta'

Fasta file of each gRNA sequence found.

>gRNA_0:0
ATGTAGCTAGCTAGCTAGTAGGG
>gRNA_1:23
AAAAAATTTTCTCTATCTAACGG
>gRNA_2:24
AAAAATTTTCTCTATCTAACGGG
>gRNA_3:115
TGTGATCACGTACTATTATGCGG
>gRNA_4:149
AAAAATCCCATCGATCTAGCAGG
>gRNA_5:154
TCCCATCGATCTAGCAGGCCCGG
.
.
.
>gRNA_16:99
ATAGTACGTGATCACAGTCATGG

Suffix digit after ':' denotes nucleotide position in sequence where gRNA was found. Ex.) gRNA_16:99 , gRNA was found starting at nucleotide position 99 in -seq sequence.

'.txt'

Report with each gRNA sequence's details.

CHOMP will report how many occurrences of this sequence are present in the target sequence (off-target sites), along with the number of base pair matches (identities) for each. You can use this to determine which gRNA sequence is best to use for target.

Name Sequence Strand Palindrome Subject Start Occurrences Identities
gRNA_13 TCGTCATGCATGCTCGCTCCGGG reverse No test 173 1 8
gRNA_12 TTCGTCATGCATGCTCGCTCCGG reverse No test 174 1 8
gRNA_3 TGTGATCACGTACTATTATGCGG plus No test 116 2 8
gRNA_16 ATAGTACGTGATCACAGTCATGG reverse No test 109 2 8
gRNA_8 AAAAAAAATTTTCCCTATCGGGG plus No test 195 1 9
gRNA_7 GAAAAAAAATTTTCCCTATCGGG plus No test 194 1 9
gRNA_6 CGAAAAAAAATTTTCCCTATCGG plus No test 193 1 9
gRNA_9 AAAAAAATTTTCCCTATCGGGGG plus No test 196 1 9
gRNA_4 AAAAATCCCATCGATCTAGCAGG plus No test 150 6 11,9,7
gRNA_0 ATGTAGCTAGCTAGCTAGTAGGG plus No test 1 4 14,12,10
gRNA_2 AAAAATTTTCTCTATCTAACGGG plus No test 25 3 15,10,8
gRNA_15 TCCGGGCCTGCTAGATCGATGGG reverse No test 156 6 15,9,7
gRNA_14 CTCCGGGCCTGCTAGATCGATGG reverse No test 157 6 15,9,7
gRNA_5 TCCCATCGATCTAGCAGGCCCGG plus No test 155 6 15,9,7
gRNA_1 AAAAAATTTTCTCTATCTAACGG plus No test 24 3 16,10,8
gRNA_11 TATAGCATGGGCCCCCGATAGGG reverse No test 207 1 23
gRNA_10 CTATAGCATGGGCCCCCGATAGG reverse No test 208 1 23

Table is sorted in increasing order using the top identity for each gRNA sequence, and then sorted by number of occurrences, in current subject.

chomp's People

Contributors

bretonics avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

shekharpro

chomp's Issues

BLAST against multiple sequences

Add support to BLAST against multiple chromosomes or sequences.

  • append name (-out and subject sequence) to blast.html output. Ex.) blast_geneX_ChrX.html
  • mv output to CRISPRS/blast/
  • support directory vs. files

Output directory

Fix output directory to a be under default top level gRNA directory

gRNA
    |_gene1
    |_gene2
    |_gene3

Sort based on number or occurrences first

The number of off-target sites should be minimized, thus the number of occurrences (number of times the CRISPR oligo matches back to the sequence -- may it be genomic or onto itself--) the least number of off-target matches the better.

Subroutines

Subroutines:

  • setParameters (manage #3)
  • getSequence subroutine to return sequence details with BioPerl

Handle process if gene present in same genome searched

In cases where crispr sequences are being searched in sequence-seq, where the same gene sequence is present in the genome -genome, output should reflect handling exact (23 bp) matches.

Since same gene sequence is searched for crisprs, there will be exact matches in the genome for each crispr sequence found. We want to base sorting on 2nd most matched bp in this case and omit exact matches.

"No hits found" in blast search breaks hash sorting

When a crispr sequence has no matching sequences in search sequence, then nothing is stored in hash. This causes an "undefined value" error when sorting unique identities for each match.

  • The integrity of the 'targets' hash must be checked to include all crispr occurrences (keys)
  • If no matches found for crispr, then store appropriate info in attributes

Create report

Report should have headers with descriptive comments on how the results were generated.

ADD

  • Add call parameters
  • Time/date
  • Number of hits per subject
  • Total number of (no)/hits

Multi FASTA

Allow multi fasta file for -genome option.

Currently searches against multiple files passed in -genome option, but only searches first sequence in multi fasta file (or first '>').

STAR Aligner

Possibly switch to STAR RNA-seq aligner to search sequence to CRISPR sequence matches.

Arguments to allow setting sorting options

Allow the sorting to be increasing or decreasing of occurrences/identities. This can be achieved in 3 different ways:

  • -sorting option setting each or both simultaneously
  • -occ option to allow sorting by occurrences to be inc/dec
  • -ident option to allow sorting by identities to be inc/dec

CRISPRS sequences differ between files

Different CRISPR sequences in BLAST results than from 'crisprs.txt' file containing detailed information.

  • โœ”๏ธŽ FASTA file names matche with HTML output
  • โŒ BLAST output does not match 'crisprs.txt'

Rank off targets

Get match hits for each CRISPR and rank matches according to how many bp are matched. Not only how many occurrences per target throughout genome but which has the least matching base pairs.

Number of occurrences incorrect

The number of occurrences per CRISPR query match is incorrect. Each successive match gets it's previous match added to the number of occurrences.

This array is not flushing.

Seems to work without -genomes option...what don't I see

Sorting using 'No hits' gets messed up

After fixing issue #20, the removal of CRISPRs with 'No Hits' results in removing them completely when sorting on line 337.

#20 fixes 'undef' issue, but introduces bug where CRISPR may not necessarily be missing in all subject sequences (not only from the singular subject where it is not found). Currently it completely omits those others.

Searching CRISPR targets against subject_1
CRISPR_22 has 0 hits here
CRISPR_50 has 0 hits here
CRISPR_72 has 0 hits here
CRISPR_93 has 0 hits here
CRISPR_129 has 0 hits here

Searching CRISPR targets against subject_2
CRISPR_25 has 0 hits here
CRISPR_91 has 0 hits here

So instead of omitting CRISPRS 22, 50, 72, 93, 129 only for subject_1, it does it for all subjects.

If 'No Hits' CRISPRs are not removed, sorting fails. Conundrum.

Refactor sequence handling

Handling of sequence information should reside in module and check for errors:

  • mv getSeqDetails to Search module
  • croak if sequence empty

Add genome parameter

Add the following parameters as command line arguments:

  • -genome: Genome file to use in blast search instead of self -seq option

blast subroutine - BAD data structure

Anonymous hash data structure incorrectly constructed at line 54.

May be related to #6 , but needs to correctly pair key->value

'CRISPR_9' => [
                          {
                            'qseqid' => '1',
                            'qend' => '25',
                            'qstart' => '23',
                            'nident' => undef,
                            'pident' => '23
',
                            'sstart' => '47',
                            'send' => 'plus',
                            'sstrand' => '100.000'
                          },
                          {
                            'pident' => '15
',
                            'sstart' => '213',
                            'send' => 'plus',
                            'sstrand' => '93.750',
                            'nident' => undef,
                            'qseqid' => '1',
                            'qstart' => '16',
                            'qend' => '198'
                          },

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.