/* * vcf_entry_getters.cpp * * Created on: Nov 11, 2009 * Author: Adam Auton * ($Revision: 230 $) */ #include "vcf_entry.h" // Return the CHROMosome name string vcf_entry::get_CHROM() const { return CHROM; } // Return the CHROMosome name void vcf_entry::get_CHROM(string &out) const { out = CHROM; } int vcf_entry::get_POS() const { return POS; } string vcf_entry::get_ID() const { if (ID.size() == 0) return "."; return ID; } string vcf_entry::get_REF() const { return REF; } string vcf_entry::get_ALT() const { assert(parsed_ALT == true); string out; if (ALT.size() == 0) out = "."; else { out = ALT[0]; for (unsigned int ui=1; ui &include_indv, const vector &include_genotype) const { for (unsigned int ui=0; ui= ALT.size())) out = "."; else out = ALT[allele_num-1]; } string vcf_entry::get_allele(int allele_num) const { assert(parsed_ALT == true); if (allele_num == 0) return REF; else if ((allele_num < 0) || (unsigned(allele_num - 1) >= ALT.size())) return "."; else return ALT[allele_num-1]; } string vcf_entry::get_ALT_allele(int allele_num) const { assert(parsed_ALT == true); if ((allele_num < 0) || (unsigned(allele_num) >= ALT.size())) return "."; return ALT[allele_num]; } void vcf_entry::get_alleles_vector(vector &out) const { assert(parsed_ALT == true); out.resize(ALT.size()+1); out[0] = REF; copy(ALT.begin(), ALT.end(), out.begin()+1); } double vcf_entry::get_QUAL() const { return QUAL; } string vcf_entry::get_FILTER() const { assert(parsed_FILTER == true); ostringstream out; if ((passed_filters == false) && (FILTER.size() == 0)) out << "."; else if (passed_filters == true) out << "PASS"; else { out << FILTER[0]; for (unsigned int ui=1; ui &out) const { assert(parsed_FILTER == true); out = FILTER; } string vcf_entry::get_INFO(const set &INFO_to_keep) const { assert(parsed_INFO == true); ostringstream out; bool first=true; if ((INFO.size() > 0) && (INFO_to_keep.size() > 0)) { string key; for (unsigned int ui=0; ui &out) const { assert(parsed_GT[indv] == true); static string out_allele1, out_allele2; get_allele(GENOTYPE[indv].first, out_allele1); get_allele(GENOTYPE[indv].second, out_allele2); out = make_pair(out_allele1, out_allele2); } void vcf_entry::get_indv_GENOTYPE_ids(unsigned int indv, pair &out) const { assert(parsed_GT[indv] == true); out = GENOTYPE[indv]; } char vcf_entry::get_indv_PHASE(unsigned int indv) const { assert(parsed_GT[indv] == true); return PHASE[indv]; } int vcf_entry::get_indv_DEPTH(unsigned int indv) const { assert(parsed_DP[indv] == true); if (DEPTH.size() == 0) return -1; return DEPTH[indv]; } double vcf_entry::get_indv_GQUALITY(unsigned int indv) const { assert(parsed_GQ[indv] == true); if (GQUALITY.size() == 0) return -1; return GQUALITY[indv]; } void vcf_entry::get_indv_GFILTER_vector(unsigned int indv, vector &out) const { assert(parsed_FT[indv] == true); if (GFILTER.size() > 0) out = GFILTER[indv]; else out.resize(0); } void vcf_entry::get_indv_GFILTER(unsigned int indv, string &out) const { assert(parsed_FT[indv] == true); if ((GFILTER.size() > 0) && (GFILTER[indv].size()>0)) { out=""; for (unsigned int ui=0; ui &include_indv, const vector &include_genotype) const { unsigned int out=0; for (unsigned int ui=0; ui &out, unsigned int &N_non_missing_chr_out, const vector &include_indv, const vector &include_genotype) const { pair genotype; vector allele_counts(get_N_alleles(), 0); N_non_missing_chr_out = 0; for (unsigned int ui=0; ui &include_indv, const vector &include_genotype, unsigned int &out_N_hom1, unsigned int &out_N_het, unsigned int &out_N_hom2) const { out_N_hom1 = 0; out_N_hom2 = 0; out_N_het = 0; pair genotype; if (ALT.size() > 1) LOG.error("Tried to return the genotype counts of a non-biallelic SNP", 99); for (unsigned int ui=0; ui