duderstadt-lab / mars-tutorials

3 stars 2 forks source link

Add supporting for Hidden Markov kinetic modeling HMM using pomegranate #1

Open karlduderstadt opened 2 years ago

karlduderstadt commented 2 years ago

Currently, we have kinetic change point integrated into Mars. This is great for looking at rate changes in pair-wise linear motion. There is an option to set the slope of segments to zero, which allows for the same algorithm to be used to analyze smFRET data and identify switching between different states. This change point model doesn't assume any prior information about how many states there are, their levels or timescales. For long-lives well defined states, which algorithm work very well. However, for short duration states near the time resolution with lots of noise, this algorithm is not ideal.

When more information is know about the systems, for example, known two state switching, it would better to use a model that incorporates this information. In the dynamic FRET example currently in development, a simple two-state model with a switching E value threshold, works well to detect switching events in a Holiday Junction substrate.

It would be nice to also add support for hidden markov models to fit the states for more complex scenarios and when more precise kinetic parameters are desired. The integration with PyImageJ, and now the additional Fiji plugin supporting a conda python 3 scripting engine, allows for easy use of any python package. The package pomegranate appears to offer a very nice solution. We should develop a script and notebook and analyses E values using pomegranate and adds the resulting segments back into the archive. This should also report the kinetic parameters.

karlduderstadt commented 1 year ago

pomegranate was used in the development of deepFRET: DeepFRET: Rapid and automated single molecule FRET data classification using deep learning Johannes Thomsen, Magnus B. Sletfjerding, Stefano Stella, Bijoya Paul, Simon Bo Jensen, Mette G. Malle, Guillermo Montoya, Troels C. Petersen, Nikos S. Hatzakis eLife 2020;9:e60404; doi: 10.7554/eLife.60404

The implementation can be found in the repo: https://github.com/hatzakislab/DeepFRET-GUI

and specifically, the key functions appear to be here: https://github.com/hatzakislab/DeepFRET-GUI/blob/768acd31f8015b3d136b14d17e58e03cffe62313/src/main/python/lib/math.py#L23