Skip to content

Commit 57a16ad

Browse files
rosswhitfieldpeterfpeterson
authored andcommitted
Use mask from calibration file
1 parent 74e521a commit 57a16ad

File tree

2 files changed

+16
-4
lines changed

2 files changed

+16
-4
lines changed

Framework/DataHandling/inc/MantidDataHandling/AlignAndFocusPowderSlim.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ class MANTID_DATAHANDLING_DLL AlignAndFocusPowderSlim : public API::Algorithm {
5252
void loadCalFile(const Mantid::API::Workspace_sptr &inputWS, const std::string &filename);
5353

5454
std::map<detid_t, double> m_calibration; // detid: 1/difc
55+
std::set<detid_t> m_masked;
5556
bool is_time_filtered{false};
5657
size_t pulse_start_index{0};
5758
size_t pulse_stop_index{std::numeric_limits<size_t>::max()};

Framework/DataHandling/src/AlignAndFocusPowderSlim.cpp

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include "MantidDataHandling/LoadEventNexus.h"
1414
#include "MantidDataHandling/LoadEventNexusIndexSetup.h"
1515
#include "MantidDataObjects/EventList.h"
16+
#include "MantidDataObjects/MaskWorkspace.h"
1617
#include "MantidDataObjects/TableWorkspace.h"
1718
#include "MantidDataObjects/Workspace2D.h"
1819
#include "MantidDataObjects/WorkspaceCreation.h"
@@ -33,6 +34,7 @@ using Mantid::API::FileProperty;
3334
using Mantid::API::ITableWorkspace_sptr;
3435
using Mantid::API::MatrixWorkspace_sptr;
3536
using Mantid::API::WorkspaceProperty;
37+
using Mantid::DataObjects::MaskWorkspace_sptr;
3638
using Mantid::DataObjects::Workspace2D;
3739
using Mantid::Kernel::ArrayLengthValidator;
3840
using Mantid::Kernel::ArrayProperty;
@@ -120,12 +122,15 @@ template <typename CountsType> class ProcessEventsTask {
120122
public:
121123
ProcessEventsTask(const Histogrammer *histogrammer, const std::vector<uint32_t> *detids,
122124
const std::vector<float> *tofs, const AlignAndFocusPowderSlim::BankCalibration *calibration,
123-
std::vector<CountsType> *y_temp)
124-
: m_histogrammer(histogrammer), m_detids(detids), m_tofs(tofs), m_calibration(calibration), y_temp(y_temp) {}
125+
std::vector<CountsType> *y_temp, const std::set<detid_t> *masked)
126+
: m_histogrammer(histogrammer), m_detids(detids), m_tofs(tofs), m_calibration(calibration), y_temp(y_temp),
127+
masked(masked) {}
125128

126129
void operator()(const tbb::blocked_range<size_t> &range) const {
127130
for (size_t i = range.begin(); i < range.end(); ++i) {
128131
const auto detid = static_cast<detid_t>(m_detids->at(i));
132+
if (masked->contains(detid))
133+
continue;
129134
const auto tof = static_cast<double>(m_tofs->at(i)) * m_calibration->value(detid);
130135

131136
const auto binnum = m_histogrammer->findBin(tof);
@@ -140,6 +145,7 @@ template <typename CountsType> class ProcessEventsTask {
140145
const std::vector<float> *m_tofs;
141146
const AlignAndFocusPowderSlim::BankCalibration *m_calibration;
142147
std::vector<CountsType> *y_temp;
148+
const std::set<detid_t> *masked;
143149
};
144150

145151
template <typename Type> class MinMax {
@@ -390,7 +396,8 @@ void AlignAndFocusPowderSlim::exec() {
390396
addTimer("setup" + entry_name, startTimeSetup, std::chrono::high_resolution_clock::now());
391397

392398
const auto startTimeProcess = std::chrono::high_resolution_clock::now();
393-
ProcessEventsTask task(&histogrammer, event_detid.get(), event_time_of_flight.get(), &calibration, &y_temp);
399+
ProcessEventsTask task(&histogrammer, event_detid.get(), event_time_of_flight.get(), &calibration, &y_temp,
400+
&m_masked);
394401
tbb::parallel_for(tbb::blocked_range<size_t>(0, numEvent), task);
395402
auto &y_values = spectrum.dataY();
396403
std::copy(y_temp.cbegin(), y_temp.cend(), y_values.begin());
@@ -525,7 +532,7 @@ void AlignAndFocusPowderSlim::loadCalFile(const Mantid::API::Workspace_sptr &inp
525532
alg->setPropertyValue("Filename", filename);
526533
alg->setProperty<bool>("MakeCalWorkspace", true);
527534
alg->setProperty<bool>("MakeGroupingWorkspace", false);
528-
alg->setProperty<bool>("MakeMaskWorkspace", false);
535+
alg->setProperty<bool>("MakeMaskWorkspace", true);
529536
alg->setPropertyValue("WorkspaceName", "temp");
530537
alg->executeAsChildAlg();
531538

@@ -535,6 +542,10 @@ void AlignAndFocusPowderSlim::loadCalFile(const Mantid::API::Workspace_sptr &inp
535542
const double detc = calibrationWS->cell<double>(row, 1);
536543
m_calibration.emplace(detid, 1. / detc);
537544
}
545+
546+
const MaskWorkspace_sptr maskWS = alg->getProperty("OutputMaskWorkspace");
547+
m_masked = maskWS->getMaskedDetectors();
548+
g_log.debug() << "Masked detectors: " << m_masked.size() << '\n';
538549
}
539550

540551
// ------------------------ BankCalibration object

0 commit comments

Comments
 (0)