Coor class
- class pdb_manip_py.pdb_manip.Coor(coor_in=None, pdb_lines=None)
Topologie base on coordinates like pdb or gro.
The coor object containt a dictionnary of atoms indexed on the atom num and the crystal packing info.
- Parameters
atom_dict (dict) – dictionnary of atom
crystal_pack (str) – crystal packing
Atom dictionnary parameters
- Parameters
field (str) – pdb field
num (int) – atom number
name (str) – atom name
alter_loc (str) – atom number
res_name (str) – residue name (3 letters)
chain (str) – chain ID
res_num (int) – residue number (based on pdb file)
uniq_resid (int) – unique residue number
insert_res (str) – atom number
xyz – coordinate
occ (float) – occupation
beta (float) – beta flactor
Note
The atom num index in the dictionnary, is not the same as the
atom_num
field of the dictionnary.Note
Files necessary for testing : ../test/input/1y0m.pdb, ../test/input/1rxz.pdb and ../test/input/4n1m.pdb. To do the unitary test, execute pdb_mani.py (-v for verbose mode)
Todo
Add an atom class ?
- add_zinc_finger(ZN_pdb, cutoff=3.2)
Change protonation state of cysteins and histidine coordinating Zinc atoms. To do after correct_his_name and correct_cys_name, in order that protonation is recognize by pdb2gmx.
- Example
>>> try: ... print("Start import") ... from . import pdb2pqr ... except ImportError: ... import pdb2pqr Start import... >>> TEST_OUT = str(getfixture('tmpdir')) >>> show_log() >>> # Read the pdb 1jd4 and keep only chain A >>> input_pdb = Coor(os.path.join(TEST_PATH, '1jd4.pdb')) Succeed to read file ...1jd4.pdb , 1586 atoms found >>> chain_A = input_pdb.select_part_dict(selec_dict={'chain': ['A']}) >>> chain_A.write_pdb(os.path.join(TEST_OUT, '1jd4_A.pdb')) Succeed to save file ...1jd4_A.pdb >>> >>> # Compute protonation with pdb2pqr: >>> pdb2pqr.compute_pdb2pqr(os.path.join(TEST_OUT, '1jd4_A.pdb'),os.path.join(TEST_OUT, '1jd4.pqr')) Succeed to read file ...1jd4_A.pdb , 793 atoms found Succeed to save file ...tmp_pdb2pqr.pdb pdb2pqr30... --ff CHARMM --ffout CHARMM --keep-chain --titration-state-method=propka --with-ph=7.00...tmp_pdb2pqr.pdb ...1jd4.pqr 0 >>> prot_coor = Coor(os.path.join(TEST_OUT, '1jd4.pqr')) Succeed to read file ...1jd4.pqr , 1549 atoms found >>> prot_coor.correct_cys_name() <...Coor object at 0x... >>> prot_coor.correct_his_name() <...Coor object at 0x... >>> prot_coor.correct_chain() Chain: A Residue: 0 to 95 <...Coor object at 0x... >>> ZN_index = prot_coor.get_index_selection({'name': ['ZN']}) >>> print(len(ZN_index)) 0 >>> prot_coor.add_zinc_finger(os.path.join(TEST_OUT, '1jd4_A.pdb')) Succeed to read file ...1jd4_A.pdb , 793 atoms found Presence of 1 Zinc detected change cystein residue(s) : [48, 51, 75] change histidine residue(s) : [68] True >>> ZN_index = prot_coor.get_index_selection({'name': ['ZN']}) >>> print(len(ZN_index)) 1
Note
This function seems useless. Since last version of pdb2pqr residue name seems correct.
- align_principal_axis(axis=2, vector=[0, 0, 1], selec_dict={})
Align principal axis with index axis with vector.
Taken from: https://github.com/MDAnalysis/mdanalysis/blob/develop/package/MDAnalysis/core/topologyattrs.py
- Parameters
axis (int (Default 2)) – principal axis to align (0, 1, or 2)
vector (list (Default z axis)) – vector to align
selec_dict (dict, default={'name': ['CA']}) – selection dictionnary
- Example
>>> show_log() >>> prot_coor = Coor(os.path.join(TEST_PATH, '1y0m.pdb')) Succeed to read file ...1y0m.pdb , 648 atoms found >>> prot_coor.align_principal_axis() Do a rotation of 66.43° >>> prot_coor.align_principal_axis() Do a rotation of 0.00°
- static align_seq(seq_1, seq_2, gap_cost=-8, gap_extension=-2)
Align two amino acid sequences using the Waterman - Smith Algorithm.
- Parameters
seq_1 (str) – amino acid sequence 1
seq_2 (str) – amino acid sequence 2
gap_cost (int (Default -8)) – Gap cost
gap_extension (int (Default -2)) – Gap extension cost
- Returns
the two aligned sequences
- Return type
str, str
- Example
>>> seq_1 = 'AQDMVSPPPPIADEPLTVNTGIYLIECYSLDDKAETFKVNAFLSLSWKDRRLAFDPVRSGVRVKTYEPEAIWIPEIRFVNVENARDADVVDISVSPDGTVQYLERFSARVLSPLDFRRYPFDSQTLHIYLIVRSVDTRNIVLAVDLEKVGKNDDVFLTGWDIESFTAVVKPANFALEDRLESKLDYQLRISRQYFSYIPNIILPMLFILFISWTAFWSTSYEANVTLVVSTLIAHIAFNILVETNLPKTPYMTYTGAIIFMIYLFYFVAVIEVTVQHYLKVESQPARAASITRASRIAFPVVFLLANIILAFLFFGF' >>> seq_2 = 'APSEFLDKLMGKVSGYDARIRPNFKGPPVNVTCNIFINSFGSIAETTMDYRVNIFLRQQWNDPRLAYSEYPDDSLDLDPSMLDSIWKPDLFFANEKGANFHEVTTDNKLLRISKNGNVLYSIRITLVLACPMDLKNFPMDVQTCIMQLESFGYTMNDLIFEWDEKGAVQVADGLTLPQFILKEEKDLRYCTKHYNTGKFTCIEARFHLERQMGYYLIQMYIPSLLIVILSWVSFWINMDAAPARVGLGITTVLTMTTQSSGSRASLPKVSYVKAIDIWMAVCLLFVFSALLEYAAVNFIARAGTKLFISRAKRIDTVSRVAFPLVFLIFNIFYWITYKLVPR' >>> align_seq_1, align_seq_2 = Coor.align_seq(seq_1, seq_2) >>> Coor.print_align_seq(align_seq_1, align_seq_2) -------------AQDMVSPPPPIADEPLTVNTGIYLIECYSLDDKAETFKVNAFLSLSWKDRRLAFDPVRS-GVRVKTY | | * | *||*| |*|| | *| | | ||** ** |*|* ***|| | || | APSEFLDKLMGKVSGYDARIRPNFKGPPVNVTCNIFINSFGSIAETTMDYRVNIFLRQQWNDPRLAYSEYPDDSLDLDPS EPEAIWIPEIRFVNVENARDADVV----DISVSPDGTVQYLERFSARVLSPLDFRRYPFDSQTLHIYLIVRSVDTRNIVL ||** *|| *|* ||*| |*| | |* |*|* * *|| | *|*||||*|* ** | * | ||||| MLDSIWKPDLFFANEKGANFHEVTTDNKLLRISKNGNVLYSIRITLVLACPMDLKNFPMDVQTCIMQLESFGYTMNDLIF AVDLEKVGKNDDVFLTGWDIESFTAVV-KPANFALEDRLESK---LDYQLRISRQYFSYIPNIILPMLFILFISWTAFW- * ** * | * | |* * ||| | |* || |||||** *| || |* *|*|||**||** EWD-EK-GAVQ--VADGLTLPQFILKEEKDLRYCTKHYNTGKFTCIEARFHLERQMGYYLIQMYIPSLLIVILSWVSFWI -STSYEANVTLVVSTLIAHIAFNILVETNLPKTPYMTYTGAIIFMIYLFYFVAVIEVTVQHYL-KVESQP--ARAASITR | *|* * ||*||| | | |||***| *| | | ** * *||* || ||| || || |** * NMDAAPARVGLGITTVLTMTTQSSGSRASLPKVSYVKAIDIWMAVCLLFVFSALLEYAAVNFIARAGTKLFISRAKRIDT ASRIAFPVVFLLANIILAFLFFGF----- |**|***|***| ** * || | VSRVAFPLVFLIFNI---FYWITYKLVPR
- align_seq_coor_to(atom_sel_2, chain_1=['A'], chain_2=['A'], back_names=['CA'], align=True, rmsd_flag=True, tmscore_flag=False)
Align 2 strucures, using a sequence alignement to determine which residue to align. Compute RMSD between two atom_dict Then return the RMSD value.
- Parameters
atom_sel_2 (dict) – atom dictionnary
chain_1 (list) – list of chain
chain_2 (list) – list of chain
- Returns
rmsd and alignement index
- Return type
float and list
- Example
>>> prot_1_coor = Coor(os.path.join(TEST_PATH, '1jd4.pdb')) Succeed to read file ...1jd4.pdb , 1586 atoms found >>> prot_2_coor = Coor(os.path.join(TEST_PATH, '1dpx.pdb')) Succeed to read file ...1dpx.pdb , 1192 atoms found >>> rmsd, align_sel = prot_1_coor.align_seq_coor_to(prot_2_coor) ------NYFPQYPEYAIETARLRTFEAWPRNLKQKPHQLAEAGFFYTGVGDRVRCFSCGGGLMDW-NDNDEPWEQHALWL | |||||| * || * * || || || | | * **| * ||| * KVFGRCELAAAMKRHGLDNYRGYSLGNW--VCAAKFESNFNTQATNRNTDGSTDYGILQINSRWWCNDGRTPGSRN-LCN SQCRFVKLMKGQLYIDTVAAKPV------------------------------- * *||||| || |** | IPCS--ALLSSDITASVNCAKKIVSDGNGMNAWVAWRNRCKGTDVQAWIRGCRL >>> print('RMSD = {:.2f} Å'.format(rmsd)) RMSD = 12.63 Å
- align_to(atom_sel_2, selec_dict={'name': ['CA']}, index_list=None, rot_kabsch=True)
Align structure to an Coor object.
- Parameters
atom_sel_1 (dict) – atom dictionnary
atom_sel_2 (dict) – atom dictionnary
selec_dict (dict, default={'name': ['CA']}) – selection dictionnary
rot_kabsch (bool, default=True) – method for rotation kabsh, if not quaternion
- Example
>>> prot_coor = Coor(os.path.join(TEST_PATH, '1jd4.pdb')) Succeed to read file ...1jd4.pdb , 1586 atoms found >>> chain_A = prot_coor.select_part_dict(selec_dict={'chain': ['A']}) >>> chain_B = prot_coor.select_part_dict(selec_dict={'chain': ['B']}) >>> rmsd = chain_A.compute_rmsd_to(chain_B) >>> print('RMSD before alignement is {:.2f} Å'.format(rmsd)) RMSD before alignement is 37.47 Å >>> chain_A.align_to(chain_B) >>> rmsd = chain_A.compute_rmsd_to(chain_B) >>> print('RMSD after alignement is {:.2f} Å'.format(rmsd)) RMSD after alignement is 0.06 Å >>> chain_A.align_to(chain_B) >>> rmsd = chain_A.compute_rmsd_to(chain_B) >>> print('RMSD after 2nd alignement is {:.2f} Å'.format(rmsd)) RMSD after 2nd alignement is 0.06 Å
- static angle_vec(vec_a, vec_b)
Compute angle between two vectors.
- Parameters
vec_a (list) – vector
vec_b (list) – vector
- Returns
angle in radian
- Return type
float
- Example
>>> angle = Coor.angle_vec([1, 0, 0], [0, 1, 0]) >>> print('angle = {:.2f}'.format(np.degrees(angle))) angle = 90.00 >>> angle = Coor.angle_vec([1, 0, 0], [1, 0, 0]) >>> print('angle = {:.2f}'.format(np.degrees(angle))) angle = 0.00 >>> angle = Coor.angle_vec([1, 0, 0], [1, 1, 0]) >>> print('angle = {:.2f}'.format(np.degrees(angle))) angle = 45.00 >>> angle = Coor.angle_vec([1, 0, 0], [-1, 0, 0]) >>> print('angle = {:.2f}'.format(np.degrees(angle))) angle = 180.00
- static atom_angle(atom_a, atom_b, atom_c)
Compute the anlge between 3 atoms.
- Parameters
atom_a (dict) – atom dictionnary
atom_b (dict) – atom dictionnary
atom_c (dict) – atom dictionnary
- Returns
angle (degrees)
- Return type
float
- Example
>>> atom_1 = {'xyz': np.array([0.0, 0.0, 0.0])} >>> atom_2 = {'xyz': np.array([0.0, 1.0, 0.0])} >>> atom_3 = {'xyz': np.array([1.0, 1.0, 1.0])} >>> Coor.atom_angle(atom_1, atom_2, atom_3) 90.0 >>> print('{:.3f}'.format(Coor.atom_angle(atom_1, atom_3, atom_2))) 35.264
- static atom_dihed_angle(atom_a, atom_b, atom_c, atom_d)
Compute the dihedral anlge using 4 atoms.
- Parameters
atom_a (dict) – atom dictionnary
atom_b (dict) – atom dictionnary
atom_c (dict) – atom dictionnary
atom_d (dict) – atom dictionnary
- Returns
dihedral angle
- Return type
float
- Example
>>> atom_1 = {'xyz': np.array([0.0, -1.0, 0.0])} >>> atom_2 = {'xyz': np.array([0.0, 0.0, 0.0])} >>> atom_3 = {'xyz': np.array([1.0, 0.0, 0.0])} >>> atom_4 = {'xyz': np.array([1.0, 1.0, 0.0])} >>> atom_5 = {'xyz': np.array([1.0, -1.0, 0.0])} >>> atom_6 = {'xyz': np.array([1.0, -1.0, 1.0])} >>> angle_1 = Coor.atom_dihed_angle(atom_1, atom_2, atom_3, atom_4) >>> print('{:.3f}'.format(angle_1)) 180.000 >>> angle_2 = Coor.atom_dihed_angle(atom_1, atom_2, atom_3, atom_5) >>> print('{:.3f}'.format(angle_2)) 0.000 >>> angle_3 = Coor.atom_dihed_angle(atom_1, atom_2, atom_3, atom_6) >>> print('{:.3f}'.format(angle_3)) -45.000
- static atom_dist(atom_a, atom_b)
Compute the distance between 2 atoms.
- Parameters
atom_a (dict) – atom dictionnary
atom_b (dict) – atom dictionnary
- Returns
distance
- Return type
float
- Example
>>> atom_1 = {'xyz': np.array([0.0, 0.0, 0.0])} >>> atom_2 = {'xyz': np.array([0.0, 1.0, 0.0])} >>> atom_3 = {'xyz': np.array([1.0, 1.0, 1.0])} >>> Coor.atom_dist(atom_1, atom_2) 1.0 >>> Coor.atom_dist(atom_1, atom_3) 1.7320508075688772
- center_of_mass(selec_dict={})
Compute the center of mass of a selection Avoid using atoms with 2 letters atom name like NA Cl … If selection is empy, take all atoms.
- Parameters
selec_dict (dict, default={}) – selection dictionnary
- Example
>>> prot_coor = Coor(os.path.join(TEST_PATH, '1y0m.pdb')) Succeed to read file ...1y0m.pdb , 648 atoms found >>> com_1y0m = prot_coor.center_of_mass() >>> print("x:{:.2f} y:{:.2f} z:{:.2f}".format(*com_1y0m)) x:16.01 y:0.45 z:8.57 >>> com_1y0m_ca = prot_coor.center_of_mass({'name': ['CA']}) >>> print("x:{:.2f} y:{:.2f} z:{:.2f}".format(*com_1y0m_ca)) x:15.95 y:0.72 z:8.96
Warning
Atom name must start with its type letter (H, C, N, O, P, S).
- centroid(selec_dict={})
Compute the centroid of a selection If selection is empy, take all atoms.
- Parameters
selec_dict (dict, default={}) – selection dictionnary
- Example
>>> prot_coor = Coor(os.path.join(TEST_PATH, '1y0m.pdb')) Succeed to read file ...1y0m.pdb , 648 atoms found >>> com_1y0m = prot_coor.centroid() >>> print("x:{:.2f} y:{:.2f} z:{:.2f}".format(*com_1y0m)) x:16.03 y:0.44 z:8.57 >>> com_1y0m_ca = prot_coor.centroid(selec_dict={'name': ['CA']}) >>> print("x:{:.2f} y:{:.2f} z:{:.2f}".format(*com_1y0m_ca)) x:15.95 y:0.72 z:8.96
- change_index_pdb_field(index_list, change_dict)
Change all atom field of a part of coor object defined by
index
, the change is based on the change_dict dictionnary.- Parameters
index_list (list) – list of atom index to change
change_dict (dict) – change ditionnay eg. {“chain” : “A”}
- Example
>>> prot_coor = Coor(os.path.join(TEST_PATH, '1y0m.pdb')) Succeed to read file ...1y0m.pdb , 648 atoms found >>> res_826_852 = prot_coor.get_index_selection({'res_num' : ... range(826,852)}) >>> prot_coor.change_index_pdb_field(index_list=res_826_852, ... change_dict={"chain" : "B"}) <...Coor object at ...> >>> prot_seq = prot_coor.get_aa_seq() >>> prot_seq == {'A': 'TFKSAVKALFDYKAQREDELTFTKSAIIQNVEKQD', ... 'B': 'GGWWRGDYGGKKQLWFPSNYVEEMIN'} True
- change_pdb_field(change_dict)
Change all atom field of a coor object, the change is based on the change_dict dictionnary.
- Parameters
change_dict (dict) – change ditionnay eg. {“chain”: “A”}
- Example
>>> prot_coor = Coor(os.path.join(TEST_PATH, '1y0m.pdb')) Succeed to read file ...1y0m.pdb , 648 atoms found >>> prot_coor.get_aa_seq() {'A': 'TFKSAVKALFDYKAQREDELTFTKSAIIQNVEKQDGGWWRGDYGGKKQLWFPSNYVEEMIN'} >>> prot_coor.change_pdb_field(change_dict = {"chain": "B"}) <...Coor object at ...> >>> prot_coor.get_aa_seq() {'B': 'TFKSAVKALFDYKAQREDELTFTKSAIIQNVEKQDGGWWRGDYGGKKQLWFPSNYVEEMIN'}
- compute_TMscore_to(atom_sel_2, ltarget, index_list=None)
Compute TMscore between two atom_dict Then return the TMscore.
- Parameters
atom_sel_1 (dict) – atom dictionnary
atom_sel_2 (dict) – atom dictionnary
selec_dict (dict, default={}) – selection dictionnary
- Returns
TMscore
- Return type
float
Ref: Y. Zhang, J. Skolnick, Scoring function for automated assessment of protein structure template quality, Proteins, 57: 702-710 (2004)
TMscore = max( 1/Ltarget * Sum(1/(1 + (di/do(Ltarget))**2 )) )
with Ltarget is length of model protein and: d0(Ltarget) = 1.24 * (Ltarget-15)**(1/3) - 1.8
- compute_rmsd_to(atom_sel_2, selec_dict={'name': ['CA']}, index_list=None)
Compute RMSD between two atom_dict Then return the RMSD value.
- Parameters
atom_sel_1 (dict) – atom dictionnary
atom_sel_2 (dict) – atom dictionnary
selec_dict (dict, default={}) – selection dictionnary
- Returns
RMSD
- Return type
float
- static concat_pdb(*pdb_in_files, pdb_out, check_file_out=True)
Concat a list of pdb files in one.
- Parameters
pdb_in_files (list) – list of pdb files
pdb_out (dict) – atom dictionnary
- Example
>>> TEST_OUT = str(getfixture('tmpdir')) >>> Coor.concat_pdb(os.path.join(TEST_PATH, '1y0m.pdb'), ... os.path.join(TEST_PATH, '1rxz.pdb'), ... pdb_out = os.path.join(TEST_OUT, 'tmp_2.pdb')) Succeed to save concat file: ...tmp_2.pdb
- correct_chain(Ca_cutoff=4.5)
Correct the chain ID’s of a coor object, by checking consecutive Calphas atoms distance. If the distance is higher than
Ca_cutoff
, the former atoms are considered as in a different chain.- Parameters
Ca_cutoff (float, default=4.5) – cutoff for distances between Calphas atoms (X)
- Example
>>> prot_coor = Coor(os.path.join(TEST_PATH, '1y0m.pdb')) Succeed to read file ...1y0m.pdb , 648 atoms found >>> res_810 = prot_coor.get_index_selection({'res_num': [810]}) >>> prot_coor = prot_coor.del_atom_index(index_list=res_810) >>> prot_coor.get_aa_seq() Residue A:THR:811 is not consecutive, there might be missing residues {'A': 'TFKSAVKALFDYKAQREDE-TFTKSAIIQNVEKQDGGWWRGDYGGKKQLWFPSNYVEEMIN'} >>> prot_coor.correct_chain() Chain: A Residue: 0 to 18 Chain: B Residue: 20 to 60 <...Coor object at ...> >>> # As a residue is missing, Calphas after residue 18 is no >>> # more consecutive
Note
This is specially usefull for pdb2gmx which cut the protein chains based on the chain ID’s.
- correct_cys_name()
Correct the CYS resname from pdb2pqr
- Example
>>> try: ... print("Start import") ... from . import pdb2pqr ... except ImportError: ... import pdb2pqr Start import... >>> TEST_OUT = str(getfixture('tmpdir')) >>> # Compute protonation with pdb2pqr: >>> pdb2pqr.compute_pdb2pqr(os.path.join(TEST_PATH, '1dpx.pdb'),os.path.join(TEST_OUT, '1dpx.pqr')) Succeed to read file ...1dpx.pdb , 1192 atoms found Succeed to save file ...tmp_pdb2pqr.pdb pdb2pqr30... --ff CHARMM --ffout CHARMM --keep-chain --titration-state-method=propka --with-ph=7.00 ...tmp_pdb2pqr.pdb ...1dpx.pqr 0 >>> prot_coor = Coor(os.path.join(TEST_OUT, '1dpx.pqr')) Succeed to read file ...1dpx.pqr , 1960 atoms found >>> Isu_index = prot_coor.get_index_selection({'res_name': ['DISU']}) >>> print(len(Isu_index)) 16 >>> prot_coor.correct_cys_name() <...Coor object at 0x... >>> Isu_index = prot_coor.get_index_selection({'res_name': ['DISU']}) >>> print(len(Isu_index)) 0
- correct_his_name()
Get his protonation state from pdb2pqr and replace HIS resname with HSE, HSD, HSP resname. To do after pdb2pqr, in order that protonation is recognize by pdb2gmx.
- Example
>>> try: ... print("Start import") ... from . import pdb2pqr ... except ImportError: ... import pdb2pqr Start import... >>> TEST_OUT = str(getfixture('tmpdir')) >>> # Compute protonation with pdb2pqr: >>> pdb2pqr.compute_pdb2pqr(os.path.join(TEST_PATH, '4n1m.pdb'),os.path.join(TEST_OUT, '4n1m.pqr')) Succeed to read file ...4n1m.pdb , 2530 atoms found Succeed to save file ...tmp_pdb2pqr.pdb pdb2pqr30... --ff CHARMM --ffout CHARMM --keep-chain --titration-state-method=propka --with-ph=7.00 ...tmp_pdb2pqr.pdb ...4n1m.pqr 0 >>> prot_coor = Coor(os.path.join(TEST_OUT, '4n1m.pqr')) Succeed to read file ...4n1m.pqr , 2549 atoms found >>> HSD_index = prot_coor.get_index_selection({'res_name': ['HSD'],'name': ['CA']}) >>> print(len(HSD_index)) 4 >>> HSE_index = prot_coor.get_index_selection({'res_name': ['HSE'],'name': ['CA']}) >>> print(len(HSE_index)) 0 >>> HSP_index = prot_coor.get_index_selection({'res_name': ['HSP'],'name': ['CA']}) >>> print(len(HSP_index)) 1 >>> prot_coor.correct_his_name() <...Coor object at 0x... >>> HIS_index = prot_coor.get_index_selection({'res_name': ['HIS'],'name': ['CA']}) >>> print(len(HIS_index)) 0
Note
This function seems useless. Since last version of pdb2pqr residue name seems correct.
- correct_ion_octa(ion_name_list, dist=0.9)
For specified ion, create an octahedral dummy model described by a set of 6 cationic dummy atoms connected around a central metal atom. From Duarte et al. J Phys Chem B 2014.
- Parameters
ion_name (str) – name of metal present in .pdb to transform in octahedral dummy model
- Example
>>> TEST_OUT = str(getfixture('tmpdir')) >>> prot_coor = Coor(os.path.join(TEST_PATH, '1jd4.pdb')) Succeed to read file ...1jd4.pdb , 1586 atoms found >>> ion_index = prot_coor.get_index_selection({'res_name' : ['ZN']}) >>> print(len(ion_index)) 2 >>> prot_coor.correct_ion_octa(['ZN']) <...Coor object at 0x... >>> ion_index = prot_coor.get_index_selection({'res_name' : ['ZN']}) >>> print(len(ion_index)) 14
- correct_protonated_res()
Correct protonated residues names, to avoid a mix of residue names from pdb2pqr, like GLUP and GLU or ASPP and ASP. To do after pdb2pqr, in order that protonation is recognize by pdb2gmx.
- Example
>>> try: ... print("Start import") ... from . import pdb2pqr ... except ImportError: ... import pdb2pqr Start import... >>> TEST_OUT = str(getfixture('tmpdir')) >>> # Compute protonation with pdb2pqr: >>> pdb2pqr.compute_pdb2pqr(os.path.join(TEST_PATH, '4n1m.pdb'),os.path.join(TEST_OUT, '4n1m.pqr'), ph=3.0) Succeed to read file ...4n1m.pdb , 2530 atoms found Succeed to save file ...tmp_pdb2pqr.pdb pdb2pqr30... --ff CHARMM --ffout CHARMM --keep-chain --titration-state-method=propka --with-ph=3.00 ...tmp_pdb2pqr.pdb ...4n1m.pqr 0 >>> prot_coor = Coor(os.path.join(TEST_OUT, '4n1m.pqr')) Succeed to read file ...4n1m.pqr , 2564 atoms found >>> HSD_index = prot_coor.get_index_selection({'res_name': ['HSD'],'name': ['CA']}) >>> print(len(HSD_index)) 0 >>> HSE_index = prot_coor.get_index_selection({'res_name': ['HSE'],'name': ['CA']}) >>> print(len(HSE_index)) 0 >>> HSP_index = prot_coor.get_index_selection({'res_name': ['HSP'],'name': ['CA']}) >>> print(len(HSP_index)) 5 >>> GLUP_index = prot_coor.get_index_selection({'res_name' : ['GLUP'],'name': ['CA']}) >>> print(len(GLUP_index)) 0 >>> ASPP_index = prot_coor.get_index_selection({'res_name': ['ASPP'],'name': ['CA']}) >>> print(len(ASPP_index)) 0 >>> prot_coor.correct_protonated_res() <...Coor object at 0x... >>> GLUP_index = prot_coor.get_index_selection({'res_name': ['GLUP'],'name': ['CA']}) >>> print(len(GLUP_index)) 9 >>> GLU_index = prot_coor.get_index_selection({'res_name': ['GLU'],'name': ['CA']}) >>> print(len(GLU_index)) 3 >>> ASPP_index = prot_coor.get_index_selection({'res_name': ['ASPP'],'name': ['CA']}) >>> print(len(ASPP_index)) 2 >>> ASP_index = prot_coor.get_index_selection({'res_name': ['ASP'],'name': ['CA']}) >>> print(len(ASP_index)) 5
- correct_water_name()
Correct the water resname from pdb2pqr
- Example
>>> try: ... print("Start import") ... from . import pdb2pqr ... except ImportError: ... import pdb2pqr Start import... >>> TEST_OUT = str(getfixture('tmpdir')) >>> prot_coor = Coor(os.path.join(TEST_PATH, '1dpx.pdb')) Succeed to read file ...1dpx.pdb , 1192 atoms found >>> prot_coor.water_to_ATOM() <...Coor object at 0x... >>> prot_coor.write_pdb(os.path.join(TEST_OUT, '1dpx_water.pdb')) Succeed to save file ...1dpx_water.pdb >>> # Compute protonation with pdb2pqr: >>> pdb2pqr.compute_pdb2pqr( ... os.path.join(TEST_OUT, '1dpx_water.pdb'), ... os.path.join(TEST_OUT, '1dpx_water.pqr')) Succeed to read file ...1dpx_water.pdb , 1192 atoms found Succeed to save file ...tmp_pdb2pqr.pdb pdb2pqr30... --ff CHARMM --ffout CHARMM --keep-chain --titration-state-method=propka --with-ph=7.00...tmp_pdb2pqr.pdb ...1dpx_water.pqr 0 >>> prot_coor = Coor(os.path.join( ... TEST_OUT, '1dpx_water.pqr')) Succeed to read file ...1dpx_water.pqr , 2492 atoms found >>> water_index = prot_coor.get_index_selection( ... {'res_name': ['TP3M'], 'name': ['OH2']}) >>> print(len(water_index)) 177
- cryst_convert(format_out='pdb')
PDB format: https://www.wwpdb.org/documentation/file-format-content/format33/sect8.html
Gro to pdb: https://mailman-1.sys.kth.se/pipermail/gromacs.org_gmx-users/2008-May/033944.html
https://en.wikipedia.org/wiki/Fractional_coordinates
>>> prot_coor = Coor() >>> prot_coor.read_file(os.path.join(TEST_PATH, '1y0m.gro')) Succeed to read file ...1y0m.gro , 648 atoms found >>> prot_coor.cryst_convert(format_out='pdb') 'CRYST1 28.748 30.978 29.753 90.00 92.12 90.00 P 1 1\n' >>> prot_coor = Coor() >>> prot_coor.read_file(os.path.join(TEST_PATH, '1y0m.pdb')) Succeed to read file ...1y0m.pdb , 648 atoms found >>> prot_coor.cryst_convert(format_out='gro') ' 2.87480 3.09780 2.97326 0.00000 0.00000 0.00000 0.00000 -0.11006 0.00000\n'
- del_atom_index(index_list)
Delete atoms of a coor object defined by their
index
.- Parameters
index_list (list) – list of atom index to delete
- Example
>>> prot_coor = Coor(os.path.join(TEST_PATH, '1y0m.pdb')) Succeed to read file ...1y0m.pdb , 648 atoms found >>> prot_coor.get_aa_seq() {'A': 'TFKSAVKALFDYKAQREDELTFTKSAIIQNVEKQDGGWWRGDYGGKKQLWFPSNYVEEMIN'} >>> res_810_852 = prot_coor.get_index_selection({'res_num': range(810,852)}) >>> prot_coor.del_atom_index(index_list=res_810_852) <...Coor object at ...> >>> prot_coor.get_aa_seq() {'A': 'TFKSAVKALFDYKAQREDE'}
- dist_under_index(atom_sel_2, cutoff=10.0)
Check is distance between atoms of self.coor is under cutoff with atoms of group 1. Then return list of index of atoms of self.coor under ctuoff ditance.
- Parameters
atom_sel_1 (dict) – atom dictionnary
atom_sel_2 (dict) – atom dictionnary
cutoff (float, default=10.0) – distance cutoff
- Returns
array of index
- Return type
np.array
- get_PDB(pdb_ID, out_file=None, check_file_out=True)
Get a pdb file from the PDB using its ID and return a Coor object.
- Parameters
pdb_ID (str) – Protein Data Bank structure ID
out_file (str, optional, default=None) – path of the pdb file to save
check_file_out (bool, optional, default=True) – flag to check or not if file has already been created. If the file is present then the command break.
- Example
>>> show_log() >>> TEST_OUT = str(getfixture('tmpdir')) >>> prot_coor = Coor() >>> prot_coor.get_PDB('3EAM', os.path.join(TEST_OUT, '3eam.pdb')) Succeed to read file ...3eam.pdb , 13505 atoms found
- get_aa_DL_seq(gap_in_seq=True)
Get the amino acid sequence from a coor object. if amino acid is in D form it will be in lower case.
L or D form is determined using CA-N-C-CB angle Angle should take values around +34° and −34° for L- and D-amino acid residues.
Reference: https://onlinelibrary.wiley.com/doi/full/10.1002/prot.10320
- Returns
dictionnary of sequence indexed by the chain ID
- Return type
dict
- Example
>>> prot_coor = Coor(os.path.join(TEST_PATH, '1y0m.pdb')) Succeed to read file ...1y0m.pdb , 648 atoms found >>> prot_coor.get_aa_DL_seq() {'A': 'TFKSAVKALFDYKAQREDELTFTKSAIIQNVEKQDGGWWRGDYGGKKQLWFPSNYVEEMIN'} >>> prot_coor = Coor(os.path.join(TEST_PATH, '6be9_frame_0.pdb')) Succeed to read file ...6be9_frame_0.pdb , 104 atoms found >>> prot_coor.get_aa_DL_seq() Residue K2 is in D form Residue N6 is in D form Residue P7 is in D form {'A': 'TkNDTnp'}
Warning
If atom chains are not arranged sequentialy (A,A,A,B,B,A,A,A …), the first atom seq will be overwritten by the last one.
- get_aa_num()
Get the amino acid number of a coor object.
- Returns
Number of residues
- Return type
int
- Example
>>> prot_coor = Coor(os.path.join(TEST_PATH, '1y0m.pdb')) Succeed to read file ...1y0m.pdb , 648 atoms found >>> prot_coor.get_aa_num() 61
Note
Only count Ca atoms, this may not be the best choice ?
- get_aa_seq(gap_in_seq=True)
Get the amino acid sequence from a coor object.
- Returns
dictionnary of sequence indexed by the chain ID
- Return type
dict
- Example
>>> prot_coor = Coor(os.path.join(TEST_PATH, '1y0m.pdb')) Succeed to read file ...1y0m.pdb , 648 atoms found >>> prot_coor.get_aa_seq() {'A': 'TFKSAVKALFDYKAQREDELTFTKSAIIQNVEKQDGGWWRGDYGGKKQLWFPSNYVEEMIN'}
Warning
If atom chains are not arranged sequentialy (A,A,A,B,B,A,A,A …), the first atom seq will be overwritten by the last one.
- get_array(field='xyz', index_list=None)
Convert atom dict as a numpy array.
- Parameters
field (str (Default='xyz')) – field to extract
index_list (list (Default=None)) – list of index to extract
- Returns
coordinates array
- Return type
np.array
- Example
>>> prot_coor = Coor(os.path.join(TEST_PATH, '1y0m.pdb')) Succeed to read file ...1y0m.pdb , 648 atoms found >>> coor_array = prot_coor.get_array() >>> print(coor_array[1:4]) [[-0.971 9.213 12.734] [-0.185 7.901 12.631] [ 0.456 7.524 13.61 ]] >>> coor_array = prot_coor.get_array(field='name') >>> print(coor_array[1:4]) ['CA' 'C' 'O']
- get_attribute_selection(selec_dict={}, attribute='uniq_resid', index_list=None)
Select atom of a coor object based on the change_dict dictionnary. Return the list of unique attribute of the selected atoms.
- Parameters
selec_dict (dict) – select ditionnay eg. {“chain”: [“A”,”G”]}
- Returns
list of atom index
- Return type
list of int
- Example
>>> prot_coor = Coor(os.path.join(TEST_PATH, '1y0m.pdb')) Succeed to read file ...1y0m.pdb , 648 atoms found >>> prot_coor.get_attribute_selection({'res_num': [826,827]},attribute='uniq_resid') [35, 36]
- get_box_dim(selec_dict={})
Compute the x, y, z dimension of a selection
- Parameters
selec_dict (dict, default={}) – selection dictionnary
- Example
>>> prot_coor = Coor(os.path.join(TEST_PATH, '1y0m.pdb')) Succeed to read file ...1y0m.pdb , 648 atoms found >>> box_1y0m = prot_coor.get_box_dim() >>> print("x:{:.2f} y:{:.2f} z:{:.2f}".format(*box_1y0m)) x:39.14 y:29.36 z:31.19
Warning
Atom name must start with its type letter (H, C, N, O, P, S).
- get_center_residue(selec_dict={'res_name': ['GLY', 'HIS', 'HSP', 'HSE', 'HSD', 'HIP', 'HIE', 'HID', 'ARG', 'LYS', 'ASP', 'ASPP', 'GLU', 'GLUP', 'SER', 'THR', 'ASN', 'GLN', 'CYS', 'SEC', 'PRO', 'ALA', 'ILE', 'PHE', 'TYR', 'TRP', 'VAL', 'LEU', 'MET', 'DA5', 'DA3', 'DAN', 'DA', 'DT5', 'DT3', 'DTN', 'DT', 'DC5', 'DC3', 'DCN', 'DC', 'DG5', 'DG3', 'DGN', 'DG', 'RA5', 'RA3', 'RAN', 'RA', 'RU5', 'RU3', 'RUN', 'RU', 'RC5', 'RC3', 'RCN', 'RC', 'RG5', 'RG3', 'RGN', 'RG']}, field='res_num')
Find the closet residue to protein center of mass. Return the residue index.
- Parameters
selec_res_list (list, default={'res_name': PROTEIN_RES}) – selection residue
>>> prot_coor = Coor(os.path.join(TEST_PATH, '1y0m.pdb')) Succeed to read file ...1y0m.pdb , 648 atoms found >>> center_res = prot_coor.get_center_residue() Minimal distance to protein COM is 3.00 Å with residue "res_num": 841 >>> print("Center residue is {:d}".format(center_res)) Center residue is 841
- get_common_atom(atom_sel_2, chain_1=['A'], chain_2=['A'], back_names=['C', 'N', 'O', 'CA'])
Get atom selection in common for two atom_dict based on sequence alignement.
- get_gro_structure_string()
Return a coor object as a pdb string.
- Example
>>> prot_coor = Coor() >>> prot_coor.read_pdb(os.path.join(TEST_PATH, '1y0m.pdb')) Succeed to read file ...1y0m.pdb , 648 atoms found >>> gro_str = prot_coor.get_gro_structure_string() >>> print('Number of caracters: {}'.format(len(gro_str))) Number of caracters: 29283
- get_index_dist_between(atom_sel_2, cutoff_min=0, cutoff_max=10)
Check is distance between atoms of self.atom_dict is under cutoff with the atoms of group 1. Then return list of index of atoms of self.coor under cutoff ditance.
- Parameters
atom_sel_1 (dict) – atom dictionnary
atom_sel_2 (dict) – atom dictionnary
cutoff_min (float, default=0.0) – maximum distance cutoff
cutoff_max (float, default=10.0) – minimum distance cutoff
- Example
>>> prot_coor = Coor(os.path.join(TEST_PATH, '1y0m.pdb')) Succeed to read file ...1y0m.pdb , 648 atoms found >>> res_810 = prot_coor.select_part_dict({'res_num': [810]}) >>> close_r810 = prot_coor.get_index_dist_between( ... res_810, cutoff_min=3, cutoff_max=5) >>> print(len(close_r810)) 65
- get_index_selection(selec_dict)
Select atom of a coor object based on the change_dict dictionnary. Return the list of index of selected atoms.
- Parameters
selec_dict (dict) – select ditionnay eg. {“chain”: [“A”,”G”]}
- Returns
list of atom index
- Return type
list of int
- Example
>>> prot_coor = Coor(os.path.join(TEST_PATH, '1y0m.pdb')) Succeed to read file ...1y0m.pdb , 648 atoms found >>> prot_coor.get_index_selection({'res_num': [826,827]}) [297, 298, 299, 300, 301, 302, 303, 304]
- get_mass_array()
Extract mass of each atom_dict and return it as an numpy array Avoid using atoms with 2 letters atom name like NA Cl …
- Returns
mass array
- Return type
np.array
- Example
>>> prot_coor = Coor(os.path.join(TEST_PATH, '1y0m.pdb')) Succeed to read file ...1y0m.pdb , 648 atoms found >>> mass_1y0m = prot_coor.get_mass_array() >>> print("Mass of 10 first atoms: {}".format(mass_1y0m[:10])) Mass of 10 first atoms: [7 6 6 8 6 8 6 7 6 6] >>> prot_coor_ca = prot_coor.select_part_dict({'name': ['CA']}) >>> mass_1y0m_ca = prot_coor_ca.get_mass_array() >>> print("Mass of 10 first atoms: {}".format(mass_1y0m_ca[:10])) Mass of 10 first atoms: [6 6 6 6 6 6 6 6 6 6]
- get_max_size()
Get maximum size of a molecule.
- Example
>>> prot_coor = Coor(os.path.join(TEST_PATH, '1y0m.pdb')) Succeed to read file ...1y0m.pdb , 648 atoms found >>> print('Maximum size without alignment is {:.2f} Å'.format( ... np.ceil(prot_coor.get_box_dim()).max())) Maximum size without alignment is 40.00 Å >>> max_size = prot_coor.get_max_size() Do a rotation of 66.43° >>> print('Maximum size is {:.2f} Å'.format(max_size)) Maximum size is 43.00 Å
- get_pqr_structure_string()
Return a coor object as a pqr string.
- Example
>>> prot_coor = Coor() >>> prot_coor.read_pdb(os.path.join(TEST_PATH, '1y0m.pdb')) Succeed to read file ...1y0m.pdb , 648 atoms found >>> pqr_str = prot_coor.get_pqr_structure_string() >>> print('Number of caracters: {}'.format(len(pqr_str))) Number of caracters: 46728
- get_structure_string()
Return a coor object as a pdb string.
- Example
>>> prot_coor = Coor() >>> prot_coor.read_pdb(os.path.join(TEST_PATH, '1y0m.pdb')) Succeed to read file ...1y0m.pdb , 648 atoms found >>> pdb_str = prot_coor.get_structure_string() >>> print('Number of caracters: {}'.format(len(pdb_str))) Number of caracters: 51264
- insert_mol(pdb_out, out_folder, mol_chain, mol_num, check_file_out=True, prot_atom_name=['CA'], sol_res_name=['SOL'], sol_atom_name=['OW'])
Insert molecules defined by chain ID
mol_chain
in a water solvant. Check which water molecules are withincutoff_prot_off=12.0
X andcutoff_prot_in=15.0
X of protein and peptide C alpha atoms. Move the molecules to be inserted at the position of water molecules. Then delete all water molecules withincutoff_water_clash=1.2
X of the inserted molecule atoms.- Parameters
pdb_out (str) – name of output pdb file
out_folder (str) – path of the ouput directory
mol_chain (str) – chain ID of the molecule to be inserted,
mol_num (int) – Number of molecule to be inserted,
check_file_out (bool, optional, default=True) – flag to check or not if file has already been created. If the file is present then the command break.
Warning
self.atom_dict file must contain alredy a concatenated system with a ligand (chain:
mol_chain
) and a solvated system. Molecules to insert should have different residue number or at least non consecutive.
- static kabsch(coor_1, coor_2)
Source: https://github.com/charnley/rmsd/blob/master/rmsd/ calculate_rmsd.py Using the Kabsch algorithm with two sets of paired point P and Q, centered around the centroid. Each vector set is represented as an NxD matrix, where D is the the dimension of the space.
The algorithm works in three steps: - a centroid translation of P and Q (assumed done before this function call) - the computation of a covariance matrix C - computation of the optimal rotation matrix U For more info see http://en.wikipedia.org/wiki/Kabsch_algorithm
- Parameters
coor_1 (np.array) – coordinates array of size (N, D), where N is points and D is dimension.
coor_2 (np.array) – coordinates array of size (N, D), where N is points and D is dimension.
- Returns
rotation matrix
- Return type
np.array of size (D, D)
- static makeQ(r1, r2, r3, r4=0)
Source: https://github.com/charnley/rmsd/blob/master/rmsd/ calculate_rmsd.py matrix involved in quaternion rotation
- static makeW(r1, r2, r3, r4=0)
Source: https://github.com/charnley/rmsd/blob/master/rmsd/ calculate_rmsd.py matrix involved in quaternion rotation
- make_peptide(sequence, pdb_out, check_file_out=True)
Create a linear peptide structure.
- Parameters
sequence (str) – peptide sequence
pdb_out (str) – name of output pdb file
check_file_out (bool, optional, default=True) – flag to check or not if file has already been created. If the file is present then the command break.
- moment_inertia()
Tensor moment of inertia relative to center of mass.
Taken from: https://github.com/MDAnalysis/mdanalysis/blob/develop/package/MDAnalysis/core/topologyattrs.py
- Returns
tensor matrix 3*3
- Return type
np.array
- Example
>>> prot_coor = Coor(os.path.join(TEST_PATH, '1y0m.pdb')) Succeed to read file ...1y0m.pdb , 648 atoms found >>> tensor = prot_coor.moment_inertia() >>> print(tensor) [[343695.37614973 31289.34303697 40416.71166176] [ 31289.34303697 478561.60329129 -9443.32698326] [ 40416.71166176 -9443.32698326 413840.08602987]]
- parse_gro_lines(gro_lines)
Parse a gro file and return atom informations as a dictionnary indexed on the atom num.
- Parameters
gro_in (list of str) – lines to parse
- Example
>>> prot_coor = Coor() >>> f = open(os.path.join(TEST_PATH, '1y0m.gro')) >>> lines = f.readlines() >>> prot_coor.parse_gro_lines(lines) >>> prot_coor.num 648
- parse_pdb_lines(pdb_lines, pqr_format=False)
Parse the pdb lines and return atom informations as a dictionnary indexed on the atom num. The fonction can also read pqr files if specified with
pqr_format = True
, it will only change the column format of beta and occ factors.- Parameters
pdb_lines (list of str) – lines to parse
- Example
>>> prot_coor = Coor() >>> f = open(os.path.join(TEST_PATH, '1y0m.pdb')) >>> lines = f.readlines() >>> prot_coor.parse_pdb_lines(lines) >>> prot_coor.num 648
- plot_pseudo_3D(c_field=None, cmap='gist_rainbow', line_w=1.5, chainbreak=5.0, sel={'name': ['CA']}, fig_size=(7, 7))
Plot alpha Carbon trace of protein in pseudo 3D.
Inspired from Colab fold plot_pseudo_3D() function from sokrypton https://github.com/sokrypton/ColabFold
- Parameters
c_field (str (Default=None or 'index')) – field used to color figure
cmap (str (Default="gist_rainbow")) – Color map
line_w (flt (Default=1.5)) – Line width
chainbreak (flt (Default=5.0)) – Distance for chain break (in Å)
sel (dict (Default={'name': ['CA']})) – selection to plot
fig_size (tupple (Default=(7, 7))) – Figure size
- Returns
matplotlib ax
- Return type
ax
- Example
- principal_axis()
Calculate the principal axes from the moment of inertia.
Taken from: https://github.com/MDAnalysis/mdanalysis/blob/develop/ package/MDAnalysis/core/topologyattrs.py
- Returns
3 principal axis
- Return type
list of np.array
- Example
>>> prot_coor = Coor(os.path.join(TEST_PATH, '1y0m.pdb')) Succeed to read file ...1y0m.pdb , 648 atoms found >>> princ_axis = prot_coor.principal_axis() >>> print(princ_axis) [[-0.21318784 -0.97697417 0.00850932] [ 0.39228202 -0.07761763 0.91656441] [-0.89479929 0.19873844 0.39979654]]
- static quaternion_rotate(X, Y)
Source: https://github.com/charnley/rmsd/blob/master/rmsd/ calculate_rmsd.py Calculate the rotation
- Parameters
coor_1 (np.array) – coordinates array of size (N, D), where N is points and D is dimension.
coor_2 (np.array) – coordinates array of size (N, D), where N is points and D is dimension.
- Returns
rotation matrix
- Return type
np.array of size (D, D)
- static quaternion_transform(r)
Source: https://github.com/charnley/rmsd/blob/master/rmsd/ calculate_rmsd.py Get optimal rotation note: translation will be zero when the centroids of each molecule are the same.
- read_file(file_in)
Read a pdb file and return atom informations as a dictionnary indexed on the atom num. The fonction can also read pqr files if specified with
pqr_format = True
, it will only change the column format of beta and occ factors.- Parameters
pdb_in (str) – path of the pdb file to read
pqr_format (bool, default=False) – Flag for .pqr file format reading.
- Example
>>> prot_coor = Coor() >>> prot_coor.read_file(os.path.join(TEST_PATH, '1y0m.pdb')) Succeed to read file ...1y0m.pdb , 648 atoms found >>> prot_coor.read_file(os.path.join(TEST_PATH, '1y0m.gro')) Succeed to read file ...1y0m.gro , 648 atoms found
- read_pdb(pdb_in, pqr_format=False)
Read a pdb file and return atom informations as a dictionnary indexed on the atom num. The fonction can also read pqr files if specified with
pqr_format = True
, it will only change the column format of beta and occ factors.- Parameters
pdb_in (str) – path of the pdb file to read
pqr_format (bool, default=False) – Flag for .pqr file format reading.
- Example
>>> prot_coor = Coor() >>> prot_coor.read_pdb(os.path.join(TEST_PATH, '1y0m.pdb')) Succeed to read file ...1y0m.pdb , 648 atoms found
- remove_alter_position()
Remove alternative position.
- Example
>>> prot_coor = Coor(os.path.join(TEST_PATH, '4n1m.pdb')) Succeed to read file ...4n1m.pdb , 2530 atoms found >>> print('Atom num = {}'.format(prot_coor.num)) Atom num = 2530 >>> prot_coor.remove_alter_position() >>> print('Atom num = {}'.format(prot_coor.num)) Atom num = 2475
- rotation_angle(tau_x, tau_y, tau_z)
Compute coordinates of a system after a rotation on x, y and z axis.
- Parameters
tau_x (float) – angle of rotation (degrees) on the x axis
tau_y (float) – angle of rotation (degrees) on the y axis
tau_z (float) – angle of rotation (degrees) on the z axis
- Example
>>> prot_coor = Coor(os.path.join(TEST_PATH, '1y0m.pdb')) Succeed to read file ...1y0m.pdb , 648 atoms found >>> com_1y0m = prot_coor.center_of_mass() >>> print("x:{:.2f} y:{:.2f} z:{:.2f}".format(*com_1y0m)) x:16.01 y:0.45 z:8.57 >>> prot_coor.rotation_angle(90, 90, 90) >>> com_1y0m = prot_coor.center_of_mass() >>> print("x:{:.2f} y:{:.2f} z:{:.2f}".format(*com_1y0m)) x:9.98 y:-4.03 z:-14.63
- select_from_index(index_list)
Select atom of a coor object from an atom index list. Return a new coor object.
- Parameters
index_list (list) – list of index eg. [0, 4]
- Returns
a new coor object
- Return type
coor
- Example
>>> prot_coor = Coor(os.path.join(TEST_PATH, '1y0m.pdb')) Succeed to read file ...1y0m.pdb , 648 atoms found >>> index_list = prot_coor.get_index_selection({'res_num': [826,827]}) >>> index_list [297, 298, 299, 300, 301, 302, 303, 304] >>> prot_sel = prot_coor.select_from_index(index_list) >>> len(prot_sel.atom_dict) == len(index_list) True
- select_part_dict(selec_dict)
Select atom of a coor object defined, the selection is based on the change_dict dictionnary. Return a new coor object.
- Parameters
selec_dict (dict) – change ditionnay eg. {“chain” : [“A”,”G”]}
- Returns
a new coor object
- Return type
coor
- Example
>>> prot_coor = Coor(os.path.join(TEST_PATH, '1y0m.pdb')) Succeed to read file ...1y0m.pdb , 648 atoms found >>> prot_coor.get_aa_num() 61 >>> prot_20_coor = prot_coor.select_part_dict(selec_dict={'res_num': list(range(791,800))}) >>> prot_20_coor.get_aa_seq() {'A': 'TFKSAVKAL'} >>> prot_20_coor.get_aa_num() 9 >>> prot_N_atom = prot_coor.select_part_dict(selec_dict={'name': ['ZN']}) >>> # WARNING using selec_dict = {'name': 'ZN'} will >>> # give you 61 residues !! >>> print(prot_N_atom.num) 0 >>> # Select only protein atoms >>> print(prot_coor.num) 648 >>> prot_only = prot_coor.select_part_dict(selec_dict={'res_name': PROTEIN_RES}) >>> print(prot_only.num) 526
- translate(vector)
Translate all atoms of a coor object by a given
vector
- Parameters
vector (list) – 3d translation vector
- Example
>>> prot_coor = Coor(os.path.join(TEST_PATH, '1y0m.pdb')) Succeed to read file ...1y0m.pdb , 648 atoms found >>> com_1y0m = prot_coor.center_of_mass() >>> print("x:{:.2f} y:{:.2f} z:{:.2f}".format(*com_1y0m)) x:16.01 y:0.45 z:8.57 >>> prot_coor.translate(-com_1y0m) >>> com_1y0m = prot_coor.center_of_mass() >>> print("x:{:.2f} y:{:.2f} z:{:.2f}".format(*com_1y0m)) x:-0.00 y:0.00 z:0.00
- property view
Return a nglview object to be view in a jupyter notebook.
Example:
>>> TEST_OUT = str(getfixture('tmpdir')) >>> prot_coor = Coor() >>> prot_coor.get_PDB('3EAM', os.path.join(TEST_OUT, '3eam.pdb')) Succeed to read file ...3eam.pdb , 13505 atoms found >>> view = prot_coor.view >>> view
- water_to_ATOM()
Change HETATM field of water to ATOM, as pdb2pqr only use ATOM field.
- Example
>>> try: ... print("Start import") ... from . import pdb2pqr ... except ImportError: ... import pdb2pqr Start import... >>> prot_coor = Coor(os.path.join(TEST_PATH, '1dpx.pdb')) Succeed to read file ...1dpx.pdb , 1192 atoms found >>> hetatm_index = prot_coor.get_index_selection({'field': ['HETATM']}) >>> print(len(hetatm_index)) 179 >>> prot_coor.water_to_ATOM() <...Coor object at 0x... >>> hetatm_index = prot_coor.get_index_selection({'field': ['HETATM']}) >>> print(len(hetatm_index)) 2 >>> water_index = prot_coor.get_index_selection({'res_name': ['HOH']}) >>> print(len(water_index)) 177
- write_pdb(pdb_out, check_file_out=True)
Write a pdb file.
- Parameters
pdb_out (str) – path of the pdb file to write
check_file_out (bool, optional, default=True) – flag to check or not if file has already been created. If the file is present then the command break.
- Example
>>> TEST_OUT = str(getfixture('tmpdir')) >>> prot_coor = Coor(os.path.join(TEST_PATH, '1y0m.pdb')) Succeed to read file ...1y0m.pdb , 648 atoms found >>> prot_coor.write_pdb(os.path.join(TEST_OUT, 'tmp.pdb')) Succeed to save file ...tmp.pdb
- write_pqr(pqr_out, check_file_out=True)
Write a pdb file.
- Parameters
pdb_out (str) – path of the pdb file to write
check_file_out (bool, optional, default=True) – flag to check or not if file has already been created. If the file is present then the command break.
- Example
>>> TEST_OUT = str(getfixture('tmpdir')) >>> prot_coor = Coor(os.path.join(TEST_PATH, '1y0m.pdb')) Succeed to read file ...1y0m.pdb , 648 atoms found >>> prot_coor.write_pdb(os.path.join(TEST_OUT, 'tmp.pdb')) Succeed to save file ...tmp.pdb