62 for (
unsigned int i = 0; i < osc.getNumberOfSequences(); i++)
64 addSequence(osc.getSequence(i),
true);
67 if (osc.getNumberOfSequences() > 0)
68 length_ = getSequence(0).size();
73 sites_.resize(length_);
74 setGeneralComments(osc.getGeneralComments());
86 sites_.resize(length_);
100 sites_.resize(length_);
114 sites_.resize(length_);
124 for (
unsigned int i = 0; i < sites_.size(); i++)
139 size_t n = getNumberOfSequences();
140 std::vector<int> site(n);
141 for (
size_t j = 0; j < n; j++)
143 site[j] = getSequence(j)[i];
148 sites_[i] =
new Site(site, getAlphabet(), positions_[i]);
157 if (pos >= getNumberOfSites())
159 if (site.getAlphabet()->getAlphabetType() != getAlphabet()->getAlphabetType())
162 std::vector<int> s = site.getContent();
165 if (s.size() != getNumberOfSequences())
166 throw SiteException(
"AlignedSequenceContainer::setSite, site does not have the appropriate length", &site);
169 int position = site.getPosition();
173 for (
size_t i = 0; i < positions_.size(); i++)
175 if (positions_[i] == position)
176 throw SiteException(
"AlignedSequenceContainer::setSite: Site position already exists in container", &site);
181 for (
size_t j = 0; j < getNumberOfSequences(); j++)
183 getSequence_(j).setElement(pos, s[j]);
185 positions_[pos] = site.getPosition();
192 if (pos >= getNumberOfSites())
197 Site* old = sites_[pos];
200 for (
size_t j = 0; j < getNumberOfSequences(); j++)
206 positions_.erase(positions_.begin() + pos);
212 sites_.erase(sites_.begin() + pos);
222 if (pos >= getNumberOfSites())
226 for (
size_t j = 0; j < getNumberOfSequences(); j++)
228 getSequence_(j).deleteElement(pos);
232 positions_.erase(positions_.begin() + pos);
238 sites_.erase(sites_.begin() + pos);
245 if (siteIndex + length > getNumberOfSites())
249 for (
size_t j = 0; j < getNumberOfSequences(); j++)
251 getSequence_(j).deleteElements(siteIndex, length);
255 positions_.erase(positions_.begin() + siteIndex, positions_.begin() + siteIndex + length);
259 for (
size_t i = siteIndex; i < siteIndex + length; ++i)
264 sites_.erase(sites_.begin() + siteIndex, sites_.begin() + siteIndex + length);
272 if (site.getAlphabet()->getAlphabetType() != getAlphabet()->getAlphabetType())
276 std::vector<int> s = site.getContent();
279 if (s.size() != getNumberOfSequences())
280 throw SiteException(
"AlignedSequenceContainer::addSite, site does not have the appropriate length", &site);
284 int position = site.getPosition();
288 for (
unsigned int i = 0; i < positions_.size(); i++)
290 if (positions_[i] == position)
291 throw SiteException(
"AlignedSequenceContainer::addSite: Site position already exists in container", &site);
296 for (
unsigned int j = 0; j < getNumberOfSequences(); j++)
298 getSequence_(j).addElement(s[j]);
302 positions_.push_back(position);
313 if (site.getAlphabet()->getAlphabetType() != getAlphabet()->getAlphabetType())
317 std::vector<int> s = site.getContent();
320 if (s.size() != getNumberOfSequences())
321 throw SiteException(
"AlignedSequenceContainer::addSite, site does not have the appropriate length", &site);
328 for (
unsigned int i = 0; i < positions_.size(); i++)
330 if (positions_[i] == position)
331 throw SiteException(
"AlignedSequenceContainer::addSite: Site position already exists in container", &site);
336 for (
unsigned int j = 0; j < getNumberOfSequences(); j++)
338 getSequence_(j).addElement(s[j]);
342 positions_.push_back(position);
352 if (siteIndex >= getNumberOfSites())
356 if (site.getAlphabet()->getAlphabetType() != getAlphabet()->getAlphabetType())
359 std::vector<int> s = site.getContent();
362 if (s.size() != getNumberOfSequences())
363 throw SiteException(
"AlignedSequenceContainer::addSite, site does not have the appropriate length", &site);
366 int position = site.getPosition();
370 for (
size_t i = 0; i < positions_.size(); i++)
372 if (positions_[i] == position)
373 throw SiteException(
"AlignedSequenceContainer::addSite: Site position already exists in container", &site);
378 for (
size_t j = 0; j < getNumberOfSequences(); j++)
380 getSequence_(j).addElement(siteIndex, site[j]);
384 positions_.insert(positions_.begin() + siteIndex, position);
387 sites_.insert(sites_.begin() + siteIndex, 0);
394 if (siteIndex >= getNumberOfSites())
398 if (site.getAlphabet()->getAlphabetType() != getAlphabet()->getAlphabetType())
401 std::vector<int> s = site.getContent();
404 if (s.size() != getNumberOfSequences())
405 throw SiteException(
"AlignedSequenceContainer::addSite, site does not have the appropriate length", &site);
411 for (
size_t i = 0; i < positions_.size(); i++)
413 if (positions_[i] == position)
414 throw SiteException(
"AlignedSequenceContainer::addSite: Site position already exists in container", &site);
419 for (
size_t j = 0; j < getNumberOfSequences(); j++)
421 getSequence_(j).addElement(siteIndex, site[j]);
425 positions_.insert(positions_.begin() + siteIndex, position);
428 sites_.insert(sites_.begin() + siteIndex, 0);
435 positions_.resize(length_);
436 for (
size_t i = 0; i < length_; i++)
438 positions_[i] =
static_cast<int>(i + 1);
446 if (i >= getNumberOfSequences())
449 if (getNumberOfSequences() == 1)
450 length_ = sequence.size();
451 if (checkSize_(sequence))
462 if (getNumberOfSequences() == 1)
463 length_ = sequence.size();
464 if (checkSize_(sequence))
477 length_ = sequence.size();
478 sites_.resize(length_);
481 if (checkSize_(sequence))
491 if (i >= getNumberOfSequences())
495 length_ = sequence.size();
496 if (checkSize_(sequence))