Beispiel #1
0
        private ISimplePosition GetNextSimplePosition()
        {
            while (_queuedPositions.Count == 0)
            {
                VcfLine = _vcfFilter.GetNextLine(_reader);

                var simplePositions = _recomposer.ProcessSimplePosition(
                    SimplePosition.GetSimplePosition(VcfLine, _vcfFilter, _refNameToChromosome));
                foreach (var simplePosition in simplePositions)
                {
                    _queuedPositions.Enqueue(simplePosition);
                }
                if (VcfLine == null)
                {
                    break;
                }
            }
            return(_queuedPositions.Count == 0 ? null : _queuedPositions.Dequeue());
        }
Beispiel #2
0
        private ISimplePosition GetNextSimplePosition()
        {
            while (_queuedPositions.Count == 0)
            {
                VcfLine = _vcfFilter.GetNextLine(_reader);

                SimplePosition vcfPosition = null;

                if (VcfLine != null)
                {
                    string[] vcfFields  = VcfLine.OptimizedSplit('\t');
                    var      chromosome = ReferenceNameUtilities.GetChromosome(_refNameToChromosome, vcfFields[VcfCommon.ChromIndex]);
                    CheckVcfOrder(vcfFields[VcfCommon.ChromIndex]);

                    (int start, bool foundError) = vcfFields[VcfCommon.PosIndex].OptimizedParseInt32();
                    if (foundError)
                    {
                        throw new InvalidDataException($"Unable to convert the VCF position to an integer: {vcfFields[VcfCommon.PosIndex]}");
                    }

                    if (InconsistentSampleFields(vcfFields))
                    {
                        int sampleCount = _sampleNames?.Length ?? 0;
                        throw new UserErrorException($"Inconsistent number of sample fields in line:\n{VcfLine}\nExpected number of sample fields: {sampleCount}");
                    }
                    vcfPosition = SimplePosition.GetSimplePosition(chromosome, start, vcfFields, _vcfFilter);
                }

                IEnumerable <ISimplePosition> simplePositions = _recomposer.ProcessSimplePosition(vcfPosition);
                foreach (var simplePosition in simplePositions)
                {
                    _queuedPositions.Enqueue(simplePosition);
                }

                if (VcfLine == null)
                {
                    break;
                }
            }

            return(_queuedPositions.Count == 0 ? null : _queuedPositions.Dequeue());
        }