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