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
34
#include "
genesis/population/sample_counts.hpp
"
35
#include "
genesis/population/filter/filter_status.hpp
"
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
76
FilterStatus
status
;
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
lib
genesis
population
variant.hpp
Generated on Mon Aug 5 2024 16:57:53 for genesis by
1.8.17