diff --git a/CHANGELOG.md b/CHANGELOG.md index f4026ce..c9460eb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,12 +1,12 @@ - -## [1.0.40](https://github.com/GMOD/bam-js/compare/v1.0.39...v1.0.40) (2020-07-30) +- Add htsget example + +## [1.0.40](https://github.com/GMOD/bam-js/compare/v1.0.39...v1.0.40) (2020-07-30) -## [1.0.39](https://github.com/GMOD/bam-js/compare/v1.0.38...v1.0.39) (2020-07-30) - +## [1.0.39](https://github.com/GMOD/bam-js/compare/v1.0.38...v1.0.39) (2020-07-30) - Don't use origin master in the follow-tags postpublish command for cleaner version publishing diff --git a/README.md b/README.md index a9cdbe8..d1e4dac 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,6 @@ [![Build Status](https://img.shields.io/travis/GMOD/bam-js/master.svg?style=flat-square)](https://travis-ci.org/GMOD/bam-js) [![Coverage Status](https://img.shields.io/codecov/c/github/GMOD/bam-js/master.svg?style=flat-square)](https://codecov.io/gh/GMOD/bam-js/branch/master) - ## Install $ npm install --save @gmod/bam @@ -11,11 +10,11 @@ ## Usage ```js -const {BamFile} = require('@gmod/bam'); // or import {BamFile} from '@gmod/bam' +const { BamFile } = require('@gmod/bam') // or import {BamFile} from '@gmod/bam' const t = new BamFile({ - bamPath: 'test.bam', -}); + bamPath: 'test.bam', +}) var header = await t.getHeader() @@ -25,38 +24,51 @@ var records = await t.getRecordsForRange('ctgA', 0, 49999) Input are 0-based half-open coordinates (note: not the same as samtools view coordinate inputs!) -## Documentation +## Usage with htsget +Since 1.0.41 we support htsget! -### BAM constructor +Here is a small code snippet for this +```js +const { HtsgetFile } = require('@gmod/bam') + +const ti = new HtsgetFile({ + baseUrl: 'http://htsnexus.rnd.dnanex.us/v1/reads', + trackId: 'BroadHiSeqX_b37/NA12878', +}) +await ti.getHeader() +const records = await ti.getRecordsForRange(1, 2000000, 2000001) +``` + +## Documentation + +### BAM constructor The BAM class constructor accepts arguments -* bamPath/baiUrl/bamFilehandle - a string file path to a local file or a class object with a read method -* csiPath/csiUrl/csiFilehandle - a CSI index for the BAM file, required for long chromosomes greater than 2^29 in length -* baiPath/baiUrl/baiFilehandle - a BAI index for the BAM file -* fetchSizeLimit - total size of the number of chunks being fetched at once. default: ~50MB -* chunkSizeLimit - size limit on any individual chunk. default: ~10MB -* cacheSize - limit on number of chunks to cache. default: 50 +- bamPath/baiUrl/bamFilehandle - a string file path to a local file or a class object with a read method +- csiPath/csiUrl/csiFilehandle - a CSI index for the BAM file, required for long chromosomes greater than 2^29 in length +- baiPath/baiUrl/baiFilehandle - a BAI index for the BAM file +- fetchSizeLimit - total size of the number of chunks being fetched at once. default: ~50MB +- chunkSizeLimit - size limit on any individual chunk. default: ~10MB +- cacheSize - limit on number of chunks to cache. default: 50 Note: filehandles implement the Filehandle interface from https://www.npmjs.com/package/generic-filehandle. This module offers the path and url arguments as convenience methods for supplying the LocalFile and RemoteFile - ### async getRecordsForRange(refName, start, end, opts) -* refName - a string for the chrom to fetch from -* start - a 0 based half open start coordinate -* end - a 0 based half open end coordinate -* opts.signal - an AbortSignal to indicate stop processing -* opts.viewAsPairs - re-dispatches requests to find mate pairs. default: false -* opts.pairAcrossChr - control the viewAsPairs option behavior to pair across chromosomes. default: false -* opts.maxInsertSize - control the viewAsPairs option behavior to limit distance within a chromosome to fetch. default: 200kb - +- refName - a string for the chrom to fetch from +- start - a 0 based half open start coordinate +- end - a 0 based half open end coordinate +- opts.signal - an AbortSignal to indicate stop processing +- opts.viewAsPairs - re-dispatches requests to find mate pairs. default: false +- opts.pairAcrossChr - control the viewAsPairs option behavior to pair across chromosomes. default: false +- opts.maxInsertSize - control the viewAsPairs option behavior to limit distance within a chromosome to fetch. default: 200kb -### async *streamRecordsForRange(refName, start, end, opts) +### async \*streamRecordsForRange(refName, start, end, opts) -This is a async generator function that takes the same signature as getRecordsForRange but results can be processed using +This is a async generator function that takes the same signature as getRecordsForRange but results can be processed using for await(const chunk of file.streamRecordsForRange(refName, start, end, opts)) { } @@ -65,22 +77,21 @@ The getRecordsForRange simply wraps this process by concatenating chunks into an ### async indexCov(refName, start, end) -* refName - a string for the chrom to fetch from -* start - a 0 based half open start coordinate (optional) -* end - a 0 based half open end coordinate (optional) +- refName - a string for the chrom to fetch from +- start - a 0 based half open start coordinate (optional) +- end - a 0 based half open end coordinate (optional) Returns features of the form {start, end, score} containing estimated feature density across 16kb windows in the genome - ### async lineCount(refName) -* refName - a string for the chrom to fetch from +- refName - a string for the chrom to fetch from Returns number of features on refName, uses special pseudo-bin from the BAI/CSI index (e.g. bin 37450 from bai, returning n_mapped from SAM spec pdf) or -1 if refName not exist in sample ### async hasRefSeq(refName) -* refName - a string for the chrom to check +- refName - a string for the chrom to check Returns whether we have this refName in the sample @@ -121,14 +132,17 @@ Example BAM tags such as MD can be obtained via feature.get('MD') - + A full list of tags that can be obtained can be obtained via feature._tags() - - + The feature format may change in future versions to be more raw data records, but this will be a major version bump ## License MIT © [Colin Diesh](https://github.com/cmdcolin) + +``` + +```