diff --git a/Framework/Algorithms/test/Rebin2DTest.h b/Framework/Algorithms/test/Rebin2DTest.h index 060756117e016d83c290c75ee4971f73b34f2c5b..35df733c043465433e6165015d498781be4e1417 100644 --- a/Framework/Algorithms/test/Rebin2DTest.h +++ b/Framework/Algorithms/test/Rebin2DTest.h @@ -126,8 +126,8 @@ public: TS_ASSERT_EQUALS(outputWS->getNumberHistograms(), 4); TS_ASSERT_EQUALS(outputWS->blocksize(), 6); - double errors[6] = {2.716615541, 2.50998008, 2.437211521, - 2.50998008, 2.716615541, 2.121320344}; + double errors[6] = {3., 3., 3., + 3., 3., 2.236067977}; const double epsilon(1e-08); for (size_t i = 0; i < outputWS->getNumberHistograms(); ++i) { diff --git a/Framework/Algorithms/test/SofQWCutTest.h b/Framework/Algorithms/test/SofQWCutTest.h index 7b392a711eacdce6ff5e210225955fdbbc229c44..93f98324fcaa6b6e0b94500c46071ac522bb585c 100644 --- a/Framework/Algorithms/test/SofQWCutTest.h +++ b/Framework/Algorithms/test/SofQWCutTest.h @@ -140,15 +140,15 @@ public: TS_ASSERT_DELTA((*(ws_q->getAxis(1)))(400), 5.0, delta); TS_ASSERT_EQUALS((*(ws_q->getAxis(1)))(800), 10.); TS_ASSERT_DELTA(ws_q->readY(46)[0], 0.577055734, delta); - TS_ASSERT_DELTA(ws_q->readE(46)[0], 0.016266516, delta); + TS_ASSERT_DELTA(ws_q->readE(46)[0], 0.037384333, delta); TS_ASSERT_DELTA(ws_q->readY(461)[0], 0.642083585, delta); - TS_ASSERT_DELTA(ws_q->readE(461)[0], 0.027694702, delta); + TS_ASSERT_DELTA(ws_q->readE(461)[0], 0.050139186, delta); TS_ASSERT_DELTA(ws_q->readY(703)[0], 8.619229199, delta); - TS_ASSERT_DELTA(ws_q->readE(703)[0], 0.119106057, delta); + TS_ASSERT_DELTA(ws_q->readE(703)[0], 0.188331444, delta); TS_ASSERT_DELTA(ws_q->readY(727)[0], 1.212655693, delta); - TS_ASSERT_DELTA(ws_q->readE(727)[0], 0.047618940, delta); + TS_ASSERT_DELTA(ws_q->readE(727)[0], 0.071437133, delta); TS_ASSERT_DELTA(ws_q->readY(787)[0], 12.280788436, delta); - TS_ASSERT_DELTA(ws_q->readE(787)[0], 0.239880567, delta); + TS_ASSERT_DELTA(ws_q->readE(787)[0], 0.338125386, delta); auto ws_e = boost::dynamic_pointer_cast<MatrixWorkspace>(result->getItem(1)); @@ -162,15 +162,15 @@ public: TS_ASSERT_EQUALS((*(ws_e->getAxis(1)))(0), 5.); TS_ASSERT_EQUALS((*(ws_e->getAxis(1)))(1), 10.); TS_ASSERT_DELTA(ws_e->readY(0)[5], 1120.875680688, delta); - TS_ASSERT_DELTA(ws_e->readE(0)[5], 5.143783614, delta); + TS_ASSERT_DELTA(ws_e->readE(0)[5], 5.269885974, delta); TS_ASSERT_DELTA(ws_e->readY(0)[16], 171.212246850, delta); - TS_ASSERT_DELTA(ws_e->readE(0)[16], 2.079560024, delta); + TS_ASSERT_DELTA(ws_e->readE(0)[16], 2.134947683, delta); TS_ASSERT_DELTA(ws_e->readY(0)[28], 40.854749824, delta); - TS_ASSERT_DELTA(ws_e->readE(0)[28], 1.014309882, delta); + TS_ASSERT_DELTA(ws_e->readE(0)[28], 1.055504462, delta); TS_ASSERT_DELTA(ws_e->readY(0)[36], 54.655069317, delta); - TS_ASSERT_DELTA(ws_e->readE(0)[36], 1.179213931, delta); + TS_ASSERT_DELTA(ws_e->readE(0)[36], 1.225166860, delta); TS_ASSERT_DELTA(ws_e->readY(0)[113], 3.724579351, delta); - TS_ASSERT_DELTA(ws_e->readE(0)[113], 0.485226781, delta); + TS_ASSERT_DELTA(ws_e->readE(0)[113], 0.494593697, delta); } void test_sofqw3() { diff --git a/Framework/Algorithms/test/SofQWPolygonTest.h b/Framework/Algorithms/test/SofQWPolygonTest.h index 0461c8819f44e43af499e859adb22829ec5741e0..ba471e5d45036188061b8f0ce6f96708cc4b8b2d 100644 --- a/Framework/Algorithms/test/SofQWPolygonTest.h +++ b/Framework/Algorithms/test/SofQWPolygonTest.h @@ -40,22 +40,22 @@ public: const double delta(1e-08); TS_ASSERT_DELTA(result->y(0)[1160], 17.5583314826, delta); - TS_ASSERT_DELTA(result->e(0)[1160], 0.197345265992, delta); + TS_ASSERT_DELTA(result->e(0)[1160], 0.2251606553, delta); TS_ASSERT_DELTA(result->y(1)[1145], 4.61301046588, delta); - TS_ASSERT_DELTA(result->e(1)[1145], 0.0721823446635, delta); + TS_ASSERT_DELTA(result->e(1)[1145], 0.1161341763, delta); TS_ASSERT_DELTA(result->y(2)[1200], 1.33394133548, delta); - TS_ASSERT_DELTA(result->e(2)[1200], 0.0419839252961, delta); + TS_ASSERT_DELTA(result->e(2)[1200], 0.0610978549, delta); TS_ASSERT_DELTA(result->y(3)[99], 0.0446085388561, delta); - TS_ASSERT_DELTA(result->e(3)[99], 0.0185049423467, delta); + TS_ASSERT_DELTA(result->e(3)[99], 0.0249727396, delta); TS_ASSERT_DELTA(result->y(4)[1654], 0.0171136490957, delta); - TS_ASSERT_DELTA(result->e(4)[1654], 0.005007299861, delta); + TS_ASSERT_DELTA(result->e(4)[1654], 0.0057467706, delta); TS_ASSERT_DELTA(result->y(5)[1025], 0.0516113202152, delta); - TS_ASSERT_DELTA(result->e(5)[1025], 0.0102893133461, delta); + TS_ASSERT_DELTA(result->e(5)[1025], 0.0128755226, delta); // Spectra-detector mapping const size_t nspectra(6); diff --git a/Framework/DataObjects/src/FractionalRebinning.cpp b/Framework/DataObjects/src/FractionalRebinning.cpp index 3f5d59bc8d73102697d672e40bb674bc21073f66..1d6bf716ab0fe5a33c9dcc36837d2c2103d64999 100644 --- a/Framework/DataObjects/src/FractionalRebinning.cpp +++ b/Framework/DataObjects/src/FractionalRebinning.cpp @@ -543,14 +543,14 @@ void rebinToOutput(const Quadrilateral &inputQ, if (intersection(outputQ, inputQ, intersectOverlap)) { const double weight = intersectOverlap.area() / inputQ.area(); yValue *= weight; - double eValue = inE[j] * weight; + double eValue = inE[j]; if (inputWS->isDistribution()) { const double overlapWidth = intersectOverlap.maxX() - intersectOverlap.minX(); yValue *= overlapWidth; eValue *= overlapWidth; } - eValue = eValue * eValue; + eValue = eValue * eValue * weight; PARALLEL_CRITICAL(overlap_sum) { outputWS->mutableY(y)[xi] += yValue; outputWS->mutableE(y)[xi] += eValue; @@ -621,7 +621,6 @@ void rebinToFractionalOutput(const Quadrilateral &inputQ, // If the input is a RebinnedOutput workspace with frac. area we need // to account for the weight of the input bin in the output bin weights double inputWeight = 1.; - double variance = error * error; auto inputRB = boost::dynamic_pointer_cast<const RebinnedOutput>(inputWS); if (inputRB) { const auto &inF = inputRB->dataF(i); @@ -630,10 +629,11 @@ void rebinToFractionalOutput(const Quadrilateral &inputQ, // we need to undo this before carrying on. if (inputRB->isFinalized()) { signal *= inF[j]; - variance *= inF[j] * inF[j]; // It was the _error_ which was scaled. + error *= inF[j]; } } + const double variance = error * error; for (const auto &ai : areaInfo) { const size_t xi = std::get<0>(ai); const size_t yi = std::get<1>(ai);