I’m trying to extract the exact coordinates for an atom in specific residues in a PDB file.
The idea is to use a function that finds the coordinates of all oxygens of the cysteines in a file, find the nitrogen coordinates on the histidines in the same file, and calculate the distances between them.
import sys import os os.getcwd() filename = sys.argv def cys_ox_coord_extr(): with open(filename, "r") as fileobj: content = fileobj.readlines() print("Cysteine's oxygen coordinates\n") for line in content: if line.startswith("ATOM"): if str(line.split()) == "CYS" and str(line.split()) == "O": cys_ox = [line.split(), [line.split(), line.split(), line.split()]] print(cys_ox)
The function works fine, and I can get the coordinates for this atom type, however, I can’t use these results elsewhere.
I can’t recall "cys_ox" anywhere outside the function itself, even using `return cys_ox.
Yet, if I print it, the results come out fine.
My goal is to get the coordinates for another atom type in another residue and compute the distances, but it is impossible if I can’t use the results outside the function which generates them.
What can I do?
as Giacomo suggested,
define a list outside the function, and append cys_ox to the list. So the list has global scope and you can access outside the function. Else you should define global cys_ox at start of function, so python know that such variable should have global scope (and not the default function scope), but you may have many cys_ox, so a list is better. –
Answered By – Ludovico Pipitò
Answer Checked By – Robin (BugsFixing Admin)