private static void WriteStatNode(XmlWriter writer, HillenPowerRating stat)
 {
     writer.WriteStartElement("stat");
     writer.WriteAttributeString("season", stat.Season);
     writer.WriteAttributeString("week", stat.Week);
     writer.WriteAttributeString("team", stat.TeamCode);
     writer.WriteAttributeString("qty", stat.Quantity.ToString());
     writer.WriteEndElement();
 }
        public void Calculate(string season, string week)
        {
            if (week.Equals("01"))
            {
                SetupSeason(season);
                Dump2Xml();
                return;
            }

            var hp = new HillinPredictor();

            var theSeason = new NflSeason(season);

            foreach (var team in theSeason.TeamList)
            {
                //  get teams game for the week
                Utility.Announce(string.Format("  Doing {0}", team.TeamCode));
                var upcomingWeek   = new NFLWeek(season, week);
                var previousWeek   = upcomingWeek.PreviousWeek(upcomingWeek, loadgames: false, regularSeasonGamesOnly: true);
                var prevWeek       = string.Format("{0:0#}", previousWeek.WeekNo);
                var oldPowerRating = team.GetPowerRating(prevWeek);

                if (oldPowerRating == 0)
                {
                    return;
                }
                var newRating = new HillenPowerRating
                {
                    Season   = season,
                    TeamCode = team.TeamCode,
                    Week     = week,
                    Quantity = oldPowerRating
                };

                var game = Utility.GetGameFor(season, prevWeek, team.TeamCode);

                if (game.GameDate != new DateTime(1, 1, 1))
                {
                    var predictedResult        = hp.PredictGame(game, null, game.GameDate);
                    var predictedMarginForTeam = predictedResult.MarginForTeam(team.TeamCode);
                    //Utility.Announce( string.Format( "Predicted Margin for {0} is {1}", TeamCode, predictedMarginForTeam ) );
                    var actualMarginForTeam = game.Result.MarginForTeam(team.TeamCode);
                    //Utility.Announce( string.Format( "   Result of {2} means Actual Margin for {0} is {1}",
                    var newPowerRating = AdjustedPower(oldPowerRating, predictedMarginForTeam, actualMarginForTeam);
                    newRating.Quantity = newPowerRating;
                }
                PutRating(newRating);
            }
            Dump2Xml();
        }
        public void PutRating(HillenPowerRating stat)
        {
            if (stat.Quantity == 0.0M)
            {
                return;
            }

            IsDirty = true;
            if (TheHt.ContainsKey(stat.FormatKey()))
            {
                TheHt[stat.FormatKey()] = stat;
#if DEBUG
                //Utility.Announce( string.Format( "HillenMaster:Putting Stat {0}", stat.FormatKey() ) );
#endif
                return;
            }
            TheHt.Add(stat.FormatKey(), stat);
#if DEBUG
            //Utility.Announce( string.Format( "HillenMaster:Adding Stat {0}", stat.FormatKey() ) );
#endif
        }
        public override decimal GetStat(string theKey)
        {
            var season   = theKey.Substring(0, 4);
            var week     = theKey.Substring(5, 2);
            var teamCode = theKey.Substring(8, 2);

            var stat = new HillenPowerRating
            {
                Season   = season,
                Week     = week,
                TeamCode = teamCode,
                Quantity = 0.0M
            };

#if DEBUG
            Utility.Announce(string.Format("HillenMaster:Getting Stat {0}", stat.FormatKey()));
#endif

            var key = stat.FormatKey();
            if (TheHt.ContainsKey(key))
            {
                stat = (HillenPowerRating)TheHt[key];
                CacheHits++;
            }
            else
            {
                //  new it up
#if DEBUG
                Utility.Announce(string.Format("HillenMaster:Instantiating Stat {0}", stat.FormatKey()));
#endif
                PutRating(stat);
                IsDirty = true;
                CacheMisses++;
            }
            return(stat.Quantity);
        }