function game_container(game) {
let top_team, bot_team;
if (game.data.WTeam) {
if (game.data.WTeam.pos == "top") {
top_team = game.data.WTeam;
} else if (game.data.WTeam.pos == "bot") {
bot_team = game.data.WTeam;
}
}
if (game.data.LTeam) {
if (game.data.LTeam.pos == "top") {
top_team = game.data.LTeam;
} else if (game.data.LTeam.pos == "bot") {
bot_team = game.data.LTeam;
}
}
let shade = "#ddd";
if (
game.data.WTeam &&
game.data.LTeam &&
game.data.WTeam.win & (game.data.WTeam.score > 1)
) {
let pred = get_predicted_probability(
game.data.WTeam.TeamID,
game.data.LTeam.TeamID
);
if (pred >= 0.5) {
shade = d3.interpolateGreens(1.5 * (pred - 0.5));
} else if (pred < 0.5) {
shade = d3.interpolateReds(1.5 * (0.5 - pred));
}
}
let div = d3
.create("div")
.attr("class", "game-container")
.style("background-color", shade)
.style("width", function () {
if (game.data.round == 6) {
return 1.4 * team_width + "px";
} else {
return team_width + "px";
}
})
.style("height", function () {
if (game.data.round == 6) {
return 1.4 * game_height + "px";
} else {
return game_height + "px";
}
})
.style("left", function () {
if (game.data.round == 6) {
return (game.x2 - 0.2 * team_width).toString() + "px";
} else {
return game.x2 + "px";
}
})
.style("top", function () {
if (game.data.round == 6) {
return (game.y2 - 0.2 * game_height).toString() + "px";
} else {
return game.y2 + "px";
}
})
.style("border", "solid 0.5px black")
.style("position", "absolute");
div.append(() => team_container(top_team, game.data.round, "top_team"));
div.append(() => team_container(bot_team, game.data.round, "bot_team"));
if (
game.data.WTeam &&
game.data.WTeam.win &&
game.data.LTeam &&
game.data.WTeam.score > 1
) {
let pred = get_predicted_probability(
game.data.WTeam.TeamID,
game.data.LTeam.TeamID
);
let game_log_loss = -Math.log(pred);
tippy(div.node(), {
content: `Prediction was that ${game.data.WTeam.TeamName} would beat ${
game.data.LTeam.TeamName
} with probabiltiy ${format(pred)} for a Log Loss of ${format(
game_log_loss
)}.`
});
} else if (
game.data.WTeam &&
game.data.WTeam.win &&
game.data.LTeam &&
game.data.WTeam.score == 1
) {
tippy(div.node(), { content: "Game cancelled" });
} else if (
game.data.WTeam &&
game.data.WTeam.TeamID &&
game.data.LTeam &&
game.data.LTeam.TeamID &&
!game.data.WTeam.win
) {
let pred = get_predicted_probability(
game.data.WTeam.TeamID,
game.data.LTeam.TeamID
);
let game_log_loss = -Math.log(pred);
tippy(div.node(), {
content: `Prediction is that ${game.data.WTeam.TeamName} will beat ${
game.data.LTeam.TeamName
} with probabiltiy ${format(pred)}.`
});
}
// cmd-click on an unplayed game to copy a result template to update the result file
div.on("click", function (evt) {
if (evt.metaKey) {
let result_text = `2021,,${game.data.WTeam.TeamID},WS,${game.data.LTeam.TeamID},LS,,
${game.data.WTeam.TeamName}, ${game.data.LTeam.TeamName}`;
pbcopy(result_text);
}
});
// if (
// game.data.WTeam &&
// game.data.WTeam.TeamID == 1116 &&
// game.data.LTeam &&
// game.data.LTeam.TeamID == 1403
// ) {
// console.log(['problem is ', game.data]);
// }
return div.node();
}