From fdd5a7d14ed713188eb405d51cd3e671f1550eaa Mon Sep 17 00:00:00 2001 From: Peter Schmidtke Date: Mon, 9 Sep 2024 12:14:06 +0000 Subject: [PATCH] issue-151 fix of chain reading atoms in read_mmcif & descriptor output writing --- headers/descriptors.h | 4 ++-- src/descriptors.c | 9 ++++----- src/read_mmcif.c | 13 ++++++++----- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/headers/descriptors.h b/headers/descriptors.h index 2b54047d..e7b0dd34 100644 --- a/headers/descriptors.h +++ b/headers/descriptors.h @@ -81,8 +81,8 @@ typedef struct s_desc characterChain2, /**< 0 if protein, 1 if nucl acid pocket, 2 if HETATM pocket*/ numResChain1, /**1){ firstatom=atoms[0]; @@ -373,8 +372,8 @@ void set_atom_based_descriptors(s_atm **atoms, int natoms, s_desc *desc,s_atm *a if(element_in_std_res(firstatom->res_name)) desc->characterChain1=0; else if(element_in_nucl_acid(firstatom->res_name)) desc->characterChain1=1; else if(element_in_kept_res(firstatom->res_name)) desc->characterChain1=2; - strncpy(desc->nameChain1,firstatom->chain,2); - strncpy(curChainName,firstatom->chain,2); + strcpy(desc->nameChain1,firstatom->chain); + strcpy(curChainName,firstatom->chain); desc->numResChain1 = countResidues(all_atoms,all_natoms,firstatom->chain); for(i = 0 ; i < natoms ; i++) { @@ -384,7 +383,7 @@ void set_atom_based_descriptors(s_atm **atoms, int natoms, s_desc *desc,s_atm *a desc->interChain = 1; if(!desc->numResChain2){ desc->numResChain2 = countResidues(all_atoms,all_natoms,curatom->chain); - strncpy(curChainName,curatom->chain,1); + strcpy(curChainName,curatom->chain); } } diff --git a/src/read_mmcif.c b/src/read_mmcif.c index 9d29ffed..5c3de352 100644 --- a/src/read_mmcif.c +++ b/src/read_mmcif.c @@ -123,10 +123,14 @@ s_pdb *open_mmcif(char *fpath, const char *ligan, const int keep_lig, int model_ } if (par->xlig_resnumber > -1) { - - if (((is_ligand(par->chain_as_ligand, at_in[i].chain_auth,par->n_chains_as_ligand)) || (par->xlig_chain_code !=NULL && at_in[i].chain_auth[0] == par->xlig_chain_code[0] && at_in[i].resid_auth == par->xlig_resnumber && par->xlig_resname[0] == at_in[i].resname[0] && par->xlig_resname[1] == at_in[i].resname[1] && par->xlig_resname[2] == at_in[i].resname[2]) || (par->xlig_chain_code!=NULL && at_in[i].chain_auth[0] == par->xlig_chain_code[0] && at_in[i].resid_auth == par->xlig_resnumber && par->xlig_resname[0] == at_in[i].resname[0] && par->xlig_resname[1] == at_in[i].resname[1] && par->xlig_resname[2] == at_in[i].resname[2]))) + + // if (((is_ligand(par->chain_as_ligand, at_in[i].chain_auth,par->n_chains_as_ligand)) || (par->xlig_chain_code !=NULL && at_in[i].chain_auth[0] == par->xlig_chain_code[0] && at_in[i].resid_auth == par->xlig_resnumber && par->xlig_resname[0] == at_in[i].resname[0] && par->xlig_resname[1] == at_in[i].resname[1] && par->xlig_resname[2] == at_in[i].resname[2]) || (par->xlig_chain_code!=NULL && at_in[i].chain_auth[0] == par->xlig_chain_code[0] && at_in[i].resid_auth == par->xlig_resnumber && par->xlig_resname[0] == at_in[i].resname[0] && par->xlig_resname[1] == at_in[i].resname[1] && par->xlig_resname[2] == at_in[i].resname[2]))) + if (((is_ligand(par->chain_as_ligand, at_in[i].chain_auth,par->n_chains_as_ligand)) || (par->xlig_chain_code !=NULL && strcmp(at_in[i].chain_auth,par->xlig_chain_code)==0 && at_in[i].resid_auth == par->xlig_resnumber && par->xlig_resname[0] == at_in[i].resname[0] && par->xlig_resname[1] == at_in[i].resname[1] && par->xlig_resname[2] == at_in[i].resname[2]) || (par->xlig_chain_code!=NULL && at_in[i].chain_auth[0] == par->xlig_chain_code[0] && at_in[i].resid_auth == par->xlig_resnumber && par->xlig_resname[0] == at_in[i].resname[0] && par->xlig_resname[1] == at_in[i].resname[1] && par->xlig_resname[2] == at_in[i].resname[2]))) + { + pdb->n_xlig_atoms++; + } } } @@ -630,9 +634,8 @@ void read_mmcif(s_pdb *pdb, const char *ligan, const int keep_lig, int model_num unsigned short is_chain_ligand=(is_ligand(params->chain_as_ligand, at_in[i].chain_auth,params->n_chains_as_ligand) && strncmp(at_in[i].resname, "HOH", 3) && strncmp(at_in[i].resname, "WAT", 3) && strncmp(at_in[i].resname, "TIP", 3)); - if (is_chain_ligand || (params->xlig_chain_code !=NULL && at_in[i].chain_auth[0] == params->xlig_chain_code[0] && at_in[i].resid_auth == params->xlig_resnumber && params->xlig_resname[0] == at_in[i].resname[0] && params->xlig_resname[1] == at_in[i].resname[1] && params->xlig_resname[2] == at_in[i].resname[2]) || (params->xlig_chain_code!=NULL && at_in[i].chain_auth[0] == params->xlig_chain_code[0] && at_in[i].resid_auth == params->xlig_resnumber && params->xlig_resname[0] == at_in[i].resname[0] && params->xlig_resname[1] == at_in[i].resname[1] && params->xlig_resname[2] == at_in[i].resname[2])) - { - + if (is_chain_ligand || (params->xlig_chain_code !=NULL && strcmp(at_in[i].chain_auth, params->xlig_chain_code)==0 && at_in[i].resid_auth == params->xlig_resnumber && params->xlig_resname[0] == at_in[i].resname[0] && params->xlig_resname[1] == at_in[i].resname[1] && params->xlig_resname[2] == at_in[i].resname[2]) || (params->xlig_chain_code!=NULL && strcmp(at_in[i].chain_auth, params->xlig_chain_code)==0 && at_in[i].resid_auth == params->xlig_resnumber && params->xlig_resname[0] == at_in[i].resname[0] && params->xlig_resname[1] == at_in[i].resname[1] && params->xlig_resname[2] == at_in[i].resname[2])) + { *(pdb->xlig_x + i_explicit_ligand_atom) = ts_in.coords[3 * i]; *(pdb->xlig_y + i_explicit_ligand_atom) = ts_in.coords[(3 * i) + 1]; *(pdb->xlig_z + i_explicit_ligand_atom) = ts_in.coords[(3 * i) + 2];