Advanced use

The Victre python class allows you to modify all input parameters for each step. To do that, you can add the parameters you want to modify during the Pipeline class definition. For example, to change the number of projections and number of histories during the projection stage, you can use this:

1pline = Pipeline(arguments_mcgpu={
2                    "number_projections": 1,
3                    "number_histories": 7800000000 * 25 * 2 / 3  # 7e7  # 7800000000 * 25 * 2 / 3
4                })

In general, you can change any input parameter for each step:

1pline = Pipeline(
2    arguments_generation={},
3    arguments_spiculated={},
4    arguments_cluster={},
5    arguments_mcgpu={},
6    materials={}
7)

Here is the list of default parameters for the different steps of the Victre pipeline that you can modify. Default values are on the Constants.py file. Check the full Python documentation for more details.

Breast model generation

  1arguments_generation = {
  2    "compressionThickness": 35,  # mm
  3    # phantom voxel size (mm)
  4    "imgRes": 0.05,
  5    # thickness of breast skin (mm)
  6    "skinThick": 0.75,
  7    # nipple length (mm)
  8    "nippleLen": 4.0,
  9    # nipple radius (mm)
 10    "nippleRad": 4.0,
 11    # nipple radius (mm)
 12    "areolaRad": 8.0,
 13    # left breast - select left or right breast (boolean)
 14    "leftBreast": "false",
 15    # desired fat fraction
 16    "targetFatFrac": 0.4,
 17
 18    #####################
 19    # breast surface shape
 20    #####################
 21    # u resolution of base shape
 22    "surface_ures": 0.005,
 23    # v resolution of base shape
 24    "surface_vres": 0.005,
 25    # minimum point separation (mm)
 26    "surface_pointSep": 0.005,
 27    # back ring thickness (mm)
 28    "surface_ringWidth": 10.0,
 29    # back ring step size (mm)
 30    "surface_ringSep": 0.5,
 31    # angle to preserve while smoothing (degrees)
 32    "surface_featureAngle": 20.0,
 33    # fraction of triangles to decimate
 34    "surface_targetReduction": 0.05,
 35    # bottom scale was 1.3,
 36    "surface_a1b": 1.0,
 37    # top scale was 1.3,
 38    "surface_a1t": 1.0,
 39    # left scale
 40    "surface_a2l": 1.0,
 41    # right scale
 42    "surface_a2r": 1.0,
 43    # outward scale was 1.75,
 44    "surface_a3": 1.0,
 45    # u quadric exponent
 46    "surface_eps1": 1.2,
 47    # v quadric exponent
 48    "surface_eps2": 1.0,
 49    # do ptosis deformation (boolean)
 50    "surface_doPtosis": "true",
 51    "surface_ptosisB0": 0.2,
 52    "surface_ptosisB1": 0.05,
 53    # do turn deformation (boolean)
 54    "surface_doTurn": "false",
 55    "surface_turnC0": -0.498,
 56    "surface_turnC1": 0.213,
 57    # do top shape deformation (boolean)
 58    "surface_doTopShape": "true",
 59    "surface_topShapeS0": 0.0,
 60    "surface_topShapeS1": 0.0,
 61    "surface_topShapeT0": -12.0,
 62    "surface_topShapeT1": -5.0,
 63    # do flatten size deformation (boolean)
 64    "surface_doFlattenSide": "true",
 65    "surface_flattenSideG0": 1.5,
 66    "surface_flattenSideG1": -0.5,
 67    # do turn top deformation (boolean)
 68    "surface_doTurnTop": "true",
 69    "surface_turnTopH0": 0.166,
 70    "surface_turnTopH1": -0.372,
 71
 72    #####################
 73    # breast compartment
 74    #####################
 75    # number of breast compartments
 76    "compartment_num": 10,
 77    # distance along nipple line of compartment seed base (mm)
 78    "compartment_seedBaseDist": 16,
 79    # fraction of phantom in nipple direction forced to be fat
 80    "compartment_backFatBufferFrac": 0.008,
 81    # number of backplane seed points
 82    "compartment_numBackSeeds": 150,
 83    # maximum seed jitter (fraction of subtended angle)
 84    "compartment_angularJitter": 0.125,
 85    # maximum seed jitter in nipple direction (mm)
 86    "compartment_zJitter": 5.0,
 87    # maximum radial distance from base seed as a fraction of distance to breast surface
 88    "compartment_maxFracRadialDist": 0.5,
 89    # minimum radial distance from base seed as a fraction of distance to breast surface
 90    "compartment_minFracRadialDist": 0.25,
 91    # minimum scale in nipple direction
 92    "compartment_minScaleNippleDir": 0.01,
 93    # maximum scale in nipple direction
 94    "compartment_maxScaleNippleDir": 0.01,
 95    # minimum scale in non-nipple direction
 96    "compartment_minScale": 30.0,
 97    # maximum scale in non-nipple direction
 98    "compartment_maxScale": 40.0,
 99    # minimum gland strength
100    "compartment_minGlandStrength": 30.0,
101    # maximum gland strength
102    "compartment_maxGlandStrength": 30.0,
103    # maximum compartment deflection angle from pointing towards nipple (fraction of pi)
104    "compartment_maxDeflect": 0.01,
105    # minimum scale skin seeds in nipple direction
106    "compartment_minSkinScaleNippleDir": 10.0,
107    # maximum scale skin seeds in nipple direction
108    "compartment_maxSkinScaleNippleDir": 20.0,
109    # minimum scale skin in non-nipple direction
110    "compartment_minSkinScale": 200.0,
111    # maximum scale skin in non-nipple direction
112    "compartment_maxSkinScale": 400.0,
113    # skin strength
114    "compartment_skinStrength": 0.5,
115    # back scale
116    "compartment_backScale": 60.0,
117    # back strength
118    "compartment_backStrength": 1.0,
119    # nipple scale
120    "compartment_nippleScale": 5.0,
121    # nipple strength
122    "compartment_nippleStrength": 10.0,
123    # check seeds within radius (mm)
124    "compartment_voronSeedRadius": 100.0,
125
126    #####################
127    # TDLU variables
128    #####################
129    # maximum TDLU length
130    "tdlu_maxLength": 2.0,
131    # minimum TDLU length
132    "tdlu_minLength": 1.0,
133    # maximum TDLU width
134    "tdlu_maxWidth": 1.0,
135    # minimum TDLU width
136    "tdlu_minWidth": 0.5,
137
138    #####################
139    # Perlin noise variables
140    #####################
141    # maximum fraction of radius deviation
142    "perlin_noise_maxDeviation": 0.1,
143    # starting frequency
144    "perlin_noise_frequency": 0.1,
145    # octave frequency multiplier
146    "perlin_noise_lacunarity": 2.0,
147    # octave signal decay
148    "perlin_noise_persistence": 0.5,
149    # number of frequency octaves
150    "perlin_noise_numOctaves": 6,
151    # x direction noise generation seed
152    "perlin_noise_xNoiseGen": 683,
153    # y direction noise generation seed
154    "perlin_noise_yNoiseGen": 4933,
155    # z direction noise generation seed
156    "perlin_noise_zNoiseGen": 23,
157    # seed noise generation
158    "perlin_noise_seedNoiseGen": 3095,
159    # shift noise generation seed
160    "perlin_noise_shiftNoiseGen": 11,
161
162    #####################
163    # Compartment boundary noise
164    #####################
165    # maximum fraction of distance deviation
166    "compartment_boundary_maxDeviation": 0.1,
167    # starting frequency
168    "compartment_boundary_frequency": 0.15,
169    # octave frequency multiplier
170    "compartment_boundary_lacunarity": 1.5,
171    # octave signal decay
172    "compartment_boundary_persistence": 0.5,
173
174    #####################
175    # Lobule boundary perturbation noise
176    #####################
177    # maximum fraction of distance deviation
178    "lobule_boundary_maxDeviation": 0.25,
179    # starting frequency
180    "lobule_boundary_frequency": 0.09,
181    # octave frequency multiplier
182    "lobule_boundary_lacunarity": 2.0,
183    # octave signal decay
184    "lobule_boundary_persistence": 0.4,
185
186    #####################
187    # Lobule glandular buffer noise
188    #####################
189    # maximum fraction of distance deviation
190    "lobule_glandular_maxDeviation": 0.15,
191    # starting frequency
192    "lobule_glandular_frequency": 0.05,
193    # octave frequency multiplier
194    "lobule_glandular_lacunarity": 1.5,
195    # octave signal decay
196    "lobule_glandular_persistence": 0.5,
197
198    #####################
199    # Voronoi segmentation variables
200    #####################
201    # fat voronoi seed density (mm^-3,)
202    "voronoi_fatInFatSeedDensity": 0.001,
203    # fat voronoi seed in glandular tissue density (mm^-3,)
204    "voronoi_fatInGlandSeedDensity": 0.001,
205    # glandular voronoi seed density (mm^-3,)
206    "voronoi_glandInGlandSeedDensity": 0.0005,
207    # maximum deflection (fraction of pi)
208    "voronoi_TDLUDeflectMax": 0.15,
209    # minimum length scale
210    "voronoi_minScaleLenTDLU": 0.1,
211    # maximum length scale
212    "voronoi_maxScaleLenTDLU": 0.2,
213    # minimum width scale
214    "voronoi_minScaleWidTDLU": 40.0,
215    # maximum width scale
216    "voronoi_maxScaleWidTDLU": 45.0,
217    # minimum strength
218    "voronoi_minStrTDLU": 20.0,
219    # maximum strength
220    "voronoi_maxStrTDLU": 22.0,
221    # maximum deflection (fraction of pi)
222    "voronoi_fatInFatDeflectMax": 0.15,
223    # minimum length scale
224    "voronoi_minScaleLenFatInFat": 5.0,
225    # maximum length scale
226    "voronoi_maxScaleLenFatInFat": 10.0,
227    # minimum width scale
228    "voronoi_minScaleWidFatInFat": 50.0,
229    # maximum width scale
230    "voronoi_maxScaleWidFatInFat": 60.0,
231    # minimum strength
232    "voronoi_minStrFatInFat": 40.0,
233    # maximum strength
234    "voronoi_maxStrFatInFat": 50.0,
235    # maximum deflection (fraction of pi)
236    "voronoi_fatInGlandDeflectMax": 0.15,
237    # minimum length scale
238    "voronoi_minScaleLenFatInGland": 1.0,
239    # maximum length scale
240    "voronoi_maxScaleLenFatInGland": 2.0,
241    # minimum width scale
242    "voronoi_minScaleWidFatInGland": 30.0,
243    # maximum width scale
244    "voronoi_maxScaleWidFatInGland": 40.0,
245    # minimum strength
246    "voronoi_minStrFatInGland": 20.0,
247    # maximum strength
248    "voronoi_maxStrFatInGland": 22.0,
249    # maximum deflection (fraction of pi)
250    "voronoi_glandInGlandDeflectMax": 0.15,
251    # minimum length scale
252    "voronoi_minScaleLenGlandInGland": 1.0,
253    # maximum length scale
254    "voronoi_maxScaleLenGlandInGland": 2.0,
255    # minimum width scale
256    "voronoi_minScaleWidGlandInGland": 30.0,
257    # maximum width scale
258    "voronoi_maxScaleWidGlandInGland": 40.0,
259    # minimum strength
260    "voronoi_minStrGlandInGland": 20.0,
261    # maximum strength
262    "voronoi_maxStrGlandInGland": 22.0,
263    # check seeds in radius (mm)
264    "voronoi_seedRadius": 40.0,
265
266    #####################
267    # fat variables
268    #####################
269    # min lobule axis length (mm)
270    # was 20,
271    "fat_minLobuleAxis": 20.0,
272    # max lobule axis length (mm)
273    # was 35,
274    "fat_maxLobuleAxis": 30.0,
275    # axial ratio min
276    "fat_minAxialRatio": 0.13,
277    # axial ratio max
278    "fat_maxAxialRatio": 0.75,
279    # minimum ligament separation between lobules
280    "fat_minLobuleGap": 0.15,
281    # maximum of absolute value of Fourier coefficient as fraction of main radius
282    "fat_maxCoeffStr": 0.1,
283    # minimum of absolute value of Fourier coefficient as fraction of main radius
284    "fat_minCoeffStr": 0.05,
285    # maximum number of trial lobules
286    # was 401,
287    "fat_maxLobuleTry": 401,
288
289
290    #####################
291    # ligament variables
292    #####################
293    "ligament_thickness": 0.1,
294    "ligament_targetFrac": 0.85,
295    "ligament_maxTry": 15000,
296    "ligament_minAxis": 20.0,
297    "ligament_maxAxis": 25.0,
298    "ligament_minAxialRatio": 0.2,
299    "ligament_maxAxialRatio": 0.3,
300    "ligament_maxPerturb": 0.05,
301    "ligament_maxDeflect": 0.12,
302    "ligament_scale": 0.007,
303    "ligament_lacunarity": 1.5,
304    "ligament_persistence": 0.3,
305    "ligament_numOctaves": 6,
306
307    #####################
308    # duct tree variables
309    #####################
310    # target number of branches (uint)
311    "duct_tree_maxBranch": 400,
312    # maximum generation (uint)
313    "duct_tree_maxGen": 7,
314    # initial radius of tree (mm)
315    "duct_tree_initRad": 0.5,
316    # base Length of root duct at nipple (mm)
317    "duct_tree_baseLength": 7.6,
318    # number of voxels for tree density tracking (uint)
319    "duct_tree_nFillX": 50,
320    "duct_tree_nFillY": 50,
321    "duct_tree_nFillZ": 50,
322
323    #####################
324    # duct branch variables
325    #####################
326    # minimum branch radius to have children (mm)
327    "duct_branch_childMinRad": 0.1,
328    # minimum starting radius as a fraction of parent end radius
329    "duct_branch_minRadFrac": 0.65,
330    # maximum starting radius as a fraction of parent end radius
331    "duct_branch_maxRadFrac": 0.99,
332    # length reduction as fraction of parent length
333    "duct_branch_lenShrink": 0.5,
334    # maximum jitter in branch length (fraction)
335    "duct_branch_lenRange": 0.1,
336    # aximuthal angle noise (radians)
337    "duct_branch_rotateJitter": 0.1,
338
339    #####################
340    # duct segment variables
341    #####################
342    # radius distribution shape parameters
343    "duct_segment_radiusBetaA": 6.0,
344    "duct_segment_radiusBetaB": 10.0,
345    # fraction of branch length per segment
346    "duct_segment_segFrac": 0.25,
347    # maximum radius of curvature (mm)
348    "duct_segment_maxCurvRad": 10.0,
349    # maximum length of segment based on
350    # curvature (fraction of pi radians)
351    "duct_segment_maxCurvFrac": 0.5,
352    # min and max end radius as fraction of start radius
353    "duct_segment_minEndRad": 0.95,
354    "duct_segment_maxEndRad": 1.0,
355    # cost function preferential angle weighting
356    "duct_segment_angleWt": 1.0,
357    # cost function density weighting
358    "duct_segment_densityWt": 20.0,
359    # number of trial segments to generate (uint)
360    "duct_segment_numTry": 50,
361    # maximum number of segments to generate before
362    # giving up and reducing length (uint)
363    "duct_segment_maxTry": 100,
364    # total number of segment tries before completely giving up
365    "duct_segment_absMaxTry": 10000,
366    # step size for checking segment is valid (mm)
367    "duct_segment_roiStep": 0.1,
368
369
370    #####################
371    # vessel tree variables
372    #####################
373    # target number of branches (uint)
374    "vessel_tree_maxBranch": 750,
375    # maximum generation (uint)
376    "vessel_tree_maxGen": 6,
377    # initial radius of tree (mm)
378    "vessel_tree_initRad": 0.75,
379    # base length of root vessel (mm)
380    "vessel_tree_baseLength": 15.0,
381    # number of voxels for tree density tracking (uint)
382    "vessel_tree_nFillX": 30,
383    "vessel_tree_nFillY": 69,
384    "vessel_tree_nFillZ": 69,
385
386    #####################
387    # vessel branch variables
388    #####################
389    # minimum branch radius to have children (mm)
390    "vessel_branch_childMinRad": 0.1,
391    # minimum starting radius as a fraction of parent end radius
392    "vessel_branch_minRadFrac": 0.65,
393    # maximum starting radius as a fraction of parent end radius
394    "vessel_branch_maxRadFrac": 0.99,
395    # length reduction as fraction of parent length
396    "vessel_branch_lenShrink": 0.8,
397    # maximum jitter in branch length (fraction)
398    "vessel_branch_lenRange": 0.1,
399    # aximuthal angle noise (radians)
400    "vessel_branch_rotateJitter": 0.1,
401
402    #####################
403    # vessel segment variables
404    #####################
405    # radius distribution shape parameters
406    "vessel_segment_radiusBetaA": 6.0,
407    "vessel_segment_radiusBetaB": 10.0,
408    # fraction of branch length to segment
409    "vessel_segment_segFrac": 0.25,
410    # maximum radius of curvature (mm)
411    "vessel_segment_maxCurvRad": 200.0,
412    # maximum length of segment based on
413    # curvature (fraction of pi radians)
414    "vessel_segment_maxCurvFrac": 0.5,
415    # min and max end radius as fraction of start radius
416    "vessel_segment_minEndRad": 0.95,
417    "vessel_segment_maxEndRad": 1.0,
418    # cost function preferential angle weighting
419    "vessel_segment_angleWt": 100.0,
420    # cost function density weighting
421    "vessel_segment_densityWt": 1.0,
422    # cost function direction weighting
423    "vessel_segment_dirWt": 100.0,
424    # number of trial segments to generate (uint)
425    "vessel_segment_numTry": 100,
426    # maximum number of segments to generate before
427    # giving up and reducing length (uint)
428    "vessel_segment_maxTry": 300,
429    # total number of segment tries before completely giving up
430    "vessel_segment_absMaxTry": 100000,
431    # step size for checking segment is valid (mm)
432    "vessel_segment_roiStep": 0.1,
433}

Mass generation

 1arguments_spiculated = {
 2    # [base]
 3    # voxel size (mm)
 4    "imgRes": 0.05,
 5    # complexity scaling for VICTRE 0:simple, 1:full complexity
 6    "complexity": 1.0,
 7    # random number seed (unsigned int) from /dev/urandom if unspecified
 8    "seed": 0,
 9
10    # [mass]
11    # maximum spherical harmonic order
12    "lMax": 4,
13    # mean mass radius (mm)
14    "alpha": 2.5,
15    # mean mass surface irregularity variance (mm^2)
16    "meanSigma2": 0.31,
17    # mass surface irregularity standard deviation (mm^2)
18    "stdSigma2": 0.04,
19    # covariance power law index
20    "powerLaw": 4.0,
21    # mean number of low freq. modifications
22    "meanLF": 611.2,
23    # std. deviation of number of low freq. modifications
24    "stdLF": 70.6,
25    # mean LF shape distribution 0:spike, 1:bump
26    "meanShape": 0.36,
27    # std. deviation of LF shape 0:spike, 1:bump
28    "stdShape": 0.48,
29    # mean relative LF radius
30    "meanLFRad": 0.229,
31    # std. deviation of LF radius
32    "stdLFRad": 0.073,
33    # mean relative LF length
34    "meanLFLen": 0.113,
35    # std. deviation of LF length
36    "stdLFLen": 0.021,
37    # mean fuzzy alpha
38    "meanFuzzAlpha": 0.015,
39    # std. deviation of fuzzy alpha
40    "stdFuzzAlpha": 0.0,
41
42    # [spicule]
43    # mean number of initial segments
44    "meanInitial": 1358,
45    # std. deviation number of initial segments
46    "stdInitial": 365,
47    # mean max number of neighbor segments
48    "meanNeigh": 8.98,
49    # std. deviation max number of neighbor segments
50    "stdNeigh": 1.89,
51    # mean initial relative radius
52    "meanInitRad": 0.024,
53    # std. deviation initial relative radius
54    "stdInitRad": 0.0053,
55    # mean radius decrease
56    "meanRadDec": 0.89,
57    # std. deviation radius decrease
58    "stdRadDec": 0.31,
59    # mean initial relative length
60    "meanInitLen": 0.173,
61    # std. deviation initial relative length
62    "stdInitLen": 0.018,
63    # mean length decrease
64    "meanLenDec": 0.91,
65    # std. deviation length decrease
66    "stdLenDec": 0.30,
67    # mean continue prob.
68    "meanContProb": 0.717,
69    # std. deviation continue prob.
70    "stdContProb": 0.057,
71    # mean branch angle.
72    "meanBranchAng": 6.55,
73    # std. deviation branch angle.
74    "stdBranchAng": 0.62
75}

Calcification cluster generation

1arguments_cluster = {
2    "seed": 0,
3    "nmin": 4, # min number calcifications
4    "nmax": 10, # max number calcifications
5    "size": 5,  # mm ROI side
6    "smin": 0.005,  # mm radius
7    "smax": 0.015  # mm radius
8}

MCGPU projection

 1arguments_mcgpu = {
 2    "number_histories": 7.8e9,
 3    "random_seed": 31415990,
 4    "selected_gpu": 0,
 5    "number_gpus": 1,
 6    "gpu_threads": 128,
 7    "histories_per_thread": 5000,
 8    "spectrum_file": "./Victre/projection/spectrum/W28kVp_Rh50um_Be1mm.spc",
 9    "source_position": [0.00001, 4.825, 63.0],
10    "source_direction": [0.0, 0.0, -1.0],
11    "fam_beam_aperture": [15.0, 7.4686667],
12    "euler_angles": [90.0, -90.0, 180.0],
13    "focal_spot": 0.0300,
14    "angular_blur": 0.18,
15    "collimate_beam": "YES",
16    "output_file": None,
17    "image_pixels": [3000, 1500],
18    "image_size": [25.50, 12.75],
19    "distance_source": 65.00,
20    "image_offset": [0, 0],
21    "detector_thickness": 0.02,
22    "mean_free_path": 0.004027,
23    "k_edge_energy": [12658.0, 11223.0, 0.596, 0.00593],
24    "detector_gain": [50.0, 0.99],
25    "additive_noise": 5200.0,
26    "cover_thickness": [0.10, 1.9616],
27    "antiscatter_grid_ratio": [5.0, 31.0, 0.0065],
28    "antiscatter_strips": [0.00089945, 1.9616],
29    "antiscatter_grid_lines": 0,
30    "number_projections": 25,
31    "rotation_axis_distance": 60.0,
32    "projections_angle": 2.083333333333,
33    "angular_rotation_first": -25.0,
34    "rotation_axis": [1.0, 0.0, 0.0],
35    "axis_translation": 0,
36    "detector_fixed": "YES",
37    "simulate_both": "YES",
38    "tally_material_dose": "YES",
39    "tally_voxel_dose": "NO",
40    "output_dose_filename": "mc-gpu_dose.dat",
41    "roi_voxel_dose_x": [1, 751],
42    "roi_voxel_dose_y": [1, 1301],
43    "roi_voxel_dose_z": [250, 250],
44    "phantom_file": None,
45    "voxel_geometry_offset": [0, 0, 0],
46    "number_voxels": [810, 1920, 745],
47    "voxel_size": [0.005, 0.005, 0.005],
48    "low_resolution_voxel_size": [0, 0, 0]
49}

MCGPU default materials

 1materials = [
 2    {"material": "./Victre/projection/material/air__5-120keV.mcgpu.gz",
 3    "density": 0.0012,
 4    "voxel_id": [PHANTOM_MATERIALS["air"]]
 5    },
 6    {"material": "./Victre/projection/material/adipose__5-120keV.mcgpu.gz",
 7    "density": 0.92,
 8    "voxel_id": [PHANTOM_MATERIALS["adipose"]]
 9    },
10    {"material": "./Victre/projection/material/skin__5-120keV.mcgpu.gz",
11    "density": 1.09,
12    "voxel_id": [PHANTOM_MATERIALS["skin"], PHANTOM_MATERIALS["nipple"]]
13    },
14    {"material": "./Victre/projection/material/glandular__5-120keV.mcgpu.gz",
15    "density": 1.035,
16    "voxel_id": [PHANTOM_MATERIALS["glandular"]]
17    },
18    {"material": "./Victre/projection/material/connective_Woodard__5-120keV.mcgpu.gz",
19    "density": 1.12,
20    "voxel_id": [PHANTOM_MATERIALS["ligament"]]
21    },
22    {"material": "./Victre/projection/material/muscle__5-120keV.mcgpu.gz",
23    "density": 1.05,
24    "voxel_id": [PHANTOM_MATERIALS["muscle"], PHANTOM_MATERIALS["duct"], PHANTOM_MATERIALS["TDLU"]]
25    },
26    {"material": "./Victre/projection/material/blood__5-120keV.mcgpu.gz",
27    "density": 1.00,
28    "voxel_id": [PHANTOM_MATERIALS["artery"], PHANTOM_MATERIALS["vein"]]
29    },
30    {"material": "./Victre/projection/material/polystyrene__5-120keV.mcgpu.gz",
31    "density": 1.06,
32    "voxel_id": [PHANTOM_MATERIALS["paddle"]]
33    },
34    {"material": "./Victre/projection/material/glandular__5-120keV.mcgpu.gz",  # MASS MATERIAL
35    # "density": 1.06, # VICTRE 1.0
36    "density": 1.06,
37    "voxel_id": [LESION_MATERIALS[VICTRE_SPICULATED]]
38    },
39    {"material": "./Victre/projection/material/CalciumOxalate__5-120keV.mcgpu.gz",  # CLUSTER CALC MATERIAL
40    "density": 1.781,
41    "voxel_id": [LESION_MATERIALS[VICTRE_CLUSTERCALC]]
42    },
43    {"material": "./Victre/projection/material/W__5-120keV.mcgpu.gz",
44    "density": 1.0,
45    "voxel_id": [PHANTOM_MATERIALS["antiscatter_grid"]]
46    },
47    {"material": "./Victre/projection/material/Se__5-120keV.mcgpu.gz",
48    "density": 1.0,
49    "voxel_id": [PHANTOM_MATERIALS["detector"]]
50    },
51]

FBP Reconstruction

Most of these values will be automatically filled from the projection parameters but can be modified manually if needed.

 1arguments_recon = {
 2    "number_projections" = self.arguments_mcgpu["number_projections"],
 3    "detector_elements" = self.arguments_mcgpu["image_pixels"][0],
 4    "detector_elements_perpendicular" = self.arguments_mcgpu["image_pixels"][1],
 5    "pixel_size" = self.arguments_mcgpu["image_size"][0] / self.arguments_mcgpu["image_pixels"][0],
 6    "distance_source" = self.arguments_mcgpu["distance_source"],
 7    "rotation_axis_distance" = self.arguments_mcgpu["rotation_axis_distance"],
 8    "detector_offset" = 0.000,
 9    "orbit_projection" = 50.0,
10    "voxels_x" = self.arguments_mcgpu["number_voxels"][1],
11    "voxels_y" = self.arguments_mcgpu["number_voxels"][0],
12    "voxels_z" = self.arguments_mcgpu["number_voxels"][2],
13    "voxel_size" = self.arguments_mcgpu["voxel_size"][0],
14    "recon_pixel_size" = self.arguments_mcgpu["image_size"][0] / self.arguments_mcgpu["image_pixels"][0],
15    "recon_thickness" = 0.1,
16    "volume_center_offset_x" = 0,
17    "angular_rotation_first" = self.arguments_mcgpu["angular_rotation_first"],
18    "projections_angle" = self.arguments_mcgpu["projections_angle"],
19    "flatfield_file" = flatfield_DBT,
20    "projection_file" = "{:s}/{:d}/projection_{:s}pixels_{:d}proj.raw".format(
21            self.results_folder,
22            self.seed,
23            'x'.join(map(str, self.arguments_mcgpu["image_pixels"])),
24            self.arguments_mcgpu["number_projections"]),
25    "one" = 1,
26    "reconstruction_file" = "{:s}/{:d}/reconstruction{:d}.raw".format(
27            self.results_folder,
28            self.seed,
29            self.seed)
30)