The PerformanceEntity Object
The PerformanceEntity object is used to represent a single score from the database. It follows a consistent schema outlined here.
Example​
{
"_id": "61f9d73563d97502208221b4",
"rank": 1,
"abrank": 1,
"team": {
"num": "18305",
"name": "Singularity",
"details": "https://ftc-events.firstinspires.org/2021/team/18305"
},
"oprs": {
"opr": 216.7,
"normalized": 216.7,
"non_penalty": 216.7,
"auto": 59.2,
"teleop": 97.5,
"endgame": 60
},
"np": 216.7,
"average": 216.7,
"max_np": 241,
"details": {
"auto": {
"freight": 5
},
"teleop": {
"high": 15,
"mid": 0,
"shared": 0
},
"endgame": {
"ducks": 8,
"shared": 0,
"cap": 0
}
},
"event": {
"name": "Virginia VA Remote Event 1 01/09/22",
"state": "Virginia"
},
"quals_rank": 1,
"avg_rp": 216.7,
"avg_opp": null,
"matches_played": 6,
"event_type": "remote",
"record": {
"w": null,
"l": null,
"t": null
}
}
Explanation​
| Field | Type | Description |
|---|---|---|
_id | string | The MongoDB ObjectID of the score entry. This is the unique identifier of this entry and can be used to differentiate between different entries. It is not preserved between data updates. This means it is fine to use this field for analysis when using the same update, but not between different updates, as the same entry will have a different _id. |
rank | number | The official rank of the team. If the team is tied with another team, both will have the same rank |
abrank | number | The unofficial rank of the team based on normal rank and alphabetization. This means no teams will have the same rank, if 2 teams are tied, the team that alphabetically comes first will get the better rank. Error will compound in this field. Because ties are not skipped, the difference between the official rank and this field will grow. This is helpful in determining percentiles or how many teams are ahead of an entry. |
team | object | The team object. This is an object with the following fields: |
  team.num | string | The team number. |
  team.name | string | The team name. |
  team.details | string | The URL to the team's details page on FIRST's official page. |
oprs | object | The OPRs for the match. This is an object with the following fields: |
  oprs.opr | number | The OPRopr for the match. |
  oprs.normalized | number | The normalized OPRnorm-opr for the match. |
  oprs.non_penalty | number | The non-penalty OPRcoprc for the match. |
  oprs.auto | number | The auto OPRcoprc for the match. |
  oprs.teleop | number | The teleop OPRcoprc for the match. |
  oprs.endgame | number | The endgame OPRcoprc for the match. |
np | number | The non-penalty average score for the event. |
average | number | The average average score for the event (with penalties). |
max_np | number | The maximum non-penalty score for the event. |
details | object | The details on the teams performance in the match. This is an object with the following fields: |
  details.auto | object | The auto details for the match. This is an object with the following fields: |
    details.auto.freight | number | The average number of times the team delivered a freight element in auto. |
  details.teleop | object | The teleop details for the match. This is an object with the following fields: |
    details.teleop.high | number | The average number of times the team delivered a freight element in the high tier in teleop. |
    details.teleop.mid | number | The average number of times the team delivered a freight element in the low tier in teleop. |
    details.teleop.shared | number | The average number of times the team delivered a freight element in the shared shipping hub in teleop. |
  details.endgame | object | The endgame details for the match. This is an object with the following fields: |
    details.endgame.ducks | number | The average number of times the team delivered a duck in endgame. |
    details.endgame.cap | number | The average number of times the team delivered a cap in endgame. |
    details.endgame.shared | number | The average number of times the shared shipping hub was tipped towards the team in endgame. |
event | object | The event object. This is an object with the following fields: |
  event.name | string | The name of the event |
  event.state | string | The state of the event. Note some states (i.e. California) are broken up |
quals_rank | number | The rank of the team in the event. |
avg_rp | number | The average RPrp for the team. |
avg_opp | number || null | The average opponent's score for the team. This will be null if the it was a remote tournament. |
matches_played | number | The number of matches played by the team. |
event_type | string | The type of event. This can either local or remote |
record | object | The record for the team. If this is a remote tournament, each of these will be null. This is an object with the following fields: |
  record.w | number || null | The number of wins. |
  record.l | number || null | The number of losses. |
  record.t | number || null | The number of ties. |
- RP (Ranking Points): Ranking Points/Total Ranking Points - The first basis for ranking Teams. In remote events, For a single Team competing remotely, the Team's final score for a Match is used as their Ranking Points. In traditional events: For Teams that compete at a traditional Tournament, each Team receives their alliance's final score for a Match as Ranking Points. Total Ranking Points is the sum of the Ranking Points of all non-Surrogate Matches that a Team plays in a Tournament. Please see section 5.0 for further explanation for how this is used to determine a Team's ranking.↩
- Similar to OPR but we are instead minimizing the Ax-b linear equation rather than solving for Ax=b in order to apply constraints such as ensuring scores >= 0 and imposing upper bounds on game-specific performance.↩
- Normalized/Non-penalty OPR/OPRc: If available, this is the OPR/OPRc when all penalties are removed from matches. For 2021-2022 Freight Frenzy, Normalized OPR includes subtracted penalties.↩
- OPR (Offensive Power Rating): A fairly common way to compute team offense in FRC. How OPRs work↩