fit range decimal precision handling of PMsrHandler improved (MUSR-150 request). musredit keeps now it last open directory

This commit is contained in:
nemu 2010-10-14 19:52:20 +00:00
parent cc3106ff5e
commit 99c1e8d17e
5 changed files with 55 additions and 3 deletions

View File

@ -48,6 +48,10 @@ 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 fit range decimal precision handling of PMsrHandler improved (MUSR-150 request). It is now
handling up to 4 decimal places.
CHANGED musredit: now it is keeping the directory from which the last msr-file has been loaded. This directory is
used when a new open dialog is called.
CHANGED another attempt to get proper zooming/unzooming. This time I tried to disentangle the rather messy PMusrCanvas class.
Most of the checks seems to work, though still for non-muSR style, musrview is crashing once in a while which seems to
come from root rather than musrview. I will try to investigate that on root macro level.

View File

@ -830,7 +830,7 @@ Int_t PMsrHandler::WriteMsrLogFile(const Bool_t messages)
if (fRuns[runNo].GetFitRange(j) == -1)
break;
fout.width(8);
fout.precision(2);
fout.precision(NeededPrecision(fRuns[runNo].GetFitRange(j)));
fout << left << fixed << fRuns[runNo].GetFitRange(j);
}
fout << endl;
@ -1510,7 +1510,7 @@ Int_t PMsrHandler::WriteMsrFile(const Char_t *filename, map<UInt_t, TString> *co
if (fRuns[i].GetFitRange(j) == -1)
break;
fout.width(8);
fout.precision(2);
fout.precision(NeededPrecision(fRuns[i].GetFitRange(j)));
fout << left << fixed << fRuns[i].GetFitRange(j);
}
fout << endl;
@ -4591,4 +4591,39 @@ Bool_t PMsrHandler::CheckAddRunParameters()
return result;
}
//--------------------------------------------------------------------------
// NeededPrecision (private)
//--------------------------------------------------------------------------
/**
* <p>Calculates the needed precision of Double_t values for WriteMsrLogFile and WriteMsrFile of the fit range.
* If a precision of > 4 decimal places is needed, a warning is placed and a value of 4 is returned.
*
* \param dval value for which the precision has to be estimated
*
* <b>return:</b>
* needed precision fo the fit-range
*/
UInt_t PMsrHandler::NeededPrecision(Double_t dval)
{
UInt_t prec=0;
Int_t ival = static_cast<Int_t>(round(dval*1.0e4));
if ((ival % 10) != 0)
prec = 4;
else if ((ival % 100) != 0)
prec = 3;
else if ((ival % 1000) != 0)
prec = 2;
else if ((ival % 10000) != 0)
prec = 1;
else if (static_cast<Double_t>(ival)-dval*1.0e4 > 0.1) {
prec = 4;
cerr << endl << ">> PMsrHandler::NeededPrecision(): **WARNING** fit range value = " << dval << ", is asking for a rediculous resolution.";
cerr << endl << ">> Will limit the precision to 4 decimal places, only." << endl;
}
return prec;
}
// end ---------------------------------------------------------------------

View File

@ -138,6 +138,8 @@ class PMsrHandler
virtual void InitFourierParameterStructure(PMsrFourierStructure &fourier);
virtual Bool_t FilterNumber(TString str, const Char_t *filter, Int_t offset, Int_t &no);
virtual UInt_t NeededPrecision(Double_t dval);
};
#endif // _PMSRHANDLER_H_

View File

@ -133,6 +133,8 @@ PTextEdit::PTextEdit( QWidget *parent, Qt::WindowFlags f )
}
connect( fTabWidget, SIGNAL( currentChanged(QWidget*) ), this, SLOT( applyFontSettings(QWidget*) ));
fLastDirInUse = fAdmin->getDefaultSavePath();
}
//----------------------------------------------------------------------------------------------------
@ -822,7 +824,7 @@ void PTextEdit::fileNew()
void PTextEdit::fileOpen()
{
QStringList flns = QFileDialog::getOpenFileNames( this, tr("Open msr-/mlog-File"),
fAdmin->getDefaultSavePath(),
fLastDirInUse,
tr( "msr-Files (*.msr);;msr-Files (*.msr *.mlog);;All Files (*)" ));
QStringList::Iterator it = flns.begin();
@ -830,6 +832,12 @@ void PTextEdit::fileOpen()
QString tabFln;
bool alreadyOpen = false;
// if flns are present, keep the corresponding directory
if (flns.size() > 0) {
finfo1.setFile(flns.at(0));
fLastDirInUse = finfo1.absoluteFilePath();
}
while( it != flns.end() ) {
// check if the file is not already open
finfo1.setFile(*it);
@ -2046,6 +2054,8 @@ void PTextEdit::musrView()
str = *fFilenames.find( currentEditor() );
cmd += str + "\" &";
qDebug() << endl << cmd << endl;
system(cmd.toLatin1());
}

View File

@ -146,6 +146,7 @@ private:
QFileSystemWatcher *fFileSystemWatcher; ///< checks if msr-files are changing on the disk while being open in musredit.
bool fFileSystemWatcherActive; ///< flag to enable/disable the file system watcher
QTimer fFileSystemWatcherTimeout; ///< timer used to re-enable file system watcher. Needed to delay the re-enabling
QString fLastDirInUse; ///< string holding the path from where the last file was loaded.
QAction *fMusrT0Action;