To a bowl add all the ingredients listed under "to marinate". Make sure the yogurt that you use here is thick. Whisk to combine everything together.
Trim the outer leaves and stalks of the cauliflower but make sure the head remains intact.
Pour the mixture over the cauliflower head and coat the entire cauliflower with the marinade. Use you hands to spread the marination all over, going to sides and also to the back of the cauliflower.
Cover and refrigerate for a minimum of 1 hour. If you have time, you can even marinate 4-6 hours or even overnight.
Once you have marinated the cauliflower with the masala for a desired amount of time, roast it in the oven at 200C for 40-45 minutes on until tender [a smaller head might get done in less time and a bigger one will take more time so adjust accordingly].
Meanwhile make the sauce. Heat oil in a pan on medium heat. Once the oil is hot, add the cumin seeds and let them sizzle. Then add the onion and cook for 2-3 minutes till soft and translucent.
Add ginger garlic paste and cook for another minute or two till the raw smell goes away. Add the chopped tomatoes along with store bought tomato puree, salt and 1/4 cup of water. Let the tomatoes cook for 3 minutes.
Add red chilli powder, curry powder, sugar and let the masala cook for 2 more minutes.
Once the masala is nicely cooked, add the remaining 3/4 cup water to the pan. Mix everything well and then blend the mixture to a smooth paste.
Transfer the pureed mixture back to the pan and add butter and chopped coriander. Let it all simmer for 2 minutes.
Place the roasted cauliflower in the centre of the serving plate and pour the prepared sauce all around the cauliflower.