public static void GetBFactor(string topolpath, string eigenvecpath, out string[] name, out int[] resSeq, out double[] BFactor , bool ignoreNegativeEigval = true ) { Top topol = Top.FromFile(topolpath); Eigenvec eigenvec = Eigenvec.FromFile(eigenvecpath); GetBFactor(topol, eigenvec, out name, out resSeq, out BFactor, ignoreNegativeEigval); }
public static void SelfTest(string rootpath, string[] args) { if (selftest == false) { return; } selftest = false; string filepath = rootpath + @"\Bioinfo\External.Gromacs\Selftest\eigenvec.txt"; Eigenvec eigvec = FromFile(filepath); }
public static Eigenvec FromFile(string filepath) { List <List <string> > frameliness; { string[] lines = HFile.ReadAllLines(filepath); frameliness = GroupByFrames(lines); } Eigenvec eigvec = new Eigenvec(); eigvec.frames = new List <Frame>(); foreach (List <string> framelines in frameliness) { Frame frame = Frame.FromLines(framelines.ToArray()); eigvec.frames.Add(frame); } return(eigvec); }
public static void GetBFactor(Top topol, Eigenvec eigenvec, out string[] name, out int[] resSeq, out double[] BFactor , bool ignoreNegativeEigval = true ) { List <Gromacs.Top.Atom> atoms = topol.GetAtoms(); name = new string[atoms.Count]; resSeq = new int[atoms.Count]; BFactor = new double[atoms.Count]; for (int i = 0; i < atoms.Count; i++) { name[i] = atoms[i].atom; resSeq[i] = atoms[i].resnr; int count_lambda_0 = 0; foreach (var frame in eigenvec.frames) { if (frame.lambda != 0) { continue; } if (frame.step <= 6) { HDebug.Assert(frame.step == frame.frameidx); continue; } count_lambda_0++; Vector[] eigvec = frame.x; double eigval = frame.time; HDebug.AssertIf(eigval < 0, Math.Abs(eigval) < 0.00001); if (ignoreNegativeEigval) { if (eigval < 0) { continue; } } HDebug.Assert(BFactor.Length == eigvec.Length); BFactor[i] += LinAlg.VtV(eigvec[i], eigvec[i]) / eigval; } } }