[med-svn] [Git][med-team/bwa][upstream] New upstream version 0.7.18
Michael R. Crusoe (@crusoe)
gitlab at salsa.debian.org
Sat Sep 7 13:12:31 BST 2024
Michael R. Crusoe pushed to branch upstream at Debian Med / bwa
Commits:
3ed9d812 by Michael R. Crusoe at 2024-09-07T13:38:07+02:00
New upstream version 0.7.18
- - - - -
26 changed files:
- + .github/workflows/ci.yaml
- − .travis.yml
- Makefile
- NEWS.md
- README.md
- bntseq.c
- bntseq.h
- bwa.1
- bwa.c
- bwa.h
- bwakit/bwa-postalt.js
- bwamem.c
- bwamem.h
- bwamem_extra.c
- bwamem_pair.c
- bwt.h
- bwtindex.c
- + code_of_conduct.md
- fastmap.c
- ksw.c
- main.c
- + neon_sse.h
- rle.h
- + scalar_sse.h
- utils.c
- utils.h
Changes:
=====================================
.github/workflows/ci.yaml
=====================================
@@ -0,0 +1,46 @@
+name: CI
+
+on:
+ push:
+ branches:
+ - master
+ pull_request:
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ compiler: [gcc, clang]
+
+ steps:
+ - name: Checkout bwa
+ uses: actions/checkout at v3
+
+ - name: Compile with ${{ matrix.compiler }}
+ run: make CC=${{ matrix.compiler }}
+
+ build-aarch64:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ compiler: [gcc, clang]
+
+ steps:
+ - name: Checkout bwa
+ uses: actions/checkout at v3
+
+ - name: Compile with ${{ matrix.compiler }}
+ uses: uraimo/run-on-arch-action at v2
+ with:
+ arch: aarch64
+ distro: ubuntu20.04
+ githubToken: ${{ github.token }}
+ dockerRunArgs: |
+ --volume "${PWD}:/bwa"
+ install: |
+ apt-get update -q -y
+ apt-get install -q -y make ${{ matrix.compiler }} zlib1g-dev
+ run: |
+ cd /bwa
+ make CC=${{ matrix.compiler }}
=====================================
.travis.yml deleted
=====================================
@@ -1,5 +0,0 @@
-language: c
-compiler:
- - gcc
- - clang
-script: make
=====================================
Makefile
=====================================
@@ -22,15 +22,15 @@ endif
.SUFFIXES:.c .o .cc
.c.o:
- $(CC) -c $(CFLAGS) $(DFLAGS) $(INCLUDES) $< -o $@
+ $(CC) -c $(CFLAGS) $(DFLAGS) $(INCLUDES) $(CPPFLAGS) $< -o $@
all:$(PROG)
bwa:libbwa.a $(AOBJS) main.o
- $(CC) $(CFLAGS) $(DFLAGS) $(AOBJS) main.o -o $@ -L. -lbwa $(LIBS)
+ $(CC) $(CFLAGS) $(LDFLAGS) $(AOBJS) main.o -o $@ -L. -lbwa $(LIBS)
bwamem-lite:libbwa.a example.o
- $(CC) $(CFLAGS) $(DFLAGS) example.o -o $@ -L. -lbwa $(LIBS)
+ $(CC) $(CFLAGS) $(LDFLAGS) example.o -o $@ -L. -lbwa $(LIBS)
libbwa.a:$(LOBJS)
$(AR) -csru $@ $(LOBJS)
@@ -39,7 +39,7 @@ clean:
rm -f gmon.out *.o a.out $(PROG) *~ *.a
depend:
- ( LC_ALL=C ; export LC_ALL; makedepend -Y -- $(CFLAGS) $(DFLAGS) -- *.c )
+ ( LC_ALL=C ; export LC_ALL; makedepend -Y -- $(CFLAGS) $(DFLAGS) $(CPPFLAGS) -- *.c )
# DO NOT DELETE THIS LINE -- make depend depends on it.
@@ -78,7 +78,7 @@ fastmap.o: bwa.h bntseq.h bwt.h bwamem.h kvec.h malloc_wrap.h utils.h kseq.h
is.o: malloc_wrap.h
kopen.o: malloc_wrap.h
kstring.o: kstring.h malloc_wrap.h
-ksw.o: ksw.h malloc_wrap.h
+ksw.o: ksw.h neon_sse.h scalar_sse.h malloc_wrap.h
main.o: kstring.h malloc_wrap.h utils.h
malloc_wrap.o: malloc_wrap.h
maxk.o: bwa.h bntseq.h bwt.h bwamem.h kseq.h malloc_wrap.h
=====================================
NEWS.md
=====================================
@@ -1,3 +1,18 @@
+Release 0.7.18 (14 April 2024)
+------------------------------
+
+Notable changes:
+
+ * Support ARM64 (#359)
+ * Output SAM header line (#336)
+ * Added the XB tag to output alignment score and mapping quality
+ * Fixed a compiling error with GCC 10 (#267)
+ * Avoid potential buffer overflow (#232)
+
+(0.7.18: 14 April 2024, r1243)
+
+
+
Release 0.7.17 (23 October 2017)
--------------------------------
=====================================
README.md
=====================================
@@ -1,4 +1,17 @@
-[![Build Status](https://travis-ci.org/lh3/bwa.svg?branch=dev)](https://travis-ci.org/lh3/bwa)
+[![Build Status](https://github.com/lh3/bwa/actions/workflows/ci.yaml/badge.svg)](https://github.com/lh3/bwa/actions)
+[![SourceForge Downloads](https://img.shields.io/sourceforge/dt/bio-bwa.svg?label=SF%20downloads)](https://sourceforge.net/projects/bio-bwa/files/?source=navbar)
+[![GitHub Downloads](https://img.shields.io/github/downloads/lh3/bwa/total.svg?style=flat&label=GitHub%20downloads)](https://github.com/lh3/bwa/releases)
+[![BioConda Install](https://img.shields.io/conda/dn/bioconda/bwa.svg?style=flag&label=BioConda%20install)](https://anaconda.org/bioconda/bwa)
+
+**Note: [minimap2][minimap2] has replaced BWA-MEM for __PacBio and Nanopore__ read
+alignment.** It retains all major BWA-MEM features, but is ~50 times as fast,
+more versatile, more accurate and produces better base-level alignment.
+A beta version of [BWA-MEM2][bwa-mem2] has been released for short-read mapping.
+BWA-MEM2 is about twice as fast as BWA-MEM and outputs near identical alignments.
+
+[minimap2]: https://github.com/lh3/minimap2
+[bwa-mem2]: https://github.com/bwa-mem2/bwa-mem2
+
## Getting started
git clone https://github.com/lh3/bwa.git
=====================================
bntseq.c
=====================================
@@ -1,6 +1,8 @@
/* The MIT License
- Copyright (c) 2008 Genome Research Ltd (GRL).
+ Copyright (c) 2018- Dana-Farber Cancer Institute
+ 2009-2018 Broad Institute, Inc.
+ 2008-2009 Genome Research Ltd. (GRL)
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
@@ -22,9 +24,6 @@
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
-
-/* Contact: Heng Li <lh3 at sanger.ac.uk> */
-
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -197,7 +196,13 @@ bntseq_t *bns_restore(const char *prefix)
}
while (c != '\n' && c != EOF) c = fgetc(fp);
i = 0;
- } else str[i++] = c; // FIXME: potential segfault here
+ } else {
+ if (i >= 1022) {
+ fprintf(stderr, "[E::%s] sequence name longer than 1023 characters. Abort!\n", __func__);
+ exit(1);
+ }
+ str[i++] = c;
+ }
}
kh_destroy(str, h);
fclose(fp);
=====================================
bntseq.h
=====================================
@@ -1,6 +1,8 @@
/* The MIT License
- Copyright (c) 2008 Genome Research Ltd (GRL).
+ Copyright (c) 2018- Dana-Farber Cancer Institute
+ 2009-2018 Broad Institute, Inc.
+ 2008-2009 Genome Research Ltd. (GRL)
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
@@ -23,8 +25,6 @@
SOFTWARE.
*/
-/* Contact: Heng Li <lh3 at sanger.ac.uk> */
-
#ifndef BWT_BNTSEQ_H
#define BWT_BNTSEQ_H
=====================================
bwa.1
=====================================
@@ -1,4 +1,4 @@
-.TH bwa 1 "23 October 2017" "bwa-0.7.17-r1188" "Bioinformatics tools"
+.TH bwa 1 "14 April 2023" "bwa-0.7.18-r1243" "Bioinformatics tools"
.SH NAME
.PP
bwa - Burrows-Wheeler Alignment Tool
@@ -154,8 +154,8 @@ batch of reads.
The BWA-MEM algorithm performs local alignment. It may produce multiple primary
alignments for different part of a query sequence. This is a crucial feature
-for long sequences. However, some tools such as Picard's markDuplicates does
-not work with split alignments. One may consider to use option
+for long sequences. However, some tools may not work with split alignments.
+One may consider to use option
.B -M
to flag shorter split hits as secondary.
=====================================
bwa.c
=====================================
@@ -1,3 +1,29 @@
+/* The MIT License
+
+ Copyright (c) 2018- Dana-Farber Cancer Institute
+ 2009-2018 Broad Institute, Inc.
+ 2008-2009 Genome Research Ltd. (GRL)
+
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+*/
#include <string.h>
#include <stdio.h>
#include <zlib.h>
@@ -14,6 +40,7 @@
#endif
int bwa_verbose = 3;
+int bwa_dbg = 0;
char bwa_rg_id[256];
char *bwa_pg;
@@ -379,10 +406,17 @@ int bwa_idx2mem(bwaidx_t *idx)
void bwa_print_sam_hdr(const bntseq_t *bns, const char *hdr_line)
{
- int i, n_SQ = 0;
+ int i, n_HD = 0, n_SQ = 0;
extern char *bwa_pg;
+
if (hdr_line) {
+ // check for HD line
const char *p = hdr_line;
+ if ((p = strstr(p, "@HD")) != 0) {
+ ++n_HD;
+ }
+ // check for SQ lines
+ p = hdr_line;
while ((p = strstr(p, "@SQ\t")) != 0) {
if (p == hdr_line || *(p-1) == '\n') ++n_SQ;
p += 4;
@@ -396,6 +430,9 @@ void bwa_print_sam_hdr(const bntseq_t *bns, const char *hdr_line)
}
} else if (n_SQ != bns->n_seqs && bwa_verbose >= 2)
fprintf(stderr, "[W::%s] %d @SQ lines provided with -H; %d sequences in the index. Continue anyway.\n", __func__, n_SQ, bns->n_seqs);
+ if (n_HD == 0) {
+ err_printf("@HD\tVN:1.5\tSO:unsorted\tGO:query\n");
+ }
if (hdr_line) err_printf("%s\n", hdr_line);
if (bwa_pg) err_printf("%s\n", bwa_pg);
}
=====================================
bwa.h
=====================================
@@ -1,3 +1,29 @@
+/* The MIT License
+
+ Copyright (c) 2018- Dana-Farber Cancer Institute
+ 2009-2018 Broad Institute, Inc.
+ 2008-2009 Genome Research Ltd. (GRL)
+
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+*/
#ifndef BWA_H_
#define BWA_H_
@@ -17,6 +43,8 @@
#define BWTALGO_BWTSW 2
#define BWTALGO_IS 3
+#define BWA_DBG_QNAME 0x1
+
typedef struct {
bwt_t *bwt; // FM-index
bntseq_t *bns; // information on the reference sequences
@@ -32,7 +60,7 @@ typedef struct {
char *name, *comment, *seq, *qual, *sam;
} bseq1_t;
-extern int bwa_verbose;
+extern int bwa_verbose, bwa_dbg;
extern char bwa_rg_id[256];
#ifdef __cplusplus
=====================================
bwakit/bwa-postalt.js
=====================================
@@ -283,7 +283,7 @@ function bwa_postalt(args)
// process SAM
var buf2 = [], hla = {};
file = args.length - getopt.ind >= 2? new File(args[getopt.ind+1]) : new File();
- while (file.readline(buf) >= 0) {
+ while (file.readline(buf) > 0) {
var m, line = buf.toString();
if (line.charAt(0) == '@') { // print and then skip the header line
=====================================
bwamem.c
=====================================
@@ -1,3 +1,29 @@
+/* The MIT License
+
+ Copyright (c) 2018- Dana-Farber Cancer Institute
+ 2009-2018 Broad Institute, Inc.
+ 2008-2009 Genome Research Ltd. (GRL)
+
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+*/
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
@@ -906,6 +932,7 @@ void mem_aln2sam(const mem_opt_t *opt, const bntseq_t *bns, kstring_t *str, bseq
kputsn("\tMD:Z:", 6, str); kputs((char*)(p->cigar + p->n_cigar), str);
}
if (m && m->n_cigar) { kputsn("\tMC:Z:", 6, str); add_cigar(opt, m, str, which); }
+ if (m) { kputsn("\tMQ:i:", 6, str); kputw(m->mapq, str);}
if (p->score >= 0) { kputsn("\tAS:i:", 6, str); kputw(p->score, str); }
if (p->sub >= 0) { kputsn("\tXS:i:", 6, str); kputw(p->sub, str); }
if (bwa_rg_id[0]) { kputsn("\tRG:Z:", 6, str); kputs(bwa_rg_id, str); }
@@ -932,7 +959,10 @@ void mem_aln2sam(const mem_opt_t *opt, const bntseq_t *bns, kstring_t *str, bseq
if (p->alt_sc > 0)
ksprintf(str, "\tpa:f:%.3f", (double)p->score / p->alt_sc);
}
- if (p->XA) { kputsn("\tXA:Z:", 6, str); kputs(p->XA, str); }
+ if (p->XA) {
+ kputsn((opt->flag&MEM_F_XB)? "\tXB:Z:" : "\tXA:Z:", 6, str);
+ kputs(p->XA, str);
+ }
if (s->comment) { kputc('\t', str); kputs(s->comment, str); }
if ((opt->flag&MEM_F_REF_HDR) && p->rid >= 0 && bns->anns[p->rid].anno != 0 && bns->anns[p->rid].anno[0] != 0) {
int tmp;
=====================================
bwamem.h
=====================================
@@ -1,3 +1,29 @@
+/* The MIT License
+
+ Copyright (c) 2018- Dana-Farber Cancer Institute
+ 2009-2018 Broad Institute, Inc.
+ 2008-2009 Genome Research Ltd. (GRL)
+
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+*/
#ifndef BWAMEM_H_
#define BWAMEM_H_
@@ -21,6 +47,7 @@ typedef struct __smem_i smem_i;
#define MEM_F_SMARTPE 0x400
#define MEM_F_PRIMARY5 0x800
#define MEM_F_KEEP_SUPP_MAPQ 0x1000
+#define MEM_F_XB 0x2000
typedef struct {
int a, b; // match score and mismatch penalty
=====================================
bwamem_extra.c
=====================================
@@ -1,3 +1,29 @@
+/* The MIT License
+
+ Copyright (c) 2018- Dana-Farber Cancer Institute
+ 2009-2018 Broad Institute, Inc.
+ 2008-2009 Genome Research Ltd. (GRL)
+
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+*/
#include <limits.h>
#include "bwa.h"
#include "bwamem.h"
@@ -126,6 +152,12 @@ char **mem_gen_alt(const mem_opt_t *opt, const bntseq_t *bns, const uint8_t *pac
kputc("MIDSHN"[t.cigar[k]&0xf], &str);
}
kputc(',', &str); kputw(t.NM, &str);
+ if (opt->flag & MEM_F_XB) {
+ kputc(',', &str);
+ kputw(t.score, &str);
+ kputc(',', &str);
+ kputw(t.mapq, &str);
+ }
kputc(';', &str);
free(t.cigar);
kputsn(str.s, str.l, &aln[r]);
=====================================
bwamem_pair.c
=====================================
@@ -1,3 +1,29 @@
+/* The MIT License
+
+ Copyright (c) 2018- Dana-Farber Cancer Institute
+ 2009-2018 Broad Institute, Inc.
+ 2008-2009 Genome Research Ltd. (GRL)
+
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+*/
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
=====================================
bwt.h
=====================================
@@ -1,6 +1,8 @@
/* The MIT License
- Copyright (c) 2008 Genome Research Ltd (GRL).
+ Copyright (c) 2018- Dana-Farber Cancer Institute
+ 2009-2018 Broad Institute, Inc.
+ 2008-2009 Genome Research Ltd. (GRL)
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
@@ -23,7 +25,7 @@
SOFTWARE.
*/
-/* Contact: Heng Li <lh3 at sanger.ac.uk> */
+/* Contact: Heng Li <hli at jimmy.harvard.edu> */
#ifndef BWA_BWT_H
#define BWA_BWT_H
=====================================
bwtindex.c
=====================================
@@ -1,6 +1,8 @@
/* The MIT License
- Copyright (c) 2008 Genome Research Ltd (GRL).
+ Copyright (c) 2018- Dana-Farber Cancer Institute
+ 2009-2018 Broad Institute, Inc.
+ 2008-2009 Genome Research Ltd. (GRL)
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
@@ -22,9 +24,6 @@
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
-
-/* Contact: Heng Li <lh3 at sanger.ac.uk> */
-
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
=====================================
code_of_conduct.md
=====================================
@@ -0,0 +1,30 @@
+## Contributor Code of Conduct
+
+As contributors and maintainers of this project, we pledge to respect all
+people who contribute through reporting issues, posting feature requests,
+updating documentation, submitting pull requests or patches, and other
+activities.
+
+We are committed to making participation in this project a harassment-free
+experience for everyone, regardless of level of experience, gender, gender
+identity and expression, sexual orientation, disability, personal appearance,
+body size, race, age, or religion.
+
+Examples of unacceptable behavior by participants include the use of sexual
+language or imagery, derogatory comments or personal attacks, trolling, public
+or private harassment, insults, or other unprofessional conduct.
+
+Project maintainers have the right and responsibility to remove, edit, or
+reject comments, commits, code, wiki edits, issues, and other contributions
+that are not aligned to this Code of Conduct. Project maintainers or
+contributors who do not follow the Code of Conduct may be removed from the
+project team.
+
+Instances of abusive, harassing, or otherwise unacceptable behavior may be
+reported by opening an issue or contacting the maintainer via email.
+
+This Code of Conduct is adapted from the [Contributor Covenant][cc], [version
+1.0.0][v1].
+
+[cc]: http://contributor-covenant.org/
+[v1]: http://contributor-covenant.org/version/1/0/0/
=====================================
fastmap.c
=====================================
@@ -1,3 +1,29 @@
+/* The MIT License
+
+ Copyright (c) 2018- Dana-Farber Cancer Institute
+ 2009-2018 Broad Institute, Inc.
+ 2008-2009 Genome Research Ltd. (GRL)
+
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+*/
#include <zlib.h>
#include <stdio.h>
#include <unistd.h>
@@ -130,7 +156,7 @@ int main_mem(int argc, char *argv[])
aux.opt = opt = mem_opt_init();
memset(&opt0, 0, sizeof(mem_opt_t));
- while ((c = getopt(argc, argv, "51qpaMCSPVYjk:c:v:s:r:t:R:A:B:O:E:U:w:L:d:T:Q:D:m:I:N:o:f:W:x:G:h:y:K:X:H:")) >= 0) {
+ while ((c = getopt(argc, argv, "51qpaMCSPVYjuk:c:v:s:r:t:R:A:B:O:E:U:w:L:d:T:Q:D:m:I:N:o:f:W:x:G:h:y:K:X:H:F:z:")) >= 0) {
if (c == 'k') opt->min_seed_len = atoi(optarg), opt0.min_seed_len = 1;
else if (c == '1') no_mt_io = 1;
else if (c == 'x') mode = optarg;
@@ -149,6 +175,7 @@ int main_mem(int argc, char *argv[])
else if (c == 'V') opt->flag |= MEM_F_REF_HDR;
else if (c == '5') opt->flag |= MEM_F_PRIMARY5 | MEM_F_KEEP_SUPP_MAPQ; // always apply MEM_F_KEEP_SUPP_MAPQ with -5
else if (c == 'q') opt->flag |= MEM_F_KEEP_SUPP_MAPQ;
+ else if (c == 'u') opt->flag |= MEM_F_XB;
else if (c == 'c') opt->max_occ = atoi(optarg), opt0.max_occ = 1;
else if (c == 'd') opt->zdrop = atoi(optarg), opt0.zdrop = 1;
else if (c == 'v') bwa_verbose = atoi(optarg);
@@ -165,12 +192,14 @@ int main_mem(int argc, char *argv[])
else if (c == 'C') aux.copy_comment = 1;
else if (c == 'K') fixed_chunk_size = atoi(optarg);
else if (c == 'X') opt->mask_level = atof(optarg);
+ else if (c == 'F') bwa_dbg = atoi(optarg);
else if (c == 'h') {
opt0.max_XA_hits = opt0.max_XA_hits_alt = 1;
opt->max_XA_hits = opt->max_XA_hits_alt = strtol(optarg, &p, 10);
if (*p != 0 && ispunct(*p) && isdigit(p[1]))
opt->max_XA_hits_alt = strtol(p+1, &p, 10);
}
+ else if (c == 'z') opt->XA_drop_ratio = atof(optarg);
else if (c == 'Q') {
opt0.mapQ_coef_len = 1;
opt->mapQ_coef_len = atoi(optarg);
@@ -269,13 +298,18 @@ int main_mem(int argc, char *argv[])
fprintf(stderr, " -H STR/FILE insert STR to header if it starts with @; or insert lines in FILE [null]\n");
fprintf(stderr, " -o FILE sam file to output results to [stdout]\n");
fprintf(stderr, " -j treat ALT contigs as part of the primary assembly (i.e. ignore <idxbase>.alt file)\n");
- fprintf(stderr, " -5 for split alignment, take the alignment with the smallest coordinate as primary\n");
+ fprintf(stderr, " -5 for split alignment, take the alignment with the smallest query (not genomic) coordinate as primary\n");
fprintf(stderr, " -q don't modify mapQ of supplementary alignments\n");
fprintf(stderr, " -K INT process INT input bases in each batch regardless of nThreads (for reproducibility) []\n");
fprintf(stderr, "\n");
fprintf(stderr, " -v INT verbosity level: 1=error, 2=warning, 3=message, 4+=debugging [%d]\n", bwa_verbose);
fprintf(stderr, " -T INT minimum score to output [%d]\n", opt->T);
- fprintf(stderr, " -h INT[,INT] if there are <INT hits with score >80%% of the max score, output all in XA [%d,%d]\n", opt->max_XA_hits, opt->max_XA_hits_alt);
+ fprintf(stderr, " -h INT[,INT] if there are <INT hits with score >%.2f%% of the max score, output all in XA [%d,%d]\n",
+ opt->XA_drop_ratio * 100.0,
+ opt->max_XA_hits, opt->max_XA_hits_alt);
+ fprintf(stderr, " A second value may be given for alternate sequences.\n");
+ fprintf(stderr, " -z FLOAT The fraction of the max score to use with -h [%f].\n", opt->XA_drop_ratio);
+ fprintf(stderr, " specify the mean, standard deviation (10%% of the mean if absent), max\n");
fprintf(stderr, " -a output all alignments for SE or unpaired PE\n");
fprintf(stderr, " -C append FASTA/FASTQ comment to SAM output\n");
fprintf(stderr, " -V output the reference FASTA header in the XR tag\n");
@@ -285,6 +319,7 @@ int main_mem(int argc, char *argv[])
fprintf(stderr, " specify the mean, standard deviation (10%% of the mean if absent), max\n");
fprintf(stderr, " (4 sigma from the mean if absent) and min of the insert size distribution.\n");
fprintf(stderr, " FR orientation only. [inferred]\n");
+ fprintf(stderr, " -u output XB instead of XA; XB is XA with the alignment score and mapping quality added.\n");
fprintf(stderr, "\n");
fprintf(stderr, "Note: Please read the man page for detailed description of the command line and options.\n");
fprintf(stderr, "\n");
=====================================
ksw.c
=====================================
@@ -26,7 +26,13 @@
#include <stdlib.h>
#include <stdint.h>
#include <assert.h>
+#if defined __SSE2__
#include <emmintrin.h>
+#elif defined __ARM_NEON
+#include "neon_sse.h"
+#else
+#include "scalar_sse.h"
+#endif
#include "ksw.h"
#ifdef USE_MALLOC_WRAPPERS
@@ -108,6 +114,11 @@ kswq_t *ksw_qinit(int size, int qlen, const uint8_t *query, int m, const int8_t
return q;
}
+#if defined __ARM_NEON
+// This macro implicitly uses each function's `zero` local variable
+#define _mm_slli_si128(a, n) (vextq_u8(zero, (a), 16 - (n)))
+#endif
+
kswr_t ksw_u8(kswq_t *q, int tlen, const uint8_t *target, int _o_del, int _e_del, int _o_ins, int _e_ins, int xtra) // the first gap costs -(_o+_e)
{
int slen, i, m_b, n_b, te = -1, gmax = 0, minsc, endsc;
@@ -115,6 +126,7 @@ kswr_t ksw_u8(kswq_t *q, int tlen, const uint8_t *target, int _o_del, int _e_del
__m128i zero, oe_del, e_del, oe_ins, e_ins, shift, *H0, *H1, *E, *Hmax;
kswr_t r;
+#if defined __SSE2__
#define __max_16(ret, xx) do { \
(xx) = _mm_max_epu8((xx), _mm_srli_si128((xx), 8)); \
(xx) = _mm_max_epu8((xx), _mm_srli_si128((xx), 4)); \
@@ -123,6 +135,18 @@ kswr_t ksw_u8(kswq_t *q, int tlen, const uint8_t *target, int _o_del, int _e_del
(ret) = _mm_extract_epi16((xx), 0) & 0x00ff; \
} while (0)
+// Given entries with arbitrary values, return whether they are all 0x00
+#define allzero_16(xx) (_mm_movemask_epi8(_mm_cmpeq_epi8((xx), zero)) == 0xffff)
+
+#elif defined __ARM_NEON
+#define __max_16(ret, xx) (ret) = vmaxvq_u8((xx))
+#define allzero_16(xx) (vmaxvq_u8((xx)) == 0)
+
+#else
+#define __max_16(ret, xx) (ret) = m128i_max_u8((xx))
+#define allzero_16(xx) (m128i_allzero((xx)))
+#endif
+
// initialization
r = g_defr;
minsc = (xtra&KSW_XSUBO)? xtra&0xffff : 0x10000;
@@ -143,7 +167,7 @@ kswr_t ksw_u8(kswq_t *q, int tlen, const uint8_t *target, int _o_del, int _e_del
}
// the core loop
for (i = 0; i < tlen; ++i) {
- int j, k, cmp, imax;
+ int j, k, imax;
__m128i e, h, t, f = zero, max = zero, *S = q->qp + target[i] * slen; // s is the 1st score vector
h = _mm_load_si128(H0 + slen - 1); // h={2,5,8,11,14,17,-1,-1} in the above example
h = _mm_slli_si128(h, 1); // h=H(i-1,-1); << instead of >> because x64 is little-endian
@@ -182,8 +206,7 @@ kswr_t ksw_u8(kswq_t *q, int tlen, const uint8_t *target, int _o_del, int _e_del
_mm_store_si128(H1 + j, h);
h = _mm_subs_epu8(h, oe_ins);
f = _mm_subs_epu8(f, e_ins);
- cmp = _mm_movemask_epi8(_mm_cmpeq_epi8(_mm_subs_epu8(f, h), zero));
- if (UNLIKELY(cmp == 0xffff)) goto end_loop16;
+ if (UNLIKELY(allzero_16(_mm_subs_epu8(f, h)))) goto end_loop16;
}
}
end_loop16:
@@ -236,6 +259,7 @@ kswr_t ksw_i16(kswq_t *q, int tlen, const uint8_t *target, int _o_del, int _e_de
__m128i zero, oe_del, e_del, oe_ins, e_ins, *H0, *H1, *E, *Hmax;
kswr_t r;
+#if defined __SSE2__
#define __max_8(ret, xx) do { \
(xx) = _mm_max_epi16((xx), _mm_srli_si128((xx), 8)); \
(xx) = _mm_max_epi16((xx), _mm_srli_si128((xx), 4)); \
@@ -243,6 +267,18 @@ kswr_t ksw_i16(kswq_t *q, int tlen, const uint8_t *target, int _o_del, int _e_de
(ret) = _mm_extract_epi16((xx), 0); \
} while (0)
+// Given entries all either 0x0000 or 0xffff, return whether they are all 0x0000
+#define allzero_0f_8(xx) (!_mm_movemask_epi8((xx)))
+
+#elif defined __ARM_NEON
+#define __max_8(ret, xx) (ret) = vmaxvq_s16(vreinterpretq_s16_u8((xx)))
+#define allzero_0f_8(xx) (vmaxvq_u16(vreinterpretq_u16_u8((xx))) == 0)
+
+#else
+#define __max_8(ret, xx) (ret) = m128i_max_s16((xx))
+#define allzero_0f_8(xx) (m128i_allzero((xx)))
+#endif
+
// initialization
r = g_defr;
minsc = (xtra&KSW_XSUBO)? xtra&0xffff : 0x10000;
@@ -267,7 +303,7 @@ kswr_t ksw_i16(kswq_t *q, int tlen, const uint8_t *target, int _o_del, int _e_de
h = _mm_load_si128(H0 + slen - 1); // h={2,5,8,11,14,17,-1,-1} in the above example
h = _mm_slli_si128(h, 2);
for (j = 0; LIKELY(j < slen); ++j) {
- h = _mm_adds_epi16(h, *S++);
+ h = _mm_adds_epi16(h, _mm_load_si128(S++));
e = _mm_load_si128(E + j);
h = _mm_max_epi16(h, e);
h = _mm_max_epi16(h, f);
@@ -290,7 +326,7 @@ kswr_t ksw_i16(kswq_t *q, int tlen, const uint8_t *target, int _o_del, int _e_de
_mm_store_si128(H1 + j, h);
h = _mm_subs_epu16(h, oe_ins);
f = _mm_subs_epu16(f, e_ins);
- if(UNLIKELY(!_mm_movemask_epi8(_mm_cmpgt_epi16(f, h)))) goto end_loop8;
+ if(UNLIKELY(allzero_0f_8(_mm_cmpgt_epi16(f, h)))) goto end_loop8;
}
}
end_loop8:
=====================================
main.c
=====================================
@@ -1,10 +1,36 @@
+/* The MIT License
+
+ Copyright (c) 2018- Dana-Farber Cancer Institute
+ 2009-2018 Broad Institute, Inc.
+ 2008-2009 Genome Research Ltd. (GRL)
+
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+*/
#include <stdio.h>
#include <string.h>
#include "kstring.h"
#include "utils.h"
#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "0.7.17-r1188"
+#define PACKAGE_VERSION "0.7.18-r1243-dirty"
#endif
int bwa_fa2pac(int argc, char *argv[]);
@@ -32,7 +58,7 @@ static int usage()
fprintf(stderr, "\n");
fprintf(stderr, "Program: bwa (alignment via Burrows-Wheeler transformation)\n");
fprintf(stderr, "Version: %s\n", PACKAGE_VERSION);
- fprintf(stderr, "Contact: Heng Li <lh3 at sanger.ac.uk>\n\n");
+ fprintf(stderr, "Contact: Heng Li <hli at ds.dfci.harvard.edu>\n\n");
fprintf(stderr, "Usage: bwa <command> [options]\n\n");
fprintf(stderr, "Command: index index sequences in the FASTA format\n");
fprintf(stderr, " mem BWA-MEM algorithm\n");
@@ -41,7 +67,7 @@ static int usage()
fprintf(stderr, " aln gapped/ungapped alignment\n");
fprintf(stderr, " samse generate alignment (single ended)\n");
fprintf(stderr, " sampe generate alignment (paired ended)\n");
- fprintf(stderr, " bwasw BWA-SW for long queries\n");
+ fprintf(stderr, " bwasw BWA-SW for long queries (DEPRECATED)\n");
fprintf(stderr, "\n");
fprintf(stderr, " shm manage indices in shared memory\n");
fprintf(stderr, " fa2pac convert FASTA to PAC format\n");
=====================================
neon_sse.h
=====================================
@@ -0,0 +1,33 @@
+#ifndef NEON_SSE_H
+#define NEON_SSE_H
+
+#include <arm_neon.h>
+
+typedef uint8x16_t __m128i;
+
+static inline __m128i _mm_load_si128(const __m128i *ptr) { return vld1q_u8((const uint8_t *) ptr); }
+static inline __m128i _mm_set1_epi32(int n) { return vreinterpretq_u8_s32(vdupq_n_s32(n)); }
+static inline void _mm_store_si128(__m128i *ptr, __m128i a) { vst1q_u8((uint8_t *) ptr, a); }
+
+static inline __m128i _mm_adds_epu8(__m128i a, __m128i b) { return vqaddq_u8(a, b); }
+static inline __m128i _mm_max_epu8(__m128i a, __m128i b) { return vmaxq_u8(a, b); }
+static inline __m128i _mm_set1_epi8(int8_t n) { return vreinterpretq_u8_s8(vdupq_n_s8(n)); }
+static inline __m128i _mm_subs_epu8(__m128i a, __m128i b) { return vqsubq_u8(a, b); }
+
+#define M128I(a) vreinterpretq_u8_s16((a))
+#define UM128I(a) vreinterpretq_u8_u16((a))
+#define S16(a) vreinterpretq_s16_u8((a))
+#define U16(a) vreinterpretq_u16_u8((a))
+
+static inline __m128i _mm_adds_epi16(__m128i a, __m128i b) { return M128I(vqaddq_s16(S16(a), S16(b))); }
+static inline __m128i _mm_cmpgt_epi16(__m128i a, __m128i b) { return UM128I(vcgtq_s16(S16(a), S16(b))); }
+static inline __m128i _mm_max_epi16(__m128i a, __m128i b) { return M128I(vmaxq_s16(S16(a), S16(b))); }
+static inline __m128i _mm_set1_epi16(int16_t n) { return vreinterpretq_u8_s16(vdupq_n_s16(n)); }
+static inline __m128i _mm_subs_epu16(__m128i a, __m128i b) { return UM128I(vqsubq_u16(U16(a), U16(b))); }
+
+#undef M128I
+#undef UM128I
+#undef S16
+#undef U16
+
+#endif
=====================================
rle.h
=====================================
@@ -30,7 +30,7 @@ extern "C" {
*** 43+3 codec ***
******************/
-const uint8_t rle_auxtab[8];
+extern const uint8_t rle_auxtab[8];
#define RLE_MIN_SPACE 18
#define rle_nptr(block) ((uint16_t*)(block))
=====================================
scalar_sse.h
=====================================
@@ -0,0 +1,119 @@
+#ifndef SCALAR_SSE_H
+#define SCALAR_SSE_H
+
+#include <assert.h>
+#include <stdint.h>
+#include <string.h>
+
+typedef union m128i {
+ uint8_t u8[16];
+ int16_t i16[8];
+} __m128i;
+
+static inline __m128i _mm_set1_epi32(int32_t n) {
+ assert(n >= 0 && n <= 255);
+ __m128i r; memset(&r, n, sizeof r); return r;
+}
+
+static inline __m128i _mm_load_si128(const __m128i *ptr) { __m128i r; memcpy(&r, ptr, sizeof r); return r; }
+static inline void _mm_store_si128(__m128i *ptr, __m128i a) { memcpy(ptr, &a, sizeof a); }
+
+static inline int m128i_allzero(__m128i a) {
+ static const char zero[] = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
+ return memcmp(&a, zero, sizeof a) == 0;
+}
+
+static inline __m128i _mm_slli_si128(__m128i a, int n) {
+ int i;
+ memmove(&a.u8[n], &a.u8[0], 16 - n);
+ for (i = 0; i < n; i++) a.u8[i] = 0;
+ return a;
+}
+
+static inline __m128i _mm_adds_epu8(__m128i a, __m128i b) {
+ int i;
+ for (i = 0; i < 16; i++) {
+ uint16_t aa = a.u8[i];
+ aa += b.u8[i];
+ a.u8[i] = (aa < 256)? aa : 255;
+ }
+ return a;
+}
+
+static inline __m128i _mm_max_epu8(__m128i a, __m128i b) {
+ int i;
+ for (i = 0; i < 16; i++)
+ if (a.u8[i] < b.u8[i]) a.u8[i] = b.u8[i];
+ return a;
+}
+
+static inline uint8_t m128i_max_u8(__m128i a) {
+ uint8_t max = 0;
+ int i;
+ for (i = 0; i < 16; i++)
+ if (max < a.u8[i]) max = a.u8[i];
+ return max;
+}
+
+static inline __m128i _mm_set1_epi8(int8_t n) { __m128i r; memset(&r, n, sizeof r); return r; }
+
+static inline __m128i _mm_subs_epu8(__m128i a, __m128i b) {
+ int i;
+ for (i = 0; i < 16; i++) {
+ int16_t aa = a.u8[i];
+ aa -= b.u8[i];
+ a.u8[i] = (aa >= 0)? aa : 0;
+ }
+ return a;
+}
+
+static inline __m128i _mm_adds_epi16(__m128i a, __m128i b) {
+ int i;
+ for (i = 0; i < 8; i++) {
+ int32_t aa = a.i16[i];
+ aa += b.i16[i];
+ a.i16[i] = (aa < 32768)? aa : 32767;
+ }
+ return a;
+}
+
+static inline __m128i _mm_cmpgt_epi16(__m128i a, __m128i b) {
+ int i;
+ for (i = 0; i < 8; i++)
+ a.i16[i] = (a.i16[i] > b.i16[i])? 0xffff : 0x0000;
+ return a;
+}
+
+static inline __m128i _mm_max_epi16(__m128i a, __m128i b) {
+ int i;
+ for (i = 0; i < 8; i++)
+ if (a.i16[i] < b.i16[i]) a.i16[i] = b.i16[i];
+ return a;
+}
+
+static inline __m128i _mm_set1_epi16(int16_t n) {
+ __m128i r;
+ r.i16[0] = r.i16[1] = r.i16[2] = r.i16[3] =
+ r.i16[4] = r.i16[5] = r.i16[6] = r.i16[7] = n;
+ return r;
+}
+
+static inline int16_t m128i_max_s16(__m128i a) {
+ int16_t max = -32768;
+ int i;
+ for (i = 0; i < 8; i++)
+ if (max < a.i16[i]) max = a.i16[i];
+ return max;
+}
+
+static inline __m128i _mm_subs_epu16(__m128i a, __m128i b) {
+ int i;
+ for (i = 0; i < 8; i++) {
+ int32_t aa = a.i16[i];
+ aa -= b.i16[i];
+ a.i16[i] = (aa >= 0)? aa : 0;
+ }
+ return a;
+}
+
+#endif
=====================================
utils.c
=====================================
@@ -1,6 +1,8 @@
/* The MIT License
- Copyright (c) 2008 Genome Research Ltd (GRL).
+ Copyright (c) 2018- Dana-Farber Cancer Institute
+ 2009-2018 Broad Institute, Inc.
+ 2008-2009 Genome Research Ltd. (GRL)
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
@@ -22,8 +24,6 @@
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
-
-/* Contact: Heng Li <lh3 at sanger.ac.uk> */
#define FSYNC_ON_FLUSH
#include <stdio.h>
@@ -279,17 +279,28 @@ int err_gzclose(gzFile file)
* Timer *
*********/
-double cputime()
+double cputime(void)
{
struct rusage r;
getrusage(RUSAGE_SELF, &r);
return r.ru_utime.tv_sec + r.ru_stime.tv_sec + 1e-6 * (r.ru_utime.tv_usec + r.ru_stime.tv_usec);
}
-double realtime()
+double realtime(void)
{
struct timeval tp;
struct timezone tzp;
gettimeofday(&tp, &tzp);
return tp.tv_sec + tp.tv_usec * 1e-6;
}
+
+long peakrss(void)
+{
+ struct rusage r;
+ getrusage(RUSAGE_SELF, &r);
+#ifdef __linux__
+ return r.ru_maxrss * 1024;
+#else
+ return r.ru_maxrss;
+#endif
+}
=====================================
utils.h
=====================================
@@ -1,6 +1,8 @@
/* The MIT License
- Copyright (c) 2008 Genome Research Ltd (GRL).
+ Copyright (c) 2018- Dana-Farber Cancer Institute
+ 2009-2018 Broad Institute, Inc.
+ 2008-2009 Genome Research Ltd. (GRL)
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
@@ -22,9 +24,6 @@
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
-
-/* Contact: Heng Li <lh3 at sanger.ac.uk> */
-
#ifndef LH3_UTILS_H
#define LH3_UTILS_H
@@ -85,8 +84,9 @@ extern "C" {
int err_fclose(FILE *stream);
int err_gzclose(gzFile file);
- double cputime();
- double realtime();
+ double cputime(void);
+ double realtime(void);
+ long peakrss(void);
void ks_introsort_64 (size_t n, uint64_t *a);
void ks_introsort_128(size_t n, pair64_t *a);
View it on GitLab: https://salsa.debian.org/med-team/bwa/-/commit/3ed9d81289b3e055570432bfbb39b3a76ba42d57
--
View it on GitLab: https://salsa.debian.org/med-team/bwa/-/commit/3ed9d81289b3e055570432bfbb39b3a76ba42d57
You're receiving this email because of your account on salsa.debian.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/debian-med-commit/attachments/20240907/5d958463/attachment-0001.htm>
More information about the debian-med-commit
mailing list