extensions/net.sf.basedb.reggie/trunk/src/net/sf/basedb/reggie/vcf/GenoType.java

Code
Comments
Other
Rev Date Author Line
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 8   Genotype enumeration.
4620 16 Nov 17 nicklas 9   
4620 16 Nov 17 nicklas 10   @author nicklas
4620 16 Nov 17 nicklas 11   @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 17     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 22     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 27     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 36     Parse the string and return the genotype.
7414 10 Nov 23 nicklas 37     The string should be formatted as {digit}{/|}{digit}.
4620 16 Nov 17 nicklas 38     
4620 16 Nov 17 nicklas 39     If both digits are the same, HOM_REF is returned if
4620 16 Nov 17 nicklas 40     the digit is 0, and HOM_ALT if is something else.
4620 16 Nov 17 nicklas 41     
4620 16 Nov 17 nicklas 42     If the digits are different, HET is returned.
4620 16 Nov 17 nicklas 43     
4620 16 Nov 17 nicklas 44     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 }