'**************************************************************************** '* Copyright (C) 2007 Peter Mortensen and Matthias Mann * '* This file is part of MSQuant. * '* * '* MSQuant is distributed under the terms of * '* the GNU General Public License. See src/COPYING.TXT or * '* <http://www.gnu.org/licenses/gpl.txt> for details. * '* * '* MSQuant is free software; you can redistribute it * '* and/or modify it under the terms of the GNU * '* General Public License as published by the Free * '* Software Foundation; either version 2 of the * '* License, or (at your option) any later version. * '* * '* MSQuant is distributed in the hope that it will be * '* useful, but WITHOUT ANY WARRANTY; without even the * '* implied warranty of MERCHANTABILITY or FITNESS FOR * '* A PARTICULAR PURPOSE. See the GNU General Public * '* License for more details. * '* * '* You should have received a copy of the GNU General * '* Public License along with MSQuant; if not, write to * '* the Free Software Foundation, Inc., 59 Temple * '* Place, Suite 330, Boston, MA 02111-1307 USA * '* * '* Purpose: plotting of recalibration related values. * '* * '**************************************************************************** '**************************************************************************** '* CEBI * '* Software Development Group * '* Peter Mortensen * '* E-mail: NUKESPAMMERSdrmortensen@get2netZZZZZZ.dk * '* WWW: http://www.cebi.sdu.dk/ * '* * '* Program for post-processing of result from search in mass * '* spectrometric data. * '* * '* FILENAME: frmPeptideFilters.vb * '* TYPE: VISUAL_BASIC * '* * '* CREATED: PM 2007-09-02 Vrs 1.0. * '* UPDATED: PM 2007-xx-xx * '* * '**************************************************************************** Option Strict On Option Explicit On Imports System.Text 'For StringBuilder Imports System Imports System.Reflection 'For MemberInfo. Imports ZedGraph Imports SDUPutility 'For SDUPstatistics Imports massSpectrometryBase 'For peptideFilterSpecificationStructure. Imports MolecularSharedStructures 'For ProteinHitStructure. Imports MSQuant 'For class quantApplication '**************************************************************************** '* <placeholder for header> * '**************************************************************************** Public Class frmRecalibrationVisualisation Private Structure MCRpoint Dim MCR As Double 'Depends Dim calibratedMCR As Double Dim MCRdiff As Double 'Derived, difference of the two above. Dim MCRrelDiff As Double 'Relative version of MCRdiff. In ppm. Dim effectiveDiffValue As Double 'Depends on unit, Th, mTH, Da, ppm, etc. End Structure 'MCRpoint 'Not needed. Delete at any time. ''Changed PM_RECALIB_VISUAL_TRENDLINE 2007-12-05 'Private mLowestMCR As MCRpoint 'Private mMiddleMCR As MCRpoint 'To make non-linear line in MCR clear for '' e.g. frequency domain recalibration. 'Private mHighestMCR As MCRpoint Private mUncalibMassErrors As PointPairList Private mCaliMassErrors As PointPairList 'Changed PM_RECALIB_VISUAL_TRENDLINE 2007-12-07 Private mTrendLine As PointPairList 'E.g 3 poins: for lowest, highest ' and in-between MCR. Or 5 points. 'Changed PM_PLOTSPACE 2007-11-17 Private mUncalibValues As statsStructure 'For manual control ' of Xaxis zoom state. The default choices of ZedGraph seems ' to inappropriate. Private mUncalibBinArray As Double() Private mUncalibBinXlabels As String() Private mCalibBinArray As Double() Private mCalibBinXlabels As String() Private mBinSize As Double Private mUncalibMedianErrors As PointPairList Private mCalibMedianErrors As PointPairList 'Changed PM_RECALIB_VISUAL_BYRETENTIONTIME 2008-02-28 Private mUncalibRetTvsMassErrors As PointPairList Private mCalibRetTvsMassErrors As PointPairList Private mProteinsSubset As Generic.List(Of Integer) Private mProteinList As Generic.List(Of ProteinHitStructure) Private mPeptideFilter As peptideFilterStructure Private mApplication As quantApplication 'Changed PM_RAWFILE_PEPFILTER 2007-11-17 Private mRawFiles() As fileSpecStructure Private mStartingUp As Boolean Private mCurMassAccUnit As massErrorUnitEnum Private mDisplayType As massErrorDisplayTypeEnum 'Changed PM_RECALIB_VISUAL_ID_IN_TITLE 2007-11-06 Private mMascotResultFile As String 'For display in this ' window's title line. Private mScrapSB As StringBuilder 'Changed PM_RECALIB_VISUAL_TRENDLINE 2007-12-05 Private mRecalibrator As SDUPrecalibrator Private WithEvents mFilterForm As frmPeptideFilters 'Changed PM_RECALIB_VISUAL_SAVE 2007-09-04 'Needed because this dialog can be started from two different places 'and clients needs to know when this dialog is dismissed (or rather, 'right now, when the peptide filter dialog for it is) and with 'some data that needs to be persisted. Public Event calibVisualDismissed( _ ByVal aSender As Object, ByVal anEvent As pepFilterEventArgs) 'Changed PM_RECALIB_VISUAL_CLICK_TO_PEPTIDEINFO 2008-03-12 Private mParent As frmProteinList Private Enum massErrorUnitEnum enumUnitDa = 367 enumUnitPPM enumUnitMilliDa 'Changed PM_VISUALISATION_ABSOLUTE_MCR 2007-11-02 enumUnitTh enumUnitMilliTh enumUnitPPB End Enum 'massErrorUnitEnum Private Enum massErrorDisplayTypeEnum enumByMCR = 367 enumBinned enumMedianErrorByMCR 'Changed PM_RECALIB_VISUAL_BYRETENTIONTIME 2008-02-28 enumByRetT End Enum 'massErrorDisplayTypeEnum '**************************************************************************** '* <placeholder for header> * '**************************************************************************** Public Sub New( _ ByRef aParent As frmProteinList, _ ByRef aProteinsSubset_dataStructureIndices2 As Generic.List(Of Integer), _ ByRef aProteinList2 As Generic.List(Of ProteinHitStructure), _ ByVal aPeptideFilter As peptideFilterStructure, _ ByRef anApp As quantApplication, _ ByRef anInMascotResultFile As String, _ ByRef anInRawFiles() As fileSpecStructure, _ ByRef anInRecalibrator As SDUPrecalibrator _ ) ' This call is required by the Windows Form Designer. InitializeComponent() ' Add any initialization after the InitializeComponent() call. mStartingUp = True 'Changed PM_RECALIB_VISUAL_CLICK_TO_PEPTIDEINFO 2008-03-12 mParent = aParent 'Save for use when the peptide filter changes. mProteinsSubset = aProteinsSubset_dataStructureIndices2 mProteinList = aProteinList2 mApplication = anApp 'Changed PM_RAWFILE_PEPFILTER 2007-11-17 mRawFiles = anInRawFiles 'Changed PM_RECALIB_VISUAL_TRENDLINE 2007-12-05 mRecalibrator = anInRecalibrator 'Changed PM_CANCEL_ALSO_SAVES_PEPTFILT_BUG 2007-09-06. Not ' strictly necessary as we don't have a cancel in this ' dialog (in fact the settings are directly saved each ' time the sub dialog, the peptide filter dialog, is OK'ed), 'mPeptideFilter = aPeptideFilter mPeptideFilter = aPeptideFilter.deepCopy2() mBinSize = -1.0 'Undefined. Expected to be set later in initialisation. 'Changed PM_RECALIB_VISUAL_DEFAULT_THOMSON 2007-11-06 'mCurMassAccUnit = massErrorUnitEnum.enumUnitDa mCurMassAccUnit = massErrorUnitEnum.enumUnitTh 'Changed PM_RECALIB_VISUAL_DEFAULT_MEDIANERRORS 2007-11-06 'mDisplayType = massErrorDisplayTypeEnum.enumByMCR mDisplayType = _ massErrorDisplayTypeEnum.enumMedianErrorByMCR 'Assume all set to false at design time. Select Case mCurMassAccUnit Case massErrorUnitEnum.enumUnitDa rbUnitDa.Checked = True Case massErrorUnitEnum.enumUnitPPM rbUnitPPM.Checked = True Case massErrorUnitEnum.enumUnitMilliDa rbUnitMilliDa.Checked = True 'Changed PM_VISUALISATION_ABSOLUTE_MCR 2007-11-02 Case massErrorUnitEnum.enumUnitTh rbUnitTh.Checked = True Case massErrorUnitEnum.enumUnitMilliTh rbUnitMilliTh.Checked = True Case massErrorUnitEnum.enumUnitPPB rbUnitPPB.Checked = True Case Else Trace.Assert(False, _ "PIL ASSERT. Select Case never fall-through") End Select 'Assume all set to false at design time. Select Case mDisplayType Case massErrorDisplayTypeEnum.enumByMCR rbByMCR.Checked = True Case massErrorDisplayTypeEnum.enumBinned rbBinnedMassErrors.Checked = True Case massErrorDisplayTypeEnum.enumMedianErrorByMCR rbMedianErrorByMassWindow.Checked = True Case Else Trace.Assert(False, _ "PIL ASSERT. Select Case never fall-through") End Select 'Changed PM_RECALIB_VISUAL_ID_IN_TITLE 2007-11-06 mMascotResultFile = anInMascotResultFile End Sub 'Constructor. '**************************************************************************** '* <placeholder for header> * '**************************************************************************** Private Sub frmRecalibrationVisualisation_Load( _ ByVal aSender As Object, ByVal anEvent As System.EventArgs) _ Handles Me.Load mStartingUp = True 'Just in case. Me.updateDisplay() mStartingUp = False End Sub 'frmRecalibrationVisualisation_Load '**************************************************************************** '* <placeholder for header> * '**************************************************************************** Private Sub displayData( _ ByRef aProteinsSubset_dataStructureIndices2 As Generic.List(Of Integer), _ ByRef aProteinList2 As Generic.List(Of ProteinHitStructure), _ ByVal aPeptideFilter As peptideFilterStructure, _ ByVal aMassAccUnit As massErrorUnitEnum) setupDatastructures( _ aProteinsSubset_dataStructureIndices2, _ aProteinList2, _ aPeptideFilter, _ aMassAccUnit) createTheGraphs(aMassAccUnit, mDisplayType) updatePeptideFilterSummary(aPeptideFilter) Dim peptides As Integer = mUncalibMassErrors.Count() 'Changed PM_RECALIB_VISUAL_SELECTED_PROTEINS_IN_TITLE 2007-11-26 Dim useAllProteins As Boolean = _ aProteinsSubset_dataStructureIndices2 Is Nothing Dim titleStr As String = Nothing 'Keep compiler happy. If useAllProteins Then titleStr = "All proteins" Else Dim proteins As Integer = aProteinsSubset_dataStructureIndices2.Count() titleStr = proteins & " selected proteins" End If 'Changed PM_RECALIB_VISUAL_ID_IN_TITLE 2007-11-06 ''lblPeptides.Text = peptides & " peptides." 'Me.Text = "Recalibration Visualisation, " & peptides & " peptides." If mScrapSB Is Nothing Then 'Lazy instantitation mScrapSB = New StringBuilder(100) End If mScrapSB.Length = 0 mScrapSB.Append("Recalibration Visualisation. ") mScrapSB.Append(titleStr) mScrapSB.Append(". ") 'Changed PM_RECALIB_VISUAL_SELECTED_PROTEINS_IN_TITLE 2007-11-26 mScrapSB.Append(peptides) mScrapSB.Append(" peptides. ") mScrapSB.Append(mMascotResultFile) Me.Text = mScrapSB.ToString() End Sub 'displayData 'Changed PM_REFACTOR 2007-10-01 '**************************************************************************** '* <placeholder for header> * '**************************************************************************** Private Shared Sub effectiveErrorValues( _ ByVal anInPept As PeptideHitStructure, _ ByVal aMassAccUnit As massErrorUnitEnum, _ ByRef anOutUncalibMCR As Double, _ ByRef anOutUncalibValue As Double, _ ByRef anOutCalibValue As Double, _ ByRef anOutTheoMCR As Double) 'Changed PM_RECALIB_VISUAL_PLOTX_THEO_MCR 2008-02-28 ' New parameter: anOutTheoMCR Dim uncalibMCR2 As Double = anInPept.measuredMCR Dim charge As Integer = anInPept.charge Dim theoMCR As Double = _ PILmassCalc.chargeTransform(anInPept.MascotCalculatedMass, 0, charge) Dim merr2 As massErrorStructure = helper.massErrors(anInPept) Dim uncalibError As Double = -9.9 Dim calibError As Double = -19.9 Select Case aMassAccUnit Case massErrorUnitEnum.enumUnitDa 'Add new option: enumUnitTh 'Perhaps phase out enumUnitDa and enumUnitMilliDa?? uncalibError = merr2.uncalibMassError calibError = merr2.calibMassError Case massErrorUnitEnum.enumUnitPPM uncalibError = merr2.uncalibMassRelativeError 'MCR instead? calibError = merr2.calibMassRelativeError 'MCR instead? Case massErrorUnitEnum.enumUnitMilliDa uncalibError = 1000.0 * merr2.uncalibMassError calibError = 1000.0 * merr2.calibMassError 'Changed PM_VISUALISATION_ABSOLUTE_MCR 2007-11-02 Case massErrorUnitEnum.enumUnitTh uncalibError = merr2.uncalibMCRError calibError = merr2.calibMCRError Case massErrorUnitEnum.enumUnitMilliTh uncalibError = 1000.0 * merr2.uncalibMCRError calibError = 1000.0 * merr2.calibMCRError Case massErrorUnitEnum.enumUnitPPB uncalibError = _ 1000.0 * merr2.uncalibMassRelativeError 'MCR instead? calibError = _ 1000.0 * merr2.calibMassRelativeError 'MCR instead? Case Else Trace.Assert(False, _ "PIL ASSERT. Select Case never fall-through") End Select anOutUncalibValue = uncalibError anOutCalibValue = calibError anOutUncalibMCR = uncalibMCR2 anOutTheoMCR = theoMCR End Sub 'effectiveErrorValues '**************************************************************************** '* <placeholder for header> * '**************************************************************************** Private Shared Sub buildBin( _ ByRef anInBinningArray As Integer(), _ ByVal aStartMassError As Double, _ ByVal aBinSize As Double, _ ByRef anOutBinningArray As Double(), _ ByRef anOutXlabels As String() _ ) Dim lastIndex As Integer = anInBinningArray.Length() - 1 ReDim anOutBinningArray(lastIndex) ReDim anOutXlabels(lastIndex) 'First pass. Find bin with max count. To use as 'center to compute accumulative numbers for each bin. Dim indexForMax As Integer = -1 Dim maxCount As Integer = -1 Dim countSumInt As Integer = 0 'Deli Dim j As Integer For j = 0 To lastIndex Dim count As Integer = anInBinningArray(j) countSumInt += count If maxCount < count Then maxCount = count indexForMax = j End If anOutBinningArray(j) = count Next Dim countSum As Double = countSumInt 'Deliberately double. Dim accum(lastIndex) As Double 'Given center bin, symmetrical ' extension to the left and to the right, accumulative ' percentage: relative number peptides compared to total ' that are within a certain mass deviation (from the center bin). Dim accumCount As Integer = maxCount accum(indexForMax) = 100.0 * accumCount / countSum Dim leftIndex As Integer = indexForMax - 1 Dim rightIndex As Integer = indexForMax + 1 Dim end2 As Boolean = False While Not end2 Dim leftOn As Boolean = leftIndex >= 0 Dim rightOn As Boolean = rightIndex <= lastIndex If leftOn Then accumCount += anInBinningArray(leftIndex) End If If rightOn Then accumCount += anInBinningArray(rightIndex) End If Dim accumRel As Double = 100.0 * accumCount / countSum If leftOn Then accum(leftIndex) = accumRel End If If rightOn Then accum(rightIndex) = accumRel End If leftIndex -= 1 rightIndex += 1 If Not leftOn AndAlso Not rightOn Then end2 = True End If End While 'Extending left and right from bin center. Dim startMassError As Double = aStartMassError Dim endMassError As Double = startMassError + aBinSize Dim labelSB As StringBuilder = New StringBuilder(25) 'Later: save on strings by having strings for start and ' end and setting the start str to the end str, ' like for the numbers. For j = 0 To lastIndex Dim count As Integer = anInBinningArray(j) labelSB.Length = 0 If count > 0 Then Dim relAccum As Double = accum(j) labelSB.Append(relAccum.ToString("0.0")) labelSB.Append("%.") labelSB.Append(ControlChars.NewLine) labelSB.Append("[") 'Later: significant digits instead of fixed number of digits. labelSB.Append(startMassError.ToString("G2")) labelSB.Append(";") labelSB.Append(endMassError.ToString("G2")) labelSB.Append("]") End If anOutXlabels(j) = labelSB.ToString() startMassError = endMassError endMassError += aBinSize Next End Sub 'buildBin '**************************************************************************** '* <placeholder for header> * '**************************************************************************** Private Function initStatArray( _ ByVal aSize As Integer) _ As statsStructure() Dim lastIndex As Integer = aSize - 1 Dim toReturn(lastIndex) As statsStructure Dim j As Integer For j = 0 To lastIndex Step 1 toReturn(j) = New statsStructure(j, True, False) Next j Return toReturn End Function 'initStatArray '**************************************************************************** '* <placeholder for header> * '**************************************************************************** Private Shared Function setupMCRpoint( _ ByVal anUncalibMCRvalue As Double, _ ByRef anInRecalibrator As SDUPrecalibrator, _ ByVal aCalibID As Integer, _ ByVal aMassAccUnit As massErrorUnitEnum, _ ByRef anInOutTrendLine As PointPairList) _ As MCRpoint 'Trendline: effectively zero error points in the calibrated domain are ' transformed into a non-zero error in the uncalibrated domain. Dim toReturn As MCRpoint toReturn.MCR = anUncalibMCRvalue toReturn.calibratedMCR = _ anInRecalibrator.uncalib2calib(toReturn.MCR, aCalibID) toReturn.MCRdiff = toReturn.MCR - toReturn.calibratedMCR toReturn.MCRrelDiff = 1000000.0 * toReturn.MCRdiff / toReturn.MCR Dim effectiveDiffValue As Double Dim charge As Integer = 1 ' Does it make much sense to use the ' plot MCR vs. Da error?? Dim DaDiff As Double = charge * toReturn.MCRdiff 'Approximate value ?? Select Case aMassAccUnit Case massErrorUnitEnum.enumUnitDa effectiveDiffValue = DaDiff Case massErrorUnitEnum.enumUnitPPM effectiveDiffValue = toReturn.MCRrelDiff Case massErrorUnitEnum.enumUnitMilliDa effectiveDiffValue = 1000 * DaDiff Case massErrorUnitEnum.enumUnitTh effectiveDiffValue = toReturn.MCRdiff Case massErrorUnitEnum.enumUnitMilliTh effectiveDiffValue = 1000 * toReturn.MCRdiff Case massErrorUnitEnum.enumUnitPPB effectiveDiffValue = 1000 * toReturn.MCRrelDiff Case Else Trace.Assert(False, _ "PIL ASSERT. Select Case never fall-through") End Select 'aMassAccUnit toReturn.effectiveDiffValue = effectiveDiffValue anInOutTrendLine.Add( _ toReturn.MCR, toReturn.effectiveDiffValue, "") Return toReturn End Function 'setupMCRpoint '**************************************************************************** '* <placeholder for header> * '**************************************************************************** Private Sub setupDatastructures( _ ByRef aProteinsSubset_dataStructureIndices2 As Generic.List(Of Integer), _ ByRef aProteinList2 As Generic.List(Of ProteinHitStructure), _ ByVal aPeptideFilter As peptideFilterStructure, _ ByVal aMassAccUnit2 As massErrorUnitEnum) mUncalibMassErrors = New PointPairList() mCaliMassErrors = New PointPairList() 'Changed PM_RECALIB_VISUAL_TRENDLINE 2007-12-07 mTrendLine = New PointPairList() 'For trend line in uncalibrated ' scatter plot. mUncalibMedianErrors = New PointPairList() mCalibMedianErrors = New PointPairList() 'Changed PM_RECALIB_VISUAL_BYRETENTIONTIME 2008-02-28 mUncalibRetTvsMassErrors = New PointPairList() mCalibRetTvsMassErrors = New PointPairList() Dim useAllProteins As Boolean = _ aProteinsSubset_dataStructureIndices2 Is Nothing If True Then 'Changed PM_REFACTOR 2007-10-04 ' Dim absMCRerrorSum_uncalib As Double = 0.0 ' Dim absMCRerrorSum_calib As Double = 0.0 ' ' Dim minMCRerror_uncalib As Double = 1.0E+19 ' Dim maxMCRerror_uncalib As Double = -1.0E+19 ' ' Dim minMCRerror_calib As Double = 1.0E+19 ' Dim maxMCRerror_calib As Double = -1.0E+19 Dim uncalibValues As statsStructure = _ New statsStructure(1, False, False) Dim calibValues As statsStructure = _ New statsStructure(2, False, False) Dim peptides2 As Integer = 0 Dim uncalibMCR2 As Double = -19.9 Dim theoMCR As Double = -19.9 Dim uncalibError As Double = -9.9 Dim calibError As Double = -19.9 Dim len As Integer If useAllProteins Then len = aProteinList2.Count() Else len = aProteinsSubset_dataStructureIndices2.Count() End If Dim tagSB As StringBuilder = New StringBuilder(50) Dim proteinIndex As Integer Dim lastIndex As Integer = len - 1 Dim i As Integer 'First pass. For scatter plot and collecting information ' for second pass. For i = 0 To lastIndex 'Protein loop. If useAllProteins Then proteinIndex = i Else proteinIndex = aProteinsSubset_dataStructureIndices2(i) End If Dim someProt As ProteinHitStructure = _ aProteinList2(proteinIndex) 'Changed PM_INTERNALPROTINDEX_BUG 2007-09-07 Dim proteinNumber As Integer = someProt.hitNumber Dim pept As PeptideHitStructure = _ helper.blankPeptide() 'Keep compiler happy. Dim pepIter As peptideListIterator = _ New peptideListIterator(someProt.peptides, aPeptideFilter) While Not pepIter.nextPeptide(pept) 'E.g. calibError is a different value depending ' on whether in Th, mTH, Da or ppm... effectiveErrorValues( _ pept, aMassAccUnit2, _ uncalibMCR2, uncalibError, calibError, theoMCR) 'Changed PM_RECALIB_VISUAL_PLOTX_THEO_MCR 2008-02-28 'Dim xMCR As Double = uncalibMCR2 Dim xMCR As Double = theoMCR If True Then 'Finding properties about the set of peptides. uncalibValues.update(xMCR, uncalibError) 'Note: same x value. calibValues.update(xMCR, calibError) End If Dim tag2 As String = Nothing If True Then tagSB.Length = 0 tagSB.Append("q") tagSB.Append(pept.queryNumber) tagSB.Append(",") tagSB.Append(pept.AASequence) tagSB.Append(",sc") tagSB.Append(pept.MascotScore) tagSB.Append(",ch=") tagSB.Append(pept.charge) tagSB.Append(",prot ") 'Changed PM_INTERNALPROTINDEX_BUG 2007-09-07 'tagSB.Append(proteinIndex + 1) tagSB.Append(proteinNumber) tagSB.Append(".") tag2 = tagSB.ToString() mUncalibMassErrors.Add( _ xMCR, uncalibError, tag2) 'Uncalib on x to have exactly the same x-values. mCaliMassErrors.Add( _ xMCR, calibError, tag2) End If 'Changed PM_RECALIB_VISUAL_BYRETENTIONTIME 2008-02-28 If True Then Dim xRetT As Double = pept.MSMSretentionTimeMinutes Dim tag3 As String = Nothing mUncalibRetTvsMassErrors.Add( _ xRetT, uncalibError, tag2) 'Uncalib on x to have exactly the same x-values. mCalibRetTvsMassErrors.Add( _ xRetT, calibError, tag2) End If 'Block. retT vs. mass error. End While 'Through peptides. For: first pass for scatter ' plot and collecting information for second pass. Next i 'Through proteins. For: first pass for scatter ' plot and collecting information for second pass. 'Changed PM_RECALIB_VISUAL_TRENDLINE 2007-12-05 If True Then Dim rawFileID As Integer = mPeptideFilter.rawFileID Dim tag As Integer If rawFileID < 0 Then tag = SDUPrecalibrator.ALL_TAGCODE Else tag = rawFileID End If Dim minMCR As Double = uncalibValues.minX Dim maxMCR As Double = uncalibValues.maxX Dim middleMCR As Double = (maxMCR + minMCR) / 2 Dim firstQuarterMCR As Double = (minMCR + middleMCR) / 2 Dim lastQuarterMCR As Double = (middleMCR + maxMCR) / 2 Dim lowestMCRp As MCRpoint = _ setupMCRpoint( _ minMCR, mRecalibrator, tag, aMassAccUnit2, mTrendLine) Dim quarter1p As MCRpoint = _ setupMCRpoint( _ firstQuarterMCR, mRecalibrator, tag, aMassAccUnit2, _ mTrendLine) Dim middleMCRp As MCRpoint = _ setupMCRpoint( _ middleMCR, mRecalibrator, tag, aMassAccUnit2, mTrendLine) Dim quarter2p As MCRpoint = _ setupMCRpoint( _ lastQuarterMCR, mRecalibrator, tag, aMassAccUnit2, _ mTrendLine) Dim highestMCRp As MCRpoint = _ setupMCRpoint( _ maxMCR, mRecalibrator, tag, aMassAccUnit2, mTrendLine) End If 'Changed PM_PLOTSPACE 2007-11-17 mUncalibValues = uncalibValues 'Record for later use in plotting. Dim binningArray_calib As Integer() = Nothing 'Dim binSize_calib As Double Dim calibBins As Integer Dim binSize_common As Double 'Note: calib before uncalib as we use the binsize ' from calibrated MCR errors in the uncalibrated. 'y-values in this case as it is the mass errors (that we 'want to bin). SDUPstatistics.binningSetup_computeBinSize( _ calibValues.sumOfabsY, calibValues.N, _ calibValues.minY, calibValues.maxY, _ binningArray_calib, binSize_common, _ calibBins) Dim xLabels_calib(calibBins - 1) As String Dim binningArray_uncalib As Integer() = Nothing 'Dim binSize_uncalib As Double Dim uncalibBins As Integer 'Note: use the same bin size as for calibrated. The ' start mass error is not the same however. 'y-values in this case as it is the mass errors (that we 'want to bin). ' 'Note: we use another function as we want to use the bin size ' that was computed above SDUPstatistics.binningSetup_inputBinSize( _ uncalibValues.minY, uncalibValues.maxY, _ binSize_common, _ binningArray_uncalib, _ uncalibBins) Dim xLabels_uncalib(uncalibBins - 1) As String Trace.Assert(calibValues.N = uncalibValues.N, _ "PIL ASSERT. " & _ "Count for calibValues and uncalibValues are not the same...") Dim massWindowCommon As Double = 100.0 Dim windowed_calib() As statsStructure = Nothing 'x values (MCR) because we don't actual want to bin, but rather 'setup functions for preparing to compute statistics for 'each mass window and in particular the median MCR error 'for each window. If True Then Dim binArr_averageMCRerr_calib As Integer() = Nothing Dim averageMCRerr_calibBins As Integer SDUPstatistics.binningSetup_inputBinSize( _ calibValues.minX, calibValues.maxX, _ massWindowCommon, _ binArr_averageMCRerr_calib, _ averageMCRerr_calibBins) windowed_calib = Me.initStatArray(averageMCRerr_calibBins) End If Dim windowed_uncalib() As statsStructure = Nothing 'x values (MCR) because we don't actual want to bin, but rather 'setup functions for preparing to compute statistics for 'each mass window and in particular the median MCR error 'for each window. If True Then Dim binArr_averageMCRerr_uncalib As Integer() = Nothing Dim averageMCRerr_uncalibBins As Integer SDUPstatistics.binningSetup_inputBinSize( _ uncalibValues.minX, uncalibValues.maxX, _ massWindowCommon, _ binArr_averageMCRerr_uncalib, _ averageMCRerr_uncalibBins) windowed_uncalib = Me.initStatArray(averageMCRerr_uncalibBins) End If 'Second pass, for binning and windowed median error (that needs ' some information from a first pass). For i = 0 To lastIndex 'Protein loop. If useAllProteins Then proteinIndex = i Else proteinIndex = aProteinsSubset_dataStructureIndices2(i) End If Dim someProt As ProteinHitStructure = _ aProteinList2(proteinIndex) Dim pept As PeptideHitStructure = _ helper.blankPeptide() 'Keep compiler happy. Dim pepIter As peptideListIterator = _ New peptideListIterator(someProt.peptides, aPeptideFilter) While Not pepIter.nextPeptide(pept) 'E.g. calibError is a different value depending ' on whether in Th, mTH, Da or ppm... effectiveErrorValues( _ pept, aMassAccUnit2, _ uncalibMCR2, uncalibError, calibError, theoMCR) 'Changed PM_RECALIB_VISUAL_PLOTX_THEO_MCR 2008-02-28 'Dim xValue As Double = uncalibMCR2 Dim xValue As Double = theoMCR Dim index_uncalib As Integer = _ CInt( _ (uncalibError - uncalibValues.minY) / _ binSize_common _ - 0.5 _ ) '0.5 because .NET int() rounds (not trunc) Dim lastIndexUn As Integer = _ binningArray_uncalib.GetLength(0) - 1 Trace.Assert(index_uncalib <= lastIndexUn, _ "PIL ASSERT. " & _ "Index out of range for binningArray_uncalib: " & _ index_uncalib) binningArray_uncalib(index_uncalib) += 1 Dim index_calib As Integer = _ CInt( _ (calibError - calibValues.minY) / _ binSize_common _ - 0.5 _ ) '0.5 because .NET int() rounds (not trunc) binningArray_calib(index_calib) += 1 'Changed PM_AVERAGEERROR_BYMCR 2007-10-04 'For uncalib: x-values (MCR) have been chosen to be the 'same so we can use the value from calib. ' Dim index_massWindow_common As Integer = _ CInt( _ (xValue - calibValues.minX) / _ massWindowCommon _ - 0.5 _ ) '0.5 because .NET int() rounds (not trunc) 'For debugging only. If index_massWindow_common = 9 Then Dim peter9 As Integer = 9 End If Dim lastIndex7 As Integer = windowed_calib.Length - 1 Trace.Assert(index_massWindow_common <= lastIndex7, _ "PIL ASSERT. index_massWindow_common, " & _ index_massWindow_common & _ ", is out of range, [0; " & lastIndex7 & "].") 'Note: no y value as we are only interested in one quantity, ' mass error and in particular the median value. windowed_calib(index_massWindow_common).update( _ calibError, 0.0) windowed_uncalib(index_massWindow_common).update( _ uncalibError, 0.0) End While 'Through peptides. For: second pass for binning ' and windowed median error. Next i 'Through proteins. For: second pass for binning and ' windowed median error. If True Then buildBin( _ binningArray_uncalib, uncalibValues.minY, binSize_common, _ mUncalibBinArray, mUncalibBinXlabels) buildBin( _ binningArray_calib, calibValues.minY, binSize_common, _ mCalibBinArray, mCalibBinXlabels) End If If True Then Dim centerMass As Double = _ calibValues.minX + 0.5 * massWindowCommon Dim lastIndex2 As Integer = windowed_calib.Length() - 1 Dim j As Integer For j = 0 To lastIndex2 Step 1 'Changed PM_REFACTOR 2007-10-08 'Dim count As Double = countErr_calib(j) Dim count As Integer = windowed_calib(j).N If count > 0 Then 'Jump over if there are no counts ' within a mass window. 'Changed PM_REFACTOR 2007-10-08 'Dim sumErrCalib As Double = sumErr_calib(j) 'Dim sumErrUncalib As Double = sumErr_uncalib(j) Dim sumErrCalib As Double = windowed_calib(j).sumOfX2 Dim sumErrUncalib As Double = windowed_uncalib(j).sumOfX2 Dim averageError_calib As Double = sumErrCalib / count Dim averageError_uncalib As Double = _ sumErrUncalib / count 'Note: side-effects in medianValue()! Dim medianError_calib As Double = _ SDUPstatistics.medianValue(windowed_calib(j).xValues) Dim medianError_uncalib As Double = _ SDUPstatistics.medianValue(windowed_uncalib(j).xValues) 'Changed PM_RECALIB_VISUAL_MEDIAN 2007-10-08 'mCalibAverageErrors.Add( _ ' centerMass, averageError_calib, "") 'mUncalibAverageErrors.Add( _ ' centerMass, averageError_uncalib, "") mCalibMedianErrors.Add( _ centerMass, medianError_calib, "") mUncalibMedianErrors.Add( _ centerMass, medianError_uncalib, "") Else 'Empty mass window - no peptides in mass ' window, centered at "centerMass". Dim peter2 As Integer = 2 End If centerMass += massWindowCommon Next j End If 'Block. mBinSize = binSize_common End If 'Block. End Sub 'setupDatastructures '**************************************************************************** '* <placeholder for header> * '**************************************************************************** Private Sub createTheGraphs( _ ByVal aMassAccUnit As massErrorUnitEnum, _ ByVal aDisplayType As massErrorDisplayTypeEnum) Select Case aDisplayType Case massErrorDisplayTypeEnum.enumByMCR CreateGraph_MCR2MassError( _ massErrors_ZedGraph, mUncalibMassErrors, _ "Before recalibration. ", aMassAccUnit, _ mUncalibValues, mTrendLine) CreateGraph_MCR2MassError( _ massErrors2_ZedGraph, mCaliMassErrors, _ "After recalibration. ", aMassAccUnit, _ mUncalibValues, Nothing) 'Uncalib/mUncalibValues because ' the x values we use are the same. Case massErrorDisplayTypeEnum.enumBinned CreateGraph_BinnedMassError( _ massErrors_ZedGraph, _ mUncalibBinArray, _ mUncalibBinXlabels, _ "Before recalibration. Binned errors. ", _ aMassAccUnit) CreateGraph_BinnedMassError( _ massErrors2_ZedGraph, _ mCalibBinArray, _ mCalibBinXlabels, _ "After recalibration. Binned errors. ", _ aMassAccUnit) Dim unitStr As String = massErrorUnitString(aMassAccUnit) lblBinSize.Text = "Bin size " & unitStr & ":" txtBinSize.Text = mBinSize.ToString("0.000") Case massErrorDisplayTypeEnum.enumMedianErrorByMCR CreateGraph_massWindow2medianError( _ massErrors_ZedGraph, mUncalibMedianErrors, _ "Before recalibration. Median errors. Window size: 100 Th. ", _ aMassAccUnit, _ mUncalibValues) CreateGraph_massWindow2medianError( _ massErrors2_ZedGraph, mCalibMedianErrors, _ "After recalibration. Median errors. Window size: 100 Th. ", _ aMassAccUnit, _ mUncalibValues) 'Uncalib/mUncalibValues because ' the x values we use are the same. 'Changed PM_RECALIB_VISUAL_BYRETENTIONTIME 2008-02-28 Case massErrorDisplayTypeEnum.enumByRetT CreateGraph_retT2MassError( _ massErrors_ZedGraph, mUncalibRetTvsMassErrors, _ "Before recalibration. ", aMassAccUnit, _ mUncalibValues) CreateGraph_retT2MassError( _ massErrors2_ZedGraph, mCalibRetTvsMassErrors, _ "After recalibration. ", aMassAccUnit, _ mUncalibValues) End Select Me.SetSize() End Sub 'createTheGraphs '**************************************************************************** '* <placeholder for header> * '**************************************************************************** Private Shared Function massErrorUnitString( _ ByVal aMassAccUnit As massErrorUnitEnum) _ As String 'Replace this function with a hash? Dim toReturn As String = Nothing Select Case aMassAccUnit Case massErrorUnitEnum.enumUnitDa toReturn = "[Da]" Case massErrorUnitEnum.enumUnitPPM toReturn = "[ppm]" Case massErrorUnitEnum.enumUnitMilliDa toReturn = "[mDa]" 'Changed PM_VISUALISATION_ABSOLUTE_MCR 2007-11-02 Case massErrorUnitEnum.enumUnitTh toReturn = "[Th]" Case massErrorUnitEnum.enumUnitMilliTh toReturn = "[mTh]" Case massErrorUnitEnum.enumUnitPPB toReturn = "[ppb]" Case Else Trace.Assert(False, _ "PIL ASSERT. Select Case never fall-through") End Select Return toReturn End Function 'massErrorUnitString 'Changed PM_VISUALISATION_ABSOLUTE_MCR 2007-11-02 '**************************************************************************** '* <placeholder for header> * '**************************************************************************** Private Shared Sub massTypeString( _ ByVal aMassAccUnit As massErrorUnitEnum, _ ByRef anOutCapitalised As String, _ ByRef anOutNonCapitalised As String) anOutCapitalised = "Mass" anOutNonCapitalised = "mass" Select Case aMassAccUnit 'Case massErrorUnitEnum.enumUnitDa ' toReturn = "Mass" 'Case massErrorUnitEnum.enumUnitPPM ' toReturn = "Mass" 'Could also MCR. 'Case massErrorUnitEnum.enumUnitMilliDa ' toReturn = "Mass" 'Changed PM_VISUALISATION_ABSOLUTE_MCR 2007-11-02 Case massErrorUnitEnum.enumUnitTh anOutCapitalised = "MCR" anOutNonCapitalised = "MCR" Case massErrorUnitEnum.enumUnitMilliTh anOutCapitalised = "MCR" anOutNonCapitalised = "MCR" End Select End Sub 'massTypeString 'Perhaps refactor with similar function in retentionTimePlotting.vb '**************************************************************************** '* <placeholder for header> * '**************************************************************************** Private Shared Sub commonGraph( _ ByRef anInOutZgc As ZedGraphControl, _ ByRef anInTitle As String, _ ByVal aMassAccUnit As massErrorUnitEnum, _ ByRef anOutPane As GraphPane, _ ByRef anOutMassErrorUnit As String) ' Get a reference to the GraphPane. Note: this does not create a new ' one with some defaults. If a plot is already active then we get ' the current settings... anOutPane = anInOutZgc.GraphPane anOutPane.CurveList.Clear() 'Defaults. Important if changing back to a pane 'that relies on some defaults. anOutPane.XAxis.Type = AxisType.Linear 'Changed PM_RECALIB_VISUAL_BINNING_BROKEN 2007-11-26 'Important as for 2 out of 3 types of plots we now set 'the x-axis manually. anOutPane.XAxis.Scale.MinAuto = True anOutPane.XAxis.Scale.MaxAuto = True If True Then anOutPane.XAxis.Scale.TextLabels = Nothing anOutPane.XAxis.MajorTic.IsBetweenLabels = False 'Changed PM_BACKCOLOUR_FOR_ZOOMRECTANGLE 2008-02-26 ''Changed PM_BACKCOLOUR_FOR_ZOOMRECTANGLE 2008-02-15 ''Note: this is the plot area - does not includes axes, etc. ''anOutPane.Chart.Fill = New Fill() 'anOutPane.Chart.Fill = New Fill(Color.FromArgb(0, 0, 0)) 'Colour '' is black. 'Changed PM_BACKCOLOUR_FOR_ZOOMRECTANGLE 2008-02-14 'anOutPane.Fill = New Fill() ' 'Note: this is everything: x-axis, y-axis, plot area, header. ' 'anOutPane.Fill = New Fill(Color.FromArgb(223, 223, 255)) 'Colour '' is whitened blue-violet. 'anOutPane.Fill = New Fill(Color.FromArgb(128, 128, 128)) 'Colour '' is dark-grey. 'anOutPane.Fill = New Fill(Color.FromArgb(0, 0, 0)) 'Colour '' is black. anOutPane.Fill = New Fill(Color.FromArgb(255, 255, 255)) 'Colour ' is white. End If anOutPane.Title.Text = anInTitle anInOutZgc.IsShowPointValues = True anOutMassErrorUnit = massErrorUnitString(aMassAccUnit) End Sub 'commonGraph '**************************************************************************** '* <placeholder for header> * '**************************************************************************** Private Shared Sub massErrorYcommon( _ ByRef anInOutZedGraphPane As GraphPane, _ ByVal aMassAccUnit As massErrorUnitEnum, _ ByVal anInYaxisUnitStr As String) 'Changed PM_VISUALISATION_ABSOLUTE_MCR 2007-11-02 Dim massTypeStr1 As String = Nothing Dim massTypeStr2 As String = Nothing massTypeString(aMassAccUnit, massTypeStr1, massTypeStr2) 'Dim yAxisLabel As String = "Mass error " & yAxisUnitStr Dim yAxisLabel As String = massTypeStr1 & " error " & anInYaxisUnitStr anInOutZedGraphPane.YAxis.Title.Text = yAxisLabel 'Changed PM_RECALIBVISUAL_GRID 2007-09-24 anInOutZedGraphPane.YAxis.MajorGrid.IsVisible = True anInOutZedGraphPane.YAxis.MajorGrid.DashOn = 5 anInOutZedGraphPane.YAxis.MajorGrid.Color = Color.BlueViolet 'Changed PM_RECALIB_VISUAL_AVOID_Y1000SCALING 2008-03-06 anInOutZedGraphPane.YAxis.Scale.Mag = 0 End Sub 'massErrorYcommon '**************************************************************************** '* <placeholder for header> * '**************************************************************************** Private Shared Sub CreateGraph_MCR2MassError( _ ByRef anInOutZgc As ZedGraphControl, _ ByRef anInSomeData As PointPairList, _ ByRef anInTitle As String, _ ByVal aMassAccUnit As massErrorUnitEnum, _ ByVal aDataRanges As statsStructure, _ ByRef anInTrendline As PointPairList) 'statsStructure happens to have the values we need: minimum 'and maximum values for x values, MCR. Dim yAxisUnitStr As String = Nothing 'Keep compiler happy. Dim myPane As GraphPane = Nothing 'Keep compiler happy. commonGraph(anInOutZgc, anInTitle, aMassAccUnit, myPane, yAxisUnitStr) myPane.XAxis.Title.Text = "MCR [Th]" 'Changed PM_REFACTOR 2008-02-28 frmRecalibrationVisualisation.massErrorYcommon( _ myPane, aMassAccUnit, yAxisUnitStr) If Not anInTrendline Is Nothing Then Dim myCurve2 As LineItem = myPane.AddCurve( _ "", _ anInTrendline, Color.Blue, SymbolType.Triangle) myCurve2.Line.IsVisible = True 'Line. 'myCurve2.Symbol.Size = 2 myCurve2.Symbol.Fill = New Fill(Color.Cyan) myCurve2.Line.Width = 2 End If 'Changed PM_RECALIBVISUAL_MORESPACE 2007-10-03 'Dim curveLavel As String = "Mass errors" Dim curveLabel As String = "" Dim myCurve As LineItem = myPane.AddCurve( _ curveLabel, _ anInSomeData, Color.Red, SymbolType.Diamond) myCurve.Line.Fill = New Fill() 'Turn off the line so it's a scatter plot. myCurve.Line.IsVisible = False 'Changed PM_PLOTSPACE 2007-11-17 'Make the XAxis start with the lowest mass (e.g. 352 Th) and 'not 0.0. 'myPane.XAxis.Scale.BaseTic = aStartX Then starts at 200.0 ' and not to a set value of 350.21 Th. -Why ??? 'myPane.XAxis.Scale.BaseTic = aStartX - 30.0 ' myPane.XAxis.Scale.Min = aDataRanges.minX - 30.0 myPane.XAxis.Scale.Max = aDataRanges.maxX + 30.0 ' Tell ZedGraph to refigure the ' axes since the data have changed. ' ' The AxisChange() method call must be made ' any time you add or change the data. anInOutZgc.AxisChange() anInOutZgc.Refresh() End Sub 'CreateGraph_MCR2MassError '**************************************************************************** '* <placeholder for header> * '**************************************************************************** Private Shared Sub CreateGraph_BinnedMassError( _ ByRef anInOutZgc As ZedGraphControl, _ ByRef anInBinArray As Double(), _ ByRef anInXlabels As String(), _ ByRef anInTitle As String, _ ByVal aMassAccUnit As massErrorUnitEnum) Dim xAxisUnitStr As String = Nothing 'Keep compiler happy. Dim myPane As GraphPane = Nothing 'Keep compiler happy. commonGraph(anInOutZgc, anInTitle, aMassAccUnit, myPane, xAxisUnitStr) 'myPane.XAxis.Title.Text = _ ' "Bins. Mass error interval unit: " & xAxisUnitStr & "." myPane.XAxis.Title.Text = "" myPane.YAxis.Title.Text = "Count" myPane.YAxis.MajorGrid.IsVisible = True myPane.YAxis.MajorGrid.DashOn = 5 myPane.YAxis.MajorGrid.Color = Color.Orange Dim myCurve As BarItem = myPane.AddBar( _ "", Nothing, anInBinArray, Color.Red) ' Fill the bar with a red-white-red color gradient for a 3d look myCurve.Bar.Fill = New Fill(Color.Red, Color.White, Color.Red, 90.0F) ' Set the XAxis to Text type myPane.XAxis.Type = AxisType.Text ' Set the XAxis labels myPane.XAxis.Scale.TextLabels = anInXlabels ' Set the labels at an angle so they don't overlap myPane.XAxis.Scale.FontSpec.Angle = 90 '' Draw the Y tics between the labels instead of at the labels 'myPane.YAxis.MajorTic.IsBetweenLabels = True ' Draw the X tics between the labels instead of ' at the labels. myPane.XAxis.MajorTic.IsBetweenLabels = True 'myCurve.Symbol.Size = 8.0F 'myCurve.Symbol.Fill = New Fill(Color.White) 'myCurve.Line.Width = 2.0F 'Changed PM_BACKCOLOUR_FOR_ZOOMRECTANGLE 2008-02-14. Stay with ' common default for all three (set in commonGraph()). '' Fill the Axis and Pane backgrounds. 'myPane.Chart.Fill = New Fill(Color.White, _ ' Color.FromArgb(255, 255, 166), 90.0F) 'myPane.Fill = New Fill(Color.FromArgb(250, 250, 255)) 'Colour '' is nearly white. ' Tell ZedGraph to refigure the ' axes since the data have changed. ' ' The AxisChange() method call must be made ' any time you add or change the data. anInOutZgc.AxisChange() anInOutZgc.Refresh() End Sub 'CreateGraph_BinnedMassError '**************************************************************************** '* <placeholder for header> * '**************************************************************************** Private Shared Sub CreateGraph_massWindow2medianError( _ ByRef anInOutZgc As ZedGraphControl, _ ByRef anInSomeData As PointPairList, _ ByRef anInTitle As String, _ ByVal aMassAccUnit As massErrorUnitEnum, _ ByVal aDataRanges As statsStructure) Dim yAxisUnitStr As String = Nothing 'Keep compiler happy. Dim myPane As GraphPane = Nothing 'Keep compiler happy. commonGraph(anInOutZgc, anInTitle, aMassAccUnit, myPane, yAxisUnitStr) myPane.XAxis.Title.Text = "MCR [Th]" 'Changed PM_VISUALISATION_ABSOLUTE_MCR 2007-11-02 'Dim yAxisLabel As String = _ ' "Median mass error " & yAxisUnitStr Dim massTypeStr1 As String = Nothing Dim massTypeStr2 As String = Nothing massTypeString(aMassAccUnit, massTypeStr1, massTypeStr2) Dim yAxisLabel As String = _ "Median " & massTypeStr2 & " error " & yAxisUnitStr myPane.YAxis.Title.Text = yAxisLabel myPane.YAxis.MajorGrid.IsVisible = True myPane.YAxis.MajorGrid.DashOn = 5 myPane.YAxis.MajorGrid.Color = Color.Cyan Dim curveLavel As String = "" Dim myCurve As LineItem = myPane.AddCurve( _ curveLavel, _ anInSomeData, Color.Red, SymbolType.Diamond) myCurve.Line.Fill = New Fill() 'Line between points. myCurve.Line.IsVisible = True 'Fill the area under the curve. myCurve.Line.Fill = _ New Fill(Color.White, Color.FromArgb(60, 190, 50), 90.0F) 'Second ' parameter is approx. dark green. 'Fill the symbols with white to make them opaque myCurve.Symbol.Fill = New Fill(Color.White) myCurve.Symbol.Size = 5 'Changed PM_PLOTSPACE 2007-11-17 myPane.XAxis.Scale.Min = aDataRanges.minX - 30.0 myPane.XAxis.Scale.Max = aDataRanges.maxX + 30.0 ' Tell ZedGraph to refigure the ' axes since the data have changed. ' ' The AxisChange() method call must be made ' any time you add or change the data. anInOutZgc.AxisChange() anInOutZgc.Refresh() End Sub 'CreateGraph_massWindow2medianError '**************************************************************************** '* <placeholder for header> * '**************************************************************************** Private Sub CreateGraph_retT2MassError( _ ByRef anInOutZgc As ZedGraphControl, _ ByRef anInSomeData As PointPairList, _ ByRef anInTitle As String, _ ByVal aMassAccUnit As massErrorUnitEnum, _ ByVal aDataRanges As statsStructure) Dim yAxisUnitStr As String = Nothing 'Keep compiler happy. Dim myPane As GraphPane = Nothing 'Keep compiler happy. commonGraph(anInOutZgc, anInTitle, aMassAccUnit, myPane, yAxisUnitStr) myPane.XAxis.Title.Text = "Retention time [minutes]" frmRecalibrationVisualisation.massErrorYcommon( _ myPane, aMassAccUnit, yAxisUnitStr) Dim curveLabel As String = "" Dim myCurve As LineItem = myPane.AddCurve( _ curveLabel, _ anInSomeData, Color.Red, SymbolType.Diamond) myCurve.Line.Fill = New Fill() 'Turn off the line so it's a scatter plot. myCurve.Line.IsVisible = False ' Tell ZedGraph to refigure the ' axes since the data have changed. ' ' The AxisChange() method call must be made ' any time you add or change the data. anInOutZgc.AxisChange() anInOutZgc.Refresh() End Sub 'CreateGraph_retT2MassError '**************************************************************************** '* <placeholder for header> * '**************************************************************************** Private Sub frmRecalibrationVisualisation_Resize( _ ByVal aSender As Object, ByVal anEvent As System.EventArgs) _ Handles Me.Resize Me.SetSize() End Sub 'frmRecalibrationVisualisation_Resize '**************************************************************************** '* <placeholder for header> * '**************************************************************************** ' SetSize() is separate from Resize() so we can ' call it independently from the Form1_Load() method. ' ' This leaves a 10 px margin around the outside of the control. ' Customize this to fit your needs. Private Sub SetSize() Dim yOffset As Integer = 52 Dim xOffset As Integer = 13 Dim rightBottomMargin As Integer = 20 Dim plotSeparation As Integer = 30 Dim xSize As Integer = _ ClientRectangle.Width - rightBottomMargin - xOffset Dim ySizeAll As Integer = _ ClientRectangle.Height - yOffset - rightBottomMargin Dim ySize As Integer = (ySizeAll - plotSeparation) \ 2 Dim y1 As Integer = yOffset Dim y2 As Integer = yOffset + ySize + plotSeparation massErrors_ZedGraph.Location = New Point(xOffset, y1) massErrors_ZedGraph.Size = New Size(xSize, ySize) massErrors2_ZedGraph.Location = New Point(xOffset, y2) massErrors2_ZedGraph.Size = New Size(xSize, ySize) End Sub 'SetSize '**************************************************************************** '* <placeholder for header> * '**************************************************************************** Private Sub btnPeptideFilter_Click( _ ByVal aSender As System.Object, _ ByVal anEvent As System.EventArgs) _ Handles btnPeptideFilter.Click Dim key As peptideFilterEnum = peptideFilterEnum.enumRecalibVisual Dim programDefaults As peptideFilterStructure = _ quantApplication.defaultPeptideFilters2()(key) 'Changed PM_PEPTIDEFILTER_GENERALISED 2007-08-29 'Dim filterForm As New frmPeptideFilters( _ ' peptideFilter, Me, mApplication) mFilterForm = New frmPeptideFilters( _ mPeptideFilter, mApplication, True, True, _ programDefaults, _ "visualisation of recalibration", _ mRawFiles) mFilterForm.Show() 'Note: the call-back is the function that handles ' event "mFilterForm.dialogDismissed2". End Sub 'btnPeptideFilter_Click '**************************************************************************** '* <placeholder for header> * '**************************************************************************** Public Sub updatePeptideFilterSummary( _ ByVal anInPeptideFilterSpecification As _ peptideFilterStructure) Dim summaryStr As String = _ someStatic.pepFilterShortSummary( _ anInPeptideFilterSpecification, mApplication) lblPeptideFilterSummary.Text = summaryStr End Sub 'updatePeptideFilterSummary '**************************************************************************** '* <placeholder for header> * '* Call-back from peptide filter form. * '**************************************************************************** Private Sub mFilterForm_pepFilterDismissed( _ ByVal aSender As Object, _ ByVal anEvent As pepFilterEventArgs) _ Handles mFilterForm.pepFilterDismissed Dim filter As peptideFilterStructure = anEvent.getFilter() mPeptideFilter = filter 'New filter. Me.updateDisplay() 'Changed PM_RECALIB_VISUAL_SAVE 2007-09-04 'Immediately persist new setting. We need to use an event 'as this dialog can be started from two different places, 'during parsing and from the Protein List window. RaiseEvent calibVisualDismissed( _ aSender, New pepFilterEventArgs(filter)) End Sub 'mFilterForm_pepFilterDismissed '**************************************************************************** '* <placeholder for header> * '**************************************************************************** Private Sub newMassErrorUnits(ByVal aMassAccUnit As massErrorUnitEnum) mCurMassAccUnit = aMassAccUnit Me.updateDisplay() End Sub 'newMassErrorUnits '**************************************************************************** '* <placeholder for header> * '**************************************************************************** Private Sub rbUnitDa_CheckedChanged( _ ByVal aSender As System.Object, _ ByVal anEvent As System.EventArgs) _ Handles rbUnitDa.CheckedChanged If Not mStartingUp Then 'How do we get it from the event? Dim newVal As Boolean = rbUnitDa.Checked If newVal = True Then newMassErrorUnits(massErrorUnitEnum.enumUnitDa) End If Else Dim peter2 As Integer = 2 End If End Sub 'rbUnitDa_CheckedChanged '**************************************************************************** '* <placeholder for header> * '**************************************************************************** Private Sub rbUnitPPM_CheckedChanged( _ ByVal aSender As System.Object, _ ByVal anEvent As System.EventArgs) _ Handles rbUnitPPM.CheckedChanged If Not mStartingUp Then 'How do we get it from the event? Dim newVal As Boolean = rbUnitPPM.Checked If newVal = True Then newMassErrorUnits(massErrorUnitEnum.enumUnitPPM) End If Else Dim peter2 As Integer = 2 End If End Sub 'rbUnitPPM_CheckedChanged '**************************************************************************** '* <placeholder for header> * '**************************************************************************** Private Sub rbUnitMilliDa_CheckedChanged( _ ByVal aSender As System.Object, _ ByVal anEvent As System.EventArgs) _ Handles rbUnitMilliDa.CheckedChanged If Not mStartingUp Then 'How do we get it from the event? Dim newVal As Boolean = rbUnitMilliDa.Checked If newVal = True Then newMassErrorUnits(massErrorUnitEnum.enumUnitMilliDa) End If Else Dim peter2 As Integer = 2 End If End Sub 'rbUnitMilliDa_CheckedChanged 'Changed PM_VISUALISATION_ABSOLUTE_MCR 2007-11-02 '**************************************************************************** '* <placeholder for header> * '**************************************************************************** Private Sub rbUnitTh_CheckedChanged( _ ByVal aSender As System.Object, _ ByVal anEvent As System.EventArgs) _ Handles rbUnitTh.CheckedChanged If Not mStartingUp Then 'How do we get it from the event? Dim newVal As Boolean = rbUnitTh.Checked If newVal = True Then newMassErrorUnits(massErrorUnitEnum.enumUnitTh) End If Else Dim peter2 As Integer = 2 End If End Sub 'rbUnitTh_CheckedChanged 'Changed PM_VISUALISATION_ABSOLUTE_MCR 2007-11-02 '**************************************************************************** '* <placeholder for header> * '**************************************************************************** Private Sub rbUnitMilliTh_CheckedChanged( _ ByVal aSender As System.Object, _ ByVal anEvent As System.EventArgs) _ Handles rbUnitMilliTh.CheckedChanged If Not mStartingUp Then 'How do we get it from the event? Dim newVal As Boolean = rbUnitMilliTh.Checked If newVal = True Then newMassErrorUnits(massErrorUnitEnum.enumUnitMilliTh) End If Else Dim peter2 As Integer = 2 End If End Sub 'rbUnitMilliTh_CheckedChanged '**************************************************************************** '* <placeholder for header> * '**************************************************************************** Private Sub rbUnitPPB_CheckedChanged( _ ByVal aSender As System.Object, _ ByVal anEvent As System.EventArgs) _ Handles rbUnitPPB.CheckedChanged If Not mStartingUp Then 'How do we get it from the event? Dim newVal As Boolean = rbUnitPPB.Checked If newVal = True Then newMassErrorUnits(massErrorUnitEnum.enumUnitPPB) End If Else Dim peter2 As Integer = 2 End If End Sub 'rbUnitPPB_CheckedChanged '**************************************************************************** '* <placeholder for header> * '**************************************************************************** Private Sub newDisplayType(ByVal aDisplayType As massErrorDisplayTypeEnum) mDisplayType = aDisplayType Me.updateDisplay() End Sub 'newDisplayType '**************************************************************************** '* <placeholder for header> * '**************************************************************************** Private Sub rbBinnedMassErrors_CheckedChanged( _ ByVal aSender As System.Object, ByVal anEvent As System.EventArgs) _ Handles rbBinnedMassErrors.CheckedChanged If Not mStartingUp Then 'How do we get it from the event? Dim newVal As Boolean = rbBinnedMassErrors.Checked If newVal = True Then newDisplayType(massErrorDisplayTypeEnum.enumBinned) End If Else Dim peter2 As Integer = 2 End If End Sub 'rbBinnedMassErrors_CheckedChanged '**************************************************************************** '* <placeholder for header> * '**************************************************************************** Private Sub rbByMCR_CheckedChanged( _ ByVal aSender As System.Object, ByVal anEvent As System.EventArgs) _ Handles rbByMCR.CheckedChanged If Not mStartingUp Then 'How do we get it from the event? Dim newVal As Boolean = rbByMCR.Checked If newVal = True Then newDisplayType(massErrorDisplayTypeEnum.enumByMCR) End If Else Dim peter2 As Integer = 2 End If End Sub 'rbByMCR_CheckedChanged '**************************************************************************** '* <placeholder for header> * '**************************************************************************** Private Sub updateDisplay() displayData( _ mProteinsSubset, _ mProteinList, _ mPeptideFilter, _ mCurMassAccUnit) End Sub 'updateDisplay '**************************************************************************** '* <placeholder for header> * '**************************************************************************** Private Sub rbMedianErrorByMassWindow_CheckedChanged( _ ByVal aSender As System.Object, ByVal anEvent As System.EventArgs) _ Handles rbMedianErrorByMassWindow.CheckedChanged If Not mStartingUp Then 'How do we get it from the event? Dim newVal As Boolean = rbMedianErrorByMassWindow.Checked If newVal = True Then newDisplayType(massErrorDisplayTypeEnum.enumMedianErrorByMCR) End If Else Dim peter2 As Integer = 2 End If End Sub 'rbMedianErrorByMassWindow_CheckedChanged 'Changed PM_RECALIB_VISUAL_BYRETENTIONTIME 2008-02-28 '**************************************************************************** '* <placeholder for header> * '**************************************************************************** Private Sub rbByRetT_CheckedChanged( _ ByVal aSender As System.Object, ByVal anEvent As System.EventArgs) _ Handles rbByRetT.CheckedChanged If Not mStartingUp Then 'How do we get it from the event? Dim newVal As Boolean = rbByRetT.Checked If newVal = True Then newDisplayType(massErrorDisplayTypeEnum.enumByRetT) End If Else Dim peter2 As Integer = 2 End If End Sub 'rbByRetT_CheckedChanged '**************************************************************************** '* <placeholder for header> * '**************************************************************************** Private Function massErrors_ZedGraph_MouseMoveEvent( _ ByVal sender As ZedGraph.ZedGraphControl, _ ByVal e As System.Windows.Forms.MouseEventArgs) _ As Boolean _ Handles massErrors_ZedGraph.MouseMoveEvent Return False End Function 'massErrors_ZedGraph_MouseMoveEvent '**************************************************************************** '* <placeholder for header> * '**************************************************************************** Private Function massErrors_ZedGraph_MouseUpEvent( _ ByVal sender As ZedGraph.ZedGraphControl, _ ByVal e As System.Windows.Forms.MouseEventArgs) _ As Boolean _ Handles massErrors_ZedGraph.MouseUpEvent Return False End Function 'massErrors_ZedGraph_MouseMoveEvent '**************************************************************************** '* <placeholder for header> * '**************************************************************************** Private Function massErrors_ZedGraph_MouseDownEvent( _ ByVal aSender As ZedGraph.ZedGraphControl, _ ByVal anEvent As System.Windows.Forms.MouseEventArgs) _ As Boolean _ Handles massErrors_ZedGraph.MouseDownEvent Dim pane As GraphPane = aSender.GraphPane Dim xm As Integer = anEvent.X Dim ym As Integer = anEvent.Y Dim pt As PointF pt.X = xm pt.Y = ym ' "This is normally e.Graphics from the PaintEventArgs argument ' to the Paint() method. " Dim bm As Bitmap = New Bitmap(1, 1) Dim g As Graphics = Graphics.FromImage(bm) ' pane.AxisChange(g) ' Dim g As Graphics = Me.zedGraphControl.CreateGraphics() ' myMaster.AutoPaneLayout(g, PaneLayout.SingleRow) ' myMaster.AxisChange(g) ' g.Dispose() Dim obj2 As Object = Nothing 'Keep compiler happy. Dim index2 As Integer Dim found As Boolean = _ pane.FindNearestObject(pt, g, obj2, index2) If Not obj2 Is Nothing Then Dim TypeToReflect As Type = obj2.GetType() Dim typeName As String = TypeToReflect.ToString If typeName = "ZedGraph.LineItem" Then Dim theCurve As ZedGraph.LineItem = _ DirectCast(obj2, ZedGraph.LineItem) Dim pairHit As ZedGraph.PointPair = theCurve(index2) 'Sample: ' q17801,DNLTLWTSDTQGDEAEAGEGGEN,sc44,ch=2,prot 2. Dim withInfo As String = DirectCast(pairHit.Tag, String) Dim queryNum As Integer If True Then Dim idx As Integer = withInfo.IndexOf(",", 0) Trace.Assert(idx >= 0, _ "PIL ASSERT. "","" not found in: " & withInfo) Dim len As Integer = idx Dim qStr As String = withInfo.Substring(0, len) Dim idx2 As Integer = qStr.IndexOf("q", 0) idx2 += 1 'Step past "q". Dim len2 As Integer = qStr.Length - idx2 Dim qNumStr As String = qStr.Substring(idx2, len2) queryNum = CInt(qNumStr) End If 'Note: we could find the protein from the query number, but ' we will extract it directly. Dim protNum As Integer If True Then Dim idx5 As Integer = withInfo.IndexOf(",prot ", 0) Trace.Assert(idx5 >= 0, _ "PIL ASSERT. "",prot "" not found in: " & withInfo) idx5 += 6 Dim idx6 As Integer = withInfo.IndexOf(".", 0) If idx6 < 0 Then idx6 = withInfo.Length() End If 'idx6 += 1 Dim len5 As Integer = idx6 - idx5 Dim protNumStr As String = withInfo.Substring(idx5, len5) protNum = CInt(protNumStr) End If mParent.openParticularPeptide(protNum, queryNum) Dim peter3 As Integer = 3 Else Dim peter4 As Integer = 4 'Hit something else (or empty ' space) - not a point/line. End If 'No, this is for all function of the class, etc. ' Dim members As System.Reflection.MemberInfo() = _ ' TypeToReflect.GetMembers() ' ' 'Later: assert length of "members" to 1. ' ' Dim someMember As MemberInfo ' For Each someMember In members ' Dim typeName As String = someMember.ToString ' If typeName = "ZedGraph.LineItem" Then ' ' Dim theCurve As ZedGraph.LineItem = _ ' DirectCast(obj2, ZedGraph.LineItem) ' ' Dim pairHit As ZedGraph.PointPair = theCurve(index2) ' ' Dim withQnum As String = DirectCast(pairHit.Tag, String) ' ' Dim peter3 As Integer = 3 ' Else ' Dim peter4 As Integer = 4 'Hit something else. ' End If ' Next g.Dispose() Else Dim peter2 As Integer = 2 'User did not hit near a graphical ' element. End If Return False End Function 'massErrors_ZedGraph_MouseDownEvent 'Try to use ZedMouseEventHandler. 'And perhaps nearest hit object, etc. End Class 'frmRecalibrationVisualisationGenerated by script codePublish.pl at 2008-09-23T11:59:18.