Skip to content

Commit

Permalink
[bug] update srcparam2 after volume preprocessing close #206
Browse files Browse the repository at this point in the history
  • Loading branch information
ShijieYan committed Feb 21, 2024
1 parent dbb23be commit 744fba2
Showing 1 changed file with 25 additions and 25 deletions.
50 changes: 25 additions & 25 deletions src/mcx_utils.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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);
}
Expand Down

0 comments on commit 744fba2

Please sign in to comment.