Exemple #1
0
        /// <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);
            }
        }
Exemple #2
0
        /// <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;
                }
        }
Exemple #3
0
 private static bool ShouldFilterCluster(UMCClusterLight cluster, FilteringOptions options)
 {
     //
         //  Total dataset member count      ~
         //  Ratio of members dataset : total
         //      1 but not > 1.5-2
         //
         var datasetMemberCount = cluster.DatasetMemberCount;
         if (datasetMemberCount < options.TotalDatasetMembers)
             return true;
         var totalMembers = cluster.MemberCount;
         var ratio        = Convert.ToDouble(totalMembers)/Convert.ToDouble(datasetMemberCount);
         if (ratio <= options.MaxRatio && ratio >= options.MinRatio)
             return false;
         return true;
 }
Exemple #4
0
 private static void WriteOptionsToLogFile(FilteringOptions clusterFilteringOptions)
 {
     Logger.PrintMessage("Cluster Filtering Options");
         Logger.PrintMessage(string.Format("\tMax Cluster Total to Dataset Ratio:{0}", clusterFilteringOptions.MaxRatio));
         Logger.PrintMessage(string.Format("\tMin Cluster Total to Dataset Ratio:{0}", clusterFilteringOptions.MinRatio));
         Logger.PrintMessage(string.Format("\tRequired Total Members:{0}", clusterFilteringOptions.TotalDatasetMembers));
 }
Exemple #5
0
        /// <summary>
        /// Reads the clusters and filters cluster by cluster.  
        /// </summary>
        private static List<UMCClusterLight> ReadClusters(string path, FilteringOptions options)
        {
            var clusters = new List<UMCClusterLight>();
                var totalClusters = 0;
                using (TextReader reader = File.OpenText(path))
                {
                    reader.ReadLine();
                    string line;

                        while ((line = reader.ReadLine()) != null)
                        {
                            var data           = line.Split(',');

                            var mass            = Convert.ToDouble(data[CONST_COLUMN_MASS]);
                            var retentionTime   = Convert.ToDouble(data[CONST_COLUMN_NET]);

                            var cluster         = new UMCClusterLight
                            {
                                Id                      = Convert.ToInt32(data[CONST_COLUMN_ID]),
                                MassMonoisotopic        = mass,
                                MassMonoisotopicAligned = mass,
                                NetAligned              = retentionTime,
                                Net                     = retentionTime,
                                DriftTime               = Convert.ToDouble(data[CONST_COLUMN_DRIFT]),
                                Tightness               = Convert.ToDouble(data[CONST_COLUMN_TIGHTNESS]),
                                AmbiguityScore          = Convert.ToDouble(data[CONST_COLUMN_AMBIGUITY]),
                                DatasetMemberCount      = Convert.ToInt32(data[CONST_COLUMN_DATASET_MEMBERS]),
                                MemberCount             = Convert.ToInt32(data[CONST_COLUMN_TOTAL_MEMBERS])
                            };

                            var shouldFilter = ShouldFilterCluster(cluster, options);
                            if (!shouldFilter)
                                clusters.Add(cluster);
                            totalClusters++;
                        }

                }

                Logger.PrintMessage(string.Format("Found {0} filtered clusters from {1} total clusters", clusters.Count, totalClusters));

                return clusters;
        }