This commit is contained in:
2018-01-18 14:00:05 +01:00
16 changed files with 222 additions and 53 deletions

View File

@ -12,6 +12,17 @@ or
https://bitbucket.org/muonspin/musrfit/commits/all https://bitbucket.org/muonspin/musrfit/commits/all
Release of V1.2.0, 2017/10/26
=============================
Adopted to be ready for rpm builds in a first step. This will be followed by debian style
packages.
Release of V1.1.0, 2017/10/26
=============================
Added full DKS support, i.e. additionally to CUDA also OpenCL for GPU's and CPU's in place.
Release of V1.0.0, 2017/05/18 Release of V1.0.0, 2017/05/18
============================= =============================

View File

@ -1,7 +1,7 @@
AC_REVISION([m4_esyscmd_s([git describe --always])]) AC_REVISION([m4_esyscmd_s([git describe --always])])
AC_PREREQ(2.63) AC_PREREQ(2.63)
AC_INIT([musrfit],[1.1.0],[andreas.suter@psi.ch]) AC_INIT([musrfit],[1.2.0],[andreas.suter@psi.ch])
AC_CONFIG_AUX_DIR(admin) AC_CONFIG_AUX_DIR(admin)
AC_CANONICAL_HOST AC_CANONICAL_HOST
#AC_MSG_RESULT([${host} ${host_cpu} ${host_vendor} ${host_os}]) #AC_MSG_RESULT([${host} ${host_cpu} ${host_vendor} ${host_os}])
@ -35,7 +35,7 @@ dnl -----------------------------------------------
#release versioning #release versioning
MUSR_MAJOR_VERSION=1 MUSR_MAJOR_VERSION=1
MUSR_MINOR_VERSION=1 MUSR_MINOR_VERSION=2
MUSR_MICRO_VERSION=0 MUSR_MICRO_VERSION=0
#release versioning #release versioning
@ -1212,11 +1212,24 @@ else
INSTALLDIR="${prefix}" INSTALLDIR="${prefix}"
fi fi
if test -d "${INSTALLDIR}/doc" dnl only define DOCDIR if not already present. This allows
dnl to feed DOCDIR on the configure level which is useful when
dnl for instance building a rpm. DOCDIR2 is needed for rpmbuild only
if test "x${DOCDIR}" = "x"
then then
if test -d "${INSTALLDIR}/doc"
then
DOCDIR="${INSTALLDIR}/doc/musrfit" DOCDIR="${INSTALLDIR}/doc/musrfit"
else else
DOCDIR="${INSTALLDIR}/share/doc/musrfit" DOCDIR="${INSTALLDIR}/share/doc/musrfit"
fi
else
if test -d "${INSTALLDIR}/doc"
then
DOCDIR2="${INSTALLDIR}/doc/musrfit"
else
DOCDIR2="${INSTALLDIR}/share/doc/musrfit"
fi
fi fi
AC_SUBST(DOCDIR) AC_SUBST(DOCDIR)
@ -1441,12 +1454,21 @@ echo ""
dnl -------------- dnl --------------
dnl create header file that musredit knows at runtime where to find the documentation dnl create header file that musredit knows at runtime where to find the documentation
dnl the DOCDIR2 tag is used for rpmbuild only
dnl -------------- dnl --------------
if test "x$enable_editor" != "xno" && test "x${QMAKEBIN}" != "x" && test "x${QTEDITOR}" = "xmusredit_qt5"; then if test "x$enable_editor" != "xno" && test "x${QMAKEBIN}" != "x" && test "x${QTEDITOR}" = "xmusredit_qt5"; then
echo \#define MUSRFIT_PREFIX \"${INSTALLDIR}\" > src/musredit_qt5/musrfit-info.h echo \#define MUSRFIT_PREFIX \"${INSTALLDIR}\" > src/musredit_qt5/musrfit-info.h
if test "x$DOCDIR2" = "x"; then
echo \#define MUSRFIT_DOC_DIR \"${DOCDIR}\" >> src/musredit_qt5/musrfit-info.h echo \#define MUSRFIT_DOC_DIR \"${DOCDIR}\" >> src/musredit_qt5/musrfit-info.h
else
echo \#define MUSRFIT_DOC_DIR \"${DOCDIR2}\" >> src/musredit_qt5/musrfit-info.h
fi
fi fi
if test "x$enable_editor" != "xno" && test "x${QMAKEBIN}" != "x" && test "x${QTEDITOR}" = "xmusredit"; then if test "x$enable_editor" != "xno" && test "x${QMAKEBIN}" != "x" && test "x${QTEDITOR}" = "xmusredit"; then
echo \#define MUSRFIT_PREFIX \"${INSTALLDIR}\" > src/musredit/musrfit-info.h echo \#define MUSRFIT_PREFIX \"${INSTALLDIR}\" > src/musredit/musrfit-info.h
if test "x$DOCDIR2" = "x"; then
echo \#define MUSRFIT_DOC_DIR \"${DOCDIR}\" >> src/musredit/musrfit-info.h echo \#define MUSRFIT_DOC_DIR \"${DOCDIR}\" >> src/musredit/musrfit-info.h
else
echo \#define MUSRFIT_DOC_DIR \"${DOCDIR2}\" >> src/musredit/musrfit-info.h
fi
fi fi

Binary file not shown.

View File

@ -0,0 +1,60 @@
BaB6 T20K LF5G
###############################################################
FITPARAMETER
# Nr. Name Value Step Pos_Error Boundaries
1 alpha 0.7 0 none 0 none
2 asy 0.2091 -0.0013 0.0013 0 0.33
3 field 2.127 0 none 0 none
4 width 0.5387 -0.0054 0.0055 0 100
5 hopp 0.119 -0.013 0.014 0 100
6 asyConst 0 0 none
###############################################################
THEORY
asymmetry 2
dynGssKTLF fun1 4 5 (frequency damping hopping-rate)
+
asymmetry 6
###############################################################
FUNCTIONS
fun1 = par3 * gamma_mu
###############################################################
RUN data/deltat_tdc_dolly_1020 PIE1 PSI PSI-BIN (name beamline institute data-file-format)
fittype 2 (asymmetry fit)
alpha 1
map 0 0 0 0 0 0 0 0 0 0
forward 2
backward 1
background 15 146 13 148 # estimated bkg: 20.4846 / 4.8731
data 170 9956 168 9110
t0 160.0 161.0
fit 0.25 10
packing 5
###############################################################
COMMANDS
MINIMIZE
MINOS
SAVE
###############################################################
FOURIER
units Gauss # units either 'Gauss', 'MHz', or 'Mc/s'
fourier_power 12
apodization STRONG # NONE, WEAK, MEDIUM, STRONG
plot POWER # REAL, IMAG, REAL_AND_IMAG, POWER, PHASE
phase 8
#range_for_phase_correction 50.0 70.0
range 0 800
###############################################################
PLOT 2 (asymmetry plot)
runs 1
range 0 9.5 -0.15 0.3
view_packing 150
###############################################################
STATISTIC --- 2013-07-01 20:40:44
chisq = 1911.7, NDF = 1905, chisq/NDF = 1.003494

View File

@ -1138,7 +1138,12 @@ Bool_t PFitter::ExecuteHesse()
TString str = TString::Format("Hesse: %.3f sec", (end-start)/1.0e3); TString str = TString::Format("Hesse: %.3f sec", (end-start)/1.0e3);
fElapsedTime.push_back(str); fElapsedTime.push_back(str);
if (!mnState.IsValid()) { if (!mnState.IsValid()) {
cerr << endl << ">> PFitter::ExecuteHesse(): **WARNING** Hesse encountered some problems!"; cerr << endl << ">> PFitter::ExecuteHesse(): **WARNING** Hesse encountered a problem! The state found is invalid.";
cerr << endl;
return false;
}
if (!mnState.HasCovariance()) {
cerr << endl << ">> PFitter::ExecuteHesse(): **WARNING** Hesse encountered a problem! No covariance matrix available.";
cerr << endl; cerr << endl;
return false; return false;
} }

View File

@ -163,6 +163,9 @@ Int_t PMsrHandler::ReadMsrFile()
continue; continue;
} }
// remove leading spaces
line.Remove(TString::kLeading, ' ');
if (!line.IsWhitespace()) { // if not an empty line, handle it if (!line.IsWhitespace()) { // if not an empty line, handle it
// check for a msr block // check for a msr block
if (line_no == 1) { // title if (line_no == 1) { // title
@ -3184,7 +3187,7 @@ Bool_t PMsrHandler::HandleRunEntry(PMsrLines &lines)
Bool_t error = false; Bool_t error = false;
Bool_t runLinePresent = false; Bool_t runLinePresent = false;
TString str; TString str, line;
TObjArray *tokens = 0; TObjArray *tokens = 0;
TObjString *ostr = 0; TObjString *ostr = 0;
@ -3209,8 +3212,13 @@ Bool_t PMsrHandler::HandleRunEntry(PMsrLines &lines)
return false; return false;
} }
// copy of the current line
line = iter->fLine;
// strip leading spaces from the begining
line.Remove(TString::kLeading, ' ');
// RUN line ---------------------------------------------- // RUN line ----------------------------------------------
if (iter->fLine.BeginsWith("run", TString::kIgnoreCase)) { if (line.BeginsWith("run", TString::kIgnoreCase)) {
runLinePresent = true; // this is needed to make sure that a run line is present before and ADDRUN is following runLinePresent = true; // this is needed to make sure that a run line is present before and ADDRUN is following
@ -3247,7 +3255,7 @@ Bool_t PMsrHandler::HandleRunEntry(PMsrLines &lines)
} }
// ADDRUN line --------------------------------------------- // ADDRUN line ---------------------------------------------
if (iter->fLine.BeginsWith("addrun", TString::kIgnoreCase)) { if (line.BeginsWith("addrun", TString::kIgnoreCase)) {
if (!runLinePresent) { if (!runLinePresent) {
cerr << endl << ">> PMsrHandler::HandleRunEntry: **ERROR** Found ADDRUN without prior RUN, or"; cerr << endl << ">> PMsrHandler::HandleRunEntry: **ERROR** Found ADDRUN without prior RUN, or";
@ -3282,7 +3290,7 @@ Bool_t PMsrHandler::HandleRunEntry(PMsrLines &lines)
} }
// fittype ------------------------------------------------- // fittype -------------------------------------------------
if (iter->fLine.BeginsWith("fittype", TString::kIgnoreCase)) { if (line.BeginsWith("fittype", TString::kIgnoreCase)) {
runLinePresent = false; // this is needed to make sure that a run line is present before and ADDRUN is following runLinePresent = false; // this is needed to make sure that a run line is present before and ADDRUN is following
@ -3310,7 +3318,7 @@ Bool_t PMsrHandler::HandleRunEntry(PMsrLines &lines)
} }
// alpha ------------------------------------------------- // alpha -------------------------------------------------
if (iter->fLine.BeginsWith("alpha", TString::kIgnoreCase)) { if (line.BeginsWith("alpha", TString::kIgnoreCase)) {
runLinePresent = false; // this is needed to make sure that a run line is present before and ADDRUN is following runLinePresent = false; // this is needed to make sure that a run line is present before and ADDRUN is following
@ -3332,7 +3340,7 @@ Bool_t PMsrHandler::HandleRunEntry(PMsrLines &lines)
} }
// beta ------------------------------------------------- // beta -------------------------------------------------
if (iter->fLine.BeginsWith("beta", TString::kIgnoreCase)) { if (line.BeginsWith("beta", TString::kIgnoreCase)) {
runLinePresent = false; // this is needed to make sure that a run line is present before and ADDRUN is following runLinePresent = false; // this is needed to make sure that a run line is present before and ADDRUN is following
@ -3354,7 +3362,7 @@ Bool_t PMsrHandler::HandleRunEntry(PMsrLines &lines)
} }
// norm ------------------------------------------------- // norm -------------------------------------------------
if (iter->fLine.BeginsWith("norm", TString::kIgnoreCase)) { if (line.BeginsWith("norm", TString::kIgnoreCase)) {
runLinePresent = false; // this is needed to make sure that a run line is present before and ADDRUN is following runLinePresent = false; // this is needed to make sure that a run line is present before and ADDRUN is following
@ -3378,7 +3386,7 @@ Bool_t PMsrHandler::HandleRunEntry(PMsrLines &lines)
} }
// backgr.fit -------------------------------------------- // backgr.fit --------------------------------------------
if (iter->fLine.BeginsWith("backgr.fit", TString::kIgnoreCase)) { if (line.BeginsWith("backgr.fit", TString::kIgnoreCase)) {
runLinePresent = false; // this is needed to make sure that a run line is present before and ADDRUN is following runLinePresent = false; // this is needed to make sure that a run line is present before and ADDRUN is following
@ -3400,7 +3408,7 @@ Bool_t PMsrHandler::HandleRunEntry(PMsrLines &lines)
} }
// lifetime ------------------------------------------------ // lifetime ------------------------------------------------
if (iter->fLine.BeginsWith("lifetime ", TString::kIgnoreCase)) { if (line.BeginsWith("lifetime ", TString::kIgnoreCase)) {
runLinePresent = false; // this is needed to make sure that a run line is present before and ADDRUN is following runLinePresent = false; // this is needed to make sure that a run line is present before and ADDRUN is following
@ -3422,7 +3430,7 @@ Bool_t PMsrHandler::HandleRunEntry(PMsrLines &lines)
} }
// lifetimecorrection --------------------------------------- // lifetimecorrection ---------------------------------------
if (iter->fLine.BeginsWith("lifetimecorrection", TString::kIgnoreCase)) { if (line.BeginsWith("lifetimecorrection", TString::kIgnoreCase)) {
runLinePresent = false; // this is needed to make sure that a run line is present before and ADDRUN is following runLinePresent = false; // this is needed to make sure that a run line is present before and ADDRUN is following
@ -3430,7 +3438,7 @@ Bool_t PMsrHandler::HandleRunEntry(PMsrLines &lines)
} }
// map ------------------------------------------------------ // map ------------------------------------------------------
if (iter->fLine.BeginsWith("map", TString::kIgnoreCase)) { if (line.BeginsWith("map", TString::kIgnoreCase)) {
runLinePresent = false; // this is needed to make sure that a run line is present before and ADDRUN is following runLinePresent = false; // this is needed to make sure that a run line is present before and ADDRUN is following
@ -3460,7 +3468,7 @@ Bool_t PMsrHandler::HandleRunEntry(PMsrLines &lines)
} }
// forward ------------------------------------------------ // forward ------------------------------------------------
if (iter->fLine.BeginsWith("forward", TString::kIgnoreCase)) { if (line.BeginsWith("forward", TString::kIgnoreCase)) {
runLinePresent = false; // this is needed to make sure that a run line is present before and ADDRUN is following runLinePresent = false; // this is needed to make sure that a run line is present before and ADDRUN is following
@ -3485,7 +3493,7 @@ Bool_t PMsrHandler::HandleRunEntry(PMsrLines &lines)
} }
// backward ----------------------------------------------- // backward -----------------------------------------------
if (iter->fLine.BeginsWith("backward", TString::kIgnoreCase)) { if (line.BeginsWith("backward", TString::kIgnoreCase)) {
runLinePresent = false; // this is needed to make sure that a run line is present before and ADDRUN is following runLinePresent = false; // this is needed to make sure that a run line is present before and ADDRUN is following
@ -3510,7 +3518,7 @@ Bool_t PMsrHandler::HandleRunEntry(PMsrLines &lines)
} }
// backgr.fix ---------------------------------------------- // backgr.fix ----------------------------------------------
if (iter->fLine.BeginsWith("backgr.fix", TString::kIgnoreCase)) { if (line.BeginsWith("backgr.fix", TString::kIgnoreCase)) {
runLinePresent = false; // this is needed to make sure that a run line is present before and ADDRUN is following runLinePresent = false; // this is needed to make sure that a run line is present before and ADDRUN is following
@ -3529,7 +3537,7 @@ Bool_t PMsrHandler::HandleRunEntry(PMsrLines &lines)
} }
// background --------------------------------------------- // background ---------------------------------------------
if (iter->fLine.BeginsWith("background", TString::kIgnoreCase)) { if (line.BeginsWith("background", TString::kIgnoreCase)) {
runLinePresent = false; // this is needed to make sure that a run line is present before and ADDRUN is following runLinePresent = false; // this is needed to make sure that a run line is present before and ADDRUN is following
@ -3553,7 +3561,7 @@ Bool_t PMsrHandler::HandleRunEntry(PMsrLines &lines)
} }
// data -------------------------------------------------- // data --------------------------------------------------
if (iter->fLine.BeginsWith("data", TString::kIgnoreCase)) { if (line.BeginsWith("data", TString::kIgnoreCase)) {
runLinePresent = false; // this is needed to make sure that a run line is present before and ADDRUN is following runLinePresent = false; // this is needed to make sure that a run line is present before and ADDRUN is following
@ -3577,7 +3585,7 @@ Bool_t PMsrHandler::HandleRunEntry(PMsrLines &lines)
} }
// t0 ----------------------------------------------------- // t0 -----------------------------------------------------
if (iter->fLine.BeginsWith("t0", TString::kIgnoreCase)) { if (line.BeginsWith("t0", TString::kIgnoreCase)) {
runLinePresent = false; // this is needed to make sure that a run line is present before and ADDRUN is following runLinePresent = false; // this is needed to make sure that a run line is present before and ADDRUN is following
@ -3601,7 +3609,7 @@ Bool_t PMsrHandler::HandleRunEntry(PMsrLines &lines)
} }
// addt0 ----------------------------------------------------- // addt0 -----------------------------------------------------
if (iter->fLine.BeginsWith("addt0", TString::kIgnoreCase)) { if (line.BeginsWith("addt0", TString::kIgnoreCase)) {
runLinePresent = false; // this is needed to make sure that a run line is present before and ADDRUN is following runLinePresent = false; // this is needed to make sure that a run line is present before and ADDRUN is following
@ -3627,7 +3635,7 @@ Bool_t PMsrHandler::HandleRunEntry(PMsrLines &lines)
} }
// fit ----------------------------------------------------- // fit -----------------------------------------------------
if (iter->fLine.BeginsWith("fit ", TString::kIgnoreCase)) { if (line.BeginsWith("fit ", TString::kIgnoreCase)) {
runLinePresent = false; // this is needed to make sure that a run line is present before and ADDRUN is following runLinePresent = false; // this is needed to make sure that a run line is present before and ADDRUN is following
@ -3682,7 +3690,7 @@ Bool_t PMsrHandler::HandleRunEntry(PMsrLines &lines)
} }
// packing -------------------------------------------------- // packing --------------------------------------------------
if (iter->fLine.BeginsWith("packing", TString::kIgnoreCase)) { if (line.BeginsWith("packing", TString::kIgnoreCase)) {
runLinePresent = false; // this is needed to make sure that a run line is present before and ADDRUN is following runLinePresent = false; // this is needed to make sure that a run line is present before and ADDRUN is following
@ -3704,7 +3712,7 @@ Bool_t PMsrHandler::HandleRunEntry(PMsrLines &lines)
} }
// xy-data ----------------------------------------------- // xy-data -----------------------------------------------
if (iter->fLine.BeginsWith("xy-data", TString::kIgnoreCase)) { if (line.BeginsWith("xy-data", TString::kIgnoreCase)) {
runLinePresent = false; // this is needed to make sure that a run line is present before and ADDRUN is following runLinePresent = false; // this is needed to make sure that a run line is present before and ADDRUN is following

View File

@ -1502,12 +1502,25 @@ void PMusrCanvas::HandleMenuPopup(Int_t id)
*/ */
void PMusrCanvas::LastCanvasClosed() void PMusrCanvas::LastCanvasClosed()
{ {
// cout << endl << ">> in last canvas closed check ..."; // cerr << ">> in last canvas closed check. gROOT->GetListOfCanvases()->GetEntries()=" << gROOT->GetListOfCanvases()->GetEntries() << endl;
if (gROOT->GetListOfCanvases()->IsEmpty()) { if (gROOT->GetListOfCanvases()->IsEmpty()) {
Done(0); Done(0);
} }
} }
//--------------------------------------------------------------------------
// WindowClosed (SLOT)
//--------------------------------------------------------------------------
/**
* <p>Slot called when the canvas is closed. Seems to be necessary on some systems.
*/
void PMusrCanvas::WindowClosed()
{
// cerr << ">> fMainCanvas->GetName()=" << fMainCanvas->GetName() << endl;
gROOT->GetListOfCanvases()->Remove(fMainCanvas);
LastCanvasClosed();
}
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
// SaveGraphicsAndQuit // SaveGraphicsAndQuit
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
@ -2374,9 +2387,12 @@ void PMusrCanvas::InitMusrCanvas(const Char_t* title, Int_t wtopx, Int_t wtopy,
return; return;
} }
fMainCanvas->Connect("Closed()", "PMusrCanvas", this, "LastCanvasClosed()");
// add canvas menu if not in batch mode // add canvas menu if not in batch mode
if (!fBatchMode) { if (!fBatchMode) {
fImp = (TRootCanvas*)fMainCanvas->GetCanvasImp(); fImp = (TRootCanvas*)fMainCanvas->GetCanvasImp();
fImp->Connect("CloseWindow()", "PMusrCanvas", this, "WindowClosed()");
fBar = fImp->GetMenuBar(); fBar = fImp->GetMenuBar();
fPopupMain = fBar->AddPopup("&Musrfit"); fPopupMain = fBar->AddPopup("&Musrfit");

View File

@ -1774,11 +1774,17 @@ Bool_t PRunAsymmetry::GetProperDataRange(PRawRunData* runData, UInt_t histoNo[2]
return false; return false;
} }
// 3rd check if end is within proper bounds // 3rd check if end is within proper bounds
if ((end[i] < 0) || (end[i] > (Int_t)runData->GetDataBin(histoNo[i])->size())) { if (end[i] < 0) {
cerr << endl << ">> PRunAsymmetry::GetProperDataRange(): **ERROR** end data bin doesn't make any sense!"; cerr << endl << ">> PRunAsymmetry::GetProperDataRange(): **ERROR** end data bin (" << end[i] << ") doesn't make any sense!";
cerr << endl; cerr << endl;
return false; return false;
} }
if (end[i] > (Int_t)runData->GetDataBin(histoNo[i])->size()) {
cerr << endl << ">> PRunAsymmetry::GetProperDataRange(): **WARNING** end data bin (" << end[i] << ") > histo length (" << (Int_t)runData->GetDataBin(histoNo[i])->size() << ").";
cerr << endl << ">> Will set end = (histo length - 1). Consider to change it in the msr-file." << endl;
cerr << endl;
end[i] = (Int_t)runData->GetDataBin(histoNo[i])->size()-1;
}
// 4th check if t0 is within proper bounds // 4th check if t0 is within proper bounds
if ((t0[i] < 0) || (t0[i] > (Int_t)runData->GetDataBin(histoNo[i])->size())) { if ((t0[i] < 0) || (t0[i] > (Int_t)runData->GetDataBin(histoNo[i])->size())) {
cerr << endl << ">> PRunAsymmetry::GetProperDataRange(): **ERROR** t0 data bin doesn't make any sense!"; cerr << endl << ">> PRunAsymmetry::GetProperDataRange(): **ERROR** t0 data bin doesn't make any sense!";

View File

@ -1414,11 +1414,17 @@ Bool_t PRunAsymmetryRRF::GetProperDataRange(PRawRunData* runData, UInt_t histoNo
return false; return false;
} }
// 3rd check if end is within proper bounds // 3rd check if end is within proper bounds
if ((end[i] < 0) || (end[i] > (Int_t)runData->GetDataBin(histoNo[i])->size())) { if (end[i] < 0) {
cerr << endl << ">> PRunAsymmetryRRF::GetProperDataRange(): **ERROR** end data bin doesn't make any sense!"; cerr << endl << ">> PRunAsymmetryRRF::GetProperDataRange(): **ERROR** end data bin (" << end[i] << ") doesn't make any sense!";
cerr << endl; cerr << endl;
return false; return false;
} }
if (end[i] > (Int_t)runData->GetDataBin(histoNo[i])->size()) {
cerr << endl << ">> PRunAsymmetryRRF::GetProperDataRange(): **WARNING** end data bin (" << end[i] << ") > histo length (" << (Int_t)runData->GetDataBin(histoNo[i])->size() << ").";
cerr << endl << ">> Will set end = (histo length - 1). Consider to change it in the msr-file." << endl;
cerr << endl;
end[i] = (Int_t)runData->GetDataBin(histoNo[i])->size()-1;
}
// 4th check if t0 is within proper bounds // 4th check if t0 is within proper bounds
if ((t0[i] < 0) || (t0[i] > (Int_t)runData->GetDataBin(histoNo[i])->size())) { if ((t0[i] < 0) || (t0[i] > (Int_t)runData->GetDataBin(histoNo[i])->size())) {
cerr << endl << ">> PRunAsymmetryRRF::GetProperDataRange(): **ERROR** t0 data bin doesn't make any sense!"; cerr << endl << ">> PRunAsymmetryRRF::GetProperDataRange(): **ERROR** t0 data bin doesn't make any sense!";

View File

@ -1560,11 +1560,17 @@ Bool_t PRunSingleHisto::GetProperDataRange()
return false; return false;
} }
// 3rd check if end is within proper bounds // 3rd check if end is within proper bounds
if ((end < 0) || (end > (Int_t)fForward.size())) { if (end < 0) {
cerr << endl << ">> PRunSingleHisto::GetProperDataRange(): **ERROR** end data bin (" << end << ") doesn't make any sense!"; cerr << endl << ">> PRunSingleHisto::GetProperDataRange(): **ERROR** end data bin (" << end << ") doesn't make any sense!";
cerr << endl; cerr << endl;
return false; return false;
} }
if (end > (Int_t)fForward.size()) {
cerr << endl << ">> PRunSingleHisto::GetProperDataRange(): **WARNING** end data bin (" << end << ") > histo length (" << (Int_t)fForward.size() << ").";
cerr << endl << ">> Will set end = (histo length - 1). Consider to change it in the msr-file." << endl;
cerr << endl;
end = (Int_t)fForward.size()-1;
}
// keep good bins for potential later use // keep good bins for potential later use
fGoodBins[0] = start; fGoodBins[0] = start;

View File

@ -969,11 +969,17 @@ Bool_t PRunSingleHistoRRF::GetProperDataRange()
return false; return false;
} }
// 3rd check if end is within proper bounds // 3rd check if end is within proper bounds
if ((end < 0) || (end > (Int_t)fForward.size())) { if (end < 0) {
cerr << endl << ">> PRunSingleHistoRRF::GetProperDataRange(): **ERROR** end data bin (" << end << ") doesn't make any sense!"; cerr << endl << ">> PRunSingleHistoRRF::GetProperDataRange(): **ERROR** end data bin (" << end << ") doesn't make any sense!";
cerr << endl; cerr << endl;
return false; return false;
} }
if (end > (Int_t)fForward.size()) {
cerr << endl << ">> PRunSingleHistoRRF::GetProperDataRange(): **WARNING** end data bin (" << end << ") > histo length (" << (Int_t)fForward.size() << ").";
cerr << endl << ">> Will set end = (histo length - 1). Consider to change it in the msr-file." << endl;
cerr << endl;
end = (Int_t)fForward.size()-1;
}
// keep good bins for potential later use // keep good bins for potential later use
fGoodBins[0] = start; fGoodBins[0] = start;

View File

@ -2687,14 +2687,14 @@ void PTheory::CalculateGaussLFIntegral(const Double_t *val) const
fLFIntegral.push_back(0.0); // start value of the integral fLFIntegral.push_back(0.0); // start value of the integral
ft = 0.0; ft = 0.0;
Double_t step = 0.0, lastStep = 1.0, diff = 0.0; Double_t step = 0.0, lastft = 1.0, diff = 0.0;
do { do {
t += dt; t += dt;
step = 0.5*dt*preFactor*(exp(-0.5*pow(Delta * (t-dt), 2.0))*sin(w0*(t-dt))+ step = 0.5*dt*preFactor*(exp(-0.5*pow(Delta * (t-dt), 2.0))*sin(w0*(t-dt))+
exp(-0.5*pow(Delta * t, 2.0))*sin(w0*t)); exp(-0.5*pow(Delta * t, 2.0))*sin(w0*t));
diff = fabs(fabs(step)-fabs(lastStep));
lastStep = step;
ft += step; ft += step;
diff = fabs(fabs(lastft)-fabs(ft));
lastft = ft;
fLFIntegral.push_back(ft); fLFIntegral.push_back(ft);
} while ((t <= 20.0) && (diff > 1.0e-10)); } while ((t <= 20.0) && (diff > 1.0e-10));
} }
@ -2762,13 +2762,13 @@ void PTheory::CalculateLorentzLFIntegral(const Double_t *val) const
ft += 0.5*dt*preFactor*(1.0+sin(w0*t)/(w0*t)*exp(-a*t)); ft += 0.5*dt*preFactor*(1.0+sin(w0*t)/(w0*t)*exp(-a*t));
fLFIntegral.push_back(ft); fLFIntegral.push_back(ft);
// calculate all the other integral bin values // calculate all the other integral bin values
Double_t step = 0.0, lastStep = 1.0, diff = 0.0; Double_t step = 0.0, lastft = 1.0, diff = 0.0;
do { do {
t += dt; t += dt;
step = 0.5*dt*preFactor*(sin(w0*(t-dt))/(w0*(t-dt))*exp(-a*(t-dt))+sin(w0*t)/(w0*t)*exp(-a*t)); step = 0.5*dt*preFactor*(sin(w0*(t-dt))/(w0*(t-dt))*exp(-a*(t-dt))+sin(w0*t)/(w0*t)*exp(-a*t));
diff = fabs(fabs(step)-fabs(lastStep));
lastStep = step;
ft += step; ft += step;
diff = fabs(fabs(lastft)-fabs(ft));
lastft = ft;
fLFIntegral.push_back(ft); fLFIntegral.push_back(ft);
} while ((t <= 20.0) && (diff > 1.0e-10)); } while ((t <= 20.0) && (diff > 1.0e-10));
} }
@ -2792,7 +2792,7 @@ Double_t PTheory::GetLFIntegralValue(const Double_t t) const
if (idx + 2 > fLFIntegral.size()) if (idx + 2 > fLFIntegral.size())
return fLFIntegral.back(); return fLFIntegral.back();
// linearly interpolate between the two relvant function bins // linearly interpolate between the two relevant function bins
Double_t df = (fLFIntegral[idx+1]-fLFIntegral[idx])*(t/fSamplingTime-static_cast<Double_t>(idx)); Double_t df = (fLFIntegral[idx+1]-fLFIntegral[idx])*(t/fSamplingTime-static_cast<Double_t>(idx));
return fLFIntegral[idx]+df; return fLFIntegral[idx]+df;

View File

@ -346,6 +346,7 @@ int dump_header_psi_bin(const string fileName, const string fileFormat)
return 1; return 1;
vector<string> vstr; vector<string> vstr;
vector<double> dVal, dErrVal;
cout << endl << "-------------------"; cout << endl << "-------------------";
cout << endl << "fileName = " << fileName << ", fileFormat = " << fileFormat; cout << endl << "fileName = " << fileName << ", fileFormat = " << fileFormat;
cout << endl << "-------------------"; cout << endl << "-------------------";
@ -378,7 +379,15 @@ int dump_header_psi_bin(const string fileName, const string fileFormat)
cout << endl << "Comment : n/a"; cout << endl << "Comment : n/a";
cout << endl << "Sample Name : " << psiBin.get_sample(); cout << endl << "Sample Name : " << psiBin.get_sample();
cout << endl << "Sample Orientation : " << psiBin.get_orient(); cout << endl << "Sample Orientation : " << psiBin.get_orient();
dVal = psiBin.get_temperatures_vector();
dErrVal = psiBin.get_devTemperatures_vector();
if (dVal.size() != dErrVal.size()) {
cout << endl << "Sample Temperature : " << psiBin.get_temp(); cout << endl << "Sample Temperature : " << psiBin.get_temp();
} else {
for (unsigned int i=0; i<dVal.size(); i++) {
cout << endl << "Sample Temp. " << i+1 << " : " << dVal[i] << " (" << dErrVal[i] << ") K";
}
}
cout << endl << "Sample Mag. Field : " << psiBin.get_field(); cout << endl << "Sample Mag. Field : " << psiBin.get_field();
cout << endl << "No of Histos : " << psiBin.get_numberHisto_int(); cout << endl << "No of Histos : " << psiBin.get_numberHisto_int();
cout << endl << "Time Resolution : " << psiBin.get_binWidth_ns() << " ns"; cout << endl << "Time Resolution : " << psiBin.get_binWidth_ns() << " ns";
@ -389,7 +398,8 @@ int dump_header_psi_bin(const string fileName, const string fileFormat)
cout << endl << "Histo Length : " << psiBin.get_histoLength_bin(); cout << endl << "Histo Length : " << psiBin.get_histoLength_bin();
cout << endl << "Time Zero Bin : " << psiBin.get_t0_int(i); cout << endl << "Time Zero Bin : " << psiBin.get_t0_int(i);
cout << endl << "First Good Bin : " << psiBin.get_firstGood_int(i); cout << endl << "First Good Bin : " << psiBin.get_firstGood_int(i);
cout << endl << "Last Good Bin : " << psiBin.get_firstGood_int(i); cout << endl << "Last Good Bin : " << psiBin.get_lastGood_int(i);
cout << endl << "No of Events : " << psiBin.get_eventsHisto_long(i);
} }
cout << endl << "-------------------" << endl << endl; cout << endl << "-------------------" << endl << endl;

View File

@ -230,6 +230,7 @@ class PMusrCanvas : public TObject, public TQObject
virtual void HandleCmdKey(Int_t event, Int_t x, Int_t y, TObject *selected); // SLOT virtual void HandleCmdKey(Int_t event, Int_t x, Int_t y, TObject *selected); // SLOT
virtual void HandleMenuPopup(Int_t id); // SLOT virtual void HandleMenuPopup(Int_t id); // SLOT
virtual void LastCanvasClosed(); // SLOT virtual void LastCanvasClosed(); // SLOT
virtual void WindowClosed(); // SLOT
virtual void SaveGraphicsAndQuit(Char_t *fileName, Char_t *graphicsFormat); virtual void SaveGraphicsAndQuit(Char_t *fileName, Char_t *graphicsFormat);
virtual void ExportData(const Char_t *fileName); virtual void ExportData(const Char_t *fileName);

View File

@ -830,7 +830,7 @@ void PTextEdit::setupHelpActions()
//---------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------
/** /**
* <p>load an msr-file. * <p>load a msr-file.
* *
* \param f filename * \param f filename
* \param index if == -1, add the file as a new tab, otherwise, replace the contents of the tab at index. * \param index if == -1, add the file as a new tab, otherwise, replace the contents of the tab at index.
@ -2215,7 +2215,12 @@ void PTextEdit::musrMsr2Data()
cmd.append("new"); cmd.append("new");
} }
PFitOutputHandler fitOutputHandler(QFileInfo(*fFilenames.find( currentEditor() )).absolutePath(), cmd); // if NO tab is present use the local directory
QString workDir = QString("./");
if (fTabWidget->count() != 0) {
workDir = QFileInfo(*fFilenames.find( currentEditor() )).absolutePath();
}
PFitOutputHandler fitOutputHandler(workDir, cmd);
fitOutputHandler.setModal(true); fitOutputHandler.setModal(true);
fFileSystemWatcherActive = false; fFileSystemWatcherActive = false;
fitOutputHandler.exec(); fitOutputHandler.exec();
@ -2239,7 +2244,11 @@ void PTextEdit::musrMsr2Data()
else else
fln += fMsr2DataParam->msrFileExtension + ".msr"; fln += fMsr2DataParam->msrFileExtension + ".msr";
load(QFileInfo(*fFilenames.find( currentEditor() )).absolutePath() + "/" + fln); workDir = QString("./");
if (fTabWidget->count() != 0) {
workDir = QFileInfo(*fFilenames.find( currentEditor() )).absolutePath();
}
load(workDir + "/" + fln);
} }
break; break;
case 1: // run list file case 1: // run list file
@ -2261,7 +2270,11 @@ void PTextEdit::musrMsr2Data()
else else
fln += fMsr2DataParam->msrFileExtension + ".msr"; fln += fMsr2DataParam->msrFileExtension + ".msr";
load(QFileInfo(*fFilenames.find( currentEditor() )).absolutePath() + "/" + fln); workDir = QString("./");
if (fTabWidget->count() != 0) {
workDir = QFileInfo(*fFilenames.find( currentEditor() )).absolutePath();
}
load(workDir + "/" + fln);
} }
} }
@ -2589,7 +2602,8 @@ void PTextEdit::musrSwapMsrMlog()
// get current file name // get current file name
QString currentFileName = *fFilenames.find( currentEditor() ); QString currentFileName = *fFilenames.find( currentEditor() );
QString swapFileName; QString swapFileName;
QString tempFileName = QString("__swap__.msr"); QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
QString tempFileName = QString("%1/.musrfit/__swap__.msr").arg(env.value("HOME"));
// check if it is a msr-, mlog-, or another file // check if it is a msr-, mlog-, or another file
int idx; int idx;

View File

@ -325,8 +325,6 @@ int main(int argc, char *argv[])
ok = false; ok = false;
break; break;
} }
// connect signal/slot
TQObject::Connect("TCanvas", "Closed()", "PMusrCanvas", musrCanvas, "LastCanvasClosed()");
musrCanvas->SetTimeout(timeout); musrCanvas->SetTimeout(timeout);