/// <summary> /// Compare two sequence ranges. /// </summary> /// <param name="nodeName">Xml Node name for different inputs.</param> static void ValidateCompareTwoSequenceRanges(string nodeName) { // Get values from xml. string expectedRangeID = Utility._xmlUtil.GetTextValue( nodeName, Constants.IDNode); string expectedStartIndex = Utility._xmlUtil.GetTextValue( nodeName, Constants.StartNode); string expectedEndIndex = Utility._xmlUtil.GetTextValue( nodeName, Constants.EndNode); string expectedRangeID1 = Utility._xmlUtil.GetTextValue( nodeName, Constants.IDNode1); string expectedStartIndex1 = Utility._xmlUtil.GetTextValue( nodeName, Constants.StartNode1); string expectedEndIndex1 = Utility._xmlUtil.GetTextValue( nodeName, Constants.EndNode1); string expectedResults = Utility._xmlUtil.GetTextValue( nodeName, Constants.ComparisonResult); // Create first SequenceRange. SequenceRange seqRange = new SequenceRange(expectedRangeID, long.Parse(expectedStartIndex), long.Parse(expectedEndIndex)); // Create second SequenceRange. SequenceRange secondSeqRange = new SequenceRange(expectedRangeID1, long.Parse(expectedStartIndex1), long.Parse(expectedEndIndex1)); // Compare two SequenceRanges which are identical. int result = seqRange.CompareTo(secondSeqRange); // Validate result of comparison. Assert.AreEqual(Convert.ToInt32(expectedResults), result); Console.WriteLine("SequenceRange P1 : Successfully validated the SequenceRange comparison"); }
public void From_first_to_accepts_upper_bound_and_uses_first_as_lower() { var r = SequenceRange.FirstTo(Sequence.First.Add(2)); r.Lower.Should().Be(Sequence.First); r.Upper.Should().Be(Sequence.First.Add(2)); }
public void Range_can_represent_a_sequence_of_one_item() { var r = SequenceRange.From(Sequence.First, Sequence.First); r.Lower.Should().Be(Sequence.First); r.Upper.Should().Be(Sequence.First); }
protected object GenerateId(string sequenceName, Type idType, SqlConnection connection) { lock (Locker) { SequenceRange range; if (!IdGenerator.TryGetValue(sequenceName, out range)) { range = new SequenceRange { AutoRestart = _autoRestart, RangeSize = _rangeSize }; IdGenerator.Add(sequenceName, range); } if (range.Current == -1) { ReserveRange(sequenceName, _rangeSize, connection, range); } if (range.IsExhausted) { range.Current = 0; ReserveRange(sequenceName, _rangeSize, connection, range); } range.Current += range.Increment; return(Convert.ChangeType(range.Current, idType)); } }
public void ValidateSequenceRangeToString() { var range = new SequenceRange("chr20", 0, 3); string actualString = range.ToString(); Assert.AreEqual("ID=chr20 Start=0 End=3", actualString); }
public void ValidateCompareTwoSequenceRanges() { // Get values from xml. string expectedRangeID = utilityObj.xmlUtil.GetTextValue( Constants.SequenceRangeNode, Constants.IDNode); string expectedStartIndex = utilityObj.xmlUtil.GetTextValue( Constants.SequenceRangeNode, Constants.StartNode); string expectedEndIndex = utilityObj.xmlUtil.GetTextValue( Constants.SequenceRangeNode, Constants.EndNode); string expectedRangeID1 = utilityObj.xmlUtil.GetTextValue( Constants.SequenceRangeNode, Constants.IDNode1); string expectedStartIndex1 = utilityObj.xmlUtil.GetTextValue( Constants.SequenceRangeNode, Constants.StartNode1); string expectedEndIndex1 = utilityObj.xmlUtil.GetTextValue( Constants.SequenceRangeNode, Constants.EndNode1); // Create first SequenceRange. SequenceRange seqRange = new SequenceRange(expectedRangeID, long.Parse(expectedStartIndex, (IFormatProvider)null), long.Parse(expectedEndIndex, (IFormatProvider)null)); // Create second SequenceRange. SequenceRange secondSeqRange = new SequenceRange(expectedRangeID1, long.Parse(expectedStartIndex1, (IFormatProvider)null), long.Parse(expectedEndIndex1, (IFormatProvider)null)); // Compare two SequenceRanges which are identical. int result = seqRange.CompareTo(secondSeqRange); // Validate result of comparison. Assert.AreEqual(0, result); Console.WriteLine( "SequenceRange BVT : Successfully validated the SequenceRange comparison"); }
/// <summary> /// Create a SequenceRangeGrouping by passing RangeID,Start and End Index. /// and validate created SequenceRange. /// </summary> /// <param name="nodeName">Xml Node name for different inputs.</param> static void CreateSequenceRangeGrouping(string nodeName) { // Get values from xml. string expectedRangeIDs = Utility._xmlUtil.GetTextValue( nodeName, Constants.IDNode); string expectedStartIndex = Utility._xmlUtil.GetTextValue( nodeName, Constants.StartNode); string expectedEndIndex = Utility._xmlUtil.GetTextValue( nodeName, Constants.EndNode); string expectedSequenceRangeCount = Utility._xmlUtil.GetTextValue( nodeName, Constants.SequenceRangeCountNode); string actualRangeStarts = string.Empty; string actualRangeEnds = string.Empty; string actualRangeIDs = string.Empty; string[] rangeIDs = expectedRangeIDs.Split(','); string[] rangeStarts = expectedStartIndex.Split(','); string[] rangeEnds = expectedEndIndex.Split(','); SequenceRangeGrouping seqRangeGrouping = new SequenceRangeGrouping(); List <ISequenceRange> rangeList = null; // Create a SequenceRange and add to SequenceRangeList. for (int i = 0; i < rangeIDs.Length; i++) { SequenceRange seqRange = new SequenceRange(rangeIDs[i], long.Parse(rangeStarts[i]), long.Parse(rangeEnds[i])); seqRangeGrouping.Add(seqRange); } IEnumerable <string> rangeGroupIds = seqRangeGrouping.GroupIDs; string rangeID = string.Empty; foreach (string groupID in rangeGroupIds) { rangeID = groupID; // Get SequenceRangeIds. rangeList = seqRangeGrouping.GetGroup(rangeID); // Validate created SequenceRanges. foreach (ISequenceRange seqRange in rangeList) { actualRangeIDs = string.Concat(actualRangeIDs, seqRange.ID.ToString(), ","); actualRangeStarts = string.Concat(actualRangeStarts, seqRange.Start.ToString(), ","); actualRangeEnds = string.Concat(actualRangeEnds, seqRange.End.ToString(), ","); } } Assert.AreEqual(expectedSequenceRangeCount, rangeList.Count.ToString()); Assert.AreEqual(expectedRangeIDs, actualRangeIDs.Substring(0, actualRangeIDs.Length - 1)); Assert.AreEqual(expectedStartIndex, actualRangeStarts.Substring(0, actualRangeStarts.Length - 1)); Assert.AreEqual(expectedEndIndex, actualRangeEnds.Substring(0, actualRangeEnds.Length - 1)); Console.WriteLine( "SequenceRange BVT : Successfully validated the SequenceStart, SequenceID and SequenceEnd."); }
public bool EvaluateRange(SequenceRange range) { bool result = SequenceStates.Any(s => s.Name == range.Name && s.Counter >= range.MinCounter && s.Counter <= range.MaxCounter); return(result); }
public void TestSequenceRangeToString() { SequenceRange range = new SequenceRange("chr20", 0, 3); string actualString = range.ToString(); string expectedString = "ID=chr20 Start=0 End=3"; Assert.AreEqual(actualString, expectedString); }
public void Can_determine_if_sequence_is_in_range() { var r = SequenceRange.From(Sequence.First, Sequence.First.Add(2)); r.Includes(Sequence.First).Should().BeTrue(); r.Includes(Sequence.First.Add(1)).Should().BeTrue(); r.Includes(Sequence.First.Add(2)).Should().BeTrue(); r.Includes(Sequence.First.Add(3)).Should().BeFalse(); }
public void Range_can_represent_a_sequence_of_many_items() { var lower = Sequence.First; var upper = lower.Add(10); var r = SequenceRange.From(lower, upper); r.Lower.Should().Be(lower); r.Upper.Should().Be(upper); }
// Gets ref seq index. private int GetRefSeqID(string refSeqName) { SequenceRange range = _refSequences.FirstOrDefault(SR => string.Compare(SR.ID, refSeqName, StringComparison.OrdinalIgnoreCase) == 0); if (range == null) { return(-1); } return(_refSequences.IndexOf(range)); }
public void TestSequenceRangeGroupingToString() { ISequenceRange range1 = new SequenceRange("chr20", 0, 3); ISequenceRange range2 = new SequenceRange("chr21", 0, 4); IList <ISequenceRange> ranges = new List <ISequenceRange>(); ranges.Add(range1); ranges.Add(range2); SequenceRangeGrouping rangegrouping = new SequenceRangeGrouping(ranges); string actualString = rangegrouping.ToString(); string expectedString = "ID=chr20 Start=0 End=3\r\nID=chr21 Start=0 End=4\r\n".Replace("\r\n", Environment.NewLine); Assert.AreEqual(actualString, expectedString); }
public void ValidateSequenceRangeGroupingToString() { ISequenceRange range1 = new SequenceRange("chr20", 0, 3); ISequenceRange range2 = new SequenceRange("chr21", 0, 4); IList <ISequenceRange> ranges = new List <ISequenceRange>(); ranges.Add(range1); ranges.Add(range2); var rangegrouping = new SequenceRangeGrouping(ranges); string actualString = rangegrouping.ToString(); string expectedStr = this.utilityObj.xmlUtil.GetTextValue(Constants.ToStringNodeName, Constants.SequenceRangeGroupingExpectedNode); Assert.AreEqual(expectedStr.Replace("\\r\\n", ""), actualString.Replace(System.Environment.NewLine, "")); }
public void ValidateSequenceRange() { // Get values from xml. string expectedRangeId = this.utilityObj.xmlUtil.GetTextValue(Constants.SequenceRangeNode, Constants.IDNode); string expectedStartIndex = this.utilityObj.xmlUtil.GetTextValue(Constants.SequenceRangeNode, Constants.StartNode); string expectedEndIndex = this.utilityObj.xmlUtil.GetTextValue(Constants.SequenceRangeNode, Constants.EndNode); // Create a SequenceRange. var seqRange = new SequenceRange(expectedRangeId, long.Parse(expectedStartIndex, null), long.Parse(expectedEndIndex, null)); // Validate created SequenceRange. Assert.AreEqual(expectedRangeId, seqRange.ID.ToString(null)); Assert.AreEqual(expectedStartIndex, seqRange.Start.ToString((IFormatProvider)null)); Assert.AreEqual(expectedEndIndex, seqRange.End.ToString((IFormatProvider)null)); ApplicationLog.WriteLine("SequenceRange BVT : Successfully validated the SequenceStart,SequenceID and SequenceEnd."); }
public void ValidateFlatten() { // Get values from xml. string expectedRangeIDs = utilityObj.xmlUtil.GetTextValue( Constants.SmallSizeBedNodeName, Constants.IDNode); string expectedStartIndex = utilityObj.xmlUtil.GetTextValue( Constants.SmallSizeBedNodeName, Constants.StartNode); string expectedEndIndex = utilityObj.xmlUtil.GetTextValue( Constants.SmallSizeBedNodeName, Constants.EndNode); string expectedSequenceRangeCount = utilityObj.xmlUtil.GetTextValue( Constants.SmallSizeBedNodeName, Constants.SequenceRangeCountNode); string[] rangeIDs = expectedRangeIDs.Split(','); string[] rangeStarts = expectedStartIndex.Split(','); string[] rangeEnds = expectedEndIndex.Split(','); SequenceRangeGrouping seqRangeGrouping = new SequenceRangeGrouping(); List <ISequenceRange> rangeList = null; // Create a SequenceRange and add to SequenceRangeList. for (int i = 0; i < rangeIDs.Length; i++) { SequenceRange seqRange = new SequenceRange(rangeIDs[i], long.Parse(rangeStarts[i], (IFormatProvider)null), long.Parse(rangeEnds[i], (IFormatProvider)null)); seqRangeGrouping.Add(seqRange); } //Convert SequenceRangeGroup to SequenceRangeList. rangeList = seqRangeGrouping.Flatten(); int j = 0; // Validate created SequenceRanges. foreach (ISequenceRange seqRange in rangeList) { Assert.AreEqual(rangeStarts[j], seqRange.Start.ToString((IFormatProvider)null)); Assert.AreEqual(rangeEnds[j], seqRange.End.ToString((IFormatProvider)null)); Assert.AreEqual(rangeIDs[j], seqRange.ID.ToString((IFormatProvider)null)); j++; } Assert.AreEqual(expectedSequenceRangeCount, rangeList.Count.ToString((IFormatProvider)null)); Console.WriteLine( "SequenceRange BVT : Successfully validated the SequenceStart,SequenceID and SequenceEnd."); }
public void ValidateSequenceRange() { // Get values from xml. string expectedRangeId = this.utilityObj.xmlUtil.GetTextValue(Constants.SequenceRangeNode, Constants.IDNode); string expectedStartIndex = this.utilityObj.xmlUtil.GetTextValue(Constants.SequenceRangeNode, Constants.StartNode); string expectedEndIndex = this.utilityObj.xmlUtil.GetTextValue(Constants.SequenceRangeNode, Constants.EndNode); // Create a SequenceRange. var seqRange = new SequenceRange(expectedRangeId, long.Parse(expectedStartIndex, null), long.Parse(expectedEndIndex, null)); // Validate created SequenceRange. Assert.AreEqual(expectedRangeId, seqRange.ID.ToString(null)); Assert.AreEqual(expectedStartIndex, seqRange.Start.ToString((IFormatProvider) null)); Assert.AreEqual(expectedEndIndex, seqRange.End.ToString((IFormatProvider) null)); ApplicationLog.WriteLine("SequenceRange BVT : Successfully validated the SequenceStart,SequenceID and SequenceEnd."); }
/// <summary> /// 生成下一个序列号 /// </summary> public long NextValue() { // 当前区间不存在,重新获取一个区间 if (null == _currentRange) { lock (_lock) { if (null == _currentRange) { _currentRange = _sequenceRangeManager.NextRange(_name); } } } // 当value值为-1时,表明区间的序列号已经分配完,需要冲洗那获取区间 long value = _currentRange.GetAndIncrement(); if (value == -1) { lock (_lock) { for (; ;) { if (_currentRange.Over) { _currentRange = _sequenceRangeManager.NextRange(_name); } value = _currentRange.GetAndIncrement(); if (value == -1) { continue; } break; } } } if (value < 0) { throw new ArgumentException($"序列值溢出。value = {value}"); } return(value); }
public void Supports_value_equality() { const int lower = 5; const int upper = 10; var r = SequenceRange.From(Sequence.First.Add(lower), Sequence.First.Add(upper)); var same = SequenceRange.From(Sequence.First.Add(lower), Sequence.First.Add(upper)); var toHighUpper = SequenceRange.From(Sequence.First, Sequence.First.Add(upper + 1)); var toHighLower = SequenceRange.From(Sequence.First.Add(lower + 1), Sequence.First.Add(upper)); var toLowLower = SequenceRange.From(Sequence.First.Add(lower - 1), Sequence.First.Add(upper)); var toLowUpper = SequenceRange.From(Sequence.First.Add(lower - 1), Sequence.First.Add(upper)); bool Compare(SequenceRange s) => r == s; Compare(same).Should().BeTrue(); Compare(toHighLower).Should().BeFalse(); Compare(toHighUpper).Should().BeFalse(); Compare(toLowLower).Should().BeFalse(); Compare(toLowUpper).Should().BeFalse(); }
internal override void WriteTo(XmlWriter writer) { base.WriteTo(writer); writer.WriteStartElement("Ranges"); for (int i = 0; i < this.ranges.Count; i++) { writer.WriteStartElement("Range"); SequenceRange range = this.ranges[i]; writer.WriteAttributeString("Lower", range.Lower.ToString(CultureInfo.InvariantCulture)); SequenceRange range2 = this.ranges[i]; writer.WriteAttributeString("Upper", range2.Upper.ToString(CultureInfo.InvariantCulture)); writer.WriteEndElement(); } writer.WriteEndElement(); if (this.bufferRemaining != -1) { writer.WriteStartElement("BufferRemaining"); writer.WriteString(this.bufferRemaining.ToString(CultureInfo.InvariantCulture)); writer.WriteEndElement(); } }
public void ValidateSequenceRange() { // Get values from xml. string expectedRangeID = Utility._xmlUtil.GetTextValue( Constants.SequenceRangeNode, Constants.IDNode); string expectedStartIndex = Utility._xmlUtil.GetTextValue( Constants.SequenceRangeNode, Constants.StartNode); string expectedEndIndex = Utility._xmlUtil.GetTextValue( Constants.SequenceRangeNode, Constants.EndNode); // Create a SequenceRange. SequenceRange seqRange = new SequenceRange(expectedRangeID, long.Parse(expectedStartIndex), long.Parse(expectedEndIndex)); // Validate created SequenceRange. Assert.AreEqual(expectedRangeID, seqRange.ID.ToString()); Assert.AreEqual(expectedStartIndex, seqRange.Start.ToString()); Assert.AreEqual(expectedEndIndex, seqRange.End.ToString()); Console.WriteLine( "SequenceRange BVT : Successfully validated the SequenceStart,SequenceID and SequenceEnd."); }
/// <summary> /// Returns list of SequenceRanges objects which represents reference sequences present in this header. /// </summary> public IList <SequenceRange> GetReferenceSequenceRanges() { List <SequenceRange> ranges = new List <SequenceRange>(); List <SAMRecordField> fields = RecordFields.Where(R => String.Compare(R.Typecode, "SQ", StringComparison.OrdinalIgnoreCase) == 0).ToList(); foreach (SAMRecordField field in fields) { SAMRecordFieldTag tag = field.Tags.FirstOrDefault(F => String.Compare(F.Tag, "SN", StringComparison.OrdinalIgnoreCase) == 0); if (tag != null) { string refName = tag.Value; long length; tag = field.Tags.FirstOrDefault(F => String.Compare(F.Tag, "LN", StringComparison.OrdinalIgnoreCase) == 0); if (tag != null && long.TryParse(tag.Value, out length)) { SequenceRange range = new SequenceRange(refName, 0, length); ranges.Add(range); } } } return(ranges.OrderBy(S => S.ID).ToList()); }
public void ValidateCompareTwoSequenceRanges() { // Get values from xml. string expectedRangeId = this.utilityObj.xmlUtil.GetTextValue(Constants.SequenceRangeNode, Constants.IDNode); string expectedStartIndex = this.utilityObj.xmlUtil.GetTextValue(Constants.SequenceRangeNode, Constants.StartNode); string expectedEndIndex = this.utilityObj.xmlUtil.GetTextValue(Constants.SequenceRangeNode, Constants.EndNode); string expectedRangeId1 = this.utilityObj.xmlUtil.GetTextValue(Constants.SequenceRangeNode, Constants.IDNode1); string expectedStartIndex1 = this.utilityObj.xmlUtil.GetTextValue(Constants.SequenceRangeNode, Constants.StartNode1); string expectedEndIndex1 = this.utilityObj.xmlUtil.GetTextValue(Constants.SequenceRangeNode, Constants.EndNode1); // Create first SequenceRange. var seqRange = new SequenceRange(expectedRangeId, long.Parse(expectedStartIndex, null), long.Parse(expectedEndIndex, null)); // Create second SequenceRange. var secondSeqRange = new SequenceRange(expectedRangeId1, long.Parse(expectedStartIndex1, null), long.Parse(expectedEndIndex1, null)); // Compare two SequenceRanges which are identical. int result = seqRange.CompareTo(secondSeqRange); // Validate result of comparison. Assert.AreEqual(0, result); ApplicationLog.WriteLine("SequenceRange BVT : Successfully validated the SequenceRange comparison"); }
/// <summary> /// Compare two sequence ranges. /// </summary> /// <param name="nodeName">Xml Node name for different inputs.</param> private void ValidateCompareTwoSequenceRanges(string nodeName) { // Get values from xml. string expectedRangeId = this.utilityObj.xmlUtil.GetTextValue(nodeName, Constants.IDNode); string expectedStartIndex = this.utilityObj.xmlUtil.GetTextValue(nodeName, Constants.StartNode); string expectedEndIndex = this.utilityObj.xmlUtil.GetTextValue(nodeName, Constants.EndNode); string expectedRangeId1 = this.utilityObj.xmlUtil.GetTextValue(nodeName, Constants.IDNode1); string expectedStartIndex1 = this.utilityObj.xmlUtil.GetTextValue(nodeName, Constants.StartNode1); string expectedEndIndex1 = this.utilityObj.xmlUtil.GetTextValue(nodeName, Constants.EndNode1); string expectedResults = this.utilityObj.xmlUtil.GetTextValue(nodeName, Constants.ComparisonResult); // Create first SequenceRange. var seqRange = new SequenceRange(expectedRangeId, long.Parse(expectedStartIndex, null), long.Parse(expectedEndIndex, null)); // Create second SequenceRange. var secondSeqRange = new SequenceRange(expectedRangeId1, long.Parse(expectedStartIndex1, null), long.Parse(expectedEndIndex1, null)); // Compare two SequenceRanges which are identical. int result = seqRange.CompareTo(secondSeqRange); // Validate result of comparison. Assert.AreEqual(Convert.ToInt32(expectedResults, null), result); ApplicationLog.WriteLine("SequenceRange P1 : Successfully validated the SequenceRange comparison"); }
/// <summary> /// Formats the Range/RangeGroup for different test cases based /// on Additional parameter /// </summary> /// <param name="nodeName">Xml Node name</param> /// <param name="addParam">Additional parameter</param> private void FormatterGeneralTestCases(string nodeName, AdditionalParameters addParam) { IList <ISequenceRange> rangeList = new List <ISequenceRange>(); var rangeGroup = new SequenceRangeGrouping(); // Gets the file name. string filePath = utilityObj.xmlUtil.GetTextValue(nodeName, Constants.FilePathNode).TestDir(); // Condition to check if Parse() happens before Format() switch (addParam) { case AdditionalParameters.ParseRangeGroup: var initialParserGroupObj = new BedParser(); rangeGroup = initialParserGroupObj.ParseRangeGrouping(filePath); break; case AdditionalParameters.ParseRange: var initialParserObj = new BedParser(); rangeList = initialParserObj.ParseRange(filePath); break; default: // Gets all the expected values from xml. string expectedID = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.IDNode); string expectedStart = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.StartNode); string expectedEnd = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.EndNode); string[] expectedIDs = expectedID.Split(','); string[] expectedStarts = expectedStart.Split(','); string[] expectedEnds = expectedEnd.Split(','); // Gets the Range Group or Range based on the additional parameter switch (addParam) { case AdditionalParameters.RangeGroupTextWriter: case AdditionalParameters.RangeGroupFileName: for (int i = 0; i < expectedIDs.Length; i++) { var rangeObj1 = new SequenceRange(expectedIDs[i], long.Parse(expectedStarts[i], null), long.Parse(expectedEnds[i], null)); rangeGroup.Add(rangeObj1); } break; default: for (int i = 0; i < expectedIDs.Length; i++) { var rangeObj2 = new SequenceRange(expectedIDs[i], long.Parse(expectedStarts[i], null), long.Parse(expectedEnds[i], null)); rangeList.Add(rangeObj2); } break; } break; } var formatterObj = new BedFormatter(); // Gets the Range list/Range Group based on the parameters. switch (addParam) { case AdditionalParameters.RangeFileName: case AdditionalParameters.ParseRange: formatterObj.Format(rangeList, Constants.BedTempFileName); break; case AdditionalParameters.RangeTextWriter: using (var txtWriter = File.Create(Constants.BedTempFileName)) { formatterObj.Format(txtWriter, rangeList); } break; case AdditionalParameters.RangeGroupFileName: case AdditionalParameters.ParseRangeGroup: formatterObj.Format(rangeGroup, Constants.BedTempFileName); break; case AdditionalParameters.RangeGroupTextWriter: using (var txtWriter = File.Create(Constants.BedTempFileName)) { formatterObj.Format(txtWriter, rangeGroup); } break; default: break; } // Reparse to validate the results var parserObj = new BedParser(); IList <ISequenceRange> newRangeList = parserObj.ParseRange(Constants.BedTempFileName); // Validation of all the properties. for (int i = 0; i < rangeList.Count; i++) { Assert.AreEqual(rangeList[i].ID, newRangeList[i].ID); Assert.AreEqual(rangeList[i].Start, newRangeList[i].Start); Assert.AreEqual(rangeList[i].End, newRangeList[i].End); // Validation of all metadata information. if (rangeList[i].Metadata.Count > 0) { if (rangeList[i].Metadata.ContainsKey("Name")) { Assert.AreEqual(rangeList[i].Metadata["Name"], newRangeList[i].Metadata["Name"]); } if (rangeList[i].Metadata.ContainsKey("Score")) { Assert.AreEqual(rangeList[i].Metadata["Score"], newRangeList[i].Metadata["Score"]); } if (rangeList[i].Metadata.ContainsKey("Strand")) { Assert.AreEqual(rangeList[i].Metadata["Strand"], newRangeList[i].Metadata["Strand"]); } if (rangeList[i].Metadata.ContainsKey("ThickStart")) { Assert.AreEqual(rangeList[i].Metadata["ThickStart"], newRangeList[i].Metadata["ThickStart"]); } if (rangeList[i].Metadata.ContainsKey("ThickEnd")) { Assert.AreEqual(rangeList[i].Metadata["ThickEnd"], newRangeList[i].Metadata["ThickEnd"]); } if (rangeList[i].Metadata.ContainsKey("ItemRGB")) { Assert.AreEqual(rangeList[i].Metadata["ItemRGB"], newRangeList[i].Metadata["ItemRGB"]); } if (rangeList[i].Metadata.ContainsKey("BlockCount")) { Assert.AreEqual(rangeList[i].Metadata["BlockCount"], newRangeList[i].Metadata["BlockCount"]); } if (rangeList[i].Metadata.ContainsKey("BlockSizes")) { Assert.AreEqual(rangeList[i].Metadata["BlockSizes"], newRangeList[i].Metadata["BlockSizes"]); } if (rangeList[i].Metadata.ContainsKey("BlockStarts")) { Assert.AreEqual(rangeList[i].Metadata["BlockStarts"], newRangeList[i].Metadata["BlockStarts"]); } ApplicationLog.WriteLine( "Bed Formatter BVT: Successfully validated all the metadata information"); } } ApplicationLog.WriteLine( "Bed Formatter BVT: Successfully validated the ID, Start and End Ranges"); // Cleanup the file. if (File.Exists(Constants.BedTempFileName)) { File.Delete(Constants.BedTempFileName); } }
public void ValidateFlatten() { // Get values from xml. string expectedRangeIDs = this.utilityObj.xmlUtil.GetTextValue( Constants.SmallSizeBedNodeName, Constants.IDNode); string expectedStartIndex = this.utilityObj.xmlUtil.GetTextValue( Constants.SmallSizeBedNodeName, Constants.StartNode); string expectedEndIndex = this.utilityObj.xmlUtil.GetTextValue( Constants.SmallSizeBedNodeName, Constants.EndNode); string expectedSequenceRangeCount = this.utilityObj.xmlUtil.GetTextValue( Constants.SmallSizeBedNodeName, Constants.SequenceRangeCountNode); string[] rangeIDs = expectedRangeIDs.Split(','); string[] rangeStarts = expectedStartIndex.Split(','); string[] rangeEnds = expectedEndIndex.Split(','); var seqRangeGrouping = new SequenceRangeGrouping(); List<ISequenceRange> rangeList = null; // Create a SequenceRange and add to SequenceRangeList. for (int i = 0; i < rangeIDs.Length; i++) { var seqRange = new SequenceRange(rangeIDs[i], long.Parse(rangeStarts[i], null), long.Parse(rangeEnds[i], null)); seqRangeGrouping.Add(seqRange); } //Convert SequenceRangeGroup to SequenceRangeList. rangeList = seqRangeGrouping.Flatten(); int j = 0; // Validate created SequenceRanges. foreach (ISequenceRange seqRange in rangeList) { Assert.AreEqual(rangeStarts[j], seqRange.Start.ToString((IFormatProvider) null)); Assert.AreEqual(rangeEnds[j], seqRange.End.ToString((IFormatProvider) null)); Assert.AreEqual(rangeIDs[j], seqRange.ID.ToString(null)); j++; } Assert.AreEqual(expectedSequenceRangeCount, rangeList.Count.ToString((IFormatProvider) null)); ApplicationLog.WriteLine("SequenceRange BVT : Successfully validated the SequenceStart,SequenceID and SequenceEnd."); }
/// <summary> /// Parse a set of ISequenceRange objects from a stream. /// </summary> /// <param name="stream">The stream from which the sequence range is to be parsed.</param> /// <returns>The list of sequence ranges.</returns> public IList<ISequenceRange> ParseRange(Stream stream) { if (stream == null) { throw new ArgumentNullException("stream"); } var result = new List<ISequenceRange>(); char[] splitters = { '\t' }; using (StreamReader reader = stream.OpenRead()) { string line; while ((line = reader.ReadLine()) != null) { // TODO: Handle Track definitions if (line.StartsWith("track", StringComparison.Ordinal)) { continue; } string[] split = line.Split(splitters, StringSplitOptions.RemoveEmptyEntries); if (split.Length < 3) { continue; } var range = new SequenceRange { ID = split[0], Start = long.Parse(split[1], CultureInfo.InvariantCulture), End = long.Parse(split[2], CultureInfo.InvariantCulture) }; // Optional parameters // TODO: When implementing track definitions update this section for 'use{feature}' declarations if (split.Length >= 4) { range.Metadata["Name"] = split[3]; } if (split.Length >= 5) { range.Metadata["Score"] = int.Parse(split[4], CultureInfo.InvariantCulture); } if (split.Length >= 6) { range.Metadata["Strand"] = split[5][0]; } if (split.Length >= 7) { range.Metadata["ThickStart"] = int.Parse(split[6], CultureInfo.InvariantCulture); } if (split.Length >= 8) { range.Metadata["ThickEnd"] = int.Parse(split[7], CultureInfo.InvariantCulture); } if (split.Length >= 9) { range.Metadata["ItemRGB"] = split[8]; } if (split.Length >= 10) { range.Metadata["BlockCount"] = int.Parse(split[9], CultureInfo.InvariantCulture); } if (split.Length >= 11) { range.Metadata["BlockSizes"] = split[10]; } if (split.Length >= 12) { range.Metadata["BlockStarts"] = split[11]; } result.Add(range); } } return result; }
/// <summary> /// Create a SequenceRangeGrouping by passing RangeID,Start and End Index. /// and validate created SequenceRange. /// </summary> /// <param name="nodeName">Xml Node name for different inputs.</param> private void CreateSequenceRangeGrouping(string nodeName) { // Get values from xml. string expectedRangeIDs = this.utilityObj.xmlUtil.GetTextValue( nodeName, Constants.IDNode); string expectedStartIndex = this.utilityObj.xmlUtil.GetTextValue( nodeName, Constants.StartNode); string expectedEndIndex = this.utilityObj.xmlUtil.GetTextValue( nodeName, Constants.EndNode); string expectedSequenceRangeCount = this.utilityObj.xmlUtil.GetTextValue( nodeName, Constants.SequenceRangeCountNode); string[] rangeIDs = expectedRangeIDs.Split(','); string[] rangeStarts = expectedStartIndex.Split(','); string[] rangeEnds = expectedEndIndex.Split(','); var seqRangeGrouping = new SequenceRangeGrouping(); List<ISequenceRange> rangeList = null; // Create a SequenceRange and add to SequenceRangeList. for (int i = 0; i < rangeIDs.Length; i++) { var seqRange = new SequenceRange(rangeIDs[i], long.Parse(rangeStarts[i], null), long.Parse(rangeEnds[i], null)); seqRangeGrouping.Add(seqRange); } IEnumerable<string> rangeGroupIds = seqRangeGrouping.GroupIDs; string rangeID = string.Empty; int j = 0; foreach (string groupID in rangeGroupIds) { rangeID = groupID; // Get SequenceRangeIds. rangeList = seqRangeGrouping.GetGroup(rangeID); // Validate created SequenceRanges. foreach (ISequenceRange seqRange in rangeList) { Assert.AreEqual(rangeStarts[j], seqRange.Start.ToString((IFormatProvider) null)); Assert.AreEqual(rangeEnds[j], seqRange.End.ToString((IFormatProvider) null)); Assert.AreEqual(rangeIDs[j], seqRange.ID.ToString(null)); j++; } } Assert.AreEqual(expectedSequenceRangeCount, rangeList.Count.ToString((IFormatProvider) null)); ApplicationLog.WriteLine( "SequenceRange BVT : Successfully validated the SequenceStart, SequenceID and SequenceEnd."); }
private static IQueryable <RillCommitEntity> Matching(this IQueryable <RillCommitEntity> commits, SequenceRange range) { var seekedLower = (long)range.Lower; var seekedUpper = (long)range.Upper; //a) the commits lower bound is between seeked range //b) the commits upper bound is between seeked range //c) the commits range spans over the seeked range return(commits .Where(c => (c.SequenceLowerBound >= seekedLower && c.SequenceLowerBound <= seekedUpper) || (c.SequenceUpperBound >= seekedLower && c.SequenceUpperBound <= seekedUpper) || (c.SequenceLowerBound <= seekedLower && c.SequenceUpperBound >= seekedUpper))); }
/// <summary> /// Formats the Range/RangeGroup for different test cases based /// on Additional parameter /// </summary> /// <param name="nodeName">Xml Node name</param> /// <param name="addParam">Additional parameter</param> private void FormatterGeneralTestCases(string nodeName, AdditionalParameters addParam) { IList<ISequenceRange> rangeList = new List<ISequenceRange>(); var rangeGroup = new SequenceRangeGrouping(); // Gets the file name. string filePath = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.FilePathNode); // Condition to check if Parse() happens before Format() switch (addParam) { case AdditionalParameters.ParseRangeGroup: case AdditionalParameters.ParseRangeGroupTextWriter: var initialParserGroupObj = new BedParser(); rangeGroup = initialParserGroupObj.ParseRangeGrouping(filePath); break; case AdditionalParameters.ParseRange: case AdditionalParameters.ParseRangeTextWriter: var initialParserObj = new BedParser(); rangeList = initialParserObj.ParseRange(filePath); break; default: // Gets all the expected values from xml. string expectedID = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.IDNode); string expectedStart = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.StartNode); string expectedEnd = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.EndNode); string[] expectedIDs = expectedID.Split(','); string[] expectedStarts = expectedStart.Split(','); string[] expectedEnds = expectedEnd.Split(','); // Gets the Range Group or Range based on the additional parameter switch (addParam) { case AdditionalParameters.RangeGroupTextWriter: case AdditionalParameters.RangeGroupFileName: for (int i = 0; i < expectedIDs.Length; i++) { var rangeObj1 = new SequenceRange(expectedIDs[i], long.Parse(expectedStarts[i], null), long.Parse(expectedEnds[i], null)); rangeGroup.Add(rangeObj1); } break; default: for (int i = 0; i < expectedIDs.Length; i++) { var rangeObj2 = new SequenceRange(expectedIDs[i], long.Parse(expectedStarts[i], null), long.Parse(expectedEnds[i], null)); rangeList.Add(rangeObj2); } break; } break; } var formatterObj = new BedFormatter(); // Gets the Range list/Range Group based on the parameters. switch (addParam) { case AdditionalParameters.RangeFileName: case AdditionalParameters.ParseRange: formatterObj.Format(rangeList, Constants.BedTempFileName); break; case AdditionalParameters.RangeTextWriter: case AdditionalParameters.ParseRangeTextWriter: using (var txtWriter = File.Create(Constants.BedTempFileName)) { formatterObj.Format(txtWriter, rangeList); } break; case AdditionalParameters.RangeGroupFileName: case AdditionalParameters.ParseRangeGroup: formatterObj.Format(rangeGroup, Constants.BedTempFileName); break; case AdditionalParameters.RangeGroupTextWriter: case AdditionalParameters.ParseRangeGroupTextWriter: using (var txtWriter = File.Create(Constants.BedTempFileName)) { formatterObj.Format(txtWriter, rangeGroup); } break; default: break; } // Reparse to validate the results var parserObj = new BedParser(); IList<ISequenceRange> newRangeList = parserObj.ParseRange(Constants.BedTempFileName); // Validation of all the properties. for (int i = 0; i < rangeList.Count; i++) { Assert.AreEqual(rangeList[0].ID, newRangeList[0].ID); Assert.AreEqual(rangeList[0].Start, newRangeList[0].Start); Assert.AreEqual(rangeList[0].End, newRangeList[0].End); } ApplicationLog.WriteLine( "Bed Formatter P1: Successfully validated the ID, Start and End Ranges"); // Cleanup the file. if (File.Exists(Constants.BedTempFileName)) File.Delete(Constants.BedTempFileName); }
public void Requires_logic_order_of_range() { Action failing = () => SequenceRange.From(Sequence.Max, Sequence.First); failing.Should().ThrowExactly <ArgumentException>().WithMessage("Range must be from low to high."); }
/// <summary> /// Parse a set of ISequenceRange objects from a reader. /// </summary> /// <param name="reader">The reader from which the sequence range is to be parsed.</param> /// <returns>The list of sequence ranges.</returns> public IList <ISequenceRange> ParseRange(TextReader reader) { if (reader == null) { throw new ArgumentNullException("reader"); } List <ISequenceRange> result = new List <ISequenceRange>(); char[] splitters = { '\t' }; string line = null; while ((line = reader.ReadLine()) != null) { // TODO: Handle Track definitions if (line.StartsWith("track", StringComparison.Ordinal)) { continue; } string[] split = line.Split(splitters, StringSplitOptions.RemoveEmptyEntries); if (split.Length < 3) { continue; } SequenceRange range = new SequenceRange(); range.ID = split[0]; range.Start = long.Parse(split[1], CultureInfo.InvariantCulture); range.End = long.Parse(split[2], CultureInfo.InvariantCulture); // Optional parameters // TODO: When implementing track definitions update this section for 'use{feature}' declarations if (split.Length >= 4) { range.Metadata["Name"] = split[3]; } if (split.Length >= 5) { range.Metadata["Score"] = int.Parse(split[4], CultureInfo.InvariantCulture); } if (split.Length >= 6) { range.Metadata["Strand"] = split[5][0]; } if (split.Length >= 7) { range.Metadata["ThickStart"] = int.Parse(split[6], CultureInfo.InvariantCulture); } if (split.Length >= 8) { range.Metadata["ThickEnd"] = int.Parse(split[7], CultureInfo.InvariantCulture); } if (split.Length >= 9) { range.Metadata["ItemRGB"] = split[8]; } if (split.Length >= 10) { range.Metadata["BlockCount"] = int.Parse(split[9], CultureInfo.InvariantCulture); } if (split.Length >= 11) { range.Metadata["BlockSizes"] = split[10]; } if (split.Length >= 12) { range.Metadata["BlockStarts"] = split[11]; } result.Add(range); } reader.Close(); return(result); }
private static void ReserveRange(string sequenceName, int rangeSize, SqlConnection connection, SequenceRange entry) { using (var sqlCmd = new SqlCommand((entry.IsSequenceExhausted && entry.AutoRestart ? string.Format(SequenceRestartSql, sequenceName) : "") + SequenceGetRangeSql, connection)) { sqlCmd.CommandType = CommandType.StoredProcedure; var firstValueParam = new SqlParameter("@range_first_value", SqlDbType.Variant) { Direction = ParameterDirection.Output }; var lastValueParam = new SqlParameter("@range_last_value", SqlDbType.Variant) { Direction = ParameterDirection.Output }; var incrementValueParam = new SqlParameter("@sequence_increment", SqlDbType.Variant) { Direction = ParameterDirection.Output }; var maxValueParam = new SqlParameter("@sequence_max_value", SqlDbType.Variant) { Direction = ParameterDirection.Output }; sqlCmd.Parameters.AddWithValue("@sequence_name", sequenceName); sqlCmd.Parameters.AddWithValue("@range_size", rangeSize); sqlCmd.Parameters.Add(firstValueParam); sqlCmd.Parameters.Add(lastValueParam); sqlCmd.Parameters.Add(incrementValueParam); sqlCmd.Parameters.Add(maxValueParam); sqlCmd.ExecuteNonQuery(); entry.Current = entry.First = Convert.ToInt64(firstValueParam.Value); entry.Last = Convert.ToInt64(lastValueParam.Value); entry.Increment = Convert.ToInt32(incrementValueParam.Value); entry.MaxValue = Convert.ToInt64(maxValueParam.Value); if (!entry.IsValid) { entry.Increment = 1; } } }
public void ValidateSequenceRangeGroupingToString() { ISequenceRange range1 = new SequenceRange("chr20", 0, 3); ISequenceRange range2 = new SequenceRange("chr21", 0, 4); IList<ISequenceRange> ranges = new List<ISequenceRange>(); ranges.Add(range1); ranges.Add(range2); var rangegrouping = new SequenceRangeGrouping(ranges); string actualString = rangegrouping.ToString(); string expectedStr = this.utilityObj.xmlUtil.GetTextValue(Constants.ToStringNodeName, Constants.SequenceRangeGroupingExpectedNode); Assert.AreEqual(expectedStr.Replace("\\r\\n", ""), actualString.Replace(System.Environment.NewLine, "")); }
/// <summary> /// Parses specified BAM file using index file. /// </summary> /// <param name="parser">BAM parser</param> /// <param name="fileName">BAM file name.</param> /// <param name="range">SequenceRange object which contains reference sequence name and start and end co-ordinates.</param> /// <returns>SequenceAlignmentMap object which contains alignments for specified reference sequence and for specified range.</returns> public static SequenceAlignmentMap ParseRange(this BAMParser parser, string fileName, SequenceRange range) { if (parser == null) { throw new ArgumentNullException("parser"); } if (string.IsNullOrWhiteSpace(fileName)) { throw new ArgumentNullException("fileName"); } if (range == null) { throw new ArgumentNullException("range"); } if (string.IsNullOrEmpty(range.ID)) { throw new ArgumentException("Reference sequence name (range.ID) can't empty or null."); } int start = range.Start >= int.MaxValue ? int.MaxValue : (int)range.Start; int end = range.End >= int.MaxValue ? int.MaxValue : (int)range.End; using (FileStream bamStream = File.OpenRead(fileName)) { string bamIndexFileName = GetBAMIndexFileName(fileName); using (FileStream bamIndexFile = File.OpenRead(bamIndexFileName)) using (BAMIndexStorage bamIndexStorage = new BAMIndexStorage(bamIndexFile)) { if (start == 0 && end == int.MaxValue) return parser.GetAlignment(bamStream, bamIndexStorage, range.ID); return parser.GetAlignment(bamStream, bamIndexStorage, range.ID, start, end); } } }
public void TestSequenceRangeGroupingToString() { ISequenceRange range1 = new SequenceRange("chr20", 0, 3); ISequenceRange range2 = new SequenceRange("chr21", 0, 4); IList<ISequenceRange> ranges = new List<ISequenceRange>(); ranges.Add(range1); ranges.Add(range2); SequenceRangeGrouping rangegrouping = new SequenceRangeGrouping(ranges); string actualString = rangegrouping.ToString(); string expectedString = "ID=chr20 Start=0 End=3\r\nID=chr21 Start=0 End=4\r\n".Replace("\r\n", Environment.NewLine); Assert.AreEqual(actualString, expectedString); }
/// <summary> /// Formats the Range/RangeGroup for different test cases based /// on Additional parameter /// </summary> /// <param name="nodeName">Xml Node name</param> /// <param name="addParam">Additional parameter</param> void FormatterGeneralTestCases(string nodeName, AdditionalParameters addParam) { IList <ISequenceRange> rangeList = new List <ISequenceRange>(); SequenceRangeGrouping rangeGroup = new SequenceRangeGrouping(); // Gets the file name. string filePath = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.FilePathNode); // Condition to check if Parse() happens before Format() switch (addParam) { case AdditionalParameters.ParseRangeGroup: case AdditionalParameters.ParseRangeGroupTextWriter: BedParser initialParserGroupObj = new BedParser(); rangeGroup = initialParserGroupObj.ParseRangeGrouping(filePath); break; case AdditionalParameters.ParseRange: case AdditionalParameters.ParseRangeTextWriter: BedParser initialParserObj = new BedParser(); rangeList = initialParserObj.ParseRange(filePath); break; default: // Gets all the expected values from xml. string expectedID = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.IDNode); string expectedStart = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.StartNode); string expectedEnd = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.EndNode); string[] expectedIDs = expectedID.Split(','); string[] expectedStarts = expectedStart.Split(','); string[] expectedEnds = expectedEnd.Split(','); // Gets the Range Group or Range based on the additional parameter switch (addParam) { case AdditionalParameters.RangeGroupTextWriter: case AdditionalParameters.RangeGroupFileName: for (int i = 0; i < expectedIDs.Length; i++) { SequenceRange rangeObj1 = new SequenceRange(expectedIDs[i], long.Parse(expectedStarts[i], (IFormatProvider)null), long.Parse(expectedEnds[i], (IFormatProvider)null)); rangeGroup.Add(rangeObj1); } break; default: for (int i = 0; i < expectedIDs.Length; i++) { SequenceRange rangeObj2 = new SequenceRange(expectedIDs[i], long.Parse(expectedStarts[i], (IFormatProvider)null), long.Parse(expectedEnds[i], (IFormatProvider)null)); rangeList.Add(rangeObj2); } break; } break; } BedFormatter formatterObj = new BedFormatter(); // Gets the Range list/Range Group based on the parameters. switch (addParam) { case AdditionalParameters.RangeFileName: case AdditionalParameters.ParseRange: formatterObj.Format(rangeList, Constants.BedTempFileName); break; case AdditionalParameters.RangeTextWriter: case AdditionalParameters.ParseRangeTextWriter: using (TextWriter txtWriter = new StreamWriter(Constants.BedTempFileName)) { formatterObj.Format(rangeList, txtWriter); } break; case AdditionalParameters.RangeGroupFileName: case AdditionalParameters.ParseRangeGroup: formatterObj.Format(rangeGroup, Constants.BedTempFileName); break; case AdditionalParameters.RangeGroupTextWriter: case AdditionalParameters.ParseRangeGroupTextWriter: using (TextWriter txtWriter = new StreamWriter(Constants.BedTempFileName)) { formatterObj.Format(rangeGroup, txtWriter); } break; default: break; } // Reparse to validate the results BedParser parserObj = new BedParser(); IList <ISequenceRange> newRangeList = parserObj.ParseRange(Constants.BedTempFileName); // Validation of all the properties. for (int i = 0; i < rangeList.Count; i++) { Assert.AreEqual(rangeList[0].ID, newRangeList[0].ID); Assert.AreEqual(rangeList[0].Start, newRangeList[0].Start); Assert.AreEqual(rangeList[0].End, newRangeList[0].End); } ApplicationLog.WriteLine( "Bed Formatter P1: Successfully validated the ID, Start and End Ranges"); Console.WriteLine( "Bed Formatter P1: Successfully validated the ID, Start and End Ranges"); // Cleanup the file. if (File.Exists(Constants.BedTempFileName)) { File.Delete(Constants.BedTempFileName); } }
public void MapBlob(string blob) { var parsed = JSON.Parse(blob); var threads = parsed["TextThreads"].AsArray; TextThreads = new List<TextThread>(); foreach(var thread in threads.Childs) { TextThread newThread = new TextThread(); newThread.IsDefaultThread = thread["IsDefaultThread"].AsBool; newThread.Name = thread["Name"]; var sequenceState = thread["SequenceState"].AsObject; SequenceRange newState = new SequenceRange(); newState.Name = sequenceState["Name"]; newState.MinCounter = sequenceState["MinCounter"].AsInt; newState.MaxCounter = sequenceState["MaxCounter"].AsInt; newThread.SequenceRange = newState; newThread.TextContent = new List<TextContent>(); var content = thread["TextContent"].AsArray; foreach(var contentItem in content.Childs) { TextContent newTextContent = new TextContent(); newTextContent.Speaker = contentItem["Speaker"]; newTextContent.Dialogue = contentItem["Dialogue"]; newTextContent.DialogueEvents = new List<DialogueEvent>(); // Map Dialogue Options... newTextContent.Options = new List<DialogueOption>(); var dialogueOptions = contentItem["Options"]; foreach(var dialogueOption in dialogueOptions.Childs) { DialogueOption newOption = new DialogueOption(); newOption.Text = dialogueOption["Text"]; newOption.TargetID = dialogueOption["TargetID"].AsInt; newTextContent.Options.Add(newOption); } // Map Dialogue Events... var dialogueEvents = contentItem["DialogueEvents"].AsArray; foreach(var dialogueEvent in dialogueEvents.Childs) { DialogueEvent newDialogueEvent = new DialogueEvent(); newDialogueEvent.MessageName = dialogueEvent["MessageName"]; newDialogueEvent.Args = new List<string>(); var eventArgs = dialogueEvent["Args"].AsArray; foreach(var eventArg in eventArgs.Childs) { newDialogueEvent.Args.Add(eventArg); } newTextContent.DialogueEvents.Add(newDialogueEvent); } newThread.TextContent.Add(newTextContent); } TextThreads.Add(newThread); } }
/// <summary> /// Parses specified BAM file using index file. /// </summary> /// <param name="fileName">BAM file name.</param> /// <param name="range">SequenceRange object which contains reference sequence name and start and end co-ordinates.</param> /// <returns>SequenceAlignmentMap object which contains alignments for specified reference sequence and for specified range.</returns> public SequenceAlignmentMap ParseRange(string fileName, SequenceRange range) { if (string.IsNullOrWhiteSpace(fileName)) { throw new ArgumentNullException("fileName"); } if (range == null) { throw new ArgumentNullException("range"); } if (string.IsNullOrEmpty(range.ID)) { throw new ArgumentException("Reference sequence name (range.ID) can't empty or null."); } int start = range.Start >= int.MaxValue ? int.MaxValue : (int)range.Start; int end = range.End >= int.MaxValue ? int.MaxValue : (int)range.End; if (start == 0 && end == int.MaxValue) { using (FileStream bamStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read)) { string bamIndexFileName = getBAMIndexFileName(fileName); using (BAMIndexFile bamIndexFile = new BAMIndexFile(bamIndexFileName, FileMode.Open, FileAccess.Read)) { return GetAlignment(bamStream, bamIndexFile, range.ID); } } } else { using (FileStream bamStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read)) { string bamIndexFileName = getBAMIndexFileName(fileName); using (BAMIndexFile bamIndexFile = new BAMIndexFile(bamIndexFileName, FileMode.Open, FileAccess.Read)) { return GetAlignment(bamStream, bamIndexFile, range.ID, start, end); } } } }
internal static RillEntity New(RillReference reference, SequenceRange sequenceRange, Timestamp createdAt) => From(reference, sequenceRange, createdAt, createdAt);
internal static IQueryable <RillCommitEntity> Matching(this IQueryable <RillCommitEntity> commits, RillReference reference, SequenceRange range) => range == SequenceRange.Any ? commits.Matching(reference) : commits.Matching(reference).Matching(range);