private static Ab1Metadata GetAb1Metadata(IParserContext context) { var metadata = new Ab1Metadata(); LoadPeakLocations(metadata, context); LoadSequenceConfidence(metadata, context); LoadColorWheelData(metadata, context); return metadata; }
private static void LoadPeakLocations(Ab1Metadata metadata, IParserContext context) { metadata.PeakLocations = ((ShortDataItem)context .DataItems .First(item => item.Entry.TagName == Constants.PeakLocationTagName)).Value; }
private static void LoadPeakLocations(Ab1Metadata metadata, IParserContext context) { metadata.PeakLocations = ((ShortDataItem)context .DataItems .First(item => item.Entry.TagName == Constants.PeakLocationTagName)).Value; }
/// <summary> /// Converts the parsed ab1 raw data file into a sequence, with the associated ab1 metadata setup. I use /// this method because only a subset of the data is needed so there is no point in persisting a large amount /// of unused metadata. /// </summary> /// <param name="context"></param> /// <returns></returns> public static ISequence Convert(IParserContext context) { ISequence sequence = GetSequence(context); Ab1Metadata metadata = GetAb1Metadata(context); Ab1Metadata.SetAb1Data(sequence, metadata); return(sequence); }
private static Ab1Metadata GetAb1Metadata(IParserContext context) { var metadata = new Ab1Metadata(); LoadPeakLocations(metadata, context); LoadSequenceConfidence(metadata, context); LoadColorWheelData(metadata, context); return(metadata); }
private static void LoadSequenceConfidence(Ab1Metadata metadata, IParserContext context) { metadata.ConfidenceData = (from c in ((CharDataItem)context .DataItems .First(item => item.Entry.TagName == Constants.SequenceConfidanceTagName)).Value select(short) c).ToArray(); }
private static void LoadColorWheelData(Ab1Metadata metadata, IParserContext context) { List<KeyValuePair<byte, int>> nucleotideIndices = GetNucleotideDataIndex(context); IEnumerable<ShortDataItem> dataItems = context.DataItems.OfType<ShortDataItem>(); nucleotideIndices.ForEach( pair => { ShortDataItem item = dataItems.First(i => i.Entry.TagNumber == pair.Value && i.Entry.TagName == Constants.DataTagName); metadata.SetColorData( pair.Key, new Ab1ColorData(metadata.PeakLocations, item.Value)); }); }
/// <summary> /// Sets ab1 metadata on a sequence. /// </summary> /// <param name="sequence"></param> /// <param name="metadata"></param> public static void SetAb1Data(ISequence sequence, Ab1Metadata metadata) { if (sequence == null) { throw new ArgumentNullException("sequence"); } if (sequence.Metadata.ContainsKey(MetadataKey)) { sequence.Metadata[MetadataKey] = metadata; } else { sequence.Metadata.Add(MetadataKey, metadata); } }
private static void LoadColorWheelData(Ab1Metadata metadata, IParserContext context) { List <KeyValuePair <byte, int> > nucleotideIndices = GetNucleotideDataIndex(context); IEnumerable <ShortDataItem> dataItems = context.DataItems.OfType <ShortDataItem>(); nucleotideIndices.ForEach( pair => { ShortDataItem item = dataItems.First(i => i.Entry.TagNumber == pair.Value && i.Entry.TagName == Constants.DataTagName); metadata.SetColorData( pair.Key, new Ab1ColorData(metadata.PeakLocations, item.Value)); }); }
public void TestColorDataTrim() { const int dataCount = 40; // 10 points var confidence = new short[] {22, 31, 50, 1, 61, 22, 10, 19, 23, 10}; var peakLocations = new short[] {2, 5, 9, 12, 15, 22, 26, 32, 35, 38}; short[] aData = GetTestData(dataCount).ToArray(); short[] cData = GetTestData(dataCount).ToArray(); short[] tData = GetTestData(dataCount).ToArray(); short[] gData = GetTestData(dataCount).ToArray(); var data = new Ab1Metadata {ConfidenceData = confidence.ToArray(), PeakLocations = peakLocations.ToArray()}; data.SetColorData(Alphabets.DNA.A, new Ab1ColorData(peakLocations, aData)); data.SetColorData(Alphabets.DNA.T, new Ab1ColorData(peakLocations, tData)); data.SetColorData(Alphabets.DNA.C, new Ab1ColorData(peakLocations, cData)); data.SetColorData(Alphabets.DNA.G, new Ab1ColorData(peakLocations, gData)); const int segmentStartIndex = 3; const int segmentLength = 5; data.Trim(segmentStartIndex, segmentLength); var newPeakLocations = new List<short> {1, 4, 11, 15, 21}; Assert.AreEqual(segmentLength, data.ConfidenceData.Length); Assert.AreEqual(segmentLength, data.PeakLocations.Length); AssertAreEqual(confidence.GetRange(segmentStartIndex, segmentLength), data.ConfidenceData.ToList()); AssertAreEqual(newPeakLocations, data.PeakLocations.ToList()); data.AllColorData() .ToList().ForEach(colorData => { Assert.AreEqual(segmentLength, colorData.DataByResidue.Count); int offset = 0; for (int i = 0; i < colorData.DataByResidue.Count; i++) { Assert.AreEqual(newPeakLocations[i], colorData.DataByResidue[i].PeakIndex + offset); offset += colorData.DataByResidue[i].Data.Length; } }); }
private static void LoadSequenceConfidence(Ab1Metadata metadata, IParserContext context) { metadata.ConfidenceData = ((CharDataItem)context.DataItems.First(item => item.Entry.TagName == Constants.SequenceConfidanceTagName)).Value.Select(c => (short)c).ToArray(); }
/// <summary> /// Sets ab1 metadata on a sequence. /// </summary> /// <param name="sequence"></param> /// <param name="metadata"></param> public static void SetAb1Data(ISequence sequence, Ab1Metadata metadata) { if (sequence == null) throw new ArgumentNullException("sequence"); if (sequence.Metadata.ContainsKey(MetadataKey)) sequence.Metadata[MetadataKey] = metadata; else sequence.Metadata.Add(MetadataKey, metadata); }