Proportional Constaints

7.2. Proportional Constaints#

from molass import get_version
assert get_version() >= '0.7.4', "This tutorial requires molass version 0.7.4 or higher."
from molass_data import get_version
assert get_version() >= '0.3.0', "This tutorial requires molass_data version 0.3.0 or higher."
from molass_data import SAMPLE4
from molass.DataObjects import SecSaxsData as SSD
ssd = SSD(SAMPLE4)
trimmed_ssd = ssd.trimmed_copy()
corrected_ssd = trimmed_ssd.corrected_copy()
import numpy as np
import matplotlib.pyplot as plt
from molass.Decompose.Proportional import decompose_proportionally
icurve  = corrected_ssd.xr.get_icurve()
result = decompose_proportionally(icurve, [3,2,1], debug=True)
[0.71855534 0.10826109 0.17318356]
[0.49999669 0.33334145 0.16666185]
../../_images/d8c229a5630e3439850978051f5cab35393d12cd2b944b82db3eff9e19e15a1a.png
result
       message: Maximum number of function evaluations has been exceeded.
       success: False
        status: 1
           fun: -4.262727985617209
             x: [ 5.122e-02  8.156e+01  7.883e+00  5.251e+00  2.585e-02
                  9.890e+01  1.083e+01 -6.481e-03  1.128e-02  1.204e+02
                  1.206e+01  6.805e+00]
           nit: 1627
          nfev: 2400
 final_simplex: (array([[ 5.122e-02,  8.156e+01, ...,  1.206e+01,
                         6.805e+00],
                       [ 5.122e-02,  8.156e+01, ...,  1.206e+01,
                         6.805e+00],
                       ...,
                       [ 5.122e-02,  8.156e+01, ...,  1.206e+01,
                         6.805e+00],
                       [ 5.122e-02,  8.156e+01, ...,  1.206e+01,
                         6.805e+00]], shape=(13, 12)), array([-4.263e+00, -4.263e+00, ..., -4.263e+00, -4.263e+00],
                      shape=(13,)))
rgcurve = corrected_ssd.xr.compute_rgcurve()
100%|██████████| 203/203 [00:17<00:00, 11.45it/s]
num_trails = 8
species1_proportions = np.ones(num_trails) * 3
species2_proportions = np.linspace(1, 3, num_trails)
proportions = np.array([species1_proportions, species2_proportions]).T
proportions
array([[3.        , 1.        ],
       [3.        , 1.28571429],
       [3.        , 1.57142857],
       [3.        , 1.85714286],
       [3.        , 2.14285714],
       [3.        , 2.42857143],
       [3.        , 2.71428571],
       [3.        , 3.        ]])
from importlib import reload
import molass.Decompose.VaryUtils
reload(molass.Decompose.VaryUtils)
from molass.Decompose.VaryUtils import _plot_varied_decompositions_impl
_plot_varied_decompositions_impl(icurve, proportions, rgcurve=rgcurve, best=3)
../../_images/b10b534158b240d42029d230026e407dcc9ca076c9253ad65de674eeb03dd327.png ../../_images/beb5526714fe6b7bb8b8efede7c0b4d50afb5a8d45c8e8a889a1c75f67c06e7e.png
species3_proportions = np.ones(num_trails) * 1
proportions = np.array([species1_proportions, species2_proportions, species3_proportions]).T
proportions
array([[3.        , 1.        , 1.        ],
       [3.        , 1.28571429, 1.        ],
       [3.        , 1.57142857, 1.        ],
       [3.        , 1.85714286, 1.        ],
       [3.        , 2.14285714, 1.        ],
       [3.        , 2.42857143, 1.        ],
       [3.        , 2.71428571, 1.        ],
       [3.        , 3.        , 1.        ]])
_plot_varied_decompositions_impl(icurve, proportions, rgcurve=rgcurve, best=3)
../../_images/082c64a0b8c8a90ff9f75c8557b4e36808927ce65ebe450e39337b50aefb1c80.png ../../_images/4a9c0d445b13f3bdd296141cbd5374202881b00a7c0084bc9a178de30713abc4.png
from molass_data import SAMPLE1
ssd = SSD(SAMPLE1)
trimmed_ssd = ssd.trimmed_copy()
corrected_ssd = trimmed_ssd.corrected_copy()
zeros at the angular ends of error data have been replaced with the adjacent values.
modified_decomposition = corrected_ssd.quick_decomposition(num_components=3, proportions=[0.32, 0.20, 0.48])
plot2 = modified_decomposition.plot_components(title="Modified Decomposition of Sample1 (num_components=3, proportions=[0.32, 0.20, 0.48])")
../../_images/2b068609ffb1da66ed48d0acdfe42431964527bbe85f53f2d014c83b823ed5ab.png