49 analyzedSequences_(0),
50 localities_(vector<
Locality<double>*>()),
51 groups_(vector<
Group*>()) {}
56 analyzedSequences_(0),
57 localities_(vector<
Locality<double>*>()),
58 groups_(vector<
Group*>())
70 for (
size_t i = 0; i < ds.
groups_.size(); i++)
90 for (
size_t i = 0; i < ds.
groups_.size(); i++)
207 for (
size_t i = 0; i <
groups_.size(); i++)
219 for (
size_t i = 0; i <
groups_.size(); i++)
221 if (group_id ==
groups_[i]->getGroupId())
231 for (
size_t i = 0; i <
groups_.size(); i++)
233 if (group_id ==
groups_[i]->getGroupId())
256 for (
size_t i = 0; i <
groups_.size(); i++)
258 if (group_id ==
groups_[i]->getGroupId())
260 groups_[i]->setGroupName(group_name);
271 for (
size_t i = 0; i <
groups_.size(); i++)
273 if (group_id ==
groups_[i]->getGroupId())
283 if (group_position >=
groups_.size())
285 return *(
groups_[group_position]);
292 if (group_position >=
groups_.size())
294 delete groups_[group_position];
295 groups_.erase(
groups_.begin() +
static_cast<ptrdiff_t
>(group_position));
329 for (
size_t i = 0; i <
groups_[source_pos]->getNumberOfIndividuals(); i++)
331 groups_[target_pos]->addIndividual(
groups_[source_pos]->getIndividualAtPosition(i));
341 for (
size_t i = 0; i < group_ids.size(); i++)
353 sort(group_ids.begin(), group_ids.end());
356 for (
size_t i = 1; i < group_ids.size(); i++)
380 size_t new_group_id = 0;
381 for (
size_t i = 0; i <
groups_.size(); i++)
383 if (
groups_[i]->getGroupId() > new_group_id)
384 new_group_id =
groups_[i]->getGroupId();
387 Group new_group(new_group_id);
388 for (
size_t i = 0; i < individuals_selection.size(); i++)
390 if (individuals_selection[i] >=
groups_[source_pos]->getNumberOfIndividuals())
391 throw IndexOutOfBoundsException(
"DataSet::splitGroup: individuals_selection excedes the number of individual in the group.", individuals_selection[i], 0,
groups_[source_pos]->getNumberOfIndividuals());
393 for (
size_t i = 0; i < individuals_selection.size(); i++)
395 new_group.
addIndividual(*
groups_[source_pos]->removeIndividualAtPosition(individuals_selection[i]));
396 groups_[source_pos]->deleteIndividualAtPosition(individuals_selection[i]);
411 groups_[group]->addIndividual(individual);
429 groups_[group]->addEmptyIndividual(individual_id);
443 return groups_[group_position]->getNumberOfIndividuals();
454 return groups_[group_position]->getIndividualPosition(individual_id);
470 return &
groups_[group_position]->getIndividualAtPosition(individual_position);
486 return &
groups_[group_position]->getIndividualById(individual_id);
502 groups_[group_position]->deleteIndividualAtPosition(individual_position);
518 groups_[group_position]->deleteIndividualById(individual_id);
534 groups_[group_position]->setIndividualSexAtPosition(individual_position, sex);
550 return groups_[group_position]->getIndividualSexAtPosition(individual_position);
566 groups_[group_position]->setIndividualDateAtPosition(individual_position, date);
582 return &
groups_[group_position]->getIndividualDateAtPosition(individual_position);
602 groups_[group_position]->setIndividualCoordAtPosition(individual_position, coord);
618 return &
groups_[group_position]->getIndividualCoordAtPosition(individual_position);
626 throw NullPointerException(
"DataSet::getIndividualCoordInGroup: individual has no coordinate.");
658 return &
groups_[group_position]->getIndividualLocalityAtPosition(individual_position);
666 throw NullPointerException(
"DataSet::getIndividualLocalityInGroup: individual has no locality.");
678 groups_[group_position]->addIndividualSequenceAtPosition(individual_position, sequence_position, sequence);
695 throw BadIntegerException(
"DataSet::addIndividualSequenceInGroup: sequence_position already in use.", bie.getBadInteger());
707 return groups_[group_position]->getIndividualSequenceByName(individual_position, sequence_name);
715 throw NullPointerException(
"DataSet::getIndividualSequenceByNameInGroup: individual has no sequences.");
731 return groups_[group_position]->getIndividualSequenceAtPosition(individual_position, sequence_position);
735 if (
string(ioobe.
what()).find(
"individual_position") <
string(ioobe.
what()).size())
743 throw NullPointerException(
"DataSet::getIndividualSequenceAtPositionInGroup: individual has no sequences.");
755 groups_[group_position]->deleteIndividualSequenceByName(individual_position, sequence_name);
763 throw NullPointerException(
"DataSet::deleteIndividualSequenceByNameInGroup: individual has no sequences.");
779 groups_[group_position]->deleteIndividualSequenceAtPosition(individual_position, sequence_position);
783 if (
string(ioobe.
what()).find(
"individual_position") <
string(ioobe.
what()).size())
791 throw NullPointerException(
"DataSet::deleteIndividualSequenceAtPositionInGroup: individual has no sequences.");
803 return groups_[group_position]->getIndividualSequencesNames(individual_position);
811 throw NullPointerException(
"DataSet::getIndividualSequencesNamesInGroup: individual has no sequences.");
823 return groups_[group_position]->getIndividualSequencePosition(individual_position, sequence_name);
831 throw NullPointerException(
"DataSet::getIndividualSequencePositionInGroup: individual has no sequences.");
847 return groups_[group_position]->getIndividualNumberOfSequences(individual_position);
855 throw NullPointerException(
"DataSet::getIndividualNumberOfSequencesInGroup: individual has no sequences.");
867 groups_[group_position]->setIndividualGenotype(individual_position, genotype);
899 throw Exception(
"DataSet::initIndividualGenotypeInGroup: individual already has a genotype.");
911 groups_[group_position]->deleteIndividualGenotype(individual_position);
927 groups_[group_position]->setIndividualMonolocusGenotype(individual_position, locus_position, monogen);
931 if (
string(ioobe.
what()).find(
"individual_position") <
string(ioobe.
what()).size())
939 throw NullPointerException(
"DataSet::setIndividualMonolocusGenotypeInGroup: individual has no genotype.");
951 groups_[group_position]->setIndividualMonolocusGenotypeByAlleleKey(individual_position, locus_position, allele_keys);
955 if (
string(ioobe.
what()).find(
"individual_position") <
string(ioobe.
what()).size())
963 throw NullPointerException(
"DataSet::setIndividualMonolocusGenotypeByAlleleKeyInGroup: individual has no genotype.");
967 throw Exception(
"DataSet::setIndividualMonolocusGenotypeByAlleleKeyInGroup: no key in allele_keys.");
980 groups_[group_position]->setIndividualMonolocusGenotypeByAlleleId(individual_position, locus_position, allele_id, locus_info);
984 if (
string(ioobe.
what()).find(
"individual_position") <
string(ioobe.
what()).size())
992 throw NullPointerException(
"DataSet::setIndividualMonolocusGenotypeByAlleleIdInGroup: individual has no genotype.");
1008 return &
groups_[group_position]->getIndividualMonolocusGenotype(individual_position, locus_position);
1012 if (
string(ioobe.
what()).find(
"individual_position") <
string(ioobe.
what()).size())
1020 throw NullPointerException(
"DataSet::getIndividualMonolocusGenotypeInGroup: individual has no genotype.");
1076 throw Exception (
"DataSet::setAnalyzedLoci: at least one individual has a genotype of the actual AnalyzedLoci.");
1087 throw Exception(
"DataSet::initAnalyzedLoci: analyzedLoci_ already initialyzed.");
1251 string name =
groups_[i]->getGroupName();
1271 for (map<
size_t, vector<size_t> >::const_iterator it = selection.begin(); it != selection.end(); it++)
1282 string name =
groups_[i]->getGroupName();
1284 for (
size_t j = 0; j < it->second.size(); j++)
1310 for (map<
size_t, vector<size_t> >::const_iterator it = selection.begin(); it != selection.end(); it++)
1322 for (
size_t j = 0; j < it->second.size(); j++)
The AlleleInfo interface.
The AlleleNotFoundException class.
virtual const std::string getIdentifier() const
Return the value of the identifier as a string.
std::vector< const Alphabet * > getAlphabets() const
size_t getNumberOfLoci() const
Get the number of loci.
unsigned int getPloidyByLocusName(const std::string &locus_name) const
Get the ploidy of a locus by name.
const LocusInfo & getLocusInfoByName(const std::string &locus_name) const
Get a LocusInfo by name.
const LocusInfo & getLocusInfoAtPosition(size_t locus_position) const
Get a LocusInfo by its position.
unsigned int getPloidyByLocusPosition(size_t locus_position) const
Get the ploidy of a locus by its position.
void addAlleleInfoByLocusPosition(size_t locus_position, const AlleleInfo &allele)
Add an AlleleInfo to a LocusInfo by its position.
void addAlleleInfoByLocusName(const std::string &locus_name, const AlleleInfo &allele)
Add an AlleleInfo to a LocusInfo by LocusInfo name.
void setLocusInfo(size_t locus_position, const LocusInfo &locus)
Set a LocusInfo.
The AnalyzedSequences class.
std::string getAlphabetType() const
Get the alphabet type as a string.
const Alphabet * getAlphabet() const
Get the alphabet.
void setAlphabet(const Alphabet *alpha)
Set the alphabet used for the sequences.
The BadIdentifierException class.
virtual const std::string getIdentifier() const
Return the value of the identifier as a string.
int getBadInteger() const
virtual const Alphabet * getAlphabet() const=0
std::string getAlphabetType() const
Get the alphabet type as a string.
void setAnalyzedLoci(const AnalyzedLoci &analyzedLoci)
Set the AnalyzedLoci to the DataSet.
void setIndividualSexInGroup(size_t group_position, size_t individual_position, const unsigned short sex)
Set the sex of an Individual in a Group.
void setIndividualDateInGroup(size_t group_position, size_t individual_position, const Date &date)
Set the Date of an Individual in a Group.
bool hasAlleleicData() const
Tell if there is alelelic data.
size_t getNumberOfGroups() const
Get the number of Groups.
void setIndividualMonolocusGenotypeInGroup(size_t group_position, size_t individual_position, size_t locus_position, const MonolocusGenotype &monogen)
Set a MonolocusGenotype of an Individual from a group.
size_t getNumberOfLocalities() const
Get the number of Localities.
void initIndividualGenotypeInGroup(size_t group_position, size_t individual_position)
Initialyze the genotype of an Individual in a Group.
const Sequence & getIndividualSequenceByNameInGroup(size_t group_position, size_t individual_position, const std::string &sequence_name) const
Get a Sequence from an Individual of a Group.
const Group & getGroupById(size_t group_id) const
Get a group by identifier.
void setIndividualCoordInGroup(size_t group_position, size_t individual_position, const Point2D< double > &coord)
Set the coordinates of an Individual in a Group.
const Group & getGroupAtPosition(size_t group_position) const
Get a group by position.
std::vector< Locality< double > * > localities_
const Locality< double > * getIndividualLocalityInGroup(size_t group_position, size_t individual_position) const
Get the Locality of an Individual in a Group.
void addAlleleInfoByLocusName(const std::string &locus_name, const AlleleInfo &allele)
Add an AlleleInfo to a LocusInfo.
void setIndividualLocalityInGroupByName(size_t group_position, size_t individual_position, const std::string &locality_name)
Set the Locality of an Individual in a Group.
void addAlleleInfoByLocusPosition(size_t locus_position, const AlleleInfo &allele)
Add an AlleleInfo to a LocusInfo.
size_t getPloidyByLocusPosition(size_t locus_position) const
Get the ploidy of a locus.
void mergeTwoGroups(size_t source_id, size_t target_id)
Merge two groups.
~DataSet()
Destroy a DataSet.
void setIndividualGenotypeInGroup(size_t group_position, size_t individual_position, const MultilocusGenotype &genotype)
Set the MultilocusGenotype of an Individual in a Group.
std::vector< Group * > groups_
bool hasLocality() const
Tell if there is at least one locality.
void initAnalyzedLoci(size_t number_of_loci)
Initialize the AnalyzedLoci for number of loci.
const Date * getIndividualDateInGroup(size_t group_position, size_t individual_position) const
Get the Date of an Individual in a Group.
void deleteIndividualSequenceByNameInGroup(size_t group_position, size_t individual_position, const std::string &sequence_name)
Delete a Sequence of an Individual of a Group.
void mergeGroups(std::vector< size_t > &group_ids)
Merge some Groups in one.
void deleteLocalityByName(const std::string &name)
Delete a Locality from the DataSet.
const MonolocusGenotype * getIndividualMonolocusGenotypeInGroup(size_t group_position, size_t individual_position, size_t locus_position) const
Get a MonolocusGenotype from an Individual of a Group.
size_t getNumberOfIndividualsInGroup(size_t group_position) const
Get the number of Individuals in a Group.
void setGroupName(size_t group_id, const std::string &group_name) const
set the name of a Group.
void setAlphabet(const Alphabet *alpha)
Set the alphabet of the AnalyzedSequences.
void deleteIndividualSequenceAtPositionInGroup(size_t group_position, size_t individual_position, size_t sequence_position)
Delete a Sequence of an Individual of a Group.
void deleteIndividualAtPositionFromGroup(size_t group_position, size_t individual_position)
Delete an Individual from a group.
void deleteGroupAtPosition(size_t group_position)
Delete a Group from the DataSet.
size_t getIndividualSequencePositionInGroup(size_t group_position, size_t individual_position, const std::string &sequence_name) const
Get the position of a Sequence in an Individual of a Group.
void addIndividualSequenceInGroup(size_t group_position, size_t individual_position, size_t sequence_position, const Sequence &sequence)
Add a Sequence to an Individual in a Group.
bool hasSequenceData() const
Tell if at least one individual has at least one sequence.
size_t getGroupPosition(size_t group_id) const
Get the position of a Group.
unsigned short getIndividualSexInGroup(size_t group_position, size_t individual_position) const
Get the sex of an Individual in a Group.
std::string getGroupName(size_t group_id) const
Get the name of a Group. If the name is an empty string it just returns the group_id.
const Individual * getIndividualByIdFromGroup(size_t group_position, const std::string &individual_id) const
Get an Individual from a Group.
DataSet & operator=(const DataSet &ds)
void setIndividualMonolocusGenotypeByAlleleIdInGroup(size_t group_position, size_t individual_position, size_t locus_position, const std::vector< std::string > allele_id)
Set a MonolocusGenotype of an Individual from a group.
void addGroup(const Group &group)
Add a Group to the DataSet.
const Alphabet * getAlphabet() const
Get the alphabet if there is sequence data.
std::vector< std::string > getIndividualSequencesNamesInGroup(size_t group_position, size_t individual_position) const
Get the Sequences' names from an Individual of a Group.
void setLocusInfo(size_t locus_position, const LocusInfo &locus)
Set a LocusInfo.
void setIndividualMonolocusGenotypeByAlleleKeyInGroup(size_t group_position, size_t individual_position, size_t locus_position, const std::vector< size_t > allele_keys)
Set a MonolocusGenotype of an Individual from a group.
const Locality< double > & getLocalityAtPosition(size_t locality_position) const
Get a Locality by locality_position.
PolymorphismSequenceContainer * getPolymorphismSequenceContainer(const std::map< size_t, std::vector< size_t > > &selection, size_t sequence_position) const
Get a PolymorphismSequenceContainer from a selection of groups and individuals.
void addEmptyIndividualToGroup(size_t group_position, const std::string &individual_id)
Add an empty Individual to a Group.
AnalyzedSequences * analyzedSequences_
void deleteAnalyzedLoci()
Delete the AnalyzedLoci.
const LocusInfo & getLocusInfoByName(const std::string &locus_name) const
Get a LocusInfo by its name.
size_t getPloidyByLocusName(const std::string &locus_name) const
Get the ploidy of a locus.
const Sequence & getIndividualSequenceAtPositionInGroup(size_t group_position, size_t individual_position, size_t sequence_position) const
Get a Sequence from an Individual of a Group.
PolymorphismMultiGContainer * getPolymorphismMultiGContainer() const
Get a PolymorphismMultiGContainer with all allelic data of the DataSet.
size_t getLocalityPosition(const std::string &name) const
Get the position of a locality in the container.
size_t getIndividualNumberOfSequencesInGroup(size_t group_position, size_t individual_position) const
Get the number of Sequences in an Individual of a Group.
void deleteIndividualGenotypeInGroup(size_t group_position, size_t individual_position)
Delete the MultilocusGenotype of an Individual from a Group.
DataSet()
Build a new void DataSet.
const LocusInfo & getLocusInfoAtPosition(size_t locus_position) const
Get a LocusInfo by its position.
size_t getNumberOfLoci() const
Get the number of loci.
const Point2D< double > * getIndividualCoordInGroup(size_t group_position, size_t individual_position) const
Get the coordinate of an Individual in a Group.
const AnalyzedLoci * getAnalyzedLoci() const
Get the AnalyzedLoci if there is one.
AnalyzedLoci * analyzedLoci_
void addIndividualToGroup(size_t group_position, const Individual &individual)
Add an Individual to a Group.
size_t getIndividualPositionInGroup(size_t group_position, const std::string &individual_id) const
Get the position of an Individual in a Group.
void deleteIndividualByIdFromGroup(size_t group_position, const std::string &individual_id)
Delete an Individual from a group.
void deleteLocalityAtPosition(size_t locality_position)
Delete a Locality from the DataSet.
void addEmptyGroup(size_t group_id)
Add an empty Group to the DataSet.
void splitGroup(size_t group_id, std::vector< size_t > individuals_selection)
Split a group in two.
const Individual * getIndividualAtPositionFromGroup(size_t group_position, size_t individual_position) const
Get an Individual from a Group.
const Locality< double > & getLocalityByName(const std::string &name) const
Get a Locality by name.
void addLocality(Locality< double > &locality)
Add a locality to the DataSet.
const char * what() const noexcept override
The GroupNotFoundException class.
virtual const std::string getIdentifier() const
Return the value of the identifier as a string.
size_t getNumberOfIndividuals() const
Get the number of Individual in the Group.
size_t getGroupId() const
Get the id of the Group.
void addIndividual(const Individual &ind)
Add an Individual.
const Individual & getIndividualAtPosition(size_t individual_position) const
Get a reference to an Individual by its position.
const std::string & getGroupName() const
Get the name of the Group.
std::size_t getBadIndex() const
const std::array< std::size_t, 2 > & getBounds() const
The IndividualNotFoundException class.
virtual const std::string getIdentifier() const
Return the value of the identifier as a string.
const Sequence & getSequenceAtPosition(const size_t sequence_position) const
Get a sequence by its position.
bool hasSequences() const
Tell if the Individual has some sequences.
bool hasGenotype() const
Tell if the Individual has a MultilocusGenotype.
const MultilocusGenotype & getGenotype() const
Get the genotype.
bool hasSequenceAtPosition(size_t position) const
Tell if the Individual has a sequence at a given position.
const Alphabet * getSequenceAlphabet() const
Return the alphabet of the sequences.
The LocalityNotFoundException class.
virtual const std::string getIdentifier() const
Return the value of the identifier as a string.
const std::string & getName() const
Get the name of the locality.
The LocusNotFoundException class.
virtual const std::string getIdentifier() const
Return the value of the identifier as a string.
The MonolocusGenotype virtual class.
The MultilocusGenotype class.
The PolymorphismMultiGContainer class.
void addGroupName(size_t group_id, std::string name)
Inserts a name for the given group id.
void addMultilocusGenotype(const MultilocusGenotype &mg, size_t group)
Add a MultilocusGenotype to the container.
The PolymorphismSequenceContainer class.
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.
virtual const std::string getSequenceId() const
virtual const std::string & getName() const=0
std::string toString(T t)