Skip to content

Instantly share code, notes, and snippets.

@KestutisMa
Created February 17, 2024 14:52
Show Gist options
  • Save KestutisMa/0abc5501c1d94bcf7b1d169d46c66036 to your computer and use it in GitHub Desktop.
Save KestutisMa/0abc5501c1d94bcf7b1d169d46c66036 to your computer and use it in GitHub Desktop.
import os.path
import sys
import numpy as np
from xopto.mcvox import mc
from xopto import make_user_dirs, USER_TMP_PATH
debug = False
exportsrc = os.path.join(USER_TMP_PATH, 'mcvox_isotropicvoxels.h')
make_user_dirs()
pf = mc.mcpf.Hg(0.8)
cl_device = mc.clinfo.gpus()[0]
dims = np.array([8*4,8*4,8*4])
dims_mm = dims * 1.0
voxels = mc.mcgeometry.Voxels(
mc.mcgeometry.Axis(-dims_mm[0]/2, dims_mm[0]/2, dims[0]),
mc.mcgeometry.Axis(-dims_mm[1]/2, dims_mm[1]/2, dims[1]),
mc.mcgeometry.Axis(-dims_mm[2]/2, dims_mm[2]/2, dims[2])
)
materials = mc.mcmaterial.Materials([
mc.mcmaterial.Material(n=1.0, mua=0.0, mus=0.0, pf=pf),
mc.mcmaterial.Material(n=1.33, mua=0.01e2, mus=10.0e2, pf=pf),
mc.mcmaterial.Material(n=1.33, mua=10.0e2, mus=100.0e2, pf=pf)
])
fluence = mc.mcfluence.Fluence(
mc.mcfluence.Axis(-dims_mm[0]/2, dims_mm[0]/2, dims[0]),
mc.mcfluence.Axis(-dims_mm[1]/2, dims_mm[1]/2, dims[1]),
mc.mcfluence.Axis(-dims_mm[2]/2, dims_mm[2]/2, dims[2])
)
nphotons = 1e6 if not debug else 1
results = None
### Run
dim_i_time = 400
[dim_x, dim_y, dim_z] = dims
# fluence_4D = np.zeros((dim_i_time, dim_x, dim_y, dim_z))
src_voxels = np.zeros((dims[0]*dims[1]*dims[2], 3))
src_voxels_weights = np.zeros((dims[0]*dims[1]*dims[2]))
for i_time in range(dim_i_time):
print(f'PyXOpto calculating i_time {i_time}....')
for k in np.arange(dim_z):
for j in np.arange(dim_y):
for i in np.arange(dim_x):
src_voxels_weights[k*dims[2]*dims[1] + j*dims[1] + i] = np.random.rand()
# src_voxels_wights[k*dims[2]*dims[1] + j*dims[1] + i] = 1 if k == 2 else 0
src_voxels[k*dims[2]*dims[1] + j*dims[1] + i, 0] = i # x indices
src_voxels[k*dims[2]*dims[1] + j*dims[1] + i, 1] = j
src_voxels[k*dims[2]*dims[1] + j*dims[1] + i, 2] = k
print(src_voxels.shape, src_voxels_weights.shape)
source = mc.mcsource.IsotropicVoxels(voxels=src_voxels, weights=src_voxels_weights )
mc_obj = mc.Mc(voxels, materials, source, detectors=None, fluence=fluence,
cl_devices=cl_device,
options=[mc.mcoptions.McDebugMode(debug)])
mc_obj.rmax = 25e-3
mc_obj.voxels.material[:] = 2
_, fluence_res, detectors_res = mc_obj.run(nphotons, exportsrc=exportsrc, verbose=True, out=results)
# fluence_res.data.T
# fluence = self.get_result_fluence()
# self.results = self.mc_obj.run(self.nphotons, exportsrc=exportsrc, verbose=True, out=self.results)
# print(fluence.data)
# print(fluence.raw)
# print(type(fluence.data))
# print(type(fluence.raw))
print('PyXopto Done.')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment