Example #1
0
        /// <summary>
        /// Parses a list of sequences using a BioTextReader.
        /// </summary>
        /// <remarks>
        /// This method should be overridden by any parsers that need to process file-scope
        /// metadata that applies to all of the sequences in the file.
        /// </remarks>
        /// <param name="bioReader">bio text reader</param>
        /// <param name="isReadOnly">
        /// Flag to indicate whether the resulting sequences should be in readonly mode or not.
        /// If this flag is set to true then the resulting sequences's isReadOnly property
        /// will be set to true, otherwise it will be set to false.
        /// </param>
        /// <returns>The list of parsed ISequence objects.</returns>
        protected IList <ISequence> Parse(BioTextReader bioReader, bool isReadOnly)
        {
            _lineCount        = 0;
            _sequenceCount    = 0;
            _lineLength       = 0;
            _sequenceBeginsAt = 1;

            if (bioReader == null)
            {
                throw new ArgumentNullException("bioReader");
            }

            // no empty files allowed
            if (!bioReader.HasLines)
            {
                string message = Resource.Parser_NoTextErrorMessage;
                Trace.Report(message);
                throw new InvalidOperationException(message);
            }

            // Check if DV is enabled and sidecar creation is possible
            if (!string.IsNullOrEmpty(bioReader.FileName) && IsDataVirtualizationEnabled && SidecarFileProvider.IsIndexFileExists(bioReader.FileName))
            {
                while (bioReader.HasLines)
                {
                    // Parse and forget as the list is now maintained by DV using sequence pointers
                    ParseOne(bioReader, isReadOnly);
                }

                // Create sidecar
                SidecarFileProvider provider = SidecarFileProvider.CreateIndexFile(bioReader.FileName, _sequencePointers);

                VirtualSequenceList virtualSequences =
                    new VirtualSequenceList(provider, this, _sequencePointers.Count)
                {
                    CreateSequenceAsReadOnly = isReadOnly
                };

                _sequencePointers.Clear();

                return(virtualSequences);
            }
            else
            {
                List <ISequence> sequences = new List <ISequence>();

                while (bioReader.HasLines)
                {
                    sequences.Add(ParseOne(bioReader, isReadOnly));
                }

                return(sequences);
            }
        }
Example #2
0
        public void ValidateVSLIndexOf()
        {
            VirtualSequenceList seqList = GetVirtualSequenceList(
                Constants.MultiSequenceFileNodeName);

            Assert.AreEqual(10, seqList.IndexOf(seqList[10]));

            ApplicationLog.WriteLine(
                "VSL Bvt : Successfully validated the IndexOf() method");
            Console.WriteLine(
                "VSL Bvt : Successfully validated the IndexOf() method");
        }
Example #3
0
        public void ValidateVSLProperties()
        {
            VirtualSequenceList seqList = GetVirtualSequenceList(
                Constants.MultiSequenceFileNodeName);

            Assert.IsTrue(seqList.IsReadOnly);
            Assert.AreNotEqual(0, seqList.Count);

            ApplicationLog.WriteLine(
                "VSL Bvt : Successfully validated the all properties");
            Console.WriteLine(
                "VSL Bvt : Successfully validated the all properties");
        }
Example #4
0
        public void ValidateVSLContains()
        {
            VirtualSequenceList seqList =
                GetVirtualSequenceList(Constants.MultiSequenceFileNodeName);

            Assert.IsTrue(seqList.Contains(seqList[10]));
            Assert.IsTrue(seqList.Contains(seqList[100]));

            ApplicationLog.WriteLine(
                "VSL Bvt : Successfully validated the Contains() method");
            Console.WriteLine(
                "VSL Bvt : Successfully validated the Contains() method");
        }
Example #5
0
        /// <summary>
        /// Gets the virtual sequence list
        /// </summary>
        /// <param name="nodeName">Xml node name</param>
        /// <returns>Virtual Sequence List</returns>
        static VirtualSequenceList GetVirtualSequenceList(string nodeName)
        {
            // Gets the expected sequence from the Xml
            string filePath = Utility._xmlUtil.GetTextValue(
                nodeName,
                Constants.FilePathNode1);

            FastaParser parserObj = new FastaParser();

            parserObj.EnforceDataVirtualization = true;
            VirtualSequenceList seqList =
                (VirtualSequenceList)parserObj.Parse(filePath);

            return(seqList);
        }
Example #6
0
        public void ValidateVSLCopyTo()
        {
            VirtualSequenceList seqList = GetVirtualSequenceList(
                Constants.MultiSequenceFileNodeName);

            ISequence[] seqArray = new Sequence[seqList.Count];
            seqList.CopyTo(seqArray, 0);
            Assert.AreEqual(seqList[0].ToString(),
                            seqArray[0].ToString());
            Assert.AreEqual(seqList[seqList.Count - 1].ToString(),
                            seqArray[seqList.Count - 1].ToString());

            ApplicationLog.WriteLine(
                "VSL Bvt : Successfully validated the CopyTo() method");
            Console.WriteLine(
                "VSL Bvt : Successfully validated the CopyTo() method");
        }
Example #7
0
        public void ValidateVSLClear()
        {
            VirtualSequenceList seqList = GetVirtualSequenceList(
                Constants.NeedlemanWunschVeryLargeSizeProAlignAlgorithmNodeName);

            try
            {
                seqList.Clear();
                Assert.Fail();
            }
            catch (NotSupportedException)
            {
                ApplicationLog.WriteLine(
                    "VSL Bvt : Successfully validated the Clear() method");
                Console.WriteLine(
                    "VSL Bvt : Successfully validated the Clear() method");
            }
        }
Example #8
0
        public void ValidateVSLAdd()
        {
            VirtualSequenceList seqList = GetVirtualSequenceList(
                Constants.NeedlemanWunschVeryLargeSizeProAlignAlgorithmNodeName);

            try
            {
                seqList.Add((ISequence) new Sequence(Alphabets.Protein,
                                                     "KKLLEE"));
                Assert.Fail();
            }
            catch (NotSupportedException)
            {
                ApplicationLog.WriteLine(
                    "VSL Bvt : Successfully validated the Add() method");
                Console.WriteLine(
                    "VSL Bvt : Successfully validated the Add() method");
            }
        }
Example #9
0
        /// <summary>
        /// Parses a list of biological sequence texts from a file.
        /// </summary>
        /// <param name="filename">The name of a biological sequence file.</param>
        /// <param name="isReadOnly">
        /// Flag to indicate whether the resulting sequences should be in readonly mode or not.
        /// If this flag is set to true then the resulting sequences's isReadOnly property
        /// will be set to true, otherwise it will be set to false.
        /// </param>
        /// <returns>The list of parsed ISequence objects.</returns>
        public IList <ISequence> Parse(string filename, bool isReadOnly)
        {
            // default to full load
            _blockSize         = FileLoadHelper.DefaultFullLoadBlockSize;
            _maxNumberOfBlocks = 0;

            // check if DV is required
            if (filename != null)
            {
                _fileName = filename;

                FileInfo fileInfo = new FileInfo(_fileName);
                _enforceDataVirtualizationByFileSize = EnforceDataVirtualizationByFileSize * FileLoadHelper.KBytes;
                if ((_enforceDataVirtualizationByFileSize != 0 && fileInfo.Length >= _enforceDataVirtualizationByFileSize) ||
                    _isDataVirtualizationEnforced)
                {
                    _blockSize         = FileLoadHelper.DefaultBlockSize;
                    _maxNumberOfBlocks = FileLoadHelper.DefaultMaxNumberOfBlocks;
                }
            }

            // Check for sidecar
            if (IsDataVirtualizationEnabled)
            {
                _sidecarFileProvider = new SidecarFileProvider(_fileName);
                _sidecarFileProvider.Close();

                // if valid sidecar file exists
                if (_sidecarFileProvider.IsSidecarValid)
                {
                    // Create virtual list and return
                    return(new VirtualSequenceList(_sidecarFileProvider, this, _sidecarFileProvider.Count)
                    {
                        CreateSequenceAsReadOnly = isReadOnly
                    });
                }

                // else create new sidecar
                _sidecarFileProvider = new SidecarFileProvider(_fileName, true);

                if (_sidecarFileProvider.SidecarFileExists)
                {
                    using (_mbfStreamReader = new MBFStreamReader(_fileName))
                    {
                        try
                        {
                            while (_mbfStreamReader.HasLines)
                            {
                                // Parse and forget as the list is now maintained by DV using sequence pointers
                                ParseOne(_mbfStreamReader, isReadOnly);
                            }

                            _sidecarFileProvider.Close();

                            VirtualSequenceList virtualSequences =
                                new VirtualSequenceList(_sidecarFileProvider, this, _sidecarFileProvider.Count)
                            {
                                CreateSequenceAsReadOnly = isReadOnly
                            };

                            return(virtualSequences);
                        }
                        catch (Exception)
                        {
                            _sidecarFileProvider.Cleanup();
                        }
                    }
                }
            }

            // non-DV parsing
            using (MBFTextReader mbfReader = new MBFTextReader(filename))
            {
                return(Parse(mbfReader, isReadOnly));
            }
        }