Skip to content
Snippets Groups Projects
main.py 3.17 KiB
Newer Older
  • Learn to ignore specific revisions
  • Lennard Geese's avatar
    Lennard Geese committed
    from fastf1.events import Event
    
    Lennard Geese's avatar
    Lennard Geese committed
    
    
    Lennard Geese's avatar
    T
    Lennard Geese committed
    from DataAnalyser import DataAnalyser
    from DataChecker import DataChecker
    
    from DataHandler import SessionIdentifier
    
    Lennard Geese's avatar
    T
    Lennard Geese committed
    from DataImporter import DataImporter
    from DataPlotter import DataPlotter
    
    
    class Main:
    
    
    Lennard Geese's avatar
    Lennard Geese committed
        class DataHandlingPackage:
            importer = DataImporter()
            analyser = DataAnalyser()
            plotter = DataPlotter()
            checker = DataChecker()
    
    
    Lennard Geese's avatar
    T
    Lennard Geese committed
        def main(self):
    
    Lennard Geese's avatar
    Lennard Geese committed
    
    
            #dataHandler = Main.DataHandlingPackage()
            #dataHandler.plotter.plotBackgroundPaintTest()
    
            # self.printRainRaces()
    
    Lennard Geese's avatar
    Lennard Geese committed
    
    
                SessionIdentifier(2022, "Imola", "R"),      # Imola 2022 (DWR)
                SessionIdentifier(2024, "Imola", "R"),      # Imola 2024 (SWR)
                SessionIdentifier(2024, "Montreal", "R"),   # Canada 2024 (DWR)
                SessionIdentifier(2023, "Montreal", "R")    # Canada 2023 (SWR)
    
    Lennard Geese's avatar
    T
    Lennard Geese committed
            ]
    
            self.overtakeAnalysis(racesToAnalyse)
    
    Lennard Geese's avatar
    T
    Lennard Geese committed
    
    
    Lennard Geese's avatar
    Lennard Geese committed
    
    
        def printRainRaces(self):
            dataHandler: Main.DataHandlingPackage = Main.DataHandlingPackage()
            year: int = 2015
            rainRaces: list[Session] = dataHandler.importer.getRainRacesSince(year)
            print(f"Rain races since {max(year, 2018)}")
            for rainRace in rainRaces:
                print(rainRace)
    
    
        def overtakeAnalysis(self, raceSessionIdentifiers: list[SessionIdentifier]):
    
    Lennard Geese's avatar
    Lennard Geese committed
            dataHandler: Main.DataHandlingPackage = self.DataHandlingPackage()
    
    Lennard Geese's avatar
    T
    Lennard Geese committed
    
    
            for raceSessionIdentifier in raceSessionIdentifiers:
    
    Lennard Geese's avatar
    T
    Lennard Geese committed
                # Import
    
                raceSession = dataHandler.importer.importSession(raceSessionIdentifier)
    
                grandPrixName: str = f"{raceSession.event['EventName']} {raceSession.event.year}"
    
    Lennard Geese's avatar
    T
    Lennard Geese committed
                print("Import done")
    
    
    Lennard Geese's avatar
    T
    Lennard Geese committed
                # Analyse
    
                overtakesInRaces: list[int] = dataHandler.analyser.getOvertakesPerLapForRace(raceSession)
    
    Lennard Geese's avatar
    T
    Lennard Geese committed
                print("Overtake analysis done")
                # weatherInRaces = analyser.analyseRaceForWeather(raceSession)
    
    Lennard Geese's avatar
    Lennard Geese committed
                earliestTireChange: int = dataHandler.analyser.getEarliestTireChange(raceSession) # first lap where someone switched from slicks to non slicks or vice versa, denoted by lap number
    
    Lennard Geese's avatar
    T
    Lennard Geese committed
                print("First tire change done")
    
    Lennard Geese's avatar
    Lennard Geese committed
                latestTireChange: int = dataHandler.analyser.getLatestTireChange(raceSession)
    
    Lennard Geese's avatar
    T
    Lennard Geese committed
                print("Last tire change done")
    
    
    
                weatherChangeWindow = DataHandler.WeatherChangeWindow(earliestTireChange, latestTireChange)
                dataHandler.plotter.plotOvertakes(overtakesInRaces, grandPrixName, [weatherChangeWindow])
    
    Lennard Geese's avatar
    T
    Lennard Geese committed
    
    
    
                print(f"\n\n===== Data for {grandPrixName} =====")
    
    
    Lennard Geese's avatar
    T
    Lennard Geese committed
                print("Lap\tOvertakes")
                currentLap = 0
                for overtakesInLap in overtakesInRaces:
                    print(f"{currentLap}\t{overtakesInLap}")
                    currentLap += 1
                print(f"First tire compound: lap {earliestTireChange}")
                print(f"Last tire compound: lap {latestTireChange}")
                print(f"Weather change window is therefore: laps {earliestTireChange-1} - {latestTireChange+1}")
    
    
    if __name__ == '__main__':
        app = Main()
        app.main()