private void UpdatePrecursorFeatureNode(Feature precursorFeature) { if (_previousPrecursorFeature != null && _previousPrecursorFeature == precursorFeature) return; var parameter = new GroupParameter(_precursorIon); PrecursorFeatureNode = new PrecursorFeatureNode( IsotopomerFeatures.GetPrecursorIsotopomerFeatures(_imsData, _precursorIon, precursorFeature), parameter, _scoringParams); _previousPrecursorFeature = precursorFeature; }
private void UpdatePrecursorFeatureNode(Feature precursorFeature) { if (_previousPrecursorFeature != null && _previousPrecursorFeature == precursorFeature) { return; } var parameter = new GroupParameter(_precursorIon); PrecursorFeatureNode = new PrecursorFeatureNode( IsotopomerFeatures.GetPrecursorIsotopomerFeatures(_imsData, _precursorIon, precursorFeature), parameter, _scoringParams); _previousPrecursorFeature = precursorFeature; }
public FragmentFeatureGraph(ImsDataCached imsData, PrecursorFeatureNode precursorNode, Feature precursorFeature, Ion precursorIon, Composition cutComposition, GroupParameter parameter, SubScoreFactory scoringParams) { _scoringParams = scoringParams; _precursorFeatureNode = precursorNode; Add(precursorNode, new List <FeatureEdge>()); var fragmentNodes = GetFragmentNodes(imsData, precursorFeature, cutComposition, precursorIon, parameter); supportingIonTypes = new List <IonType>(); foreach (var node in fragmentNodes) { if (node.Feature != null) { supportingIonTypes.Add(node.FragmentIonClassBase); } } //var nn = fragmentNodes.Count(no => no.Feature != null); //Console.WriteLine(this + "Num features : " + nn); var usedNodes = new List <FeatureNode> { precursorNode }; UpdateEdges(fragmentNodes, usedNodes); // from precursor to any of fragment nodes if (this[precursorNode].Count == 0) { NodeScore = RatioScore = -1; //TODO should be trained.. Score = NodeScore + RatioScore; return; } // usedNodes.Remove(precursorNode);// exclude precursorNode var primeNode = (FragmentFeatureNode)this[precursorNode][0].RNode; var targetNodes = GetTargetNodes(primeNode, fragmentNodes, true, false); UpdateEdges(targetNodes, usedNodes); // to the nodes of different terminal ions targetNodes = GetTargetNodes(primeNode, fragmentNodes, false, false); UpdateEdges(targetNodes, usedNodes); // to the nodes of the same terminal ions targetNodes = GetTargetNodes(primeNode, fragmentNodes, true, true); UpdateEdges(targetNodes, usedNodes); // to the nodes of differently charged ions GetScore(); }
public double GetPrecursorScore(Feature precursorFeature) { UpdatePrecursorFeatureNode(precursorFeature); return(PrecursorFeatureNode.GetScore()); }