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