Problem in fitting (in function!)

In your “fg” function, you blindly make calculations which may produce “±nan” and “±infinity” values.
You could try:

// if (TMath::IsNaN(valg) || TMath::IsNaN(-valg) || (valg == TMath::Infinity()) || (valg == -TMath::Infinity())) { std::cout << valg << std::endl; }
if (!((valg > -1000.) && (valg < 1000.))) valg = 0.; // a very brutal fix
return valg;