From 7601e1b16948985aa47e681d63f9e708ee63104f Mon Sep 17 00:00:00 2001 From: Zilong-Li Date: Mon, 26 Aug 2024 14:47:47 +0200 Subject: [PATCH] update tools --- .github/workflows/linux.yml | 10 ++++- tools/Makefile | 6 ++- tools/test.vcf.gz | Bin 0 -> 76802 bytes tools/test.vcf.gz.tbi | Bin 0 -> 305 bytes tools/vcf_addDS.cpp | 30 +++++++-------- tools/vcf_addINFO.cpp | 73 ++++++++++++++++++++++++++++++++++++ tools/vcf_multiallelics.cpp | 2 +- 7 files changed, 100 insertions(+), 21 deletions(-) create mode 100644 tools/test.vcf.gz create mode 100644 tools/test.vcf.gz.tbi create mode 100644 tools/vcf_addINFO.cpp diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 5318218..3a81034 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -27,14 +27,20 @@ jobs: run: | git clone --recursive https://github.com/samtools/htslib.git cd htslib && autoreconf -i && ./configure --enable-libcurl - sudo make -j 4 install + sudo make -j6 install sudo ldconfig cd - - - name: test + - name: unit test run: | cd test # export ASAN_OPTIONS=alloc_dealloc_mismatch=0 make make test # find . -name "*.bin" -exec '{}' --success ';' + + - name: tools test + run: | + cd tools + make -j6 + make test diff --git a/tools/Makefile b/tools/Makefile index 13b3353..d8d1ed1 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -9,7 +9,7 @@ LIBS = -lhts -lz -lm -lbz2 -llzma -lcurl -lpthread # OBJS = $(patsubst %.cpp, %.o, $(wildcard *.cpp)) BINS = $(patsubst %.cpp, %, $(wildcard *.cpp)) -.PHONY: all clean +.PHONY: all clean test all: $(BINS) @@ -18,3 +18,7 @@ all: $(BINS) clean: rm -f $(BINS) + +test: + ./vcf_addDS -i test.vcf.gz -o out.vcf.gz + ./vcf_addINFO -i test.vcf.gz -o out.vcf.gz diff --git a/tools/test.vcf.gz b/tools/test.vcf.gz new file mode 100644 index 0000000000000000000000000000000000000000..b6d29acde49e8045d9dc23ecf79914fa42dc8919 GIT binary patch literal 76802 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

~84c}Y>xGK4P6H*;h|_}g#aXUho&Bf9 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


N6 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 literal 0 HcmV?d00001 diff --git a/tools/test.vcf.gz.tbi b/tools/test.vcf.gz.tbi new file mode 100644 index 0000000000000000000000000000000000000000..ab9d5dae4622ffba091aa29f18c2c22c843e5dd6 GIT binary patch literal 305 zcmb2|=3rp}f&Xj_PR>jWB8=RHpHfni5)v2^-86WaP6f>CqbsvZwe!)$KWfX~UsJfnuEqEG zy0}9|{0fVn`lio$0yk^}3MJ}~pNuS3uwu~C%e%0V?TGywu7%7C9~t~>(c_S15pDl? z_@Bdz1fUN7&&%yYWYXl%$mQuIw!U*Ov0pH|@txU>yKg++HSRo|XxqZq*md{^&r{oe z#}Eyje+&MIPt5+;bhZU3=u|pwk3yYAh|IC{M?qnX7X^X#&To7;(@Z(Ys$nO)THicA kmI+q^X1jei-Zft!uZ@9W%?Ixo24)5Zd9*;01_?p|06`CXEdT%j literal 0 HcmV?d00001 diff --git a/tools/vcf_addDS.cpp b/tools/vcf_addDS.cpp index f6739f1..2e4774c 100644 --- a/tools/vcf_addDS.cpp +++ b/tools/vcf_addDS.cpp @@ -1,10 +1,10 @@ -// -*- compile-command: "g++ vcf_addDS.cpp -std=c++11 -g -O3 -Wall -lhts" -*- +// -*- compile-command: "g++ vcf_addDS.cpp -std=c++11 -g -O3 -Wall -I.. -lhts" -*- #include "vcfpp.h" using namespace std; using namespace vcfpp; -int main(int argc, char* argv[]) +int main(int argc, char * argv[]) { // ========= helper message and parameters parsing ============================ std::vector args(argv + 1, argv + argc); @@ -26,40 +26,36 @@ int main(int argc, char* argv[]) return 1; } std::string invcf, outvcf = "-", samples = "-", region = ""; - for (int i = 0; i < args.size(); i++) + for(size_t i = 0; i < args.size(); i++) { - if (args[i] == "-i") - invcf = args[++i]; - if (args[i] == "-o") - outvcf = args[++i]; - if (args[i] == "-s") - samples = args[++i]; - if (args[i] == "-r") - region = args[++i]; + if(args[i] == "-i") invcf = args[++i]; + if(args[i] == "-o") outvcf = args[++i]; + if(args[i] == "-s") samples = args[++i]; + if(args[i] == "-r") region = args[++i]; } // ========= core calculation part =========================================== BcfReader vcf(invcf, region, samples); - BcfRecord var(vcf.header); BcfWriter bw(outvcf, vcf.header); + bw.copyHeader(invcf); bw.header.addFORMAT("DS", "1", "Float", "Diploid Genotype Dosage"); // add DS tag into the header int nsamples = vcf.nsamples; vector gps, ds(nsamples); vector gts; - while (vcf.getNextVariant(var)) + BcfRecord var(bw.header); + while(vcf.getNextVariant(var)) { try { var.getFORMAT("GP", gps); // try get GP values - for (int i = 0; i < nsamples; i++) + for(int i = 0; i < nsamples; i++) { ds[i] = gps[i * 3 + 1] + gps[i * 3 + 2] * 2; } } - catch (const std::runtime_error& e) + catch(const std::runtime_error & e) { var.getGenotypes(gts); - for (int i = 0; i < nsamples; i++) - ds[i] = gts[i * 2] + gts[i * 2 + 1]; + for(int i = 0; i < nsamples; i++) ds[i] = gts[i * 2] + gts[i * 2 + 1]; } var.setFORMAT("DS", ds); bw.writeRecord(var); diff --git a/tools/vcf_addINFO.cpp b/tools/vcf_addINFO.cpp new file mode 100644 index 0000000..ef5cbb3 --- /dev/null +++ b/tools/vcf_addINFO.cpp @@ -0,0 +1,73 @@ +// -*- compile-command: "g++ vcf_addINFO.cpp -std=c++11 -g -O3 -Wall -I.. -lhts" -*- +#include "vcfpp.h" +#include + +using namespace std; +using namespace vcfpp; + +int main(int argc, char * argv[]) +{ + // ========= helper message and parameters parsing ============================ + std::vector args(argv + 1, argv + argc); + if(argc <= 1 || args[0] == "-h" || args[0] == "-help" || args[0] == "--help") + { + std::cout << "Author: Zilong-Li (zilong.dk@gmail.com)\n" + << "Description:\n" + << " calculate INFO score per site given GP from input vcf file\n\n" + << "Usage example:\n" + << " " + (std::string)argv[0] + " -i in.bcf \n" + << " " + (std::string)argv[0] + " -i in.bcf -o out.bcf -s ^S1,S2 -r chr1:1-1000 \n" + << " bcftools view in.bcf | " + (std::string)argv[0] + " -i - -o out.bcf \n" + << "\nOptions:\n" + << " -i input vcf/bcf file\n" + << " -o ouput vcf/bcf file [stdout]\n" + << " -s list of samples to be included or excluded\n" + << " -r specific region to be included\n" + << std::endl; + return 1; + } + std::string invcf, outvcf = "-", samples = "-", region = ""; + for(size_t i = 0; i < args.size(); i++) + { + if(args[i] == "-i") invcf = args[++i]; + if(args[i] == "-o") outvcf = args[++i]; + if(args[i] == "-s") samples = args[++i]; + if(args[i] == "-r") region = args[++i]; + } + // ========= core calculation part =========================================== + BcfReader vcf(invcf, region, samples); + BcfWriter bw(outvcf); + bw.copyHeader(invcf); + bw.header.addINFO("INFO", "1", "Float", "INFO score given genotype probability"); + bw.header.addINFO("EAF", "1", "Float", "Estimated Allele Frequency"); + int N = vcf.nsamples, i{0}; + vector gps; + float info, eaf, eij, fij, a0, a1, thetaHat; + BcfRecord var(bw.header); + while(vcf.getNextVariant(var)) + { + var.getFORMAT("GP", gps); // try get GP values + for(eij = 0.0, fij = 0.0, i = 0; i < N; i++) + { + a0 = gps[i * 3 + 1] + gps[i * 3 + 2] * 2; + a1 = gps[i * 3 + 1] + gps[i * 3 + 2] * 4; + eij += a0; + fij += a1 - a0 * a0; + } + eaf = eij / 2 / N; + info = 1.0 - fij / (eij * (1 - eaf)); + thetaHat = std::round(1e2 * eaf) / 1e2; + if(thetaHat == 0 || thetaHat == 1) + info = 1.0; + else if(info < 0) + info = 0.0; + else + info = std::round(1e3 * info) / 1e3; + eaf = std::round(1e6 * eaf) / 1e6; + var.setINFO("INFO", info); + var.setINFO("EAF", eaf); + bw.writeRecord(var); + } + + return 0; +} diff --git a/tools/vcf_multiallelics.cpp b/tools/vcf_multiallelics.cpp index 238eaf9..21d0803 100644 --- a/tools/vcf_multiallelics.cpp +++ b/tools/vcf_multiallelics.cpp @@ -27,7 +27,7 @@ int main(int argc, char* argv[]) return 1; } std::string invcf, outvcf="-", samples = "-", region = ""; - for (int i = 0; i < args.size(); i++) + for(size_t i = 0; i < args.size(); i++) { if (args[i] == "-i") invcf = args[++i];