jpayne@69
|
1 # cython: language_level=3
|
jpayne@69
|
2 ###############################################################################
|
jpayne@69
|
3 ###############################################################################
|
jpayne@69
|
4 ## Cython wrapper for htslib VCF/BCF reader/writer
|
jpayne@69
|
5 ###############################################################################
|
jpayne@69
|
6 #
|
jpayne@69
|
7 # The MIT License
|
jpayne@69
|
8 #
|
jpayne@69
|
9 # Copyright (c) 2015, 2016 Kevin Jacobs (jacobs@bioinformed.com)
|
jpayne@69
|
10 #
|
jpayne@69
|
11 # Permission is hereby granted, free of charge, to any person obtaining a
|
jpayne@69
|
12 # copy of this software and associated documentation files (the "Software"),
|
jpayne@69
|
13 # to deal in the Software without restriction, including without limitation
|
jpayne@69
|
14 # the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
jpayne@69
|
15 # and/or sell copies of the Software, and to permit persons to whom the
|
jpayne@69
|
16 # Software is furnished to do so, subject to the following conditions:
|
jpayne@69
|
17 #
|
jpayne@69
|
18 # The above copyright notice and this permission notice shall be included in
|
jpayne@69
|
19 # all copies or substantial portions of the Software.
|
jpayne@69
|
20 #
|
jpayne@69
|
21 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
jpayne@69
|
22 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
jpayne@69
|
23 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
jpayne@69
|
24 # THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
jpayne@69
|
25 # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
jpayne@69
|
26 # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
jpayne@69
|
27 # DEALINGS IN THE SOFTWARE.
|
jpayne@69
|
28 #
|
jpayne@69
|
29 ###############################################################################
|
jpayne@69
|
30
|
jpayne@69
|
31 from libc.stdint cimport int8_t, int16_t, int32_t, int64_t
|
jpayne@69
|
32 from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t
|
jpayne@69
|
33 from libc.stdlib cimport malloc, calloc, realloc, free
|
jpayne@69
|
34 from libc.string cimport memcpy, memcmp, memmove, strncpy, strlen, strdup
|
jpayne@69
|
35
|
jpayne@69
|
36 from pysam.libchtslib cimport *
|
jpayne@69
|
37
|
jpayne@69
|
38
|
jpayne@69
|
39 cdef class VariantHeader(object):
|
jpayne@69
|
40 cdef bcf_hdr_t *ptr
|
jpayne@69
|
41
|
jpayne@69
|
42 cdef _add_sample(self, name)
|
jpayne@69
|
43 cdef _hdr_sync(self)
|
jpayne@69
|
44 cdef _subset_samples(self, include_samples)
|
jpayne@69
|
45
|
jpayne@69
|
46
|
jpayne@69
|
47 cdef class VariantHeaderRecord(object):
|
jpayne@69
|
48 cdef readonly VariantHeader header
|
jpayne@69
|
49 cdef bcf_hrec_t *ptr
|
jpayne@69
|
50
|
jpayne@69
|
51
|
jpayne@69
|
52 cdef class VariantHeaderRecords(object):
|
jpayne@69
|
53 cdef readonly VariantHeader header
|
jpayne@69
|
54
|
jpayne@69
|
55
|
jpayne@69
|
56 cdef class VariantHeaderContigs(object):
|
jpayne@69
|
57 cdef readonly VariantHeader header
|
jpayne@69
|
58
|
jpayne@69
|
59
|
jpayne@69
|
60 cdef class VariantHeaderSamples(object):
|
jpayne@69
|
61 cdef readonly VariantHeader header
|
jpayne@69
|
62
|
jpayne@69
|
63
|
jpayne@69
|
64 cdef class VariantContig(object):
|
jpayne@69
|
65 cdef readonly VariantHeader header
|
jpayne@69
|
66 cdef int id
|
jpayne@69
|
67
|
jpayne@69
|
68
|
jpayne@69
|
69 cdef class VariantMetadata(object):
|
jpayne@69
|
70 cdef readonly VariantHeader header
|
jpayne@69
|
71 cdef int type
|
jpayne@69
|
72 cdef int id
|
jpayne@69
|
73
|
jpayne@69
|
74
|
jpayne@69
|
75 cdef class VariantHeaderMetadata(object):
|
jpayne@69
|
76 cdef readonly VariantHeader header
|
jpayne@69
|
77 cdef int32_t type
|
jpayne@69
|
78
|
jpayne@69
|
79
|
jpayne@69
|
80 cdef class VariantRecord(object):
|
jpayne@69
|
81 cdef readonly VariantHeader header
|
jpayne@69
|
82 cdef bcf1_t *ptr
|
jpayne@69
|
83
|
jpayne@69
|
84
|
jpayne@69
|
85 cdef class VariantRecordFilter(object):
|
jpayne@69
|
86 cdef VariantRecord record
|
jpayne@69
|
87
|
jpayne@69
|
88
|
jpayne@69
|
89 cdef class VariantRecordFormat(object):
|
jpayne@69
|
90 cdef VariantRecord record
|
jpayne@69
|
91
|
jpayne@69
|
92
|
jpayne@69
|
93 cdef class VariantRecordInfo(object):
|
jpayne@69
|
94 cdef VariantRecord record
|
jpayne@69
|
95
|
jpayne@69
|
96
|
jpayne@69
|
97 cdef class VariantRecordSamples(object):
|
jpayne@69
|
98 cdef VariantRecord record
|
jpayne@69
|
99
|
jpayne@69
|
100
|
jpayne@69
|
101 cdef class VariantRecordSample(object):
|
jpayne@69
|
102 cdef VariantRecord record
|
jpayne@69
|
103 cdef readonly int32_t index
|
jpayne@69
|
104
|
jpayne@69
|
105
|
jpayne@69
|
106 cdef class BaseIndex(object):
|
jpayne@69
|
107 cdef tuple refs
|
jpayne@69
|
108 cdef dict refmap
|
jpayne@69
|
109
|
jpayne@69
|
110
|
jpayne@69
|
111 cdef class BCFIndex(BaseIndex):
|
jpayne@69
|
112 cdef readonly VariantHeader header
|
jpayne@69
|
113 cdef hts_idx_t *ptr
|
jpayne@69
|
114
|
jpayne@69
|
115
|
jpayne@69
|
116 cdef class TabixIndex(BaseIndex):
|
jpayne@69
|
117 cdef tbx_t *ptr
|
jpayne@69
|
118
|
jpayne@69
|
119
|
jpayne@69
|
120 cdef class BaseIterator(object):
|
jpayne@69
|
121 cdef VariantFile bcf
|
jpayne@69
|
122 cdef hts_itr_t *iter
|
jpayne@69
|
123
|
jpayne@69
|
124
|
jpayne@69
|
125 cdef class BCFIterator(BaseIterator):
|
jpayne@69
|
126 cdef BCFIndex index
|
jpayne@69
|
127
|
jpayne@69
|
128
|
jpayne@69
|
129 cdef class TabixIterator(BaseIterator):
|
jpayne@69
|
130 cdef TabixIndex index
|
jpayne@69
|
131 cdef kstring_t line_buffer
|
jpayne@69
|
132
|
jpayne@69
|
133
|
jpayne@69
|
134 cdef class VariantFile(HTSFile):
|
jpayne@69
|
135 cdef readonly VariantHeader header
|
jpayne@69
|
136 cdef readonly BaseIndex index
|
jpayne@69
|
137
|
jpayne@69
|
138 cdef readonly bint drop_samples # true if sample information is to be ignored
|
jpayne@69
|
139
|
jpayne@69
|
140 # FIXME: Temporary, use htsFormat when it is available
|
jpayne@69
|
141 cdef readonly bint is_reading # true if file has begun reading records
|
jpayne@69
|
142 cdef readonly bint header_written # true if header has already been written
|
jpayne@69
|
143
|
jpayne@69
|
144 cpdef int write(self, VariantRecord record) except -1
|