Skip to content

Commit 2e60de0

Browse files
committed
Found error in Chi2 calculation and updated in all files. Modified iteration values to be the chromophores not mua.
1 parent b6de15d commit 2e60de0

3 files changed

Lines changed: 33 additions & 21 deletions

File tree

inverse-solutions/r-of-fx-multi-op-prop-inversion.py

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@ def CalculateReflectanceVsWavelengthFromChromophoreConcAndScatterer(
6767
scattererLocal = PowerLawScatterer(valuesSought[2], valuesSought[3])
6868
# Compose local tissue to obtain optical properties
6969
opsLocal = Tissue(chromophoresLocal, scattererLocal, "", n=1.4).GetOpticalProperties(wavelengths)
70+
print("iter:[Hb HbO2 A b]=[%5.3f %5.3f %5.3f %5.3f]" % (
71+
valuesSought[0], valuesSought[1], valuesSought[2],valuesSought[3]))
7072
# Compute reflectance for local absorbers
7173
modelDataLocal=np.concatenate(
7274
[np.array(forwardSolver.ROfFx(opsLocal, fxs[0]), dtype=float),
@@ -136,14 +138,15 @@ def residual(valuesSought, wavelengths, fxs, measuredROfFx, forwardSolver):
136138

137139
chart.show(renderer="browser")
138140
# output results
139-
print("Meas = [%5.3f %5.3f %5.3f %5.3f]" % (measuredData[0], measuredData[1], measuredData[2], measuredData[3]))
141+
print("Meas = [%5.3f %5.3f %5.3f %5.3f]" % (
142+
measuredData[0], measuredData[1], measuredData[2], measuredData[3]))
140143
print("IG = [%5.3f %5.3f %5.3f %5.3f] Chi2=%5.3e" % (
141144
initialGuess[0], initialGuess[1], initialGuess[2], initialGuess[3],
142-
np.dot(measuredROfFx,initialGuessROfFx)))
145+
np.dot(measuredROfFx-initialGuessROfFx,measuredROfFx-initialGuessROfFx)))
143146
print("Conv = [%5.3f %5.3f %5.3f %5.3f] Chi2=%5.3e" % (fit.x[0], fit.x[1], fit.x[2], fit.x[3],
144-
np.dot(measuredROfFx,fitROfFx)))
145-
print("error = [%5.3f %5.3f %5.3f %5.3f]" % (
146-
abs((measuredData[0]-fit.x[0])/measuredData[0]),
147-
abs((measuredData[1]-fit.x[1])/measuredData[1]),
148-
abs((measuredData[2]-fit.x[2])/measuredData[2]),
149-
abs((measuredData[3]-fit.x[3])/measuredData[3])))
147+
np.dot(measuredROfFx-fitROfFx,measuredROfFx-fitROfFx)))
148+
print("error = [%3.2f %3.2f %3.2f %3.2f]%%" % (
149+
100*abs((measuredData[0]-fit.x[0])/measuredData[0]),
150+
100*abs((measuredData[1]-fit.x[1])/measuredData[1]),
151+
100*abs((measuredData[2]-fit.x[2])/measuredData[2]),
152+
100*abs((measuredData[3]-fit.x[3])/measuredData[3])))

inverse-solutions/r-of-rho-multi-op-prop-inversion-using-csharp-solve.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,8 @@ def CalculateReflectanceFuncVsWavelengthFromChromophoreConcentration(
6060
chromophoresLocal[2] = ChromophoreAbsorber(ChromophoreType.H2O, chromophoreConcentration[2])
6161
# Compose local tissue to obtain optical properties
6262
opsLocal = Tissue(chromophoresLocal, params[2], "", n=1.4).GetOpticalProperties(params[0])
63-
print('opsLocal[0]=',opsLocal[0])
63+
print("iter:[HbO2,Hb,H2O]=[%3.2f %3.2f %3.2f]" % (
64+
chromophoreConcentration[0],chromophoreConcentration[1],chromophoreConcentration[2]))
6465
# Compute reflectance for local absorbers
6566
modelDataLocal = forwardSolverForInversion.ROfRho(opsLocal, params[1])
6667
modelDataLocalCSharp = Array.CreateInstance(float, len(wavelengths))
@@ -120,11 +121,15 @@ def CalculateReflectanceFuncVsWavelengthFromChromophoreConcentration(
120121
chart.show(renderer="browser")
121122
# output results
122123
print("Meas = [%5.3f %5.3f %5.3f]" % (measuredData[0], measuredData[1], measuredData[2]))
123-
print("IG = [%5.3f %5.3f %5.3f] Chi2=%5.3e" % (initialGuess[0], initialGuess[1], initialGuess[2],
124-
np.dot(measuredROfRho,initialGuessROfRho)))
124+
print("IG = [%5.3f %5.3f %5.3f] Chi2=%5.3e" % (
125+
initialGuess[0], initialGuess[1], initialGuess[2],
126+
np.dot(np.subtract(measuredROfRho,initialGuessROfRho),
127+
np.subtract(measuredROfRho,initialGuessROfRho))))
125128
print("Conv = [%5.3f %5.3f %5.3f] Chi2=%5.3e" % (fit[0], fit[1], fit[2],
126-
np.dot(measuredROfRho,fitROfRho)))
127-
print("error = [%5.3f %5.3f %5.3f]" % (abs((measuredData[0]-fit[0])/measuredData[0]),
128-
abs((measuredData[1]-fit[1])/measuredData[1]),
129-
abs((measuredData[2]-fit[2])/measuredData[2])))
129+
np.dot(np.subtract(measuredROfRho,fitROfRho),
130+
np.subtract(measuredROfRho,fitROfRho))))
131+
print("error = [%5.3f %5.3f %5.3f]%%" % (
132+
100*abs((measuredData[0]-fit[0])/measuredData[0]),
133+
100*abs((measuredData[1]-fit[1])/measuredData[1]),
134+
100*abs((measuredData[2]-fit[2])/measuredData[2])))
130135

inverse-solutions/r-of-rho-multi-op-prop-inversion.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,8 @@ def CalculateReflectanceVsWavelengthFromChromophoreConcentration(
6060
chromophoresLocal[2] = ChromophoreAbsorber(ChromophoreType.H2O, chromophoreConcentration[2])
6161
# Compose local tissue to obtain optical properties
6262
opsLocal = Tissue(chromophoresLocal, scatterer, "", n=1.4).GetOpticalProperties(wavelengths)
63-
print('opsLocal[0]=',opsLocal[0])
63+
print("iter:[HbO2,Hb,H2O]=[%3.2f %3.2f %3.2f]" % (
64+
chromophoreConcentration[0],chromophoreConcentration[1],chromophoreConcentration[2]))
6465
# Compute reflectance for local absorbers
6566
modelDataLocal = Array.CreateInstance(float, len(wavelengths))
6667
modelDataLocal = forwardSolver.ROfRho(opsLocal, rho)
@@ -121,9 +122,12 @@ def residual(chromophoreConcentration, wavelengths, rho, scatterer, measuredROfR
121122
# output results
122123
print("Meas = [%5.3f %5.3f %5.3f]" % (measuredData[0], measuredData[1], measuredData[2]))
123124
print("IG = [%5.3f %5.3f %5.3f] Chi2=%5.3e" % (initialGuess[0], initialGuess[1], initialGuess[2],
124-
np.dot(measuredROfRho,initialGuessROfRho)))
125+
np.dot(np.subtract(measuredROfRho,initialGuessROfRho),
126+
np.subtract(measuredROfRho,initialGuessROfRho))))
125127
print("Conv = [%5.3f %5.3f %5.3f] Chi2=%5.3e" % (fit.x[0], fit.x[1], fit.x[2],
126-
np.dot(measuredROfRho,fitROfRho)))
127-
print("error = [%5.3f %5.3f %5.3f]" % (abs((measuredData[0]-fit.x[0])/measuredData[0]),
128-
abs((measuredData[1]-fit.x[1])/measuredData[1]),
129-
abs((measuredData[2]-fit.x[2])/measuredData[2])))
128+
np.dot(np.subtract(measuredROfRho,fitROfRho),
129+
np.subtract(measuredROfRho,fitROfRho))))
130+
print("error = [%5.3f %5.3f %5.3f]%%" % (
131+
100*abs((measuredData[0]-fit.x[0])/measuredData[0]),
132+
100*abs((measuredData[1]-fit.x[1])/measuredData[1]),
133+
100*abs((measuredData[2]-fit.x[2])/measuredData[2])))

0 commit comments

Comments
 (0)