Beispiel #1
0
            public Mode[] GetModesMassWeighted(bool delhess, ILinAlg la)
            {
                Matrix mwhess = GetHessMassWeighted(delhess);

                Mode[] mwmodes = Hess.GetModesFromHess(mwhess, la);
                return(mwmodes);
            }
Beispiel #2
0
 public Mode[] GetModes(ILinAlg la)
 {
     if (_modes == null)
     {
         _modes = Hess.GetModesFromHess(hess, la);
     }
     return(_modes);
 }
Beispiel #3
0
            public static double[] GetBFactor(Mode[] modes, double[] mass = null)
            {
                if (HDebug.Selftest())
                #region selftest
                {
                    using (new Matlab.NamedLock("SELFTEST"))
                    {
                        Matlab.Clear("SELFTEST");
                        Matlab.Execute("SELFTEST.hess = rand(30);");
                        Matlab.Execute("SELFTEST.hess = SELFTEST.hess + SELFTEST.hess';");
                        Matlab.Execute("SELFTEST.invhess = inv(SELFTEST.hess);");
                        Matlab.Execute("SELFTEST.bfactor3 = diag(SELFTEST.invhess);");
                        Matlab.Execute("SELFTEST.bfactor = SELFTEST.bfactor3(1:3:end) + SELFTEST.bfactor3(2:3:end) + SELFTEST.bfactor3(3:3:end);");
                        MatrixByArr selftest_hess    = Matlab.GetMatrix("SELFTEST.hess");
                        Mode[]      selftest_mode    = Hess.GetModesFromHess(selftest_hess);
                        Vector      selftest_bfactor = BFactor.GetBFactor(selftest_mode);
                        Vector      selftest_check   = Matlab.GetVector("SELFTEST.bfactor");
                        Vector      selftest_diff    = selftest_bfactor - selftest_check;
                        HDebug.AssertTolerance(0.00000001, selftest_diff);
                        Matlab.Clear("SELFTEST");
                    }
                }
                #endregion

                int size = modes[0].size;
                if (mass != null)
                {
                    HDebug.Assert(size == mass.Length);
                }
                double[] bfactor = new double[size];
                for (int i = 0; i < size; i++)
                {
                    foreach (Mode mode in modes)
                    {
                        bfactor[i] += mode.eigvec[i * 3 + 0] * mode.eigvec[i * 3 + 0] / mode.eigval;
                        bfactor[i] += mode.eigvec[i * 3 + 1] * mode.eigvec[i * 3 + 1] / mode.eigval;
                        bfactor[i] += mode.eigvec[i * 3 + 2] * mode.eigvec[i * 3 + 2] / mode.eigval;
                    }
                    if (mass != null)
                    {
                        bfactor[i] /= mass[i];
                    }
                }
                return(bfactor);
            }
                public static Tuple <double, double, double[]> GetQuality
                    (string pathcache
                    , Universe univ
                    , Func <Hess.HessInfo> GetHessInfo
                    , double GetHessCoarseResiIter_thres_zeroblk
                    )
                {
                    if (HFile.Exists(pathcache) == false)
                    {
                        double   corr  = double.NaN;
                        double   wovlp = double.NaN;
                        double[] ovlps = new double[]
                        {
                            double.NaN, double.NaN, double.NaN, double.NaN, double.NaN,
                            double.NaN, double.NaN, double.NaN, double.NaN, double.NaN,
                        };

                        try
                        {
                            Hess.HessInfo hessinfo = GetHessInfo();

                            Mode[] camodes_orig;
                            {
                                int[]  idxca              = (hessinfo.atoms as Universe.Atom[]).ListPdbAtomName(true).HIdxEqual("CA");
                                Matrix cahess             = Hess.GetHessCoarseBlkmat(hessinfo.hess, idxca, "inv");
                                Mode[] lcamodes           = Hess.GetModesFromHess(cahess, la);
                                var    camodes_nzero_zero = lcamodes.SeparateTolerants();
                                if (bool.Parse("false"))
                                {
                                    camodes_nzero_zero = lcamodes.SeparateTolerantsByCountSigned(6);
                                }                                                                                            /// manually fix 3LKY, 4EDL
                                if (camodes_nzero_zero.Item2.Length != 6)
                                {
                                    throw new HException("# zero-eigval != 6");
                                }
                                camodes_orig = camodes_nzero_zero.Item1;
                            }
                            GC.Collect();
                            Vector cabfactor_orig = camodes_orig.GetBFactor().ToArray();

                            Mode[] camodes_iter;
                            {
                                var    cahess             = Hess.GetHessCoarseResiIter_BlockWise(hessinfo, univ.GetCoords(), la, 18, 500, GetHessCoarseResiIter_thres_zeroblk);
                                Mode[] lcamodes           = Hess.GetModesFromHess(cahess.hess, la);
                                var    camodes_nzero_zero = lcamodes.SeparateTolerantsByCountSigned(6);
                                if (camodes_nzero_zero.Item2.Length != 6)
                                {
                                    throw new HException("# zero-eigval != 6");
                                }
                                camodes_iter = camodes_nzero_zero.Item1;
                            }
                            GC.Collect();
                            Vector cabfactor_iter = camodes_iter.GetBFactor().ToArray();

                            corr = HBioinfo.BFactor.Corr(cabfactor_orig, cabfactor_iter);
                            var lwovlp = HBioinfo.OverlapWeightedByEigval(camodes_orig, camodes_iter, la, false, "corresponding index");
                            wovlp = lwovlp.woverlap;
                            ovlps = new double[]
                            {
                                lwovlp.overlaps[0], lwovlp.overlaps[1], lwovlp.overlaps[2], lwovlp.overlaps[3], lwovlp.overlaps[4],
                                lwovlp.overlaps[5], lwovlp.overlaps[6], lwovlp.overlaps[7], lwovlp.overlaps[8], lwovlp.overlaps[9],
                            };
                        }
                        catch (Exception e)
                        {
                            if (e.Message != "# zero-eigval != 6")
                            {
                                throw;
                            }
                        }

                        HSerialize.SerializeText(pathcache, new double[]
                                                 { corr, wovlp,
                                                   ovlps[0], ovlps[1], ovlps[2], ovlps[3], ovlps[4],
                                                   ovlps[5], ovlps[6], ovlps[7], ovlps[8], ovlps[9], });
                    }

                    {
                        double[] buff;
                        HSerialize.DeserializeText(pathcache, out buff);
                        double   corr  = buff[0];
                        double   wovlp = buff[1];
                        double[] ovlps = new double[] { buff[2], buff[3], buff[4], buff[5], buff[6]
                                                        , buff[7], buff[8], buff[9], buff[10], buff[11] };
                        if (double.IsNaN(corr))
                        {
                            HDebug.Assert(false);
                        }
                        return(new Tuple <double, double, double[]>(corr, wovlp, ovlps));
                    }
                }
Beispiel #5
0
                public static Quality GetQuality
                    (string pathcache
                    , Universe univ
                    , Func <Hess.HessInfo> GetHessInfo
                    , double GetHessCoarseResiIter_thres_zeroblk
                    )
                {
                    double corr        = double.NaN;
                    double wovlp       = double.NaN;
                    double sparsityall = double.NaN;
                    double sparsityca  = double.NaN;

                    double[] ovlps = new double[]
                    {
                        double.NaN, double.NaN, double.NaN, double.NaN, double.NaN,
                        double.NaN, double.NaN, double.NaN, double.NaN, double.NaN,
                    };
                    double[] eigvals = new double[]
                    {
                        double.NaN, double.NaN, double.NaN, double.NaN, double.NaN,
                        double.NaN, double.NaN, double.NaN, double.NaN, double.NaN,
                    };

                    try
                    {
                        Hess.HessInfo hessinfo     = GetHessInfo();
                        double        lsparsityall = 1 - hessinfo.hess.RatioUsedBlocks;

                        Mode[] camodes_orig;
                        {
                            int[]      idxca              = (hessinfo.atoms as Universe.Atom[]).ListPdbAtomName(true).HIdxEqual("CA");
                            HessMatrix cahess             = Hess.GetHessCoarseBlkmat(hessinfo.hess, idxca, "inv");
                            Mode[]     lcamodes           = Hess.GetModesFromHess(cahess, la);
                            var        camodes_nzero_zero = lcamodes.SeparateTolerants();
                            if (bool.Parse("false"))
                            {
                                camodes_nzero_zero = lcamodes.SeparateTolerantsByCountSigned(6);
                            }                                                                                            /// manually fix 3LKY, 4EDL
                            if (camodes_nzero_zero.Item2.Length != 6)
                            {
                                throw new HException("# zero-eigval != 6");
                            }
                            camodes_orig = camodes_nzero_zero.Item1;
                        }
                        GC.Collect();
                        Vector cabfactor_orig = camodes_orig.GetBFactor().ToArray();

                        double lsparsityca;
                        Mode[] camodes_iter;
                        Mode[] camodes;
                        {
                            var coords = univ.GetCoords();
                            var cahess = Hess.GetHessCoarseResiIter_BlockWise(hessinfo, coords, la, 18, 500, GetHessCoarseResiIter_thres_zeroblk);
                            lsparsityca = 1 - cahess.hess.RatioUsedBlocks;
                            camodes     = Hess.GetModesFromHess(cahess.hess, la);
                            var camodes_nzero_zero = camodes.SeparateTolerantsByCountSigned(6);
                            if (camodes_nzero_zero.Item2.Length != 6)
                            {
                                throw new HException("# zero-eigval != 6");
                            }
                            camodes_iter = camodes_nzero_zero.Item1;
                        }
                        GC.Collect();
                        Vector cabfactor_iter = camodes_iter.GetBFactor().ToArray();

                        corr = HBioinfo.BFactor.Corr(cabfactor_orig, cabfactor_iter);
                        var lwovlp = HBioinfo.OverlapWeightedByEigval(camodes_orig, camodes_iter, la, false, "corresponding index");
                        wovlp       = lwovlp.woverlap;
                        sparsityall = lsparsityall;
                        sparsityca  = lsparsityca;
                        ovlps       = new double[]
                        {
                            lwovlp.overlaps[0], lwovlp.overlaps[1], lwovlp.overlaps[2], lwovlp.overlaps[3], lwovlp.overlaps[4],
                            lwovlp.overlaps[5], lwovlp.overlaps[6], lwovlp.overlaps[7], lwovlp.overlaps[8], lwovlp.overlaps[9],
                        };
                        eigvals = new double[]
                        {
                            camodes[0].eigval, camodes[1].eigval, camodes[2].eigval, camodes[3].eigval, camodes[4].eigval,
                            camodes[5].eigval, camodes[6].eigval, camodes[7].eigval, camodes[8].eigval, camodes[9].eigval,
                        };
                    }
                    catch (Exception e)
                    {
                        if (e.Message != "# zero-eigval != 6")
                        {
                            throw;
                        }
                    }

                    return(new Quality
                    {
                        corr = corr,
                        wovlp = wovlp,
                        sparsity_all = sparsityall,
                        sparsity_ca = sparsityca,
                        ovlps = ovlps,
                        eigvals = eigvals,
                    });
                }
Beispiel #6
0
            public static void TestTuLiangDataSet()
            {
                System.Console.WriteLine("pdbid : ANM(TuLiang -> mine), STeM(TuLiang -> mine)");
                foreach (STeM.DataSet data in STeM.TuLiangDataSet)
                {
                    Pdb pdb      = PdbDatabase.GetPdb(data.pdbid);
                    int numChain = pdb.atoms.ListChainID().HListCommonT().Count;
                    HDebug.Assert(numChain == 1);
                    //List<Pdb.Atom> atoms = pdb.atoms.SelectByName("CA");
                    List <Pdb.Atom> atoms = pdb.atoms.SelectByAltLoc().SelectByName("CA");
                    //List<Pdb.Atom> atoms = pdb.atoms.SelectByDefault().SelectByName("CA");
                    List <Vector> coords   = atoms.ListCoord();
                    Vector        bfactors = atoms.ListTempFactor().ToArray();

                    Matrix hessANM = Hess.GetHessAnm(coords, 12);
                    Mode[] modeANM = Hess.GetModesFromHess(hessANM);
                    modeANM = modeANM.SelectExceptSmallSix();
                    Vector bfactorANM = modeANM.GetBFactor().ToArray();
                    double corrANM    = HBioinfo.BFactor.Corr(bfactors, bfactorANM);

                    //Matrix hessGNM = ENM.GnmHessian(coords, 12);
                    //Mode[] modeGNM = Hess.GetModes(hessGNM);
                    //Vector bfactorGNM = modeGNM.GetBFactor().ToArray();
                    //double corrGNM = BFactor.Corr(bfactors, bfactorGNM);

                    HessMatrix hessSTeM = STeM.GetHessCa_matlab(coords);
                    //Matrix hessSTeM = STeM.GetHessCa(coords);
                    Mode[] modeSTeM = Hess.GetModesFromHess(hessSTeM);
                    modeSTeM = modeSTeM.SelectExceptSmallSix();
                    Vector bfactorSTeM = modeSTeM.GetBFactor().ToArray();
                    double corrSTeM    = HBioinfo.BFactor.Corr(bfactors, bfactorSTeM);

                    System.Console.Write(data.pdbid);
                    System.Console.Write(" : ANM({0:0.00}) -> {1:0.0000})", data.ANM, corrANM);
                    System.Console.Write(" : STeM({0:0.00}) -> {1:0.0000})", data.STeM, corrSTeM);
                    System.Console.WriteLine();
                }
                /// Capture of result...
                ///
                /// pdbid : ANM(TuLiang -> mine), STeM(TuLiang -> mine)
                /// 1AAC : ANM(0.70) -> 0.6918) : STeM(0.76) -> 0.7538)
                /// 1ADS : ANM(0.77) -> 0.7807) : STeM(0.71) -> 0.7142)
                /// 1AHC : ANM(0.79) -> 0.7953) : STeM(0.61) -> 0.6117)
                /// 1AKY : ANM(0.56) -> 0.5675) : STeM(0.60) -> 0.6023)
                /// 1AMM : ANM(0.56) -> 0.5951) : STeM(0.55) -> 0.5304)
                #region ...
                /// 1AMP : ANM(0.62) -> 0.5643) : STeM(0.68) -> 0.6739)
                /// 1ARB : ANM(0.78) -> 0.7526) : STeM(0.83) -> 0.8253)
                /// 1ARS : ANM(0.14) -> 0.1343) : STeM(0.41) -> 0.3646)
                /// 1ARU : ANM(0.70) -> 0.7358) : STeM(0.79) -> 0.7921)
                /// 1BKF : ANM(0.52) -> 0.4695) : STeM(0.50) -> 0.4940)
                /// 1BPI : ANM(0.43) -> 0.4225) : STeM(0.57) -> 0.5588)
                /// 1CDG : ANM(0.65) -> 0.6586) : STeM(0.71) -> 0.7068)
                /// 1CEM : ANM(0.51) -> 0.5232) : STeM(0.76) -> 0.6735)
                /// 1CNR : ANM(0.34) -> 0.3445) : STeM(0.42) -> 0.4190)
                /// 1CNV : ANM(0.69) -> 0.6748) : STeM(0.68) -> 0.6775)
                /// 1CPN : ANM(0.51) -> 0.5607) : STeM(0.56) -> 0.5535)
                /// 1CSH : ANM(0.44) -> 0.4257) : STeM(0.57) -> 0.5755)
                /// 1CTJ : ANM(0.47) -> 0.4889) : STeM(0.62) -> 0.6256)
                /// 1CUS : ANM(0.74) -> 0.7416) : STeM(0.76) -> 0.7992)
                /// 1DAD : ANM(0.28) -> 0.3461) : STeM(0.42) -> 0.4155)
                /// 1DDT : ANM(0.21) -> 0.1899) : STeM(0.49) -> 0.4869)
                /// 1EDE : ANM(0.67) -> 0.7044) : STeM(0.75) -> 0.7439)
                /// 1EZM : ANM(0.56) -> 0.5609) : STeM(0.58) -> 0.5842)
                /// 1FNC : ANM(0.29) -> 0.2663) : STeM(0.61) -> 0.6109)
                /// 1FRD : ANM(0.54) -> 0.5933) : STeM(0.77) -> 0.7579)
                /// 1FUS : ANM(0.40) -> 0.3935) : STeM(0.61) -> 0.6084)
                /// 1FXD : ANM(0.58) -> 0.6291) : STeM(0.70) -> 0.6793)
                /// 1GIA : ANM(0.68) -> 0.6655) : STeM(0.69) -> 0.6856)
                /// 1GKY : ANM(0.36) -> 0.3833) : STeM(0.44) -> 0.4257)
                /// 1GOF : ANM(0.75) -> 0.7614) : STeM(0.78) -> 0.7736)
                /// 1GPR : ANM(0.65) -> 0.5689) : STeM(0.66) -> 0.6534)
                /// 1HFC : ANM(0.63) -> 0.6313) : STeM(0.35) -> 0.7303)
                /// 1IAB : ANM(0.36) -> 0.3262) : STeM(0.53) -> 0.5232)
                /// 1IAG : ANM(0.34) -> 0.3464) : STeM(0.44) -> 0.4344)
                /// 1IFC : ANM(0.61) -> 0.5054) : STeM(0.53) -> 0.5395)
                /// 1IGD : ANM(0.18) -> 0.1874) : STeM(0.27) -> 0.2660)
                /// 1IRO : ANM(0.82) -> 0.7949) : STeM(0.85) -> 0.8461)
                /// 1JBC : ANM(0.72) -> 0.7380) : STeM(0.73) -> 0.7326)
                /// 1KNB : ANM(0.63) -> 0.6615) : STeM(0.54) -> 0.5389)
                /// 1LAM : ANM(0.53) -> 0.5324) : STeM(0.71) -> 0.7102)
                /// 1LCT : ANM(0.52) -> 0.5488) : STeM(0.61) -> 0.6115)
                /// 1LIS : ANM(0.16) -> 0.1674) : STeM(0.30) -> 0.2959)
                /// 1LIT : ANM(0.65) -> 0.5715) : STeM(0.76) -> 0.7575)
                /// 1LST : ANM(0.39) -> 0.3860) : STeM(0.73) -> 0.7283)
                /// 1MJC : ANM(0.67) -> 0.6470) : STeM(0.61) -> 0.6164)
                /// 1MLA : ANM(0.59) -> 0.5686) : STeM(0.54) -> 0.5404)
                /// 1MRJ : ANM(0.66) -> 0.6708) : STeM(0.50) -> 0.4923)
                /// 1NAR : ANM(0.62) -> 0.6257) : STeM(0.74) -> 0.7332)
                /// 1NFP : ANM(0.23) -> 0.2561) : STeM(0.41) -> 0.4053)
                /// 1NIF : ANM(0.42) -> 0.4139) : STeM(0.61) -> 0.6112)
                /// 1NPK : ANM(0.53) -> 0.5654) : STeM(0.64) -> 0.5983)
                /// 1OMP : ANM(0.61) -> 0.5857) : STeM(0.65) -> 0.6499)
                /// 1ONC : ANM(0.55) -> 0.5789) : STeM(0.58) -> 0.5736)
                /// 1OSA : ANM(0.36) -> 0.3596) : STeM(0.55) -> 0.5465)
                /// 1OYC : ANM(0.78) -> 0.7708) : STeM(0.77) -> 0.7757)
                /// 1PBE : ANM(0.53) -> 0.5341) : STeM(0.63) -> 0.6290)
                /// 1PDA : ANM(0.60) -> 0.6240) : STeM(0.58) -> 0.5697)
                /// 1PHB : ANM(0.56) -> 0.5919) : STeM(0.59) -> 0.5866)
                /// 1PHP : ANM(0.59) -> 0.5852) : STeM(0.65) -> 0.6470)
                /// 1PII : ANM(0.19) -> 0.2429) : STeM(0.28) -> 0.2871)
                /// 1PLC : ANM(0.41) -> 0.3411) : STeM(0.42) -> 0.4239)
                /// 1POA : ANM(0.54) -> 0.5944) : STeM(0.42) -> 0.4290)
                /// 1POC : ANM(0.46) -> 0.4341) : STeM(0.39) -> 0.3878)
                /// 1PPN : ANM(0.61) -> 0.5655) : STeM(0.67) -> 0.6757)
                /// 1PTF : ANM(0.47) -> 0.4669) : STeM(0.54) -> 0.5349)
                /// 1PTX : ANM(0.65) -> 0.5949) : STeM(0.62) -> 0.6167)
                /// 1RA9 : ANM(0.48) -> 0.5029) : STeM(0.53) -> 0.5267)
                /// 1RCF : ANM(0.59) -> 0.5629) : STeM(0.58) -> 0.5937)
                /// 1REC : ANM(0.34) -> 0.3352) : STeM(0.49) -> 0.4884)
                /// 1RIE : ANM(0.71) -> 0.7440) : STeM(0.52) -> 0.6806)
                /// 1RIS : ANM(0.25) -> 0.2199) : STeM(0.47) -> 0.4779)
                /// 1RRO : ANM(0.08) -> 0.1192) : STeM(0.36) -> 0.3266)
                /// 1SBP : ANM(0.69) -> 0.6955) : STeM(0.67) -> 0.6668)
                /// 1SMD : ANM(0.50) -> 0.5193) : STeM(0.67) -> 0.6713)
                /// 1SNC : ANM(0.68) -> 0.6860) : STeM(0.72) -> 0.7275)
                /// 1THG : ANM(0.50) -> 0.4982) : STeM(0.50) -> 0.4934)
                /// 1TML : ANM(0.64) -> 0.6266) : STeM(0.58) -> 0.5728)
                /// 1UBI : ANM(0.56) -> 0.5610) : STeM(0.61) -> 0.6235)
                /// 1WHI : ANM(0.12) -> 0.1223) : STeM(0.38) -> 0.3713)
                /// 1XIC : ANM(0.29) -> 0.2942) : STeM(0.47) -> 0.4624)
                /// 2AYH : ANM(0.63) -> 0.6453) : STeM(0.82) -> 0.8157)
                /// 2CBA : ANM(0.67) -> 0.6562) : STeM(0.80) -> 0.8054)
                /// 2CMD : ANM(0.68) -> 0.6630) : STeM(0.62) -> 0.6106)
                /// 2CPL : ANM(0.61) -> 0.6379) : STeM(0.72) -> 0.7131)
                /// 2CTC : ANM(0.63) -> 0.6220) : STeM(0.75) -> 0.7495)
                /// 2CY3 : ANM(0.51) -> 0.5150) : STeM(0.67) -> 0.6614)
                /// 2END : ANM(0.63) -> 0.6307) : STeM(0.68) -> 0.6841)
                /// 2ERL : ANM(0.74) -> 0.7400) : STeM(0.85) -> 0.8445)
                /// 2HFT : ANM(0.63) -> 0.5503) : STeM(0.72) -> 0.7228)
                /// 2IHL : ANM(0.62) -> 0.6632) : STeM(0.72) -> 0.7083)
                /// 2MCM : ANM(0.78) -> 0.7774) : STeM(0.79) -> 0.7886)
                /// 2MHR : ANM(0.65) -> 0.6117) : STeM(0.64) -> 0.6341)
                /// 2MNR : ANM(0.46) -> 0.4762) : STeM(0.47) -> 0.4688)
                /// 2PHY : ANM(0.54) -> 0.5160) : STeM(0.68) -> 0.6831)
                /// 2RAN : ANM(0.43) -> 0.4072) : STeM(0.31) -> 0.3138)
                /// 2RHE : ANM(0.28) -> 0.2074) : STeM(0.33) -> 0.3317)
                /// 2RN2 : ANM(0.68) -> 0.6555) : STeM(0.75) -> 0.7478)
                /// 2SIL : ANM(0.43) -> 0.4203) : STeM(0.51) -> 0.5127)
                /// 2TGI : ANM(0.69) -> 0.6787) : STeM(0.73) -> 0.7391)
                /// 3CHY : ANM(0.61) -> 0.5572) : STeM(0.68) -> 0.6885)
                /// 3COX : ANM(0.71) -> 0.6925) : STeM(0.72) -> 0.7179)
                /// 3EBX : ANM(0.22) -> 0.1913) : STeM(0.40) -> 0.3871)
                /// 3GRS : ANM(0.44) -> 0.4431) : STeM(0.59) -> 0.5910)
                /// 3LZM : ANM(0.60) -> 0.5867) : STeM(0.66) -> 0.6567)
                /// 3PTE : ANM(0.68) -> 0.6788) : STeM(0.77) -> 0.7688)
                /// 4FGF : ANM(0.41) -> 0.3695) : STeM(0.43) -> 0.4166)
                /// 4GCR : ANM(0.73) -> 0.7077) : STeM(0.75) -> 0.7258)
                /// 4MT2 : ANM(0.42) -> 0.3117) : STeM(0.46) -> 0.4547)
                /// 5P21 : ANM(0.40) -> 0.3540) : STeM(0.45) -> 0.4521)
                /// 7RSA : ANM(0.42) -> 0.4663) : STeM(0.59) -> 0.5938)
                /// 8ABP : ANM(0.61) -> 0.6265) : STeM(0.62) -> 0.6182)
                #endregion
            }