Problem mit cmd.translate in PyMol/Python

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
bionerd
User
Beiträge: 3
Registriert: Freitag 4. April 2008, 14:33

Freitag 4. April 2008, 14:48

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
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Freitag 4. April 2008, 15:07

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<<
bionerd
User
Beiträge: 3
Registriert: Freitag 4. April 2008, 14:33

Freitag 4. April 2008, 15:27

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')
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Freitag 4. April 2008, 15:31

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<<
bionerd
User
Beiträge: 3
Registriert: Freitag 4. April 2008, 14:33

Freitag 4. April 2008, 15:42

Super - leider kann ich dir keinen ausgeben 8)
Antworten