{ gROOT->ProcessLine(".L th1fmorph.C"); // Dependency gStyle->SetOptStat(false); gStyle->SetOptTitle(false); // Background model is simple exponential TF1 *exp = new TF1("exp1","expo",80,150); exp->SetParameters(1,-0.030); TF1 *pdf1 = new TF1("pdf1","ROOT::Math::normal_pdf(x, [0],[1])",80,150); TF1 *pdf2 = new TF1("pdf2","ROOT::Math::normal_pdf(x, [0],[1])",80,150); TF1 *pdfmid = new TF1("pdfmid","ROOT::Math::normal_pdf(x, [0],[1])",80,150); Double_t sigma1=2, sigma2=3, sigmamid=0.5*(sigma1+sigma2); pdf1->SetParameters(sigma1,100); pdf2->SetParameters(sigma2,140); pdfmid->SetParameters(sigmamid,120); TH1F *hdf1=(TH1F *)gROOT->FindObject("hdf1"); if(hdf1) delete hdf1; TH1F *hdf2=(TH1F *)gROOT->FindObject("hdf2"); if(hdf2) delete hdf2; TH1F *hdfmid=(TH1F *)gROOT->FindObject("hdfmid"); if(hdfmid) delete hdfmid; hdf1=new TH1F("hdf1","new",100,80,150); hdf2=new TH1F("hdf2","new",100,80,150); hdfmid=new TH1F("hdfmid","new",100,80,150); Double_t s=100000, b=5000000; hdf1->FillRandom("exp1",b); hdf2->FillRandom("exp1",b); hdfmid->FillRandom("exp1",b); hdf1->FillRandom("pdf1",s); hdf2->FillRandom("pdf2",s); hdfmid->FillRandom("pdfmid",s); TH1F *ginterp=(TH1F *)gROOT->FindObject("ginterp"); if(ginterp) delete ginterp; ginterp = (TH1F *)th1fmorph("ginterp","Interpolated gaussian",hdf1,hdf2 ,100,140,120,s+b,0); hdf1->SetLineStyle(2); hdf2->SetLineStyle(2); hdfmid->SetLineStyle(2); hdf1->Draw(); hdf2->Draw("same"); hdfmid->Draw("same"); TH1F *ginterpnew=(TH1F *)gROOT->FindObject("ginterp"); if(ginterpnew) delete ginterpnew; TH1F *ginterpprev=(TH1F *)gROOT->FindObject("ginterp"); if(ginterpprev) delete ginterpprev; ostringstream histname; TString hname; for(Double_t x=100.;x<=140.;x+=1.) { // Prepare the new distribution histname.seekp(0); histname << "ginterp" << x; hname = histname.str(); ginterpnew = (TH1F *)gROOT->FindObject(hname); if (ginterpnew) delete ginterpnew; ginterpnew = (TH1F *)th1fmorph(hname,"Interpolated gaussian" ,hdf1,hdf2,100,140,x,s+b,0); // Draw the new distribution. ginterpnew->Draw("same"); // Delete the previous disttribution if (ginterpprev) delete ginterpprev; // Swap what is new and previous for the next iteration ginterpprev = ginterpnew; c1->Update(); gSystem->Sleep(0110); } }