4620 |
16 Nov 17 |
nicklas |
1 |
package net.sf.basedb.reggie.vcf; |
4620 |
16 Nov 17 |
nicklas |
2 |
|
4620 |
16 Nov 17 |
nicklas |
3 |
import java.util.regex.Matcher; |
4620 |
16 Nov 17 |
nicklas |
4 |
import java.util.regex.Pattern; |
4620 |
16 Nov 17 |
nicklas |
5 |
|
4620 |
16 Nov 17 |
nicklas |
6 |
|
4620 |
16 Nov 17 |
nicklas |
7 |
/** |
4620 |
16 Nov 17 |
nicklas |
Genotype enumeration. |
4620 |
16 Nov 17 |
nicklas |
9 |
|
4620 |
16 Nov 17 |
nicklas |
@author nicklas |
4620 |
16 Nov 17 |
nicklas |
@since 4.13 |
4620 |
16 Nov 17 |
nicklas |
12 |
*/ |
4620 |
16 Nov 17 |
nicklas |
13 |
|
4620 |
16 Nov 17 |
nicklas |
14 |
public enum GenoType |
4620 |
16 Nov 17 |
nicklas |
15 |
{ |
4620 |
16 Nov 17 |
nicklas |
16 |
/** |
4620 |
16 Nov 17 |
nicklas |
The genotype is a homozygous reference. |
4620 |
16 Nov 17 |
nicklas |
18 |
*/ |
4620 |
16 Nov 17 |
nicklas |
19 |
HOM_REF, |
4620 |
16 Nov 17 |
nicklas |
20 |
|
4620 |
16 Nov 17 |
nicklas |
21 |
/** |
4620 |
16 Nov 17 |
nicklas |
The genotype is a homozygous alternate. |
4620 |
16 Nov 17 |
nicklas |
23 |
*/ |
4620 |
16 Nov 17 |
nicklas |
24 |
HOM_ALT, |
4620 |
16 Nov 17 |
nicklas |
25 |
|
4620 |
16 Nov 17 |
nicklas |
26 |
/** |
4620 |
16 Nov 17 |
nicklas |
The genotype is heterozygous. |
4620 |
16 Nov 17 |
nicklas |
28 |
*/ |
4620 |
16 Nov 17 |
nicklas |
29 |
HET; |
4620 |
16 Nov 17 |
nicklas |
30 |
|
4620 |
16 Nov 17 |
nicklas |
31 |
|
7414 |
10 Nov 23 |
nicklas |
32 |
private static Pattern gtPattern = Pattern.compile("(\\d)[/|](\\d)"); |
4620 |
16 Nov 17 |
nicklas |
33 |
|
4620 |
16 Nov 17 |
nicklas |
34 |
|
4620 |
16 Nov 17 |
nicklas |
35 |
/** |
4620 |
16 Nov 17 |
nicklas |
Parse the string and return the genotype. |
7414 |
10 Nov 23 |
nicklas |
The string should be formatted as {digit}{/|}{digit}. |
4620 |
16 Nov 17 |
nicklas |
38 |
|
4620 |
16 Nov 17 |
nicklas |
If both digits are the same, HOM_REF is returned if |
4620 |
16 Nov 17 |
nicklas |
the digit is 0, and HOM_ALT if is something else. |
4620 |
16 Nov 17 |
nicklas |
41 |
|
4620 |
16 Nov 17 |
nicklas |
If the digits are different, HET is returned. |
4620 |
16 Nov 17 |
nicklas |
43 |
|
4620 |
16 Nov 17 |
nicklas |
If the string can't be understood, null is returned. |
4620 |
16 Nov 17 |
nicklas |
45 |
*/ |
4620 |
16 Nov 17 |
nicklas |
46 |
public static GenoType fromString(String s) |
4620 |
16 Nov 17 |
nicklas |
47 |
{ |
4620 |
16 Nov 17 |
nicklas |
48 |
if (s == null) return null; |
4620 |
16 Nov 17 |
nicklas |
49 |
Matcher m = gtPattern.matcher(s); |
4620 |
16 Nov 17 |
nicklas |
50 |
|
4620 |
16 Nov 17 |
nicklas |
51 |
if (!m.matches()) return null; |
4620 |
16 Nov 17 |
nicklas |
52 |
|
4620 |
16 Nov 17 |
nicklas |
53 |
String s1 = m.group(1); |
4620 |
16 Nov 17 |
nicklas |
54 |
String s2 = m.group(2); |
4620 |
16 Nov 17 |
nicklas |
55 |
|
4620 |
16 Nov 17 |
nicklas |
56 |
GenoType gt = null; |
4620 |
16 Nov 17 |
nicklas |
57 |
|
4620 |
16 Nov 17 |
nicklas |
58 |
if (s1.equals(s2)) |
4620 |
16 Nov 17 |
nicklas |
59 |
{ |
4620 |
16 Nov 17 |
nicklas |
60 |
gt = s1.equals("0") ? HOM_REF : HOM_ALT; |
4620 |
16 Nov 17 |
nicklas |
61 |
} |
4620 |
16 Nov 17 |
nicklas |
62 |
else |
4620 |
16 Nov 17 |
nicklas |
63 |
{ |
4620 |
16 Nov 17 |
nicklas |
64 |
gt = HET; |
4620 |
16 Nov 17 |
nicklas |
65 |
} |
4620 |
16 Nov 17 |
nicklas |
66 |
|
4620 |
16 Nov 17 |
nicklas |
67 |
return gt; |
4620 |
16 Nov 17 |
nicklas |
68 |
} |
4620 |
16 Nov 17 |
nicklas |
69 |
|
4620 |
16 Nov 17 |
nicklas |
70 |
} |