// // // B O R R O W E D F R O M T U T O R I A L S / F I T 2 . C // // TEllipse *pEllipse=0; Double_t g2(Double_t *x, Double_t *par) { Double_t r1 = Double_t((x[0]-par[1])/par[2]); Double_t r2 = Double_t((x[1]-par[3])/par[4]); return par[0]*TMath::Exp(-0.5*(r1*r1+r2*r2)); } Double_t fun2(Double_t *x, Double_t *par) { Double_t *p1 = &par[0]; Double_t *p2 = &par[5]; Double_t *p3 = &par[10]; Double_t result = g2(x,p1) + g2(x,p2) + g2(x,p3); return result; } void Start() { const Int_t npar = 15; Double_t f2params[npar] = {100,-3,3,-3,3,160,0,0.8,0,0.9,40,4,0.7,4,0.7}; TF2 *f2 = new TF2("f2",fun2,-10,10,-10,10, npar); f2->SetParameters(f2params); //Create an histogram and fill it randomly with f2 TH2F *h2 = new TH2F("h2","from f2",100,-10,10,100,-10,10); Int_t nentries = 100000; h2->FillRandom("f2",nentries); h2->Draw("colz"); gPad->AddExec("ex1","event()"); gStyle->SetPalette(1,0); } void event() { static Bool_t bDown=false; static Double_t xc,yc,rc; static TH2F *h; static Double_t x0,y0; Double_t x,y; int ix,iy; int event = gPad->GetEvent(); if ( (kButton1Down!=event) && (kButton1Up!=event) && (kButton1Motion!=event) && (kMouseMotion!=event)) return; TObject *select = gPad->GetSelected(); if (!select) return; if (select->InheritsFrom("TEllipse")) goto here; // what a kludge! //printf("%s %d\n",select->GetName(),event); if (!select->InheritsFrom("TH2")) return; h = (TH2F *)select; ix = gPad->GetEventX(); iy = gPad->GetEventY(); x = gPad->AbsPixeltoX(ix); y = gPad->AbsPixeltoY(iy); //printf("event x,y = %d %f %f\n",event,x,y); if (kButton1Down==event || ((kButton1Motion==event) & !bDown)) { bDown=true; x0 = x; y0 = y; } else if (kButton1Motion==event || bDown) { //printf("x0,y0=%f %f\n",x0,y0); xc = 0.5*(x+x0); yc = 0.5*(y+y0); rc = 0.5*sqrt((x-x0)*(x-x0)+(y-y0)*(y-y0)); if (pEllipse) delete pEllipse; pEllipse = new TEllipse(xc,yc,rc,rc); pEllipse->SetLineColor(2); pEllipse->SetLineWidth(3); pEllipse->Draw(); gPad->Update(); } here: if (kButton1Up==event || (kMouseMotion==event&&bDown)) { bDown=false; printf(" xc, yc, rc = %7.2f %7.2f %7.2f\n",xc,yc,rc); gPad->DeleteExec("ex1"); } }