private SrmDocument ConnectLibrarySpecs(SrmDocument document, string documentPath) { string docLibFile = null; if (!string.IsNullOrEmpty(documentPath) && document.Settings.PeptideSettings.Libraries.HasDocumentLibrary) { docLibFile = BiblioSpecLiteSpec.GetLibraryFileName(documentPath); if (!File.Exists(docLibFile)) { Assert.Fail(Resources.CommandLine_ConnectLibrarySpecs_Error__Could_not_find_the_spectral_library__0__for_this_document_, docLibFile); } } var settings = document.Settings.ConnectLibrarySpecs((library, librarySpec) => { string name = library != null ? library.Name : librarySpec.Name; LibrarySpec spec; if (Settings.Default.SpectralLibraryList.TryGetValue(name, out spec)) { if (File.Exists(spec.FilePath)) { return(spec); } } string fileName = library != null ? library.FileNameHint : Path.GetFileName(librarySpec.FilePath); if (fileName != null) { // First look for the file name in the document directory string pathLibrary = PathEx.FindExistingRelativeFile(documentPath, fileName); if (pathLibrary != null) { return(CreateLibrarySpec(library, librarySpec, pathLibrary, true)); } // In the user's default library directory pathLibrary = Path.Combine(Settings.Default.LibraryDirectory, fileName); if (File.Exists(pathLibrary)) { return(CreateLibrarySpec(library, librarySpec, pathLibrary, false)); } } Assert.Fail(Resources.CommandLine_ConnectLibrarySpecs_Warning__Could_not_find_the_spectral_library__0_, name); return(CreateLibrarySpec(library, librarySpec, null, false)); }, docLibFile); if (ReferenceEquals(settings, document.Settings)) { return(document); } // If the libraries were moved to disconnected state, then avoid updating // the document tree for this change, or it will strip all the library // information off the document nodes. if (settings.PeptideSettings.Libraries.DisconnectedLibraries != null) { return(document.ChangeSettingsNoDiff(settings)); } return(document.ChangeSettings(settings)); }
private SrmDocument ConnectLibrarySpecs(SrmDocument document, string documentPath) { string docLibFile = null; if (!string.IsNullOrEmpty(documentPath) && document.Settings.PeptideSettings.Libraries.HasDocumentLibrary) { docLibFile = BiblioSpecLiteSpec.GetLibraryFileName(documentPath); if (!File.Exists(docLibFile)) { _out.WriteLine(Resources.CommandLine_ConnectLibrarySpecs_Error__Could_not_find_the_spectral_library__0__for_this_document_, docLibFile); return null; } } var settings = document.Settings.ConnectLibrarySpecs(library => { LibrarySpec spec; if (Settings.Default.SpectralLibraryList.TryGetValue(library.Name, out spec)) { if (File.Exists(spec.FilePath)) return spec; } string fileName = library.FileNameHint; if (fileName != null) { // First look for the file name in the document directory string pathLibrary = Path.Combine(Path.GetDirectoryName(documentPath) ?? string.Empty, fileName); if (File.Exists(pathLibrary)) return library.CreateSpec(pathLibrary).ChangeDocumentLocal(true); // In the user's default library directory pathLibrary = Path.Combine(Settings.Default.LibraryDirectory, fileName); if (File.Exists(pathLibrary)) return library.CreateSpec(pathLibrary); } _out.WriteLine(Resources.CommandLine_ConnectLibrarySpecs_Warning__Could_not_find_the_spectral_library__0_, library.Name); return library.CreateSpec(null); }, docLibFile); if (ReferenceEquals(settings, document.Settings)) return document; // If the libraries were moved to disconnected state, then avoid updating // the document tree for this change, or it will strip all the library // information off the document nodes. if (settings.PeptideSettings.Libraries.DisconnectedLibraries != null) return document.ChangeSettingsNoDiff(settings); return document.ChangeSettings(settings); }
/// <summary> /// Minimizes all libraries in a document to produce a new document with /// just the library information necessary for the spectra referenced by /// the nodes in the document. /// </summary> /// <param name="document">Document for which to minimize library information</param> /// <param name="pathDirectory">Directory into which new minimized libraries are built</param> /// <param name="nameModifier">A name modifier to append to existing names for /// full libraries to create new library names</param> /// <param name="progressMonitor">Broker to communicate status and progress</param> /// <returns>A new document instance with minimized libraries</returns> public static SrmDocument MinimizeLibraries(SrmDocument document, string pathDirectory, string nameModifier, IProgressMonitor progressMonitor) { var settings = document.Settings; var pepLibraries = settings.PeptideSettings.Libraries; if (!pepLibraries.HasLibraries) return document; if (!pepLibraries.IsLoaded) throw new InvalidOperationException(Resources.BlibDb_MinimizeLibraries_Libraries_must_be_fully_loaded_before_they_can_be_minimzed); // Separate group nodes by the libraries to which they refer var setUsedLibrarySpecs = new HashSet<LibrarySpec>(); foreach (var librarySpec in pepLibraries.LibrarySpecs) { string libraryName = librarySpec.Name; if (document.MoleculeTransitionGroups.Contains(nodeGroup => nodeGroup.HasLibInfo && Equals(nodeGroup.LibInfo.LibraryName, libraryName))) { setUsedLibrarySpecs.Add(librarySpec); } } var listLibraries = new List<Library>(); var listLibrarySpecs = new List<LibrarySpec>(); var dictOldNameToNew = new Dictionary<string, string>(); if (setUsedLibrarySpecs.Count > 0) { Directory.CreateDirectory(pathDirectory); var usedNames = new HashSet<string>(); for (int i = 0; i < pepLibraries.LibrarySpecs.Count; i++) { var librarySpec = pepLibraries.LibrarySpecs[i]; if (!setUsedLibrarySpecs.Contains(librarySpec)) continue; string baseName = Path.GetFileNameWithoutExtension(librarySpec.FilePath); string fileName = GetUniqueName(baseName, usedNames) + BiblioSpecLiteSpec.EXT; using (var blibDb = CreateBlibDb(Path.Combine(pathDirectory, fileName))) { blibDb.ProgressMonitor = progressMonitor; var librarySpecMin = librarySpec as BiblioSpecLiteSpec; if (librarySpecMin == null || !librarySpecMin.IsDocumentLibrary) { string nameMin = librarySpec.Name; // Avoid adding the modifier a second time, if it has // already been done once. if (!nameMin.EndsWith(nameModifier + ")")) // Not L10N nameMin = string.Format("{0} ({1})", librarySpec.Name, nameModifier); // Not L10N librarySpecMin = new BiblioSpecLiteSpec(nameMin, blibDb.FilePath); } listLibraries.Add(blibDb.MinimizeLibrary(librarySpecMin, pepLibraries.Libraries[i], document)); // Terminate if user canceled if (progressMonitor != null && progressMonitor.IsCanceled) return document; listLibrarySpecs.Add(librarySpecMin); dictOldNameToNew.Add(librarySpec.Name, librarySpecMin.Name); } } document = (SrmDocument) document.ChangeAll(node => { var nodeGroup = node as TransitionGroupDocNode; if (nodeGroup == null || !nodeGroup.HasLibInfo) return node; string libName = nodeGroup.LibInfo.LibraryName; string libNameNew = dictOldNameToNew[libName]; if (Equals(libName, libNameNew)) return node; var libInfo = nodeGroup.LibInfo.ChangeLibraryName(libNameNew); return nodeGroup.ChangeLibInfo(libInfo); }, (int) SrmDocument.Level.TransitionGroups); } return document.ChangeSettingsNoDiff(settings.ChangePeptideLibraries( lib => lib.ChangeLibraries(listLibrarySpecs, listLibraries))); }
/// <summary> /// Minimizes all libraries in a document to produce a new document with /// just the library information necessary for the spectra referenced by /// the nodes in the document. /// </summary> /// <param name="document">Document for which to minimize library information</param> /// <param name="pathDirectory">Directory into which new minimized libraries are built</param> /// <param name="nameModifier">A name modifier to append to existing names for /// full libraries to create new library names</param> /// <param name="progressMonitor">Broker to communicate status and progress</param> /// <returns>A new document instance with minimized libraries</returns> public static SrmDocument MinimizeLibraries(SrmDocument document, string pathDirectory, string nameModifier, IProgressMonitor progressMonitor) { var settings = document.Settings; var pepLibraries = settings.PeptideSettings.Libraries; if (!pepLibraries.HasLibraries) { return(document); } if (!pepLibraries.IsLoaded) { throw new InvalidOperationException(Resources.BlibDb_MinimizeLibraries_Libraries_must_be_fully_loaded_before_they_can_be_minimzed); } // Separate group nodes by the libraries to which they refer var setUsedLibrarySpecs = new HashSet <LibrarySpec>(); foreach (var librarySpec in pepLibraries.LibrarySpecs) { string libraryName = librarySpec.Name; if (document.MoleculeTransitionGroups.Contains(nodeGroup => nodeGroup.HasLibInfo && Equals(nodeGroup.LibInfo.LibraryName, libraryName))) { setUsedLibrarySpecs.Add(librarySpec); } } var listLibraries = new List <Library>(); var listLibrarySpecs = new List <LibrarySpec>(); var dictOldNameToNew = new Dictionary <string, string>(); if (setUsedLibrarySpecs.Count > 0) { Directory.CreateDirectory(pathDirectory); var usedNames = new HashSet <string>(); for (int i = 0; i < pepLibraries.LibrarySpecs.Count; i++) { var librarySpec = pepLibraries.LibrarySpecs[i]; if (!setUsedLibrarySpecs.Contains(librarySpec)) { continue; } string baseName = Path.GetFileNameWithoutExtension(librarySpec.FilePath); string fileName = GetUniqueName(baseName, usedNames) + BiblioSpecLiteSpec.EXT; using (var blibDb = CreateBlibDb(Path.Combine(pathDirectory, fileName))) { blibDb.ProgressMonitor = progressMonitor; var librarySpecMin = librarySpec as BiblioSpecLiteSpec; if (librarySpecMin == null || !librarySpecMin.IsDocumentLibrary) { string nameMin = librarySpec.Name; // Avoid adding the modifier a second time, if it has // already been done once. if (!nameMin.EndsWith(nameModifier + ")")) // Not L10N { nameMin = string.Format("{0} ({1})", librarySpec.Name, nameModifier); // Not L10N } librarySpecMin = new BiblioSpecLiteSpec(nameMin, blibDb.FilePath); } listLibraries.Add(blibDb.MinimizeLibrary(librarySpecMin, pepLibraries.Libraries[i], document)); // Terminate if user canceled if (progressMonitor != null && progressMonitor.IsCanceled) { return(document); } listLibrarySpecs.Add(librarySpecMin); dictOldNameToNew.Add(librarySpec.Name, librarySpecMin.Name); } } document = (SrmDocument)document.ChangeAll(node => { var nodeGroup = node as TransitionGroupDocNode; if (nodeGroup == null || !nodeGroup.HasLibInfo) { return(node); } string libName = nodeGroup.LibInfo.LibraryName; string libNameNew = dictOldNameToNew[libName]; if (Equals(libName, libNameNew)) { return(node); } var libInfo = nodeGroup.LibInfo.ChangeLibraryName(libNameNew); return(nodeGroup.ChangeLibInfo(libInfo)); }, (int)SrmDocument.Level.TransitionGroups); } return(document.ChangeSettingsNoDiff(settings.ChangePeptideLibraries( lib => lib.ChangeLibraries(listLibrarySpecs, listLibraries)))); }
private SrmDocument ConnectLibrarySpecs(IWin32Window parent, SrmDocument document, string documentPath) { string docLibFile = null; if (!string.IsNullOrEmpty(documentPath) && document.Settings.PeptideSettings.Libraries.HasDocumentLibrary) { docLibFile = BiblioSpecLiteSpec.GetLibraryFileName(documentPath); if (!File.Exists(docLibFile)) { MessageDlg.Show(this, string.Format(Resources.SkylineWindow_ConnectLibrarySpecs_Could_not_find_the_spectral_library__0__for_this_document__Without_the_library__no_spectrum_ID_information_will_be_available_, docLibFile)); } } var settings = document.Settings.ConnectLibrarySpecs(library => { LibrarySpec spec; if (Settings.Default.SpectralLibraryList.TryGetValue(library.Name, out spec)) { if (File.Exists(spec.FilePath)) return spec; } if (documentPath == null) return null; string fileName = library.FileNameHint; if (fileName != null) { // First look for the file name in the document directory string pathLibrary = Path.Combine(Path.GetDirectoryName(documentPath) ?? string.Empty, fileName); if (File.Exists(pathLibrary)) return library.CreateSpec(pathLibrary).ChangeDocumentLocal(true); // In the user's default library directory pathLibrary = Path.Combine(Settings.Default.LibraryDirectory ?? string.Empty, fileName); if (File.Exists(pathLibrary)) return library.CreateSpec(pathLibrary); } using (var dlg = new MissingFileDlg { ItemName = library.Name, ItemType = Resources.SkylineWindow_ConnectLibrarySpecs_Spectral_Library, Filter = library.SpecFilter, FileHint = fileName, FileDlgInitialPath = Path.GetDirectoryName(documentPath), Title = Resources.SkylineWindow_ConnectLibrarySpecs_Find_Spectral_Library }) { if (dlg.ShowDialog(parent) == DialogResult.OK) { Settings.Default.LibraryDirectory = Path.GetDirectoryName(dlg.FilePath); return library.CreateSpec(dlg.FilePath); } } return null; }, docLibFile); if (settings == null) return null; // User cancelled if (ReferenceEquals(settings, document.Settings)) return document; // If the libraries were moved to disconnected state, then avoid updating // the document tree for this change, or it will strip all the library // information off the document nodes. if (settings.PeptideSettings.Libraries.DisconnectedLibraries != null) return document.ChangeSettingsNoDiff(settings); return document.ChangeSettings(settings); }