Esempio n. 1
0
        private void AddNeoTaskButton_Click(object sender, RoutedEventArgs e)
        {
            var dialog = new NeoSearchTaskWindow();

            if (dialog.ShowDialog() == true)
            {
                var ye5 = dialog.TheTask;
                foreach (MetaMorpheusTask task in NeoLoadTomls.LoadTomls(ye5))
                {
                    AddTaskToCollection(task);
                }
                UpdateTaskGuiStuff();
            }
        }
Esempio n. 2
0
        private static void Main(string[] args)
        {
            Console.WriteLine("Welcome to MetaMorpheus");
            Console.WriteLine(GlobalVariables.MetaMorpheusVersion);

            var p = new FluentCommandLineParser <ApplicationArguments>();

            p.Setup(arg => arg.Tasks)
            .As('t', "tasks")
            .SetDefault(new List <string>());

            p.Setup(arg => arg.MetaTasks)
            .As('m', "meta-task")
            .SetDefault(new List <string>());

            p.Setup(arg => arg.Spectra)
            .As('s', "spectra")
            .Required();

            p.Setup(arg => arg.Databases)
            .As('d', "databases")
            .Required();

            var result = p.Parse(args);

            if (p.Object.MetaTasks.Count != 0 || p.Object.Tasks.Count != 0)
            {
                if (!result.HasErrors)
                {
                    MetaMorpheusEngine.WarnHandler                 += WarnHandler;
                    MetaMorpheusEngine.OutProgressHandler          += MyEngine_outProgressHandler;
                    MetaMorpheusEngine.StartingSingleEngineHander  += MyEngine_startingSingleEngineHander;
                    MetaMorpheusEngine.FinishedSingleEngineHandler += MyEngine_finishedSingleEngineHandler;

                    MetaMorpheusTask.WarnHandler += WarnHandler;
                    MetaMorpheusTask.LogHandler  += LogHandler;
                    MetaMorpheusTask.StartingSingleTaskHander   += MyTaskEngine_startingSingleTaskHander;
                    MetaMorpheusTask.FinishedSingleTaskHandler  += MyTaskEngine_finishedSingleTaskHandler;
                    MetaMorpheusTask.FinishedWritingFileHandler += MyTaskEngine_finishedWritingFileHandler;

                    foreach (var db in p.Object.Databases)
                    {
                        if (!Path.GetExtension(db).Equals(".fasta"))
                        {
                            GlobalVariables.AddMods(UsefulProteomicsDatabases.ProteinDbLoader.GetPtmListFromProteinXml(db).OfType <ModificationWithLocation>());
                        }
                    }

                    List <(string, MetaMorpheusTask)> taskList = new List <(string, MetaMorpheusTask)>();

                    for (int i = 0; i < p.Object.Tasks.Count; i++)
                    {
                        var filePath = p.Object.Tasks[i];

                        var uhum = Toml.ReadFile(filePath, MetaMorpheusTask.tomlConfig);

                        switch (uhum.Get <string>("TaskType"))
                        {
                        case "Search":
                            var ye1 = Toml.ReadFile <SearchTask>(filePath, MetaMorpheusTask.tomlConfig);
                            taskList.Add(("Task" + (i + 1) + "SearchTask", ye1));
                            break;

                        case "Calibrate":
                            var ye2 = Toml.ReadFile <CalibrationTask>(filePath, MetaMorpheusTask.tomlConfig);
                            taskList.Add(("Task" + (i + 1) + "CalibrationTask", ye2));
                            break;

                        case "Gptmd":
                            var ye3 = Toml.ReadFile <GptmdTask>(filePath, MetaMorpheusTask.tomlConfig);
                            taskList.Add(("Task" + (i + 1) + "GptmdTask", ye3));
                            break;

                        case "XLSearch":
                            var ye4 = Toml.ReadFile <XLSearchTask>(filePath, MetaMorpheusTask.tomlConfig);
                            taskList.Add(("Task" + (i + 1) + "XLSearchTask", ye4));
                            break;

                        case "Neo":
                            Console.WriteLine("Neo tasks are meta-tasks that rely on several other tasks. Please use -m for meta instead of -t. Skipping.");
                            break;

                        default:
                            Console.WriteLine(uhum.Get <string>("TaskType") + " is not a known task type! Skipping.");
                            break;
                        }
                    }

                    for (int i = 0; i < p.Object.MetaTasks.Count; i++)
                    {
                        var filePath = p.Object.MetaTasks[i];
                        var uhum     = Toml.ReadFile(filePath, MetaMorpheusTask.tomlConfig);
                        switch (uhum.Get <string>("TaskType"))
                        {
                        case "Search":
                            Console.WriteLine("Search tasks are individual tasks. Please use -t for task instead of -m. Skipping.");
                            break;

                        case "Calibrate":
                            Console.WriteLine("Calibrate tasks are individual tasks. Please use -t for task instead of -m. Skipping.");
                            break;

                        case "Gptmd":
                            Console.WriteLine("Gptmd tasks are individual tasks. Please use -t for task instead of -m. Skipping.");
                            break;

                        case "XLSearch":
                            Console.WriteLine("XLSearch tasks are individual tasks. Please use -t for task instead of -m. Skipping.");
                            break;

                        case "Neo":
                            var ye5 = Toml.ReadFile <NeoSearchTask>(filePath, MetaMorpheusTask.tomlConfig);
                            foreach (MetaMorpheusTask task in NeoLoadTomls.LoadTomls(ye5))
                            {
                                taskList.Add(("Task" + (taskList.Count + 1) + ye5.TaskType, ye5));
                            }
                            break;

                        default:
                            Console.WriteLine(uhum.Get <string>("TaskType") + " is not a known task type! Skipping.");
                            break;
                        }
                    }

                    List <string>    startingRawFilenameList   = p.Object.Spectra.Select(b => Path.GetFullPath(b)).ToList();
                    List <DbForTask> startingXmlDbFilenameList = p.Object.Databases.Select(b => new DbForTask(Path.GetFullPath(b), IsContaminant(b))).ToList();

                    var MatchingChars =
                        from len in Enumerable.Range(0, startingRawFilenameList.Min(s => s.Length)).Reverse()
                        let possibleMatch = startingRawFilenameList.First().Substring(0, len)
                                            where startingRawFilenameList.All(f => f.StartsWith(possibleMatch, StringComparison.Ordinal))
                                            select possibleMatch;

                    string outputFolder = Path.Combine(Path.GetDirectoryName(MatchingChars.First()), @"$DATETIME");

                    EverythingRunnerEngine a = new EverythingRunnerEngine(taskList, startingRawFilenameList, startingXmlDbFilenameList, outputFolder);

                    try
                    {
                        a.Run();
                    }
                    catch (Exception e)
                    {
                        while (e.InnerException != null)
                        {
                            e = e.InnerException;
                        }
                        var message = "Run failed, Exception: " + e.Message;
                        Console.WriteLine(message);
                    }
                }
                else
                {
                    Console.WriteLine("Error Text:" + result.ErrorText);
                }
            }
            else
            {
                Console.WriteLine("Error Text: No toml file was specified. Use -t for tasks or -m for meta-tasks.");
            }
        }
Esempio n. 3
0
        private void AddAFile(string draggedFilePath)
        {
            // this line is NOT used because .xml.gz (extensions with two dots) mess up with Path.GetExtension
            //var theExtension = Path.GetExtension(draggedFilePath).ToLowerInvariant();

            // we need to get the filename before parsing out the extension because if we assume that everything after the dot
            // is the extension and there are dots in the file path (i.e. in a folder name), this will mess up
            var filename     = Path.GetFileName(draggedFilePath);
            var theExtension = filename.Substring(filename.IndexOf(".")).ToLowerInvariant();

            switch (theExtension)
            {
            case ".raw":
                var versionCheckerResult = MyFileManager.ValidateThermoMsFileReaderVersion();

                if (versionCheckerResult.Equals(MyFileManager.ThermoMsFileReaderVersionCheck.IncorrectVersion))
                {
                    GuiWarnHandler(null, new StringEventArgs("Warning! Thermo MSFileReader is not version 3.0 SP2; a crash may result from searching this .raw file", null));
                }
                else if (versionCheckerResult.Equals(MyFileManager.ThermoMsFileReaderVersionCheck.DllsNotFound))
                {
                    GuiWarnHandler(null, new StringEventArgs("Warning! Cannot find Thermo MSFileReader (v3.0 SP2 is preferred); a crash may result from searching this .raw file", null));
                }
                goto case ".mzml";

            case ".mzml":
                RawDataForDataGrid zz = new RawDataForDataGrid(draggedFilePath);
                if (!ExistRaw(rawDataObservableCollection, zz))
                {
                    rawDataObservableCollection.Add(zz);
                }
                UpdateFileSpecificParamsDisplayJustAdded(Path.ChangeExtension(draggedFilePath, ".toml"));
                UpdateOutputFolderTextbox();
                break;

            case ".mzml.gz":      // not implemented yet
            case ".fasta.gz":     // not implemented yet
                GuiWarnHandler(null, new StringEventArgs("Cannot read, try uncompressing: " + draggedFilePath, null));
                break;

            case ".xml":
            case ".xml.gz":
            case ".fasta":
            case ".fa":
                ProteinDbForDataGrid uu = new ProteinDbForDataGrid(draggedFilePath);

                if (!ExistDa(proteinDbObservableCollection, uu))
                {
                    proteinDbObservableCollection.Add(uu);
                    if (theExtension.Equals(".xml") || theExtension.Equals(".xml.gz"))
                    {
                        try
                        {
                            GlobalVariables.AddMods(UsefulProteomicsDatabases.ProteinDbLoader.GetPtmListFromProteinXml(draggedFilePath).OfType <ModificationWithLocation>());
                        }
                        catch (Exception ee)
                        {
                            MessageBox.Show(ee.ToString());
                            GuiWarnHandler(null, new StringEventArgs("Cannot read: " + draggedFilePath, null));
                            proteinDbObservableCollection.Remove(uu);
                        }
                    }
                }
                break;

            case ".toml":
                var tomlFile = Toml.ReadFile(draggedFilePath, MetaMorpheusTask.tomlConfig);
                if (tomlFile.Keys.Contains("PrecursorMassTolerance") && tomlFile.Keys.Contains("ProductMassTolerance") && tomlFile.Keys.Count == 2)
                {
                    // do nothing; it's a ppm suggested tolerance toml from calibration, this gets read in elsewhere
                }
                else
                {
                    try
                    {
                        switch (tomlFile.Get <string>("TaskType"))
                        {
                        case "Search":
                            var ye1 = Toml.ReadFile <SearchTask>(draggedFilePath, MetaMorpheusTask.tomlConfig);
                            AddTaskToCollection(ye1);
                            break;

                        case "Calibrate":
                            var ye2 = Toml.ReadFile <CalibrationTask>(draggedFilePath, MetaMorpheusTask.tomlConfig);
                            AddTaskToCollection(ye2);
                            break;

                        case "Gptmd":
                            var ye3 = Toml.ReadFile <GptmdTask>(draggedFilePath, MetaMorpheusTask.tomlConfig);
                            AddTaskToCollection(ye3);
                            break;

                        case "XLSearch":
                            var ye4 = Toml.ReadFile <XLSearchTask>(draggedFilePath, MetaMorpheusTask.tomlConfig);
                            AddTaskToCollection(ye4);
                            break;

                        case "Neo":
                            var ye5 = Toml.ReadFile <NeoSearchTask>(draggedFilePath, MetaMorpheusTask.tomlConfig);
                            foreach (MetaMorpheusTask task in NeoLoadTomls.LoadTomls(ye5))
                            {
                                AddTaskToCollection(task);
                            }
                            break;
                        }
                    }
                    catch (Exception e)
                    {
                        GuiWarnHandler(null, new StringEventArgs("Could not parse .toml: " + e.Message, null));
                    }
                }
                break;

            default:
                GuiWarnHandler(null, new StringEventArgs("Unrecognized file type: " + theExtension, null));
                break;
            }
        }