diff --git a/CEP/DP3/AOFlagger/include/AOFlagger/gui/quality/histogrampage.h b/CEP/DP3/AOFlagger/include/AOFlagger/gui/quality/histogrampage.h index e2fb7f66a9bc701952f4cc3fd876bc58f249005c..68d46a520b79de2bce69d9d6f3be525bd92678ad 100644 --- a/CEP/DP3/AOFlagger/include/AOFlagger/gui/quality/histogrampage.h +++ b/CEP/DP3/AOFlagger/include/AOFlagger/gui/quality/histogrampage.h @@ -100,7 +100,7 @@ class HistogramPage : public Gtk::HBox { Gtk::Frame _fitFrame; Gtk::VBox _fitBox; - Gtk::CheckButton _fitButton, _subtractFitButton, _fitAutoRangeButton; + Gtk::CheckButton _fitButton, _subtractFitButton, _fitLogarithmicButton, _fitAutoRangeButton; Gtk::Entry _fitStartEntry, _fitEndEntry; Gtk::TextView _fitTextView; diff --git a/CEP/DP3/AOFlagger/src/gui/quality/histogrampage.cpp b/CEP/DP3/AOFlagger/src/gui/quality/histogrampage.cpp index 1a198e5c0f674735f921bb5025f3e14ebabb6f2b..4654bb8e4fd2929f5dbec9bd926b2010acf55332 100644 --- a/CEP/DP3/AOFlagger/src/gui/quality/histogrampage.cpp +++ b/CEP/DP3/AOFlagger/src/gui/quality/histogrampage.cpp @@ -44,6 +44,7 @@ HistogramPage::HistogramPage() : _fitFrame("Fitting"), _fitButton("Fit"), _subtractFitButton("Subtract"), + _fitLogarithmicButton("Log fit"), _fitAutoRangeButton("Auto range"), _functionFrame("Function"), _nsButton("N(S)"), @@ -96,6 +97,8 @@ HistogramPage::HistogramPage() : _fitButton.signal_clicked().connect(sigc::mem_fun(*this, &HistogramPage::updatePlot)); _fitBox.pack_start(_subtractFitButton, Gtk::PACK_SHRINK); _subtractFitButton.signal_clicked().connect(sigc::mem_fun(*this, &HistogramPage::updatePlot)); + _fitBox.pack_start(_fitLogarithmicButton, Gtk::PACK_SHRINK); + _fitLogarithmicButton.signal_clicked().connect(sigc::mem_fun(*this, &HistogramPage::updatePlot)); _fitBox.pack_start(_fitAutoRangeButton, Gtk::PACK_SHRINK); _fitAutoRangeButton.set_active(true); _fitAutoRangeButton.signal_clicked().connect(sigc::mem_fun(*this, &HistogramPage::onAutoRangeClicked)); @@ -314,6 +317,7 @@ void HistogramPage::plotFit(const LogHistogram &histogram, const std::string &ti } double sigma = sigmaEstimate, n = RayleighFitter::NEstimate(histogram, minRange, maxRange); RayleighFitter fitter; + fitter.SetFitLogarithmic(_fitLogarithmicButton.get_active()); fitter.Fit(minRange, maxRange, histogram, sigma, n); if(_fitButton.get_active()) { diff --git a/CEP/DP3/AOFlagger/src/quality/rayleighfitter.cpp b/CEP/DP3/AOFlagger/src/quality/rayleighfitter.cpp index f59518317e9860438ebaee59dfedb77061ab0779..090c223ca2ae504da600602fc59f72f57697fc62 100644 --- a/CEP/DP3/AOFlagger/src/quality/rayleighfitter.cpp +++ b/CEP/DP3/AOFlagger/src/quality/rayleighfitter.cpp @@ -33,10 +33,9 @@ static int fit_f(const gsl_vector *xvec, void *data, gsl_vector *f) double sigmaP2 = sigma*sigma; double Yi = x * exp(-(x*x)/(2*sigmaP2)) * n / sigmaP2; if(fitter.FitLogarithmic()) - gsl_vector_set(f, t, (Yi - val)); - else gsl_vector_set(f, t, log(Yi) - log(val)); - + else + gsl_vector_set(f, t, (Yi - val)); ++t; } }