projects
/
ctsim.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (from parent 1:
be69e98
)
Use OpenMP for signal filtering
author
Kevin M. Rosenberg
<kevin@rosenberg.net>
Wed, 21 Mar 2018 16:28:38 +0000
(10:28 -0600)
committer
Kevin M. Rosenberg
<kevin@rosenberg.net>
Wed, 21 Mar 2018 16:28:38 +0000
(10:28 -0600)
libctsim/procsignal.cpp
patch
|
blob
|
history
diff --git
a/libctsim/procsignal.cpp
b/libctsim/procsignal.cpp
index dc024adbbbfd00c2cc0771b11d03a1a19f8affec..3a28676ff606bbb94c5f4b9753f8b189d2c5268d 100644
(file)
--- a/
libctsim/procsignal.cpp
+++ b/
libctsim/procsignal.cpp
@@
-545,21
+545,34
@@
ProcessSignal::filterSignal (const float constInput[], double output[]) const
{
double* input = new double [m_nSignalPoints];
int i;
{
double* input = new double [m_nSignalPoints];
int i;
+
+#if HAVE_OPENMP
+ #pragma omp parallel for
+#endif
for (i = 0; i < m_nSignalPoints; i++)
input[i] = constInput[i];
if (m_idGeometry == Scanner::GEOMETRY_EQUILINEAR) {
for (i = 0; i < m_nSignalPoints; i++)
input[i] = constInput[i];
if (m_idGeometry == Scanner::GEOMETRY_EQUILINEAR) {
+#if HAVE_OPENMP
+ #pragma omp parallel for
+#endif
for (int i = 0; i < m_nSignalPoints; i++) {
int iDetFromCenter = i - (m_nSignalPoints / 2);
input[i] *= m_dFocalLength / sqrt (m_dFocalLength * m_dFocalLength + iDetFromCenter * iDetFromCenter * m_dSignalInc * m_dSignalInc);
}
} else if (m_idGeometry == Scanner::GEOMETRY_EQUIANGULAR) {
for (int i = 0; i < m_nSignalPoints; i++) {
int iDetFromCenter = i - (m_nSignalPoints / 2);
input[i] *= m_dFocalLength / sqrt (m_dFocalLength * m_dFocalLength + iDetFromCenter * iDetFromCenter * m_dSignalInc * m_dSignalInc);
}
} else if (m_idGeometry == Scanner::GEOMETRY_EQUIANGULAR) {
+#if HAVE_OPENMP
+ #pragma omp parallel for
+#endif
for (int i = 0; i < m_nSignalPoints; i++) {
int iDetFromCenter = i - (m_nSignalPoints / 2);
input[i] *= m_dFocalLength * cos (iDetFromCenter * m_dSignalInc);
}
}
if (m_idFilterMethod == FILTER_METHOD_CONVOLUTION) {
for (int i = 0; i < m_nSignalPoints; i++) {
int iDetFromCenter = i - (m_nSignalPoints / 2);
input[i] *= m_dFocalLength * cos (iDetFromCenter * m_dSignalInc);
}
}
if (m_idFilterMethod == FILTER_METHOD_CONVOLUTION) {
+#if HAVE_OPENMP
+ #pragma omp parallel for
+#endif
for (i = 0; i < m_nSignalPoints; i++)
output[i] = convolve (input, m_dSignalInc, i, m_nSignalPoints);
} else if (m_idFilterMethod == FILTER_METHOD_FOURIER) {
for (i = 0; i < m_nSignalPoints; i++)
output[i] = convolve (input, m_dSignalInc, i, m_nSignalPoints);
} else if (m_idFilterMethod == FILTER_METHOD_FOURIER) {
@@
-571,6
+584,9
@@
ProcessSignal::filterSignal (const float constInput[], double output[]) const
std::complex<double>* fftSignal = new std::complex<double> [m_nFilterPoints];
finiteFourierTransform (inputSignal, fftSignal, m_nFilterPoints, FORWARD);
delete inputSignal;
std::complex<double>* fftSignal = new std::complex<double> [m_nFilterPoints];
finiteFourierTransform (inputSignal, fftSignal, m_nFilterPoints, FORWARD);
delete inputSignal;
+#if HAVE_OPENMP
+ #pragma omp parallel for
+#endif
for (i = 0; i < m_nFilterPoints; i++)
fftSignal[i] *= m_adFilter[i];
double* inverseFourier = new double [m_nFilterPoints];
for (i = 0; i < m_nFilterPoints; i++)
fftSignal[i] *= m_adFilter[i];
double* inverseFourier = new double [m_nFilterPoints];
@@
-588,6
+604,9
@@
ProcessSignal::filterSignal (const float constInput[], double output[]) const
std::complex<double>* fftSignal = new std::complex<double> [m_nFilterPoints];
finiteFourierTransform (inputSignal, fftSignal, FORWARD);
delete inputSignal;
std::complex<double>* fftSignal = new std::complex<double> [m_nFilterPoints];
finiteFourierTransform (inputSignal, fftSignal, FORWARD);
delete inputSignal;
+#if HAVE_OPENMP
+ #pragma omp parallel for
+#endif
for (i = 0; i < m_nFilterPoints; i++)
fftSignal[i] *= m_adFilter[i];
double* inverseFourier = new double [m_nFilterPoints];
for (i = 0; i < m_nFilterPoints; i++)
fftSignal[i] *= m_adFilter[i];
double* inverseFourier = new double [m_nFilterPoints];
@@
-616,6
+635,9
@@
ProcessSignal::filterSignal (const float constInput[], double output[]) const
m_adComplexFftInput[i][0] = input[i];
fftw_execute (m_complexPlanForward);
m_adComplexFftInput[i][0] = input[i];
fftw_execute (m_complexPlanForward);
+#if HAVE_OPENMP
+ #pragma omp parallel for
+#endif
for (i = 0; i < m_nFilterPoints; i++) {
m_adComplexFftSignal[i][0] = m_adFilter[i] * m_adComplexFftOutput[i][0];
m_adComplexFftSignal[i][1] = m_adFilter[i] * m_adComplexFftOutput[i][1];
for (i = 0; i < m_nFilterPoints; i++) {
m_adComplexFftSignal[i][0] = m_adFilter[i] * m_adComplexFftOutput[i][0];
m_adComplexFftSignal[i][1] = m_adFilter[i] * m_adComplexFftOutput[i][1];