Skip to content

Commit

Permalink
Refs #9445. Added total intensity calculation to PoldiTimeTransformer
Browse files Browse the repository at this point in the history
  • Loading branch information
Michael Wedel committed May 23, 2014
1 parent efbd26b commit 124e06c
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 0 deletions.
Expand Up @@ -106,13 +106,16 @@ class MANTID_SINQ_DLL PoldiTimeTransformer
double timeTransformedIntensity(double areaD, double centreD, size_t detectorIndex) const;
double detectorElementIntensity(double centreD, size_t detectorIndex) const;

double calculatedTotalIntensity(double centreD) const;

protected:
std::vector<DetectorElementData_const_sptr> getDetectorElementData(PoldiAbstractDetector_sptr detector, PoldiAbstractChopper_sptr chopper);
DetectorElementCharacteristics getDetectorCenterCharacteristics(PoldiAbstractDetector_sptr detector, PoldiAbstractChopper_sptr chopper);

DetectorElementCharacteristics m_detectorCenter;
std::vector<DetectorElementData_const_sptr> m_detectorElementData;
double m_detectorEfficiency;
size_t m_chopperSlits;

PoldiSourceSpectrum_const_sptr m_spectrum;

Expand Down
Expand Up @@ -9,6 +9,7 @@ PoldiTimeTransformer::PoldiTimeTransformer() :
m_detectorCenter(),
m_detectorElementData(),
m_detectorEfficiency(0.0),
m_chopperSlits(0),
m_spectrum()
{
}
Expand All @@ -28,6 +29,8 @@ void PoldiTimeTransformer::initializeFromPoldiInstrument(PoldiInstrumentAdapter_
m_detectorCenter = getDetectorCenterCharacteristics(detector, chopper);
m_detectorElementData = getDetectorElementData(detector, chopper);
m_detectorEfficiency = 0.88;

m_chopperSlits = chopper->slitPositions().size();
}

double PoldiTimeTransformer::dToTOF(double d) const
Expand Down Expand Up @@ -60,6 +63,18 @@ double PoldiTimeTransformer::detectorElementIntensity(double centreD, size_t det
return intensity * (1.0 - exp(-m_detectorEfficiency * lambda));
}

double PoldiTimeTransformer::calculatedTotalIntensity(double centreD) const
{
double sum = 0.0;
double chopperSlitFactor = static_cast<double>(m_chopperSlits);

for(size_t i = 0; i < m_detectorElementData.size(); ++i) {
sum += chopperSlitFactor * detectorElementIntensity(centreD, i);
}

return sum;
}

size_t PoldiTimeTransformer::detectorElementCount() const
{
return m_detectorElementData.size();
Expand Down
11 changes: 11 additions & 0 deletions Code/Mantid/Framework/SINQ/test/PoldiTimeTransformerTest.h
Expand Up @@ -122,6 +122,17 @@ class PoldiTimeTransformerTest : public CxxTest::TestSuite
TS_ASSERT_DELTA(function.timeTransformedIntensity(areaD, centre, 342), 4.611182, 1e-5);
}

void TestCalculatedTotalIntensity()
{
double centre = Conversions::qToD(5.667449);

TestablePoldiTimeTransformer function;
function.initializeFromPoldiInstrument(m_instrument);
function.m_chopperSlits = 8;

TS_ASSERT_DELTA(fabs(1.0 - function.calculatedTotalIntensity(centre)/8220.165039062), 0.0, 1e-7);
}


private:
class TestablePoldiTimeTransformer : PoldiTimeTransformer
Expand Down

0 comments on commit 124e06c

Please sign in to comment.