public TruthItem(string sampleTruthFile, string sampleId) { SampleId = sampleId; VariantsInfo = new Dictionary <string, TruthVariant>(); using (StreamReader sr = new StreamReader(sampleTruthFile)) { while (true) { string line = sr.ReadLine(); if (string.IsNullOrEmpty(line)) { break; } TruthVariant t = TruthVariant.FromLine(line); string variantPositionId = t.Chr + "_" + t.Pos; //Logger.WriteToLog($"\n read variant truth: {variantPositionId}\n"); if (!t.VariantStatus.Equals("FAIL")) { if (!ValidPositions.ContainsKey(variantPositionId)) { ValidPositions[variantPositionId] = new HashSet <string>() { t.Ref }; } else { ValidPositions[variantPositionId].Add(t.Ref); } if (t.VariantStatus.Equals("PASS")) { if (!PassPositions.ContainsKey(variantPositionId)) { PassPositions[variantPositionId] = true; } if (t.VariantExist) { if (!VariantExistPositions.ContainsKey(variantPositionId)) { VariantExistPositions[variantPositionId] = t.VariantSource; } VariantsInfo.Add(t.VariantId, t); } } } } } NumberOfExistedVariant = VariantExistPositions.Count; NumberOfPassPositions = PassPositions.Count; NumberOfValidPositions = ValidPositions.Count; //note: this is a modification based on our current data and cannot generalized to other cases //when more than one variant exist check if they are caused by the same source if (NumberOfExistedVariant > 1) { HashSet <string> variantSourceHashSet = new HashSet <string>(); foreach (KeyValuePair <string, string> kvp in VariantExistPositions) { variantSourceHashSet.Add(kvp.Value); } NumberOfExistedVariant = variantSourceHashSet.Count; } }