/// <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); } }
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(); }
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); }