[go: up one dir, main page]

File: Contamination.cpp

package info (click to toggle)
freebayes 1.3.9-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 6,984 kB
  • sloc: cpp: 125,778; ansic: 4,581; sh: 1,084; python: 672; asm: 271; javascript: 94; lisp: 85; makefile: 37; perl: 27
file content (71 lines) | stat: -rw-r--r-- 1,950 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include "Contamination.h"
#include <smithwaterman/convert.h>

void Contamination::open(string& file) {

    ifstream input;
    input.open(file.c_str());
    if (!input.is_open()) {
        cerr << "contamination estimates file " << file << " is not open" << endl;
        exit(1);
    }

    string line;
    int last;
    while (std::getline(input, line)) {
        vector<string> fields = split(line, " \t");
        if (fields.size() != 3) {
            cerr << "could not parse contamination estimate:" << endl
                 << line << endl
                 << "should be of the form:" << endl
                 << "sample p(read=R|genotype=AR) p(read=A|genotype=AA)" << endl;
            exit(1);
        }
        string sample = fields[0];
        ContaminationEstimate c;
        convert(fields[1], c.probRefGivenHet);
        convert(fields[2], c.probRefGivenHomAlt);
        if (sample == "*") { // default
            defaultEstimate = c;
        } else {
            insert(make_pair(sample, c));
        }
    }
    input.close();
}

double Contamination::probRefGivenHet(string& sample) {
    Contamination::iterator s = find(sample);
    if (s != end()) {
        return s->second.probRefGivenHet;
    } else {
        return defaultEstimate.probRefGivenHet;
    }
}

double Contamination::probRefGivenHomAlt(string& sample) {
    Contamination::iterator s = find(sample);
    if (s != end()) {
        return s->second.probRefGivenHomAlt;
    } else {
        return defaultEstimate.probRefGivenHomAlt;
    }
}

double Contamination::refBias(string& sample) {
    Contamination::iterator s = find(sample);
    if (s != end()) {
        return s->second.refBias;
    } else {
        return defaultEstimate.refBias;
    }
}

ContaminationEstimate& Contamination::of(string& sample) {
    Contamination::iterator s = find(sample);
    if (s != end()) {
        return s->second;
    } else {
        return defaultEstimate;
    }
}