示例#1
0
        /// <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");
        }
示例#2
0
        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));
        }
示例#3
0
        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));
            }
        }
示例#5
0
        public void ValidateSequenceRangeToString()
        {
            var    range        = new SequenceRange("chr20", 0, 3);
            string actualString = range.ToString();

            Assert.AreEqual("ID=chr20 Start=0 End=3", actualString);
        }
示例#6
0
        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");
        }
示例#7
0
        /// <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.");
        }
示例#8
0
    public bool EvaluateRange(SequenceRange range)
    {
        bool result = SequenceStates.Any(s => s.Name == range.Name &&
                                         s.Counter >= range.MinCounter &&
                                         s.Counter <= range.MaxCounter);

        return(result);
    }
示例#9
0
        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);
        }
示例#10
0
        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();
        }
示例#11
0
        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);
        }
示例#12
0
        // 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));
        }
示例#13
0
        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);
        }
示例#14
0
        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.");
        }
示例#16
0
        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.");
        }
示例#18
0
        /// <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);
        }
示例#19
0
        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();
        }
示例#20
0
 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();
     }
 }
示例#21
0
        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.");
        }
示例#22
0
        /// <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");
        }
示例#25
0
        /// <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.");
        }
示例#27
0
        /// <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.");
        }
示例#29
0
        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)));
        }
示例#30
0
        /// <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);
        }
示例#31
0
        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.");
        }
示例#32
0
        /// <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;
                }
            }
        }
示例#34
0
        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, ""));
        }
示例#35
0
        /// <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);

                }
            }
        }
示例#36
0
        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);
        }
示例#37
0
        /// <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);
            }
        }
示例#38
0
	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);
		}
	}
示例#39
0
 public void ValidateSequenceRangeToString()
 {
     var range = new SequenceRange("chr20", 0, 3);
     string actualString = range.ToString();
     Assert.AreEqual("ID=chr20 Start=0 End=3", actualString);
 }
示例#40
0
        /// <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);
                    }
                }
            }
        }
示例#41
0
 internal static RillEntity New(RillReference reference, SequenceRange sequenceRange, Timestamp createdAt)
 => From(reference, sequenceRange, createdAt, createdAt);
示例#42
0
 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);
 }
示例#43
0
 internal static IQueryable <RillCommitEntity> Matching(this IQueryable <RillCommitEntity> commits, RillReference reference, SequenceRange range)
 => range == SequenceRange.Any
         ? commits.Matching(reference)
         : commits.Matching(reference).Matching(range);