private static void AddFormatAndSampleColumns(List <int>[] sampleGenoTypes, VariantInfo variantInfo, ref List <string> vcfFields) { var formatTags = "GT"; var hasGq = false; var hasPs = false; int numSamples = sampleGenoTypes.Length; string[] sampleGenotypeStrings = GetSampleGenotypeStrings(sampleGenoTypes, variantInfo, ref hasGq, ref hasPs, numSamples); int numFields = 1; if (hasGq) { formatTags += ":GQ"; numFields++; } if (hasPs) { formatTags += ":PS"; numFields++; } vcfFields.Add(formatTags); for (var index = 0; index < numSamples; index++) { string sampleGenotypeStr = sampleGenotypeStrings[index]; if (sampleGenotypeStr == null || sampleGenotypeStr == ".") { vcfFields.Add("."); } else { var nonMissingFields = new string[numFields]; nonMissingFields[0] = sampleGenotypeStr; var fieldIndex = 1; if (hasGq) { nonMissingFields[fieldIndex] = variantInfo.SampleGqs[index]; fieldIndex++; } if (hasPs) { nonMissingFields[fieldIndex] = variantInfo.SamplePhaseSets[index]; } var sampleColumnStr = string.Join(":", TrimTrailingMissValues(nonMissingFields)); vcfFields.Add(sampleColumnStr); } } }
private string[] GetVcfFields(VariantSite varSite, VariantInfo variantInfo, string altAlleleColumn, List <int>[] sampleGenoTypes, string variantId = VariantId, string info = InfoTag) { var vcfFields = new List <string> { _chrName, varSite.Start.ToString(), variantId, varSite.RefAllele, altAlleleColumn, variantInfo.Qual, variantInfo.GetMnvFilterTag(), info }; AddFormatAndSampleColumns(sampleGenoTypes, variantInfo, ref vcfFields); return(vcfFields.ToArray()); }
private static string[] GetSampleGenotypeStrings(IReadOnlyList <List <int> > sampleGenoTypes, VariantInfo variantInfo, ref bool hasGq, ref bool hasPs, int numSamples) { var sampleGenotypeStrings = new string[numSamples]; for (var index = 0; index < numSamples; index++) { var homoReferenceSamplePloidy = variantInfo.HomoReferenceSamplePloidies[index]; sampleGenotypeStrings[index] = GetGenotype(sampleGenoTypes[index], homoReferenceSamplePloidy); if (sampleGenotypeStrings[index] == ".") { continue; } if (variantInfo.SampleGqs[index] != ".") { hasGq = true; } if (variantInfo.SamplePhaseSets[index] != ".") { hasPs = true; } } return(sampleGenotypeStrings); }