diff --git a/.Rbuildignore b/.Rbuildignore index 44d762f..110f848 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -4,13 +4,33 @@ LICENSE .github \*\.o -src/vcf/vcfReader.o -src/vcf/gzstream/gzstream.o -src/vcf/txtReader.o -src/vcf/variantIndex.o -src/vcf/vcfReaderDebug.o -DEploid.utils/libs/DEploid.utils.so \*\.png \*\.pdf DEploid-vcf-lib codecov.yml + + +# submodule +vcf/src/gzstream/version +src/vcf/.git +src/vcf/.ci/ +src/vcf/.circleci/ +src/vcf/.github/ +src/vcf/.gitignore +src/vcf/Brewfile +src/vcf/COPYING +src/vcf/CPPLINT.cfg +src/vcf/Makefile.am +src/vcf/README.md +src/vcf/bootstrap +src/vcf/configure.ac +src/vcf/coverage/ +src/vcf/data/ +src/vcf/main.cpp +src/vcf/tests/ +src/vcf/version +src/vcf/src/gzstream/gzstream.o +src/vcf/src/txtReader.o +src/vcf/src/variantIndex.o +src/vcf/src/vcfReader.o +src/vcf/src/vcfReaderDebug.o diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index d46a617..a91ad26 100755 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -32,6 +32,8 @@ jobs: steps: - uses: actions/checkout@v4 + with: + submodules: recursive - uses: r-lib/actions/setup-pandoc@v2 diff --git a/.github/workflows/pr-commands.yaml b/.github/workflows/pr-commands.yaml index 2edd93f..2b4c6fe 100755 --- a/.github/workflows/pr-commands.yaml +++ b/.github/workflows/pr-commands.yaml @@ -19,6 +19,8 @@ jobs: contents: write steps: - uses: actions/checkout@v4 + with: + submodules: recursive - uses: r-lib/actions/pr-fetch@v2 with: diff --git a/.github/workflows/test-coverage.yaml b/.github/workflows/test-coverage.yaml index 8fa20f0..d38efaf 100755 --- a/.github/workflows/test-coverage.yaml +++ b/.github/workflows/test-coverage.yaml @@ -18,6 +18,8 @@ jobs: steps: - uses: actions/checkout@v4 + with: + submodules: recursive - uses: r-lib/actions/setup-r@v2 with: diff --git a/.gitmodules b/.gitmodules index c50e3e7..d4515f6 100755 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ [submodule "DEploid-vcf-lib"] - path = DEploid-vcf-lib + path = src/vcf url = https://github.com/DEploid-dev/DEploid-vcf-lib diff --git a/DESCRIPTION b/DESCRIPTION index 42a70ee..cde4f01 100755 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: DEploid.utils Title: 'DEploid' Data Analysis and Results Interpretation -Version: 0.0.1 +Version: 0.0.2 Authors@R: c( person("Joe", "Zhu", , "sha.joe.zhu@gmail.com", role = c("aut", "cre"), comment = c(ORCID = "0000-0001-7566-2787")), diff --git a/DEploid-vcf-lib b/DEploid-vcf-lib deleted file mode 160000 index dc03c0a..0000000 --- a/DEploid-vcf-lib +++ /dev/null @@ -1 +0,0 @@ -Subproject commit dc03c0a01c4c03fd5094f14d3d362f92ee19f7cc diff --git a/R/errorAnalysis.r b/R/errorAnalysis.r index 01a4fc8..5aa9fa4 100755 --- a/R/errorAnalysis.r +++ b/R/errorAnalysis.r @@ -173,7 +173,9 @@ dEploidOutError_3 <- function(h.pair, h.pair.true, rel.cost.switch = 2, do.plot dropTimes <- sum(diff(drop.strain) != 0) dropError <- sum(drop.strain != 0) - cat("\nDecoding gives:\nNo. switches:\t", n.s - dropTimes, "\nNo. GT errs:\t", n.gt, "\nNo. Drop errs:\t", dropError, "\n") + message(paste0("\nDecoding gives:\nNo. switches:\t", n.s - dropTimes, + "\nNo. GT errs:\t", n.gt, + "\nNo. Drop errs:\t", dropError, "\n")) return(list( switchError = n.s - dropTimes, mutError = n.gt, @@ -299,7 +301,10 @@ dEploidOutError_2 <- function(h.pair, h.pair.true, rel.cost.switch = 2, do.plot # definite.switch = sum(!changed.permn.at %in% changed.k.eff.at) dropTimes <- sum(diff(drop.strain) != 0) # length(changed.k.eff.at) dropError <- sum(drop.strain != 0) - cat("\nDecoding gives:\nNo. switches:\t", n.s - dropTimes, "\nNo. GT errs:\t", n.gt, "\nNo. Drop switches", dropTimes, "\nNo. Drop errs:\t", dropError, "\n") + message(paste0("\nDecoding gives:\nNo. switches:\t",n.s - dropTimes, + "\nNo. GT errs:\t", n.gt, + "\nNo. Drop switches", dropTimes, + "\nNo. Drop errs:\t", dropError, "\n")) hap.pair.true.idx <- array(unlist(possible.permn[op]), c(2, length(op))) diff --git a/R/plotting.R b/R/plotting.R index 01554bf..c447c22 100755 --- a/R/plotting.R +++ b/R/plotting.R @@ -132,7 +132,7 @@ plot_total_coverage <- function(ref, alt, chroms, cex.lab = 1, cex.main = 1, cex } -fun_dataExplore <- function(coverage, PLAF, prefix = "", pdfBool, threshold = 0.995, window.size = 10) { +fun_dataExplore <- function(coverage, PLAF, prefix = tempdir(), pdfBool, threshold = 0.995, window.size = 10) { # PLAF = plafInfo$PLAF ref <- coverage$refCount alt <- coverage$altCount @@ -189,7 +189,7 @@ fun_dataExplore <- function(coverage, PLAF, prefix = "", pdfBool, threshold = 0. } -fun_interpretDEploid_best <- function(coverage, PLAF, dEploidPrefix, prefix = "", exclude, pdfBool) { +fun_interpretDEploid_best <- function(coverage, PLAF, dEploidPrefix, prefix = tempdir(), exclude, pdfBool) { ref <- coverage$refCount alt <- coverage$altCount @@ -243,7 +243,7 @@ fun_interpretDEploid_best <- function(coverage, PLAF, dEploidPrefix, prefix = "" } -fun_interpretDEploid_1 <- function(coverage, PLAF, dEploidPrefix, prefix = "", exclude, pdfBool) { +fun_interpretDEploid_1 <- function(coverage, PLAF, dEploidPrefix, prefix = tempdir(), exclude, pdfBool) { # PLAF = plafInfo$PLAF ref <- coverage$refCount alt <- coverage$altCount @@ -375,7 +375,7 @@ plot_wsaf_vs_index <- function(coverage, expWSAF = c(), expWSAFChrom = c(), excl } -fun_interpretDEploid_2 <- function(coverage, dEploidPrefix, prefix = "", exclude, pdfBool, ringBool = FALSE, dEploid_v = "classic") { +fun_interpretDEploid_2 <- function(coverage, dEploidPrefix, prefix = tempdir(), exclude, pdfBool, ringBool = FALSE, dEploid_v = "classic") { dEploidOutput <- fun_dEploidPrefix(dEploidPrefix, dEploid_v) if (dEploid_v == "classic") { tmpProp <- read.table(dEploidOutput$propFileName, header = F) @@ -464,7 +464,7 @@ plot_postProb_ofCase <- function(inPrefix, outPrefix, case, strainNumber, pdfBoo } -fun_interpretDEploid_3 <- function(inPrefix, outPrefix = "", pdfBool, inbreeding = FALSE) { +fun_interpretDEploid_3 <- function(inPrefix, outPrefix = tempdir(), pdfBool, inbreeding = FALSE) { strainI <- 0 while (file.exists(paste(inPrefix, ".single", strainI, sep = ""))) { plot_postProb_ofCase(inPrefix, outPrefix, paste("single", strainI, sep = ""), strainI, pdfBool) @@ -476,7 +476,7 @@ fun_interpretDEploid_3 <- function(inPrefix, outPrefix = "", pdfBool, inbreeding } -fun_interpretDEploid_4 <- function(inPrefix, outPrefix = "", pdfBool) { +fun_interpretDEploid_4 <- function(inPrefix, outPrefix = tempdir(), pdfBool) { inFile <- paste(inPrefix, ".ibd.probs", sep = "") if (!file.exists(inFile)) { warning("In file not exist") @@ -508,7 +508,7 @@ fun_interpretDEploid_4 <- function(inPrefix, outPrefix = "", pdfBool) { } -fun_interpretDEploid_3_ring <- function(inPrefix, outPrefix = "", pdfBool, inbreeding = FALSE, coverage, exclude, ringDecreasingOrder, trackHeight = 0.8, transformP = FALSE) { +fun_interpretDEploid_3_ring <- function(inPrefix, outPrefix = tempdir(), pdfBool, inbreeding = FALSE, coverage, exclude, ringDecreasingOrder, trackHeight = 0.8, transformP = FALSE) { if (pdfBool == TRUE) { cexSize <- 3 if (inbreeding) { @@ -639,7 +639,7 @@ plot_ibd_change <- function(changeAt, titlePrefix, nFigures) { } -# fun_interpretDEploid_4 <- function(inPrefix, outPrefix = "", pdfBool){ +# fun_interpretDEploid_4 <- function(inPrefix, outPrefix = tempdir(), pdfBool){ # fileName = paste(inPrefix, ".extra", sep = "") # if ( file.exists(fileName) ){ # obj = read.table(fileName , header=T) diff --git a/src/Makevars.win b/src/Makevars.win index 64cc298..d18059b 100755 --- a/src/Makevars.win +++ b/src/Makevars.win @@ -1,11 +1,11 @@ OBJECTS.vcfr = rvcf.o \ RcppExports.o \ - vcf/txtReader.o \ - vcf/variantIndex.o \ - vcf/vcfReader.o \ - vcf/gzstream/gzstream.o \ - vcf/vcfReaderDebug.o + vcf/src/txtReader.o \ + vcf/src/variantIndex.o \ + vcf/src/vcfReader.o \ + vcf/src/gzstream/gzstream.o \ + vcf/src/vcfReaderDebug.o OBJECTS = $(OBJECTS.vcfr) -PKG_CXXFLAGS = -I/usr/share/R/include/ -Ivcf/ -Ivcf/gzstream/ -DVERSION="\"R\"" -DRBUILD -DSTRICT_R_HEADERS +PKG_CXXFLAGS = -I/usr/share/R/include/ -Ivcf/src/ -Ivcf/src/gzstream/ -DVERSION="\"R\"" -DRBUILD -DSTRICT_R_HEADERS PKG_LIBS = -lz diff --git a/src/rvcf.cpp b/src/rvcf.cpp index 718eb7e..b3cd930 100755 --- a/src/rvcf.cpp +++ b/src/rvcf.cpp @@ -1,5 +1,5 @@ #include -#include "vcf/vcfReader.hpp" +#include "vcf/src/vcfReader.hpp" using namespace Rcpp; diff --git a/src/vcf b/src/vcf new file mode 160000 index 0000000..9942cf7 --- /dev/null +++ b/src/vcf @@ -0,0 +1 @@ +Subproject commit 9942cf77fe139f7e2442e7771c270aaa0fe8f40c diff --git a/src/vcf/exceptions.hpp b/src/vcf/exceptions.hpp deleted file mode 100755 index c7c60a6..0000000 --- a/src/vcf/exceptions.hpp +++ /dev/null @@ -1,271 +0,0 @@ -/* - * dEploid is used for deconvoluting Plasmodium falciparum genome from - * mix-infected patient sample. - * - * Copyright (C) 2016-2017 University of Oxford - * - * Author: Sha (Joe) Zhu - * - * This file is part of dEploid. - * - * dEploid is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - - -#include /* string */ -#include - -#ifndef EXCEPTION -#define EXCEPTION - -// using namespace std; -using std::string; -using std::ifstream; -using std::stoi; -using std::exception; - -namespace vcf { -struct InvalidInput : std::exception { - string throwMsg; - - InvalidInput() { - } - - explicit InvalidInput(string str) { - this->throwMsg = "\033[1;31m" + str + "\033[0m"; - } - virtual ~InvalidInput() throw() {} - virtual const char* what() const noexcept { - return throwMsg.c_str(); - } -}; -} // namespace vcf - -struct ShouldNotBeCalled : std::exception{ - ShouldNotBeCalled() { } - virtual ~ShouldNotBeCalled() throw() {} - virtual const char* what() const noexcept { - static const std::string msg = "Should not reach here"; - return msg.c_str(); - } -}; - - -struct VirtualFunctionShouldNotBeCalled : public ShouldNotBeCalled{ - VirtualFunctionShouldNotBeCalled():ShouldNotBeCalled() {} - ~VirtualFunctionShouldNotBeCalled() throw() {} -}; - - -struct InvalidInput : std::exception { - string src; - string reason; - string throwMsg; - - InvalidInput() { - this->src = ""; - this->reason = ""; - } - - explicit InvalidInput(string str) { - this->src = "\033[1;31m" + str + "\033[0m"; - this->reason = ""; - } - virtual ~InvalidInput() throw() {} - virtual const char* what() const noexcept { - return throwMsg.c_str(); - } -}; - - -struct OutOfVectorSize : std::exception{ - OutOfVectorSize() { } - virtual ~OutOfVectorSize() throw() {} - virtual const char* what() const noexcept { - static const std::string msg = "Out of vector size!"; - return msg.c_str(); - } -}; - - -struct InvalidK : public InvalidInput{ - InvalidK():InvalidInput() { - this->reason = "k must be at least 2, when using the flag -ibd."; - throwMsg = this->reason + this->src; - } - ~InvalidK() throw() {} -}; - - -struct PositionUnsorted : public InvalidInput{ - explicit PositionUnsorted(string str):InvalidInput(str) { - this->reason = "Position (POS) not sorted in "; - throwMsg = this->reason + this->src; - } - ~PositionUnsorted() throw() {} -}; - - -struct NotEnoughArg : public InvalidInput{ - explicit NotEnoughArg(string str):InvalidInput(str) { - this->reason = "Not enough parameters when parsing option: "; - throwMsg = this->reason + this->src; - } - ~NotEnoughArg() throw() {} -}; - - -struct VcfOutUnSpecified : public InvalidInput{ - explicit VcfOutUnSpecified(string str):InvalidInput(str) { - this->reason = "Missing flag \"-vcfOut\"."; - throwMsg = this->reason + this->src; - } - ~VcfOutUnSpecified() throw() {} -}; - - -struct WrongType : public InvalidInput{ - explicit WrongType(string str):InvalidInput(str) { - this->reason = "Wrong type for parsing: "; - throwMsg = this->reason + this->src; - } - ~WrongType() throw() {} -}; - - -struct InvalidSampleInVcf : public InvalidInput{ - explicit InvalidSampleInVcf(string sample, string vcf):InvalidInput(sample) { - this->reason = "Invalid sample name: "; - throwMsg = this->reason + this->src + " in " + vcf; - } - ~InvalidSampleInVcf() throw() {} -}; - - -struct BadScientificNotation : public InvalidInput{ - explicit BadScientificNotation(string str1, string str2):InvalidInput(str1) { - this->reason = "Bad scientific notation: "; - throwMsg = this->reason + this->src + - ", int expected. Check input file" + str2; - } - ~BadScientificNotation() throw() {} -}; - - -struct BadConversion : public InvalidInput{ - explicit BadConversion(string str1, string str2):InvalidInput(str1) { - this->reason = "Bad conversion: "; - throwMsg = this->reason + this->src + - ", int expected. Check input file" + str2; - } - ~BadConversion() throw() {} -}; - - -struct InvalidInputFile : public InvalidInput{ - explicit InvalidInputFile(string str):InvalidInput(str) { - this->reason = "Invalid input file: "; - throwMsg = this->reason + this->src; - } - ~InvalidInputFile() throw() {} -}; - - -struct FileNameMissing : public InvalidInput{ - explicit FileNameMissing(string str):InvalidInput(str) { - this->reason = " file path missing!"; - throwMsg = this->src + this->reason; - } - ~FileNameMissing() throw() {} -}; - - -struct UnknowArg : public InvalidInput{ - explicit UnknowArg(string str):InvalidInput(str) { - this->reason = "Unknow option: "; - throwMsg = this->reason + this->src; - } - ~UnknowArg() throw() {} -}; - - -struct FlagsConflict : public InvalidInput{ - explicit FlagsConflict(string str1, string str2):InvalidInput(str1) { - this->reason = "Flag: "; - throwMsg = this->reason + this->src + string(" conflict with flag ") + str2; - } - ~FlagsConflict() throw() {} -}; - - -struct FlagsOrderIncorrect : public InvalidInput{ - // -plafFromVcf after -vcf - // -sample after -vcf - explicit FlagsOrderIncorrect(string str1, string str2):InvalidInput(str1) { - this->reason = "Flag: "; - throwMsg = this->reason + this->src + - string(" should be used after flag ") + str2; - } - ~FlagsOrderIncorrect() throw() {} -}; - - -struct OutOfRange : public InvalidInput{ - explicit OutOfRange(string str1, string str2):InvalidInput(str1) { - this->reason = "Flag \""; - throwMsg = this->reason + this->src + string(" ") + - str2 + string("\" out of range [0, 1]."); - } - ~OutOfRange() throw() {} -}; - - -struct LociNumberUnequal : public InvalidInput{ - explicit LociNumberUnequal(string str):InvalidInput(str) { - this->reason = "Number of sites was wrong (compared to ref count) in: "; - throwMsg = this->reason + this->src; - } - ~LociNumberUnequal() throw() {} -}; - - -struct SumOfPropNotOne : public InvalidInput{ - explicit SumOfPropNotOne(string str):InvalidInput(str) { - this->reason = "Sum of initial proportion is not equal to 1, but equals "; - throwMsg = this->reason + this->src; - } - ~SumOfPropNotOne() throw() {} -}; - - -struct NumOfPropNotMatchNumStrain : public InvalidInput{ - explicit NumOfPropNotMatchNumStrain(string str):InvalidInput(str) { - this->reason = - "Number of initial proportion do not match number of strains!"; - throwMsg = this->reason + this->src; - } - ~NumOfPropNotMatchNumStrain() throw() {} -}; - - -struct InitialPropUngiven : public InvalidInput{ - explicit InitialPropUngiven(string str):InvalidInput(str) { - this->reason = "Initial proportion was not specified."; - throwMsg = this->reason + this->src; - } - ~InitialPropUngiven() throw() {} -}; - -#endif diff --git a/src/vcf/global.hpp b/src/vcf/global.hpp deleted file mode 100755 index 729ffd1..0000000 --- a/src/vcf/global.hpp +++ /dev/null @@ -1,35 +0,0 @@ -/* - * dEploid is used for deconvoluting Plasmodium falciparum genome from - * mix-infected patient sample. - * - * Copyright (C) 2016-2017 University of Oxford - * - * Author: Sha (Joe) Zhu - * - * This file is part of dEploid. - * - * dEploid is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - -#define dEploid_src_macros -// #pragma GCC diagnostic ignored "-Wunused-result" - -#ifndef NDEBUG -#define dout std::cout << " " -#else -// #pragma GCC diagnostic ignored "-Wunused-value" -#define dout 0 && std::cout -#endif - diff --git a/src/vcf/gzstream/COPYING.LIB b/src/vcf/gzstream/COPYING.LIB deleted file mode 100755 index b1e3f5a..0000000 --- a/src/vcf/gzstream/COPYING.LIB +++ /dev/null @@ -1,504 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! - - diff --git a/src/vcf/gzstream/README b/src/vcf/gzstream/README deleted file mode 100755 index 5fb78b2..0000000 --- a/src/vcf/gzstream/README +++ /dev/null @@ -1,6 +0,0 @@ - - gzstream - C++ iostream classes wrapping the zlib compression library. -=========================================================================== - - See index.html for documentation and installation instructions. diff --git a/src/vcf/gzstream/gzstream.cpp b/src/vcf/gzstream/gzstream.cpp deleted file mode 100755 index 6bb1628..0000000 --- a/src/vcf/gzstream/gzstream.cpp +++ /dev/null @@ -1,165 +0,0 @@ -// ============================================================================ -// gzstream, C++ iostream classes wrapping the zlib compression library. -// Copyright (C) 2001 Deepak Bandyopadhyay, Lutz Kettner -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// ============================================================================ -// -// File : gzstream.C -// Revision : $Revision: 1.7 $ -// Revision_date : $Date: 2003/01/08 14:41:27 $ -// Author(s) : Deepak Bandyopadhyay, Lutz Kettner -// -// Standard streambuf implementation following Nicolai Josuttis, "The -// Standard C++ Library". -// ============================================================================ - -#include -#include // for memcpy -#include "gzstream/gzstream.h" - -#ifdef GZSTREAM_NAMESPACE -namespace GZSTREAM_NAMESPACE { -#endif - -// ---------------------------------------------------------------------------- -// Internal classes to implement gzstream. See header file for user classes. -// ---------------------------------------------------------------------------- - -// -------------------------------------- -// class gzstreambuf: -// -------------------------------------- - -gzstreambuf* gzstreambuf::open( const char* name, int open_mode) { - if ( is_open()) - return (gzstreambuf*)0; - mode = open_mode; - // no append nor read/write mode - if ((mode & std::ios::ate) || (mode & std::ios::app) - || ((mode & std::ios::in) && (mode & std::ios::out))) - return (gzstreambuf*)0; - char fmode[10]; - char* fmodeptr = fmode; - if ( mode & std::ios::in) - *fmodeptr++ = 'r'; - else if ( mode & std::ios::out) - *fmodeptr++ = 'w'; - *fmodeptr++ = 'b'; - *fmodeptr = '\0'; - file = gzopen( name, fmode); - if (file == 0) - return (gzstreambuf*)0; - opened = 1; - return this; -} - -gzstreambuf * gzstreambuf::close() { - if ( is_open()) { - sync(); - opened = 0; - if ( gzclose( file) == Z_OK) - return this; - } - return (gzstreambuf*)0; -} - -int gzstreambuf::underflow() { // used for input buffer only - if ( gptr() && ( gptr() < egptr())) - return * reinterpret_cast( gptr()); - - if ( ! (mode & std::ios::in) || ! opened) - return EOF; - // Josuttis' implementation of inbuf - int n_putback = gptr() - eback(); - if ( n_putback > 4) - n_putback = 4; - memcpy( buffer + (4 - n_putback), gptr() - n_putback, n_putback); - - int num = gzread( file, buffer+4, bufferSize-4); - if (num <= 0) // ERROR or EOF - return EOF; - - // reset buffer pointers - setg( buffer + (4 - n_putback), // beginning of putback area - buffer + 4, // read position - buffer + 4 + num); // end of buffer - - // return next character - return * reinterpret_cast( gptr()); -} - -int gzstreambuf::flush_buffer() { - // Separate the writing of the buffer from overflow() and - // sync() operation. - int w = pptr() - pbase(); - if ( gzwrite( file, pbase(), w) != w) - return EOF; - pbump( -w); - return w; -} - -int gzstreambuf::overflow( int c) { // used for output buffer only - if ( ! ( mode & std::ios::out) || ! opened) - return EOF; - if (c != EOF) { - *pptr() = c; - pbump(1); - } - if ( flush_buffer() == EOF) - return EOF; - return c; -} - -int gzstreambuf::sync() { - // Changed to use flush_buffer() instead of overflow( EOF) - // which caused improper behavior with std::endl and flush(), - // bug reported by Vincent Ricard. - if ( pptr() && pptr() > pbase()) { - if ( flush_buffer() == EOF) - return -1; - } - return 0; -} - -// -------------------------------------- -// class gzstreambase: -// -------------------------------------- - -gzstreambase::gzstreambase( const char* name, int mode) { - init( &buf); - open( name, mode); -} - -gzstreambase::~gzstreambase() { - buf.close(); -} - -void gzstreambase::open( const char* name, int open_mode) { - if ( ! buf.open( name, open_mode)) - clear( rdstate() | std::ios::badbit); -} - -void gzstreambase::close() { - if ( buf.is_open()) - if ( ! buf.close()) - clear( rdstate() | std::ios::badbit); -} - -#ifdef GZSTREAM_NAMESPACE -} // namespace GZSTREAM_NAMESPACE -#endif - -// ============================================================================ -// EOF // diff --git a/src/vcf/gzstream/gzstream.h b/src/vcf/gzstream/gzstream.h deleted file mode 100755 index ce4931f..0000000 --- a/src/vcf/gzstream/gzstream.h +++ /dev/null @@ -1,122 +0,0 @@ -// ============================================================================ -// gzstream, C++ iostream classes wrapping the zlib compression library. -// Copyright (C) 2001 Deepak Bandyopadhyay, Lutz Kettner -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// ============================================================================ -// -// File : gzstream.h -// Revision : $Revision: 1.5 $ -// Revision_date : $Date: 2002/04/26 23:30:15 $ -// Author(s) : Deepak Bandyopadhyay, Lutz Kettner -// -// Standard streambuf implementation following Nicolai Josuttis, "The -// Standard C++ Library". -// ============================================================================ - -#ifndef GZSTREAM_H -#define GZSTREAM_H 1 -#define ZLIB_WINAPI - -// standard C++ with new header file names and std:: namespace -#include -#include -#include - -#ifdef GZSTREAM_NAMESPACE -namespace GZSTREAM_NAMESPACE { -#endif - -// ---------------------------------------------------------------------------- -// Internal classes to implement gzstream. See below for user classes. -// ---------------------------------------------------------------------------- - -class gzstreambuf : public std::streambuf { -private: - static const int bufferSize = 47+256; // size of data buff - // totals 512 bytes under g++ for igzstream at the end. - - gzFile file; // file handle for compressed file - char buffer[bufferSize]; // data buffer - char opened; // open/close state of stream - int mode; // I/O mode - - int flush_buffer(); -public: - gzstreambuf() : opened(0) { - setp( buffer, buffer + (bufferSize-1)); - setg( buffer + 4, // beginning of putback area - buffer + 4, // read position - buffer + 4); // end position - // ASSERT: both input & output capabilities will not be used together - } - int is_open() { return opened; } - gzstreambuf* open( const char* name, int open_mode); - gzstreambuf* close(); - ~gzstreambuf() { close(); } - - virtual int overflow( int c = EOF); - virtual int underflow(); - virtual int sync(); -}; - -class gzstreambase : virtual public std::ios { -protected: - gzstreambuf buf; -public: - gzstreambase() { init(&buf); } - gzstreambase( const char* name, int open_mode); - ~gzstreambase(); - void open( const char* name, int open_mode); - void close(); - gzstreambuf* rdbuf() { return &buf; } -}; - -// ---------------------------------------------------------------------------- -// User classes. Use igzstream and ogzstream analogously to ifstream and -// ofstream respectively. They read and write files based on the gz* -// function interface of the zlib. Files are compatible with gzip compression. -// ---------------------------------------------------------------------------- - -class igzstream : public gzstreambase, public std::istream { -public: - igzstream() : std::istream( &buf) {} - igzstream( const char* name, int open_mode = std::ios::in) - : gzstreambase( name, open_mode), std::istream( &buf) {} - gzstreambuf* rdbuf() { return gzstreambase::rdbuf(); } - void open( const char* name, int open_mode = std::ios::in) { - gzstreambase::open( name, open_mode); - } -}; - -class ogzstream : public gzstreambase, public std::ostream { -public: - ogzstream() : std::ostream( &buf) {} - ogzstream( const char* name, int mode = std::ios::out) - : gzstreambase( name, mode), std::ostream( &buf) {} - gzstreambuf* rdbuf() { return gzstreambase::rdbuf(); } - void open( const char* name, int open_mode = std::ios::out) { - gzstreambase::open( name, open_mode); - } -}; - -#ifdef GZSTREAM_NAMESPACE -} // namespace GZSTREAM_NAMESPACE -#endif - -#endif // GZSTREAM_H -// ============================================================================ -// EOF // - diff --git a/src/vcf/gzstream/index.html b/src/vcf/gzstream/index.html deleted file mode 100755 index 8a9ef8e..0000000 --- a/src/vcf/gzstream/index.html +++ /dev/null @@ -1,145 +0,0 @@ - -Gzstream Library Home Page - - - -

Gzstream Library Home Page

- -
-
- - - -
- - -
-

Introduction

- -Gzstream is a small C++ library, basically just a wrapper, -that provides the functionality of the -zlib C-library in a C++ iostream. -It is freely available under the LGPL license.

- -Gzstream has been written by -Deepak Bandyopadhyay and -Lutz Kettner at -the Computational -Geometry Group at UNC Chapel Hill.

- - -


-

Supported Systems

- -Gzstream requires a standard compliant C++ compiler (we use the new -header file conventions and the new iostream in the std:: name space) -and, of course, zlib. We used zlib 1.1.3 so far, but see the zlib home page for why you should -upgrade to zlib 1.1.4. So, in theory, the provided sources could run -on many platforms. However, we used only the following few -platforms.

-

- -

    -
  • PC Linux, RedHat 6.1, g++ version 2.95.2 -
  • PC Linux, Debian, g++ version 2.95.2 and 3.1 -
  • SGI Irix 6.5, MIPSpro CC version 7.30 -

- - -


-

Installation

- -Either compile gzstream.C by hand, place it in some library, -and move gzstream.h into the include search path of your -compiler. Or use the provided Makefile, adapt its -variables, and follow the remarks in the Makefile. Two -test programs are provided, test_gzip.C and test_gunzip.C. -The Makefile contains a rule that performs a small test -with these programs.

- - -


-

Documentation

- -The library provides two classes, igzstream and ogzstream, -that can be used analogously to ifstream and ofstream -respectively.

- -The classes are by default in the global name space. This can -be changed by setting the macro GZSTREAM_NAMESPACE to -the desired name space, e.g., by setting the option --DGZSTREAM_NAMESPACE=gz in the Makefile. -However, this needs to be consistent for both, the library compilation -and the application that uses the library.

- - -


-

What's Missing

- -
    -
  • Seek. The zlib library provides the necessary functionality, - but we have not realized that in the wrapper (yet? ;-). -
  • Both streams are based on the same streambuffer. So, they - cannot be used to derive an iogzstream class that would allow - simultaneous reading and writing to the same file. -

- - -


-

Download and Release Notes

- -
    -
  • Gzstream library 1.5 (08 Apr 2003): - gzstream.tgz
    - Fixed bug that did not set the state correctly on failure to open or - close a file.
    - Fixed bug in the indexing of the write buffer that - caused the write buffer to shrink continously and finally caused - wrong results when writing compressed files (only observed on some - platforms).

    -

  • Gzstream library 1.4 (27 Apr 2002):
    - Fixed a bug that stopped stream output after calling flush() - or using std::endl.

    -

  • Gzstream library 1.3 (06 Nov 2001):
    - Fixed unsigned char -- signed char bug. Increased buffer size - for better performance.

    -

  • Gzstream library 1.2 (04 Oct 2001):
    - Initial release as gzstream, renamed from zipstream.

    -

  • Zipstream library 1.1 (09 Sep 2001):
    - Initial release. -
- -
-

Acknowledgements

- -Credits for finding bugs and improving this software go to: -Vincent Ricard, Peter Milley, Peter J. Torelli, and Ares Lagae. -

- -


-

Links

- - - -
-
- The Computational Geometry Group at UNC Chapel Hill, Jan. 08, 2003. -
- - - diff --git a/src/vcf/gzstream/logo.gif b/src/vcf/gzstream/logo.gif deleted file mode 100755 index e259089..0000000 Binary files a/src/vcf/gzstream/logo.gif and /dev/null differ diff --git a/src/vcf/gzstream/test_gunzip.C b/src/vcf/gzstream/test_gunzip.C deleted file mode 100755 index 6c4a7d7..0000000 --- a/src/vcf/gzstream/test_gunzip.C +++ /dev/null @@ -1,78 +0,0 @@ -// ============================================================================ -// gzstream, C++ iostream classes wrapping the zlib compression library. -// Copyright (C) 2001 Deepak Bandyopadhyay, Lutz Kettner -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// ============================================================================ -// -// File : test_gunzip.C -// Revision : $Revision: 1.3 $ -// Revision_date : $Date: 2001/10/04 15:09:28 $ -// Author(s) : Deepak Bandyopadhyay, Lutz Kettner -// -// Short test program reading a file, uncompressing it, and writing it. -// ============================================================================ - -#include -#include -#include -#include - -int main( int argc, char*argv[]) { - if ( argc != 3) { - std::cerr << "Usage: " << argv[0] <<" \n"; - return EXIT_FAILURE; - } - // check alternate way of opening file - igzstream in2; - in2.open( argv[1]); - if ( ! in2.good()) { - std::cerr << "ERROR: Opening file `" << argv[1] << "' failed.\n"; - return EXIT_FAILURE; - } - in2.close(); - if ( ! in2.good()) { - std::cerr << "ERROR: Closing file `" << argv[1] << "' failed.\n"; - return EXIT_FAILURE; - } - // now use the shorter way with the constructor to open the same file - igzstream in( argv[1]); - if ( ! in.good()) { - std::cerr << "ERROR: Opening file `" << argv[1] << "' failed.\n"; - return EXIT_FAILURE; - } - std::ofstream out( argv[2]); - if ( ! out.good()) { - std::cerr << "ERROR: Opening file `" << argv[2] << "' failed.\n"; - return EXIT_FAILURE; - } - char c; - while ( in.get(c)) - out << c; - in.close(); - out.close(); - if ( ! in.eof()) { - std::cerr << "ERROR: Reading file `" << argv[1] << "' failed.\n"; - return EXIT_FAILURE; - } - if ( ! out.good()) { - std::cerr << "ERROR: Writing file `" << argv[2] << "' failed.\n"; - return EXIT_FAILURE; - } - return EXIT_SUCCESS; -} - -// ============================================================================ -// EOF diff --git a/src/vcf/gzstream/test_gzip.C b/src/vcf/gzstream/test_gzip.C deleted file mode 100755 index 0c691ae..0000000 --- a/src/vcf/gzstream/test_gzip.C +++ /dev/null @@ -1,78 +0,0 @@ -// ============================================================================ -// gzstream, C++ iostream classes wrapping the zlib compression library. -// Copyright (C) 2001 Deepak Bandyopadhyay, Lutz Kettner -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// ============================================================================ -// -// File : test_gzip.C -// Revision : $Revision: 1.3 $ -// Revision_date : $Date: 2001/10/04 15:09:28 $ -// Author(s) : Deepak Bandyopadhyay, Lutz Kettner -// -// Short test program reading a file, compressing it, and writing it. -// ============================================================================ - -#include -#include -#include -#include - -int main( int argc, char*argv[]) { - if ( argc != 3) { - std::cerr << "Usage: " << argv[0] <<" \n"; - return EXIT_FAILURE; - } - // check alternate way of opening file - ogzstream out2; - out2.open( argv[2]); - if ( ! out2.good()) { - std::cerr << "ERROR: Opening file `" << argv[2] << "' failed.\n"; - return EXIT_FAILURE; - } - out2.close(); - if ( ! out2.good()) { - std::cerr << "ERROR: Closing file `" << argv[2] << "' failed.\n"; - return EXIT_FAILURE; - } - // now use the shorter way with the constructor to open the same file - ogzstream out( argv[2]); - if ( ! out.good()) { - std::cerr << "ERROR: Opening file `" << argv[2] << "' failed.\n"; - return EXIT_FAILURE; - } - std::ifstream in( argv[1]); - if ( ! in.good()) { - std::cerr << "ERROR: Opening file `" << argv[1] << "' failed.\n"; - return EXIT_FAILURE; - } - char c; - while ( in.get(c)) - out << c; - in.close(); - out.close(); - if ( ! in.eof()) { - std::cerr << "ERROR: Reading file `" << argv[1] << "' failed.\n"; - return EXIT_FAILURE; - } - if ( ! out.good()) { - std::cerr << "ERROR: Writing file `" << argv[2] << "' failed.\n"; - return EXIT_FAILURE; - } - return EXIT_SUCCESS; -} - -// ============================================================================ -// EOF diff --git a/src/vcf/txtReader.cpp b/src/vcf/txtReader.cpp deleted file mode 100755 index 454e798..0000000 --- a/src/vcf/txtReader.cpp +++ /dev/null @@ -1,235 +0,0 @@ -/* - * dEploid is used for deconvoluting Plasmodium falciparum genome from - * mix-infected patient sample. - * - * Copyright (C) 2016-2017 University of Oxford - * - * Author: Sha (Joe) Zhu - * - * This file is part of dEploid. - * - * dEploid is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - -#include -#include -#include -#include // std::distance -#include "exceptions.hpp" -#include "txtReader.hpp" - -using std::min; - -void TxtReader::readFromFileBase(const char inchar[]) { - this->fileName_ = string(inchar); - this->checkFileCompressed(); - - if (this->isCompressed()) { - this->inFileGz.open(this->fileName_.c_str(), std::ios::in); - } else { - this->inFile.open(this->fileName_.c_str(), std::ios::in); - } - - if (this->isCompressed()) { - if (!inFileGz.good()) { - throw InvalidInputFile(this->fileName_); - } - } else { - if (!inFile.good()) { - throw InvalidInputFile(this->fileName_); - } - } - - tmpChromInex_ = -1; - string tmp_line; - // skip the first line, which is the header - if (this->isCompressed()) { - getline(inFileGz, tmp_line); - } else { - getline(inFile, tmp_line); - } - this->extractHeader(tmp_line); - - if (this->isCompressed()) { - getline(inFileGz, tmp_line); - } else { - getline(inFile, tmp_line); - } - - while (inFile.good() && tmp_line.size() > 0) { - size_t field_start = 0; - size_t field_end = 0; - size_t field_index = 0; - vector contentRow; - while (field_end < tmp_line.size()) { - field_end = min( - min( - min(tmp_line.find(' ', field_start), - tmp_line.find(',', field_start)), - tmp_line.find('\t', field_start)), - tmp_line.find('\n', field_start)); - - string tmp_str = tmp_line.substr(field_start, - field_end - field_start); - if (field_index > 1) { - contentRow.push_back(strtod(tmp_str.c_str(), NULL)); - } else if (field_index == 0) { - this->extractChrom(tmp_str); - } else if (field_index == 1) { - this->extractPOS(tmp_str); - } - - field_start = field_end+1; - field_index++; - } - this->content_.push_back(contentRow); - - if (this->isCompressed()) { - getline(inFileGz, tmp_line); - } else { - getline(inFile, tmp_line); - } - } - - if (this->isCompressed()) { - this->inFileGz.close(); - } else { - this->inFile.close(); - } - - this->position_.push_back(this->tmpPosition_); - - this->nLoci_ = this->content_.size(); - this->nInfoLines_ = this->content_.back().size(); - - if (this->nInfoLines_ == 1) { - this->reshapeContentToInfo(); - } - - this->getIndexOfChromStarts(); - assert(tmpChromInex_ > -1); - assert(chrom_.size() == position_.size()); - assert(this->doneGetIndexOfChromStarts_ == true); - this->checkSortedPositions(this->fileName_); -} - - -void TxtReader::checkFileCompressed() { - FILE *f = NULL; - f = fopen(this->fileName_.c_str(), "rb"); - if (f == NULL) { - throw InvalidInputFile(this->fileName_); - } - - unsigned char magic[2]; - - size_t freadResults = fread(reinterpret_cast(magic), 1, 2, f); - dout << "Check if text file is compressed " << freadResults << std::endl; - this->setIsCompressed((static_cast(magic[0]) == 0x1f) && - (static_cast(magic[1]) == 0x8b)); - fclose(f); -} - - -void TxtReader::extractHeader(const string &line) { - this->header_.clear(); - size_t field_start = 0; - size_t field_end = 0; - size_t field_index = 0; - while (field_end < line.size()) { - field_end = min( - min( - min(line.find(' ', field_start), - line.find(',', field_start)), - line.find('\t', field_start)), - line.find('\n', field_start)); - - string tmp_str = line.substr(field_start, - field_end - field_start); - if (field_index > 1) { - this->header_.push_back(tmp_str); - } - - field_start = field_end+1; - field_index++; - } -} - - -void TxtReader::extractChrom(const string & tmp_str) { - if (tmpChromInex_ >= 0) { - if (tmp_str != this->chrom_.back()) { - tmpChromInex_++; - // save current positions - this->position_.push_back(this->tmpPosition_); - - // start new chrom - this->tmpPosition_.clear(); - this->chrom_.push_back(tmp_str); - } - } else { - tmpChromInex_++; - assert(this->chrom_.size() == 0); - this->chrom_.push_back(tmp_str); - assert(this->tmpPosition_.size() == 0); - assert(this->position_.size() == 0); - } -} - - -void TxtReader::extractPOS(const string & tmp_str) { - if (tmp_str.find("e") != std::string::npos) { - throw BadScientificNotation(tmp_str, this->fileName_); - } - - if (tmp_str.find("E") != std::string::npos) { - throw BadScientificNotation(tmp_str, this->fileName_); - } - - int ret; - try { - ret = stoi(tmp_str.c_str(), NULL); - } catch ( const std::exception &e) { - throw BadConversion(tmp_str, this->fileName_); - } - this->tmpPosition_.push_back(ret); -} - - -void TxtReader::reshapeContentToInfo() { - assert(this->info_.size() == 0); - for (size_t i = 0; i < this->content_.size(); i++) { - this->info_.push_back(this->content_[i][0]); - } -} - - -void TxtReader::removeMarkers() { - assert(this->keptContent_.size() == static_cast(0)); - for (auto const &value : this->indexOfContentToBeKept) { - this->keptContent_.push_back(this->content_[value]); - } - - this->content_.clear(); - assert(this->content_.size() == static_cast(0)); - this->content_ = this->keptContent_; - this->keptContent_.clear(); - - if (this->nInfoLines_ == 1) { - this->info_.clear(); - this->reshapeContentToInfo(); - } - this->nLoci_ = this->content_.size(); -} diff --git a/src/vcf/txtReader.hpp b/src/vcf/txtReader.hpp deleted file mode 100755 index 372ff5a..0000000 --- a/src/vcf/txtReader.hpp +++ /dev/null @@ -1,95 +0,0 @@ -/* - * dEploid is used for deconvoluting Plasmodium falciparum genome from - * mix-infected patient sample. - * - * Copyright (C) 2016-2017 University of Oxford - * - * Author: Sha (Joe) Zhu - * - * This file is part of dEploid. - * - * dEploid is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - - -#ifndef TXTREADER -#define TXTREADER - -#include -#include -#include "variantIndex.hpp" -#include "exceptions.hpp" -#include "gzstream/gzstream.h" - -class TxtReader : public VariantIndex { - #ifdef UNITTEST - friend class TestPanel; - friend class TestTxtReader; - friend class TestInitialHaplotypes; - #endif - friend class McmcMachinery; - friend class UpdateSingleHap; - friend class UpdatePairHap; - friend class UpdateHap; - friend class Panel; - friend class DEploidIO; - private: - // Members - string fileName_; - ifstream inFile; - igzstream inFileGz; - bool isCompressed_; - bool isCompressed() const { return this->isCompressed_; } - void setIsCompressed(const bool compressed) { - this->isCompressed_ = compressed; } - void checkFileCompressed(); - // content is a matrix of n.loci by n.strains, i.e. content length is n.loci - vector < vector < double > > keptContent_; - // info_ only refers to the first column of the content - vector info_; - - vector header_; - size_t nInfoLines_; - - int tmpChromInex_; - vector < int > tmpPosition_; - - // Methods - void extractChrom(const string & tmp_str); - void extractPOS(const string & tmp_str); - void extractHeader(const string &line); - void reshapeContentToInfo(); - - public: // move the following to private - vector < vector < double > > content_; - TxtReader() {} - virtual void readFromFile(const char inchar[]) { - this->readFromFileBase(inchar); } - void readFromFileBase(const char inchar[]); - virtual ~TxtReader() {} - void removeMarkers(); -}; - - - - -class ExcludeMarker : public TxtReader { - public: - ExcludeMarker():TxtReader() {} - ~ExcludeMarker() {} -}; - - -#endif diff --git a/src/vcf/variantIndex.cpp b/src/vcf/variantIndex.cpp deleted file mode 100755 index 613c9dc..0000000 --- a/src/vcf/variantIndex.cpp +++ /dev/null @@ -1,234 +0,0 @@ -/* - * dEploid is used for deconvoluting Plasmodium falciparum genome from - * mix-infected patient sample. - * - * Copyright (C) 2016-2017 University of Oxford - * - * Author: Sha (Joe) Zhu - * - * This file is part of dEploid. - * - * dEploid is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - -#include // find -#include -#include "exceptions.hpp" -#include "txtReader.hpp" -#include "variantIndex.hpp" - -using std::min; -using std::endl; - - -VariantIndex::VariantIndex() { - this->init(); -} - -void VariantIndex::findWhoToBeKept(ExcludeMarker* excludedMarkers) { - dout << " Starts findWhoToBeKept " << endl; - assert(this->indexOfContentToBeKept.size() == 0); - assert(this->indexOfPosToBeKept.size() == 0); - - for (size_t chromI = 0; chromI < this->chrom_.size(); chromI++) { - dout << " Going through chrom "<< chrom_[chromI]; - vector < size_t > tmpindexOfPosToBeKept; - - // detemine if something needs to be removed from the current chrom. - vector::iterator chromIt = find(excludedMarkers->chrom_.begin(), - excludedMarkers->chrom_.end(), - this->chrom_[chromI]); - - size_t hapIndex = indexOfChromStarts_[chromI]; - size_t chromIndexInExclude = std::distance( - excludedMarkers->chrom_.begin(), - chromIt); - for (size_t posI = 0; posI < this->position_[chromI].size(); posI++) { - if (chromIt == excludedMarkers->chrom_.end()) { - indexOfContentToBeKept.push_back(hapIndex); - tmpindexOfPosToBeKept.push_back(posI); - } else if ( - std::find(excludedMarkers->position_[chromIndexInExclude].begin(), - excludedMarkers->position_[chromIndexInExclude].end(), - this->position_[chromI][posI]) == - excludedMarkers->position_[chromIndexInExclude].end()) { - indexOfContentToBeKept.push_back(hapIndex); - tmpindexOfPosToBeKept.push_back(posI); - } - hapIndex++; - } - indexOfPosToBeKept.push_back(tmpindexOfPosToBeKept); - - dout << " keeping " << tmpindexOfPosToBeKept.size() << endl; - } - assert(indexOfPosToBeKept.size() == this->chrom_.size()); - - dout << indexOfContentToBeKept.size() << " sites need to be Kept " << endl; -} - - -void VariantIndex::findAndKeepMarkers(ExcludeMarker* excludedMarkers) { - this->setDoneGetIndexOfChromStarts(false); - dout << " findAndKeepMarkers called" <findWhoToBeKept(excludedMarkers); - this->removePositions(); - this->getIndexOfChromStarts(); - this->removeMarkers(); -} - - -void VariantIndex::findWhoToBeKeptGivenIndex( - const vector & givenIndex) { - dout << " Starts findWhoToBeKeptGivenIndex " << endl; - assert(this->indexOfContentToBeKept.size() == 0); - indexOfContentToBeKept = vector (givenIndex.begin(), - givenIndex.end()); - // assert(this->indexOfPosToBeKept.size() == 0); - vector oldChrom = vector (chrom_.begin(), chrom_.end()); - this->chrom_.clear(); - - vector < vector < int > > oldposition = this->position_; - this->position_.clear(); - - for (size_t chromI = 0; chromI < oldChrom.size(); chromI++) { - dout << " Going through chrom "<< oldChrom[chromI] << endl; - size_t hapIndex = indexOfChromStarts_[chromI]; - vector newTrimmedPos; - for (size_t posI = 0; posI < oldposition[chromI].size(); posI++) { - if (std::find(givenIndex.begin(), givenIndex.end(), hapIndex) - != givenIndex.end()) { - if (newTrimmedPos.size() == 0) { - this->chrom_.push_back(oldChrom[chromI]); - } - newTrimmedPos.push_back(oldposition[chromI][posI]); - } - - hapIndex++; - } - this->position_.push_back(newTrimmedPos); - } - - // assert(indexOfPosToBeKept.size() == this->chrom_.size()); - - dout << indexOfContentToBeKept.size() << " sites need to be Kept " << endl; -} - - -void VariantIndex::findWhoToBeKeptGivenIndexHalf( - const vector & givenIndex) { - dout << " Starts findWhoToBeKeptGivenIndexHalf " << endl; - assert(this->indexOfContentToBeKept.size() == 0); - indexOfContentToBeKept = vector (givenIndex.begin(), - givenIndex.end()); - // assert(this->indexOfPosToBeKept.size() == 0); - vector oldChrom = vector (chrom_.begin(), chrom_.end()); - this->chrom_.clear(); - - vector < vector < int > > oldposition = this->position_; - this->position_.clear(); - - for (size_t chromI = 0; chromI < oldChrom.size(); chromI++) { - // if (chromI%2 == 0) { - if (chromI > 10) { - dout << " Going through chrom "<< oldChrom[chromI] << " "; - size_t hapIndex = indexOfChromStarts_[chromI]; - vector newTrimmedPos; - for (size_t posI = 0; posI < oldposition[chromI].size(); posI++) { - if (std::find(givenIndex.begin(), givenIndex.end(), hapIndex) - != givenIndex.end()) { - if (newTrimmedPos.size() == 0) { - this->chrom_.push_back(oldChrom[chromI]); - } - newTrimmedPos.push_back(oldposition[chromI][posI]); - } - hapIndex++; - } - // std::cout << newTrimmedPos.size () << endl; - this->position_.push_back(newTrimmedPos); - } - } - - // assert(indexOfPosToBeKept.size() == this->chrom_.size()); - - dout << indexOfContentToBeKept.size() << " sites need to be Kept, with " - << this->chrom_.size() << endl; -} - - -void VariantIndex::removePositions() { - assert(this->keptPosition_.size() == (size_t)0); - for (size_t chromI = 0; chromI < this->chrom_.size(); chromI++) { - vector tmpKeptPosition_; - for (size_t i = 0; i < this->indexOfPosToBeKept[chromI].size(); i++) { - tmpKeptPosition_.push_back( - this->position_[chromI][this->indexOfPosToBeKept[chromI][i]]); - } - this->keptPosition_.push_back(tmpKeptPosition_); - } - this->position_.clear(); - this->position_ = this->keptPosition_; - this->keptPosition_.clear(); -} - - -void VariantIndex::getIndexOfChromStarts() { - assert(this->doneGetIndexOfChromStarts_ == false); - this->indexOfChromStarts_.clear(); - assert(indexOfChromStarts_.size() == 0); - this->indexOfChromStarts_.push_back((size_t)0); - for (size_t tmpChrom = 0; - indexOfChromStarts_.size() < this->chrom_.size(); tmpChrom++ ) { - indexOfChromStarts_.push_back( - indexOfChromStarts_.back()+this->position_[tmpChrom].size()); - } - assert(indexOfChromStarts_.size() == this->chrom_.size()); - this->setDoneGetIndexOfChromStarts(true); -} - - -void VariantIndex::getIndexOfChromStartsHalf() { - assert(this->doneGetIndexOfChromStarts_ == false); - this->indexOfChromStarts_.clear(); - assert(indexOfChromStarts_.size() == 0); - this->indexOfChromStarts_.push_back((size_t)0); - for (size_t tmpChrom = 0; - indexOfChromStarts_.size() < this->chrom_.size(); tmpChrom++ ) { - indexOfChromStarts_.push_back( - indexOfChromStarts_.back()+this->position_[tmpChrom].size()); - } - assert(indexOfChromStarts_.size() == this->chrom_.size()); - this->setDoneGetIndexOfChromStarts(true); -} - - -void VariantIndex::init() { - this->setDoneGetIndexOfChromStarts(false); -} - - -void VariantIndex::removeMarkers() { throw VirtualFunctionShouldNotBeCalled();} - - -void VariantIndex::checkSortedPositions(string fileName) { - for (size_t chromI = 0; chromI < this->chrom_.size(); chromI++) { - int previousPosition_ = 0; - for (auto const &value : this->position_[chromI]) { - if (value < previousPosition_) { - throw PositionUnsorted(fileName); - } - previousPosition_ = value; - } - } -} diff --git a/src/vcf/variantIndex.hpp b/src/vcf/variantIndex.hpp deleted file mode 100755 index ebfc9cd..0000000 --- a/src/vcf/variantIndex.hpp +++ /dev/null @@ -1,94 +0,0 @@ -/* - * dEploid is used for deconvoluting Plasmodium falciparum genome from - * mix-infected patient sample. - * - * Copyright (C) 2016-2017 University of Oxford - * - * Author: Sha (Joe) Zhu - * - * This file is part of dEploid. - * - * dEploid is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - -#ifndef DEPLOID_SRC_VARIANTINDEX_HPP_ -#define DEPLOID_SRC_VARIANTINDEX_HPP_ - - -#include -#include -#include -#include "global.hpp" - - -using std::vector; -using std::string; - -class ExcludeMarker; - -class VariantIndex { - #ifdef UNITTEST - friend class TestPanel; - friend class TestTxtReader; - friend class TestInitialHaplotypes; - #endif - friend class DEploidIO; - friend class TxtReader; - friend class ExcludeMarker; - friend class Panel; - friend class IBDrecombProbs; - friend class VcfReader; - friend class Rvcf; - - private: - // Members - size_t nLoci_; - bool doneGetIndexOfChromStarts_; - vector chrom_; - vector < size_t > indexOfChromStarts_; - vector < vector < int> > position_; - vector < vector < int> > keptPosition_; - /* Index of content/info will be kept */ - vector < size_t > indexOfContentToBeKept; - /* Index of positions entry to be kept, - * this will have the same size as this->chrom_, */ - vector < vector < size_t > > indexOfPosToBeKept; - - // Getter and Setter - bool doneGetIndexOfChromStarts() const { - return doneGetIndexOfChromStarts_; } - void setDoneGetIndexOfChromStarts(const bool setTo) { - this->doneGetIndexOfChromStarts_ = setTo; } - - // Methods - void init(); - void getIndexOfChromStarts(); - void getIndexOfChromStartsHalf(); - void removePositions(); - void checkSortedPositions(string fileName); - void findAndKeepMarkers(ExcludeMarker* excludedMarkers); - virtual void removeMarkers(); - // For removing markers and positions - void findWhoToBeKept(ExcludeMarker* excludedMarkers); - void findWhoToBeKeptGivenIndex(const vector & givenIndex); - void findWhoToBeKeptGivenIndexHalf(const vector & givenIndex); - - public: - VariantIndex(); - virtual ~VariantIndex() {} -}; - - -#endif // DEPLOID_SRC_VARIANTINDEX_HPP_ diff --git a/src/vcf/vcfReader.cpp b/src/vcf/vcfReader.cpp deleted file mode 100755 index c5cc693..0000000 --- a/src/vcf/vcfReader.cpp +++ /dev/null @@ -1,481 +0,0 @@ -/* - * dEploid is used for deconvoluting Plasmodium falciparum genome from - * mix-infected patient sample. - * - * Copyright (C) 2016-2017 University of Oxford - * - * Author: Sha (Joe) Zhu - * - * This file is part of dEploid. - * - * dEploid is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - -#include // std::min -#include // assert -#include // std::cout -#include "vcfReader.hpp" -#include "global.hpp" - -// using namespace std; -using std::min; - -/*! Initialize vcf file, search for the end of the vcf header. - * Extract the first block of data ( "buffer_length" lines ) into buff - */ -VcfReader::VcfReader(string fileName, string sampleName, bool extractPlaf) { - /*! Initialize by read in the vcf header file */ - this->init(fileName); - this->sampleName_ = sampleName; - this->extractPlaf_ = extractPlaf; - this->sampleColumnIndex_ = 0; - this->readHeader(); - this->readVariants(); - this->getChromList(); - this->getIndexOfChromStarts(); - assert(this->doneGetIndexOfChromStarts_ == true); - this->checkSortedPositions(fileName); -} - - -void VcfReader::checkFileCompressed() { - FILE *f = NULL; - f = fopen(this->fileName_.c_str(), "rb"); - if (f == NULL) { - throw InvalidInputFile(this->fileName_); - } - - unsigned char magic[2]; - - size_t freadResults = fread(reinterpret_cast(magic), 1, 2, f); - dout << "Check if vcf is compressed " << freadResults << std::endl; - this->setIsCompressed((static_cast(magic[0]) == 0x1f) && - (static_cast(magic[1]) == 0x8b)); - fclose(f); -} - -void VcfReader::init(string fileName) { - /*! Initialize other VcfReader class members - */ - this->fileName_ = fileName; - - this->checkFileCompressed(); - - if ( this->isCompressed() ) { - this->inFileGz.open(this->fileName_.c_str(), std::ios::in); - } else { - this->inFile.open(this->fileName_.c_str(), std::ios::in); - } -} - - -void VcfReader::finalize() { - for (size_t i = 0; i < this->variants.size(); i++) { - this->refCount.push_back(static_cast(this->variants[i].ref)); - this->altCount.push_back(static_cast(this->variants[i].alt)); - this->vqslod.push_back(this->variants[i].vqslod); - this->plaf.push_back(this->variants[i].plaf); - } - - if ( this->isCompressed() ) { - this->inFileGz.close(); - } else { - this->inFile.close(); - } -} - - -void VcfReader::readHeader() { - if (this->isCompressed()) { - if (!inFileGz.good()) { - throw InvalidInputFile(this->fileName_); - } - } else { - if (!inFile.good()) { - throw InvalidInputFile(this->fileName_); - } - } - - if (this->isCompressed()) { - getline(inFileGz, this->tmpLine_); - } else { - getline(inFile, this->tmpLine_); - } - - while (this->tmpLine_.size() > 0) { - if (this->tmpLine_[0] == '#') { - if (this->tmpLine_[1] == '#') { - this->headerLines.push_back(this->tmpLine_); - if (this->isCompressed()) { - getline(inFileGz, this->tmpLine_); - } else { - getline(inFile, this->tmpLine_); - } - } else { - this->checkFeilds(); - break; // end of the header - } - } else { - this->checkFeilds(); - } - } - - dout << " There are " << this->headerLines.size() - << " lines in the header." <tmpLine_.size()) { - field_end = min(this->tmpLine_.find('\t', feild_start), - this->tmpLine_.find('\n', feild_start)); - this->tmpStr_ = this->tmpLine_.substr(feild_start, - field_end-feild_start); - string correctFieldValue; - switch ( field_index ) { - case 0: correctFieldValue = "#CHROM"; break; - case 1: correctFieldValue = "POS"; break; - case 2: correctFieldValue = "ID"; break; - case 3: correctFieldValue = "REF"; break; - case 4: correctFieldValue = "ALT"; break; - case 5: correctFieldValue = "QUAL"; break; - case 6: correctFieldValue = "FILTER"; break; - case 7: correctFieldValue = "INFO"; break; - case 8: correctFieldValue = "FORMAT"; break; - } - - if (this->tmpStr_ != correctFieldValue && field_index < 9) { - throw VcfInvalidHeaderFieldNames(correctFieldValue, this->tmpStr_); - } - - if ((field_index == 9) & (this->sampleName_ == "")) { - this->sampleName_ = this->tmpStr_; - } - - if (this->tmpStr_ == this->sampleName_) { - sampleColumnIndex_ = field_index; - break; - } - - feild_start = field_end+1; - field_index++; - } // End of while loop: field_end < line.size() - - if (sampleColumnIndex_ == 0) { - throw InvalidSampleInVcf(this->sampleName_, this->fileName_); - } - assert(sampleColumnIndex_ != 0); - assert(printSampleName()); -} - - -void VcfReader::readVariants() { - if (this->isCompressed()) { - getline(inFileGz, this->tmpLine_); - } else { - getline(inFile, this->tmpLine_); - } - while (inFile.good() && this->tmpLine_.size() > 0) { - VariantLine newVariant(this->tmpLine_, this->sampleColumnIndex_, - this->extractPlaf_); - // check variantLine quality - this->variants.push_back(newVariant); - if (this->isCompressed()) { - getline(inFileGz, this->tmpLine_); - } else { - getline(inFile, this->tmpLine_); - } - } -} - - -void VcfReader::getChromList() { - this->chrom_.clear(); - this->position_.clear(); - - assert(this->chrom_.size() == (size_t)0); - assert(this->position_.size() == (size_t)0); - - string previousChrom(""); - vector positionOfChrom_; - - for (size_t i = 0; i < this->variants.size() ; i++) { - if (previousChrom != this->variants[i].chromStr && - previousChrom.size() > (size_t)0) { - this->chrom_.push_back(previousChrom); - this->position_.push_back(positionOfChrom_); - positionOfChrom_.clear(); - } - positionOfChrom_.push_back( - stoi(this->variants[i].posStr.c_str(), NULL)); - previousChrom = this->variants[i].chromStr; - } - - this->chrom_.push_back(previousChrom); - this->position_.push_back(positionOfChrom_); - assert(this->position_.size() == this->chrom_.size()); -} - - -void VcfReader::removeMarkers() { - assert(this->keptVariants.size() == (size_t)0); - for (auto const &value : this->indexOfContentToBeKept) { - this->keptVariants.push_back(this->variants[value]); - } - this->variants.clear(); - this->variants = this->keptVariants; - this->keptVariants.clear(); - this->nLoci_ = this->variants.size(); - dout << " Vcf number of loci kept = " << this->nLoci_ << std::endl; -} - - -void VcfReader::findLegitSnpsGivenVQSLOD(double vqslodThreshold) { - this->legitVqslodAt.clear(); - assert(legitVqslodAt.size() == 0); - for (size_t i = 0; i < this->vqslod.size(); i++) { - if (this->vqslod[i] > vqslodThreshold) { - this->legitVqslodAt.push_back(i); - } - } -} - - -void VcfReader::findLegitSnpsGivenVQSLODHalf(double vqslodThreshold) { - this->legitVqslodAt.clear(); - assert(legitVqslodAt.size() == 0); - - for (size_t chromI = 0; - chromI < this->indexOfChromStarts_.size(); chromI++) { - size_t start = this->indexOfChromStarts_[chromI]; - size_t length = this->position_[chromI].size(); - // if (chromI%2 == 0) { - if (chromI > 10) { - for ( size_t ii = start ; ii < (start+length); ii++ ) { - if (this->vqslod[ii] > vqslodThreshold) { - // std::cout << ii <legitVqslodAt.push_back(ii); - } - } - } - } -} - - -VariantLine::VariantLine(string tmpLine, size_t sampleColumnIndex, - bool extractPlaf) { - this->init(tmpLine, sampleColumnIndex, extractPlaf); - - while (fieldEnd_ < this->tmpLine_.size()) { - fieldEnd_ = min(this->tmpLine_.find('\t', feildStart_), - this->tmpLine_.find('\n', feildStart_)); - this->tmpStr_ = this->tmpLine_.substr(feildStart_, - fieldEnd_-feildStart_); - switch (fieldIndex_) { - case 0: this->extract_field_CHROM(); break; - case 1: this->extract_field_POS(); break; - case 2: this->extract_field_ID(); break; - case 3: this->extract_field_REF() ; break; - case 4: this->extract_field_ALT() ; break; - case 5: this->extract_field_QUAL() ; break; - case 6: this->extract_field_FILTER(); break; - case 7: this->extract_field_INFO(); break; - case 8: this->extract_field_FORMAT(); break; - } - - if (fieldIndex_ == this->sampleColumnIndex_) { - this->extract_field_VARIANT(); - break; - } - feildStart_ = fieldEnd_+1; - fieldIndex_++; - } -} - - -void VariantLine::init(string tmpLine, size_t sampleColumnIndex, - bool extractPlaf) { - this->tmpLine_ = tmpLine; - this->feildStart_ = 0; - this->fieldEnd_ = 0; - this->fieldIndex_ = 0; - this->adFieldIndex_ = -1; - this->sampleColumnIndex_ = sampleColumnIndex; - this->extractPlaf_ = extractPlaf; -} - - -void VariantLine::extract_field_CHROM() { - this->chromStr = this->tmpStr_; -} - - -void VariantLine::extract_field_POS() { - this->posStr = this->tmpStr_; -} - - -void VariantLine::extract_field_ID() { - this->idStr = this->tmpStr_; -} - - -void VariantLine::extract_field_REF() { - this->refStr = this->tmpStr_; -} - - -void VariantLine::extract_field_ALT() { - this->altStr = this->tmpStr_; -} - - -void VariantLine::extract_field_QUAL() { // Check for PASS - this->qualStr = this->tmpStr_; -} - - -void VariantLine::extract_field_FILTER() { - this->filterStr = this->tmpStr_; -} - -void VariantLine::extract_field_INFO() { - this->infoStr = this->tmpStr_; - bool vqslodNotFound = true; - size_t feild_start = 0; - size_t field_end = 0; - int field_index = 0; - - while (field_end < this->tmpStr_.size()) { - field_end = min(this->tmpStr_.find(';', feild_start), - this->tmpStr_.find('\t', feild_start)); - string filterFiledStr = this->tmpStr_.substr(feild_start, - field_end-feild_start); - size_t eqIndex = filterFiledStr.find('=', 0); - string filterFiledName = filterFiledStr.substr(0, eqIndex); - if ( "VQSLOD" == filterFiledName ) { - vqslodNotFound = false; - vqslod = stod(filterFiledStr.substr(eqIndex+1, - filterFiledStr.size())); - } - - if ( ("AF" == filterFiledName) & (this->extractPlaf_) ) { - plaf = stod(filterFiledStr.substr(eqIndex+1, - filterFiledStr.size())); - } - - feild_start = field_end+1; - field_index++; - } - - if (vqslodNotFound) { - throw VcfVQSLODNotFound(this->tmpStr_); - } - - assert(vqslodNotFound == false); -} - - -void VariantLine::extract_field_FORMAT() { - this->formatStr = this->tmpStr_; - size_t feild_start = 0; - size_t field_end = 0; - size_t field_index = 0; - - while (field_end < this->formatStr.size()) { - field_end = min(this->formatStr.find(':', feild_start), - this->formatStr.find('\n', feild_start)); - if ( "AD" == this->formatStr.substr(feild_start, - field_end-feild_start)) { - adFieldIndex_ = field_index; - break; - } - feild_start = field_end+1; - field_index++; - } - if (adFieldIndex_ == -1) { - throw VcfCoverageFieldNotFound(this->tmpStr_); - } - assert(adFieldIndex_ > -1); -} - - -int maybe_dot_to_integer(const string& s) { - if (s == ".") - return 0; - else - return stoi(s); -} - -int n_fields(const string& s, char delim = ',') { - int count = 0; - for (auto ch : s) - if (ch == delim) - count++; - return count+1; -} - -void VariantLine::extract_field_VARIANT() { - size_t feild_start = 0; - size_t field_end = 0; - int field_index = 0; - - while (field_end < this->tmpStr_.size()) { - field_end = min(this->tmpStr_.find(':', feild_start), - this->tmpStr_.find('\n', feild_start)); - if (field_index == adFieldIndex_) { - string adStr = this->tmpStr_.substr(feild_start, - field_end-feild_start); - try { - int n = n_fields(adStr); - if (n != 2) - throw std::runtime_error( - "there should be exactly 2 AD entries, but found " + - std::to_string(n) + - ".\n Wrong number of ALT alleles!."); - - size_t commaIndex = adStr.find(',', 0); - auto ref_AD = adStr.substr(0, commaIndex); - auto alt_AD = adStr.substr(commaIndex+1, adStr.size()); - - ref = maybe_dot_to_integer(ref_AD); - alt = maybe_dot_to_integer(alt_AD); - break; - } - catch (const std::exception& e) { - throw std::runtime_error( - "Error parsing vcf AD field: '" + - adStr + "': " + e.what() + "\n"); - } - } - feild_start = field_end+1; - field_index++; - } -} - -/* -void VcfReader::findLegitSnpsGivenVQSLODandWsfGt0(double vqslodThreshold) { - assert(legitVqslodAt.size() == 0); - for (size_t i = 0; i < this->vqslod.size(); i++) { - if (this->vqslod[i] > vqslodThreshold & this->altCount[i] > 0) { - this->legitVqslodAt.push_back(i); - } - } -} -*/ diff --git a/src/vcf/vcfReader.hpp b/src/vcf/vcfReader.hpp deleted file mode 100755 index ad1208a..0000000 --- a/src/vcf/vcfReader.hpp +++ /dev/null @@ -1,191 +0,0 @@ -/* - * dEploid is used for deconvoluting Plasmodium falciparum genome from - * mix-infected patient sample. - * - * Copyright (C) 2016-2017 University of Oxford - * - * Author: Sha (Joe) Zhu - * - * This file is part of dEploid. - * - * dEploid is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - -#include /* strtol, strtod */ -#include /* string */ -#include /* vector */ -#include -#include "exceptions.hpp" -#include "variantIndex.hpp" -#include "gzstream/gzstream.h" - -#ifndef DEPLOID_SRC_VCFREADER_HPP_ -#define DEPLOID_SRC_VCFREADER_HPP_ - -// using namespace std; -// using std::endl; - -struct InvalidVcf : public InvalidInput{ - explicit InvalidVcf(string str):InvalidInput(str) { - } - virtual ~InvalidVcf() throw() {} - // virtual const char* what () const noexcept { - // return throwMsg.c_str(); - // } -}; - - -struct VcfInvalidHeaderFieldNames : public InvalidVcf{ - explicit VcfInvalidHeaderFieldNames(string str1, string str2): - InvalidVcf(str1) { - this->reason = " VCF field header expects: "; - throwMsg = this->reason + this->src + ", " + str2 + " was found!"; - } - ~VcfInvalidHeaderFieldNames() throw() {} -}; - - -struct VcfInvalidVariantEntry : public InvalidVcf{ - explicit VcfInvalidVariantEntry(string str):InvalidVcf(str) {} - virtual ~VcfInvalidVariantEntry() throw() {} - // virtual const char* what () const noexcept { - // return throwMsg.c_str(); - // } -}; - - -struct VcfCoverageFieldNotFound : public VcfInvalidVariantEntry{ - explicit VcfCoverageFieldNotFound(string str):VcfInvalidVariantEntry(str) { - this->reason = "Coverage field AD was not found in the FORMAT, found: "; - throwMsg = this->reason + this->src; - } - ~VcfCoverageFieldNotFound() throw() {} -}; - - -struct VcfVQSLODNotFound : public VcfInvalidVariantEntry{ - explicit VcfVQSLODNotFound(string str):VcfInvalidVariantEntry(str) { - this->reason = "VQSLOD was note found, check: "; - throwMsg = this->reason + this->src; - } - ~VcfVQSLODNotFound() throw() {} -}; - - -class VariantLine{ - friend class VcfReader; - friend class DEploidIO; - public: - explicit VariantLine(string tmpLine, size_t sampleColumnIndex, - bool extractPlaf = false); - ~VariantLine() {} - - private: - string tmpLine_; - string tmpStr_; - - void init(string tmpLine, size_t sampleColumnIndex, bool extractPlaf); - - void extract_field_CHROM(); - void extract_field_POS(); - void extract_field_ID(); - void extract_field_REF(); - void extract_field_ALT(); - void extract_field_QUAL(); - void extract_field_FILTER(); - void extract_field_INFO(); - void extract_field_FORMAT(); - void extract_field_VARIANT(); - - size_t feildStart_; - size_t fieldEnd_; - size_t fieldIndex_; - - string chromStr; - string posStr; - string idStr; - string refStr; - string altStr; - string qualStr; - string filterStr; - string infoStr; - string formatStr; - int adFieldIndex_; - - int ref; - int alt; - double vqslod; - double plaf; - size_t sampleColumnIndex_; - bool extractPlaf_; -}; - - - -/*! \brief VCF file reader @ingroup group_data */ -class VcfReader : public VariantIndex { -#ifdef UNITTEST - friend class TestVCF; -#endif - friend class DEploidIO; - public: - // Constructors and Destructors - explicit VcfReader(string fileName, string sampleName, - bool extractPlaf = false); - // parse in exclude sites - ~VcfReader() {} - - // Members and Methods - vector headerLines; // calling from python, need to be public - vector refCount; // calling from python, need to be public - vector altCount; // calling from python, need to be public - vector vqslod; // calling from python, need to be public - vector plaf; - void finalize(); // calling from python, need to be public - - private: - vector variants; - vector keptVariants; - vector legitVqslodAt; - string fileName_; - ifstream inFile; - igzstream inFileGz; - bool isCompressed_; - bool isCompressed() const { return this->isCompressed_; } - void setIsCompressed(const bool compressed) { - this->isCompressed_ = compressed; } - void checkFileCompressed(); - string sampleName_; - size_t sampleColumnIndex_; - string tmpLine_; - string tmpStr_; - bool extractPlaf_; - - // Methods - void init(string fileName); - void readVariants(); - void readHeader(); - void checkFeilds(); - void findLegitSnpsGivenVQSLOD(double vqslodThreshold); - void findLegitSnpsGivenVQSLODHalf(double vqslodThreshold); - - void getChromList(); - void removeMarkers(); - - // Debug tools - bool printSampleName(); -}; - -#endif // DEPLOID_SRC_VCFREADER_HPP_ diff --git a/src/vcf/vcfReaderDebug.cpp b/src/vcf/vcfReaderDebug.cpp deleted file mode 100755 index 006295c..0000000 --- a/src/vcf/vcfReaderDebug.cpp +++ /dev/null @@ -1,35 +0,0 @@ -/* - * dEploid is used for deconvoluting Plasmodium falciparum genome from - * mix-infected patient sample. - * - * Copyright (C) 2016-2017 University of Oxford - * - * Author: Sha (Joe) Zhu - * - * This file is part of dEploid. - * - * dEploid is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - -#include // std::cout -#include "global.hpp" -#include "vcfReader.hpp" - -using std::endl; - -bool VcfReader::printSampleName() { - dout << "Sample name is " << this->sampleName_ << endl; - return true; -}