From 54275dac65e81ac6558d8f5f7ff39f2f8a53a818 Mon Sep 17 00:00:00 2001 From: "Kevin M. Rosenberg" Date: Tue, 20 Mar 2018 18:01:04 -0600 Subject: [PATCH] Add OpenMP for phantom generation --- libctsim/phantom.cpp | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/libctsim/phantom.cpp b/libctsim/phantom.cpp index 540adf8..f028777 100644 --- a/libctsim/phantom.cpp +++ b/libctsim/phantom.cpp @@ -507,6 +507,33 @@ Phantom::convertToImagefile (ImageFile& im, const int iTotalRasterCols, const do *vCol++ = 0; } +#if HAVE_OPENMP + double x_start = xmin + (colStart * xinc); + for (PElemConstIterator pelem = m_listPElem.begin(); pelem != m_listPElem.end(); pelem++) { + const PhantomElement& rPElem = **pelem; + #pragma omp parallel for + for (int ix = 0; ix < colCount; ix++) { + double x = x_start + ix * xinc; + int iColStore = ix + iStorageOffset; + ImageFileColumn vCol = v[iColStore]; + for (int iy = 0; iy < ny; iy++) { + double y = ymin + iy * yinc; + double dAtten = 0; + for (int kx = 0; kx < nsample; kx++) { + double xi = x + kxofs + kxinc * kx; + for (int ky = 0; ky < nsample; ky++) { + double yi = y + kyofs + ky * kyinc; + if (rPElem.isPointInside (xi, yi, PHM_COORD)) + dAtten += rPElem.atten(); + } // ky + } // kx + *vCol++ += dAtten; + } /* iy */ + } /* ix */ + } /* pelem */ + +#else + double x_start = xmin + (colStart * xinc); for (PElemConstIterator pelem = m_listPElem.begin(); pelem != m_listPElem.end(); pelem++) { const PhantomElement& rPElem = **pelem; @@ -526,12 +553,13 @@ Phantom::convertToImagefile (ImageFile& im, const int iTotalRasterCols, const do } /* for iy */ } /* for ix */ } /* for pelem */ - +#endif if (nsample > 1) { double factor = 1.0 / static_cast(nsample * nsample); - - +#if HAVE_OPENMP + #pragma omp parallel for +#endif for (int ix = 0; ix < colCount; ix++) { int iColStore = ix + iStorageOffset; ImageFileColumn vCol = v[iColStore]; -- 2.34.1