Esempio n. 1
0
        public void Execute()
        {
            var bamAlignment      = new BamAlignment();
            int?chrFilterRefIndex = null;

            if (_chrFilter != null)
            {
                chrFilterRefIndex = _bamReader.GetReferenceIndex(_chrFilter);
            }

            while (true)
            {
                if (_bufferSize != null && _alignmentBuffer.Count > _bufferSize)
                {
                    FlushToBam();
                }


                var hasMoreReads = _bamReader.GetNextAlignment(ref bamAlignment, false);
                if (!hasMoreReads)
                {
                    break;
                }

                if (chrFilterRefIndex != null)
                {
                    if (bamAlignment.RefID < chrFilterRefIndex.Value)
                    {
                        continue;
                    }
                    if (bamAlignment.RefID > chrFilterRefIndex.Value)
                    {
                        OnLog("Ending BAM reading for " + _chrFilter + ".");
                        break;
                    }
                }

                if (_getUnpaired && _filter.ReachedFlushingCheckpoint(bamAlignment))
                {
                    var unpaired = _filter.GetFlushableUnpairedReads();
                    _alignmentBuffer.AddRange(unpaired);
                }

                var filteredReadPair = _filter.TryPair(bamAlignment);
                if (filteredReadPair != null)
                {
                    _alignmentBuffer.AddRange(_pairHandler.ExtractReads(filteredReadPair));
                }
            }

            if (_getUnpaired)
            {
                var unpaired = _filter.GetFlushableUnpairedReads();
                _alignmentBuffer.AddRange(unpaired);
            }
            FlushToBam();
        }
 private void FlushUnpaired()
 {
     if (_unpaired == null)
     {
         var unpaired = _filter.GetFlushableUnpairedReads();
         _unpaired = new Queue <ReadPair>(unpaired.Select(r => new ReadPair(r)));
     }
 }
Esempio n. 3
0
        public void Execute()
        {
            var bamAlignment     = new BamAlignment();
            var bamWriterHandles = _bamWriter.GenerateHandles();

            int?chrFilterRefIndex = null;

            if (_chrFilter != null)
            {
                chrFilterRefIndex = _bamReader.GetReferenceIndex(_chrFilter);
            }

            const int       READ_BUFFER_SIZE = 64;
            List <ReadPair> readPairBuffer   = new List <ReadPair>(READ_BUFFER_SIZE);

            while (true)
            {
                var hasMoreReads = _bamReader.GetNextAlignment(ref bamAlignment, false);
                if (!hasMoreReads)
                {
                    break;
                }

                if (chrFilterRefIndex != null)
                {
                    if (bamAlignment.RefID < chrFilterRefIndex.Value)
                    {
                        continue;
                    }
                    if (bamAlignment.RefID > chrFilterRefIndex.Value)
                    {
                        Logger.WriteToLog("Ending BAM reading for " + _chrFilter + ".");
                        break;
                    }
                }

                if (_getUnpaired && _filter.ReachedFlushingCheckpoint(bamAlignment))
                {
                    ExecuteTask(new FlushableUnpairedReadsTask(_filter.GetFlushableUnpairedReads(), bamWriterHandles));
                }

                var filteredReadPair = _filter.TryPair(bamAlignment);
                if (filteredReadPair != null)
                {
                    readPairBuffer.Add(filteredReadPair);
                    if (readPairBuffer.Count >= READ_BUFFER_SIZE - 1)
                    {
                        ExecuteTask(new ExtractReadsTask(_pairHandlers, readPairBuffer, bamWriterHandles, _filter));

                        readPairBuffer = new List <ReadPair>(READ_BUFFER_SIZE);
                    }
                }
            }

            if (readPairBuffer.Count > 0)
            {
                ExecuteTask(new ExtractReadsTask(_pairHandlers, readPairBuffer, bamWriterHandles, _filter));
            }

            if (_getUnpaired)
            {
                ExecuteTask(new FlushableUnpairedReadsTask(_filter.GetFlushableUnpairedReads(), bamWriterHandles));
            }

            WaitForFinishTask.WaitUntilZeroTasks();
        }