Tutorial 10: TTVs

Your team found a two-planet system around an M-dwarf, and guess what, it is near a mean motion resonance. That screams "transit timing variations" (TTVs)! Once again, the fate of the world relies on you to model it.

All codes available on GitHub.

Watch the video (exciting and millenial)

Read the documentation (boring and words)

Before doing a TTV fit, we need to find out the basic properties of the system first. We approach this exactly the same way as all other allesfitter tutorials, and perform a "linear ephemerides" fit first, meaning we fit as usual for an epoch and a linear period. Once we have the results, we can check the *_fit_per_transit_*.pdf plots, and check if we can already spot some transits to deviate from the linear period model.

Next up, we do the actual TTV fit. All you need to adopt is the following:

  • copy over your [data].csv, params.csv, and settings.csv files into a new data directory and let's call it allesfit_with_ttvs for this example
  • in settings.csv, change the row fit_ttvs to True
  • in params.csv, freeze the epoch and period params for all companions to the best-fit value that the linear ephemerides model gave you. Freezing is done by setting the fit column to 0 for these rows.
  • in python, run the line allesfitter.prepare_ttv_fit(allesfit_with_ttvs). This will print you a new set of rows for params.csv right into your Python console. Copy&paste these into your params.csv file. It will also create you plots called preparation_for_TTV_fit_*.jpg, which you can inspect to check that all transits have been identified and numbered correctly.
  • all set! Now you can run allesfitter as usual, using
    • allesfitter.show_initial_guess(allesfit_with_ttvs),
    • allesfitter.ns_fit(allesfit_with_ttvs), and
    • allesfitter.ns_output().

Generally, we recommend Nested Sampling here, as the number of free parameters and the degeneracies for TTV fits are often very high.

Happy TTV fitting!