I have the following code:
def grab(resi):
s1 = f"resi {resi} & name P"
s2 = f"resi {resi} & name C4'"
s3 = f"resi {int(resi) + 1} & name P"
s4 = f"resi {int(resi) +1 } & name C4'"
try:
dih = round(cmd.get_dihedral(s1,s2,s3,s4),2)
except:
dih = None
return s1,s2,s3,s4,dih
myspace = {"grab": grab}
cmd.iterate("(name P)","grab(resi)",space=myspace)
This function basically grab some specific atoms and returns the dihaedral tuple. And that's exacly what I want.
The code return the following:
('resi 2 & name P',
"resi 2 & name C4'",
'resi 3 & name P',
"resi 3 & name C4'",
172.29)
('resi 3 & name P',
"resi 3 & name C4'",
'resi 4 & name P',
"resi 4 & name C4'",
-139.65)
...
So, the code just print me the returned content of the function, I'd like to add this to a variable so that I can manipulate it.
In other words, I want a list of tuple connected to a variable:
my_final_list
> [('resi 2 & name P',
"resi 2 & name C4'",
'resi 3 & name P',
"resi 3 & name C4'",
172.29),('resi 3 & name P',
"resi 3 & name C4'",
'resi 4 & name P',
"resi 4 & name C4'",
-139.65) ..]
Probably its easier than I think but I just can't arrive to the solution.
I wasn't able to figure out what
myspace
represent in this bit of your code, hope somebody could shed light on this.Nevertheless, I tried to figure out a running script that could be an answer to your question:
input file :
1bna.pdb
only single strand (Chain A):a DNA or something similar carryng both P and C4 atoms:
my code:
output from [
stored.grabbed
( a list)]:tried using
space
incmd.iterate
to avoidfrom pymol import stored
, this works too:I am pretty sure that applying your
dihedral_res
to my input selectingname P
isn't what you where trying to accomplish , but without a proper input I focused on the algorithm.