draft for em algorithm