-
Notifications
You must be signed in to change notification settings - Fork 0
/
Report_Laps.Rmd
114 lines (107 loc) · 3.74 KB
/
Report_Laps.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
---
output: html_document
resource_files:
- Data/*
- WEC_Races.Rdata
runtime: shiny
---
```{r init,cache=FALSE,echo=FALSE,warning=FALSE}
source("WEC_Analysis.R")
source("Gap_Analysis.R")
source("WEC_Races.R")
source("Lap_Chart.R")
```
```{r sel_race,echo=FALSE}
selectInput("race", label=h3("Select Race"), choices=choices, selected="Silverstone_2016")
```
```{r css,echo=FALSE}
CSS <- "
.main-container {
max-width: 1500px;
}
"
tags$style(HTML(CSS))
```
```{r main,echo=FALSE,fig.width=18,fig.height=16}
observe({
print(paste("Tab:", input$tab))
})
observe({
print(paste("Tab:", input$tab))
if (!is.null(input$race)) {
print(paste("Loading race:", input$race))
race <- retrieve_race(input$race)
choices <- as.list(as.integer(as.character(race$Car.Info$NUMBER)))
names(choices) <- paste(as.character(race$Car.Info$NUMBER), " - ", as.character(race$Car.Info$TEAM), " [", as.character(race$Car.Info$CLASS), "]", sep="")
updateSelectInput(session, "car1", choices=choices, selected=as.integer(input$car1))
updateSelectInput(session, "car2", choices=choices, selected=as.integer(input$car2))
}
})
tabsetPanel(id="tab",
tabPanel("Lap Chart", id="pc",
renderPlot({
if (!is.null(input$race)) {
race <- retrieve_race(input$race)
LC <- lap_chart(race, TRUE)
LC.DT <- race$fill_info(DT_from_lap_chart(LC))
LC.DT[, Lap := X]
qplot(Lap,Pos,data=LC.DT, group=Car.Number, geom="line", col=Class) + plot_styles$color_by_class + coord_cartesian(expand=FALSE)
}
})
),
tabPanel("Position Chart", id="pc",
renderPlot({
if (!is.null(input$race)) {
race <- retrieve_race(input$race)
hours <- if (length(grep("Le_Mans", input$race))) 24 else 6
LC <- lap_chart_by_time(race, seq(0, hours*3600, 60))
LC.DT <- race$fill_info(DT_from_lap_chart(LC))
LC.DT$Hour <- LC.DT$X / 3600
qplot(Hour,Pos,data=LC.DT, group=Car.Number, geom="line", col=Class) + plot_styles$color_by_class + coord_cartesian(expand=FALSE)
}
})
),
tabPanel("Gap Evolution", id="ge",
renderPlot({
if (!is.null(input$race) & !is.null(input$car1) & !is.null(input$car2)) {
race <- retrieve_race(input$race)
if (input$car1 != input$car2) gap_evolution_graph(race, as.integer(input$car1), as.integer(input$car2), ylim=60*c(-2^input$time_range_min, 2^input$time_range_max), xlim=input$range)
else ggplot(aes(x=0,y=0), data=data.frame()) + geom_text(aes(x=0,y=0), label="Please select two different cars.")
}
}, height=640)
),
tabPanel("Classification", id="c",
renderTable({
if (!is.null(input$race)) {
race <- retrieve_race(input$race)
TB <- as.data.table(race$Classification)[,.(POSITION,NUMBER,TEAM,TYRES,CLASS,GROUP,STATUS,LAPS,FL_TIME,GAP_PREVIOUS)]
setkey(TB, POSITION)
TB
}
})
)
)
```
### Gap Evolution (controls)
```{r gap_evolution_controls,echo=FALSE}
conditionalPanel(condition="{input$tab == \"Gap Evolution\"}",
div(
fluidRow(
column(4,
selectInput("car1", label="Car 1", choices=list("---"=1,"---"=2), selected=2),
selectInput("car2", label="Car 2", choices=list("---"=2,"---"=5), selected=5)
),
column(8,
sliderInput("range", "Lap Range:", min=0, max=400, value = c(0,400)),
sliderInput("time_range_max", "log Time Range (max):", min=0, max=10, value=1,step=0.01),
sliderInput("time_range_min", "log Time Range (min):", min=0, max=10, value=1, step=0.01)
)
),
class='shiny-input-panel'
)
)
```
- Gap: Measured at each sector by the difference of arrival time. Negative means Car 1 is ahead of Car 2.
- Orange bars: Pitstop times for Car 1
- Blue bars: Pitstop times for Car 2
- Green lines: Rate of change in gap