Mantid
Loading...
Searching...
No Matches
ChangePulsetime.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 +
10
11namespace Mantid::Algorithms {
12
13// Register the algorithm into the AlgorithmFactory
14DECLARE_ALGORITHM(ChangePulsetime)
15
16using namespace Mantid::Kernel;
17using namespace Mantid::API;
18using namespace Mantid::DataObjects;
19using std::size_t;
20
21//----------------------------------------------------------------------------------------------
25 declareProperty(std::make_unique<WorkspaceProperty<EventWorkspace>>("InputWorkspace", "", Direction::Input),
26 "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<ArrayProperty<int>>("WorkspaceIndexList", ""),
31 "An optional list of workspace indices to change. If blank, "
32 "all spectra in the workspace are modified.");
33 declareProperty(std::make_unique<WorkspaceProperty<EventWorkspace>>("OutputWorkspace", "", Direction::Output),
34 "An output event workspace.");
35}
36
37//----------------------------------------------------------------------------------------------
41 EventWorkspace_const_sptr in_ws = getProperty("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 std::vector<int> workspaceIndices = getProperty("WorkspaceIndexList");
49 auto num_to_do = static_cast<int64_t>(workspaceIndices.size());
50 bool doAll = false;
51 if (workspaceIndices.empty()) {
52 doAll = true;
53 num_to_do = in_ws->getNumberHistograms();
54 }
55
56 double timeOffset = getProperty("TimeOffset");
57
58 Progress prog(this, 0.0, 1.0, num_to_do);
60 for (int64_t i = 0; i < num_to_do; i++) {
61 // What workspace index?
62 int64_t wi;
63 if (doAll)
64 wi = i;
65 else
66 wi = workspaceIndices[i];
67
68 // Call the method on the event list
69 out_ws->getSpectrum(wi).addPulsetime(timeOffset);
70
71 prog.report(name());
72 }
73
74 setProperty("OutputWorkspace", out_ws);
75}
76
77} // namespace Mantid::Algorithms
#define DECLARE_ALGORITHM(classname)
Definition Algorithm.h:538
#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.
const std::string name() const override
Algorithm's name for identification.
void init() override
Initialise the properties.
void exec() override
Run the algorithm.
Support for a property that holds an array of values.
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