diff --git a/ChangeLog b/ChangeLog index b31a9eef..2ddcdf8e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -22,6 +22,8 @@ NEW integration of a few external musrfit plug-ins into the standard build proce NEW default estimates for 'data' and 'background' entries in RUN blocks NEW directory with some msr- and data-files for quick testing of new musrfit installations NEW option to musrt0: the key 'T' will set the t0 cursor to the maximum of the histogram +FIXED wrong WARNING message for use_fit_ranges +FIXED bug in event handling leading to crash for non-muSR when switching between view and difference view FIXED chisq/maxLH lables in the statistics block are properly handled now (MUSR-148) FIXED y-unzoom failure for musrt0 (MUSR-77) FIXED fitting issue for boundaries none/none (MUSR-136) @@ -50,6 +52,7 @@ FIXED warning messages FIXED db data tag reading error FIXED usage of BOOST >= 1.38.0 FIXED the extraction of the time resolution for the mud data format, since MUD_getHistFsPerBin seems sometimes to return just crap. +CHANGED improved y-range scaling for Fourier CHANGED musredit: change into the msr-file directory before calling musrview. This is needed if userFcn's are using startup XMLs. CHANGED musredit: improved file system watcher notification mechanism to prevent multiple user notifications. CHANGED fit range decimal precision handling of PMsrHandler improved (MUSR-150 request). It is now diff --git a/src/classes/PMsrHandler.cpp b/src/classes/PMsrHandler.cpp index 605577f6..482def27 100644 --- a/src/classes/PMsrHandler.cpp +++ b/src/classes/PMsrHandler.cpp @@ -3472,7 +3472,9 @@ Bool_t PMsrHandler::HandlePlotEntry(PMsrLines &lines) param.fYmax.push_back((Double_t)str.Atof()); else error = true; - } else { + } + + if ((tokens->GetEntries() != 1) && (tokens->GetEntries() != 3)) { cerr << endl << ">> PMsrHandler::HandlePlotEntry: **WARNING** use_fit_ranges with undefined additional parameters in line " << iter1->fLineNo; cerr << endl << ">> Will ignore this PLOT block command line, sorry."; cerr << endl << ">> Proper syntax: use_fit_ranges [ymin ymax]"; diff --git a/src/classes/PMusrCanvas.cpp b/src/classes/PMusrCanvas.cpp index 89c1bb5c..554fa9dc 100644 --- a/src/classes/PMusrCanvas.cpp +++ b/src/classes/PMusrCanvas.cpp @@ -3408,9 +3408,15 @@ void PMusrCanvas::PlotFourier(Bool_t unzoom) } // set y-range - // first find minimum/maximum of all histos + // first find minimum/maximum of all histos and theories ymin = GetMinimum(fData[0].dataFourierRe); ymax = GetMaximum(fData[0].dataFourierRe); + binContent = GetMinimum(fData[0].theoryFourierRe); + if (binContent < ymin) + ymin = binContent; + binContent = GetMaximum(fData[0].theoryFourierRe); + if (binContent > ymax) + ymax = binContent; for (UInt_t i=1; i ymax) ymax = binContent; + binContent = GetMinimum(fData[i].theoryFourierRe); + if (binContent < ymin) + ymin = binContent; + binContent = GetMaximum(fData[i].theoryFourierRe); + if (binContent > ymax) + ymax = binContent; } fHistoFrame = fDataTheoryPad->DrawFrame(xmin, 1.05*ymin, xmax, 1.05*ymax); @@ -3463,6 +3475,12 @@ void PMusrCanvas::PlotFourier(Bool_t unzoom) // first find minimum/maximum of all histos ymin = GetMinimum(fData[0].dataFourierIm); ymax = GetMaximum(fData[0].dataFourierIm); + binContent = GetMinimum(fData[0].theoryFourierIm); + if (binContent < ymin) + ymin = binContent; + binContent = GetMaximum(fData[0].theoryFourierIm); + if (binContent > ymax) + ymax = binContent; for (UInt_t i=1; i ymax) ymax = binContent; + binContent = GetMinimum(fData[i].theoryFourierIm); + if (binContent < ymin) + ymin = binContent; + binContent = GetMaximum(fData[i].theoryFourierIm); + if (binContent > ymax) + ymax = binContent; } fHistoFrame = fDataTheoryPad->DrawFrame(xmin, 1.05*ymin, xmax, 1.05*ymax); @@ -3533,6 +3557,21 @@ void PMusrCanvas::PlotFourier(Bool_t unzoom) if (binContent > ymax) ymax = binContent; } + // theory part min/max + for (UInt_t i=0; i ymax) + ymax = binContent; + binContent = GetMinimum(fData[i].theoryFourierIm); + if (binContent < ymin) + ymin = binContent; + binContent = GetMaximum(fData[i].theoryFourierIm); + if (binContent > ymax) + ymax = binContent; + } fHistoFrame = fDataTheoryPad->DrawFrame(xmin, 1.05*ymin, xmax, 1.05*ymax); @@ -3580,9 +3619,15 @@ void PMusrCanvas::PlotFourier(Bool_t unzoom) } // set y-range - // first find minimum/maximum of all histos + // first find minimum/maximum of all histos and theory ymin = GetMinimum(fData[0].dataFourierPwr); ymax = GetMaximum(fData[0].dataFourierPwr); + binContent = GetMinimum(fData[0].theoryFourierPwr); + if (binContent < ymin) + ymin = binContent; + binContent = GetMaximum(fData[0].theoryFourierPwr); + if (binContent > ymax) + ymax = binContent; for (UInt_t i=1; i ymax) ymax = binContent; + binContent = GetMinimum(fData[i].theoryFourierPwr); + if (binContent < ymin) + ymin = binContent; + binContent = GetMaximum(fData[i].theoryFourierPwr); + if (binContent > ymax) + ymax = binContent; } fHistoFrame = fDataTheoryPad->DrawFrame(xmin, 1.05*ymin, xmax, 1.05*ymax); @@ -3633,6 +3684,12 @@ void PMusrCanvas::PlotFourier(Bool_t unzoom) // first find minimum/maximum of all histos ymin = GetMinimum(fData[0].dataFourierPhase); ymax = GetMaximum(fData[0].dataFourierPhase); + binContent = GetMinimum(fData[0].theoryFourierPhase); + if (binContent < ymin) + ymin = binContent; + binContent = GetMaximum(fData[0].theoryFourierPhase); + if (binContent > ymax) + ymax = binContent; for (UInt_t i=1; i ymax) ymax = binContent; + binContent = GetMinimum(fData[i].theoryFourierPhase); + if (binContent < ymin) + ymin = binContent; + binContent = GetMaximum(fData[i].theoryFourierPhase); + if (binContent > ymax) + ymax = binContent; } fHistoFrame = fDataTheoryPad->DrawFrame(xmin, 1.05*ymin, xmax, 1.05*ymax);