A library for working with phylogenetic and population genetic data.
v0.32.0
variant.hpp
Go to the documentation of this file.
1 #ifndef GENESIS_POPULATION_VARIANT_H_
2 #define GENESIS_POPULATION_VARIANT_H_
3 
4 /*
5  Genesis - A toolkit for working with phylogenetic data.
6  Copyright (C) 2014-2024 Lucas Czech
7 
8  This program is free software: you can redistribute it and/or modify
9  it under the terms of the GNU General Public License as published by
10  the Free Software Foundation, either version 3 of the License, or
11  (at your option) any later version.
12 
13  This program is distributed in the hope that it will be useful,
14  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  GNU General Public License for more details.
17 
18  You should have received a copy of the GNU General Public License
19  along with this program. If not, see <http://www.gnu.org/licenses/>.
20 
21  Contact:
22  Lucas Czech <lczech@carnegiescience.edu>
23  Department of Plant Biology, Carnegie Institution For Science
24  260 Panama Street, Stanford, CA 94305, USA
25 */
26 
36 
37 #include <string>
38 #include <vector>
39 
40 namespace genesis {
41 namespace population {
42 
43 // =================================================================================================
44 // Variant
45 // =================================================================================================
46 
65 struct Variant
66 {
67  // Internal memory layout: The status is 4 bytes, which we put next to the two one-byte members,
68  // so that we do not get extra alignment padding here, to keep the data structure small.
69  // Unfortunately, in release buiild, we are still a bit bigger than a cache line of 64 byte,
70  // but short of making position a 32 bit number, there is nothing we can do about that.
71  // Not sure if that would improve performance in our case anyway. Could be tested.
72 
73  std::string chromosome;
74  size_t position = 0;
75 
77  static_assert( sizeof(FilterStatus) == 4, "sizeof(FilterStatus) != 4" );
78 
79  char reference_base = 'N';
80  char alternative_base = 'N';
81 
82  std::vector<SampleCounts> samples;
83 };
84 
85 } // namespace population
86 } // namespace genesis
87 
88 #endif // include guard
genesis::population::Variant::position
size_t position
Definition: variant.hpp:74
genesis::population::FilterStatus
Tag class to assign a filter status to a Variant or SampleCounts.
Definition: filter_status.hpp:65
genesis::population::Variant::reference_base
char reference_base
Definition: variant.hpp:79
sample_counts.hpp
filter_status.hpp
genesis::population::Variant
A single variant at a position in a chromosome, along with SampleCounts for a set of samples.
Definition: variant.hpp:65
genesis
Container namespace for all symbols of genesis in order to keep them separate when used as a library.
Definition: placement/formats/edge_color.cpp:42
genesis::population::Variant::samples
std::vector< SampleCounts > samples
Definition: variant.hpp:82
genesis::population::Variant::alternative_base
char alternative_base
Definition: variant.hpp:80
genesis::population::Variant::status
FilterStatus status
Definition: variant.hpp:76
genesis::population::Variant::chromosome
std::string chromosome
Definition: variant.hpp:73