I/O utilities. | (ns cljam.io.util
(:require [cljam.io.protocols :as protocols]
cljam.io.sam.reader
cljam.io.sam.writer
cljam.io.bam.reader
cljam.io.bam.writer
cljam.io.cram.reader
cljam.io.vcf.reader
cljam.io.vcf.writer
cljam.io.bcf.reader
cljam.io.bcf.writer
cljam.io.fasta.reader
cljam.io.fasta.writer
cljam.io.twobit.reader
cljam.io.twobit.writer
cljam.io.fastq
cljam.io.bed
cljam.io.wig
cljam.io.bigwig
[cljam.util :as util])
(:import [java.nio ByteBuffer ByteOrder])) |
Checks if given object implements protocol IAlignmentReader. | (defn alignment-reader? [rdr] (satisfies? protocols/IAlignmentReader rdr)) |
Checks if given object implements protocol IAlignmentWriter. | (defn alignment-writer? [wtr] (satisfies? protocols/IAlignmentWriter wtr)) |
Checks if given object is an instance of SAMReader. | (defn sam-reader? [rdr] (instance? cljam.io.sam.reader.SAMReader rdr)) |
Checks if given object is an instance of SAMWriter. | (defn sam-writer? [wtr] (instance? cljam.io.sam.writer.SAMWriter wtr)) |
Checks if given object is an instance of BAMReader. | (defn bam-reader? [rdr] (instance? cljam.io.bam.reader.BAMReader rdr)) |
Checks if given object is an instance of BAMWriter. | (defn bam-writer? [wtr] (instance? cljam.io.bam.writer.BAMWriter wtr)) |
Checks if given object is an instance of CRAMReader. | (defn cram-reader? [rdr] (instance? cljam.io.cram.reader.CRAMReader rdr)) |
Checks if given object implements protocol IVariantReader. | (defn variant-reader? [rdr] (satisfies? protocols/IVariantReader rdr)) |
Checks if given object implements protocol IVariantWriter. | (defn variant-writer? [wtr] (satisfies? protocols/IVariantWriter wtr)) |
Checks if given object is an instance of VCFReader. | (defn vcf-reader? [rdr] (instance? cljam.io.vcf.reader.VCFReader rdr)) |
Checks if given object is an instance of VCFWriter. | (defn vcf-writer? [wtr] (instance? cljam.io.vcf.writer.VCFWriter wtr)) |
Checks if given object is an instance of BCFReader. | (defn bcf-reader? [rdr] (instance? cljam.io.bcf.reader.BCFReader rdr)) |
Checks if given object is an instance of BCFWriter. | (defn bcf-writer? [wtr] (instance? cljam.io.bcf.writer.BCFWriter wtr)) |
Checks if given object implements protocol ISequenceReader. | (defn sequence-reader? [rdr] (satisfies? protocols/ISequenceReader rdr)) |
Checks if given object implements protocol ISequenceWriter. | (defn sequence-writer? [wtr] (satisfies? protocols/ISequenceWriter wtr)) |
Checks if given object is an instance of FASTAReader. | (defn fasta-reader? [rdr] (instance? cljam.io.fasta.reader.FASTAReader rdr)) |
Checks if given object is an instance of FASTAWriter. | (defn fasta-writer? [wtr] (instance? cljam.io.fasta.writer.FASTAWriter wtr)) |
Checks if given object is an instance of TwoBitReader. | (defn twobit-reader? [rdr] (instance? cljam.io.twobit.reader.TwoBitReader rdr)) |
Checks if given object is an instance of TwoBitWriter. | (defn twobit-writer? [wtr] (instance? cljam.io.twobit.writer.TwoBitWriter wtr)) |
Checks if given object is an instance of FASTQReader. | (defn fastq-reader? [rdr] (instance? cljam.io.fastq.FASTQReader rdr)) |
Checks if given object is an instance of FASTQWriter | (defn fastq-writer? [wtr] (instance? cljam.io.fastq.FASTQWriter wtr)) |
Checks if given object is an instance of BEDReader. | (defn bed-reader? [rdr] (instance? cljam.io.bed.BEDReader rdr)) |
Checks if given object is an instance of BEDWriter. | (defn bed-writer? [wtr] (instance? cljam.io.bed.BEDWriter wtr)) |
Checks if given object is an instance of WIGReader. | (defn wig-reader? [rdr] (instance? cljam.io.wig.WIGReader rdr)) |
Checks if given object is an instance of WIGWriter. | (defn wig-writer? [wtr] (instance? cljam.io.wig.WIGWriter wtr)) |
Checks if given object is an instance of BIGWIGReader. | (defn bigwig-reader? [rdr] (instance? cljam.io.bigwig.BIGWIGReader rdr)) |
Detects a file format from a path of f, returning a keyword representing the format. Throws an exception if an unsupported file is supplied. | (defn file-type
[f]
(condp re-find (.getPath (util/as-url f))
#"(?i)\.sam$" :sam
#"(?i)\.bai$" :bai
#"(?i)\.bam$" :bam
#"(?i)\.crai$" :crai
#"(?i)\.cram$" :cram
#"(?i)\.f(ast)?q" :fastq
#"(?i)\.fai$" :fai
#"(?i)\.(fa|fasta|fas|fsa|seq|fna|faa|ffn|frn|mpfa)" :fasta
#"(?i)\.2bit$" :2bit
#"(?i)\.tbi$" :tbi
#"(?i)\.vcf" :vcf
#"(?i)\.bcf$" :bcf
#"(?i)\.bed" :bed
#"(?i)\.gff3?" :gff
#"(?i)\.wig" :wig
#"(?i)\.(bigWig|bw)" :bigwig
(throw (IllegalArgumentException. "Invalid file type")))) |
Tries to detect a file format based on contents of the byte array | (defn file-type-from-bytes
[^bytes ba]
(let [s (String. ba 0 (Math/min (int 64) (alength ba)))
i (-> (ByteBuffer/wrap ba)
(.order ByteOrder/LITTLE_ENDIAN)
(.getInt)
(Integer/toUnsignedLong))]
(case i
0x888ffc26 :bigwig
(0x1A412743 0x4327411A) :2bit
(condp re-find s
#"^BAM\01" :bam
#"^BAI\01" :bai
#"^CRAM" :cram
#"^BCF\02" :bcf
#"^TBI\01" :tbi
#"^##fileformat=VCF" :vcf
#"^##gff-version 3" :gff
#"^@HD\t" :sam
#"^@SQ\t" :sam
#"^@RG\t" :sam
#"^@PG\t" :sam
#"^@CO\t" :sam
#"^>\S" :fasta
#"^@\S" :fastq
#"(variable|fixed)Step" :wig
#"^\S+(?:\t\d+){4}\n" :fai
#"(?m)^\S+( |\t)\d+( |\t)\d+( |\t|$)" :bed
nil)))) |
Detects a file format based on contents of the input file | (defn file-type-from-contents
[f]
(let [ba (byte-array 64)]
(with-open [is (util/compressor-input-stream f)]
(.read is ba))
(file-type-from-bytes ba))) |