/// <summary> /// Expands charge range to cover all instances of a given sequence /// </summary> /// <param name="parentTarget"></param> /// <param name="referenceTarget"></param> private void ExpandChargeRange(TopDownIqTarget parentTarget, ChromPeakIqTarget referenceTarget) { var childWorkflow = new ChargeStateChildTopDownIqWorkflow(Run, WorkflowParameters); var childTargets = parentTarget.ChildTargets().ToArray(); var fitTolerance = 0.5; var correlationTolerance = 0.95; var minCharge = (IqChargeStateTarget)childTargets.First(); var maxCharge = (IqChargeStateTarget)childTargets.Last(); if (minCharge.GetResult().IqResultDetail.Chromatogram != null) { var charge = minCharge.ChargeState; var extendDown = true; while (extendDown) { var extend = new IqChargeStateTarget(childWorkflow); charge = charge - 1; extend.ChargeState = charge; parentTarget.AddTarget(extend); extend.RefineTarget(); extend.DoWorkflow(); extendDown = ChargeExpansionPeakSelection(parentTarget, referenceTarget, extend, correlationTolerance, fitTolerance); } } if (maxCharge.GetResult().IqResultDetail.Chromatogram != null) { var charge = maxCharge.ChargeState; var extendUp = true; while (extendUp) { var extend = new IqChargeStateTarget(childWorkflow); charge = charge + 1; extend.ChargeState = charge; parentTarget.AddTarget(extend); extend.RefineTarget(); extend.DoWorkflow(); extendUp = ChargeExpansionPeakSelection(parentTarget, referenceTarget, extend, correlationTolerance, fitTolerance); } } parentTarget.SortChildTargetsByCharge(); }
/// <summary> /// Selects a peak that correlates with the reference target and returns a bool to continue extending the charge range /// </summary> /// <param name="parentTarget"></param> /// <param name="referenceTarget"></param> /// <param name="chargeTarget"></param> /// <param name="correlationCutoff"></param> /// <param name="fitCutoff"></param> /// <returns></returns> private bool ChargeExpansionPeakSelection(TopDownIqTarget parentTarget, ChromPeakIqTarget referenceTarget, IqChargeStateTarget chargeTarget, double correlationCutoff, double fitCutoff) { var iqChargeCorrelator = ChromatogramCorrelator as IqChargeCorrelator; var peakTargets = chargeTarget.ChildTargets(); var sortedPeakTargets = peakTargets.OrderBy(x => x.GetResult().FitScore); foreach (ChromPeakIqTarget target in sortedPeakTargets) { if (referenceTarget.ChromPeak != null) { var minScan = referenceTarget.ChromPeak.XValue - (0.5 * referenceTarget.ChromPeak.Width); var maxScan = referenceTarget.ChromPeak.XValue + (0.5 * +referenceTarget.ChromPeak.Width); if ((target.ChromPeak.XValue > minScan) && (target.ChromPeak.XValue < maxScan)) { var correlation = iqChargeCorrelator.PairWiseChargeCorrelation(referenceTarget, target, Run, 3); if (correlation > correlationCutoff && target.GetResult().FitScore < fitCutoff) { UpdateSelection(target); var parentResult = parentTarget.GetResult() as TopDownIqResult; foreach (var item in parentResult.ChargeCorrelationData.CorrelationData) { if (referenceTarget == item.ReferenceTarget) { var corrItem = new ChromCorrelationDataItem(0, 0, correlation); var corr = new ChromCorrelationData(); corr.AddCorrelationData(corrItem); item.PeakCorrelationData.Add(target, corr); } } return(true); } } } } return(false); }