comparison egglib/egglib-2.1.5/include/egglib-cpp/DataMatrix.hpp @ 1:420b57c3c185 draft

Uploaded
author dereeper
date Fri, 10 Jul 2015 04:39:30 -0400
parents
children
comparison
equal deleted inserted replaced
0:3e19d0dfcf3e 1:420b57c3c185
1 /*
2 Copyright 2009-2010 Stéphane De Mita, Mathieu Siol
3
4 This file is part of the EggLib library.
5
6 EggLib is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 3 of the License, or
9 (at your option) any later version.
10
11 EggLib is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with EggLib. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20 #ifndef EGGLIB_DATAMATRIX_HPP
21 #define EGGLIB_DATAMATRIX_HPP
22
23
24 #include "CharMatrix.hpp"
25
26
27 namespace egglib {
28
29 /** \brief Data table
30 *
31 * \ingroup core
32 *
33 * Holds a data matrix representing genotype data from simulations.
34 * Data are stored as integers, to each site is associated a
35 * position, and to each sequence is associated a group index (any
36 * integer labelling, for example, a subpopulation). Supports the
37 * CharMatrix interface with the condition that allele genotype
38 * datum is >=0 and <=9.
39 *
40 */
41 class DataMatrix : public CharMatrix {
42
43 public:
44
45 /** \brief Default constructor
46 *
47 * The data table default dimensions are {0,0}
48 *
49 */
50 DataMatrix();
51
52
53 /** \brief Standard constructor
54 *
55 * The data table dimensions must be given.
56 * Each cell default default is 0, and each site position is 0..
57 *
58 * \param numberOfSequences number of lines of the data table.
59 * \param numberOfSites number of columns of the data table.
60 *
61 */
62 DataMatrix(unsigned int numberOfSequences, unsigned int numberOfSites);
63
64
65 /** \brief Copy constructor
66 *
67 */
68 DataMatrix(const DataMatrix&);
69
70
71 /** \brief Copy constructor
72 *
73 */
74 DataMatrix(const CharMatrix&);
75
76
77 /** \brief Assignment operator
78 *
79 */
80 virtual DataMatrix& operator=(const DataMatrix&);
81
82
83 /** \brief Assignment operator
84 *
85 */
86 virtual DataMatrix& operator=(const CharMatrix&);
87
88
89 /** \brief Destructor
90 *
91 */
92 virtual ~DataMatrix();
93
94
95 /** \brief Gets number of sites
96 *
97 */
98 unsigned int numberOfSites() const;
99
100
101 /** \brief Gets number of sequences
102 *
103 */
104 unsigned int numberOfSequences() const;
105
106
107 /** \brief Sets a value of the data table
108 *
109 */
110 void set(unsigned int sequence, unsigned int site, int value);
111
112
113 /** \brief Gets a value from the data table
114 *
115 */
116 int get(unsigned int sequence, unsigned int site) const;
117
118
119 /** \brief Faster and unsecure version of get
120 *
121 */
122 inline int fget(unsigned int sequence, unsigned int site) const {
123 return dataMatrix[sequence][site];
124 }
125
126
127 /** \brief Sets the position of a site
128 *
129 */
130 void sitePosition(unsigned int site, double value);
131
132
133 /** \brief Gets the position of a site
134 *
135 */
136 double sitePosition(unsigned int site) const;
137
138
139 /** \brief Sets the group label of a sequence
140 *
141 */
142 void populationLabel(unsigned int sequence, unsigned int value);
143
144
145 /** \brief Gets the group label of a sequence
146 *
147 */
148 unsigned int populationLabel(unsigned int sequence) const;
149
150
151 /** \brief Removes all information from the object
152 *
153 */
154 void clear();
155
156
157 /** \brief Resizes the data matrix
158 *
159 * \param newNumberOfSequences number of sequences (rows)
160 * \param newNumberOfSites number of sites (columns)
161 *
162 * If new values are larger, data already set is left unchanged.
163 * New data are set to zero.
164 *
165 */
166 void resize(unsigned int newNumberOfSequences, unsigned int newNumberOfSites);
167
168
169 /** \brief Shifts allele value
170 *
171 * \param minimum the minimum allele value.
172 *
173 * Shifts all alleles at all sites to ensure that alleles alleles
174 * are equal to or larger than minimum. The shifting is specific
175 * to each site.
176 *
177 */
178 void shift(int minimum);
179
180 /** \brief Gets the character at a given position
181 *
182 * An exception is generated if the allele value at this
183 * position is not >=0 and <=9. Not out-of-bound check is
184 * performed.
185 *
186 */
187 char character(unsigned int sequence, unsigned int site) const;
188
189
190
191 private:
192
193 // Initializes to default values (for empty object)
194 void init();
195
196 // Copies from a source object
197 virtual void copy(const CharMatrix&);
198
199 // Copies from a source object
200 virtual void copy(const DataMatrix&);
201
202 // Number of lines of the data matrix
203 unsigned int _numberOfSequences;
204
205 // Number of columns of the data matrix
206 unsigned int _numberOfSites;
207
208 // Data matrix
209 int **dataMatrix;
210
211 // Vector of site positions
212 double *positions;
213
214 // Vector of group indices
215 unsigned int *groups;
216 };
217 }
218
219 #endif