public override bool GetChromatogram( int id, string modifiedSequence, Color peptideColor, out ChromExtra extra, out float[] times, out int[] scanIndexes, out float[] intensities, out float[] massErrors) { var chromKeyIndices = _chromKeyIndices[id]; if (_lastChromGroupInfo == null || _lastIndices.GroupIndex != chromKeyIndices.GroupIndex) { _lastChromGroupInfo = _cache.LoadChromatogramInfo(chromKeyIndices.GroupIndex); _lastChromGroupInfo.ReadChromatogram(_cache); } _lastIndices = chromKeyIndices; var tranInfo = _lastChromGroupInfo.GetTransitionInfo(chromKeyIndices.TranIndex); times = tranInfo.Times; intensities = tranInfo.Intensities; massErrors = null; if (tranInfo.MassError10Xs != null) { massErrors = tranInfo.MassError10Xs.Select(m => m / 10.0f).ToArray(); } scanIndexes = null; if (tranInfo.ScanIndexes != null) { scanIndexes = tranInfo.ScanIndexes[(int)chromKeyIndices.Key.Source]; } // Assume that each chromatogram will be read once, though this may // not always be completely true. _readChromatograms++; // But avoid reaching 100% before reading is actually complete SetPercentComplete(Math.Min(99, 100 * _readChromatograms / _chromKeyIndices.Length)); extra = new ChromExtra(chromKeyIndices.StatusId, chromKeyIndices.StatusRank); // Display in AllChromatogramsGraph if (chromKeyIndices.Key.Precursor != 0 && Status is ChromatogramLoadingStatus) { ((ChromatogramLoadingStatus)Status).Transitions.AddTransition( modifiedSequence, peptideColor, chromKeyIndices.StatusId, chromKeyIndices.StatusRank, times, intensities); } return(true); }
public override bool GetChromatogram( int id, string modifiedSequence, Color peptideColor, out ChromExtra extra, out float[] times, out int[] scanIndexes, out float[] intensities, out float[] massErrors) { var chromKeyIndices = _chromKeyIndices[id]; if (_lastChromGroupInfo == null || _lastIndices.GroupIndex != chromKeyIndices.GroupIndex) { _lastChromGroupInfo = _cache.LoadChromatogramInfo(chromKeyIndices.GroupIndex); _lastChromGroupInfo.ReadChromatogram(_cache); } _lastIndices = chromKeyIndices; var tranInfo = _lastChromGroupInfo.GetTransitionInfo(chromKeyIndices.TranIndex); times = tranInfo.Times; intensities = tranInfo.Intensities; massErrors = null; if (tranInfo.MassError10Xs != null) { massErrors = tranInfo.MassError10Xs.Select(m => m / 10.0f).ToArray(); } scanIndexes = null; if (tranInfo.ScanIndexes != null) { scanIndexes = tranInfo.ScanIndexes[(int)chromKeyIndices.Key.Source]; } SetPercentComplete(100 * id / _chromKeyIndices.Length); extra = new ChromExtra(chromKeyIndices.StatusId, chromKeyIndices.StatusRank); // Display in AllChromatogramsGraph if (chromKeyIndices.Key.Precursor != 0) { LoadingStatus.Transitions.AddTransition( modifiedSequence, peptideColor, chromKeyIndices.StatusId, chromKeyIndices.StatusRank, times, intensities); } return(true); }
public override bool GetChromatogram(int id, Target modifiedSequence, Color peptideColor, out ChromExtra extra, out TimeIntensities timeIntensities) { var chromKeyIndices = _chromKeyIndices[id]; if (_lastChromGroupInfo == null || _lastIndices.GroupIndex != chromKeyIndices.GroupIndex) { _lastChromGroupInfo = _cache.LoadChromatogramInfo(chromKeyIndices.GroupIndex); _lastChromGroupInfo.ReadChromatogram(_cache); } _lastIndices = chromKeyIndices; var tranInfo = _lastChromGroupInfo.GetTransitionInfo(chromKeyIndices.TranIndex); timeIntensities = tranInfo.TimeIntensities; // Assume that each chromatogram will be read once, though this may // not always be completely true. _readChromatograms++; // But avoid reaching 100% before reading is actually complete SetPercentComplete(Math.Min(99, 100 * _readChromatograms / _chromKeyIndices.Length)); extra = new ChromExtra(chromKeyIndices.StatusId, chromKeyIndices.StatusRank); // Display in AllChromatogramsGraph if (chromKeyIndices.Key.Precursor != 0 && Status is ChromatogramLoadingStatus) { ((ChromatogramLoadingStatus)Status).Transitions.AddTransition( modifiedSequence, peptideColor, chromKeyIndices.StatusId, chromKeyIndices.StatusRank, timeIntensities.Times, timeIntensities.Intensities); } return(true); }
/// <summary> /// Collects statistics on how much space savings minimizing will achieve, and (if outStream /// is not null) writes out the minimized cache file. /// </summary> public void Minimize(Settings settings, ProgressCallback progressCallback, Stream outStream, FileStream outStreamScans = null, FileStream outStreamPeaks = null, FileStream outStreamScores = null) { var writer = outStream == null ? null : new Writer(ChromatogramCache, outStream, outStreamScans, outStreamPeaks, outStreamScores); var statisticsCollector = new MinStatisticsCollector(this); bool readChromatograms = settings.NoiseTimeRange.HasValue || writer != null; var chromGroupHeaderToIndex = ChromGroupHeaderInfos .Select((cghi, index) => new KeyValuePair <ChromGroupHeaderInfo5, int>(cghi, index)) .ToDictionary(kvp => kvp.Key, kvp => kvp.Value); var chromGroups = new ChromatogramGroupInfo[ChromGroupHeaderInfos.Count]; var transitionGroups = new List <TransitionGroupDocNode> [ChromGroupHeaderInfos.Count]; foreach (var nodePep in Document.Molecules) { foreach (var nodeGroup in nodePep.TransitionGroups) { ChromatogramGroupInfo[] groupInfos; ChromatogramCache.TryLoadChromatogramInfo(nodePep, nodeGroup, _tolerance, out groupInfos); foreach (var chromGroupInfo in groupInfos) { int headerIndex = chromGroupHeaderToIndex[chromGroupInfo.Header]; if (chromGroups[headerIndex] == null) { chromGroups[headerIndex] = chromGroupInfo; transitionGroups[headerIndex] = new List <TransitionGroupDocNode>(); } transitionGroups[headerIndex].Add(nodeGroup); } } } for (int iHeader = 0; iHeader < ChromGroupHeaderInfos.Count; iHeader++) { var chromGroupInfo = chromGroups[iHeader]; IList <TransitionGroupDocNode> transitionGroupDocNodes; if (chromGroupInfo == null) { chromGroupInfo = ChromatogramCache.LoadChromatogramInfo(ChromGroupHeaderInfos[iHeader]); transitionGroupDocNodes = new TransitionGroupDocNode[0]; } else { transitionGroupDocNodes = transitionGroups[iHeader]; } if (readChromatograms) { try { chromGroupInfo.ReadChromatogram(ChromatogramCache); } catch (Exception exception) { Trace.TraceWarning("Unable to read chromatogram {0}", exception); // Not L10N } } MinimizedChromGroup minimizedChromGroup = MinimizeChromGroup(settings, chromGroupInfo, transitionGroupDocNodes); statisticsCollector.ProcessChromGroup(minimizedChromGroup); if (progressCallback != null) { progressCallback.Invoke(statisticsCollector.GetStatistics()); } if (writer != null) { writer.WriteChromGroup(chromGroupInfo, minimizedChromGroup); } // Null out the ChromGroup in our array so it can be garbage collected. chromGroups[iHeader] = null; } if (progressCallback != null) { progressCallback.Invoke(statisticsCollector.GetStatistics()); } if (writer != null) { writer.WriteEndOfFile(); } }
/// <summary> /// Collects statistics on how much space savings minimizing will achieve, and (if outStream /// is not null) writes out the minimized cache file. /// </summary> public void Minimize(Settings settings, ProgressCallback progressCallback, Stream outStream, FileStream outStreamScans = null, FileStream outStreamPeaks = null, FileStream outStreamScores = null) { var writer = outStream == null ? null : new Writer(ChromatogramCache, settings.CacheFormat, outStream, outStreamScans, outStreamPeaks, outStreamScores); var statisticsCollector = new MinStatisticsCollector(this); bool readChromatograms = settings.NoiseTimeRange.HasValue || writer != null; var chromGroupHeaderToIndex = new Dictionary <long, int>(ChromGroupHeaderInfos.Count); for (int i = 0; i < ChromGroupHeaderInfos.Count; i++) { var cghi = ChromGroupHeaderInfos[i]; chromGroupHeaderToIndex.Add(cghi.LocationPoints, i); } var chromGroups = new ChromatogramGroupInfo[ChromGroupHeaderInfos.Count]; var transitionGroups = new List <TransitionGroupDocNode> [ChromGroupHeaderInfos.Count]; foreach (var nodePep in Document.Molecules) { foreach (var nodeGroup in nodePep.TransitionGroups) { foreach (var chromGroupInfo in ChromatogramCache.LoadChromatogramInfos(nodePep, nodeGroup, _tolerance, null)) { int headerIndex = chromGroupHeaderToIndex[chromGroupInfo.Header.LocationPoints]; if (chromGroups[headerIndex] == null) { chromGroups[headerIndex] = chromGroupInfo; transitionGroups[headerIndex] = new List <TransitionGroupDocNode>(); } transitionGroups[headerIndex].Add(nodeGroup); } } } var minimizer = new QueueWorker <MinimizeParams>(null, MinimizeAndWrite); minimizer.RunAsync(MINIMIZING_THREADS, @"Minimizing/Writing", MAX_GROUP_READ_AHEAD); for (int iHeader = 0; iHeader < ChromGroupHeaderInfos.Count; iHeader++) { var chromGroupInfo = chromGroups[iHeader]; IList <TransitionGroupDocNode> transitionGroupDocNodes; if (chromGroupInfo == null) { chromGroupInfo = ChromatogramCache.LoadChromatogramInfo(ChromGroupHeaderInfos[iHeader]); transitionGroupDocNodes = new TransitionGroupDocNode[0]; } else { transitionGroupDocNodes = transitionGroups[iHeader]; } if (readChromatograms) { try { chromGroupInfo.ReadChromatogram(ChromatogramCache, true); } catch (Exception exception) { Trace.TraceWarning(@"Unable to read chromatogram {0}", exception); } } if (minimizer.Exception != null) { break; } minimizer.Add(new MinimizeParams(writer, settings, chromGroupInfo, transitionGroupDocNodes, progressCallback, statisticsCollector)); // Null out the ChromGroup in our array so it can be garbage collected. chromGroups[iHeader] = null; } minimizer.DoneAdding(true); if (minimizer.Exception != null) { throw minimizer.Exception; } statisticsCollector.ReportProgress(progressCallback, true); if (writer != null) { writer.WriteEndOfFile(); } }