Seite 1 von 1

Problem mit cmd.translate in PyMol/Python

Verfasst: Freitag 4. April 2008, 14:48
von bionerd
Hallole,

Ich habe ein Problem das mir schon eine Weile Kopfzerbrechen bereitet, wahrscheinlich weil ich kein Programmierer bin sondern Biologe und mich gerade ohne Grundlagen mühselig in Python einarbeiten muß. Wahrscheinlich ist es sehr einfach und ihr könnt mir weiterhelfen...

Ich muß für PyMOL ein Python script erstellen, das mir Objekte in Pymol bewegt und das klappt auch eigentlich alles recht gut und sieht in etwa so aus:

Code: Alles auswählen

#!/usr/bin/python
# n=number of molecules 
# d=distance between molecules 
# Name of object in PyMOL needs to be changed to "obj00"

n=87

i=1
while i<n:
	cmd.create(None,"obj00")
	i = i+1

if n<=8:
	cmd.translate (vector='[10,0,0]',object='obj01')

usw.
Mein Problem ist, dass der Zahlenwert 10 im Vector='[10,0,0]' variabel sein muß, aber wenn ich eine Variable deklariere, dann bekomme ich die Fehlermeldung, dass der X-Wert in diesem Fall, kein String sein darf.

Falls mir jemand mit dem Problem helfen könnte wäre ich sehr dankbar. Ich habe schon einiges versucht und weiß nicht mehr wo ich noch nach Antworten suchen könnte.

Gruß
Sven

Verfasst: Freitag 4. April 2008, 15:07
von Masaru
Hallo auch,

mhm, vielleicht hilft das hier:

Code: Alles auswählen

...
if n<=8:
    value = 10 # <-- hier ist beispielsweise jetzt der Zahlenwert einmal definiert
    cmd.translate(
        vector='[%s,0,0]' % value, # <--- und hier ist der Trick mit dem variablen Einsetzen
        object='obj01')
...
... hier könntest du die Variable "value" dann immer so befüllen, wie du möchtest, an vorheriger Stelle inparsen, iterieren, was auch immer dir so in den Sinn kommt.

Ist es das, was du möchtest?

>>Masaru<<

Verfasst: Freitag 4. April 2008, 15:27
von bionerd
Klasse, herzlichen dank! Das ist genau das was ich gesucht habe. Kannst du mir denn dazu noch ein paar Schlagworte geben, damit ich nachlesen kann?

Sobald ich zwei Koordinaten mit der gleichen Methode belegen will klappt es wieder nicht... :oops:

Code: Alles auswählen

#!/usr/bin/python
# n=number of molecules 
# d=distance between molecules 
# Name of object in PyMOL needs to be changed to "obj00"

n=7

i=1
while i<n:
	cmd.create(None,"obj00")
	i = i+1

if n<=8:
	value=10
	cmd.translate (vector='[%s,0,0]' %value,object='obj01')
	cmd.translate (vector='[0,%s,0]' %value,object='obj02')
	cmd.translate (vector='[%s,%s,0]' %value,object='obj03')
	cmd.translate (vector='[0,0,%s]' %value,object='obj04')
	cmd.translate (vector='[%s,0,%s]' %value,object='obj05')
	cmd.translate (vector='[0,%s,%s]' %value,object='obj06')
	cmd.translate (vector='[%s,%s,%s]' %value,object='obj07')

Verfasst: Freitag 4. April 2008, 15:31
von Masaru
Bei zwei oder mehrere Variablen, musst du diese in einem Tupel hinter das %-Zeichen schreiben.

Z.b: so:

Code: Alles auswählen

cmd.translate(vector='[0,%s,%s]' % (value, value), object='obj06')
.. im Beispiel habe ich in das Tuple die Variable 'value' einfach 2x hintereinander gesetzt ... du könntest aber auch eine andere Variable wie z.B. value2 oder so definienieren, die dann den gleichen oder einen anderen Wert als value selber hat.

Achja ... und bei drei %s Platzhaltern natürlich 3x Variablen in das Tupel setzen, etc. pp.

Edit:
Das ganze nennt man übrigends String Formatierung (<-- der Link zur Doku diesbezüglich)

>>Masaru<<

Verfasst: Freitag 4. April 2008, 15:42
von bionerd
Super - leider kann ich dir keinen ausgeben 8)