diff --git a/analysis_pdb.py b/analysis_pdb.py index 6aa138b..1109c37 100755 --- a/analysis_pdb.py +++ b/analysis_pdb.py @@ -145,6 +145,30 @@ class PDBAnalyzer: # Return a new instance of PDBAnalyzer pointing to the cleaned file return cls(out_file) + + def modify_residue_number(self, chain_id: str, original_res_num: int, new_res_num: int) -> PandasPdb: + """ + Modify the residue number for a specific chain in a PDB file. + + Args: + chain_id (str): The chain identifier in the PDB file. + original_res_num (int): The original residue number to find. + new_res_num (int): The new residue number to replace with. + + Returns: + PandasPdb: The modified PDB structure as a PandasPdb object. + """ + # Check if the residue number to be replaced exists + mask = (self.biodata.df['ATOM']['chain_id'] == chain_id) & \ + (self.biodata.df['ATOM']['residue_number'] == original_res_num) + if not mask.any(): + raise ValueError(f"Residue number {original_res_num} in chain {chain_id} does not exist in the PDB file.") + + # Update the residue number + self.biodata.df['ATOM'].loc[mask, 'residue_number'] = new_res_num + + # Return the modified PandasPdb object + return self.biodata def extract_chains_to_new_pdb(self, chains: List[str]) -> PandasPdb: """