50 throw BadIntegerException(
"MultilocusGenotype::MultilocusGenotype: loci_number must be > 0.",
static_cast<int>(loci_number));
53 for (
size_t i = 0; i < loci_number; i++)
61 for (
size_t i = 0; i < genotype.
size(); i++)
74 for (
size_t i = 0; i <
loci_.size(); i++)
86 if (locus_position <
loci_.size())
90 locus_position, 0,
loci_.size());
94 const std::vector<size_t>& allele_keys)
96 if (allele_keys.size() < 1)
97 throw Exception(
"MultilocusGenotype::setMonolocusGenotypeByAlleleKey: no key in allele_keys.");
99 if (locus_position <
loci_.size())
105 locus_position, 0,
loci_.size());
109 const std::vector<std::string>& allele_id,
const LocusInfo& locus_info)
111 vector<size_t> allele_keys;
112 for (
size_t i = 0; i < allele_id.size(); i++)
135 if (locus_position >=
loci_.size())
136 throw IndexOutOfBoundsException(
"MultilocusGenotype::setMonolocusGenotypeAsMissing: locus_position out of bounds.", locus_position, 0,
loci_.size());
137 if (
loci_[locus_position] != NULL)
138 delete loci_[locus_position];
139 loci_[locus_position] = NULL;
144 if (locus_position >=
loci_.size())
145 throw IndexOutOfBoundsException(
"MultilocusGenotype::isMonolocusGenotypeMissing: locus_position out of bounds.", locus_position, 0,
loci_.size());
146 return loci_[locus_position] == NULL;
151 if (locus_position >=
loci_.size())
153 return *
loci_[locus_position];
164 for (
size_t i = 0; i <
loci_.size(); i++)
166 if (
loci_[i] != NULL)
175 for (
size_t i = 0; i <
loci_.size(); i++)
191 for (
size_t i = 0; i <
loci_.size(); i++)
The AlleleNotFoundException class.
virtual const std::string getIdentifier() const
Return the value of the identifier as a string.
The BiAlleleMonolocusGenotype class.
virtual Clonable * clone() const=0
std::size_t getBadIndex() const
const std::array< std::size_t, 2 > & getBounds() const
unsigned int getAlleleInfoKey(const std::string &id) const
Get the position of an AlleleInfo.
The MonolocusGenotype virtual class.
The MultilocusGenotype class.
void setMonolocusGenotypeAsMissing(size_t locus_position)
Set a MonolocusGenotype as missing data.
void setMonolocusGenotype(size_t locus_position, const MonolocusGenotype &monogen)
Set a MonolocusGenotype.
~MultilocusGenotype()
Destroy a MultilocusGenotype.
void setMonolocusGenotypeByAlleleKey(size_t locus_position, const std::vector< size_t > &allele_keys)
Set a MonolocusGenotype by allele keys.
MultilocusGenotype(size_t loci_number)
Build a MultilocusGenotype linked to an AnalyzedLoci object.
const MonolocusGenotype & getMonolocusGenotype(size_t locus_position) const
Get a MonolocusGenotype.
size_t countHeterozygousLoci() const
Count the number of heterozygous MonolocusGenotype.
std::vector< MonolocusGenotype * > loci_
size_t countHomozygousLoci() const
Count the number of homozygous MonolocusGenotype.
bool isMonolocusGenotypeMissing(size_t locus_position) const
Tell if a MonolocusGenotype is a missing data.
size_t countNonMissingLoci() const
Count the number of non missing MonolocusGenotype.
size_t size() const
Count the number of loci.
void setMonolocusGenotypeByAlleleId(size_t locus_position, const std::vector< std::string > &allele_id, const LocusInfo &locus_info)
Set a MonolocusGenotype by allele id.
std::size_t count(const std::string &s, const std::string &pattern)