Cześć mam pytanie, czy ja to zrobiłem dobrze. Używam programu pymol do budowy obiektów molekularnych, korzysta on z cmd, ale mniejsza z tym. Zrobiłem trzy skrypty:
copy - kopiujący cząsteczki
rotate - rotujący cząsteczki o losowy kąt
translate - przesuwający cząsteczki o wektor
każdy po kolei osobno działa i uruchamiam je w takiej kolejności copy- żebym miał odpowiednią ilość cząsteczek, rotate - żebym każda była zrotowana o losowy kąt, translate - żeby każdą kolejną cząsteczkę przesuwać, tak żeby wyszła mi warstwa jak w błonie komórkowej. Oto każdy ckrypt z osobna:
copy.py
from pymol import cmd
def copy_molecule(l):
s = range(l)
for x in s:
cmd.copy("dopc%s" % x, "dopc")
cmd.extend("copy_molecule", copy_molecule);
rotate.py
from pymol import cmd
import random
def rotate_molecule(l):
s = range(l)
for x in s:
angle = random.randint(0, 360)
cmd.rotate([0, 0, 1], angle, "dopc%s" %x, 0, 1, None, "dopc2")
cmd.extend("rotate_molecule", rotate_molecule);
translate.py
from pymol import cmd
def translate_molecule(q):
#q - odległość częsteczek od siebie
a = [0, 0, 0]
liczba = 0
while a[0] <= 7*q:
while a[1] < 7*q:
a[1] += q
liczba += 1
cmd.translate(a, "dopc%s" %liczba)
print(a)
if a[0] <= 7*q:
if a[1] == 7*q and a[0] == 7*q:
break
a[1] = 0
a[0] += q
liczba += 1
cmd.translate(a, "dopc%s" % liczba)
print(a)
cmd.extend("translate_molecule", translate_molecule);
Ale jak chciałem to wszystko połączyć w całość to nie wyszło i mam cały czas napisane "Executive-Error: object not found." Tak jakby nie skopiowało tego
Oto skrypt w scalony:
from pymol import cmd
import random
#l - liczba cząsteczek, które chcemy mieć w warstwie, q - odległość pomiędzy cząsteczkami
def layer_build(l, q):
s = range(l)
for x in s:
cmd.copy("dopc%s" % x, "dopc")
s = range(l)
for x in s:
angle = random.randint(0, 360)
cmd.rotate([0, 0, 1], angle, "dopc%s" % x, 0, 1, None, "dopc%s" % x)
a = [0, 0, 0]
liczba = 0
while a[0] <= 7*q:
while a[1] < 7*q:
a[1] += q
liczba += 1
cmd.translate(a, "dopc%s" %liczba)
print(a)
if a[0] <= 7*q:
if a[1] == 7*q and a[0] == 7*q:
break
a[1] = 0
a[0] += q
liczba += 1
cmd.translate(a, "dopc%s" % liczba)
print(a)
cmd.extend("layer_build", layer_build);
Aha i pymol obsł↓guje tylko pythona 2 i tak się w nim tworzy skrypty https://pymolwiki.org/index.php/Simple_Scripting