From 6c0a266e6a4a2f892c426fe8486a4fe8c50332c5 Mon Sep 17 00:00:00 2001 From: Suter Andreas Date: Mon, 14 Sep 2015 09:44:49 +0200 Subject: [PATCH 1/4] any2many export of MusrRoot crashed when first histo group was != 0. This happend when exporting to PSI-BIN or WKM. This is fixed now. --- ChangeLog | 2 ++ src/classes/PRunDataHandler.cpp | 14 +++++++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7d19ff69..37f7c0cd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -6,6 +6,8 @@ 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 +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. diff --git a/src/classes/PRunDataHandler.cpp b/src/classes/PRunDataHandler.cpp index 3cd13218..bebc1cf0 100644 --- a/src/classes/PRunDataHandler.cpp +++ b/src/classes/PRunDataHandler.cpp @@ -1744,7 +1744,7 @@ Bool_t PRunDataHandler::ReadRootFile() for (UInt_t i=0; igroupHistoList.size(); i++) { found = false; for (UInt_t j=0; jgroupHistoList[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(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(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) From cb73f8bfa0827599d619f1b932ef715f0f4a58fc Mon Sep 17 00:00:00 2001 From: Suter Andreas Date: Thu, 17 Sep 2015 14:51:51 +0200 Subject: [PATCH 2/4] in PMsr2Data::PrepareGlobalInputFile() there seem to be 'unmotivated' break; commands in some loops. They prevent a proper map handling. For now they are commented out, which results in a proper functioning. --- ChangeLog | 5 ++++- src/classes/PMsr2Data.cpp | 17 ++++++++--------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index 37f7c0cd..51e8c3c3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -5,7 +5,10 @@ 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. 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). diff --git a/src/classes/PMsr2Data.cpp b/src/classes/PMsr2Data.cpp index de96b237..bf5fd68e 100644 --- a/src/classes/PMsr2Data.cpp +++ b/src/classes/PMsr2Data.cpp @@ -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(tempVec[j]); @@ -813,7 +813,7 @@ bool PMsr2Data::PrepareGlobalInputFile(unsigned int tempRun, const string &msrOu tempVec[j].append(boost::lexical_cast(l + 1)); } } - break; +//as break; } } } @@ -902,7 +902,7 @@ bool PMsr2Data::PrepareGlobalInputFile(unsigned int tempRun, const string &msrOu } mapExists = false; } - break; +//as break; } } } @@ -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(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,7 @@ bool PMsr2Data::PrepareGlobalInputFile(unsigned int tempRun, const string &msrOu lineChanged = true; } } - break; +//as break; } catch(boost::bad_lexical_cast &) { // in case the cast does not work: do nothing - this means the entry is not a simple parameter From e55ac4ecee7b12751dbe89cade89b733e6c209c8 Mon Sep 17 00:00:00 2001 From: Suter Andreas Date: Fri, 18 Sep 2015 16:21:15 +0200 Subject: [PATCH 3/4] after cross-check with BMW cleaned up, removed one copy/paste error (break;) and re-enabled the other twos which are indeed needed. --- ChangeLog | 2 ++ src/classes/PMsr2Data.cpp | 5 ++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 51e8c3c3..e84cfb16 100644 --- a/ChangeLog +++ b/ChangeLog @@ -9,6 +9,8 @@ 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). diff --git a/src/classes/PMsr2Data.cpp b/src/classes/PMsr2Data.cpp index bf5fd68e..d00cd073 100644 --- a/src/classes/PMsr2Data.cpp +++ b/src/classes/PMsr2Data.cpp @@ -813,7 +813,7 @@ bool PMsr2Data::PrepareGlobalInputFile(unsigned int tempRun, const string &msrOu tempVec[j].append(boost::lexical_cast(l + 1)); } } -//as break; + break; } } } @@ -902,7 +902,7 @@ bool PMsr2Data::PrepareGlobalInputFile(unsigned int tempRun, const string &msrOu } mapExists = false; } -//as break; + break; } } } @@ -1111,7 +1111,6 @@ bool PMsr2Data::PrepareGlobalInputFile(unsigned int tempRun, const string &msrOu lineChanged = true; } } -//as break; } catch(boost::bad_lexical_cast &) { // in case the cast does not work: do nothing - this means the entry is not a simple parameter From fc9c573f2af134fdb13c26a18a568879a350ae11 Mon Sep 17 00:00:00 2001 From: Suter Andreas Date: Sun, 20 Sep 2015 19:06:38 +0200 Subject: [PATCH 4/4] some minor improvements proposed by BMW: fix data to graph --- src/classes/PMusrCanvas.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/classes/PMusrCanvas.cpp b/src/classes/PMusrCanvas.cpp index 760d7b2f..e34486bf 100644 --- a/src/classes/PMusrCanvas.cpp +++ b/src/classes/PMusrCanvas.cpp @@ -4780,18 +4780,22 @@ void PMusrCanvas::PlotData(Bool_t unzoom) // add all data to fMultiGraphData for (UInt_t i=0; iSetEditable(false); fMultiGraphData->Add(ge, "p"); } // add all the theory to fMultiGraphData for (UInt_t i=0; iSetEditable(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; iSetEditable(false); fMultiGraphDiff->Add(ge, "p"); }