public static void WriteCgoObject (string pypath , string objname , CgoElements cgoelems ) { List <string> lines = new List <string>(); lines.Add("obj = ["); foreach (var cgoline in cgoelems.lines) { lines.Add(" " + cgoline); } lines.Add("]"); lines.Add("cmd.load_cgo(obj,\"" + objname + "\")"); HFile.AppendAllLines(pypath, lines); }
public static void WriteResult(string pdbid, List <Pdb.Atom>[] ensemble, List <Trans3[]> trajtrans, string pathroot) { List <Pdb.Atom> atoms = ensemble[0]; int size = ensemble[0].Count; double bfactor0_min = double.PositiveInfinity; double bfactor0_max = double.NegativeInfinity; double anisou_eigvalthres = 0.00001 * 0.00001; { Trans3[] trans = trajtrans.First(); List <Vector>[] lensemble = new List <Vector> [ensemble.Length]; for (int i = 0; i < ensemble.Length; i++) { lensemble[i] = new List <Vector>(trans[i].GetTransformed(ensemble[i].ListCoord())); } Vector[] coords = new Vector[size]; Anisou[] anisous = new Anisou[size]; double[] bfactors = new double[size]; DetermineMeanConf(lensemble, coords); DetermineThrmlFluc(lensemble, coords, anisous, bfactors, anisou_eigvalthres); List <double>[] bfactorss = new List <double> [ensemble.Length]; for (int i = 0; i < bfactorss.Length; i++) { bfactorss[i] = new List <double>(bfactors); } List <int> idxCa = atoms.IndexOfAtoms(atoms.SelectByName("CA")); bfactor0_min = bfactors.HSelectByIndex(idxCa).HMinNth(idxCa.Count / 10); bfactor0_max = bfactors.HSelectByIndex(idxCa).HMaxNth(idxCa.Count / 10); Pdb.ToFile(pathroot + "ensemble.000.pdb", atoms, lensemble, bfactorss); Pdb.ToFile(pathroot + "ensemble.000.anisou.1.pdb", atoms, coords, anisous: anisous.GetUs(1), bfactors: bfactors, append: false); Pdb.ToFile(pathroot + "ensemble.000.anisou.10.pdb", atoms, coords, anisous: anisous.GetUs(10), bfactors: bfactors, append: false); Pdb.ToFile(pathroot + "ensemble.000.anisou.100.pdb", atoms, coords, anisous: anisous.GetUs(100), bfactors: bfactors, append: false); Pdb.ToFile(pathroot + "ensemble.000.anisou.1000.pdb", atoms, coords, anisous: anisous.GetUs(1000), bfactors: bfactors, append: false); Pdb.ToFile(pathroot + "ensemble.000.anisou.10000.pdb", atoms, coords, anisous: anisous.GetUs(10000), bfactors: bfactors, append: false); } int iter = trajtrans.Count - 1; double bfactorn_min = double.PositiveInfinity; double bfactorn_max = double.NegativeInfinity; { Trans3[] trans = new Trans3[ensemble.Length]; for (int j = 0; j < trans.Length; j++) { trans[j] = Trans3.UnitTrans; } for (int i = 0; i < trajtrans.Count; i++) { for (int j = 0; j < trans.Length; j++) { trans[j] = Trans3.AppendTrans(trans[j], trajtrans[i][j]); } } List <Vector>[] lensemble = new List <Vector> [ensemble.Length]; for (int i = 0; i < ensemble.Length; i++) { lensemble[i] = new List <Vector>(trans[i].GetTransformed(ensemble[i].ListCoord())); } Vector[] coords = new Vector[size]; Anisou[] anisous = new Anisou[size]; double[] bfactors = new double[size]; DetermineMeanConf(lensemble, coords); DetermineThrmlFluc(lensemble, coords, anisous, bfactors, anisou_eigvalthres); List <double>[] bfactorss = new List <double> [ensemble.Length]; for (int i = 0; i < bfactorss.Length; i++) { bfactorss[i] = new List <double>(bfactors); } List <int> idxCa = atoms.IndexOfAtoms(atoms.SelectByName("CA")); bfactorn_min = bfactors.HSelectByIndex(idxCa).HMinNth(idxCa.Count / 10); bfactorn_max = bfactors.HSelectByIndex(idxCa).HMaxNth(idxCa.Count / 10); Pdb.ToFile((pathroot + "ensemble.{finl}.pdb").Replace("{finl}", iter.ToString("000")), atoms, lensemble, bfactorss); Pdb.ToFile((pathroot + "ensemble.{finl}.anisou.1.pdb").Replace("{finl}", iter.ToString("000")), atoms, coords, anisous: anisous.GetUs(1), bfactors: bfactors, append: false); Pdb.ToFile((pathroot + "ensemble.{finl}.anisou.10.pdb").Replace("{finl}", iter.ToString("000")), atoms, coords, anisous: anisous.GetUs(10), bfactors: bfactors, append: false); Pdb.ToFile((pathroot + "ensemble.{finl}.anisou.100.pdb").Replace("{finl}", iter.ToString("000")), atoms, coords, anisous: anisous.GetUs(100), bfactors: bfactors, append: false); Pdb.ToFile((pathroot + "ensemble.{finl}.anisou.1000.pdb").Replace("{finl}", iter.ToString("000")), atoms, coords, anisous: anisous.GetUs(1000), bfactors: bfactors, append: false); Pdb.ToFile((pathroot + "ensemble.{finl}.anisou.10000.pdb").Replace("{finl}", iter.ToString("000")), atoms, coords, anisous: anisous.GetUs(10000), bfactors: bfactors, append: false); } { string[] lines = new string[] { @"load ensemble.{init}.pdb, {init}.align" , @"load ensemble.{init}.anisou.10.pdb, {init}.anisou.10" , @"load ensemble.{init}.anisou.100.pdb, {init}.anisou.100" , @"load ensemble.{init}.anisou.1000.pdb, {init}.anisou.1000" , @"load ensemble.{init}.anisou.10000.pdb, {init}.anisou.10000" , @"load ensemble.{finl}.pdb, {finl}.align" , @"load ensemble.{finl}.anisou.10.pdb, {finl}.anisou.10" , @"load ensemble.{finl}.anisou.100.pdb, {finl}.anisou.100" , @"load ensemble.{finl}.anisou.1000.pdb, {finl}.anisou.1000" , @"load ensemble.{finl}.anisou.10000.pdb, {finl}.anisou.10000" , @"load ..\theseus\{pdbid}_theseus_sup.pdb, theseus" , @"align theseus, {finl}.align" , @"orient {finl}.align" , @"zoom {finl}.align" , @"" , @"select sele, name ca and ({init}.anisou.* or {finl}.anisou.*)" , @"hide everything" , @"show ellipsoids, sele" , @"delete sele" , @"" , @"cartoon loop" , @"set cartoon_loop_radius, 0.1" , @"set all_states" , @"show cartoon, {init}.align or {finl}.align" , @"show cartoon, theseus" , @"disable all" , @"" , @"spectrum b, rainbow, minimum={bfactor-min}, maximum={bfactor-max}" , @"spectrum b, rainbow, minimum=0, maximum=50" , @"show line" , @"enable {init}.align; png ..\{pdbid}-{init}-line.png; disable {init}.align;" , @"enable {finl}.align; png ..\{pdbid}-{finl}-line.png; disable {finl}.align;" , @"hide line" , @"enable {init}.align; png ..\{pdbid}-{init}.png; disable {init}.align;" , @"enable {finl}.align; png ..\{pdbid}-{finl}.png; disable {finl}.align;" , @"enable theseus; png ..\{pdbid}-theseus.png; disable theseus;" , @"enable {init}.align" , @"enable {finl}.align" , @"enable theseus" }; lines = lines.HReplace("{init}", "000"); lines = lines.HReplace("{finl}", iter.ToString("000")); lines = lines.HReplace("{pdbid}", pdbid); lines = lines.HReplace("{bfactor-min}", bfactorn_min.ToString()); lines = lines.HReplace("{bfactor-max}", bfactorn_max.ToString()); string pmlpath = pathroot + "align.pml"; HFile.WriteAllLines(pmlpath, lines); { HFile.AppendAllLines(pmlpath, "quit"); string curdirectory = System.Environment.CurrentDirectory; string pmldirectory = pmlpath.Substring(0, pmlpath.LastIndexOf('\\') + 1); System.Environment.CurrentDirectory = pmldirectory; System.Diagnostics.ProcessStartInfo pymolStartInfo = new System.Diagnostics.ProcessStartInfo(@"C:\Program Files (x86)\PyMOL\PyMOL\PymolWin.exe ", "\"" + pmlpath + "\""); pymolStartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Minimized; System.Diagnostics.Process pymol = System.Diagnostics.Process.Start(pymolStartInfo); //pymol.win pymol.WaitForExit(); System.Environment.CurrentDirectory = curdirectory; HFile.WriteAllLines(pmlpath, lines); } { List <string> lines_notheseus = new List <string>(); for (int i = 0; i < lines.Length; i++) { if (lines[i].Contains("theseus") == false) { lines_notheseus.Add(lines[i]); } } HFile.WriteAllLines(pathroot + "align.notheseus.pml", lines); } } }