/// <summary> /// Copy all of the values for this builder from Genotype g /// </summary> /// <param name="g"></param> /// <returns></returns> /// TODO: Why have a copy on a builder? Either implement ICloneable or remove this old method. public GenotypeBuilder copy(Genotype g) { SampleName = g.SampleName; Alleles = g.Alleles.ToList(); Phased = g.Phased; GQ = g.GQ; DP = g.DP; AD = g.AD; PL = g.PL; Filter = g.Filters; AddAttributes(g.ExtendedAttributes); return(this); }
public override int[] getValues(Genotype g) { return(g.PL); }
public override int getValue(Genotype g) { return(g.DP); }
public override int getValue(Genotype g) { return(Math.Min(g.GQ, VCFConstants.MAX_GENOTYPE_QUAL)); }
public abstract int getValue(Genotype g);
public override int[] getValues(Genotype g) { singleton[0] = getValue(g); return(singleton[0] == -1 ? null : singleton); }
public int getSize(Genotype g) { int[] v = getValues(g); return(v == null ? 0 : v.Length); }
public abstract int[] getValues(Genotype g);
public double getLog10GQ(Genotype genotype, VariantContext context) { return(getLog10GQ(genotype, context.Alleles)); }
public double getLog10GQ(Genotype genotype, IList <Allele> vcAlleles) { return(getLog10GQ(genotype.Alleles, vcAlleles)); }
/// <summary> /// add the genotype data /// </summary> /// <param name="vc"> the variant context </param> /// <param name="genotypeFormatKeys"> Genotype formatting string </param> /// <param name="alleleMap"> alleles for this context </param> /// <exception cref="IOException"> for writer </exception> private string getGenotypeDataText(VariantContext vc, IDictionary <Allele, string> alleleMap, IList <string> genotypeFormatKeys) { StringBuilder sbn = new StringBuilder(); int ploidy = vc.GetMaxPloidy(2); foreach (string sample in mHeader.GenotypeSampleNames) { sbn.Append(VCFConstants.FIELD_SEPARATOR); Genotype g = vc.GetGenotype(sample); if (g == null) { g = GenotypeBuilder.CreateMissing(sample, ploidy); } IList <string> attrs = new List <string>(genotypeFormatKeys.Count); foreach (string field in genotypeFormatKeys) { if (field.Equals(VCFConstants.GENOTYPE_KEY)) { if (!g.Available) { throw new Exception("GTs cannot be missing for some samples if they are available for others in the record"); } sbn.Append(getAlleleText(g.getAllele(0), alleleMap)); for (int i = 1; i < g.Ploidy; i++) { sbn.Append(g.Phased ? VCFConstants.PHASED : VCFConstants.UNPHASED); sbn.Append(getAlleleText(g.getAllele(i), alleleMap)); } continue; } else { string outputValue; if (field.Equals(VCFConstants.GENOTYPE_FILTER_KEY)) { outputValue = g.Filtered ? g.Filters : VCFConstants.PASSES_FILTERS_v4; } else { IntGenotypeFieldAccessors.Accessor accessor = intGenotypeFieldAccessors.GetAccessor(field); if (accessor != null) { int[] intValues = accessor.getValues(g); if (intValues == null) { outputValue = VCFConstants.MISSING_VALUE_v4; } else if (intValues.Length == 1) // fast path { outputValue = Convert.ToString(intValues[0]); } else { StringBuilder sb = new StringBuilder(); sb.Append(intValues[0]); for (int i = 1; i < intValues.Length; i++) { sb.Append(","); sb.Append(intValues[i]); } outputValue = sb.ToString(); } } else { object val = g.HasExtendedAttribute(field) ? g.GetExtendedAttribute(field) : VCFConstants.MISSING_VALUE_v4; VCFFormatHeaderLine metaData = mHeader.getFormatHeaderLine(field); if (metaData != null) { int numInFormatField = metaData.getCount(vc); if (numInFormatField > 1 && val.Equals(VCFConstants.MISSING_VALUE_v4)) { // If we have a missing field but multiple values are expected, we need to construct a new string with all fields. // For example, if Number=2, the string has to be ".,." StringBuilder sb = new StringBuilder(VCFConstants.MISSING_VALUE_v4); for (int i = 1; i < numInFormatField; i++) { sb.Append(","); sb.Append(VCFConstants.MISSING_VALUE_v4); } val = sb.ToString(); } } // assume that if key is absent, then the given string encoding suffices outputValue = formatVCFField(val); } } if (outputValue != null) { attrs.Add(outputValue); } } } // strip off trailing missing values for (int i = attrs.Count - 1; i >= 0; i--) { if (isMissingValue(attrs[i])) { attrs.RemoveAt(i); } else { break; } } for (int i = 0; i < attrs.Count; i++) { if (i > 0 || genotypeFormatKeys.Contains(VCFConstants.GENOTYPE_KEY)) { sbn.Append(VCFConstants.GENOTYPE_FIELD_SEPARATOR); } sbn.Append(attrs[i]); } } return(sbn.ToString()); }
/// <summary> /// Create a new builder starting with the values in Genotype g </summary> /// <param name="g"> </param> public GenotypeBuilder(Genotype g) : this() { copy(g); }