From 744fba2d178a2f9b8387a5801ade04a0a5952252 Mon Sep 17 00:00:00 2001 From: ShijieYan Date: Wed, 21 Feb 2024 14:53:57 -0800 Subject: [PATCH] [bug] update srcparam2 after volume preprocessing close #206 --- src/mcx_utils.c | 50 ++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/src/mcx_utils.c b/src/mcx_utils.c index fc15a2e5..1ebd7022 100644 --- a/src/mcx_utils.c +++ b/src/mcx_utils.c @@ -1634,31 +1634,6 @@ void mcx_preprocess(Config* cfg) { } } - // for all point sources, precompute launch voxel index and media value and store those in srcparam2.z/.w internally - if (cfg->srctype <= MCX_SRC_CONE || cfg->srctype == MCX_SRC_ARCSINE || cfg->srctype == MCX_SRC_ZGAUSSIAN) { - if (cfg->srcpos.x < 0.f || cfg->srcpos.y < 0.f || cfg->srcpos.z < 0.f || cfg->srcpos.x >= cfg->dim.x || cfg->srcpos.y >= cfg->dim.y || cfg->srcpos.z >= cfg->dim.z) { - *((uint*)&cfg->srcparam2.z) = 0; - *((uint*)&cfg->srcparam2.w) = 0; - } else { - uint idx1dorig = ((int)(floorf(cfg->srcpos.z)) * (cfg->dim.y * cfg->dim.x) + (int)(floorf(cfg->srcpos.y)) * cfg->dim.x + (int)(floorf(cfg->srcpos.x))); - *((uint*)&cfg->srcparam2.z) = idx1dorig; - *((uint*)&cfg->srcparam2.w) = (cfg->vol[idx1dorig] & MED_MASK); - } - - if (cfg->extrasrclen) { - for (int i = 0; i < cfg->extrasrclen; i++) { - if (cfg->srcdata[i].srcpos.x < 0.f || cfg->srcdata[i].srcpos.y < 0.f || cfg->srcdata[i].srcpos.z < 0.f || cfg->srcdata[i].srcpos.x >= cfg->dim.x || cfg->srcdata[i].srcpos.y >= cfg->dim.y || cfg->srcdata[i].srcpos.z >= cfg->dim.z) { - *((uint*)&cfg->srcdata[i].srcparam2.z) = 0; - *((uint*)&cfg->srcdata[i].srcparam2.w) = 0; - } else { - uint idx1dorig = ((int)(floorf(cfg->srcdata[i].srcpos.z)) * (cfg->dim.y * cfg->dim.x) + (int)(floorf(cfg->srcdata[i].srcpos.y)) * cfg->dim.x + (int)(floorf(cfg->srcdata[i].srcpos.x))); - *((uint*)&cfg->srcdata[i].srcparam2.z) = idx1dorig; - *((uint*)&cfg->srcdata[i].srcparam2.w) = (cfg->vol[idx1dorig] & MED_MASK); - } - } - } - } - if (cfg->vol) { unsigned int dimxyz = cfg->dim.x * cfg->dim.y * cfg->dim.z; @@ -1701,6 +1676,31 @@ void mcx_preprocess(Config* cfg) { } } + // for all point sources, precompute launch voxel index and media value and store those in srcparam2.z/.w internally + if (cfg->srctype <= MCX_SRC_CONE || cfg->srctype == MCX_SRC_ARCSINE || cfg->srctype == MCX_SRC_ZGAUSSIAN) { + if (cfg->srcpos.x < 0.f || cfg->srcpos.y < 0.f || cfg->srcpos.z < 0.f || cfg->srcpos.x >= cfg->dim.x || cfg->srcpos.y >= cfg->dim.y || cfg->srcpos.z >= cfg->dim.z) { + *((uint*)&cfg->srcparam2.z) = 0; + *((uint*)&cfg->srcparam2.w) = 0; + } else { + uint idx1dorig = ((int)(floorf(cfg->srcpos.z)) * (cfg->dim.y * cfg->dim.x) + (int)(floorf(cfg->srcpos.y)) * cfg->dim.x + (int)(floorf(cfg->srcpos.x))); + *((uint*)&cfg->srcparam2.z) = idx1dorig; + *((uint*)&cfg->srcparam2.w) = (cfg->vol[idx1dorig] & MED_MASK); + } + + if (cfg->extrasrclen) { + for (int i = 0; i < cfg->extrasrclen; i++) { + if (cfg->srcdata[i].srcpos.x < 0.f || cfg->srcdata[i].srcpos.y < 0.f || cfg->srcdata[i].srcpos.z < 0.f || cfg->srcdata[i].srcpos.x >= cfg->dim.x || cfg->srcdata[i].srcpos.y >= cfg->dim.y || cfg->srcdata[i].srcpos.z >= cfg->dim.z) { + *((uint*)&cfg->srcdata[i].srcparam2.z) = 0; + *((uint*)&cfg->srcdata[i].srcparam2.w) = 0; + } else { + uint idx1dorig = ((int)(floorf(cfg->srcdata[i].srcpos.z)) * (cfg->dim.y * cfg->dim.x) + (int)(floorf(cfg->srcdata[i].srcpos.y)) * cfg->dim.x + (int)(floorf(cfg->srcdata[i].srcpos.x))); + *((uint*)&cfg->srcdata[i].srcparam2.z) = idx1dorig; + *((uint*)&cfg->srcdata[i].srcparam2.w) = (cfg->vol[idx1dorig] & MED_MASK); + } + } + } + } + if (cfg->issavedet) { mcx_maskdet(cfg); }