In ROOT, functions are only “available” in a given range - which defaults to [0,1]. (That might be surprising and we’re fixing that for the new interface generation.). Thus this does it:
TF1 *f = new TF1("f","pol4",2.8,3.59); // NOTE the range!
TH1F *h = new TH1F("h","",1000,2.8,3.59);
chain->Draw("Mph>>h");
h->Fit("f");
h->Add(f,-1);
h->Draw();