Merge branch 'master' into root6

This commit is contained in:
suter_a 2015-09-20 19:49:12 +02:00
commit 0a59e6b4d9
4 changed files with 38 additions and 14 deletions

View File

@ -5,7 +5,14 @@
changes since 0.14.0
===================================
NEW 2015-02-23 implemented an average-per-data-set option for musrFT.
NEW 2015-02-21 add proper Mac icon to musredit
NEW 2015-02-21 add proper Mac icon to musredit
FIXED 2015-09-17 in PMsr2Data::PrepareGlobalInputFile() there seem to be 'unmotivated'
break; commands in some loops. They prevent a proper map handling.
Since this is a real puzzle I contacted BMW for clarification.
2015-09-18: there is only one unmotivated break; cleaned up the code
accordingly.
FIXED 2015-09-14 any2many export of MusrRoot crashed when first histo group was != 0.
This happend when exporting to PSI-BIN or WKM. This is fixed now.
FIXED 2015-09-08 fixed error in view_packing for single histo (wrong norm of the theory).
FIXED 2015-09-04 minor change in Fourier-block output (PMsrHandler::WriteMsrLogFile
and PMsrHandler::WriteMsrLogFile) to avoid truncated range labels.

View File

@ -8,7 +8,7 @@
***************************************************************************/
/***************************************************************************
* Copyright (C) 2009-2014 by Bastian M. Wojek / Andreas Suter *
* Copyright (C) 2009-2015 by Bastian M. Wojek / Andreas Suter *
* andreas.suter@psi.ch *
* *
* This program is free software; you can redistribute it and/or modify *
@ -170,7 +170,7 @@ int PMsr2Data::DetermineRunNumberDigits(unsigned int runNo, bool normalMode) con
string::size_type loc = firstOnLine.rfind(tempRunNumber.str());
if ( loc != string::npos ) {
while ( loc > 0 ) {
if(isdigit(firstOnLine.at(--loc))) {
if (isdigit(firstOnLine.at(--loc))) {
++fRunNumberDigits;
} else {
break;
@ -731,7 +731,7 @@ bool PMsr2Data::PrepareGlobalInputFile(unsigned int tempRun, const string &msrOu
msrParamList->at(i).fIsGlobal = true;
++fNumGlobalParam;
}
//cout << msrParamList->at(i).fNo << " is global: " << msrParamList->at(i).fIsGlobal << endl;
// cout << "debug> " << msrParamList->at(i).fNo << ": " << msrParamList->at(i).fName.Data() << " is global: " << msrParamList->at(i).fIsGlobal << endl;
}
// check if parameters have been sorted correctly from the beginning
@ -760,7 +760,7 @@ bool PMsr2Data::PrepareGlobalInputFile(unsigned int tempRun, const string &msrOu
bool mapExists(false);
for (unsigned int i(0); i < tempLines->size(); ++i) {
line = (*tempLines)[i].fLine.Data();
split( tempVec, line, is_any_of(" \t") ); // split the theory line at spaces
split( tempVec, line, is_any_of(" \t"), token_compress_on ); // split the theory line at spaces
for (unsigned int j(1); j < tempVec.size(); ++j) {
try {
tempPar = boost::lexical_cast<unsigned int>(tempVec[j]);
@ -1060,12 +1060,11 @@ bool PMsr2Data::PrepareGlobalInputFile(unsigned int tempRun, const string &msrOu
tempLines = fMsrHandler->GetMsrTheory();
for (unsigned int i(0); i < tempLines->size(); ++i) {
line = (*tempLines)[i].fLine.Data();
split( tempVec, line, is_any_of(" \t") ); // split the theory line at spaces
split( tempVec, line, is_any_of(" \t"), token_compress_on ); // split the theory line at spaces
for (unsigned int j(1); j < tempVec.size(); ++j) {
try {
tempPar = boost::lexical_cast<unsigned int>(tempVec[j]);
if (!msrParamList->at(tempPar - 1).fIsGlobal) {
cerr << endl << ">> msr2data: **WARNING** The parameter " << msrParamList->at(tempPar - 1).fName.Data() \
<< " is recognized as run specific!";
@ -1112,7 +1111,6 @@ bool PMsr2Data::PrepareGlobalInputFile(unsigned int tempRun, const string &msrOu
lineChanged = true;
}
}
break;
}
catch(boost::bad_lexical_cast &) {
// in case the cast does not work: do nothing - this means the entry is not a simple parameter

View File

@ -4780,18 +4780,22 @@ void PMusrCanvas::PlotData(Bool_t unzoom)
// add all data to fMultiGraphData
for (UInt_t i=0; i<fNonMusrData.size(); i++) {
// the next two lines are ugly but needed for the following reasons:
// the next three lines are ugly but needed for the following reasons:
// TMultiGraph is taking ownership of the TGraphErrors, hence a deep copy is needed.
// This is not resulting in a memory leak, since the TMultiGraph object will do the cleanup
TGraphErrors *ge = new TGraphErrors(*(fNonMusrData[i].data));
// Data points and model curves should be fixed on the graph and not dragged around using, e.g., the mouse.
ge->SetEditable(false);
fMultiGraphData->Add(ge, "p");
}
// add all the theory to fMultiGraphData
for (UInt_t i=0; i<fNonMusrData.size(); i++) {
// the next two lines are ugly but needed for the following reasons:
// the next three lines are ugly but needed for the following reasons:
// TMultiGraph is taking ownership of the TGraphErrors, hence a deep copy is needed.
// This is not resulting in a memory leak, since the TMultiGraph object will do the cleanup
TGraphErrors *ge = new TGraphErrors(*(fNonMusrData[i].theory));
// Data points and model curves should be fixed on the graph and not dragged around using, e.g., the mouse.
ge->SetEditable(false);
fMultiGraphData->Add(ge, "l");
}
@ -4836,6 +4840,11 @@ void PMusrCanvas::PlotData(Bool_t unzoom)
if (fMultiGraphLegend)
fMultiGraphLegend->Draw();
}
// report canvas status events in non-musr plots
if (!fMainCanvas->GetShowEventStatus()) {
fMainCanvas->ToggleEventStatus();
}
}
fDataTheoryPad->Update();
@ -5018,10 +5027,12 @@ void PMusrCanvas::PlotDifference(Bool_t unzoom)
// add all diff data to fMultiGraphDiff
for (UInt_t i=0; i<fNonMusrData.size(); i++) {
// the next two lines are ugly but needed for the following reasons:
// the next three lines are ugly but needed for the following reasons:
// TMultiGraph is taking ownership of the TGraphErrors, hence a deep copy is needed.
// This is not resulting in a memory leak, since the TMultiGraph object will do the cleaing
TGraphErrors *ge = new TGraphErrors(*(fNonMusrData[i].diff));
// Data points and model curves should be fixed on the graph and not dragged around using, e.g., the mouse.
ge->SetEditable(false);
fMultiGraphDiff->Add(ge, "p");
}

View File

@ -1744,7 +1744,7 @@ Bool_t PRunDataHandler::ReadRootFile()
for (UInt_t i=0; i<fAny2ManyInfo->groupHistoList.size(); i++) {
found = false;
for (UInt_t j=0; j<ivec.size(); j++) {
if (fAny2ManyInfo->groupHistoList[i] == ivec[i])
if (fAny2ManyInfo->groupHistoList[i] == ivec[j])
found = true;
}
if (!found) {
@ -5084,7 +5084,11 @@ Bool_t PRunDataHandler::WriteWkmFile(TString fln)
if (lem_wkm_style)
cout << endl << "TOF(M3S1): nocut";
cout << endl << "Groups: " << fData[0].GetNoOfHistos();
cout << endl << "Channels: " << static_cast<UInt_t>(fData[0].GetDataBin(1)->size()/fAny2ManyInfo->rebin);
UInt_t histo0 = 1;
if (fAny2ManyInfo->groupHistoList.size() != 0) { // red/green list found
histo0 = fAny2ManyInfo->groupHistoList[0]+1; // take the first available red/green entry
}
cout << endl << "Channels: " << static_cast<UInt_t>(fData[0].GetDataBin(histo0)->size()/fAny2ManyInfo->rebin);
cout.precision(10);
cout << endl << "Resolution: " << fData[0].GetTimeResolution()*fAny2ManyInfo->rebin/1.0e3; // ns->us
cout.setf(ios::fixed,ios::floatfield); // floatfield set to fixed
@ -5173,7 +5177,11 @@ Bool_t PRunDataHandler::WritePsiBinFile(TString fln)
// run number
psibin.put_runNumber_int(fData[0].GetRunNumber());
// length of histograms
psibin.put_histoLength_bin((int)(fData[0].GetDataBin(1)->size()/fAny2ManyInfo->rebin));
UInt_t histo0 = 1;
if (fAny2ManyInfo->groupHistoList.size() != 0) { // red/green list found
histo0 = fAny2ManyInfo->groupHistoList[0]+1; // take the first available red/green entry
}
psibin.put_histoLength_bin((int)(fData[0].GetDataBin(histo0)->size()/fAny2ManyInfo->rebin));
// number of histograms
psibin.put_numberHisto_int((int)fData[0].GetNoOfHistos());
// run title = sample (10 char) / temp (10 char) / field (10 char) / orientation (10 char)