Ejemplo n.º 1
0
        public static SimplePosition GetSimplePosition(string[] vcfFields, IDictionary <string, IChromosome> refNameToChromosome, bool isRecomposed = false)
        {
            var simplePosition = new SimplePosition
            {
                Start      = Convert.ToInt32(vcfFields[VcfCommon.PosIndex]),
                Chromosome = ReferenceNameUtilities.GetChromosome(refNameToChromosome, vcfFields[VcfCommon.ChromIndex]),
                RefAllele  = vcfFields[VcfCommon.RefIndex]
            };

            simplePosition.End          = vcfFields[VcfCommon.AltIndex].StartsWith("<") || vcfFields[VcfCommon.AltIndex] == "*" ? -1 : simplePosition.Start + simplePosition.RefAllele.Length - 1;
            simplePosition.AltAlleles   = vcfFields[VcfCommon.AltIndex].Split(",");
            simplePosition.VcfFields    = vcfFields;
            simplePosition.IsRecomposed = isRecomposed;
            simplePosition.IsDecomposed = new bool[simplePosition.AltAlleles.Length]; // fasle by default
            return(simplePosition);
        }
Ejemplo n.º 2
0
 private ISimplePosition GetNextSimplePosition()
 {
     while (_queuedPositions.Count == 0)
     {
         VcfLine = _reader.ReadLine();
         var simplePositions = _recomposer.ProcessSimplePosition(SimplePosition.GetSimplePosition(VcfLine, _refNameToChromosome));
         foreach (var simplePosition in simplePositions)
         {
             _queuedPositions.Enqueue(simplePosition);
         }
         if (VcfLine == null)
         {
             break;
         }
     }
     return(_queuedPositions.Count == 0 ? null: _queuedPositions.Dequeue());
 }
Ejemplo n.º 3
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());
        }
Ejemplo n.º 4
0
        public static SimplePosition GetSimplePosition(string[] vcfFields, IVcfFilter vcfFilter, IDictionary <string, IChromosome> refNameToChromosome, bool isRecomposed = false)
        {
            var simplePosition = new SimplePosition(
                ReferenceNameUtilities.GetChromosome(refNameToChromosome, vcfFields[VcfCommon.ChromIndex]),
                int.Parse(vcfFields[VcfCommon.PosIndex]),
                vcfFields[VcfCommon.RefIndex],
                vcfFields[VcfCommon.AltIndex].OptimizedSplit(','));

            if (vcfFilter.PassedTheEnd(simplePosition.Chromosome, simplePosition.Start))
            {
                return(null);
            }

            simplePosition.End          = vcfFields[VcfCommon.AltIndex].OptimizedStartsWith('<') || vcfFields[VcfCommon.AltIndex] == "*" ? -1 : simplePosition.Start + simplePosition.RefAllele.Length - 1;
            simplePosition.VcfFields    = vcfFields;
            simplePosition.IsRecomposed = isRecomposed;
            simplePosition.IsDecomposed = new bool[simplePosition.AltAlleles.Length]; // false by default
            simplePosition.Vids         = new string[simplePosition.AltAlleles.Length];
            simplePosition.LinkedVids   = new List <string> [simplePosition.AltAlleles.Length];
            return(simplePosition);
        }
Ejemplo n.º 5
0
        internal static IPosition ParseVcfLine(string vcfLine, VariantFactory variantFactory, IDictionary <string, IChromosome> refNameToChromosome)
        {
            var simplePosition = SimplePosition.GetSimplePosition(vcfLine, refNameToChromosome);

            return(Position.CreatFromSimplePosition(simplePosition, variantFactory));
        }