Mantid
Loading...
Searching...
No Matches
ChangePulsetime2.cpp
Go to the documentation of this file.
1// Mantid Repository : https://github.com/mantidproject/mantid
2//
3// Copyright © 2018 ISIS Rutherford Appleton Laboratory UKRI,
4// NScD Oak Ridge National Laboratory, European Spallation Source,
5// Institut Laue - Langevin & CSNS, Institute of High Energy Physics, CAS
6// SPDX - License - Identifier: GPL - 3.0 +
11
12namespace Mantid::Algorithms {
13
14// Algorithm not registered as this will be used for testing MPI
15// DECLARE_ALGORITHM(ChangePulsetime2)
16
17using namespace Mantid::Kernel;
18using namespace Mantid::API;
19using namespace Mantid::DataObjects;
20using std::size_t;
21
22//----------------------------------------------------------------------------------------------
26 declareWorkspaceInputProperties<EventWorkspace>("InputWorkspace", "An input event workspace.");
27 declareProperty(std::make_unique<PropertyWithValue<double>>("TimeOffset", Direction::Input),
28 "Number of seconds (a float) to add to each event's pulse "
29 "time. Required.");
30 declareProperty(std::make_unique<WorkspaceProperty<EventWorkspace>>("OutputWorkspace", "", Direction::Output),
31 "An output event workspace.");
32}
33
34//----------------------------------------------------------------------------------------------
39 Indexing::SpectrumIndexSet indexSet;
40
41 std::tie(in_ws, indexSet) = getWorkspaceAndIndices<EventWorkspace>("InputWorkspace");
42 EventWorkspace_sptr out_ws = getProperty("OutputWorkspace");
43 if (!out_ws) {
44 out_ws = in_ws->clone();
45 }
46
47 // Either use the given list or use all spectra
48 double timeOffset = getProperty("TimeOffset");
49
50 Progress prog(this, 0.0, 1.0, indexSet.size());
52 for (int64_t i = 0; i < static_cast<int64_t>(indexSet.size()); i++) {
53 // What workspace index?
54
55 // Call the method on the event list
56 out_ws->getSpectrum(indexSet[i]).addPulsetime(timeOffset);
57 prog.report(name());
58 }
59
60 setProperty("OutputWorkspace", out_ws);
61}
62
63} // namespace Mantid::Algorithms
#define PARALLEL_FOR_NO_WSP_CHECK()
void declareProperty(std::unique_ptr< Kernel::Property > p, const std::string &doc="") override
Add a property to the list of managed properties.
TypedValue getProperty(const std::string &name) const override
Get the value of a property.
Helper class for reporting progress from algorithms.
Definition Progress.h:25
A property class for workspaces.
void exec() override
Run the algorithm.
void init() override
Initialise the properties.
const std::string name() const override
Algorithm's name for identification.
IPropertyManager * setProperty(const std::string &name, const T &value)
Templated method to set the value of a PropertyWithValue.
void report()
Increments the loop counter by 1, then sends the progress notification on behalf of its algorithm.
The concrete, templated class for properties.
std::shared_ptr< const EventWorkspace > EventWorkspace_const_sptr
shared pointer to a const Workspace2D
std::shared_ptr< EventWorkspace > EventWorkspace_sptr
shared pointer to the EventWorkspace class
@ Input
An input workspace.
Definition Property.h:53
@ Output
An output workspace.
Definition Property.h:54