bpp-popgen  3.0.0
Group.h
Go to the documentation of this file.
1 //
2 // File Group.h
3 // Author : Sylvain Gaillard
4 // Khalid Belkhir
5 // Last modification : Thursday July 29 2004
6 //
7 
8 /*
9  Copyright or © or Copr. Bio++ Development Team, (November 17, 2004)
10 
11  This software is a computer program whose purpose is to provide classes
12  for population genetics analysis.
13 
14  This software is governed by the CeCILL license under French law and
15  abiding by the rules of distribution of free software. You can use,
16  modify and/ or redistribute the software under the terms of the CeCILL
17  license as circulated by CEA, CNRS and INRIA at the following URL
18  "http://www.cecill.info".
19 
20  As a counterpart to the access to the source code and rights to copy,
21  modify and redistribute granted by the license, users are provided only
22  with a limited warranty and the software's author, the holder of the
23  economic rights, and the successive licensors have only limited
24  liability.
25 
26  In this respect, the user's attention is drawn to the risks associated
27  with loading, using, modifying and/or developing or reproducing the
28  software by the user in light of its specific status of free software,
29  that may mean that it is complicated to manipulate, and that also
30  therefore means that it is reserved for developers and experienced
31  professionals having in-depth computer knowledge. Users are therefore
32  encouraged to load and test the software's suitability as regards their
33  requirements in conditions enabling the security of their systems and/or
34  data to be ensured and, more generally, to use and operate it in the
35  same conditions as regards security.
36 
37  The fact that you are presently reading this means that you have had
38  knowledge of the CeCILL license and that you accept its terms.
39  */
40 
41 #ifndef _GROUP_H_
42 #define _GROUP_H_
43 
44 // From STL
45 #include <vector>
46 #include <memory>
47 
48 #include <Bpp/Exceptions.h>
49 #include <Bpp/Graphics/Point2D.h>
50 
51 // From bpp-seq
55 
56 // From local
57 #include "Individual.h"
58 #include "../GeneralExceptions.h"
59 
60 namespace bpp
61 {
70 class Group
71 {
72 protected:
73  size_t id_;
74  std::string name_;
75  std::vector<Individual*> individuals_;
76 
77 public:
78  // Constructors and destructor :
82  Group(size_t group_id);
83 
90  Group(const Group& group);
91 
95  Group(const Group& group, size_t group_id);
96 
100  ~Group();
101 
102 public:
106  Group& operator=(const Group& group);
107 
113  void setGroupId(size_t group_id);
114 
120  const std::string& getGroupName() const { return name_; }
121 
127  void setGroupName(const std::string& group_name);
128 
134  size_t getGroupId() const { return id_; }
135 
144  void addIndividual(const Individual& ind);
145 
151  void addEmptyIndividual(const std::string& individual_id);
152 
158  size_t getNumberOfIndividuals() const;
159 
166  size_t getMaxNumberOfSequences() const;
167 
173  size_t getIndividualPosition(const std::string& individual_id) const;
174 
182  const Individual& getIndividualById(const std::string& individual_id) const;
183 
192  const Individual& getIndividualAtPosition(size_t individual_position) const;
193 
205  std::unique_ptr<Individual> removeIndividualById(const std::string& individual_id);
206 
217  std::unique_ptr<Individual> removeIndividualAtPosition(size_t individual_position);
218 
229  void deleteIndividualById(const std::string& individual_id);
230 
238  void deleteIndividualAtPosition(size_t individual_position);
239 
245  void clear();
246 
247  // -- Dealing with Individuals -----------------------------
253  void setIndividualSexAtPosition(size_t individual_position, const unsigned short sex);
254 
260  unsigned short getIndividualSexAtPosition(size_t individual_position) const;
261 
267  void setIndividualDateAtPosition(size_t individual_position, const Date& date);
268 
275  const Date& getIndividualDateAtPosition(size_t individual_position) const;
276 
282  void setIndividualCoordAtPosition(size_t individual_position, const Point2D<double>& coord);
283 
290  const Point2D<double>& getIndividualCoordAtPosition(size_t individual_position) const;
291 
297  void setIndividualLocalityAtPosition(size_t individual_position, const Locality<double>* locality);
298 
305  const Locality<double>& getIndividualLocalityAtPosition(size_t individual_position) const;
306 
315  void addIndividualSequenceAtPosition(size_t individual_position,
316  size_t sequence_position,
317  const Sequence& sequence);
318 
327  size_t individual_position,
328  const std::string& sequence_name) const;
329 
338  size_t individual_position,
339  size_t sequence_position) const;
340 
348  void deleteIndividualSequenceByName(size_t individual_position, const std::string& sequence_name);
349 
357  void deleteIndividualSequenceAtPosition(size_t individual_position, size_t sequence_position);
358 
364  bool hasIndividualSequences(size_t individual_position) const;
365 
372  std::vector<std::string> getIndividualSequencesNames(size_t individual_position) const;
373 
382  size_t individual_position,
383  const std::string& sequence_name) const;
384 
391  size_t getIndividualNumberOfSequences(size_t individual_position) const;
392 
398  void setIndividualSequences(size_t individual_position, const MapSequenceContainer& msc);
399 
405  void setIndividualGenotype(size_t individual_position, const MultilocusGenotype& genotype);
406 
414  void initIndividualGenotype(size_t individual_position, size_t loci_number);
415 
421  void deleteIndividualGenotype(size_t individual_position);
422 
428  bool hasIndividualGenotype(size_t individual_position) const;
429 
437  void setIndividualMonolocusGenotype(size_t individual_position, size_t locus_position,
438  const MonolocusGenotype& monogen);
439 
448  void setIndividualMonolocusGenotypeByAlleleKey(size_t individual_position, size_t locus_position,
449  const std::vector<size_t>& allele_keys);
450 
459  void setIndividualMonolocusGenotypeByAlleleId(size_t individual_position, size_t locus_position,
460  const std::vector<std::string>& allele_id, const LocusInfo& locus_info);
461 
469  const MonolocusGenotype& getIndividualMonolocusGenotype(size_t individual_position,
470  size_t locus_position) const;
471 
475  bool hasSequenceData() const;
476 
480  const Alphabet* getAlphabet() const;
481 
485  size_t getGroupSizeForLocus(size_t locus_position) const;
486 
490  size_t getGroupSizeForSequence(size_t sequence_position) const;
491 };
492 } // end of namespace bpp;
493 
494 #endif // _GROUP_H_
495 
The Date class.
Definition: Date.h:57
The Group class.
Definition: Group.h:71
void deleteIndividualById(const std::string &individual_id)
Delete an Individual from the Group.
Definition: Group.cpp:154
void setIndividualSequences(size_t individual_position, const MapSequenceContainer &msc)
Set all the sequences by copying an OrderedSequenceContainer.
Definition: Group.cpp:450
bool hasIndividualGenotype(size_t individual_position) const
Tell if an Individual has a genotype.
Definition: Group.cpp:489
const Alphabet * getAlphabet() const
Get the alphabet used for the sequences.
Definition: Group.cpp:586
size_t getNumberOfIndividuals() const
Get the number of Individual in the Group.
Definition: Group.cpp:204
std::unique_ptr< Individual > removeIndividualAtPosition(size_t individual_position)
Remove an Individual from the Group.
Definition: Group.cpp:145
Group & operator=(const Group &group)
The assignation operator =.
Definition: Group.cpp:78
void deleteIndividualSequenceAtPosition(size_t individual_position, size_t sequence_position)
Delete a sequence of an Individual.
Definition: Group.cpp:379
void addEmptyIndividual(const std::string &individual_id)
Add an empty Individual to the Group.
Definition: Group.cpp:110
void setGroupId(size_t group_id)
Set the id of the Group.
Definition: Group.cpp:88
const Date & getIndividualDateAtPosition(size_t individual_position) const
Get the date of an Individual.
Definition: Group.cpp:247
size_t getGroupId() const
Get the id of the Group.
Definition: Group.h:134
bool hasIndividualSequences(size_t individual_position) const
Tell if the Individual has some sequences.
Definition: Group.cpp:397
void deleteIndividualSequenceByName(size_t individual_position, const std::string &sequence_name)
Delete a sequence of an Individual.
Definition: Group.cpp:361
void addIndividual(const Individual &ind)
Add an Individual.
Definition: Group.cpp:98
void setIndividualGenotype(size_t individual_position, const MultilocusGenotype &genotype)
Set the genotype of an Individual.
Definition: Group.cpp:457
void setIndividualDateAtPosition(size_t individual_position, const Date &date)
Set the date of an Individual.
Definition: Group.cpp:240
void setGroupName(const std::string &group_name)
Set the name of the Group.
Definition: Group.cpp:93
unsigned short getIndividualSexAtPosition(size_t individual_position) const
Get the sex of an Individual.
Definition: Group.cpp:233
std::vector< Individual * > individuals_
Definition: Group.h:75
bool hasSequenceData() const
Tell if at least one individual has at least one sequence.
Definition: Group.cpp:576
void setIndividualLocalityAtPosition(size_t individual_position, const Locality< double > *locality)
Set the locality of an Individual.
Definition: Group.cpp:282
void setIndividualCoordAtPosition(size_t individual_position, const Point2D< double > &coord)
Set the coordinates of an Individual.
Definition: Group.cpp:261
const Sequence & getIndividualSequenceByName(size_t individual_position, const std::string &sequence_name) const
Get a sequence of an Individual.
Definition: Group.cpp:325
void setIndividualMonolocusGenotypeByAlleleId(size_t individual_position, size_t locus_position, const std::vector< std::string > &allele_id, const LocusInfo &locus_info)
Set a MonolocusGenotype of an Individual.
Definition: Group.cpp:536
void setIndividualMonolocusGenotypeByAlleleKey(size_t individual_position, size_t locus_position, const std::vector< size_t > &allele_keys)
Set a MonolocusGenotype of an Individual.
Definition: Group.cpp:514
std::vector< std::string > getIndividualSequencesNames(size_t individual_position) const
Get the sequences' names from an Individual.
Definition: Group.cpp:404
size_t getMaxNumberOfSequences() const
Get the maximum number of sequence.
Definition: Group.cpp:209
std::string name_
Definition: Group.h:74
size_t id_
Definition: Group.h:73
const Locality< double > & getIndividualLocalityAtPosition(size_t individual_position) const
Get the locality of an Individual.
Definition: Group.cpp:289
const Individual & getIndividualAtPosition(size_t individual_position) const
Get a reference to an Individual by its position.
Definition: Group.cpp:197
void initIndividualGenotype(size_t individual_position, size_t loci_number)
Initialyze the genotype of an Individual.
Definition: Group.cpp:464
void clear()
Clear the Group.
Definition: Group.cpp:178
size_t getIndividualNumberOfSequences(size_t individual_position) const
Get the number of sequences in an Individual.
Definition: Group.cpp:436
size_t getGroupSizeForLocus(size_t locus_position) const
Get the number of individual that have a data at the specified locus.
Definition: Group.cpp:596
const Individual & getIndividualById(const std::string &individual_id) const
Get a reference to an Individual.
Definition: Group.cpp:187
const Sequence & getIndividualSequenceAtPosition(size_t individual_position, size_t sequence_position) const
Get a sequence of an Individual.
Definition: Group.cpp:343
std::unique_ptr< Individual > removeIndividualById(const std::string &individual_id)
Remove an Individual from the Group.
Definition: Group.cpp:130
void deleteIndividualAtPosition(size_t individual_position)
Delete an Individual from the Group.
Definition: Group.cpp:166
void setIndividualMonolocusGenotype(size_t individual_position, size_t locus_position, const MonolocusGenotype &monogen)
Set a MonolocusGenotype of an Individual.
Definition: Group.cpp:496
void addIndividualSequenceAtPosition(size_t individual_position, size_t sequence_position, const Sequence &sequence)
Add a sequence to an Individual.
Definition: Group.cpp:303
size_t getIndividualSequencePosition(size_t individual_position, const std::string &sequence_name) const
Get the position of a sequence in an Individual.
Definition: Group.cpp:418
size_t getGroupSizeForSequence(size_t sequence_position) const
Get the number of individual that have a sequence at the specified position.
Definition: Group.cpp:607
void deleteIndividualGenotype(size_t individual_position)
Delete the genotype of an Individual.
Definition: Group.cpp:482
const Point2D< double > & getIndividualCoordAtPosition(size_t individual_position) const
Get the coordinates of an Individual.
Definition: Group.cpp:268
size_t getIndividualPosition(const std::string &individual_id) const
Get the position of an Individual.
Definition: Group.cpp:120
void setIndividualSexAtPosition(size_t individual_position, const unsigned short sex)
Set the sex of an Individual.
Definition: Group.cpp:226
const std::string & getGroupName() const
Get the name of the Group.
Definition: Group.h:120
Group(size_t group_id)
Build a void new Group.
Definition: Group.cpp:47
~Group()
Destroy an Group.
Definition: Group.cpp:74
const MonolocusGenotype & getIndividualMonolocusGenotype(size_t individual_position, size_t locus_position) const
Get a MonolocusGenotype of an Individual.
Definition: Group.cpp:558
The Individual class.
Definition: Individual.h:76
The LocusInfo class.
Definition: LocusInfo.h:64
The MonolocusGenotype virtual class.
The MultilocusGenotype class.