/// <summary> /// Loads mass tags from AMT database into analysis database. /// </summary> private void AddMassTags() { var loadProgress = new Progress <ProgressData>(pd => this.MassTagLoadProgress = pd.Percent); this.Analysis.MetaData.Database = this.SelectedDatabase; this.Analysis.MassTagDatabase = MtdbLoaderFactory.LoadMassTagDatabase( this.analysis.MetaData.Database, this.analysis.Options.MassTagDatabaseOptions); this.Analysis.DataProviders.MassTags.DeleteAll(); this.ShowMassTagProgress = true; this.Analysis.DataProviders.MassTags.AddAllStateless(this.Analysis.MassTagDatabase.MassTags, loadProgress); this.ShowMassTagProgress = false; }
/// <summary> /// The main entry point for the application. /// </summary> static int Main(string[] args) { var handle = System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle; SetConsoleMode(handle, ENABLE_EXTENDED_FLAGS); var clusterIdMap = new Dictionary <int, UMCClusterLight>(); try { if (args.Length < 2) { Console.WriteLine("MultiAlignSTACRunner crosstabDirectory databasePath outputName"); Console.WriteLine("\tThe cross-tab file will be named similar to the database path"); return(1); } // Setup the analysis processing Logger.PrintMessage("Find all datasets", true); var directoryPath = args[0].Replace("\r", "").Replace("\n", ""); var databasePath = args[1].Replace("\r", "").Replace("\n", ""); var name = args[2].Replace("\r", "").Replace("\n", ""); var files = Directory.GetFiles(directoryPath, "*.csv"); Logger.PrintMessage("Creating Log File"); var loggerPath = AnalysisPathUtils.BuildLogPath(Path.GetDirectoryName(name), Path.GetFileNameWithoutExtension(name)); Logger.LogPath = loggerPath; Logger.PrintMessage("Saving Log Data to: " + loggerPath); Logger.PrintMessage(string.Format("Creating STAC"), true); // Hardcode bad, but per discussions with OHSU var stac = new STACAdapter <UMCClusterLight> { Options = new FeatureMatcherParameters { UserTolerances = { MassTolerancePPM = 25, NETTolerance = .035, DriftTimeTolerance = 3 }, UseDriftTime = true } }; var clusterFilteringOptions = new FilteringOptions(); WriteOptionsToLogFile(clusterFilteringOptions); WriteOptionsToLogFile(stac.Options); // Read the cluster data var allClusters = new List <UMCClusterLight>(); var clusterId = 0; foreach (var file in files) { var filename = Path.GetFileName(file); Logger.PrintMessage(string.Format("Reading {0}", filename)); const string chargeString = "charge"; if (filename == null) { continue; } if (!filename.Contains(chargeString)) { continue; } // Read each file. var start = DateTime.Now; var xname = filename.Replace("_", ""); // ReSharper disable once StringIndexOfIsCultureSpecific.1 var indexOfChargeString = xname.IndexOf(chargeString); var charge = Convert.ToInt32(xname.Substring(indexOfChargeString + chargeString.Length, 1)); var clusters = ReadClusters(file, clusterFilteringOptions); var end = DateTime.Now; Logger.PrintMessage(string.Format("\tReading Took {0:.00} seconds", end.Subtract(start).TotalSeconds)); foreach (var cluster in clusters) { clusterIdMap.Add(clusterId, cluster); cluster.Id = clusterId++; cluster.ChargeState = charge; } allClusters.AddRange(clusters); } // Load the database Logger.PrintMessage(string.Format("Loading Mass Tag Database: {0}", Path.GetFileNameWithoutExtension(databasePath))); var options = new MassTagDatabaseOptions(); var databaseDefinition = new InputDatabase { DatabaseFormat = MassTagDatabaseFormat.Sqlite, LocalPath = databasePath }; var database = MtdbLoaderFactory.LoadMassTagDatabase(databaseDefinition, options); // Run stac try { Logger.PrintMessage("Matching clusters to peptides in mass tag database."); var matches = stac.PerformPeakMatching(allClusters, database); Logger.PrintMessage(string.Format("Writing Results To {0}", name)); var duplicateMatches = new Dictionary <int, Dictionary <int, FeatureMatchLight <UMCClusterLight, MassTagLight> > >(); foreach (var match in matches) { if (!duplicateMatches.ContainsKey(match.Observed.Id)) { duplicateMatches.Add(match.Observed.Id, new Dictionary <int, FeatureMatchLight <UMCClusterLight, MassTagLight> >()); } if (!duplicateMatches[match.Observed.Id].ContainsKey(match.Target.Id)) { duplicateMatches[match.Observed.Id].Add(match.Target.Id, match); } } WriteClusterData(name, duplicateMatches, clusterIdMap); Logger.PrintMessage("ANALYSIS SUCCESS"); return(0); } catch (Exception ex) { Logger.PrintMessage("Unhandled Error: " + ex.Message); var innerEx = ex.InnerException; while (innerEx != null) { Logger.PrintMessage("Inner Exception: " + innerEx.Message); innerEx = innerEx.InnerException; } Logger.PrintMessage("Stack: " + ex.StackTrace); Logger.PrintMessage(""); Logger.PrintMessage("ANALYSIS FAILED"); return(1); } } catch (Exception ex) { Logger.PrintMessage("Unhandled Error: " + ex.Message, true); var innerEx = ex.InnerException; while (innerEx != null) { Logger.PrintMessage("Inner Exception: " + innerEx.Message); innerEx = innerEx.InnerException; } Logger.PrintMessage("Stack: " + ex.StackTrace, true); Logger.PrintMessage(""); Logger.PrintMessage("ANALYSIS FAILED"); return(1); } }
/// <summary> /// Creates an entry in the DB if a new database should be created. /// </summary> /// <param name="config"></param> private void CreateMtdb(AnalysisConfig config) { MassTagDatabase database; // Load the mass tag database if we are aligning, or if we are // peak matching (but aligning to a reference dataset. if (m_config.Analysis.Options.AlignmentOptions.IsAlignmentBaselineAMasstagDB) { UpdateStatus("Loading Mass Tag database from database: " + m_config.Analysis.MetaData.Database.DatabaseName); database = MtdbLoaderFactory.LoadMassTagDatabase(m_config.Analysis.MetaData.Database, m_config.Analysis.Options.MassTagDatabaseOptions); } else if (m_config.Analysis.MetaData.Database != null && m_config.Analysis.MetaData.Database.DatabaseFormat != MassTagDatabaseFormat.None) { UpdateStatus("Loading Mass Tag database from database: " + m_config.Analysis.MetaData.Database.DatabaseName); database = MtdbLoaderFactory.LoadMassTagDatabase(m_config.Analysis.MetaData.Database, m_config.Analysis.Options.MassTagDatabaseOptions); } else { config.Analysis.MassTagDatabase = null; config.ShouldPeakMatch = false; return; } if (database != null) { config.ShouldPeakMatch = true; var totalMassTags = database.MassTags.Count; UpdateStatus("Loaded " + totalMassTags + " mass tags."); } config.Analysis.MassTagDatabase = database; if (database == null) { return; } config.Analysis.DataProviders.MassTags.AddAll(database.MassTags); var proteinCache = new ProteinDAO(); proteinCache.AddAll(database.AllProteins); var map = (from massTagId in database.Proteins.Keys from p in database.Proteins[massTagId] select new MassTagToProteinMap { ProteinId = p.ProteinId, MassTagId = massTagId, RefId = p.RefId }).ToList(); var tempCache = new GenericDAOHibernate <MassTagToProteinMap>(); tempCache.AddAll(map); if (MassTagsLoaded != null) { MassTagsLoaded(this, new MassTagsLoadedEventArgs(database.MassTags, database)); } }