Ejemplo n.º 1
0
        /// <summary>
        /// Saves the database to a new directory with only the optimizations used
        /// in a given document.
        /// </summary>
        /// <param name="pathDestDir">The directory to save to</param>
        /// <param name="document">The document for which peptides are to be kept</param>
        /// <returns>The full path to the file saved</returns>
        public string PersistMinimized(string pathDestDir, SrmDocument document)
        {
            RequireUsable();

            string persistPath = Path.Combine(pathDestDir, Path.GetFileName(PersistencePath) ?? string.Empty);  // ReSharper

            using (var fs = new FileSaver(persistPath))
            {
                var optDbMinimal = OptimizationDb.CreateOptimizationDb(fs.SafeName);

                // Calculate the minimal set of optimizations needed for this document
                var persistOptimizations = new List <DbOptimization>();
                var dictOptimizations    = new OptimizationDictionary(_database.GetOptimizations());
                var persistedKeys        = new HashSet <OptimizationKey>();
                foreach (PeptideGroupDocNode seq in document.MoleculeGroups)
                {
                    // Skip peptide groups with no transitions
                    if (seq.TransitionCount == 0)
                    {
                        continue;
                    }
                    foreach (PeptideDocNode peptide in seq.Children)
                    {
                        foreach (TransitionGroupDocNode group in peptide.Children)
                        {
                            var modSeq = document.Settings.GetSourceTarget(peptide);
                            var charge = group.PrecursorAdduct;
                            foreach (TransitionDocNode transition in group.Children)
                            {
                                foreach (var optType in Enum.GetValues(typeof(OptimizationType)).Cast <OptimizationType>())
                                {
                                    var optimizationKey = new OptimizationKey(optType, modSeq, charge, transition.FragmentIonName, transition.Transition.Adduct);
                                    foreach (var dbOptimization in dictOptimizations.EntriesMatching(optimizationKey))
                                    {
                                        if (persistedKeys.Add(dbOptimization.Key))
                                        {
                                            persistOptimizations.Add(dbOptimization);
                                        }
                                        break;
                                    }
                                }
                            }
                        }
                    }
                }

                optDbMinimal.UpdateOptimizations(persistOptimizations, new DbOptimization[0]);
                fs.Commit();
            }

            return(persistPath);
        }
Ejemplo n.º 2
0
 private void LoadOptimizations(IEnumerable <DbOptimization> optimizations)
 {
     DictLibrary = new OptimizationDictionary(optimizations);
 }