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
adec90d4
Commit
adec90d4
authored
7 years ago
by
Zhou, Wenduo
Browse files
Options
Downloads
Patches
Plain Diff
Refs #20796. Tried to fix issue with unit test timeout.
parent
0965b56d
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
Framework/Algorithms/inc/MantidAlgorithms/FindPeakBackground.h
+5
-10
5 additions, 10 deletions
...work/Algorithms/inc/MantidAlgorithms/FindPeakBackground.h
Framework/Algorithms/src/FindPeakBackground.cpp
+47
-116
47 additions, 116 deletions
Framework/Algorithms/src/FindPeakBackground.cpp
with
52 additions
and
126 deletions
Framework/Algorithms/inc/MantidAlgorithms/FindPeakBackground.h
+
5
−
10
View file @
adec90d4
...
...
@@ -74,10 +74,6 @@ private:
/// create output workspace
void
createOutputWorkspaces
();
/// main method to find peak background
int
findBackground
(
std
::
vector
<
size_t
>
&
peak_min_max_indexes
,
std
::
vector
<
double
>
&
bkgd3
);
/// set histogram data to find background
void
setHistogram
(
const
HistogramData
::
Histogram
&
histogram
);
...
...
@@ -90,10 +86,9 @@ private:
/// set fit window
void
setFitWindow
(
const
std
::
vector
<
double
>
&
window
);
/// add result to output workpsace
void
addResultToOutput
(
const
int
&
goodfit
,
const
std
::
vector
<
size_t
>
&
peakindexes
,
const
std
::
vector
<
double
>
&
bkgdparams
);
int
findBackground
(
const
size_t
&
l0
,
const
size_t
&
n
,
std
::
vector
<
size_t
>
&
peak_min_max_indexes
,
std
::
vector
<
double
>
&
bkgd3
);
/// histogram data to find peak background
boost
::
shared_ptr
<
const
HistogramData
::
Histogram
>
m_histogram
;
...
...
@@ -101,8 +96,6 @@ private:
// HistogramData::Histogram& m_histogram;
/// fit window
std
::
vector
<
double
>
m_vecFitWindows
;
size_t
m_iStartX
;
/// l0 in original code
size_t
m_iStopX
;
/// n in original code
/// background order: 0 for flat, 1 for linear, 2 for quadratic
size_t
m_backgroundOrder
;
/// constant sigma
...
...
@@ -118,6 +111,8 @@ private:
// /// get result
// void getBackgroundResult();
void
findWindowIndex
(
size_t
&
l0
,
size_t
&
n
);
struct
cont_peak
{
size_t
start
;
size_t
stop
;
...
...
This diff is collapsed.
Click to expand it.
Framework/Algorithms/src/FindPeakBackground.cpp
+
47
−
116
View file @
adec90d4
...
...
@@ -64,6 +64,23 @@ void FindPeakBackground::init() {
"quadratic terms."
);
}
void
FindPeakBackground
::
findWindowIndex
(
size_t
&
l0
,
size_t
&
n
)
{
auto
&
inpX
=
m_histogram
->
x
();
auto
&
inpY
=
m_histogram
->
y
();
size_t
sizey
=
inpY
.
size
();
// inpWS->y(inpwsindex).size();
// determine the fit window with their index in X (or Y)
n
=
sizey
;
l0
=
0
;
if
(
m_vecFitWindows
.
size
()
>
1
)
{
Mantid
::
Algorithms
::
FindPeaks
fp
;
l0
=
fp
.
getIndex
(
inpX
,
m_vecFitWindows
[
0
]);
n
=
fp
.
getIndex
(
inpX
,
m_vecFitWindows
[
1
]);
if
(
n
<
sizey
)
n
++
;
}
}
//----------------------------------------------------------------------------------------------
/** Execute body
*/
...
...
@@ -71,36 +88,31 @@ void FindPeakBackground::exec() {
// Get input and validate
processInputProperties
();
// auto &inpX = m_histogram->x();
// auto &inpY = m_histogram->y();
// size_t sizex = inpX.size(); // inpWS->x(inpwsindex).size();
// size_t sizey = inpY.size(); // inpWS->y(inpwsindex).size();
// // determine the fit window with their index in X (or Y)
// size_t n = sizey;
// size_t l0 = 0;
// if (m_vecFitWindows.size() > 1) {
// Mantid::Algorithms::FindPeaks fp;
// l0 = fp.getIndex(inpX, m_vecFitWindows[0]);
// n = fp.getIndex(inpX, m_vecFitWindows[1]);
// if (n < sizey)
// n++;
// }
// // m_vecFitWindows won't be used again form this point till end.
size_t
l0
,
n
;
findWindowIndex
(
l0
,
n
);
// m_vecFitWindows won't be used again form this point till end.
// Set up output table workspace
createOutputWorkspaces
();
//
set progress 10%
//
3. Get Y values
Progress
prog
(
this
,
0.0
,
1.0
,
1
);
// Find background
std
::
vector
<
size_t
>
peakindexes
;
std
::
vector
<
double
>
bkgdparams
;
int
goodfit
=
findBackground
(
peakindexes
,
bkgdparams
);
std
::
vector
<
size_t
>
peak_min_max_indexes
;
std
::
vector
<
double
>
bkgd3
;
int
goodfit
=
findBackground
(
l0
,
n
,
peak_min_max_indexes
,
bkgd3
);
// add to output workspace
addResultToOutput
(
goodfit
,
peakindexes
,
bkgdparams
);
if
(
goodfit
>
0
)
{
size_t
min_peak
=
peak_min_max_indexes
[
0
];
size_t
max_peak
=
peak_min_max_indexes
[
1
];
double
a0
=
bkgd3
[
0
];
double
a1
=
bkgd3
[
1
];
double
a2
=
bkgd3
[
2
];
API
::
TableRow
t
=
m_outPeakTableWS
->
getRow
(
0
);
t
<<
static_cast
<
int
>
(
m_inputWSIndex
)
<<
static_cast
<
int
>
(
min_peak
)
<<
static_cast
<
int
>
(
max_peak
)
<<
a0
<<
a1
<<
a2
<<
goodfit
;
}
prog
.
report
();
...
...
@@ -108,48 +120,17 @@ void FindPeakBackground::exec() {
setProperty
(
"OutputWorkspace"
,
m_outPeakTableWS
);
}
//----------------------------------------------------------------------------------------------
/**
* @brief FindPeakBackground::addResultToOutput
* @param goodfit
* @param peakindexes
* @param bkgdparams
*/
void
FindPeakBackground
::
addResultToOutput
(
const
int
&
goodfit
,
const
std
::
vector
<
size_t
>
&
peakindexes
,
const
std
::
vector
<
double
>
&
bkgdparams
)
{
if
(
goodfit
>
0
)
{
int
min_peak
=
static_cast
<
int
>
(
peakindexes
[
0
]);
int
max_peak
=
static_cast
<
int
>
(
peakindexes
[
1
]);
double
a0
=
bkgdparams
[
0
];
double
a1
=
bkgdparams
[
1
];
double
a2
=
bkgdparams
[
2
];
API
::
TableRow
t
=
m_outPeakTableWS
->
getRow
(
0
);
t
<<
static_cast
<
int
>
(
m_inputWSIndex
)
<<
min_peak
<<
max_peak
<<
a0
<<
a1
<<
a2
<<
goodfit
;
}
return
;
}
//----------------------------------------------------------------------------------------------
/** Main method to process find peak background
* Note: all inputs shall be set up by this method
* @brief FindPeakBackground::findBackground
* @param peak_min_max_indexes
* @param bkgd3
* @return integer as good fit or not!
*/
int
FindPeakBackground
::
findBackground
(
const
size_t
&
l0
,
const
size_t
&
n
,
std
::
vector
<
size_t
>
&
peak_min_max_indexes
,
std
::
vector
<
double
>
&
bkgd3
)
{
// get something from previously set up class variable
auto
&
inpX
=
m_histogram
->
x
();
auto
&
inpY
=
m_histogram
->
y
();
size_t
l0
=
m_iStartX
;
size_t
n
=
m_iStopX
;
size_t
sizex
=
inpX
.
size
();
// inpWS->x(inpwsindex).size()
;
size_t
sizey
=
inpY
.
size
();
// inpWS->y(inpwsindex).size()
;
int
goodfit
(
0
);
// Find background
double
Ymean
,
Yvariance
,
Ysigma
;
MantidVec
maskedY
;
auto
in
=
std
::
min_element
(
inpY
.
cbegin
(),
inpY
.
cend
());
...
...
@@ -217,8 +198,7 @@ int FindPeakBackground::findBackground(
if
(
inpY
[
l
+
l0
]
>
peaks
[
ipeak
].
maxY
)
peaks
[
ipeak
].
maxY
=
inpY
[
l
+
l0
];
}
}
// END-FOR (l)
}
size_t
min_peak
,
max_peak
;
double
a0
=
0.
,
a1
=
0.
,
a2
=
0.
;
if
(
!
peaks
.
empty
())
{
...
...
@@ -231,9 +211,7 @@ int FindPeakBackground::findBackground(
// save endpoints
min_peak
=
peaks
[
0
].
start
;
// extra point for histogram input
// size_t sizex = inpX.size(); // inpWS->x(inpwsindex).size();
// size_t sizey = inpY.size(); // inpWS->y(inpwsindex).size();
max_peak
=
peaks
[
0
].
stop
+
inpX
.
size
()
-
inpY
.
size
();
max_peak
=
peaks
[
0
].
stop
+
sizex
-
sizey
;
goodfit
=
1
;
}
else
{
// assume the whole thing is background
...
...
@@ -243,16 +221,11 @@ int FindPeakBackground::findBackground(
goodfit
=
2
;
}
estimateBackground
(
inpX
,
inpY
,
l0
,
n
,
min_peak
,
max_peak
,
(
!
peaks
.
empty
()),
a0
,
a1
,
a2
);
// Add a new row
// API::TableRow t = m_outPeakTableWS->getRow(0);
// t << static_cast<int>(m_inputWSIndex) << static_cast<int>(min_peak)
// << static_cast<int>(max_peak) << a0 << a1 << a2 << goodfit;
// set up good fit result
peak_min_max_indexes
.
resize
(
2
);
peak_min_max_indexes
[
0
]
=
min_peak
;
peak_min_max_indexes
[
1
]
=
max_peak
;
...
...
@@ -261,8 +234,7 @@ int FindPeakBackground::findBackground(
bkgd3
[
0
]
=
a0
;
bkgd3
[
1
]
=
a1
;
bkgd3
[
2
]
=
a2
;
}
// END-IF: if (n - l0 > 5)
}
return
goodfit
;
}
...
...
@@ -467,9 +439,9 @@ void FindPeakBackground::processInputProperties() {
// background
m_backgroundType
=
getPropertyValue
(
"BackgroundType"
);
size_t
bkgdorder
=
0
;
if
(
m_backgroundType
.
compare
(
"Linear"
)
==
0
)
if
(
m_backgroundType
==
"Linear"
)
bkgdorder
=
1
;
else
if
(
m_backgroundType
.
compare
(
"Quadratic"
)
==
0
)
else
if
(
m_backgroundType
==
"Quadratic"
)
bkgdorder
=
2
;
setBackgroundOrder
(
bkgdorder
);
...
...
@@ -494,25 +466,12 @@ void FindPeakBackground::setBackgroundOrder(size_t order) {
m_backgroundOrder
=
order
;
}
////----------------------------------------------------------------------------------------------
///** find background (main algorithm)
// * @brief FindPeakBackground::findPeakBackground
// */
// void FindPeakBackground::findPeakBackground() {return;}
///// get result
// void getBackgroundResult();
//----------------------------------------------------------------------------------------------
/** set fit window
* @brief FindPeakBackground::setFitWindow
* @param fitwindow
*/
void
FindPeakBackground
::
setFitWindow
(
const
std
::
vector
<
double
>
&
fitwindow
)
{
size_t
l0
=
0
;
size_t
n
=
m_histogram
->
y
().
size
();
// validate input
if
(
m_vecFitWindows
.
size
()
==
0
)
{
m_vecFitWindows
.
resize
(
2
);
...
...
@@ -522,39 +481,11 @@ void FindPeakBackground::setFitWindow(const std::vector<double> &fitwindow) {
m_vecFitWindows
[
0
]
>=
m_vecFitWindows
[
1
])
{
throw
std
::
invalid_argument
(
"Fit window has either wrong item number or "
"window value is not in ascending order."
);
}
else
{
Mantid
::
Algorithms
::
FindPeaks
fp
;
l0
=
fp
.
getIndex
(
m_histogram
->
x
(),
m_vecFitWindows
[
0
]);
n
=
fp
.
getIndex
(
m_histogram
->
x
(),
m_vecFitWindows
[
1
]);
if
(
n
<
m_histogram
->
y
().
size
())
n
++
;
}
// m_vecFitWindows.resize(2);
// copy the input to class variable
m_vecFitWindows
=
fitwindow
;
m_iStartX
=
l0
;
m_iStopX
=
n
;
// ---- from here .. all from original code
// auto &inpX = m_histogram->x();
// auto &inpY = m_histogram->y();
// size_t sizex = inpX.size(); // inpWS->x(inpwsindex).size();
// size_t sizey = inpY.size(); // inpWS->y(inpwsindex).size();
// determine the fit window with their index in X (or Y)
// size_t n = sizey;
// size_t l0 = 0;
// if (m_vecFitWindows.size() > 1) {
// Mantid::Algorithms::FindPeaks fp;
// l0 = fp.getIndex(inpX, m_vecFitWindows[0]);
// n = fp.getIndex(inpX, m_vecFitWindows[1]);
// if (n < sizey)
// n++;
// }
// m_vecFitWindows won't be used again form this point till end.
return
;
}
//----------------------------------------------------------------------------------------------
...
...
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