Minimac4
Loading...
Searching...
No Matches
recombination.hpp
Go to the documentation of this file.
1#ifndef MINIMAC4_RECOMBINATION_HPP
2#define MINIMAC4_RECOMBINATION_HPP
3
4#include "variant.hpp"
5
6#include <shrinkwrap/istream.hpp>
7
8#include <string>
9#include <vector>
10#include <cstdint>
11#include <algorithm>
12#include <cmath>
13
45{
46public:
47 //static constexpr float recom_min = 1e-5f;
48//private:
49
57 {
59 std::string chrom;
60
62 std::size_t pos = 0;
63
65 float map_value = 0.;
66 };
67public:
103 static bool parse_map_file(const std::string& map_file_path, std::vector<target_variant>& sites, float recom_min);
104
119 static double haldane(double cm) { return (1. - std::exp(-cm/50.))/2.;}
120
131 static double cm_to_switch_prob(double cm) { return 1. - std::exp(-cm/100.);}
132
145 static double cm_to_switch_prob(double cm, double decay_rate) { return 1. - std::exp(-decay_rate * cm/100.);}
146
160 static double haldane_inverse(double recom_prob) { return 50. * std::log(1. / (1. - 2. * recom_prob)); }
161
173 static double switch_prob_to_cm(double recom_prob) { return 100. * std::log(1. / (1. - recom_prob)); }
174
175private:
192 static bool read_entry(std::istream& ifs, map_file_line& entry, bool new_format);
193};
194
211{
212public:
218 struct record
219 {
220 std::string chrom;
221 std::size_t pos = 0;
222 double map_value = 0.;
223 };
224private:
225 shrinkwrap::istream ifs_;
226 std::string target_chrom_;
227 record prev_rec_;
228 record cur_rec_;
229 bool good_;
230 bool new_format_;
231public:
264 genetic_map_file(const std::string& map_file_path, const std::string& chrom);
265
266
275 bool good() const { return good_; }
276
295 operator bool() const { return good_; }
296
326 double interpolate_centimorgan(std::size_t variant_pos);
327private:
328
347 bool read_record(record& rec);
348};
349
350#endif // MINIMAC4_RECOMBINATION_HPP
bool good() const
Check whether the genetic map file was loaded successfully.
Definition recombination.hpp:275
genetic_map_file(const std::string &map_file_path, const std::string &chrom)
Constructs a genetic_map_file object for reading recombination map data.
Definition recombination.cpp:119
double interpolate_centimorgan(std::size_t variant_pos)
Interpolate the genetic map position (in centimorgans) for a variant.
Definition recombination.cpp:155
Provides utilities for handling recombination rates and genetic maps.
Definition recombination.hpp:45
static bool parse_map_file(const std::string &map_file_path, std::vector< target_variant > &sites, float recom_min)
Parse and align a genetic recombination map file to a set of target variants.
Definition recombination.cpp:9
static double haldane(double cm)
Haldane’s mapping function.
Definition recombination.hpp:119
static double cm_to_switch_prob(double cm, double decay_rate)
Convert genetic distance to switch probability with a custom decay rate.
Definition recombination.hpp:145
static double haldane_inverse(double recom_prob)
Inverse Haldane’s mapping function.
Definition recombination.hpp:160
static double switch_prob_to_cm(double recom_prob)
Convert switch probability to genetic distance.
Definition recombination.hpp:173
static double cm_to_switch_prob(double cm)
Convert genetic distance to switch probability (default decay rate).
Definition recombination.hpp:131
A single line entry from the genetic map file.
Definition recombination.hpp:219
std::size_t pos
Basepair position on the chromosome.
Definition recombination.hpp:221
double map_value
Genetic distance (in centimorgans).
Definition recombination.hpp:222
std::string chrom
Chromosome identifier (e.g., "1", "chrX").
Definition recombination.hpp:220
Representation of a single line from a genetic map file.
Definition recombination.hpp:57
std::string chrom
Chromosome identifier (e.g., "1", "chrX").
Definition recombination.hpp:59
float map_value
Genetic map value at the position (in centiMorgans).
Definition recombination.hpp:65
std::size_t pos
Base-pair position on the chromosome.
Definition recombination.hpp:62