/// <summary>
        /// Perform both distribution and nucleotide tests on fqfile component
        /// </summary>
        public override void performJointTests()
        {
            Stopwatch stopwatch = new Stopwatch();

            stopwatch.Start();

            totalNucleotides();
            resetCounts();

            fillDistributionList();

            int subZeroOffset = SequencerDiscriminator.getSequencerSpecifier(sequencerType).getSubZeroQualities();

            Parallel.For(0, index, new ParallelOptions {
                MaxDegreeOfParallelism = (Preferences.getInstance().getCoresToUse())
            },
                         // Initialize the local states
                         () => new FqSequence_IO(sequencerType, "Sequence Tests", this),
                         // Accumulate the thread-local computations in the loop body
                         (i, loop, syncLists) =>
            {
                for (int j = 0; j < fastqSeq[i].getFastqSeqSize(); j++)
                {
                    char nucleotide = Fq_FILE_MAP[fastqSeq[i].getFastqSeqAtPosition(j)].getNucleotide();

                    if (nucleotide == 'N')
                    {
                        Interlocked.Increment(ref nCount);
                    }
                    else if (nucleotide == 'C')
                    {
                        Interlocked.Increment(ref cCount);
                    }
                    else if (nucleotide == 'G')
                    {
                        Interlocked.Increment(ref gCount);
                    }

                    int qualityScore = Fq_FILE_MAP[fastqSeq[i].getFastqSeqAtPosition(j)].getQualityScore();

                    int currentPop = syncLists.distributes[(qualityScore + subZeroOffset)];
                    syncLists.distributes[(qualityScore + subZeroOffset)] = (currentPop + 1);
                }
                return(syncLists);
            },
                         syncLists => {
                Object locker = new object();
                lock (locker)
                {
                    this.CombineDistributionLists(syncLists.distributes);
                }
            }
                         );

            nPercent = (((double)nCount / totalNucs) * 100);
            cPercent = (((double)cCount / totalNucs) * 100);
            gPercent = (((double)gCount / totalNucs) * 100);
            stopwatch.Stop();
            Console.Write("Joint tests completed: " + stopwatch.Elapsed + "\n");
        }
        /// <summary>
        /// Performs a distribution test on the quality reads of the fastq file component
        /// </summary>
        /// <returns>A list that outlines the distribution of qualities within this file component</returns>
        public override List <int> performDistributionTest()
        {
            fillDistributionList();
            int subZeroOffset = SequencerDiscriminator.getSequencerSpecifier(sequencerType).getSubZeroQualities();

            Parallel.For(0, index, new ParallelOptions {
                MaxDegreeOfParallelism = (Preferences.getInstance().getCoresToUse())
            },
                         // Initialize the local states
                         () => new FqSequence_IO(sequencerType, "Sequence Tests", this),
                         // Accumulate the thread-local computations in the loop body
                         (i, loop, syncLists) =>
            {
                for (int j = 0; i < fastqSeq[i].getFastqSeqSize(); j++)
                {
                    int qualityScore = Fq_FILE_MAP[fastqSeq[i].getFastqSeqAtPosition(j)].getQualityScore();
                    int currentPop   = syncLists.distributes[(qualityScore + subZeroOffset)];
                    syncLists.distributes[(qualityScore + subZeroOffset)] = (currentPop + 1);
                }
                return(syncLists);
            },
                         syncLists =>
            {
                Object locker = new object();
                lock (locker)
                { this.CombineDistributionLists(syncLists.distributes); }
            });
            return(distribution);
        }
 /// <summary>
 /// Initializes the distribution list for the object.
 /// </summary>
 private void fillDistributionList()
 {
     distribution = new List <int>(SequencerDiscriminator.getSequencerSpecifier(sequencerType).getDistributionSpread());
     for (int j = 0; j <= SequencerDiscriminator.getSequencerSpecifier(sequencerType).getDistributionSpread(); j++)
     {
         distribution.Add(0);
     }
 }
Example #4
0
 public void deconstructHeader(String sequencerType)
 {
     MachineName  = SequencerDiscriminator.getSequencerSpecifier(sequencerType).getMachineName(Header);
     FlowCellLane = SequencerDiscriminator.getSequencerSpecifier(sequencerType).getFlowCellLane(Header);
     TileNumber   = SequencerDiscriminator.getSequencerSpecifier(sequencerType).getTileNumber(Header);
     XCoord       = SequencerDiscriminator.getSequencerSpecifier(sequencerType).getXCoOrd(Header);
     YCoord       = SequencerDiscriminator.getSequencerSpecifier(sequencerType).getYCoOrd(Header);;
 }
        /// <summary>
        /// Draws a distribution for the quality scores for the FastqComponent_Details handle within this class
        /// </summary>
        public void DrawDistribution()
        {
            Console.WriteLine("Drawing new sequence length distribution!");
            double[] sequenceDistribution = componentDetails.Distribution.Select(i => (double)i).ToArray();
            double[] x     = new double[sequenceDistribution.Length];
            int      count = 0;

            for (int i = 0; i < x.Length; i++)
            {
                x[i] = count - SequencerDiscriminator.getSequencerSpecifier(componentDetails.sequencerType).getSubZeroQualities();
                count++;
            }


            Size      size = graphControl.ClientSize;
            Rectangle rect = new Rectangle();

            rect.Size = size;

            // This is to remove all plots
            graphControl.GraphPane = new GraphPane();
            graphControl.GraphPane.CurveList.Clear();
            graphControl.GraphPane.Rect = rect;

            // GraphPane object holds one or more Curve objects (or plots)
            GraphPane myPane = graphControl.GraphPane;

            myPane.Title.Text = "Quality Distribution " + componentDetails.getGraphName();

            // set X and Y axis titles
            myPane.XAxis.Title.Text = "Quality";
            myPane.YAxis.Title.Text = "Nucleotide Count";

            // PointPairList holds the data for plotting, X and Y arrays
            PointPairList spl1 = new PointPairList(x, sequenceDistribution);

            // Add bars to myPane object
            BarItem  myBar1  = myPane.AddBar(FastqChartTypes.SequenceLengthDistribution.ToString(), spl1, Color.Red);
            LineItem myLine1 = myPane.AddCurve(FastqChartTypes.SequenceLengthDistribution.ToString(), spl1, Color.Red, SymbolType.None);

            myLine1.Line.Width = 1.0F;

            // I add all three functions just to be sure it refeshes the plot.
            graphControl.AxisChange();
            graphControl.Invalidate();
            graphControl.Refresh();
        }
Example #6
0
 public FqSequence_IO(String sequencerType, String taskType, FqFile_Component fqFile)
 {
     if (taskType == SEQUENCE_TESTS_TASK)
     {
         distributes = new List <int>(40);
         for (int j = 0; j <= SequencerDiscriminator.getSequencerSpecifier(sequencerType).getDistributionSpread(); j++)
         {
             distributes.Add(0);
         }
         perSeqQuals   = new int[fqFile.getMaxSeqSize()];
         subZeroOffset = SequencerDiscriminator.getSequencerSpecifier(sequencerType).getSubZeroQualities();
     }
     else if (taskType == ADAPTER_TASK)
     {
         adapters        = Adapters.getInstance().getAdaptersList();
         removedAdapters = null;
     }
 }
 public static void register()
 {
     //SequencerSpecifier value = sequencer as SequencerSpecifier;
     SequencerDiscriminator.register(sequencerName, sequencer);
 }
 public static void register()
 {
     SequencerDiscriminator.register(sequencerName, sequencer);
 }
 public void calculateQualityScore(string sequencerType)
 {
     qualityScore = SequencerDiscriminator.getSequencerSpecifier(sequencerType).getQualityScore(qualityRead);
     PHREDScore   = SequencerDiscriminator.getSequencerSpecifier(sequencerType).getPHREDScore(qualityScore);
 }