1*3e41d09dSXin LI 2*3e41d09dSXin LI#------------------------------------------------------------------------------ 3*3e41d09dSXin LI# $File: bioinformatics,v 1.2 2016/02/14 15:53:53 christos Exp $ 4*3e41d09dSXin LI# bioinfomatics: file(1) magic for Bioinfomatics file formats 5*3e41d09dSXin LI 6*3e41d09dSXin LI############################################################################### 7*3e41d09dSXin LI# BGZF (Blocked GNU Zip Format) - gzip compatible, but also indexable 8*3e41d09dSXin LI# used by SAMtools bgzip/tabix (http://samtools.sourceforge.net/tabix.shtml) 9*3e41d09dSXin LI############################################################################### 10*3e41d09dSXin LI0 string \037\213 11*3e41d09dSXin LI>3 byte &0x04 12*3e41d09dSXin LI>>12 string BC 13*3e41d09dSXin LI>>>14 leshort &0x02 Blocked GNU Zip Format (BGZF; gzip compatible) 14*3e41d09dSXin LI>>>>16 leshort x \b, block length %d 15*3e41d09dSXin LI!:mime application/x-gzip 16*3e41d09dSXin LI 17*3e41d09dSXin LI 18*3e41d09dSXin LI############################################################################### 19*3e41d09dSXin LI# Tabix index file 20*3e41d09dSXin LI# used by SAMtools bgzip/tabix (http://samtools.sourceforge.net/tabix.shtml) 21*3e41d09dSXin LI############################################################################### 22*3e41d09dSXin LI0 string TBI\1 SAMtools TBI (Tabix index format) 23*3e41d09dSXin LI>0x04 lelong =1 \b, with %d reference sequence 24*3e41d09dSXin LI>0x04 lelong >1 \b, with %d reference sequences 25*3e41d09dSXin LI>0x08 lelong &0x10000 \b, using half-closed-half-open coordinates (BED style) 26*3e41d09dSXin LI>0x08 lelong ^0x10000 27*3e41d09dSXin LI>>0x08 lelong =0 \b, using closed and one based coordinates (GFF style) 28*3e41d09dSXin LI>>0x08 lelong =1 \b, using SAM format 29*3e41d09dSXin LI>>0x08 lelong =2 \b, using VCF format 30*3e41d09dSXin LI>0x0c lelong x \b, sequence name column: %d 31*3e41d09dSXin LI>0x10 lelong x \b, region start column: %d 32*3e41d09dSXin LI>0x08 lelong =0 33*3e41d09dSXin LI>>0x14 lelong x \b, region end column: %d 34*3e41d09dSXin LI>0x18 byte x \b, comment character: %c 35*3e41d09dSXin LI>0x1c lelong x \b, skip line count: %d 36*3e41d09dSXin LI 37*3e41d09dSXin LI 38*3e41d09dSXin LI############################################################################### 39*3e41d09dSXin LI# BAM (Binary Sequence Alignment/Map format) 40*3e41d09dSXin LI# used by SAMtools (http://samtools.sourceforge.net/SAM1.pdf) 41*3e41d09dSXin LI# data is normally present only within compressed BGZF blocks (CDATA), so use file -z to examine it 42*3e41d09dSXin LI############################################################################### 43*3e41d09dSXin LI0 string BAM\1 SAMtools BAM (Binary Sequence Alignment/Map) 44*3e41d09dSXin LI>0x04 lelong >0 45*3e41d09dSXin LI>>&0x00 regex =^[@]HD\t.*VN: \b, with SAM header 46*3e41d09dSXin LI>>>&0 regex =[0-9.]+ \b version %s 47*3e41d09dSXin LI>>&(0x04) lelong >0 \b, with %d reference sequences 48*3e41d09dSXin LI 49*3e41d09dSXin LI 50*3e41d09dSXin LI############################################################################### 51*3e41d09dSXin LI# BAI (BAM indexing format) 52*3e41d09dSXin LI# used by SAMtools (http://samtools.sourceforge.net/SAM1.pdf) 53*3e41d09dSXin LI############################################################################### 54*3e41d09dSXin LI0 string BAI\1 SAMtools BAI (BAM indexing format) 55*3e41d09dSXin LI>0x04 lelong >0 \b, with %d reference sequences 56*3e41d09dSXin LI 57*3e41d09dSXin LI 58*3e41d09dSXin LI############################################################################### 59*3e41d09dSXin LI# CRAM (Binary Sequence Alignment/Map format) 60*3e41d09dSXin LI############################################################################### 61*3e41d09dSXin LI0 string CRAM CRAM 62*3e41d09dSXin LI>0x04 byte >-1 version %d. 63*3e41d09dSXin LI>0x05 byte >-1 \b%d 64*3e41d09dSXin LI>0x06 string >\0 (identified as %s) 65*3e41d09dSXin LI 66*3e41d09dSXin LI 67*3e41d09dSXin LI############################################################################### 68*3e41d09dSXin LI# BCF (Binary Call Format), version 1 69*3e41d09dSXin LI# used by SAMtools & VCFtools (http://vcftools.sourceforge.net/bcf.pdf) 70*3e41d09dSXin LI# data is normally present only within compressed BGZF blocks (CDATA), so use file -z to examine it 71*3e41d09dSXin LI############################################################################### 72*3e41d09dSXin LI0 string BCF\4 73*3e41d09dSXin LI# length of seqnm data in bytes is positive 74*3e41d09dSXin LI>&0x00 lelong >0 75*3e41d09dSXin LI# length of smpl data in bytes is positive 76*3e41d09dSXin LI>>&(&-0x04) lelong >0 SAMtools BCF (Binary Call Format) 77*3e41d09dSXin LI# length of meta in bytes 78*3e41d09dSXin LI>>>&(&-0x04) lelong >0 79*3e41d09dSXin LI# have meta text string 80*3e41d09dSXin LI>>>>&0x00 search ##samtoolsVersion= 81*3e41d09dSXin LI>>>>>&0x00 string x \b, generated by SAMtools version %s 82*3e41d09dSXin LI 83*3e41d09dSXin LI 84*3e41d09dSXin LI############################################################################### 85*3e41d09dSXin LI# BCF (Binary Call Format), version 2.1 86*3e41d09dSXin LI# used by SAMtools (http://samtools.github.io/hts-specs/BCFv2_qref.pdf) 87*3e41d09dSXin LI# data is normally present only within compressed BGZF blocks (CDATA), so use file -z to examine it 88*3e41d09dSXin LI############################################################################### 89*3e41d09dSXin LI0 string BCF\2\1 Binary Call Format (BCF) version 2.1 90*3e41d09dSXin LI# length of header text 91*3e41d09dSXin LI>&0x00 lelong >0 92*3e41d09dSXin LI# have header string 93*3e41d09dSXin LI>>&0x00 search ##samtoolsVersion= 94*3e41d09dSXin LI>>>&0x00 string x \b, generated by SAMtools version %s 95*3e41d09dSXin LI 96*3e41d09dSXin LI 97*3e41d09dSXin LI############################################################################### 98*3e41d09dSXin LI# BCF (Binary Call Format), version 2.2 99*3e41d09dSXin LI# used by SAMtools (http://samtools.github.io/hts-specs/BCFv2_qref.pdf) 100*3e41d09dSXin LI# data is normally present only within compressed BGZF blocks (CDATA), so use file -z to examine it 101*3e41d09dSXin LI############################################################################### 102*3e41d09dSXin LI0 string BCF\2\2 Binary Call Format (BCF) version 2.2 103*3e41d09dSXin LI# length of header text 104*3e41d09dSXin LI>&0x00 lelong >0 105*3e41d09dSXin LI# have header string 106*3e41d09dSXin LI>>&0x00 search ##samtoolsVersion= 107*3e41d09dSXin LI>>>&0x00 string x \b, generated by SAMtools version %s 108*3e41d09dSXin LI 109*3e41d09dSXin LI############################################################################### 110*3e41d09dSXin LI# VCF (Variant Call Format) 111*3e41d09dSXin LI# used by VCFtools (http://vcftools.sourceforge.net/) 112*3e41d09dSXin LI############################################################################### 113*3e41d09dSXin LI0 search ##fileformat=VCFv Variant Call Format (VCF) 114*3e41d09dSXin LI>&0 string x \b version %s 115*3e41d09dSXin LI 116*3e41d09dSXin LI############################################################################### 117*3e41d09dSXin LI# FASTQ 118*3e41d09dSXin LI# used by MAQ (http://maq.sourceforge.net/fastq.shtml) 119*3e41d09dSXin LI############################################################################### 120*3e41d09dSXin LI# XXX Broken? 121*3e41d09dSXin LI# @<seqname> 122*3e41d09dSXin LI#0 regex =^@[A-Za-z0-9_.:-]+\?\n 123*3e41d09dSXin LI# <seq> 124*3e41d09dSXin LI#>&1 regex =^[A-Za-z\n.~]++ 125*3e41d09dSXin LI# +[<seqname>] 126*3e41d09dSXin LI#>>&1 regex =^[A-Za-z0-9_.:-]*\?\n 127*3e41d09dSXin LI# <qual> 128*3e41d09dSXin LI#>>>&1 regex =^[!-~\n]+\n FASTQ 129*3e41d09dSXin LI 130*3e41d09dSXin LI############################################################################### 131*3e41d09dSXin LI# FASTA 132*3e41d09dSXin LI# used by FASTA (http://fasta.bioch.virginia.edu/fasta_www2/fasta_guide.pdf) 133*3e41d09dSXin LI############################################################################### 134*3e41d09dSXin LI#0 byte 0x3e 135*3e41d09dSXin LI# q>0 regex =^[>][!-~\t\ ]+$ 136*3e41d09dSXin LI# Amino Acid codes: [A-IK-Z*-]+ 137*3e41d09dSXin LI#>>1 regex !=[!-'Jj;:=?@^`|~\\] FASTA 138*3e41d09dSXin LI# IUPAC codes/gaps: [ACGTURYKMSWBDHVNX-]+ 139*3e41d09dSXin LI# not in IUPAC codes/gaps: [EFIJLOPQZ] 140*3e41d09dSXin LI#>>>1 regex !=[EFIJLOPQZefijlopqz] \b, with IUPAC nucleotide codes 141*3e41d09dSXin LI#>>>1 regex =^[EFIJLOPQZefijlopqz]+$ \b, with Amino Acid codes 142*3e41d09dSXin LI 143*3e41d09dSXin LI############################################################################### 144*3e41d09dSXin LI# SAM (Sequence Alignment/Map format) 145*3e41d09dSXin LI# used by SAMtools (http://samtools.sourceforge.net/SAM1.pdf) 146*3e41d09dSXin LI############################################################################### 147*3e41d09dSXin LI# Short-cut version to recognise SAM files with (optional) header at beginning 148*3e41d09dSXin LI############################################################################### 149*3e41d09dSXin LI0 string @HD\t 150*3e41d09dSXin LI>4 search VN: Sequence Alignment/Map (SAM), with header 151*3e41d09dSXin LI>>&0 regex [0-9.]+ \b version %s 152*3e41d09dSXin LI############################################################################### 153*3e41d09dSXin LI# Longer version to recognise SAM alignment lines using (many) regexes 154*3e41d09dSXin LI############################################################################### 155*3e41d09dSXin LI# SAM Alignment QNAME 156*3e41d09dSXin LI0 regex =^[!-?A-~]{1,255}(\t[^\t]+){11} 157*3e41d09dSXin LI# SAM Alignment FLAG 158*3e41d09dSXin LI>0 regex =^([^\t]+\t){1}[0-9]{1,5}\t 159*3e41d09dSXin LI# SAM Alignment RNAME 160*3e41d09dSXin LI>>0 regex =^([^\t]+\t){2}\\*|[^*=]*\t 161*3e41d09dSXin LI# SAM Alignment POS 162*3e41d09dSXin LI>>>0 regex =^([^\t]+\t){3}[0-9]{1,9}\t 163*3e41d09dSXin LI# SAM Alignment MAPQ 164*3e41d09dSXin LI>>>>0 regex =^([^\t]+\t){4}[0-9]{1,3}\t 165*3e41d09dSXin LI# SAM Alignment CIGAR 166*3e41d09dSXin LI>>>>>0 regex =\t\\*|([0-9]+[MIDNSHPX=])+)\t 167*3e41d09dSXin LI# SAM Alignment RNEXT 168*3e41d09dSXin LI>>>>>>0 regex =\t(\\*|=|[!-()+->?-~][!-~]*)\t 169*3e41d09dSXin LI# SAM Alignment PNEXT 170*3e41d09dSXin LI>>>>>>>0 regex =^([^\t]+\t){7}[0-9]{1,9}\t 171*3e41d09dSXin LI# SAM Alignment TLEN 172*3e41d09dSXin LI>>>>>>>>0 regex =\t[+-]{0,1}[0-9]{1,9}\t.*\t 173*3e41d09dSXin LI# SAM Alignment SEQ 174*3e41d09dSXin LI>>>>>>>>>0 regex =^([^\t]+\t){9}(\\*|[A-Za-z=.]+)\t 175*3e41d09dSXin LI# SAM Alignment QUAL 176*3e41d09dSXin LI>>>>>>>>>>0 regex =^([^\t]+\t){10}[!-~]+ Sequence Alignment/Map (SAM) 177*3e41d09dSXin LI>>>>>>>>>>>0 regex =^[@]HD\t.*VN: \b, with header 178*3e41d09dSXin LI>>>>>>>>>>>>&0 regex =[0-9.]+ \b version %s 179