コード例 #1
0
        /// <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),
            });
        }
コード例 #2
0
        /// <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);
        }