/// <summary> /// Creates RetentionTimeRasterItem from XICTraceGenerator. /// </summary> private RetentionTimeRasterItem MakeRetentionTimeRasterItem(XICTraceGenerator <UnknownFeatureIonInstanceItem> tracer, int fileID) { // get raster points var raster = tracer.RetentionTimeRaster; // get raster info var info = tracer.RetentionTimeRasterInfo; // make RetentionTimeRasterItem return(new RetentionTimeRasterItem { ID = EntityDataService.NextId <RetentionTimeRasterItem>(), FileID = fileID, MSOrder = info.MSOrder, Polarity = info.Polarity, IonizationSource = info.IonizationSource, MassAnalyzer = info.MassAnalyzer, MassRange = info.MassRange, ResolutionAtMass200 = info.ResolutionAtMass200, ScanRate = info.ScanRate, ScanType = info.ScanType, ActivationTypes = info.ActivationTypes, ActivationEnergies = info.ActivationEnergies, IsolationWindow = info.IsolationWindow, IsolationMass = info.IsolationMass, IsolationWidth = info.IsolationWidth, IsolationOffset = info.IsolationOffset, IsMultiplexed = info.IsMultiplexed, Trace = new TraceData(raster), }); }
/// <summary> /// Creates and persists XIC traces for all compound ion items. /// </summary> private void RebuildAndPersistCompoundIonTraces( int fileID, IEnumerable <SpectrumDescriptor> spectrumDescriptors, Dictionary <UnknownFeatureIonInstanceItem, List <ChromatogramPeakItem> > ionInstanceToPeaksMap) { SendAndLogTemporaryMessage("Re-creating XIC traces..."); var time = Stopwatch.StartNew(); // init XICPattern builder var xicPatternBuilder = new Func <List <ChromatogramPeakItem>, XICPattern>( peaks => { var masks = peaks.Select( peak => new XICMask( peak.IsotopeNumber, peak.Mass, MassTolerance.Value) ).ToList(); return(new XICPattern(masks)); }); // make XIC patterns var xicPatterns = ionInstanceToPeaksMap.ToDictionary(item => item.Key, item => xicPatternBuilder(item.Value)); // init XIC tracer var tracer = new XICTraceGenerator <UnknownFeatureIonInstanceItem>(xicPatterns); // get sprectrum IDs var spectrumIds = spectrumDescriptors .Where(s => s.ScanEvent.MSOrder == MSOrderType.MS1) .OrderBy(o => o.Header.RetentionTimeRange.LowerLimit) .Select(s => s.Header.SpectrumID) .ToList(); // add spectrum to tracer foreach (var spectrum in ProcessingServices.SpectrumProcessingService.ReadSpectraFromCache(spectrumIds)) { tracer.AddSpectrum(spectrum); } // make trace items var ionInstanceToTraceMap = new Dictionary <UnknownFeatureIonInstanceItem, XicTraceItem>(); foreach (var item in ionInstanceToPeaksMap) { // get trace var trace = tracer.GetXICTrace(item.Key, useFullRange: true, useFullRaster: false); // make XicTraceItem ionInstanceToTraceMap.Add( item.Key, new XicTraceItem { ID = EntityDataService.NextId <XicTraceItem>(), FileID = fileID, Trace = new TraceData(trace), }); } // make raster var rasterItem = MakeRetentionTimeRasterItem(tracer, fileID); // persist traces EntityDataService.InsertItems(ionInstanceToTraceMap.Values); EntityDataService.ConnectItems(ionInstanceToTraceMap.Select(s => Tuple.Create(s.Key, s.Value))); // persist raster EntityDataService.InsertItems(new[] { rasterItem }); EntityDataService.ConnectItems(ionInstanceToTraceMap.Select(s => Tuple.Create(s.Value, rasterItem))); time.Stop(); SendAndLogVerboseMessage("Re-creating and persisting {0} XIC traces took {1:F2} s.", ionInstanceToTraceMap.Values.Count, time.Elapsed.TotalSeconds); m_currentStep += 4; ReportTotalProgress((double)m_currentStep / m_numSteps); }