-
fix … TF1 *gas[2];
-
you use the built-in “gaus” and “pol2” functions so, I don’t think you can use the TF1::RejectPoint mechanism -> you would need to implement your own versions of these functions and inside of them add the possibility to “reject points”
-
if you want to reject points according to the fitted histogram’s bin content, here’s a “trial”: [code]#include “TH1.h”
#include “TF1.h”
#include “TAxis.h”
#include “TLine.h”
#include “TPad.h”
Bool_t reject_flag = kFALSE;
TH1F *reject_h = 0;
Double_t reject_below = 0;
Double_t reject_above = 0;
Double_t MyPol1(Double_t *x, Double_t *par)
{
Double_t v = 0;
if ( reject_flag &&
reject_h &&
(reject_below < reject_above) &&
( (reject_h->GetBinContent(reject_h->FindBin(x[0])) < reject_below) ||
(reject_h->GetBinContent(reject_h->FindBin(x[0])) > reject_above) ) ) {
TF1::RejectPoint();
// v = 0;
} else {
v = par[0] + par[1]*x[0];
}
return v;
}
void trial(void) {
// create the source function and histogram
TF1 *f1 = new TF1(“f1”, “[0] + [1] * x”, 0, 5);
f1->SetParameters(6, -1, 5, 3, 0.2);
TH1F *h = new TH1F(“h”,“reject trial”, 100, 0, 5);
h->FillRandom(“f1”, 2000);
// create the fitting function
TF1 *f = new TF1(“f”, MyPol1, 0, 5, 2);
f->SetParameters(2, -1);
// fit the histogram (everything will automatically be drawn, too)
reject_flag = kTRUE;
reject_h = h; // we will “reject” points from the “reject_h” histogram
reject_below = 10; // we will “reject” points which are below "reject_below"
reject_above = 25; // we will “reject” points which are above "reject_above"
h->Fit(f, “”);
reject_flag = kFALSE;
// draw the “reject_below” and “reject_above” lines
if ( reject_h && (reject_below < reject_above) ) {
Double_t Xmin = reject_h->GetXaxis()->GetXmin();
Double_t Xmax = reject_h->GetXaxis()->GetXmax();
(new TLine(Xmin, reject_below, Xmax, reject_below))->Draw();
(new TLine(Xmin, reject_above, Xmax, reject_above))->Draw();
}
// make sure we see everything
gPad->Modified(); gPad->Update();
}[/code]