3333solver = TwoLayerSDAForwardSolver ()
3434solver .SourceConfiguration = SourceConfiguration .Distributed
3535
36- distributedSolver = DistributedPointSourceSDAForwardSolver ()
37-
3836topLayerThickness = 5
3937opRegions = Array .CreateInstance (IOpticalPropertyRegion , 2 )
4038opRegions [0 ] = LayerOpticalPropertyRegion (DoubleRange (0 , topLayerThickness , 2 ), OpticalProperties (0.1 , 1 , 0.8 , 1.4 ))
5856zs = 0.1 + zs_delta * np .arange (100 )
5957print (zs )
6058
59+ allRhos = np .concatenate ((- rhos [::- 1 ], rhos ))
60+ print ("*********************************** RHOS *****************************************" )
61+ print (allRhos .tolist ())
62+
6163opRegionsArray = Array [Array [IOpticalPropertyRegion ]]([opRegions ])
6264# predict the tissue's fluence(rho, z) for the given optical properties
63- fluence = solver .FluenceOfRhoAndZ (opRegionsArray , rhos , zs );
6465independentAxes = Array .CreateInstance (IndependentVariableAxis , 1 )
6566independentAxes [0 ] = IndependentVariableAxis .Z
6667independentValues = Array .CreateInstance (Array [Double ], 2 )
67- independentValues [0 ] = Array [Double ](rhos .tolist ())
68+ independentValues [0 ] = Array [Double ](allRhos .tolist ())
6869independentValues [1 ] = Array [Double ](zs .tolist ())
69- fluenceOfRhoAndZ = ComputationFactory .ComputeFluence (distributedSolver , FluenceSolutionDomainType .FluenceOfRhoAndZ , independentAxes , independentValues , opRegions , Array [Double ](rhos .tolist ()))
70+ fluenceOfRhoAndZ = ComputationFactory .ComputeFluence (solver , FluenceSolutionDomainType .FluenceOfRhoAndZ , independentAxes , independentValues , opRegions , Array [Double ](allRhos .tolist ()))
7071
7172#PHD
7273sourceDetectorSeparation = 10
7374opArray = Array .CreateInstance (OpticalProperties , 2 )
7475opArray [0 ] = OpticalProperties (0.1 , 1 , 0.8 , 1.4 )
7576opArray [1 ] = OpticalProperties (0.01 , 1 , 0.8 , 1.4 )
7677
77- phdOfRhoAndZ = ComputationFactory .GetPHD (ForwardSolverType .TwoLayerSDA , fluence , sourceDetectorSeparation , opArray , Array [Double ](rhos .tolist ()), Array [Double ](zs .tolist ()))
78-
79- allRhos = np .concatenate ((- rhos [::- 1 ], rhos ))
80- print ("*********************************** RHOS *****************************************" )
81- print (allRhos .tolist ())
78+ phdOfRhoAndZ = ComputationFactory .GetPHD (ForwardSolverType .TwoLayerSDA , fluenceOfRhoAndZ , sourceDetectorSeparation , opArray , Array [Double ](allRhos .tolist ()), Array [Double ](zs .tolist ()))
8279
8380# log transform
8481log_phd = [Math .Log (f ) for f in phdOfRhoAndZ ]
85- log_fluence = [Math .Log (f ) for f in fluenceOfRhoAndZ ]
8682
8783size = len (zs )
8884# split into rows
8985phdRowsToPlot = np .array ([log_phd [i :i + size ] for i in range (0 , len (log_phd ), size )])
90- fluenceRowsToPlot = np .array ([log_fluence [i :i + size ] for i in range (0 , len (log_fluence ), size )])
91- # reverse and concatenate
92- allFluenceRowsToPlot = np .concatenate ((fluenceRowsToPlot [::- 1 ], phdRowsToPlot ))
9386
9487def heatmap (values , x , y , x_label = "" , y_label = "" , title = "" ):
9588 """Create a heatmap chart."""
@@ -110,5 +103,5 @@ def heatmap(values, x, y, x_label="", y_label="", title=""):
110103 )
111104 return fig
112105
113- fluenceChart = heatmap (allFluenceRowsToPlot .tolist (), allRhos .tolist (), list (zs ), "ρ [mm]" , "z [mm]" , "log(phd(ρ, z) [mm-2])" )
106+ fluenceChart = heatmap (phdRowsToPlot .tolist (), allRhos .tolist (), list (zs ), "ρ [mm]" , "z [mm]" , "log(phd(ρ, z) [mm-2])" )
114107fluenceChart .show (renderer = "browser" )
0 commit comments