45 double intRangeStart =
getProperty(
"IntegrationRangeStart");
46 double intRangeEnd =
getProperty(
"IntegrationRangeEnd");
47 double bgRangeStart =
getProperty(
"BackgroundRangeStart");
48 double bgRangeEnd =
getProperty(
"BackgroundRangeEnd");
56 const bool childAlgLogging(
true);
57 double startProgress(0.0), endProgress(0.0);
60 const bool axisIsSpectrumNumber = inputWorkspace->getAxis(1)->isSpectra();
61 g_log.
information() <<
"Axis is spectrum number: " << axisIsSpectrumNumber <<
'\n';
64 const bool backgroundSubtraction = !((bgRangeStart == bgRangeEnd) && (bgRangeStart ==
EMPTY_DBL()));
65 g_log.
information() <<
"Use background subtraction: " << backgroundSubtraction <<
'\n';
69 if (backgroundSubtraction)
71 if (axisIsSpectrumNumber)
74 double stepProgress = 1.0 /
static_cast<double>(numSteps);
76 if (backgroundSubtraction) {
78 auto flatBG =
createChildAlgorithm(
"CalculateFlatBackground", startProgress, endProgress, childAlgLogging);
80 flatBG->setProperty<
double>(
"StartX", bgRangeStart);
81 flatBG->setProperty<
double>(
"EndX", bgRangeEnd);
82 flatBG->setPropertyValue(
"Mode",
"Mean");
83 flatBG->setPropertyValue(
"OutputWorkspace",
"flatBG");
85 startProgress += stepProgress;
86 endProgress += stepProgress;
92 integ->setProperty<
double>(
"RangeLower", intRangeStart);
93 integ->setProperty<
double>(
"RangeUpper", intRangeEnd);
94 integ->setPropertyValue(
"OutputWorkspace",
"integ");
97 integWS = integ->getProperty(
"OutputWorkspace");
102 integ->setProperty<
double>(
"RangeLower", intRangeStart);
103 integ->setProperty<
double>(
"RangeUpper", intRangeEnd);
104 integ->setPropertyValue(
"OutputWorkspace",
"integ");
107 integWS = integ->getProperty(
"OutputWorkspace");
109 startProgress += stepProgress;
110 endProgress += stepProgress;
112 auto const detectorCount = integWS->spectrumInfo().detectorCount();
114 if (!axisIsSpectrumNumber) {
115 auto spectraAxis = std::make_unique<SpectraAxis>(integWS.get());
116 integWS->replaceAxis(1, std::move(spectraAxis));
120 const int convertSpectrumAxisVersion = 2;
123 auto csaQ =
createChildAlgorithm(
"ConvertSpectrumAxis", startProgress, endProgress, childAlgLogging,
124 convertSpectrumAxisVersion);
126 csaQ->setPropertyValue(
"Target",
"ElasticQ");
127 csaQ->setPropertyValue(
"EMode",
"Indirect");
128 csaQ->setPropertyValue(
"OutputWorkspace",
"csaQ");
131 startProgress += stepProgress;
132 endProgress += stepProgress;
135 auto csaQ2 =
createChildAlgorithm(
"ConvertSpectrumAxis", startProgress, endProgress, childAlgLogging,
136 convertSpectrumAxisVersion);
138 csaQ2->setPropertyValue(
"Target",
"ElasticQSquared");
139 csaQ2->setPropertyValue(
"EMode",
"Indirect");
140 csaQ2->setPropertyValue(
"OutputWorkspace",
"csaQ2");
143 startProgress += stepProgress;
144 endProgress += stepProgress;
149 tranQ->setPropertyValue(
"OutputWorkspace",
"outQ");
151 outputQ = tranQ->getProperty(
"OutputWorkspace");
152 startProgress += stepProgress;
153 endProgress += stepProgress;
158 tranQ2->setPropertyValue(
"OutputWorkspace",
"outQSquared");
160 outputQSquared = tranQ2->getProperty(
"OutputWorkspace");
165 tranQ->setPropertyValue(
"OutputWorkspace",
"outQ");
167 outputQ = tranQ->getProperty(
"OutputWorkspace");
168 startProgress += stepProgress;
169 endProgress += stepProgress;
172 auto histQ2 =
createChildAlgorithm(
"ConvertToHistogram", startProgress, endProgress, childAlgLogging);
174 histQ2->setPropertyValue(
"OutputWorkspace",
"outQ");
177 startProgress += stepProgress;
178 endProgress += stepProgress;
181 auto convUnitQ2 =
createChildAlgorithm(
"ConvertUnits", startProgress, endProgress, childAlgLogging);
183 convUnitQ2->setPropertyValue(
"Target",
"QSquared");
184 convUnitQ2->setPropertyValue(
"EMode",
"Indirect");
185 convUnitQ2->setPropertyValue(
"OutputWorkspace",
"outQSquared");
186 convUnitQ2->execute();
187 outputQSquared = convUnitQ2->getProperty(
"OutputWorkspace");
189 auto yLabel = outputQSquared->YUnitLabel();
190 outputQSquared->setYUnitLabel(
"ln(" + yLabel +
")");