Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
mantid
Manage
Activity
Members
Labels
Plan
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Locked files
Deploy
Releases
Model registry
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Code review analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
mantidproject
mantid
Commits
a151281a
Commit
a151281a
authored
7 years ago
by
Marina Ganeva
Browse files
Options
Downloads
Patches
Plain Diff
Refs #20206. Code brush.
parent
0ddac9b2
Loading
Loading
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
Framework/Algorithms/inc/MantidAlgorithms/Bin2DPowderDiffraction.h
+1
-2
1 addition, 2 deletions
.../Algorithms/inc/MantidAlgorithms/Bin2DPowderDiffraction.h
Framework/Algorithms/src/Bin2DPowderDiffraction.cpp
+29
-45
29 additions, 45 deletions
Framework/Algorithms/src/Bin2DPowderDiffraction.cpp
with
30 additions
and
47 deletions
Framework/Algorithms/inc/MantidAlgorithms/Bin2DPowderDiffraction.h
+
1
−
2
View file @
a151281a
...
@@ -53,8 +53,7 @@ private:
...
@@ -53,8 +53,7 @@ private:
void
init
()
override
;
void
init
()
override
;
void
exec
()
override
;
void
exec
()
override
;
/// Setup the output workspace
/// Setup the output workspace
API
::
MatrixWorkspace_sptr
createOutputWorkspace
(
HistogramData
::
BinEdges
&
newXBins
,
API
::
MatrixWorkspace_sptr
createOutputWorkspace
();
HistogramData
::
BinEdges
&
newYBins
);
void
ReadBinsFromFile
(
std
::
vector
<
double
>
&
Ybins
,
std
::
vector
<
std
::
vector
<
double
>>&
Xbins
)
const
;
void
ReadBinsFromFile
(
std
::
vector
<
double
>
&
Ybins
,
std
::
vector
<
std
::
vector
<
double
>>&
Xbins
)
const
;
size_t
UnifyXBins
(
std
::
vector
<
std
::
vector
<
double
>
>
&
Xbins
)
const
;
size_t
UnifyXBins
(
std
::
vector
<
std
::
vector
<
double
>
>
&
Xbins
)
const
;
...
...
This diff is collapsed.
Click to expand it.
Framework/Algorithms/src/Bin2DPowderDiffraction.cpp
+
29
−
45
View file @
a151281a
...
@@ -23,6 +23,7 @@
...
@@ -23,6 +23,7 @@
#include
"MantidKernel/PropertyWithValue.h"
#include
"MantidKernel/PropertyWithValue.h"
#include
"MantidKernel/RebinParamsValidator.h"
#include
"MantidKernel/RebinParamsValidator.h"
#include
"MantidKernel/VectorHelper.h"
#include
"MantidKernel/VectorHelper.h"
#include
"MantidAPI/HistogramValidator.h"
namespace
Mantid
{
namespace
Mantid
{
namespace
Algorithms
{
namespace
Algorithms
{
...
@@ -63,11 +64,13 @@ void Bin2DPowderDiffraction::init() {
...
@@ -63,11 +64,13 @@ void Bin2DPowderDiffraction::init() {
wsValidator
->
add
<
WorkspaceUnitValidator
>
(
"Wavelength"
);
wsValidator
->
add
<
WorkspaceUnitValidator
>
(
"Wavelength"
);
wsValidator
->
add
<
SpectraAxisValidator
>
();
wsValidator
->
add
<
SpectraAxisValidator
>
();
wsValidator
->
add
<
InstrumentValidator
>
();
wsValidator
->
add
<
InstrumentValidator
>
();
wsValidator
->
add
<
HistogramValidator
>
();
declareProperty
(
make_unique
<
WorkspaceProperty
<
EventWorkspace
>>
(
declareProperty
(
make_unique
<
WorkspaceProperty
<
EventWorkspace
>>
(
"InputWorkspace"
,
""
,
Direction
::
Input
,
"InputWorkspace"
,
""
,
Direction
::
Input
,
wsValidator
),
wsValidator
),
"An input EventWorkspace. X-axis units must be wavelength."
);
"An input EventWorkspace must be a Histogram workspace, not Point data."
"X-axis units must be wavelength."
);
declareProperty
(
declareProperty
(
make_unique
<
WorkspaceProperty
<
API
::
Workspace
>>
(
"OutputWorkspace"
,
""
,
make_unique
<
WorkspaceProperty
<
API
::
Workspace
>>
(
"OutputWorkspace"
,
""
,
...
@@ -108,13 +111,9 @@ void Bin2DPowderDiffraction::exec() {
...
@@ -108,13 +111,9 @@ void Bin2DPowderDiffraction::exec() {
g_log
.
debug
()
<<
"Number of spectra in input workspace: "
<<
m_numberOfSpectra
g_log
.
debug
()
<<
"Number of spectra in input workspace: "
<<
m_numberOfSpectra
<<
"
\n
"
;
<<
"
\n
"
;
const
auto
&
oldXEdges
=
m_inputWS
->
x
(
0
);
MatrixWorkspace_sptr
outputWS
=
createOutputWorkspace
();
BinEdges
newXBins
(
oldXEdges
.
size
());
BinEdges
newYBins
(
oldXEdges
.
size
());
MatrixWorkspace_sptr
outputWS
=
createOutputWorkspace
(
newXBins
,
newYBins
);
const
bool
normalizeByBinArea
=
this
->
getProperty
(
"NormalizeByBinArea"
);
bool
normalizeByBinArea
=
this
->
getProperty
(
"NormalizeByBinArea"
);
if
(
normalizeByBinArea
)
if
(
normalizeByBinArea
)
normalizeToBinArea
(
outputWS
);
normalizeToBinArea
(
outputWS
);
...
@@ -128,32 +127,17 @@ void Bin2DPowderDiffraction::exec() {
...
@@ -128,32 +127,17 @@ void Bin2DPowderDiffraction::exec() {
std
::
map
<
std
::
string
,
std
::
string
>
Bin2DPowderDiffraction
::
validateInputs
()
{
std
::
map
<
std
::
string
,
std
::
string
>
Bin2DPowderDiffraction
::
validateInputs
()
{
std
::
map
<
std
::
string
,
std
::
string
>
result
;
std
::
map
<
std
::
string
,
std
::
string
>
result
;
int
numWays
=
0
;
const
auto
useBinFile
=
!
getPointerToProperty
(
"BinEdgesFile"
)
->
isDefault
();
const
auto
useBinning1
=
!
getPointerToProperty
(
"Axis1Binning"
)
->
isDefault
();
const
std
::
string
beFileName
=
getProperty
(
"BinEdgesFile"
);
const
auto
useBinning2
=
!
getPointerToProperty
(
"Axis2Binning"
)
->
isDefault
();
if
(
!
beFileName
.
empty
())
if
(
!
useBinFile
&&
!
useBinning1
&&
!
useBinning2
)
{
numWays
+=
1
;
const
std
::
string
msg
=
"You must specify either Axis1Binning and Axis2Binning, or a BinEdgesFile."
;
result
[
"Axis1Binning"
]
=
msg
;
const
std
::
vector
<
double
>
axis1Binning
=
getProperty
(
"Axis1Binning"
);
result
[
"Axis2Binning"
]
=
msg
;
const
std
::
vector
<
double
>
axis2Binning
=
getProperty
(
"Axis2Binning"
);
result
[
"BinEdgesFile"
]
=
msg
;
}
else
if
(
useBinFile
&&
(
useBinning1
||
useBinning2
))
{
if
(
!
axis1Binning
.
empty
()
&&
!
axis2Binning
.
empty
())
const
std
::
string
msg
=
"You must specify either Axis1Binning and Axis2Binning, or a BinEdgesFile, but not both."
;
numWays
+=
1
;
result
[
"BinEdgesFile"
]
=
msg
;
std
::
string
message
;
if
(
numWays
==
0
)
{
message
=
"You must specify either Axis1Binning and Axis2Binning, "
"or a BinEdgesFile."
;
}
if
(
numWays
>
1
)
{
message
=
"You must specify either Axis1Binning and Axis2Binning, "
"or a BinEdgesFile, but not both."
;
}
if
(
!
message
.
empty
())
{
result
[
"Axis1Binning"
]
=
message
;
result
[
"BinEdgesFile"
]
=
message
;
}
}
return
result
;
return
result
;
...
@@ -161,18 +145,14 @@ std::map<std::string, std::string> Bin2DPowderDiffraction::validateInputs() {
...
@@ -161,18 +145,14 @@ std::map<std::string, std::string> Bin2DPowderDiffraction::validateInputs() {
//----------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------
/**
/**
* @brief createOutputWorkspace create an output workspace and setup axis
* @brief createOutputWorkspace create an output workspace and setup axis
* @param parent
* @param newXBins
* @param newYBins
* @return
* @return
*/
*/
MatrixWorkspace_sptr
Bin2DPowderDiffraction
::
createOutputWorkspace
(
MatrixWorkspace_sptr
Bin2DPowderDiffraction
::
createOutputWorkspace
()
{
HistogramData
::
BinEdges
&
newXBins
,
HistogramData
::
BinEdges
&
newYBins
)
{
using
VectorHelper
::
createAxisFromRebinParams
;
using
VectorHelper
::
createAxisFromRebinParams
;
bool
binsFromFile
(
false
);
bool
binsFromFile
(
false
);
in
t
newYSize
=
0
;
size_
t
newYSize
=
0
;
size_t
newXSize
=
0
;
size_t
newXSize
=
0
;
MatrixWorkspace_sptr
outputWS
;
MatrixWorkspace_sptr
outputWS
;
const
auto
&
spectrumInfo
=
m_inputWS
->
spectrumInfo
();
const
auto
&
spectrumInfo
=
m_inputWS
->
spectrumInfo
();
...
@@ -181,6 +161,10 @@ MatrixWorkspace_sptr Bin2DPowderDiffraction::createOutputWorkspace(
...
@@ -181,6 +161,10 @@ MatrixWorkspace_sptr Bin2DPowderDiffraction::createOutputWorkspace(
if
(
!
beFileName
.
empty
())
if
(
!
beFileName
.
empty
())
binsFromFile
=
true
;
binsFromFile
=
true
;
const
auto
&
oldXEdges
=
m_inputWS
->
x
(
0
);
BinEdges
newXBins
(
oldXEdges
.
size
());
BinEdges
newYBins
(
oldXEdges
.
size
());
auto
&
newY
=
newYBins
.
mutableRawData
();
auto
&
newY
=
newYBins
.
mutableRawData
();
std
::
vector
<
std
::
vector
<
double
>>
fileXbins
;
std
::
vector
<
std
::
vector
<
double
>>
fileXbins
;
...
@@ -188,7 +172,7 @@ MatrixWorkspace_sptr Bin2DPowderDiffraction::createOutputWorkspace(
...
@@ -188,7 +172,7 @@ MatrixWorkspace_sptr Bin2DPowderDiffraction::createOutputWorkspace(
if
(
binsFromFile
)
{
if
(
binsFromFile
)
{
newY
.
clear
();
newY
.
clear
();
ReadBinsFromFile
(
newY
,
fileXbins
);
ReadBinsFromFile
(
newY
,
fileXbins
);
newYSize
=
static_cast
<
int
>
(
newY
.
size
()
)
;
newYSize
=
newY
.
size
();
// unify xbins
// unify xbins
newXSize
=
UnifyXBins
(
fileXbins
);
newXSize
=
UnifyXBins
(
fileXbins
);
g_log
.
debug
()
<<
"Maximal size of Xbins = "
<<
newXSize
;
g_log
.
debug
()
<<
"Maximal size of Xbins = "
<<
newXSize
;
...
@@ -196,7 +180,7 @@ MatrixWorkspace_sptr Bin2DPowderDiffraction::createOutputWorkspace(
...
@@ -196,7 +180,7 @@ MatrixWorkspace_sptr Bin2DPowderDiffraction::createOutputWorkspace(
g_log
.
debug
()
<<
"Outws has "
<<
outputWS
->
getNumberHistograms
()
<<
" histograms and "
<<
outputWS
->
blocksize
()
<<
" bins."
<<
std
::
endl
;
g_log
.
debug
()
<<
"Outws has "
<<
outputWS
->
getNumberHistograms
()
<<
" histograms and "
<<
outputWS
->
blocksize
()
<<
" bins."
<<
std
::
endl
;
size_t
idx
=
0
;
size_t
idx
=
0
;
for
(
auto
Xbins
:
fileXbins
)
{
for
(
const
auto
Xbins
:
fileXbins
)
{
g_log
.
debug
()
<<
"Xbins size: "
<<
Xbins
.
size
()
<<
std
::
endl
;
g_log
.
debug
()
<<
"Xbins size: "
<<
Xbins
.
size
()
<<
std
::
endl
;
BinEdges
binEdges
(
Xbins
);
BinEdges
binEdges
(
Xbins
);
outputWS
->
setBinEdges
(
idx
,
binEdges
);
outputWS
->
setBinEdges
(
idx
,
binEdges
);
...
@@ -211,7 +195,7 @@ MatrixWorkspace_sptr Bin2DPowderDiffraction::createOutputWorkspace(
...
@@ -211,7 +195,7 @@ MatrixWorkspace_sptr Bin2DPowderDiffraction::createOutputWorkspace(
createAxisFromRebinParams
(
getProperty
(
"Axis2Binning"
),
newY
);
createAxisFromRebinParams
(
getProperty
(
"Axis2Binning"
),
newY
);
newXSize
=
binEdges
.
size
();
newXSize
=
binEdges
.
size
();
outputWS
=
WorkspaceFactory
::
Instance
().
create
(
m_inputWS
,
newYSize
-
1
,
newXSize
,
newXSize
-
1
);
outputWS
=
WorkspaceFactory
::
Instance
().
create
(
m_inputWS
,
newYSize
-
1
,
newXSize
,
newXSize
-
1
);
for
(
auto
idx
=
0
;
idx
<
newYSize
-
1
;
idx
++
)
for
(
size_t
idx
=
0
;
idx
<
newYSize
-
1
;
idx
++
)
outputWS
->
setBinEdges
(
idx
,
binEdges
);
outputWS
->
setBinEdges
(
idx
,
binEdges
);
NumericAxis
*
const
abscissa
=
new
BinEdgeAxis
(
newXBins
.
mutableRawData
());
NumericAxis
*
const
abscissa
=
new
BinEdgeAxis
(
newXBins
.
mutableRawData
());
outputWS
->
replaceAxis
(
0
,
abscissa
);
outputWS
->
replaceAxis
(
0
,
abscissa
);
...
@@ -253,8 +237,8 @@ MatrixWorkspace_sptr Bin2DPowderDiffraction::createOutputWorkspace(
...
@@ -253,8 +237,8 @@ MatrixWorkspace_sptr Bin2DPowderDiffraction::createOutputWorkspace(
std
::
vector
<
double
>::
iterator
upy
=
std
::
lower_bound
(
dp_vec
.
begin
(),
dp_vec
.
end
(),
dp
);
std
::
vector
<
double
>::
iterator
upy
=
std
::
lower_bound
(
dp_vec
.
begin
(),
dp_vec
.
end
(),
dp
);
// long int h_index = (upy-dp_vec.begin()) -1;
// long int h_index = (upy-dp_vec.begin()) -1;
long
int
h_index
=
std
::
distance
(
dp_vec
.
begin
(),
upy
)
-
1
;
long
int
h_index
=
std
::
distance
(
dp_vec
.
begin
(),
upy
)
-
1
;
if
((
h_index
<
newYSize
-
1
)
&&
h_index
>
-
1
)
{
if
((
h_index
<
static_cast
<
int
>
(
newYSize
)
-
1
)
&&
h_index
>
-
1
)
{
if
(
h_index
==
newYSize
-
1
)
if
(
h_index
==
static_cast
<
int
>
(
newYSize
)
-
1
)
g_log
.
error
(
"h_index is equal to the size of the Y axis!"
);
g_log
.
error
(
"h_index is equal to the size of the Y axis!"
);
auto
xs
=
binsFromFile
?
fileXbins
[
h_index
]
:
newXBins
.
rawData
();
auto
xs
=
binsFromFile
?
fileXbins
[
h_index
]
:
newXBins
.
rawData
();
std
::
vector
<
double
>::
iterator
lowx
=
std
::
lower_bound
(
xs
.
begin
(),
xs
.
end
(),
d
);
std
::
vector
<
double
>::
iterator
lowx
=
std
::
lower_bound
(
xs
.
begin
(),
xs
.
end
(),
d
);
...
@@ -347,7 +331,7 @@ void Bin2DPowderDiffraction::ReadBinsFromFile(std::vector<double> &Ybins, std::v
...
@@ -347,7 +331,7 @@ void Bin2DPowderDiffraction::ReadBinsFromFile(std::vector<double> &Ybins, std::v
*
*
* @param Xbins[in] --- bins to unify. Will be overwritten.
* @param Xbins[in] --- bins to unify. Will be overwritten.
*/
*/
size_t
Bin2DPowderDiffraction
::
UnifyXBins
(
std
::
vector
<
std
::
vector
<
double
>
>
&
Xbins
)
const
size_t
Bin2DPowderDiffraction
::
UnifyXBins
(
std
::
vector
<
std
::
vector
<
double
>>
&
Xbins
)
const
{
{
// get maximal vector size
// get maximal vector size
size_t
max_size
=
0
;
size_t
max_size
=
0
;
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment