libBigWig
bigWig.h
Go to the documentation of this file.
1 #ifndef LIBBIGWIG_H
2 #define LIBBIGWIG_H
3 
4 #include "bigWigIO.h"
5 #include "bwValues.h"
6 #include <inttypes.h>
7 #include <zlib.h>
8 
9 #ifdef __cplusplus
10 extern "C" {
11 #endif
12 
59 #define LIBBIGWIG_VERSION 0.4.5
60 
64 #ifdef NOCURL
65 #define LIBBIGWIG_CURL 0
66 #ifndef CURLTYPE_DEFINED
67 #define CURLTYPE_DEFINED
68 typedef int CURLcode;
69 typedef void CURL;
70 #endif
71 #else
72 #define LIBBIGWIG_CURL 1
73 #endif
74 
78 #define BIGWIG_MAGIC 0x888FFC26
79 
82 #define BIGBED_MAGIC 0x8789F2EB
83 
86 #define CIRTREE_MAGIC 0x78ca8c91
87 
90 #define IDX_MAGIC 0x2468ace0
91 
94 #define DEFAULT_nCHILDREN 64
95 
98 #define DEFAULT_BLOCKSIZE 32768
99 
105  mean = 0,
106  average = 0,
107  stdev = 1,
108  dev = 1,
109  max = 2,
110  min = 3,
111  cov = 4,
112  coverage = 4,
113  sum = 5
114 };
115 
116 //Should hide this from end users
122 typedef struct {
123  uint32_t *level;
124  //There's 4 bytes of padding between these
125  uint64_t *dataOffset;
126  uint64_t *indexOffset;
128 } bwZoomHdr_t;
129 
135 typedef struct {
136  uint16_t version;
137  uint16_t nLevels;
138  uint64_t ctOffset;
139  uint64_t dataOffset;
140  uint64_t indexOffset;
141  uint16_t fieldCount;
142  uint16_t definedFieldCount;
143  uint64_t sqlOffset;
144  uint64_t summaryOffset;
145  uint32_t bufSize;
146  uint64_t extensionOffset;
148  //total Summary
149  uint64_t nBasesCovered;
150  double minVal;
151  double maxVal;
152  double sumData;
153  double sumSquared;
154 } bigWigHdr_t;
155 
156 //Should probably replace this with a hash
160 typedef struct {
161  int64_t nKeys;
162  char **chrom;
163  uint32_t *len;
164 } chromList_t;
165 
166 //TODO remove from bigWig.h
168 typedef struct bwLL bwLL;
169 struct bwLL {
170  bwRTreeNode_t *node;
171  struct bwLL *next;
172 };
173 typedef struct bwZoomBuffer_t bwZoomBuffer_t;
174 struct bwZoomBuffer_t { //each individual entry takes 32 bytes
175  void *p;
176  uint32_t l, m;
177  struct bwZoomBuffer_t *next;
178 };
180 
185 typedef struct {
186  uint64_t nBlocks;
187  uint32_t blockSize;
188  uint64_t nEntries;
189  uint64_t runningWidthSum;
190  uint32_t tid;
191  uint32_t start;
192  uint32_t end;
193  uint32_t span;
194  uint32_t step;
195  uint8_t ltype;
196  uint32_t l;
197  void *p;
200  bwZoomBuffer_t **firstZoomBuffer;
201  bwZoomBuffer_t **lastZoomBuffer;
202  uint64_t *nNodes;
203  uLongf compressPsz;
204  void *compressP;
206 
210 typedef struct {
216  int isWrite;
217  int type;
218 } bigWigFile_t;
219 
223 typedef struct {
224  uint32_t l;
225  uint32_t m;
226  uint32_t *start;
227  uint32_t *end;
228  float *value;
230 
234 typedef struct {
235  uint32_t l;
236  uint32_t m;
237  uint32_t *start;
238  uint32_t *end;
239  char **str;
241 
246 typedef struct {
248  uint32_t tid;
249  uint32_t start;
250  uint32_t end;
251  uint64_t offset;
254  void *blocks;
257  void *data;
259 
267 int bwInit(size_t bufSize);
268 
273 void bwCleanup(void);
274 
282 int bwIsBigWig(char *fname, CURLcode (*callBack)(CURL*));
283 
291 int bbIsBigBed(char *fname, CURLcode (*callBack)(CURL*));
292 
301 bigWigFile_t *bwOpen(char *fname, CURLcode (*callBack)(CURL*), const char* mode);
302 
310 bigWigFile_t *bbOpen(char *fname, CURLcode (*callBack)(CURL*));
311 
320 char *bbGetSQL(bigWigFile_t *fp);
321 
327 void bwClose(bigWigFile_t *fp);
328 
329 /*******************************************************************************
330 *
331 * The following are in bwStats.c
332 *
333 *******************************************************************************/
334 
342 uint32_t bwGetTid(bigWigFile_t *fp, char *chrom);
343 
350 
357 
370 bwOverlappingIntervals_t *bwGetOverlappingIntervals(bigWigFile_t *fp, char *chrom, uint32_t start, uint32_t end);
371 
384 bbOverlappingEntries_t *bbGetOverlappingEntries(bigWigFile_t *fp, char *chrom, uint32_t start, uint32_t end, int withString);
385 
400 bwOverlapIterator_t *bwOverlappingIntervalsIterator(bigWigFile_t *fp, char *chrom, uint32_t start, uint32_t end, uint32_t blocksPerIteration);
401 
418 bwOverlapIterator_t *bbOverlappingEntriesIterator(bigWigFile_t *fp, char *chrom, uint32_t start, uint32_t end, int withString, uint32_t blocksPerIteration);
419 
428 
434 
448 bwOverlappingIntervals_t *bwGetValues(bigWigFile_t *fp, char *chrom, uint32_t start, uint32_t end, int includeNA);
449 
462 double *bwStats(bigWigFile_t *fp, char *chrom, uint32_t start, uint32_t end, uint32_t nBins, enum bwStatsType type);
463 
476 double *bwStatsFromFull(bigWigFile_t *fp, char *chrom, uint32_t start, uint32_t end, uint32_t nBins, enum bwStatsType type);
477 
478 //Writer functions
479 
487 int bwCreateHdr(bigWigFile_t *fp, int32_t maxZooms);
488 
497 chromList_t *bwCreateChromList(char **chroms, uint32_t *lengths, int64_t n);
498 
506 int bwWriteHdr(bigWigFile_t *bw);
507 
524 int bwAddIntervals(bigWigFile_t *fp, char **chrom, uint32_t *start, uint32_t *end, float *values, uint32_t n);
525 
538 int bwAppendIntervals(bigWigFile_t *fp, uint32_t *start, uint32_t *end, float *values, uint32_t n);
539 
556 int bwAddIntervalSpans(bigWigFile_t *fp, char *chrom, uint32_t *start, uint32_t span, float *values, uint32_t n);
557 
569 int bwAppendIntervalSpans(bigWigFile_t *fp, uint32_t *start, float *values, uint32_t n);
570 
588 int bwAddIntervalSpanSteps(bigWigFile_t *fp, char *chrom, uint32_t start, uint32_t span, uint32_t step, float *values, uint32_t n);
589 
600 int bwAppendIntervalSpanSteps(bigWigFile_t *fp, float *values, uint32_t n);
601 
602 #ifdef __cplusplus
603 }
604 #endif
605 
606 #endif // LIBBIGWIG_H
bigWigHdr_t::minVal
double minVal
Definition: bigWig.h:150
bwRTreeNode_t
A node within an R-tree holding the index for data.
Definition: bwValues.h:20
bigWigHdr_t::maxVal
double maxVal
Definition: bigWig.h:151
mean
@ mean
Definition: bigWig.h:105
bwStatsFromFull
double * bwStatsFromFull(bigWigFile_t *fp, char *chrom, uint32_t start, uint32_t end, uint32_t nBins, enum bwStatsType type)
Determines per-interval bigWig statistics Can determine mean/min/max/coverage/standard deviation of v...
Definition: bwStats.c:485
bwGetValues
bwOverlappingIntervals_t * bwGetValues(bigWigFile_t *fp, char *chrom, uint32_t start, uint32_t end, int includeNA)
Return all per-base bigWig values in a given interval. Given an interval (e.g., chr1:0-100),...
Definition: bwValues.c:713
bigWigFile_t::idx
bwRTree_t * idx
Definition: bigWig.h:214
bigWigHdr_t::summaryOffset
uint64_t summaryOffset
Definition: bigWig.h:144
bwAppendIntervalSpanSteps
int bwAppendIntervalSpanSteps(bigWigFile_t *fp, float *values, uint32_t n)
Append to a previous block of fixed-step entries. If you previously used bwAddIntervalSpanSteps(),...
Definition: bwWrite.c:552
bwZoomHdr_t::idx
bwRTree_t ** idx
Definition: bigWig.h:127
bwWriteBuffer_t::lastZoomBuffer
bwZoomBuffer_t ** lastZoomBuffer
Definition: bigWig.h:201
bwOverlapIterator_t::tid
uint32_t tid
Definition: bigWig.h:248
cov
@ cov
Definition: bigWig.h:111
bwWriteBuffer_t::end
uint32_t end
Definition: bigWig.h:192
bwWriteBuffer_t::nBlocks
uint64_t nBlocks
Definition: bigWig.h:186
bwOverlapIterator_t::blocks
void * blocks
Definition: bigWig.h:254
bwWriteBuffer_t::compressP
void * compressP
Definition: bigWig.h:204
bbOverlappingEntriesIterator
bwOverlapIterator_t * bbOverlappingEntriesIterator(bigWigFile_t *fp, char *chrom, uint32_t start, uint32_t end, int withString, uint32_t blocksPerIteration)
Creates an iterator over entries in a bigBed file Iterators can be traversed with bwIteratorNext() an...
Definition: bwValues.c:615
bigWigHdr_t::fieldCount
uint16_t fieldCount
Definition: bigWig.h:141
bwWriteBuffer_t::currentIndexNode
bwLL * currentIndexNode
Definition: bigWig.h:199
bbOverlappingEntries_t::str
char ** str
Definition: bigWig.h:239
max
@ max
Definition: bigWig.h:109
bwOverlapIterator_t::intervals
bwOverlappingIntervals_t * intervals
Definition: bigWig.h:255
bbOverlappingEntries_t
Holds interval:str associations.
Definition: bigWig.h:234
bigWigHdr_t::zoomHdrs
bwZoomHdr_t * zoomHdrs
Definition: bigWig.h:147
doesNotExist
@ doesNotExist
Definition: bigWig.h:104
bwGetOverlappingIntervals
bwOverlappingIntervals_t * bwGetOverlappingIntervals(bigWigFile_t *fp, char *chrom, uint32_t start, uint32_t end)
Return bigWig entries overlapping an interval. Find all bigWig entries overlapping a range and return...
Definition: bwValues.c:563
bwOverlapIterator_t::entries
bbOverlappingEntries_t * entries
Definition: bigWig.h:256
bbOverlappingEntries_t::m
uint32_t m
Definition: bigWig.h:236
bwIsBigWig
int bwIsBigWig(char *fname, CURLcode(*callBack)(CURL *))
Determine if a file is a bigWig file. This function will quickly check either local or remote files t...
Definition: bwRead.c:302
min
@ min
Definition: bigWig.h:110
bwOverlapIterator_t
A structure to hold iterations One of intervals and entries should be used to access records from big...
Definition: bigWig.h:246
bwRTree_t
Definition: bwValues.h:39
bwIteratorNext
bwOverlapIterator_t * bwIteratorNext(bwOverlapIterator_t *iter)
Traverses to the entries/intervals in the next group of blocks.
Definition: bwValues.c:652
bbOverlappingEntries_t::l
uint32_t l
Definition: bigWig.h:235
average
@ average
Definition: bigWig.h:106
bwWriteBuffer_t::tid
uint32_t tid
Definition: bigWig.h:190
bwCreateChromList
chromList_t * bwCreateChromList(char **chroms, uint32_t *lengths, int64_t n)
Take a list of chromosome names and lengths and return a pointer to a chromList_t This MUST be run be...
Definition: bwWrite.c:22
bigWigHdr_t::sumData
double sumData
Definition: bigWig.h:152
bwWriteBuffer_t::start
uint32_t start
Definition: bigWig.h:191
bigWigHdr_t::nLevels
uint16_t nLevels
Definition: bigWig.h:137
bwInit
int bwInit(size_t bufSize)
Initializes curl and global variables. This MUST be called before other functions (at least if you wa...
Definition: bwRead.c:38
bigWigHdr_t::nBasesCovered
uint64_t nBasesCovered
Definition: bigWig.h:149
chromList_t
Holds the chromosomes and their lengths.
Definition: bigWig.h:160
bwWriteBuffer_t::ltype
uint8_t ltype
Definition: bigWig.h:195
bwAppendIntervalSpans
int bwAppendIntervalSpans(bigWigFile_t *fp, uint32_t *start, float *values, uint32_t n)
Append to a previous block of variable-step entries. If you previously used bwAddIntervalSpans(),...
Definition: bwWrite.c:495
bbOverlappingEntries_t::end
uint32_t * end
Definition: bigWig.h:238
bwWriteBuffer_t::l
uint32_t l
Definition: bigWig.h:196
bbDestroyOverlappingEntries
void bbDestroyOverlappingEntries(bbOverlappingEntries_t *o)
Frees space allocated by bbGetOverlappingEntries
Definition: bwValues.c:333
bwOverlapIterator_t::data
void * data
Definition: bigWig.h:257
bigWigHdr_t::dataOffset
uint64_t dataOffset
Definition: bigWig.h:139
bbIsBigBed
int bbIsBigBed(char *fname, CURLcode(*callBack)(CURL *))
Determine is a file is a bigBed file. This function will quickly check either local or remote files t...
Definition: bwRead.c:332
bigWigIO.h
bwOverlapIterator_t::bw
bigWigFile_t * bw
Definition: bigWig.h:247
bwWriteBuffer_t::step
uint32_t step
Definition: bigWig.h:194
bwAddIntervals
int bwAddIntervals(bigWigFile_t *fp, char **chrom, uint32_t *start, uint32_t *end, float *values, uint32_t n)
Write a new block of bedGraph-like intervals to a bigWig file Adds entries of the form: chromosome st...
Definition: bwWrite.c:374
bwWriteBuffer_t
This is only needed for writing bigWig files (and won't be created otherwise) This should be removed ...
Definition: bigWig.h:185
sum
@ sum
Definition: bigWig.h:113
bwWriteBuffer_t::firstZoomBuffer
bwZoomBuffer_t ** firstZoomBuffer
Definition: bigWig.h:200
bwOverlappingIntervals_t
Holds interval:value associations.
Definition: bigWig.h:223
bwWriteBuffer_t::blockSize
uint32_t blockSize
Definition: bigWig.h:187
bwAppendIntervals
int bwAppendIntervals(bigWigFile_t *fp, uint32_t *start, uint32_t *end, float *values, uint32_t n)
Append bedGraph-like intervals to a previous block of bedGraph-like intervals in a bigWig file....
Definition: bwWrite.c:434
bwWriteBuffer_t::p
void * p
Definition: bigWig.h:197
bigWigHdr_t::bufSize
uint32_t bufSize
Definition: bigWig.h:145
bwOverlappingIntervals_t::value
float * value
Definition: bigWig.h:228
bwWriteBuffer_t::nEntries
uint64_t nEntries
Definition: bigWig.h:188
bwOpen
bigWigFile_t * bwOpen(char *fname, CURLcode(*callBack)(CURL *), const char *mode)
Opens a local or remote bigWig file. This will open a local or remote bigWig file....
Definition: bwRead.c:345
bwCleanup
void bwCleanup(void)
The counterpart to bwInit, this cleans up curl.
Definition: bwRead.c:52
bigWigHdr_t::version
uint16_t version
Definition: bigWig.h:136
bigWigHdr_t::sumSquared
double sumSquared
Definition: bigWig.h:153
bwZoomHdr_t::indexOffset
uint64_t * indexOffset
Definition: bigWig.h:126
bigWigFile_t::URL
URL_t * URL
Definition: bigWig.h:211
chromList_t::len
uint32_t * len
Definition: bigWig.h:163
bigWigFile_t::cl
chromList_t * cl
Definition: bigWig.h:213
stdev
@ stdev
Definition: bigWig.h:107
bigWigFile_t::hdr
bigWigHdr_t * hdr
Definition: bigWig.h:212
bwWriteBuffer_t::nNodes
uint64_t * nNodes
Definition: bigWig.h:202
bwWriteBuffer_t::runningWidthSum
uint64_t runningWidthSum
Definition: bigWig.h:189
bwClose
void bwClose(bigWigFile_t *fp)
Closes a bigWigFile_t and frees up allocated memory This closes both bigWig and bigBed files.
Definition: bwRead.c:289
bigWigHdr_t::ctOffset
uint64_t ctOffset
Definition: bigWig.h:138
bbOpen
bigWigFile_t * bbOpen(char *fname, CURLcode(*callBack)(CURL *))
Opens a local or remote bigBed file. This will open a local or remote bigBed file....
Definition: bwRead.c:397
bigWigHdr_t::sqlOffset
uint64_t sqlOffset
Definition: bigWig.h:143
chromList_t::nKeys
int64_t nKeys
Definition: bigWig.h:161
bwGetTid
uint32_t bwGetTid(bigWigFile_t *fp, char *chrom)
Converts between chromosome name and ID.
Definition: bwValues.c:284
bwZoomHdr_t
BigWig files have multiple "zoom" levels, each of which has its own header. This hold those headers.
Definition: bigWig.h:122
bwWriteHdr
int bwWriteHdr(bigWigFile_t *bw)
Write a the header to a bigWig file. You must have already opened the output file,...
Definition: bwWrite.c:187
bigWigHdr_t::indexOffset
uint64_t indexOffset
Definition: bigWig.h:140
bwOverlappingIntervalsIterator
bwOverlapIterator_t * bwOverlappingIntervalsIterator(bigWigFile_t *fp, char *chrom, uint32_t start, uint32_t end, uint32_t blocksPerIteration)
Creates an iterator over intervals in a bigWig file Iterators can be traversed with bwIteratorNext() ...
Definition: bwValues.c:587
bwOverlappingIntervals_t::end
uint32_t * end
Definition: bigWig.h:227
bigWigFile_t::writeBuffer
bwWriteBuffer_t * writeBuffer
Definition: bigWig.h:215
bigWigHdr_t
The header section of a bigWig file.
Definition: bigWig.h:135
URL_t
This structure holds the file pointers and buffers needed for raw access to local and remote files.
Definition: bigWigIO.h:38
bwWriteBuffer_t::firstIndexNode
bwLL * firstIndexNode
Definition: bigWig.h:198
bwOverlapIterator_t::withString
int withString
Definition: bigWig.h:253
bwOverlappingIntervals_t::m
uint32_t m
Definition: bigWig.h:225
bigWigHdr_t::definedFieldCount
uint16_t definedFieldCount
Definition: bigWig.h:142
bwOverlappingIntervals_t::l
uint32_t l
Definition: bigWig.h:224
bigWigFile_t::isWrite
int isWrite
Definition: bigWig.h:216
bwZoomHdr_t::level
uint32_t * level
Definition: bigWig.h:123
bwOverlappingIntervals_t::start
uint32_t * start
Definition: bigWig.h:226
bwOverlapIterator_t::end
uint32_t end
Definition: bigWig.h:250
bwOverlapIterator_t::blocksPerIteration
uint32_t blocksPerIteration
Definition: bigWig.h:252
bwAddIntervalSpanSteps
int bwAddIntervalSpanSteps(bigWigFile_t *fp, char *chrom, uint32_t start, uint32_t span, uint32_t step, float *values, uint32_t n)
Add a new block of fixed-step entries to a bigWig file Adds entries for the form value to the file....
Definition: bwWrite.c:520
bwValues.h
bbOverlappingEntries_t::start
uint32_t * start
Definition: bigWig.h:237
bbGetSQL
char * bbGetSQL(bigWigFile_t *fp)
Returns a string containing the SQL entry (or NULL). The "auto SQL" field contains the names and valu...
Definition: bwRead.c:315
coverage
@ coverage
Definition: bigWig.h:112
dev
@ dev
Definition: bigWig.h:108
bwAddIntervalSpans
int bwAddIntervalSpans(bigWigFile_t *fp, char *chrom, uint32_t *start, uint32_t span, float *values, uint32_t n)
Add a new block of variable-step entries to a bigWig file Adds entries for the form chromosome start ...
Definition: bwWrite.c:462
bwCreateHdr
int bwCreateHdr(bigWigFile_t *fp, int32_t maxZooms)
Create a largely empty bigWig header Every bigWig file has a header, this creates the template for on...
Definition: bwWrite.c:56
bbGetOverlappingEntries
bbOverlappingEntries_t * bbGetOverlappingEntries(bigWigFile_t *fp, char *chrom, uint32_t start, uint32_t end, int withString)
Return bigBed entries overlapping an interval. Find all bigBed entries overlapping a range and return...
Definition: bwValues.c:575
bwIteratorDestroy
void bwIteratorDestroy(bwOverlapIterator_t *iter)
Destroys a bwOverlapIterator_t.
Definition: bwValues.c:643
bwOverlapIterator_t::start
uint32_t start
Definition: bigWig.h:249
bigWigFile_t::type
int type
Definition: bigWig.h:217
bigWigFile_t
A structure that holds everything needed to access a bigWig file.
Definition: bigWig.h:210
bwZoomHdr_t::dataOffset
uint64_t * dataOffset
Definition: bigWig.h:125
bwWriteBuffer_t::compressPsz
uLongf compressPsz
Definition: bigWig.h:203
bigWigHdr_t::extensionOffset
uint64_t extensionOffset
Definition: bigWig.h:146
chromList_t::chrom
char ** chrom
Definition: bigWig.h:162
bwStats
double * bwStats(bigWigFile_t *fp, char *chrom, uint32_t start, uint32_t end, uint32_t nBins, enum bwStatsType type)
Determines per-interval bigWig statistics Can determine mean/min/max/coverage/standard deviation of v...
Definition: bwStats.c:530
bwOverlapIterator_t::offset
uint64_t offset
Definition: bigWig.h:251
bwWriteBuffer_t::span
uint32_t span
Definition: bigWig.h:193
bwDestroyOverlappingIntervals
void bwDestroyOverlappingIntervals(bwOverlappingIntervals_t *o)
Frees space allocated by bwGetOverlappingIntervals
Definition: bwValues.c:325
bwStatsType
bwStatsType
Definition: bigWig.h:103