/// <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"); }
/// <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"); }
/// <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; }
/// <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"); }
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)); } }
/// <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; }
/// <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; }