Example #1
0
        /// <summary>
        /// The large teams.
        /// </summary>
        public void LargeTeams()
        {
            var inputs = FileUtils.Load <Inputs <TeamGame> >(DataPath, "Halo2-LargeTeam");

            outputter.Out(inputs,
                          Contents.S4ExtensionsToTheCoreModel.NumberedName,
                          "Halo2-LargeTeams",
                          "Inputs");

            var datasetSummary =
                new DatasetSummary
            {
                Name            = "Large Team",
                NumberOfGames   = inputs.NumberOfGames,
                NumberOfPlayers = inputs.NumberOfPlayers,
                TeamsPerGame    = 2,
                PlayersPerTeam  = inputs.Games.Average(ia => ia.TeamCounts.Average()),
                PlayersPerGame  = inputs.Games.Average(ia => ia.Players.Count)
            };

            outputter.Out(datasetSummary,
                          Contents.S4ExtensionsToTheCoreModel.NumberedName,
                          "Halo2-LargeTeams",
                          "DatasetSummary");

            var largeTeams = this.RunComparison("LargeTeams", (ia, ib, ic) => new TwoTeam(ia, ib), inputs);

            outputter.Out(largeTeams,
                          Contents.S4ExtensionsToTheCoreModel.NumberedName,
                          "Halo2-LargeTeams",
                          "ExperimentComparison");
        }
Example #2
0
        /// <summary>
        /// Free for all.
        /// </summary>
        public void FreeForAll()
        {
            var inputs = FileUtils.Load <Inputs <MultiPlayerGame> >(DataPath, "Halo2-FreeForAll");

            outputter.Out(inputs,
                          Contents.S4ExtensionsToTheCoreModel.NumberedName,
                          "Halo2-FreeForAll",
                          "Inputs");

            var datasetSummary =
                new DatasetSummary
            {
                Name            = "Free for All",
                NumberOfGames   = inputs.NumberOfGames,
                NumberOfPlayers = inputs.NumberOfPlayers,
                TeamsPerGame    = 8,
                PlayersPerTeam  = 1,
                PlayersPerGame  = 8
            };

            outputter.Out(
                datasetSummary,
                Contents.S4ExtensionsToTheCoreModel.NumberedName,
                "Halo2-FreeForAll",
                "DatasetSummary");

            var freeForAll = this.RunComparison("FreeForAll", (ia, ib, ic) => new MultiPlayer(ia, ib, ic), inputs);

            outputter.Out(freeForAll,
                          Contents.S4ExtensionsToTheCoreModel.NumberedName,
                          "Halo2-FreeForAll",
                          "ExperimentComparison");
        }
Example #3
0
        /// <summary>
        /// Load scan summaries from a scans file.
        /// </summary>
        /// <param name="filePath">The file path to the scans file.</param>
        public void LoadScansFile(string filePath)
        {
            this.scansFilePath = filePath;
            this.summary       = new DatasetSummary();
            var reader = new ScansFileReader {
                Delimiter = ','
            };
            var scans = reader.ReadFile(this.scansFilePath);
            var dict  = this.summary.ScanMetaData;

            dict.Clear();
            var minScan = int.MaxValue;
            var maxScan = int.MinValue;

            foreach (var scan in scans)
            {
                scan.DatasetId = this.GroupId;
                dict.Add(scan.Scan, scan);
                minScan = Math.Min(minScan, scan.Scan);
                maxScan = Math.Max(maxScan, scan.Scan);
            }

            this.MinScan          = minScan;
            this.MaxScan          = maxScan;
            this.TotalScans       = maxScan - minScan; // Not truly the total number present; Scans file contains only MS1 scans
            this.knownScanNumbers = dict.Values.OrderBy(value => value.Scan).Select(value => value.Scan).ToList();
            this.SetNets();
            this.IsBackedByFile = true;
        }
Example #4
0
        /// <summary>
        /// The small teams.
        /// </summary>
        public void SmallTeams()
        {
            var inputs = FileUtils.Load <Inputs <TeamGame> >(DataPath, "Halo2-SmallTeam");

            outputter.Out(inputs,
                          Contents.S4ExtensionsToTheCoreModel.NumberedName,
                          "Halo2-SmallTeams",
                          "Inputs");

            var datasetSummary =
                new DatasetSummary
            {
                Name            = "Small Team",
                NumberOfGames   = inputs.NumberOfGames,
                NumberOfPlayers = inputs.NumberOfPlayers,
                TeamsPerGame    = 2,
                PlayersPerTeam  = inputs.Games.Average(ia => ia.TeamCounts.Average()),
                PlayersPerGame  = inputs.Games.Average(ia => ia.Players.Count)
            };

            outputter.Out(
                datasetSummary,
                Contents.S4ExtensionsToTheCoreModel.NumberedName,
                "Halo2-SmallTeams",
                "DatasetSummary");

            var comparison = this.RunComparison("SmallTeams", (ia, ib, ic) => new TwoTeam(ia, ib), inputs);

            outputter.Out(comparison,
                          Contents.S4ExtensionsToTheCoreModel.NumberedName,
                          "Halo2-SmallTeams",
                          "ExperimentComparison");

            // Take the two players that play the most and add in a player who has played plenty of games but not with another player
            var players = new List <string> {
                inputs.MaxPlayed[0].Item1, inputs.MaxPlayed[0].Item2, inputs.GameCounts.First().Key
            };

            // Plots of posteriors for these players
            var posteriors =
                players.Select(
                    p =>
                    new KeyValuePair <string, GaussianPoint[]>(
                        p,
                        comparison.Experiments["TrueSkill"].PlayerPosteriors[p].Select(Utils.GetMeanAndStandardDeviation).ToArray()))
                .ToDictionary(kvp => kvp.Key, kvp => kvp.Value);

            outputter.Out(posteriors,
                          Contents.S4ExtensionsToTheCoreModel.NumberedName,
                          "Halo2-SmallTeams",
                          "Posteriors");
        }
Example #5
0
        public InformedProteomicsReader(int groupId, string dataFilePath)
        {
            this.GroupId       = groupId;
            this._dataFilePath = dataFilePath;
            this._summary      = new DatasetSummary();

            if (string.IsNullOrEmpty(dataFilePath) || !File.Exists(dataFilePath) ||
                !MassSpecDataReaderFactory.MassSpecDataTypeFilterList.Any(
                    ext => dataFilePath.ToLower().EndsWith(ext)))
            {
                throw new ArgumentException(string.Format("Invalid RAW spectrum file: {0}", dataFilePath));
            }
        }
Example #6
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ScanSummaryProvider"/> class.
        /// For initializing an empty ScanSummaryProvider or a preloaded set of scan summaries.
        /// </summary>
        /// <param name="groupId">The identifier for the dataset that this provider is a part of.</param>
        /// <param name="scanSummaries">Preloaded scan summaries.</param>
        public ScanSummaryProvider(int groupId, IEnumerable <ScanSummary> scanSummaries = null)
        {
            this.GroupId          = groupId;
            this.summary          = null;
            this.totalScans       = -1;
            this.minScan          = -1;
            this.maxScan          = -1;
            this.IsBackedByFile   = true;
            this.knownScanNumbers = new List <int>();

            // Add preloaded scan summaries if available.
            if (scanSummaries != null)
            {
                this.summary = new DatasetSummary();
                foreach (var scanSummary in scanSummaries)
                {
                    this.summary.ScanMetaData.Add(scanSummary.Scan, scanSummary);
                }

                this.knownScanNumbers = this.summary.ScanMetaData.Keys.OrderBy(x => x).ToList();
            }
        }
        /// <summary>
        ///     Retrieves a dictionary of scan data
        /// </summary>
        /// <param name="groupId">Group ID for dataset</param>
        /// <returns>Map between </returns>
        public Dictionary<int, ScanSummary> GetScanData(int groupId)
        {
            if (m_datasetMetaData.ContainsKey(groupId))
            {
                return m_datasetMetaData[groupId].ScanMetaData;
            }

            // Get the RawFileReader for this group
            var rawReader = GetReaderForGroup(groupId);

            var datasetSummary = new DatasetSummary();
            var scanMap = new Dictionary<int, ScanSummary>();
            var numberOfScans = rawReader.GetNumScans();
            for (var i = 0; i < numberOfScans; i++)
            {
                FinniganFileReaderBaseClass.udtScanHeaderInfoType header;
                var summary = GetScanSummary(i, rawReader, out header);

                scanMap.Add(i, summary);
            }

            datasetSummary.ScanMetaData = scanMap;

            m_datasetMetaData.Add(groupId, datasetSummary);
            return datasetSummary.ScanMetaData;
        }
Example #8
0
        /// <summary>
        /// Head to head.
        /// </summary>
        public void HeadToHead()
        {
            AnnounceExperiment("HeadToHead");

            var inputs = FileUtils.Load <Inputs <TwoPlayerGame> >(DataPath, "Halo2-HeadToHead");

            // We know that there are issues with players Gamer01266 and Gamer00296
            inputs.Games =
                new KeyedCollectionWithFunc <string, TwoPlayerGame>(
                    inputs.Games.Where(ia => !ia.Players.Contains("Gamer01266") && !ia.Players.Contains("Gamer00296")),
                    ia => ia.Id);
            inputs.Players.Remove("Gamer01266");
            inputs.Players.Remove("Gamer00296");

            var datasetSummary = new DatasetSummary
            {
                Name            = "Head to Head",
                NumberOfGames   = inputs.NumberOfGames,
                NumberOfPlayers = inputs.NumberOfPlayers,
                TeamsPerGame    = 2,
                PlayersPerTeam  = 1,
                PlayersPerGame  = 2
            };

            outputter.Out(inputs,
                          Contents.S3ASolutionExpectationPropagation.NumberedName,
                          "Halo2-HeadToHead",
                          "Dataset"
                          );

            outputter.Out(datasetSummary,
                          Contents.S3ASolutionExpectationPropagation.NumberedName,
                          "Halo2-HeadToHead",
                          "Dataset summary");

            outputter.Out(inputs,
                          Contents.S4ExtensionsToTheCoreModel.NumberedName,
                          "Halo2-HeadToHead",
                          "Dataset"
                          );

            outputter.Out(datasetSummary,
                          Contents.S4ExtensionsToTheCoreModel.NumberedName,
                          "Halo2-HeadToHead",
                          "Dataset summary");

            // Get games of top two players
            GetTopTwo(inputs, out var topTwoPlayers, out var topTwoGames);

            // Get games without draws
            var gamesWithoutDraws = inputs.Games.Where(ia => ia.Outcome != MatchOutcome.Draw).ToList();

            Console.WriteLine(@"Number of games without draws in Halo2 head to head: " + gamesWithoutDraws.Count);
            Console.WriteLine(@"Number of players in Halo2 head to head: " + inputs.Players.Count);

            var alphas = new[] { 0.07, 0.35 }.Select(ia => ia * inputs.Beta).ToArray();

            var randomParameters1 = new RandomModelParameters {
                IncludeDraws = false
            };
            var randomParameters2 =
                alphas.Select(
                    alpha =>
                    new RandomModelParameters
            {
                IncludeDraws            = true,
                EmpiricalDrawProportion = inputs.DrawProportion
            }).ToArray();

            var trueSkillParameters = inputs.TrueSkillParameters;

            trueSkillParameters.DynamicsVariance = 0;

            var withoutDraws =
                new OnlineExperimentComparison <TwoPlayerGame>(
                    new OnlineExperiment(ia => new TwoPlayer(ia, ShowFactorGraph), trueSkillParameters)
            {
                Players    = inputs.Players,
                Priors     = inputs.TrueSkillPriors,
                SkillPrior = inputs.SkillPrior,
                Name       = "TrueSkill"
            },
                    new OnlineExperiment(ia => new RandomModel(ia), randomParameters1)
            {
                Players    = inputs.Players,
                Priors     = inputs.TrueSkillPriors,
                SkillPrior = inputs.SkillPrior,
                Name       = "Random"
            })
            {
                Name = "HeadToHead"
            };

            withoutDraws.AnnounceAndRunAll(gamesWithoutDraws, gamesWithoutDraws.Count);

            var withDraws =
                new OnlineExperimentComparison <TwoPlayerGame>(
                    new OnlineExperiment(ia => new TwoPlayerWithDraws(ia, ShowFactorGraph), trueSkillParameters)
            {
                Players    = inputs.Players,
                Priors     = inputs.TrueSkillPriors,
                SkillPrior = inputs.SkillPrior,
                Name       = "TrueSkill"
            },
                    new OnlineExperiment(ia => new RandomModel(ia), randomParameters2[0])
            {
                Players    = inputs.Players,
                Priors     = inputs.TrueSkillPriors,
                SkillPrior = inputs.SkillPrior,
                Name       = "Random"
            })
            {
                Name = "HeadToHeadWithDraws"
            };

            withDraws.AnnounceAndRunAll(inputs);

            var topTwo =
                new OnlineExperimentComparison <TwoPlayerGame>(
                    new OnlineExperiment(ia => new TwoPlayerWithDraws(ia, ShowFactorGraph), trueSkillParameters)
            {
                Players    = topTwoPlayers,
                Priors     = inputs.TrueSkillPriors,
                SkillPrior = inputs.SkillPrior,
                Name       = "TrueSkill"
            });

            topTwo.AnnounceAndRunAll(topTwoGames, topTwoGames.Count);

            outputter.Out(
                withoutDraws,
                Contents.S3ASolutionExpectationPropagation.NumberedName,
                "Halo2-HeadToHead",
                "HeadToHead");

            outputter.Out(
                withoutDraws,
                Contents.S4ExtensionsToTheCoreModel.NumberedName,
                "Halo2-HeadToHead",
                "HeadToHead");

            outputter.Out(
                withDraws,
                Contents.S4ExtensionsToTheCoreModel.NumberedName,
                "Halo2-HeadToHead",
                "HeadToHeadWithDraws");


            var headToHeadTopTwo = new Dictionary <string, object>
            {
                { "Players", topTwoPlayers },
                { "Games", topTwoGames },
                { "1v1",
                  topTwo.GetTrajectories(OnlineExperiment.GetTopNPlayersBySkill, Utils.GetMeanAndStandardDeviation, 2)
                  .Where(ia => topTwoPlayers.Contains(ia.Key.Split(' ')[0]) && !ia.Key.Contains("Random")).ToDictionary() },
                { "1vAll",
                  withDraws.GetTrajectories(OnlineExperiment.GetTopNPlayersBySkill, Utils.GetMeanAndStandardDeviation, int.MaxValue)
                  .Where(ia => topTwoPlayers.Contains(ia.Key.Split(' ')[0]) && !ia.Key.Contains("Random")).ToDictionary() }
            };

            outputter.Out(
                headToHeadTopTwo,
                Contents.S4ExtensionsToTheCoreModel.NumberedName,
                "Halo2-HeadToHead",
                "HeadToHeadTopTwo");
        }
        /// <summary>
        ///     Retrieves a dictionary of scan data
        /// </summary>
        /// <param name="groupId">Group ID for dataset</param>
        /// <returns>Map between </returns>
        public Dictionary<int, ScanSummary> GetScanData(int groupId)
        {
            if (m_datasetMetaData.ContainsKey(groupId))
            {
                return m_datasetMetaData[groupId].ScanMetaData;
            }

            // Get the RawFileReader for this group
            var ipbReader = GetReaderForGroup(groupId);

            var datasetSummary = new DatasetSummary();
            var scanMap = new Dictionary<int, ScanSummary>();
            var numberOfScans = ipbReader.NumSpectra;
            for (var i = 1; i <= numberOfScans; i++)
            {
                var summary = GetScanSummary(i, ipbReader);

                scanMap.Add(i, summary);
            }

            datasetSummary.ScanMetaData = scanMap;

            m_datasetMetaData.Add(groupId, datasetSummary);
            return datasetSummary.ScanMetaData;
        }