50 VectorSiteContainer(alpha),
51 ingroup_(vector<bool>()),
58 VectorSiteContainer(size, alpha),
66 VectorSiteContainer(sc),
67 ingroup_(sc.getNumberOfSequences(), true),
68 count_(sc.getNumberOfSequences(), 1),
69 group_(sc.getNumberOfSequences(), 1) {}
74 VectorSiteContainer(sc),
75 ingroup_(sc.getNumberOfSequences(), true),
76 count_(sc.getNumberOfSequences(), 1),
77 group_(sc.getNumberOfSequences(), 1) {}
82 VectorSiteContainer(psc),
83 ingroup_(psc.getNumberOfSequences()),
84 count_(psc.getNumberOfSequences()),
85 group_(psc.getNumberOfSequences())
87 for (
size_t i = 0; i < psc.getNumberOfSequences(); i++)
99 VectorSiteContainer::operator=(psc);
101 size_t nbSeq = psc.getNumberOfSequences();
105 for (
size_t i = 0; i < nbSeq; i++)
129 if (index >= getNumberOfSequences())
130 throw IndexOutOfBoundsException(
"PolymorphismSequenceContainer::removeSequence: index out of bounds.", index, 0, getNumberOfSequences());
131 count_.erase(count_.begin() +
static_cast<ptrdiff_t
>(index));
132 ingroup_.erase(ingroup_.begin() +
static_cast<ptrdiff_t
>(index));
133 group_.erase(group_.begin() +
static_cast<ptrdiff_t
>(index));
134 return VectorSiteContainer::removeSequence(index);
143 return removeSequence(getSequencePosition(name));
145 catch (SequenceNotFoundException& snfe)
147 throw SequenceNotFoundException(
"PolymorphismSequenceContainer::removeSequence.", name);
157 delete removeSequence(index);
159 catch (IndexOutOfBoundsException& ioobe)
161 throw IndexOutOfBoundsException(
"PolymorphismSequenceContainer::deleteSequence.", index, 0, getNumberOfSequences());
171 delete removeSequence(name);
173 catch (SequenceNotFoundException& snfe)
175 throw SequenceNotFoundException(
"PolymorphismSequenceContainer::deleteSequence.", name);
185 VectorSiteContainer::addSequence(sequence, checkName);
191 count_.push_back(frequency);
192 ingroup_.push_back(
true);
202 VectorSiteContainer::addSequence(sequence, sequenceIndex, checkName);
208 count_.insert(count_.begin() +
static_cast<ptrdiff_t
>(sequenceIndex), frequency);
209 ingroup_.insert(ingroup_.begin() +
static_cast<ptrdiff_t
>(sequenceIndex),
true);
210 group_.insert(group_.begin() +
static_cast<ptrdiff_t
>(sequenceIndex), 0);
217 VectorSiteContainer::clear();
227 if (index >= getNumberOfSequences())
228 throw IndexOutOfBoundsException(
"PolymorphismSequenceContainer::getGroupId: index out of bounds.", index, 0, getNumberOfSequences());
229 return group_[index];
238 return group_[getSequencePosition(name)];
240 catch (SequenceNotFoundException& snfe)
242 throw SequenceNotFoundException(
"PolymorphismSequenceContainer::getGroupId.", name);
251 for (
size_t i = 0; i <
group_.size(); i++)
253 grp_ids.insert(
group_[i]);
262 if (index >= getNumberOfSequences())
263 throw IndexOutOfBoundsException(
"PolymorphismSequenceContainer::setGroupId: index out of bounds.", index, 0, getNumberOfSequences());
264 group_[index] = group_id;
273 group_[getSequencePosition(name)] = group_id;
275 catch (SequenceNotFoundException& snfe)
277 throw SequenceNotFoundException(
"PolymorphismSequenceContainer::setGroupId.", name);
292 if (index >= getNumberOfSequences())
293 throw IndexOutOfBoundsException(
"PolymorphismSequenceContainer::isIngroupMember: index out of bounds.", index, 0, getNumberOfSequences());
294 return ingroup_[index];
303 return ingroup_[getSequencePosition(name)];
305 catch (SequenceNotFoundException& snfe)
307 throw SequenceNotFoundException(
"PolymorphismSequenceContainer::isIngroupMember.", name);
315 if (index >= getNumberOfSequences())
316 throw IndexOutOfBoundsException(
"PolymorphismSequenceContainer::setAsIngroupMember.", index, 0, getNumberOfSequences());
317 ingroup_[index] =
true;
326 size_t seqPos = getSequencePosition(name);
327 ingroup_[seqPos] =
true;
329 catch (SequenceNotFoundException& snfe)
331 throw SequenceNotFoundException(
"PolymorphismSequenceContainer::setAsIngroupMember.", name);
339 if (index >= getNumberOfSequences())
340 throw IndexOutOfBoundsException(
"PolymorphismSequenceContainer::setAsOutgroupMember.", index, 0, getNumberOfSequences());
341 ingroup_[index] =
false;
350 size_t seqPos = getSequencePosition(name);
351 ingroup_[seqPos] =
false;
353 catch (SequenceNotFoundException& snfe)
355 throw SequenceNotFoundException(
"PolymorphismSequenceContainer::setAsOutgroupMember.", name);
363 if (index >= getNumberOfSequences())
364 throw IndexOutOfBoundsException(
"PolymorphismSequenceContainer::setSequenceCount.", index, 0, getNumberOfSequences());
366 throw BadIntegerException(
"PolymorphismSequenceContainer::setSequenceCount: count can't be < 1.", static_cast<int>(count));
367 count_[index] = count;
376 setSequenceCount(getSequencePosition(name), count);
378 catch (BadIntegerException& bie)
382 catch (SequenceNotFoundException& snfe)
384 throw SequenceNotFoundException(
"PolymorphismSequenceContainer::setSequenceCount.", name);
392 if (index >= getNumberOfSequences())
393 throw IndexOutOfBoundsException(
"PolymorphismSequenceContainer::incrementSequenceCount.", index, 0, getNumberOfSequences());
403 incrementSequenceCount(getSequencePosition(name));
405 catch (SequenceNotFoundException& snfe)
407 throw SequenceNotFoundException(
"PolymorphismSequenceContainer::incrementSequenceCount.", name);
415 if (index >= getNumberOfSequences())
416 throw IndexOutOfBoundsException(
"PolymorphismSequenceContainer::decrementSequenceCount.", index, 0, getNumberOfSequences());
417 if (count_[index] - 1 < 1)
418 throw BadIntegerException(
"PolymorphismSequenceContainer::decrementSequenceCount: count can't be < 1.", static_cast<int>(count_[index] - 1));
428 decrementSequenceCount(getSequencePosition(name));
430 catch (BadIntegerException& bie)
434 catch (SequenceNotFoundException& snfe)
436 throw SequenceNotFoundException(
"PolymorphismSequenceContainer::decrementSequenceCount.", name);
444 if (index >= getNumberOfSequences())
445 throw IndexOutOfBoundsException(
"PolymorphismSequenceContainer::getSequenceCount.", index, 0, getNumberOfSequences());
446 return count_[index];
455 return getSequenceCount(getSequencePosition(name));
457 catch (SequenceNotFoundException& snfe)
459 throw SequenceNotFoundException(
"PolymorphismSequenceContainer::getSequenceCount.", name);
void setAsOutgroupMember(size_t index)
Set a sequence as outgroup member by index.
std::vector< size_t > group_
void clear()
Clear the container of all its sequences.
void incrementSequenceCount(size_t index)
Add 1 to the sequence count.
PolymorphismSequenceContainer(const Alphabet *alpha)
Build a new empty PolymorphismSequenceContainer.
size_t getGroupId(size_t index) const
Get the group identifier of the sequence.
std::vector< unsigned int > count_
bool isIngroupMember(size_t index) const
Tell if the sequence is ingroup by index.
PolymorphismSequenceContainer & operator=(const PolymorphismSequenceContainer &psc)
Operator= : copy operator.
unsigned int getSequenceCount(size_t index) const
Get the count of a sequence by index.
void addSequenceWithFrequency(const Sequence &sequence, unsigned int frequency, bool checkName=true)
Add a sequence to the container.
void setGroupId(size_t index, size_t group_id)
Set the group identifier of a sequence.
size_t getNumberOfGroups() const
Get the number of groups.
void deleteSequence(size_t index)
Delete a sequence by index.
virtual ~PolymorphismSequenceContainer()
Destroy a PolymorphismSequenceContainer.
void decrementSequenceCount(size_t index)
Removz 1 to the sequence count.
void setAsIngroupMember(size_t index)
Set a sequence as ingroup member by index.
Sequence * removeSequence(size_t index)
Remove a sequence by index and return a pointer to this removed sequence.
std::vector< bool > ingroup_
void setSequenceCount(size_t index, unsigned int count)
Set the count of a sequence by index.
The PolymorphismSequenceContainer class.
std::set< size_t > getAllGroupsIds() const
Get all the groups identifiers.