91 std::map<std::string, std::string> out;
92 double BackgroundInnerFactor =
getProperty(
"BackgroundInnerFactor");
93 double BackgroundOuterFactor =
getProperty(
"BackgroundOuterFactor");
94 double BackgroundInnerRadius =
getProperty(
"BackgroundInnerRadius");
95 double BackgroundOuterRadius =
getProperty(
"BackgroundOuterRadius");
96 if ((BackgroundInnerRadius > 0) && (BackgroundInnerFactor > 0)) {
97 out[
"BackgroundInnerRadius"] =
"Do not specify both BackgroundInnerRadius and BackgroundInnerFactor.";
98 out[
"BackgroundInnerFactor"] =
"Do not specify both BackgroundInnerRadius and BackgroundInnerFactor.";
100 if ((BackgroundOuterRadius > 0) && (BackgroundOuterFactor > 0)) {
101 out[
"BackgroundOuterRadius"] =
"Do not specify both BackgroundOuterRadius and BackgroundOuterFactor.";
102 out[
"BackgroundOuterFactor"] =
"Do not specify both BackgroundOuterRadius and BackgroundOuterFactor.";
115 double BackgroundInnerFactor =
getProperty(
"BackgroundInnerFactor");
116 double BackgroundOuterFactor =
getProperty(
"BackgroundOuterFactor");
117 double BackgroundInnerRadius =
getProperty(
"BackgroundInnerRadius");
118 double BackgroundOuterRadius =
getProperty(
"BackgroundOuterRadius");
127 auto ax = std::make_unique<TextAxis>(outWS->getNumberHistograms());
128 for (
int i = 0; i < peaksWS->getNumberPeaks(); i++) {
129 V3D hkl = peaksWS->getPeak(i).getHKL();
131 ax->setLabel(
size_t(i), hkl.
toString());
133 outWS->replaceAxis(1, std::move(ax));
137 auto ax2 = std::make_unique<TextAxis>(outWS2->getNumberHistograms());
138 ax2->setLabel(0,
"I/SigI=2");
139 ax2->setLabel(1,
"I/SigI=3");
140 ax2->setLabel(2,
"I/SigI=5");
141 ax2->setLabel(3,
"I/SigI=10");
142 outWS2->replaceAxis(1, std::move(ax2));
144 Progress prog(
this, 0.0, 1.0, NumSteps);
145 double progStep = 1.0 / double(NumSteps);
146 for (
int step = 0; step < NumSteps; step++) {
148 double radius = RadiusStart + double(step) * (RadiusEnd - RadiusStart) / (
double(NumSteps - 1));
149 g_log.
debug() <<
"Integrating radius " << radius <<
'\n';
152 double OuterRadius = 0;
153 if (BackgroundOuterRadius > 0)
154 OuterRadius = BackgroundOuterRadius;
155 if (BackgroundOuterFactor > 0)
156 OuterRadius = BackgroundOuterFactor * radius;
157 double InnerRadius = 0;
158 if (BackgroundInnerRadius > 0)
159 InnerRadius = BackgroundInnerRadius;
160 if (BackgroundInnerFactor > 0)
161 InnerRadius = BackgroundInnerFactor * radius;
164 auto alg =
createChildAlgorithm(
"IntegratePeaksMD", progStep *
double(step), progStep *
double(step + 1),
false);
165 alg->setProperty(
"InputWorkspace", inWS);
166 alg->setProperty(
"PeaksWorkspace", peaksWS);
167 alg->setProperty<std::vector<double>>(
"PeakRadius", {radius});
168 alg->setProperty<std::vector<double>>(
"BackgroundOuterRadius", {OuterRadius});
169 alg->setProperty<std::vector<double>>(
"BackgroundInnerRadius", {InnerRadius});
170 alg->setPropertyValue(
"OutputWorkspace",
"__tmp__PeakIntensityVsRadius");
172 if (alg->isExecuted()) {
177 for (
int i = 0; i < 4; i++) {
178 outWS2->mutableX(i)[step] = radius;
182 for (
int i = 0; i < outPeaks->getNumberPeaks(); i++) {
185 outWS->mutableX(wi)[step] = radius;
194 }
else if (ISigI > 5.0) {
198 }
else if (ISigI > 3.0) {
201 }
else if (ISigI > 2.0) {
205 outWS2->mutableY(0)[step] =
static_cast<double>(ISigI2);
206 outWS2->mutableY(1)[step] =
static_cast<double>(ISigI3);
207 outWS2->mutableY(2)[step] =
static_cast<double>(ISigI5);
208 outWS2->mutableY(3)[step] =
static_cast<double>(ISigI10);
215 outWS->setYUnit(
"Integrated Intensity");
216 outWS->getAxis(0)->title() =
"Radius";
217 outWS2->setYUnit(
"Number Peaks");
218 outWS2->getAxis(0)->title() =
"Radius";
virtual std::shared_ptr< Algorithm > createChildAlgorithm(const std::string &name, const double startProgress=-1., const double endProgress=-1., const bool enableLogging=true, const int &version=-1)
Create a Child Algorithm.