1 #ifndef theplu_yat_omic_vcf 2 #define theplu_yat_omic_vcf 27 #include "yat/utility/Exception.h" 28 #include "yat/utility/split.h" 30 #include "yat/utility/yat_assert.h" 32 #include <boost/cstdint.hpp> 59 explicit VCF(
const std::string&);
69 explicit VCF(std::istream&
is);
89 const int32_t&
pos(
void)
const;
96 void id(
const std::string&
id);
101 const std::string&
id(
void)
const;
106 void ref(
const std::string& r);
116 const std::string&
ref(
void)
const;
123 void alt(
const std::string& a);
135 const std::string&
alt(
void)
const;
140 const std::vector<std::string>&
alts(
void)
const;
145 void alts(
const std::vector<std::string>& a);
150 void alts(std::vector<std::string>&& a);
160 const std::string&
qual(
void)
const;
165 void qual(
const std::string& q);
170 void qual(
unsigned int q);
175 const std::string&
filter(
void)
const;
180 const std::vector<std::string>&
filters(
void)
const;
190 void filter(
const std::string&);
201 void add(
const std::string& key);
208 void add(
const std::string& key,
const T& value);
218 size_t count(
const std::string& key)
const;
226 void get(T& result,
const std::string& key)
const;
231 void remove(
const std::string& key);
236 void set(
const std::string& s);
241 void set(std::string&& s);
246 const std::string&
str(
void)
const;
249 friend std::ostream& operator<<(std::ostream&,
const VCF::Info&);
256 std::string::iterator find(
const std::string& key);
258 std::string::const_iterator cfind(
const std::string& key)
const;
260 void init(std::string&
str);
261 void init(std::string&&
str);
273 void validate(
void)
const;
298 void add(
const std::string& key,
const std::vector<T>&
data);
309 size_t count(
const std::string& key)
const;
316 const std::vector<std::string>&
format(
void)
const;
320 void get(
const std::string& key, std::vector<T>&
data)
const;
323 friend std::ostream& operator<<(std::ostream&,
const VCF::Data&);
327 bool initialised(
void)
const;
328 void init(std::vector<std::string>::const_iterator,
329 std::vector<std::string>::const_iterator);
330 size_t index(
const std::string& key)
const;
332 std::vector<std::string> format_;
333 std::vector<std::vector<std::string> > data_;
336 void validate(
void)
const;
360 friend std::ostream& operator<<(std::ostream&,
const VCF&);
361 std::vector<std::string> vec_;
367 void init(std::vector<std::string>& vec);
369 void update_alt(
void);
370 void print(std::ostream& os)
const;
374 void validate(
void)
const;
377 mutable std::vector<std::string> alts_;
378 mutable std::vector<std::string> filters_;
394 std::ostream& operator<<(std::ostream& os,
const VCF& vcf);
406 std::istream& operator>>(std::istream&
is,
VCF& vcf);
414 std::ostream& operator<<(std::ostream& os,
const VCF::Info& info);
422 std::ostream& operator<<(std::ostream& os,
const VCF::Data& data);
468 template <
typename T>
471 Appender(
char delim) : delim_(delim) {}
472 void operator()(std::string& val,
const T& x)
const 482 struct Appender<
std::string>
484 Appender(
char delim) : delim_(delim) {}
485 void operator()(std::string& val,
const std::string& x)
const 495 struct Appender<
std::vector<std::string> >
497 Appender(
char delim) : delim_(delim) {}
498 void operator()(std::string& val,
const std::vector<std::string>& x)
const 500 for (
size_t i=0; i<x.size(); ++i) {
511 template <
typename T>
512 struct Appender<
std::vector<T> >
514 Appender(
char delim) : delim_(delim) {}
515 void operator()(std::string& val,
const std::vector<T>& x)
const 517 for (
size_t i=0; i<x.size(); ++i) {
532 void operator()(
const std::string& x, T& result)
const 534 result = utility::convert<T>(x);
540 struct Converter<
std::string>
542 void operator()(
const std::string& x, std::string& result)
const 550 struct Converter<
std::vector<T> >
552 void operator()(
const std::string& x, std::vector<T>& result)
const 554 std::vector<std::string> vec;
557 result.reserve(vec.size());
558 for (
size_t i=0; i<vec.size(); ++i)
559 result.push_back(utility::convert<T>(vec[i]));
565 struct Converter<
std::vector<std::string> >
568 operator()(
const std::string& x, std::vector<std::string>& result)
const 589 detail::Appender<T> append(
',');
597 detail::Converter<T> converter;
599 std::string k = key +
"=";
600 size_t begin = str_.find(k);
602 if (begin == std::string::npos) {
603 converter(value, result);
607 if (begin && str_[begin-1]!=
';') {
609 begin = str_.find(k, begin+key.size());
610 if (begin == std::string::npos) {
611 converter(value, result);
617 int end = str_.find(
";", begin);
618 value = str_.substr(begin, end-begin);
619 converter(value, result);
628 YAT_ASSERT(key !=
"");
629 format_.push_back(key);
630 detail::Appender<T> append(
',');
631 for (
size_t i=0; i<input.size(); ++i) {
632 data_[i].push_back(
"");
633 append(data_[i].back(), input[i]);
641 size_t idx = index(key);
642 detail::Converter<T> converter;
643 data.resize(data_.size());
644 for (
size_t i=0; i<
data.size(); ++i)
645 converter(data_[i][idx],
data[i]);
const std::string & chromosome(void) const
const std::string & id(void) const
bool is(const std::string &s)
check if string is convertible to (numerical) type T
Definition: utility.h:589
const std::vector< std::string > & alts(void) const
The Department of Theoretical Physics namespace as we define it.
const int32_t & pos(void) const
Some useful functions are placed here.
const std::vector< std::string > & format(void) const
void add(const std::string &key)
Definition: stl_utility.h:64
VCF(void)
default constructor
const std::string & alt(void) const
void get(const std::string &key, std::vector< T > &data) const
T is string, numeric or vector string or numeric.
Definition: VCF.h:639
const std::string & qual(void) const
phred-scaled probability that all samples are wildtype
unsigned int n_samples(void) const
VCF::Info & info(void)
set info
unsigned int n_alleles(void) const
const std::string & filter(void) const
const std::vector< std::string > & filters(void) const
size_t count(const std::string &key) const
class holiding data stored in FORMAT and data fields
Definition: VCF.h:290
const Data & data(void) const
access data
void split(std::vector< std::string > &result, const std::string &str, char delim)
split a string into several substrings
const std::string & str(void) const
const std::string & ref(void) const
Data(void)
Default constructor.
class handling the INFO field in an VCF entry
Definition: VCF.h:195
bool is_indel(const VCF &)
std::string convert(T input)
convert T to a string
Definition: utility.h:569
void get(T &result, const std::string &key) const
Definition: VCF.h:595
void add_filter(const std::string &)
append list of filters
void add(const std::string &key, const std::vector< T > &data)
T is string, numeric or vector string or numeric.
Definition: VCF.h:626
size_t count(const std::string &key) const