From 80fc08e2de15415431bd3ea197226b884e8c7070 Mon Sep 17 00:00:00 2001 From: Marc Sturm Date: Fri, 17 Jan 2025 09:55:08 +0100 Subject: [PATCH] finished --- README.md | 3 +- doc/tools/VcfMerge.md | 25 ---- src/VcfAdd/main.cpp | 75 +++++++--- src/VcfMerge/VcfMerge.pro | 14 -- src/VcfMerge/main.cpp | 99 ------------- src/tools-TEST/VcfAdd_Test.h | 6 +- src/tools-TEST/VcfMerge_Test.h | 21 --- src/tools-TEST/data_in/VcfAdd_in2.vcf | 77 ---------- src/tools-TEST/data_in/VcfAdd_in2.vcf.gz | Bin 0 -> 1311 bytes src/tools-TEST/data_in/VcfMerge_in1.vcf | 102 ------------- src/tools-TEST/data_in/VcfMerge_in1.vcf.gz | Bin 1682 -> 0 bytes src/tools-TEST/data_in/VcfMerge_in2.vcf | 58 -------- src/tools-TEST/data_in/VcfMerge_in2.vcf.gz | Bin 1025 -> 0 bytes src/tools-TEST/data_out/VcfMerge_out1.vcf | 158 --------------------- src/tools-TEST/tools-TEST.pro | 1 - src/tools.pro | 4 - 16 files changed, 57 insertions(+), 586 deletions(-) delete mode 100644 doc/tools/VcfMerge.md delete mode 100644 src/VcfMerge/VcfMerge.pro delete mode 100644 src/VcfMerge/main.cpp delete mode 100644 src/tools-TEST/VcfMerge_Test.h delete mode 100644 src/tools-TEST/data_in/VcfAdd_in2.vcf create mode 100644 src/tools-TEST/data_in/VcfAdd_in2.vcf.gz delete mode 100644 src/tools-TEST/data_in/VcfMerge_in1.vcf delete mode 100644 src/tools-TEST/data_in/VcfMerge_in1.vcf.gz delete mode 100644 src/tools-TEST/data_in/VcfMerge_in2.vcf delete mode 100644 src/tools-TEST/data_in/VcfMerge_in2.vcf.gz delete mode 100644 src/tools-TEST/data_out/VcfMerge_out1.vcf diff --git a/README.md b/README.md index 25fda5b8a..4ee75437f 100644 --- a/README.md +++ b/README.md @@ -124,7 +124,7 @@ The default output format of the quality control tools is [qcML](https://pubmed. ### VCF tools (small variants) -* [VcfAdd](doc/tools/VcfAdd.md) - Appends variants from a VCF file to another VCF file. +* [VcfAdd](doc/tools/VcfAdd.md) - Merges several VCF files into one VCF by appending one to the other. * [VcfAnnotateConsequence](doc/tools/VcfAnnotateConsequence.md) - Adds transcript-specific consequence predictions to a VCF file (similar to Ensembl VEP). * [VcfAnnotateFromBed](doc/tools/VcfAnnotateFromBed.md) - Annotates the INFO column of a VCF with data from a BED file. * [VcfAnnotateFromBigWig](doc/tools/VcfAnnotateFromBigWig.md) - Annotates the INFO column of a VCF with data from a BED file. @@ -137,7 +137,6 @@ The default output format of the quality control tools is [qcML](https://pubmed. * [VcfExtractSamples](doc/tools/VcfExtractSamples.md) - Extract one or several samples from a VCF file. Can also be used to re-order sample columns. * [VcfFilter](doc/tools/VcfFilter.md) - Filters a VCF based on the given criteria. * [VcfLeftNormalize](doc/tools/VcfLeftNormalize.md) - Normalizes all variants and shifts indels to the left in a VCF file. -* [VcfMerge](doc/tools/VcfMerge.md) - Merges several VCF files into one VCF. * [VcfSort](doc/tools/VcfSort.md) - Sorts variant lists according to chromosomal position. * [VcfSplit](doc/tools/VcfSplit.md) - Splits a VCF into several chunks. * [VcfStrip](doc/tools/VcfStrip.md) - Removes unwanted information from a VCF file diff --git a/doc/tools/VcfMerge.md b/doc/tools/VcfMerge.md deleted file mode 100644 index 7481a84a0..000000000 --- a/doc/tools/VcfMerge.md +++ /dev/null @@ -1,25 +0,0 @@ -### VcfMerge tool help - VcfMerge (2024_11-59-ge0a7288e) - - Merges several VCF files into one VCF by appending one to the other. - - Mandatory parameters: - -in Input VCF files that are merged. The VCF header is taken from the first file. - - Optional parameters: - -out Output VCF. If unset, writes to STDOUT. - Default value: '' - - Special parameters: - --help Shows this help and exits. - --version Prints version and exits. - --changelog Prints changeloge and exits. - --tdx Writes a Tool Definition Xml file. The file name is the application name with the suffix '.tdx'. - --settings [file] Settings override file (no other settings files are used). - -### VcfMerge changelog - VcfMerge 2024_11-59-ge0a7288e - - 2023-12-14 Added support for gzipped input. - 2023-12-12 Initial implementation. -[back to ngs-bits](https://github.com/imgag/ngs-bits) \ No newline at end of file diff --git a/src/VcfAdd/main.cpp b/src/VcfAdd/main.cpp index 7dc58f53b..ccc7b9403 100644 --- a/src/VcfAdd/main.cpp +++ b/src/VcfAdd/main.cpp @@ -18,7 +18,7 @@ class ConcreteTool { setDescription("Merges several VCF files into one VCF by appending one to the other."); setExtendedDescription(QStringList() << "Variant lines from all other input files are appended to the first input file." << "VCF header lines are taken from the first input file only."); - addInfileList("in", "Input VCF files to merge.", false); + addInfileList("in", "Input VCF ro VCG.GZ files to merge.", false); //optional addOutfile("out", "Output VCF file with all variants.", true); @@ -26,7 +26,7 @@ class ConcreteTool addString("filter_desc", "Description used in the filter header - use underscore instead of spaces.", true); addFlag("skip_duplicates", "Skip variants if they occur more than once."); - //TODO Marc: add gzip support > remove VcfMerge in ngs-bits and megSAP + changeLog(2025, 1, 17, "Added support for gzipped VCFs and removing duplicates if there is only one input file."); changeLog(2022, 12, 8, "Initial implementation."); } @@ -48,10 +48,13 @@ class ConcreteTool bool filter_used = !filter.isEmpty(); bool skip_duplicates = getFlag("skip_duplicates"); - //variables to store infos from 'in' + //variables to store infos int column_count = -1; QSet filters_defined; QSet vars; + bool is_first = true; + const int buffer_size = 1048576; //1MB buffer + char* buffer = new char[buffer_size]; //counts int c_written = 0; @@ -59,19 +62,45 @@ class ConcreteTool int c_filter = 0; //copy in to out - for (int i=0; i in_p = Helper::openFileForReading(in_files[i], true); - while (!in_p->atEnd()) + FILE* instream = fopen(in.toUtf8().data(), "rb"); + if (instream==nullptr) THROW(FileAccessException, "Could not open file '" + in + "' for reading!"); + gzFile file = gzdopen(fileno(instream), "rb"); //read binary: always open in binary mode because windows and mac open in text mode + if (file==nullptr) THROW(FileAccessException, "Could not open file '" + in + "' for reading!"); + + while(!gzeof(file)) { - bool is_first = (i==0); - QByteArray line = in_p->readLine(); + char* char_array = gzgets(file, buffer, buffer_size); + //handle errors like truncated GZ file + if (char_array==nullptr) + { + int error_no = Z_OK; + QByteArray error_message = gzerror(file, &error_no); + if (error_no!=Z_OK && error_no!=Z_STREAM_END) + { + THROW(FileParseException, "Error while reading file '" + in + "': " + error_message); + } + + continue; + } + + //determine end of read line + int i=0; + while(iwrite(line); out_p->write("\n"); } - else + else if (!line.startsWith("##")) //check number of columns matches in all other files { - if (!line.startsWith("##")) - { - if (parts.count()!=column_count) THROW(ArgumentException, "VCF files with differing column count cannot be combined! First file has " + QString::number(column_count) + " columns, but second as " + QString::number(parts.count()) + " columns!"); - } - continue; + if (parts.count()!=column_count) THROW(ArgumentException, "VCF files with differing column count cannot be combined! First file has " + QString::number(column_count) + " columns, but second as " + QString::number(parts.count()) + " columns!"); } continue; } - //content lines + //skip duplicate variants if (skip_duplicates) { QByteArray tag = parts[VcfFile::CHROM] + '\t' + parts[VcfFile::POS] + '\t' + parts[VcfFile::REF] + '\t' + parts[VcfFile::ALT]; @@ -144,20 +169,26 @@ class ConcreteTool out_p->write(line); out_p->write("\n"); } - in_p->close(); + gzclose(file); + + is_first = false; } + //clean up + out_p->close(); + delete[] buffer; + //Statistics output QTextStream stream(stdout); stream << "Variants written: " << c_written << endl; - if (filter_used) - { - stream << "Filter entries added to variants: " << c_filter << endl; - } if (skip_duplicates) { stream << "Duplicate variants skipped: " << c_dup << endl; } + if (filter_used) + { + stream << "Filter entries added to variants: " << c_filter << endl; + } } }; diff --git a/src/VcfMerge/VcfMerge.pro b/src/VcfMerge/VcfMerge.pro deleted file mode 100644 index 090937b7c..000000000 --- a/src/VcfMerge/VcfMerge.pro +++ /dev/null @@ -1,14 +0,0 @@ -#------------------------------------------------- -# -# Project created by QtCreator 2013-10-08T13:40:57 -# -#------------------------------------------------- - -TEMPLATE = app -QT -= gui -CONFIG += console -CONFIG -= app_bundle - -SOURCES += main.cpp - -include("../app_cli.pri") diff --git a/src/VcfMerge/main.cpp b/src/VcfMerge/main.cpp deleted file mode 100644 index b3021301e..000000000 --- a/src/VcfMerge/main.cpp +++ /dev/null @@ -1,99 +0,0 @@ -#include "ToolBase.h" -#include "Helper.h" -#include - -class ConcreteTool: public ToolBase -{ - Q_OBJECT -public: - ConcreteTool(int& argc, char *argv[]) - : ToolBase(argc, argv) - - { - } - - virtual void setup() - { - setDescription("Merges several VCF files into one VCF by appending one to the other."); - addInfileList("in", "Input VCF files that are merged. The VCF header is taken from the first file.", false, true); - //optional - addOutfile("out", "Output VCF. If unset, writes to STDOUT.", true, true); - - changeLog(2023, 12, 12, "Initial implementation."); - changeLog(2023, 12, 14, "Added support for gzipped input."); - } - - virtual void main() - { - //open input/output streams - QStringList ins = getInfileList("in"); - QString out = getOutfile("out"); - QSharedPointer out_p = Helper::openFileForWriting(out, true); - - //init - const int buffer_size = 1048576; //1MB buffer - char* buffer = new char[buffer_size]; - - bool is_first_vcf = true; - foreach(QString in, ins) - { - FILE* instream = fopen(in.toUtf8().data(), "rb"); - if (instream==nullptr) THROW(FileAccessException, "Could not open file '" + in + "' for reading!"); - gzFile file = gzdopen(fileno(instream), "rb"); //read binary: always open in binary mode because windows and mac open in text mode - if (file==nullptr) THROW(FileAccessException, "Could not open file '" + in + "' for reading!"); - - while(!gzeof(file)) - { - char* char_array = gzgets(file, buffer, buffer_size); - //handle errors like truncated GZ file - if (char_array==nullptr) - { - int error_no = Z_OK; - QByteArray error_message = gzerror(file, &error_no); - if (error_no!=Z_OK && error_no!=Z_STREAM_END) - { - THROW(FileParseException, "Error while reading file '" + in + "': " + error_message); - } - - continue; - } - - //determine end of read line - int i=0; - while(iwrite(line + '\n'); - continue; - } - - //variant rows - out_p->write(line + '\n'); - } - gzclose(file); - - is_first_vcf = false; - } - out_p->close(); - delete[] buffer; - } -}; - -#include "main.moc" - -int main(int argc, char *argv[]) -{ - ConcreteTool tool(argc, argv); - return tool.execute(); -} diff --git a/src/tools-TEST/VcfAdd_Test.h b/src/tools-TEST/VcfAdd_Test.h index 068ea0032..ea1b3001a 100644 --- a/src/tools-TEST/VcfAdd_Test.h +++ b/src/tools-TEST/VcfAdd_Test.h @@ -8,21 +8,21 @@ private slots: void default_mode() { - EXECUTE("VcfAdd", "-in " + TESTDATA("data_in/VcfAdd_in1.vcf") + " " + TESTDATA("data_in/VcfAdd_in2.vcf") + " -out out/VcfAdd_out1.vcf"); + EXECUTE("VcfAdd", "-in " + TESTDATA("data_in/VcfAdd_in1.vcf") + " " + TESTDATA("data_in/VcfAdd_in2.vcf.gz") + " -out out/VcfAdd_out1.vcf"); COMPARE_FILES("out/VcfAdd_out1.vcf", TESTDATA("data_out/VcfAdd_out1.vcf")); VCF_IS_VALID_HG19("out/VcfAdd_out1.vcf"); } void with_filters() { - EXECUTE("VcfAdd", "-in " + TESTDATA("data_in/VcfAdd_in1.vcf") + " " + TESTDATA("data_in/VcfAdd_in2.vcf") + " -filter mosaic -filter_desc bli_bla_bluff. -out out/VcfAdd_out2.vcf"); + EXECUTE("VcfAdd", "-in " + TESTDATA("data_in/VcfAdd_in1.vcf") + " " + TESTDATA("data_in/VcfAdd_in2.vcf.gz") + " -filter mosaic -filter_desc bli_bla_bluff. -out out/VcfAdd_out2.vcf"); COMPARE_FILES("out/VcfAdd_out2.vcf", TESTDATA("data_out/VcfAdd_out2.vcf")); VCF_IS_VALID_HG19("out/VcfAdd_out2.vcf"); } void with_filters_and_skip_duplicates() { - EXECUTE("VcfAdd", "-in " + TESTDATA("data_in/VcfAdd_in1.vcf") + " " + TESTDATA("data_in/VcfAdd_in2.vcf") + " -filter mosaic -filter_desc bli_bla_bluff. -skip_duplicates -out out/VcfAdd_out3.vcf"); + EXECUTE("VcfAdd", "-in " + TESTDATA("data_in/VcfAdd_in1.vcf") + " " + TESTDATA("data_in/VcfAdd_in2.vcf.gz") + " -filter mosaic -filter_desc bli_bla_bluff. -skip_duplicates -out out/VcfAdd_out3.vcf"); COMPARE_FILES("out/VcfAdd_out3.vcf", TESTDATA("data_out/VcfAdd_out3.vcf")); VCF_IS_VALID_HG19("out/VcfAdd_out3.vcf"); } diff --git a/src/tools-TEST/VcfMerge_Test.h b/src/tools-TEST/VcfMerge_Test.h deleted file mode 100644 index 2c1d971a5..000000000 --- a/src/tools-TEST/VcfMerge_Test.h +++ /dev/null @@ -1,21 +0,0 @@ -#include "TestFramework.h" -#include "Settings.h" - -TEST_CLASS(VcfMerge_Test) -{ -Q_OBJECT -private slots: - - void default_test() - { - EXECUTE_FAIL("VcfMerge", "-in " + TESTDATA("data_in/VcfMerge_in1.vcf") + " " + TESTDATA("data_in/VcfMerge_in2.vcf") + " -out out/VcfMerge_out1.vcf"); - COMPARE_FILES("out/VcfMerge_out1.vcf", TESTDATA("data_out/VcfMerge_out1.vcf")); - } - - void gz_input_test() - { - EXECUTE_FAIL("VcfMerge", "-in " + TESTDATA("data_in/VcfMerge_in1.vcf.gz") + " " + TESTDATA("data_in/VcfMerge_in2.vcf.gz") + " -out out/VcfMerge_out2.vcf"); - COMPARE_FILES("out/VcfMerge_out2.vcf", TESTDATA("data_out/VcfMerge_out1.vcf")); - } -}; - diff --git a/src/tools-TEST/data_in/VcfAdd_in2.vcf b/src/tools-TEST/data_in/VcfAdd_in2.vcf deleted file mode 100644 index d9a79c987..000000000 --- a/src/tools-TEST/data_in/VcfAdd_in2.vcf +++ /dev/null @@ -1,77 +0,0 @@ -##fileformat=VCFv4.1 -##fileDate=20161019 -##reference=/tmp/local_ngs_data//hg19.fa -##INFO= -##FORMAT= -##FORMAT= -##FORMAT= -##FILTER= -#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA12878 -chr9 5921881 . G A 15076 PASS MQM=60 GT:DP:AO 0/1:1040:554 -chr9 17273878 . A G 1135 PASS MQM=60 GT:DP:AO 0/1:63:45 -chr9 17342383 . C T 983 PASS MQM=60 GT:DP:AO 1/1:30:30 -chr9 17394536 . C T 1754 PASS MQM=60 GT:DP:AO 1/1:55:55 -chr9 17394996 . T C 3131 PASS MQM=60 GT:DP:AO 1/1:97:97 -chr9 17409366 . G A 12082 PASS MQM=60 GT:DP:AO 1/1:378:378 -chr9 17457512 . TA T 104 PASS MQM=60 GT:DP:AO 1/1:4:4 -chr9 21971137 . T G 264 PASS MQM=60 GT:DP:AO 0/1:50:23 -chr9 35074917 . T C 3114 PASS MQM=60 GT:DP:AO 1/1:98:98 -chr9 90062823 . A G 14819 PASS MQM=60 GT:DP:AO 1/1:515:515 -chr9 98209594 . G A 1177 PASS MQM=60 GT:DP:AO 0/1:67:46 -chr9 98232223 . GA G 261 PASS MQM=60 GT:DP:AO 0/1:57:30 -chr10 43595968 . A G 16174 PASS MQM=60 GT:DP:AO 1/1:519:519 -chr10 43613843 . G T 37407 PASS MQM=60 GT:DP:AO 1/1:1133:1133 -chr10 88635779 . C A 845 PASS MQM=52 GT:DP:AO 0/1:69:39 -chr10 104264107 . C T 9673 PASS MQM=60 GT:DP:AO 1/1:384:384 -chr10 104387019 . T C 14782 PASS MQM=60 GT:DP:AO 0/1:1165:572 -chr10 104389932 . T G 59072 PASS MQM=60 GT:DP:AO 1/1:1845:1845 -chr11 13102924 . G A 271 PASS MQM=60 GT:DP:AO 0/1:25:13 -chr11 64572018 . T C 8048 PASS MQM=60 GT:DP:AO 1/1:246:246 -chr11 64572557 . A G 6503 PASS MQM=60 GT:DP:AO 1/1:200:200 -chr11 108175394 . T C 161 PASS MQM=60 GT:DP:AO 0/1:14:8 -chr11 108175462 . G A 388 PASS MQM=60 GT:DP:AO 0/1:30:16 -chr11 108183167 . A G 14140 PASS MQM=60 GT:DP:AO 1/1:443:443 -chr11 125525195 . A G 1962 PASS MQM=60 GT:DP:AO 1/1:59:59 -chr13 32911888 . A G 803 PASS MQM=60 GT:DP:AO 0/1:71:34 -chr13 32913055 . A G 31771 PASS MQM=60 GT:DP:AO 1/1:973:973 -chr13 32915005 . G C 857 PASS MQM=60 GT:DP:AO 1/1:26:26 -chr13 32929232 . A G 445 PASS MQM=60 GT:DP:AO 0/1:35:19 -chr13 32929387 . T C 19168 PASS MQM=60 GT:DP:AO 1/1:582:582 -chr13 79766188 . A G 10911 PASS MQM=60 GT:DP:AO 0/1:815:421 -chr14 45606387 . A G 596 PASS MQM=60 GT:DP:AO 0/1:52:25 -chr14 104165753 . G A 12756 PASS MQM=60 GT:DP:AO 0/1:948:486 -chr15 43701946 . TA T 368 PASS MQM=60 GT:DP:AO 0/1:58:25 -chr15 43707808 . A T 1600 PASS MQM=60 GT:DP:AO 0/1:130:61 -chr15 43724646 . T G 19890 PASS MQM=60 GT:DP:AO 1/1:624:623 -chr15 43748304 . A G 30103 PASS MQM=60 GT:DP:AO 1/1:949:949 -chr15 43762196 . C T 3276 PASS MQM=60 GT:DP:AO 0/1:203:119 -chr15 43767774 . G C 3605 PASS MQM=60 GT:DP:AO 1/1:116:116 -chr16 3639139 . A G 1350 PASS MQM=60 GT:DP:AO 0/1:100:53 -chr16 3639230 . G A 1406 PASS MQM=60 GT:DP:AO 0/1:109:53 -chr16 68771372 . C T 3989 PASS MQM=60 GT:DP:AO 1/1:125:125 -chr16 68857441 . T C 14734 PASS MQM=60 GT:DP:AO 0/1:1126:589 -chr16 81816733 . C T 4971 PASS MQM=60 GT:DP:AO 0/1:419:211 -chr16 89836323 . C T 825 PASS MQM=60 GT:DP:AO 0/1:92:37 -chr16 89838078 . A G 12772 PASS MQM=60 GT:DP:AO 0/1:1034:500 -chr16 89849480 . C T 6693 PASS MQM=60 GT:DP:AO 1/1:199:199 -chr16 89866043 . T C 9348 PASS MQM=60 GT:DP:AO 0/1:724:360 -chr17 7579472 . G C 7571 PASS MQM=60 GT:DP:AO 0/1:555:299 -chr17 29553485 . G A 2514 PASS MQM=60 GT:DP:AO 1/1:83:83 -chr17 33433487 . C T 2514 PASS MQM=60 GT:DP:AO 1/1:84:84 -chr17 33445549 . G A 1499 PASS MQM=60 GT:DP:AO 0/1:114:58 -chr17 41223094 . T C 4307 PASS MQM=60 GT:DP:AO 0/1:414:192 -chr17 41234470 . A G 321 PASS MQM=60 GT:DP:AO 0/1:32:15 -chr17 41244000 . T C 4691 PASS MQM=60 GT:DP:AO 0/1:347:171 -chr17 41244435 . T C 10733 PASS MQM=60 GT:DP:AO 0/1:958:463 -chr17 41244936 . G A 2116 PASS MQM=60 GT:DP:AO 0/1:128:75 -chr17 41245237 . A G 1541 PASS MQM=60 GT:DP:AO 0/1:126:58 -chr17 41245466 . G A 458 PASS MQM=60 GT:DP:AO 0/1:60:26 -chr17 59760996 . A G 7596 PASS MQM=60 GT:DP:AO 1/1:305:305 -chr17 59763347 . A G 369 PASS MQM=60 GT:DP:AO 1/1:12:12 -chr17 59763465 . T C 3654 PASS MQM=60 GT:DP:AO 1/1:113:113 -chr18 19995753 . T C 428 PASS MQM=60 GT:DP:AO 1/1:17:17 -chr18 19996011 . G A 1512 PASS MQM=60 GT:DP:AO 0/1:133:61 -chr19 17389648 . C T 1227 PASS MQM=60 GT:DP:AO 0/1:106:50 -chr19 17389704 . G A 6272 PASS MQM=60 GT:DP:AO 0/1:526:247 -chr20 14167283 . A G 893 PASS MQM=60 GT:DP:AO 1/1:30:30 -chr20 48301146 . G A 39469 off-target MQM=60 GT:DP:AO 1/1:1195:1193 diff --git a/src/tools-TEST/data_in/VcfAdd_in2.vcf.gz b/src/tools-TEST/data_in/VcfAdd_in2.vcf.gz new file mode 100644 index 0000000000000000000000000000000000000000..7f26224e3c1b983374aabe1790e45849ba745ef2 GIT binary patch literal 1311 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 c1ONa4009360763o02=@U000000000008bz|2LJ#7 diff --git a/src/tools-TEST/data_in/VcfMerge_in2.vcf b/src/tools-TEST/data_in/VcfMerge_in2.vcf deleted file mode 100644 index e0ffc9441..000000000 --- a/src/tools-TEST/data_in/VcfMerge_in2.vcf +++ /dev/null @@ -1,58 +0,0 @@ -##fileformat=VCFv4.2 -#CHROM POS ID REF ALT QUAL FILTER INFO -chr10 43100520 rs1800858 A G 16184.9 PASS . -chr10 43118395 rs1800861 G T 37435 PASS . -chr10 86876022 rs11528010 C A 1068.32 PASS . -chr10 102504350 rs2274351 C T 9683.14 PASS . -chr10 102627262 rs12414407 T C 18287.9 PASS . -chr10 102630175 rs4917980 T G 59124.6 PASS . -chr11 13081377 rs2583136 G A 339 PASS . -chr11 64804546 rs2959656 T C 8053.76 PASS . -chr11 64805085 rs540012 A G 6507.07 PASS . -chr11 108304667 rs3092829 T C 195.777 PASS . -chr11 108304735 rs1801516 G A 470.111 PASS . -chr11 125655300 rs506504 A G 1963.67 PASS . -chr13 32337751 rs1801406 A G 1006.88 PASS . -chr13 32338918 rs206075 A G 31796.9 PASS . -chr13 32340868 rs206076 G C 857.965 PASS . -chr13 32355095 rs1799955 A G 541.936 PASS . -chr13 32355250 rs169547 T C 19184.2 PASS . -chr13 79192053 rs2988039 A G 13358.2 PASS . -chr14 45137184 rs45547534 A G 743.712 PASS . -chr14 103699416 rs861539 G A 15606.7 PASS . -chr15 43409748 rs397711844 TA T 708.818 PASS . -chr15 43415610 rs2230451 A T 1980.13 PASS . -chr15 43432448 rs2602141 T G 19907.8 PASS . -chr15 43456106 rs690367 A G 30130.8 PASS . -chr15 43469998 rs689647 C T 3865.08 PASS . -chr15 43475576 rs560191 G C 3608.04 PASS . -chr16 3589138 rs3810812 A G 1640.05 PASS . -chr16 3589229 rs72778139 G A 1724.2 PASS . -chr16 68737469 rs3743674 C T 3985.7 PASS . -chr16 68823538 rs1801552 T C 18115 PASS . -chr16 81783128 rs8045964 C T 6224.56 PASS . -chr16 89769915 rs7195066 C T 1084.54 PASS . -chr16 89771670 rs1800340 A G 15879.1 PASS . -chr16 89783072 rs2239359 C T 6699.09 PASS . -chr16 89799635 rs7190823 T C 11520 PASS . -chr17 7670683 . T A 107.777 PASS . -chr17 7676154 rs1042522 G C 9225.64 PASS . -chr17 31226467 rs2285892 G A 2516.17 PASS . -chr17 35106468 rs4796033 C T 2516.41 PASS . -chr17 35118530 rs9901455 G A 1831.8 PASS . -chr17 43071077 rs1799966 T C 5538.59 PASS . -chr17 43082453 rs1060915 A G 408.629 PASS . -chr17 43091983 rs16942 T C 5726.32 PASS . -chr17 43092418 rs16941 T C 13607.4 PASS . -chr17 43092919 rs799917 G A 2483.35 PASS . -chr17 43093220 rs16940 A G 1908.88 PASS . -chr17 43093449 rs1799949 G A 627.406 PASS . -chr17 61683635 rs4986763 A G 7602.95 PASS . -chr17 61685986 rs4986764 A G 369.409 PASS . -chr17 61686104 rs4986765 T C 3657.34 PASS . -chr18 22415790 rs9946145 T C 428.051 PASS . -chr18 22416048 rs7227477 G A 1900.7 PASS . -chr19 17278839 rs10406920 C T 1535.77 PASS . -chr19 17278895 rs8170 G A 7840.36 PASS . -chr20 14186637 rs6074704 A G 893.339 PASS . -chr20 49684609 rs6512586 G A 39504.2 PASS . \ No newline at end of file diff --git a/src/tools-TEST/data_in/VcfMerge_in2.vcf.gz b/src/tools-TEST/data_in/VcfMerge_in2.vcf.gz deleted file mode 100644 index 9b4ee8ac63928866d02e1fa9ce6a8fe29a4feff4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1025 zcmV+c1pfOUiwFb&00000{{{d;LjnNg18tT~Z=E#|h1c%i$ljW<=X1d#3QdU=NJ#>F zgs4CQA*G1l-(&kGt?zpm*(6WK<8x+?->a)nfBpT(r+;7m`R%{&e!aQz0n@5}Ao{qy_Ba`)5i!@J-Ad|@imnMfOzm(LtTp;4~O zhr-4oHOt5Ar>9cCvK&42l{E(WT)IowoeT>%YHg6LEeOB6L189~+S?8@H6@f7J+wB8 zG2rKt7QM0@U~7(_QMw6>kb}J`94-93<3V>~A1zC=XAs~IMHBy9?OT`&cM9(AqYaJD z-9TQK-gDY|(OEEVa5{ zguS1x2-fR#`b9!{_tB-_+gY>-g83>kX5 zW1U3G^EJA5iW(dT9A$Vd2KVd2iDpAHFz-?O9Kth$_Ezf?rqIMcFolT4y%+0HnG^J z9thW5H{%iV-;iD$rz2uZ1u&x7&tqmHnCP(wOwzQqX({~BYO4b-sgQLD|}!%5ME$0%8Y$n{=<}gRviOKj%)a9a@Y!HL|;_R0~<|d z9H18(rVaTKQq|g#MR-JCDI;rC6pzr^Q?^JvN^v52NskrqDi=sp9X6p={AQ{pc=Gng zbfLYqQ^>u}NshpX3#3TC3LtA&@L<*vfd?^MUXkYFe+2DZ>l{L0x z$o;j4+Q(CR37*dlR-I;14+PQn)}R6sHO%^$F8GOuc8L%P$F@%du!3(F!Bh=a@%+Z= vQv#XrHMPC~A>~m8y$JvSABzYC000000RIL6LPG)o8vp|U0000000000wMXN! diff --git a/src/tools-TEST/data_out/VcfMerge_out1.vcf b/src/tools-TEST/data_out/VcfMerge_out1.vcf deleted file mode 100644 index 9dadd3073..000000000 --- a/src/tools-TEST/data_out/VcfMerge_out1.vcf +++ /dev/null @@ -1,158 +0,0 @@ -##fileformat=VCFv4.2 -#CHROM POS ID REF ALT QUAL FILTER INFO -chr1 27360975 rs35659744 G T 11836.9 PASS . -chr1 45331833 rs3219489 C G 3753.36 PASS . -chr1 62247552 rs2941679 C G 1166.14 PASS . -chr1 62247574 rs10889315 G A 1649.38 PASS . -chr1 62263112 rs2666472 A G 38124.1 PASS . -chr1 62263166 rs2258470 T C 35243.1 PASS . -chr1 62263189 rs2260581 T C 35547.2 PASS . -chr1 62263246 rs2262110 G A 5510.87 PASS . -chr1 62266749 rs11207949 T C 13777.5 PASS . -chr1 62273232 rs7516290 T C 1818.16 PASS . -chr1 62273526 rs17855078 G A 2166.37 PASS . -chr1 62274393 rs12127930 A G 1790.77 PASS . -chr1 62274774 rs2666506 T C 7265.93 PASS . -chr1 62274777 rs2666507 T C 7265.93 PASS . -chr1 78112493 rs6666954 T C 6149.26 PASS . -chr1 119915381 rs6685892 A T 2123.28 PASS . -chr1 119996708 rs2124109 C T 30961 PASS . -chr1 120068882 rs138685616 C A 393.822 PASS . -chr1 120069346 rs2603926 C T 9242.25 PASS . -chr1 120069350 rs11810554 G C 22127.7 PASS . -chr1 120069388 rs372504208 CGG C 8237.41 PASS . -chr1 120069392 rs4021006 G A 24336.4 PASS . -chr1 120069420 rs201668322 T G 8088.96 PASS . -chr2 17761508 rs1812152 T A 3027.81 PASS . -chr2 17772760 rs300175 G A 959.97 PASS . -chr2 17781183 rs300168 A G 3047.03 PASS . -chr2 17781251 rs300169 C T 3588.48 PASS . -chr2 47373967 rs1126497 T C 843.124 PASS . -chr2 47783349 rs1042821 G A 178.202 PASS . -chr2 47803553 rs2020910 T A 288.148 PASS . -chr2 146839405 rs4411641 A G 13274.3 PASS . -chr2 214730440 rs3738888 G A 334.225 PASS . -chr2 214767531 rs2070094 C T 3342.11 PASS . -chr2 214767532 rs2070093 A G 3342.11 PASS . -chr2 214780740 rs2229571 C G 1317.71 PASS . -chr2 214809500 rs1048108 G A 10769.7 PASS . -chr2 219552220 rs34490902 G C 1037.16 PASS . -chr2 219552544 rs59332477 C T 4444.3 PASS . -chr2 219554514 rs10932813 T C 14166.3 PASS . -chr2 219554617 rs10932814 T C 21464.3 PASS . -chr2 219556234 rs10932816 A G 1332.03 PASS . -chr2 219556695 rs1983210 C G 23326.7 PASS . -chr2 219557964 rs72957510 C T 700.211 PASS . -chr2 219558052 rs2278201 A G 23920.4 PASS . -chr2 219565481 rs1039898 C T 23413.1 PASS . -chr2 219570312 rs10180675 A G 20225.1 PASS . -chr2 219570653 rs1061399 G A 387.492 PASS . -chr3 10043852 rs34046352 A G 3006.21 PASS . -chr3 10046720 . C T 512.613 PASS . -chr3 10046723 . AG A 512.613 PASS . -chr3 10046725 rs375350046 TAAG T 512.613 PASS . -chr3 10048039 rs12330369 G A 817.536 PASS . -chr3 10048054 rs62245508 A G 571.47 PASS . -chr3 10049469 rs35652360 C T 126.242 PASS . -chr3 10064848 rs3864017 C T 1466.69 PASS . -chr3 10096385 rs2272125 T G 11320 PASS . -chr3 142449489 rs1802904 C T 1580.85 PASS . -chr3 142459302 rs2229032 C T 1272.85 PASS . -chr3 142469495 rs28910273 A C 11942.8 PASS . -chr3 142498695 rs2227932 A G 4602.79 PASS . -chr3 142558733 rs2227930 A T 3913.22 PASS . -chr3 142562770 rs2227928 A G 8098.5 PASS . -chr5 58321576 rs37535 G C 14705.6 PASS . -chr5 80654962 rs1650697 A G 526.006 PASS . -chr5 80854162 rs184967 A G 27953.9 PASS . -chr5 80873118 rs26279 G A 3734.9 PASS . -chr5 112827157 rs2229992 T C 2153.09 PASS . -chr5 112828864 rs351771 G A 3031.04 PASS . -chr5 112840073 rs41115 G A 6385.98 PASS . -chr5 112840628 rs42427 G A 303.881 PASS . -chr5 112840862 rs866006 T G 4013.75 PASS . -chr5 112841059 rs459552 T A 5320.89 PASS . -chr5 112841474 rs465899 G A 12273.8 PASS . -chr5 132589791 rs55653181 G C 1006.84 PASS . -chr6 35455885 rs4713867 A C 1125.14 PASS . -chr6 130827723 rs9388856 A T 5436.58 PASS . -chr7 5987144 rs2228006 T C 524.208 PASS . -chr7 5997349 rs1805319 G C 714.99 PASS . -chr7 5997426 rs570998668 G GA 285.852 PASS . -chr7 129206487 rs2228617 G C 28334.9 PASS . -chr7 142752462 rs6666 T C 4873.49 PASS . -chr7 142753014 rs6667 T C 10084.3 PASS . -chr8 89946194 rs1061302 T C 708.169 PASS . -chr8 89946302 rs2308962 T C 476.971 PASS . -chr8 89955483 rs709816 A G 435.323 PASS . -chr8 89978251 rs1805794 C G 13193.7 PASS . -chr8 89982791 rs1063045 C T 148.068 PASS . -chr8 106224052 rs1393978 G T 20510.8 PASS . -chr9 5921881 rs72697396 G A 18196.6 PASS . -chr9 17273880 rs12376938 A G 1290.14 PASS . -chr9 17342385 rs1442527 C T 984.37 PASS . -chr9 17394538 rs7035276 C T 1755.93 PASS . -chr9 17394998 rs3739489 T C 3134.2 PASS . -chr9 17409368 rs2780211 G A 12093.3 PASS . -chr9 17457514 rs397766990 TA T 104.477 PASS . -chr9 21971138 rs200429615 T G 404.87 PASS . -chr9 35074920 rs587118 T C 3116.77 PASS . -chr9 87447908 rs12682834 A G 14831.4 PASS . -chr9 95447312 rs357564 G A 1349.27 PASS . -chr9 95469941 . GA G 705.994 PASS . -chr10 43100520 rs1800858 A G 16184.9 PASS . -chr10 43118395 rs1800861 G T 37435 PASS . -chr10 86876022 rs11528010 C A 1068.32 PASS . -chr10 102504350 rs2274351 C T 9683.14 PASS . -chr10 102627262 rs12414407 T C 18287.9 PASS . -chr10 102630175 rs4917980 T G 59124.6 PASS . -chr11 13081377 rs2583136 G A 339 PASS . -chr11 64804546 rs2959656 T C 8053.76 PASS . -chr11 64805085 rs540012 A G 6507.07 PASS . -chr11 108304667 rs3092829 T C 195.777 PASS . -chr11 108304735 rs1801516 G A 470.111 PASS . -chr11 125655300 rs506504 A G 1963.67 PASS . -chr13 32337751 rs1801406 A G 1006.88 PASS . -chr13 32338918 rs206075 A G 31796.9 PASS . -chr13 32340868 rs206076 G C 857.965 PASS . -chr13 32355095 rs1799955 A G 541.936 PASS . -chr13 32355250 rs169547 T C 19184.2 PASS . -chr13 79192053 rs2988039 A G 13358.2 PASS . -chr14 45137184 rs45547534 A G 743.712 PASS . -chr14 103699416 rs861539 G A 15606.7 PASS . -chr15 43409748 rs397711844 TA T 708.818 PASS . -chr15 43415610 rs2230451 A T 1980.13 PASS . -chr15 43432448 rs2602141 T G 19907.8 PASS . -chr15 43456106 rs690367 A G 30130.8 PASS . -chr15 43469998 rs689647 C T 3865.08 PASS . -chr15 43475576 rs560191 G C 3608.04 PASS . -chr16 3589138 rs3810812 A G 1640.05 PASS . -chr16 3589229 rs72778139 G A 1724.2 PASS . -chr16 68737469 rs3743674 C T 3985.7 PASS . -chr16 68823538 rs1801552 T C 18115 PASS . -chr16 81783128 rs8045964 C T 6224.56 PASS . -chr16 89769915 rs7195066 C T 1084.54 PASS . -chr16 89771670 rs1800340 A G 15879.1 PASS . -chr16 89783072 rs2239359 C T 6699.09 PASS . -chr16 89799635 rs7190823 T C 11520 PASS . -chr17 7670683 . T A 107.777 PASS . -chr17 7676154 rs1042522 G C 9225.64 PASS . -chr17 31226467 rs2285892 G A 2516.17 PASS . -chr17 35106468 rs4796033 C T 2516.41 PASS . -chr17 35118530 rs9901455 G A 1831.8 PASS . -chr17 43071077 rs1799966 T C 5538.59 PASS . -chr17 43082453 rs1060915 A G 408.629 PASS . -chr17 43091983 rs16942 T C 5726.32 PASS . -chr17 43092418 rs16941 T C 13607.4 PASS . -chr17 43092919 rs799917 G A 2483.35 PASS . -chr17 43093220 rs16940 A G 1908.88 PASS . -chr17 43093449 rs1799949 G A 627.406 PASS . -chr17 61683635 rs4986763 A G 7602.95 PASS . -chr17 61685986 rs4986764 A G 369.409 PASS . -chr17 61686104 rs4986765 T C 3657.34 PASS . -chr18 22415790 rs9946145 T C 428.051 PASS . -chr18 22416048 rs7227477 G A 1900.7 PASS . -chr19 17278839 rs10406920 C T 1535.77 PASS . -chr19 17278895 rs8170 G A 7840.36 PASS . -chr20 14186637 rs6074704 A G 893.339 PASS . -chr20 49684609 rs6512586 G A 39504.2 PASS . \ No newline at end of file diff --git a/src/tools-TEST/tools-TEST.pro b/src/tools-TEST/tools-TEST.pro index 6099fc782..6c9bb3dd0 100644 --- a/src/tools-TEST/tools-TEST.pro +++ b/src/tools-TEST/tools-TEST.pro @@ -163,7 +163,6 @@ HEADERS += NGSDAddVariantsSomatic_Test.h \ SamplePath_Test.h \ BamExtract_Test.h \ VcfSplit_Test.h \ - VcfMerge_Test.h \ ExtractMethylationData_Test.h \ TsvDiff_Test.h \ QcToTsv_Test.h diff --git a/src/tools.pro b/src/tools.pro index e0ce2912a..6566fa9fa 100644 --- a/src/tools.pro +++ b/src/tools.pro @@ -576,10 +576,6 @@ SUBDIRS += VcfSplit tools-TEST.depends += VcfSplit VcfSplit.depends = cppNGS -SUBDIRS += VcfMerge -tools-TEST.depends += VcfMerge -VcfMerge.depends = cppNGS - SUBDIRS += NGSDExportIgvGeneTrack tools-TEST.depends += NGSDExportIgvGeneTrack NGSDExportIgvGeneTrack.depends = cppNGSD