From 5622b4cbdfeaefc1cbe38babc750675ef72a7f69 Mon Sep 17 00:00:00 2001 From: gggguido Date: Tue, 17 Jun 2025 17:54:39 +0200 Subject: [PATCH 1/3] distances in optimization and fibril match --- .../chimera_scripts/generate_copies.py | 8 +++---- .../core/sequence/.optimize_crosslinks.py.swp | Bin 0 -> 65536 bytes .../core/sequence/optimize_crosslinks.py | 8 ++++++- src/colbuilder/core/utils/crosslinks.py | 21 ++++++++++++++++++ 4 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 src/colbuilder/core/sequence/.optimize_crosslinks.py.swp diff --git a/src/colbuilder/chimera_scripts/generate_copies.py b/src/colbuilder/chimera_scripts/generate_copies.py index afcd8c7..481bf4c 100644 --- a/src/colbuilder/chimera_scripts/generate_copies.py +++ b/src/colbuilder/chimera_scripts/generate_copies.py @@ -46,10 +46,10 @@ def apply_unit_cell_translation(model, translation, cell_params): TRANSLATIONS = [ # (-4, 0, -4), # D4 = For strand 1 (blue) - top (1-2 interactions) # (-3, 0, -3), # D3 =For strand 2 (green) - # (-2, 0, -2), # D2 =For strand 3 (pink) - # (-1, 0, -1), # D1 = For strand 4 (purple) - (0, 0, 0), # D0 = For strand 5 (orange) - reference position - (-5, 0, -4), # D5 = For strand 1 (blue) - bottom (5-1 interactions) + (-2, 0, -2), # D2 =For strand 3 (pink) + (-1, 0, -1), # D1 = For strand 4 (purple) + # (0, 0, 0), # D0 = For strand 5 (orange) - reference position + # (-5, 0, -4), # D5 = For strand 1 (blue) - bottom (5-1 interactions) ] input_pdb = os.environ.get("INPUT_PDB") diff --git a/src/colbuilder/core/sequence/.optimize_crosslinks.py.swp b/src/colbuilder/core/sequence/.optimize_crosslinks.py.swp new file mode 100644 index 0000000000000000000000000000000000000000..ed52addfebcc948ad1e8d95616c25b93038a5a8f GIT binary patch literal 65536 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 rT^qy7J0O5cJUR$C`KI0)=~nlpm04_a!V7k4<0 PDB.Structure.Structure: """Load PDB structure from file.""" parser = PDB.PDBParser() + print(f"\nreading file {Path(filename).resolve()}\n") return parser.get_structure("molecule", filename) def save_pdb(structure: PDB.Structure.Structure, filename: Union[str, Path]) -> None: """Save structure to PDB file.""" + print(f"\nwriting file {Path(filename).resolve()}\n") io = PDB.PDBIO() io.set_structure(structure) io.save(filename) @@ -1012,6 +1015,7 @@ def optimize_crosslink( LOG.debug("\nPhase 1: Backbone exploration") angle_steps = np.linspace(-np.pi / 2, np.pi / 2, 8) for residue_type in residue_types: + restype_best_tracker = TransformationTracker() for angle in angle_steps: structures_copy = {k: v.copy() for k, v in best_structures.items()} temp_tracker = TransformationTracker() @@ -1032,12 +1036,13 @@ def optimize_crosslink( if current_distance < best_distance: best_distance = current_distance best_structures = {k: v.copy() for k, v in structures_copy.items()} - best_tracker = temp_tracker.copy() + restype_best_tracker = temp_tracker.copy() current_tracker.update_from(temp_tracker) if is_divalent: LOG.debug(f"Improved distance: {dist1:.2f}") else: LOG.debug(f"Improved: {dist1:.2f}, {dist2:.2f}") + best_tracker = current_tracker.copy() # Phase 2: Main optimization LOG.debug("\nPhase 2: Main optimization") @@ -1228,6 +1233,7 @@ def optimize_structure( # If this is the first crosslink and we have a previous best, pass it crosslink_previous_best = previous_best_distance if i == 0 else float("inf") + #breakpoint() structures, crosslink_tracker = optimize_crosslink( structures, crosslink, diff --git a/src/colbuilder/core/utils/crosslinks.py b/src/colbuilder/core/utils/crosslinks.py index 537a353..f37adf8 100644 --- a/src/colbuilder/core/utils/crosslinks.py +++ b/src/colbuilder/core/utils/crosslinks.py @@ -229,6 +229,9 @@ async def optimize(self, input_pdb: Path, output_pdb: Path) -> Tuple[float, Path SystemError: If Chimera process fails """ try: + print(f"optimize input path: {input_pdb}") + print(f"optimize output path: {output_pdb}") + crosslink_info = self._prepare_crosslink_info() max_total_distance = self._get_distance_threshold() LOG.debug(f"Maximum distance threshold: {max_total_distance} Å") @@ -249,8 +252,17 @@ async def optimize(self, input_pdb: Path, output_pdb: Path) -> Tuple[float, Path # Generate new copies based on the current best input generated_pdbs = await self._generate_copies(best_input) + + print(f"optimize generated_pdbs:") + for path in generated_pdbs: + print(path) + all_generated_pdbs.extend(generated_pdbs) + print(f"optimize all_generated_pdbs:") + for path in all_generated_pdbs: + print(path) + if len(generated_pdbs) < 2: raise SequenceGenerationError( "Not enough PDB copies generated for optimization", @@ -265,6 +277,11 @@ async def optimize(self, input_pdb: Path, output_pdb: Path) -> Tuple[float, Path iteration_pdbs.append(iteration_pdb) # Pass the current best distance to optimize_structure + print(f"\n optimize structure args:") + print(f"optimize initial_pdb: {best_input}") + print(f"optimize copy1_pdb: {Path(generated_pdbs[0]).resolve()}") + print(f"optimize copy2_pdb: {Path(generated_pdbs[1]).resolve()}") + print(f"optimize optimized_pdb: {iteration_pdb}\n") total_distance, tracker, _ = optimize_structure( initial_pdb=str(best_input), copy1_pdb=str(generated_pdbs[0]), @@ -333,9 +350,13 @@ async def optimize(self, input_pdb: Path, output_pdb: Path) -> Tuple[float, Path async def _generate_copies(self, input_pdb: Path) -> List[Path]: """Generate copies using Chimera.""" try: + print(f"_generate_copies input pdb: {input_pdb}") + generate_copies_script = self.chimera_scripts_dir / "generate_copies.py" generated_pdbs_file = Path("generated_pdbs.txt") + print(f"_generate_copies generated_pdbs_file {generated_pdbs_file}") + env = os.environ.copy() env["INPUT_PDB"] = str(input_pdb) From b2f412bcfcea520b6f4828dd3e9f37f2dd91d51d Mon Sep 17 00:00:00 2001 From: gggguido Date: Tue, 1 Jul 2025 11:02:22 +0200 Subject: [PATCH 2/3] bugfix and new crosslink sites --- src/colbuilder/core/geometry/crosslink.py | 17 ++ .../core/sequence/.optimize_crosslinks.py.swp | Bin 65536 -> 0 bytes .../core/sequence/optimize_crosslinks.py | 7 +- .../data/sequence/.crosslinks.csv.swp | Bin 0 -> 155648 bytes src/colbuilder/data/sequence/crosslinks.csv | 232 +++++++++++++++++- 5 files changed, 251 insertions(+), 5 deletions(-) delete mode 100644 src/colbuilder/core/sequence/.optimize_crosslinks.py.swp create mode 100644 src/colbuilder/data/sequence/.crosslinks.csv.swp diff --git a/src/colbuilder/core/geometry/crosslink.py b/src/colbuilder/core/geometry/crosslink.py index 48cec5f..7b1eb7b 100644 --- a/src/colbuilder/core/geometry/crosslink.py +++ b/src/colbuilder/core/geometry/crosslink.py @@ -137,4 +137,21 @@ def read_crosslink(pdb_file: Union[str, Path]) -> List[Crosslink]: ) ) + elif (line[17:20] in ("LZD") and line[13:15] == "CE") or ( + line[17:20] in ("LZS") and line[13:15] == "NZ1" + ): + crosslinks.append( + Crosslink( + resid=line[22:26].strip(), + resname=line[17:20], + chain=line[21], + position=[ + float(line[29:38]), + float(line[38:46]), + float(line[46:56]), + ], + type="D", + ) + ) + return crosslinks diff --git a/src/colbuilder/core/sequence/.optimize_crosslinks.py.swp b/src/colbuilder/core/sequence/.optimize_crosslinks.py.swp deleted file mode 100644 index ed52addfebcc948ad1e8d95616c25b93038a5a8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65536 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 literal 0 HcmV?d00001 diff --git a/src/colbuilder/data/sequence/crosslinks.csv b/src/colbuilder/data/sequence/crosslinks.csv index e90c174..5a01c91 100644 --- a/src/colbuilder/data/sequence/crosslinks.csv +++ b/src/colbuilder/data/sequence/crosslinks.csv @@ -55,6 +55,49 @@ ailuropoda_melanoleuca,LYS,N,9.C - 947.A,deHLNL,LX5,NZ,9.C,LX4,CE,947.A,NONE,NON ailuropoda_melanoleuca,LYS,N,9.C - 947.B,deHLNL,LX5,NZ,9.C,LX4,CE,947.B,NONE,NONE,NONE,NONE ailuropoda_melanoleuca,LYS,N,947.A - 6.B,deHLNL,LX5,NZ,6.B,LX4,CE,947.A,NONE,NONE,NONE,NONE ailuropoda_melanoleuca,LYS,N,6.B - 947.B,deHLNL,LX5,NZ,6.B,LX4,CE,947.B,NONE,NONE,NONE,NONE +ailuropoda_melanoleuca,LYS,N,901.A - 665.A,MOLD,LZS,NZ1,901.A,LZD,CE,665.A,NONE,NONE,NONE,NONE +ailuropoda_melanoleuca,LYS,N,901.A - 665.C,MOLD,LZS,NZ1,901.A,LZD,CE,665.C,NONE,NONE,NONE,NONE +ailuropoda_melanoleuca,LYS,N,665.A - 422.B,MOLD,LZS,NZ1,665.A,LZD,CE,422.B,NONE,NONE,NONE,NONE +ailuropoda_melanoleuca,LYS,N,662.B - 422.B,MOLD,LZS,NZ1,662.B,LZD,CE,422.B,NONE,NONE,NONE,NONE +ailuropoda_melanoleuca,LYS,N,662.B - 425.C,MOLD,LZS,NZ1,662.B,LZD,CE,425.C,NONE,NONE,NONE,NONE +ailuropoda_melanoleuca,LYS,N,104.A - 1047.A,MOLD,LZS,NZ1,104.A,LZD,CE,1047.A,NONE,NONE,NONE,NONE +ailuropoda_melanoleuca,LYS,N,6.B - 947.A,MOLD,LZS,NZ1,6.B,LZD,CE,947.A,NONE,NONE,NONE,NONE +ailuropoda_melanoleuca,LYS,N,99.B - 1047.A,MOLD,LZS,NZ1,99.B,LZD,CE,1047.A,NONE,NONE,NONE,NONE +ailuropoda_melanoleuca,LYS,N,6.B - 947.B,MOLD,LZS,NZ1,6.B,LZD,CE,947.B,NONE,NONE,NONE,NONE +ailuropoda_melanoleuca,LYS,N,99.B - 1047.C,MOLD,LZS,NZ1,99.B,LZD,CE,1047.C,NONE,NONE,NONE,NONE +ailuropoda_melanoleuca,LYS,N,9.C - 947.A,MOLD,LZS,NZ1,9.C,LZD,CE,947.A,NONE,NONE,NONE,NONE +ailuropoda_melanoleuca,LYS,N,104.C - 1047.A,MOLD,LZS,NZ1,104.C,LZD,CE,1047.A,NONE,NONE,NONE,NONE +ailuropoda_melanoleuca,LYS,N,9.C - 947.B,MOLD,LZS,NZ1,9.C,LZD,CE,947.B,NONE,NONE,NONE,NONE +ailuropoda_melanoleuca,LYS,N,104.C - 1047.C,MOLD,LZS,NZ1,104.C,LZD,CE,1047.C,NONE,NONE,NONE,NONE +ailuropoda_melanoleuca,LYS,N,581.A - 344.A,MOLD,LZS,NZ1,581.A,LZD,CE,344.A,NONE,NONE,NONE,NONE +ailuropoda_melanoleuca,LYS,N,581.C - 344.A,MOLD,LZS,NZ1,581.C,LZD,CE,344.A,NONE,NONE,NONE,NONE +ailuropoda_melanoleuca,LYS,N,425.A - 192.A,MOLD,LZS,NZ1,425.A,LZD,CE,192.A,NONE,NONE,NONE,NONE +ailuropoda_melanoleuca,LYS,N,425.A - 186.B,MOLD,LZS,NZ1,425.A,LZD,CE,186.B,NONE,NONE,NONE,NONE +ailuropoda_melanoleuca,LYS,N,425.A - 192.C,MOLD,LZS,NZ1,425.A,LZD,CE,192.C,NONE,NONE,NONE,NONE +ailuropoda_melanoleuca,LYS,N,422.B - 186.B,MOLD,LZS,NZ1,422.B,LZD,CE,186.B,NONE,NONE,NONE,NONE +ailuropoda_melanoleuca,LYS,N,422.B - 192.C,MOLD,LZS,NZ1,422.B,LZD,CE,192.C,NONE,NONE,NONE,NONE +ailuropoda_melanoleuca,LYS,N,425.C - 192.C,MOLD,LZS,NZ1,425.C,LZD,CE,192.C,NONE,NONE,NONE,NONE +ailuropoda_melanoleuca,LYS,N,359.A - 125.A,MOLD,LZS,NZ1,359.A,LZD,CE,125.A,NONE,NONE,NONE,NONE +ailuropoda_melanoleuca,LYS,N,307.A - 76.C,MOLD,LZS,NZ1,307.A,LZD,CE,76.C,NONE,NONE,NONE,NONE +ailuropoda_melanoleuca,LYS,N,359.A - 125.C,MOLD,LZS,NZ1,359.A,LZD,CE,125.C,NONE,NONE,NONE,NONE +ailuropoda_melanoleuca,LYS,N,237.C - 9.A,MOLD,LZS,NZ1,237.C,LZD,CE,9.A,NONE,NONE,NONE,NONE +ailuropoda_melanoleuca,LYS,N,344.C - 111.B,MOLD,LZS,NZ1,344.C,LZD,CE,111.B,NONE,NONE,NONE,NONE +ailuropoda_melanoleuca,LYS,N,359.C - 125.C,MOLD,LZS,NZ1,359.C,LZD,CE,125.C,NONE,NONE,NONE,NONE +ailuropoda_melanoleuca,LYS,N,898.B - 662.B,MOLD,LZS,NZ1,898.B,LZD,CE,662.B,NONE,NONE,NONE,NONE +ailuropoda_melanoleuca,LYS,N,598.A - 359.A,MOLD,LZS,NZ1,598.A,LZD,CE,359.A,NONE,NONE,NONE,NONE +ailuropoda_melanoleuca,LYS,N,674.A - 433.A,MOLD,LZS,NZ1,674.A,LZD,CE,433.A,NONE,NONE,NONE,NONE +ailuropoda_melanoleuca,LYS,N,674.A - 430.B,MOLD,LZS,NZ1,674.A,LZD,CE,430.B,NONE,NONE,NONE,NONE +ailuropoda_melanoleuca,LYS,N,674.A - 434.B,MOLD,LZS,NZ1,674.A,LZD,CE,434.B,NONE,NONE,NONE,NONE +ailuropoda_melanoleuca,LYS,N,581.A - 344.C,MOLD,LZS,NZ1,581.A,LZD,CE,344.C,NONE,NONE,NONE,NONE +ailuropoda_melanoleuca,LYS,N,598.A - 359.C,MOLD,LZS,NZ1,598.A,LZD,CE,359.C,NONE,NONE,NONE,NONE +ailuropoda_melanoleuca,LYS,N,665.A - 425.C,MOLD,LZS,NZ1,665.A,LZD,CE,425.C,NONE,NONE,NONE,NONE +ailuropoda_melanoleuca,LYS,N,674.A - 433.C,MOLD,LZS,NZ1,674.A,LZD,CE,433.C,NONE,NONE,NONE,NONE +ailuropoda_melanoleuca,LYS,N,668.B - 433.A,MOLD,LZS,NZ1,668.B,LZD,CE,433.A,NONE,NONE,NONE,NONE +ailuropoda_melanoleuca,LYS,N,590.C - 359.A,MOLD,LZS,NZ1,590.C,LZD,CE,359.A,NONE,NONE,NONE,NONE +ailuropoda_melanoleuca,LYS,N,665.C - 433.A,MOLD,LZS,NZ1,665.C,LZD,CE,433.A,NONE,NONE,NONE,NONE +ailuropoda_melanoleuca,LYS,N,665.C - 425.C,MOLD,LZS,NZ1,665.C,LZD,CE,425.C,NONE,NONE,NONE,NONE +ailuropoda_melanoleuca,LYS,N,467.B - 231.B,MOLD,LZS,NZ1,467.B,LZD,CE,231.B,NONE,NONE,NONE,NONE +ailuropoda_melanoleuca,LYS,N,231.B - 938.B,MOLD,LZS,NZ1,231.B,LZD,CE,938.B,NONE,NONE,NONE,NONE bos_taurus,LYS,C,1046.C - 1046.A -103.C,DPD,LX3,CG,1046.C,LX2,CB,1046.A,LXX,C13,C12,103.C bos_taurus,LYS,C,1046.C - 1046.A - 96.B,DPD,LX3,CG,1046.C,LX2,CB,1046.A,LXX,C13,C12,96.B bos_taurus,LYS,N,5.B - 9.C - 942.B,DPD,LX3,CG,9.C,LX2,CB,5.B,LXX,C13,C12,942.B @@ -111,6 +154,47 @@ bos_taurus,LYS,N,9.C - 946.A,deHLNL,LX5,NZ,9.C,LX4,CE,946.A,NONE,NONE,NONE,NONE bos_taurus,LYS,N,9.C - 942.B,deHLNL,LX5,NZ,9.C,LX4,CE,942.B,NONE,NONE,NONE,NONE bos_taurus,LYS,N,946.A - 5.B,deHLNL,LX5,NZ,5.B,LX4,CE,946.A,NONE,NONE,NONE,NONE bos_taurus,LYS,N,5.B - 942.B,deHLNL,LX5,NZ,5.B,LX4,CE,942.B,NONE,NONE,NONE,NONE +bos_taurus,LYS,N,900.A - 664.A,MOLD,LZS,NZ1,900.A,LZD,CE,664.A,NONE,NONE,NONE,NONE +bos_taurus,LYS,N,900.A - 664.C,MOLD,LZS,NZ1,900.A,LZD,CE,664.C,NONE,NONE,NONE,NONE +bos_taurus,LYS,N,664.A - 417.B,MOLD,LZS,NZ1,664.A,LZD,CE,417.B,NONE,NONE,NONE,NONE +bos_taurus,LYS,N,657.B - 417.B,MOLD,LZS,NZ1,657.B,LZD,CE,417.B,NONE,NONE,NONE,NONE +bos_taurus,LYS,N,657.B - 424.C,MOLD,LZS,NZ1,657.B,LZD,CE,424.C,NONE,NONE,NONE,NONE +bos_taurus,LYS,N,103.A - 1046.A,MOLD,LZS,NZ1,103.A,LZD,CE,1046.A,NONE,NONE,NONE,NONE +bos_taurus,LYS,N,5.B - 946.A,MOLD,LZS,NZ1,5.B,LZD,CE,946.A,NONE,NONE,NONE,NONE +bos_taurus,LYS,N,96.B - 1046.A,MOLD,LZS,NZ1,96.B,LZD,CE,1046.A,NONE,NONE,NONE,NONE +bos_taurus,LYS,N,5.B - 942.B,MOLD,LZS,NZ1,5.B,LZD,CE,942.B,NONE,NONE,NONE,NONE +bos_taurus,LYS,N,96.B - 1046.C,MOLD,LZS,NZ1,96.B,LZD,CE,1046.C,NONE,NONE,NONE,NONE +bos_taurus,LYS,N,9.C - 946.A,MOLD,LZS,NZ1,9.C,LZD,CE,946.A,NONE,NONE,NONE,NONE +bos_taurus,LYS,N,103.C - 1046.A,MOLD,LZS,NZ1,103.C,LZD,CE,1046.A,NONE,NONE,NONE,NONE +bos_taurus,LYS,N,9.C - 942.B,MOLD,LZS,NZ1,9.C,LZD,CE,942.B,NONE,NONE,NONE,NONE +bos_taurus,LYS,N,103.C - 1046.C,MOLD,LZS,NZ1,103.C,LZD,CE,1046.C,NONE,NONE,NONE,NONE +bos_taurus,LYS,N,580.A - 343.A,MOLD,LZS,NZ1,580.A,LZD,CE,343.A,NONE,NONE,NONE,NONE +bos_taurus,LYS,N,580.C - 343.A,MOLD,LZS,NZ1,580.C,LZD,CE,343.A,NONE,NONE,NONE,NONE +bos_taurus,LYS,N,424.A - 190.A,MOLD,LZS,NZ1,424.A,LZD,CE,190.A,NONE,NONE,NONE,NONE +bos_taurus,LYS,N,424.A - 183.B,MOLD,LZS,NZ1,424.A,LZD,CE,183.B,NONE,NONE,NONE,NONE +bos_taurus,LYS,N,424.A - 190.C,MOLD,LZS,NZ1,424.A,LZD,CE,190.C,NONE,NONE,NONE,NONE +bos_taurus,LYS,N,417.B - 183.B,MOLD,LZS,NZ1,417.B,LZD,CE,183.B,NONE,NONE,NONE,NONE +bos_taurus,LYS,N,417.B - 190.C,MOLD,LZS,NZ1,417.B,LZD,CE,190.C,NONE,NONE,NONE,NONE +bos_taurus,LYS,N,424.C - 190.C,MOLD,LZS,NZ1,424.C,LZD,CE,190.C,NONE,NONE,NONE,NONE +bos_taurus,LYS,N,358.A - 124.A,MOLD,LZS,NZ1,358.A,LZD,CE,124.A,NONE,NONE,NONE,NONE +bos_taurus,LYS,N,306.A - 75.C,MOLD,LZS,NZ1,306.A,LZD,CE,75.C,NONE,NONE,NONE,NONE +bos_taurus,LYS,N,358.A - 124.C,MOLD,LZS,NZ1,358.A,LZD,CE,124.C,NONE,NONE,NONE,NONE +bos_taurus,LYS,N,343.C - 108.B,MOLD,LZS,NZ1,343.C,LZD,CE,108.B,NONE,NONE,NONE,NONE +bos_taurus,LYS,N,306.C - 75.C,MOLD,LZS,NZ1,306.C,LZD,CE,75.C,NONE,NONE,NONE,NONE +bos_taurus,LYS,N,358.C - 124.C,MOLD,LZS,NZ1,358.C,LZD,CE,124.C,NONE,NONE,NONE,NONE +bos_taurus,LYS,N,893.B - 657.B,MOLD,LZS,NZ1,893.B,LZD,CE,657.B,NONE,NONE,NONE,NONE +bos_taurus,LYS,N,597.A - 358.A,MOLD,LZS,NZ1,597.A,LZD,CE,358.A,NONE,NONE,NONE,NONE +bos_taurus,LYS,N,673.A - 432.A,MOLD,LZS,NZ1,673.A,LZD,CE,432.A,NONE,NONE,NONE,NONE +bos_taurus,LYS,N,673.A - 429.B,MOLD,LZS,NZ1,673.A,LZD,CE,429.B,NONE,NONE,NONE,NONE +bos_taurus,LYS,N,580.A - 343.C,MOLD,LZS,NZ1,580.A,LZD,CE,343.C,NONE,NONE,NONE,NONE +bos_taurus,LYS,N,597.A - 358.C,MOLD,LZS,NZ1,597.A,LZD,CE,358.C,NONE,NONE,NONE,NONE +bos_taurus,LYS,N,664.A - 424.C,MOLD,LZS,NZ1,664.A,LZD,CE,424.C,NONE,NONE,NONE,NONE +bos_taurus,LYS,N,673.A - 432.C,MOLD,LZS,NZ1,673.A,LZD,CE,432.C,NONE,NONE,NONE,NONE +bos_taurus,LYS,N,663.B - 432.A,MOLD,LZS,NZ1,663.B,LZD,CE,432.A,NONE,NONE,NONE,NONE +bos_taurus,LYS,N,589.C - 358.A,MOLD,LZS,NZ1,589.C,LZD,CE,358.A,NONE,NONE,NONE,NONE +bos_taurus,LYS,N,664.C - 432.A,MOLD,LZS,NZ1,664.C,LZD,CE,432.A,NONE,NONE,NONE,NONE +bos_taurus,LYS,N,664.C - 424.C,MOLD,LZS,NZ1,664.C,LZD,CE,424.C,NONE,NONE,NONE,NONE +bos_taurus,LYS,N,462.B - 228.B,MOLD,LZS,NZ1,462.B,LZD,CE,228.B,NONE,NONE,NONE,NONE callithrix_jacchus,LYS,C,1047.C - 1047.A - 104.C,DPD,LX3,CG,1047.C,LX2,CB,1047.A,LXX,C13,C12,104.C callithrix_jacchus,LYS,C,1047.C - 1047.A - 98.B,DPD,LX3,CG,1047.C,LX2,CB,1047.A,LXX,C13,C12,98.B callithrix_jacchus,LYS,N,9.C - 5.B - 944.B,DPD,LX3,CG,9.C,LX2,CB,5.B,LXX,C13,C12,944.B @@ -167,6 +251,45 @@ callithrix_jacchus,LYS,N,9.C - 947.A,deHLNL,LX5,NZ,9.C,LX4,CE,947.A,NONE,NONE,NO callithrix_jacchus,LYS,N,9.C - 944.B,deHLNL,LX5,NZ,9.C,LX4,CE,944.B,NONE,NONE,NONE,NONE callithrix_jacchus,LYS,N,947.A - 5.B,deHLNL,LX5,NZ,5.B,LX4,CE,947.A,NONE,NONE,NONE,NONE callithrix_jacchus,LYS,N,5.B - 944.B,deHLNL,LX5,NZ,5.B,LX4,CE,944.B,NONE,NONE,NONE,NONE +callithrix_jacchus,LYS,N,901.A - 665.A,MOLD,LZS,NZ1,901.A,LZD,CE,665.A,NONE,NONE,NONE,NONE +callithrix_jacchus,LYS,N,901.A - 665.C,MOLD,LZS,NZ1,901.A,LZD,CE,665.C,NONE,NONE,NONE,NONE +callithrix_jacchus,LYS,N,665.A - 419.B,MOLD,LZS,NZ1,665.A,LZD,CE,419.B,NONE,NONE,NONE,NONE +callithrix_jacchus,LYS,N,659.B - 419.B,MOLD,LZS,NZ1,659.B,LZD,CE,419.B,NONE,NONE,NONE,NONE +callithrix_jacchus,LYS,N,659.B - 425.C,MOLD,LZS,NZ1,659.B,LZD,CE,425.C,NONE,NONE,NONE,NONE +callithrix_jacchus,LYS,N,104.A - 1047.A,MOLD,LZS,NZ1,104.A,LZD,CE,1047.A,NONE,NONE,NONE,NONE +callithrix_jacchus,LYS,N,5.B - 947.A,MOLD,LZS,NZ1,5.B,LZD,CE,947.A,NONE,NONE,NONE,NONE +callithrix_jacchus,LYS,N,98.B - 1047.A,MOLD,LZS,NZ1,98.B,LZD,CE,1047.A,NONE,NONE,NONE,NONE +callithrix_jacchus,LYS,N,5.B - 944.B,MOLD,LZS,NZ1,5.B,LZD,CE,944.B,NONE,NONE,NONE,NONE +callithrix_jacchus,LYS,N,98.B - 1047.C,MOLD,LZS,NZ1,98.B,LZD,CE,1047.C,NONE,NONE,NONE,NONE +callithrix_jacchus,LYS,N,9.C - 947.A,MOLD,LZS,NZ1,9.C,LZD,CE,947.A,NONE,NONE,NONE,NONE +callithrix_jacchus,LYS,N,104.C - 1047.A,MOLD,LZS,NZ1,104.C,LZD,CE,1047.A,NONE,NONE,NONE,NONE +callithrix_jacchus,LYS,N,9.C - 944.B,MOLD,LZS,NZ1,9.C,LZD,CE,944.B,NONE,NONE,NONE,NONE +callithrix_jacchus,LYS,N,104.C - 1047.C,MOLD,LZS,NZ1,104.C,LZD,CE,1047.C,NONE,NONE,NONE,NONE +callithrix_jacchus,LYS,N,581.A - 344.A,MOLD,LZS,NZ1,581.A,LZD,CE,344.A,NONE,NONE,NONE,NONE +callithrix_jacchus,LYS,N,581.C - 344.A,MOLD,LZS,NZ1,581.C,LZD,CE,344.A,NONE,NONE,NONE,NONE +callithrix_jacchus,LYS,N,425.A - 191.A,MOLD,LZS,NZ1,425.A,LZD,CE,191.A,NONE,NONE,NONE,NONE +callithrix_jacchus,LYS,N,425.A - 185.B,MOLD,LZS,NZ1,425.A,LZD,CE,185.B,NONE,NONE,NONE,NONE +callithrix_jacchus,LYS,N,425.A - 191.C,MOLD,LZS,NZ1,425.A,LZD,CE,191.C,NONE,NONE,NONE,NONE +callithrix_jacchus,LYS,N,419.B - 185.B,MOLD,LZS,NZ1,419.B,LZD,CE,185.B,NONE,NONE,NONE,NONE +callithrix_jacchus,LYS,N,419.B - 191.C,MOLD,LZS,NZ1,419.B,LZD,CE,191.C,NONE,NONE,NONE,NONE +callithrix_jacchus,LYS,N,425.C - 191.C,MOLD,LZS,NZ1,425.C,LZD,CE,191.C,NONE,NONE,NONE,NONE +callithrix_jacchus,LYS,N,359.A - 125.A,MOLD,LZS,NZ1,359.A,LZD,CE,125.A,NONE,NONE,NONE,NONE +callithrix_jacchus,LYS,N,307.A - 76.C,MOLD,LZS,NZ1,307.A,LZD,CE,76.C,NONE,NONE,NONE,NONE +callithrix_jacchus,LYS,N,359.A - 125.C,MOLD,LZS,NZ1,359.A,LZD,CE,125.C,NONE,NONE,NONE,NONE +callithrix_jacchus,LYS,N,236.C - 9.A,MOLD,LZS,NZ1,236.C,LZD,CE,9.A,NONE,NONE,NONE,NONE +callithrix_jacchus,LYS,N,344.C - 110.B,MOLD,LZS,NZ1,344.C,LZD,CE,110.B,NONE,NONE,NONE,NONE +callithrix_jacchus,LYS,N,359.C - 125.C,MOLD,LZS,NZ1,359.C,LZD,CE,125.C,NONE,NONE,NONE,NONE +callithrix_jacchus,LYS,N,895.B - 659.B,MOLD,LZS,NZ1,895.B,LZD,CE,659.B,NONE,NONE,NONE,NONE +callithrix_jacchus,LYS,N,598.A - 359.A,MOLD,LZS,NZ1,598.A,LZD,CE,359.A,NONE,NONE,NONE,NONE +callithrix_jacchus,LYS,N,674.A - 433.A,MOLD,LZS,NZ1,674.A,LZD,CE,433.A,NONE,NONE,NONE,NONE +callithrix_jacchus,LYS,N,674.A - 431.B,MOLD,LZS,NZ1,674.A,LZD,CE,431.B,NONE,NONE,NONE,NONE +callithrix_jacchus,LYS,N,598.A - 359.C,MOLD,LZS,NZ1,598.A,LZD,CE,359.C,NONE,NONE,NONE,NONE +callithrix_jacchus,LYS,N,665.A - 425.C,MOLD,LZS,NZ1,665.A,LZD,CE,425.C,NONE,NONE,NONE,NONE +callithrix_jacchus,LYS,N,674.A - 433.C,MOLD,LZS,NZ1,674.A,LZD,CE,433.C,NONE,NONE,NONE,NONE +callithrix_jacchus,LYS,N,665.B - 433.A,MOLD,LZS,NZ1,665.B,LZD,CE,433.A,NONE,NONE,NONE,NONE +callithrix_jacchus,LYS,N,590.C - 359.A,MOLD,LZS,NZ1,590.C,LZD,CE,359.A,NONE,NONE,NONE,NONE +callithrix_jacchus,LYS,N,665.C - 433.A,MOLD,LZS,NZ1,665.C,LZD,CE,433.A,NONE,NONE,NONE,NONE +callithrix_jacchus,LYS,N,665.C - 425.C,MOLD,LZS,NZ1,665.C,LZD,CE,425.C,NONE,NONE,NONE,NONE canis_lupus,LYS,C,1047.C - 1047.A - 104.C,DPD,LX3,CG,1047.C,LX2,CB,1047.A,LXX,C13,C12,104.C canis_lupus,LYS,C,1047.C - 1047.A - 98.B,DPD,LX3,CG,1047.C,LX2,CB,1047.A,LXX,C13,C12,98.B canis_lupus,LYS,N,9.C - 5.B - 944.B,DPD,LX3,CG,9.C,LX2,CB,5.B,LXX,C13,C12,944.B @@ -951,9 +1074,114 @@ rattus_norvegicus,LYS,N,9.C - 946.A,deHLNL,LX5,NZ,9.C,LX4,CE,946.A,NONE,NONE,NON rattus_norvegicus,LYS,N,9.C - 944.B,deHLNL,LX5,NZ,9.C,LX4,CE,944.B,NONE,NONE,NONE,NONE rattus_norvegicus,LYS,N,946.A - 5.B,deHLNL,LX5,NZ,5.B,LX4,CE,946.A,NONE,NONE,NONE,NONE rattus_norvegicus,LYS,N,5.B - 944.B,deHLNL,LX5,NZ,5.B,LX4,CE,944.B,NONE,NONE,NONE,NONE -rattus_norvegicus,ARG_LYS,C,101.B - 1046.A,Glucosepane,AGS,NZ,101.B,LGX,CE,1046.A,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,900.A - 664.A,MOLD,LZS,NZ1,900.A,LZD,CE,664.A,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,900.A - 664.C,MOLD,LZS,NZ1,900.A,LZD,CE,664.C,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,664.A - 419.B,MOLD,LZS,NZ1,664.A,LZD,CE,419.B,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,659.B - 419.B,MOLD,LZS,NZ1,659.B,LZD,CE,419.B,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,659.B - 424.C,MOLD,LZS,NZ1,659.B,LZD,CE,424.C,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,103.A - 1046.A,MOLD,LZS,NZ1,103.A,LZD,CE,1046.A,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,5.B - 946.A,MOLD,LZS,NZ1,5.B,LZD,CE,946.A,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,98.B - 1046.A,MOLD,LZS,NZ1,98.B,LZD,CE,1046.A,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,5.B - 944.B,MOLD,LZS,NZ1,5.B,LZD,CE,944.B,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,98.B - 1046.C,MOLD,LZS,NZ1,98.B,LZD,CE,1046.C,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,9.C - 946.A,MOLD,LZS,NZ1,9.C,LZD,CE,946.A,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,103.C - 1046.A,MOLD,LZS,NZ1,103.C,LZD,CE,1046.A,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,9.C - 944.B,MOLD,LZS,NZ1,9.C,LZD,CE,944.B,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,103.C - 1046.C,MOLD,LZS,NZ1,103.C,LZD,CE,1046.C,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,580.A - 343.A,MOLD,LZS,NZ1,580.A,LZD,CE,343.A,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,580.C - 343.A,MOLD,LZS,NZ1,580.C,LZD,CE,343.A,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,424.A - 190.A,MOLD,LZS,NZ1,424.A,LZD,CE,190.A,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,424.A - 185.B,MOLD,LZS,NZ1,424.A,LZD,CE,185.B,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,424.A - 190.C,MOLD,LZS,NZ1,424.A,LZD,CE,190.C,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,419.B - 185.B,MOLD,LZS,NZ1,419.B,LZD,CE,185.B,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,419.B - 190.C,MOLD,LZS,NZ1,419.B,LZD,CE,190.C,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,424.C - 190.C,MOLD,LZS,NZ1,424.C,LZD,CE,190.C,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,306.A - 75.A,MOLD,LZS,NZ1,306.A,LZD,CE,75.A,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,358.A - 124.A,MOLD,LZS,NZ1,358.A,LZD,CE,124.A,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,306.A - 75.C,MOLD,LZS,NZ1,306.A,LZD,CE,75.C,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,358.A - 124.C,MOLD,LZS,NZ1,358.A,LZD,CE,124.C,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,343.C - 110.B,MOLD,LZS,NZ1,343.C,LZD,CE,110.B,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,306.C - 75.C,MOLD,LZS,NZ1,306.C,LZD,CE,75.C,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,358.C - 124.C,MOLD,LZS,NZ1,358.C,LZD,CE,124.C,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,895.B - 659.B,MOLD,LZS,NZ1,895.B,LZD,CE,659.B,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,895.B - 662.B,MOLD,LZS,NZ1,895.B,LZD,CE,662.B,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,934.C - 700.C,MOLD,LZS,NZ1,934.C,LZD,CE,700.C,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,597.A - 358.A,MOLD,LZS,NZ1,597.A,LZD,CE,358.A,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,673.A - 432.A,MOLD,LZS,NZ1,673.A,LZD,CE,432.A,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,673.A - 427.B,MOLD,LZS,NZ1,673.A,LZD,CE,427.B,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,673.A - 431.B,MOLD,LZS,NZ1,673.A,LZD,CE,431.B,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,580.A - 343.C,MOLD,LZS,NZ1,580.A,LZD,CE,343.C,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,664.A - 424.C,MOLD,LZS,NZ1,664.A,LZD,CE,424.C,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,673.A - 432.C,MOLD,LZS,NZ1,673.A,LZD,CE,432.C,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,662.B - 432.A,MOLD,LZS,NZ1,662.B,LZD,CE,432.A,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,665.B - 432.A,MOLD,LZS,NZ1,665.B,LZD,CE,432.A,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,589.C - 358.A,MOLD,LZS,NZ1,589.C,LZD,CE,358.A,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,664.C - 432.A,MOLD,LZS,NZ1,664.C,LZD,CE,432.A,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,664.C - 424.C,MOLD,LZS,NZ1,664.C,LZD,CE,424.C,NONE,NONE,NONE,NONE +rattus_norvegicus,LYS,N,464.B - 230.B,MOLD,LZS,NZ1,464.B,LZD,CE,230.B,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,101.B - 1046.A,Glucosepane,AGS,NZ,101.B,LGX,CE,1046.A,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,904.A - 662.B,Glucosepane,AGS,NZ,904.A,LGX,CE,662.B,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,904.A - 665.B,Glucosepane,AGS,NZ,904.A,LGX,CE,665.B,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,899.B - 673.A,Glucosepane,AGS,NZ,899.B,LGX,CE,673.A,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,899.B - 665.B,Glucosepane,AGS,NZ,899.B,LGX,CE,665.B,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,899.B - 668.B,Glucosepane,AGS,NZ,899.B,LGX,CE,668.B,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,106.A - 1046.A,Glucosepane,AGS,NZ,106.A,LGX,CE,1046.A,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,106.A - 1046.C,Glucosepane,AGS,NZ,106.A,LGX,CE,1046.C,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,101.B - 1046.A,Glucosepane,AGS,NZ,101.B,LGX,CE,1046.A,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,101.B - 1046.C,Glucosepane,AGS,NZ,101.B,LGX,CE,1046.C,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,106.C - 1046.A,Glucosepane,AGS,NZ,106.C,LGX,CE,1046.A,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,106.C - 1046.C,Glucosepane,AGS,NZ,106.C,LGX,CE,1046.C,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,523.A - 286.A,Glucosepane,AGS,NZ,523.A,LGX,CE,286.A,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,523.A - 281.B,Glucosepane,AGS,NZ,523.A,LGX,CE,281.B,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,509.B - 280.A,Glucosepane,AGS,NZ,509.B,LGX,CE,280.A,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,469.C - 235.A,Glucosepane,AGS,NZ,469.C,LGX,CE,235.A,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,514.C - 280.A,Glucosepane,AGS,NZ,514.C,LGX,CE,280.A,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,469.C - 235.C,Glucosepane,AGS,NZ,469.C,LGX,CE,235.C,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,847.B - 619.A,Glucosepane,AGS,NZ,847.B,LGX,CE,619.A,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,307.A - 75.A,Glucosepane,AGS,NZ,307.A,LGX,CE,75.A,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,310.A - 75.A,Glucosepane,AGS,NZ,310.A,LGX,CE,75.A,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,349.A - 115.A,Glucosepane,AGS,NZ,349.A,LGX,CE,115.A,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,307.A - 70.B,Glucosepane,AGS,NZ,307.A,LGX,CE,70.B,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,310.A - 70.B,Glucosepane,AGS,NZ,310.A,LGX,CE,70.B,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,349.A - 110.B,Glucosepane,AGS,NZ,349.A,LGX,CE,110.B,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,307.A - 75.C,Glucosepane,AGS,NZ,307.A,LGX,CE,75.C,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,310.A - 75.C,Glucosepane,AGS,NZ,310.A,LGX,CE,75.C,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,349.A - 115.C,Glucosepane,AGS,NZ,349.A,LGX,CE,115.C,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,353.B - 124.A,Glucosepane,AGS,NZ,353.B,LGX,CE,124.A,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,344.B - 110.B,Glucosepane,AGS,NZ,344.B,LGX,CE,110.B,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,353.B - 119.B,Glucosepane,AGS,NZ,353.B,LGX,CE,119.B,NONE,NONE,NONE,NONE rattus_norvegicus,ARG_LYS,N,353.B - 124.C,Glucosepane,AGS,NZ,353.B,LGX,CE,124.C,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,349.C - 110.B,Glucosepane,AGS,NZ,349.C,LGX,CE,110.B,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,310.C - 75.C,Glucosepane,AGS,NZ,310.C,LGX,CE,75.C,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,349.C - 115.C,Glucosepane,AGS,NZ,349.C,LGX,CE,115.C,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,979.A - 745.A,Glucosepane,AGS,NZ,979.A,LGX,CE,745.A,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,1006.A - 772.A,Glucosepane,AGS,NZ,1006.A,LGX,CE,772.A,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,1008.A - 767.B,Glucosepane,AGS,NZ,1008.A,LGX,CE,767.B,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,979.C - 745.A,Glucosepane,AGS,NZ,979.C,LGX,CE,745.A,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,1055.C - 822.A,Glucosepane,AGS,NZ,1055.C,LGX,CE,822.A,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,931.C - 700.A,Glucosepane,AGS,NZ,931.C,LGX,CE,700.A,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,931.C - 700.C,Glucosepane,AGS,NZ,931.C,LGX,CE,700.C,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,469.A - 235.A,Glucosepane,AGS,NZ,469.A,LGX,CE,235.A,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,514.A - 280.A,Glucosepane,AGS,NZ,514.A,LGX,CE,280.A,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,514.A - 275.B,Glucosepane,AGS,NZ,514.A,LGX,CE,275.B,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,517.A - 275.B,Glucosepane,AGS,NZ,517.A,LGX,CE,275.B,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,514.A - 280.C,Glucosepane,AGS,NZ,514.A,LGX,CE,280.C,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,517.A - 280.C,Glucosepane,AGS,NZ,517.A,LGX,CE,280.C,NONE,NONE,NONE,NONE rattus_norvegicus,ARG_LYS,N,523.A - 286.C,Glucosepane,AGS,NZ,523.A,LGX,CE,286.C,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,494.B - 268.A,Glucosepane,AGS,NZ,494.B,LGX,CE,268.A,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,512.B - 280.A,Glucosepane,AGS,NZ,512.B,LGX,CE,280.A,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,509.B - 275.B,Glucosepane,AGS,NZ,509.B,LGX,CE,275.B,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,512.B - 275.B,Glucosepane,AGS,NZ,512.B,LGX,CE,275.B,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,512.B - 280.C,Glucosepane,AGS,NZ,512.B,LGX,CE,280.C,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,514.C - 275.B,Glucosepane,AGS,NZ,514.C,LGX,CE,275.B,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,517.C - 275.B,Glucosepane,AGS,NZ,517.C,LGX,CE,275.B,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,523.C - 281.B,Glucosepane,AGS,NZ,523.C,LGX,CE,281.B,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,514.C - 280.C,Glucosepane,AGS,NZ,514.C,LGX,CE,280.C,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,302.B - 75.C,Glucosepane,AGS,NZ,302.B,LGX,CE,75.C,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,517.A - 280.A,Glucosepane,AGS,NZ,517.A,LGX,CE,280.A,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,523.C - 286.C,Glucosepane,AGS,NZ,523.C,LGX,CE,286.C,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,1006.A - 767.B,Glucosepane,AGS,NZ,1006.A,LGX,CE,767.B,NONE,NONE,NONE,NONE +rattus_norvegicus,ARG_LYS,N,307.C - 75.C,Glucosepane,AGS,NZ,307.C,LGX,CE,75.C,NONE,NONE,NONE,NONE tetraodon_nigroviridis,LYS,C,1046.C - 1046.A -104.C,DPD,LX3,CG,1046.C,LX2,CB,1046.A,LXX,C13,C12,104.C tetraodon_nigroviridis,LYS,C,1046.C - 1046.A - 99.B,DPD,LX3,CG,1046.C,LX2,CB,1046.A,LXX,C13,C12,99.B tetraodon_nigroviridis,LYS,N,6.B - 9.C - 948.A,DPD,LX3,CG,6.B,LX2,CB,9.C,LXX,C13,C12,948.A @@ -1036,4 +1264,4 @@ xiphophorus_maculatus,LYS,C,103.C - 1044.C,deHLNL,LX5,NZ,1044.C,LX4,CE,103.C,NON xiphophorus_maculatus,LYS,C,1044.A - 99.B,deHLNL,LX5,NZ,1044.A,LX4,CE,99.B,NONE,NONE,NONE,NONE xiphophorus_maculatus,LYS,C,1044.C - 99.B,deHLNL,LX5,NZ,1044.C,LX4,CE,99.B,NONE,NONE,NONE,NONE xiphophorus_maculatus,LYS,N,9.C - 946.A,deHLNL,LX5,NZ,9.C,LX4,CE,946.A,NONE,NONE,NONE,NONE -xiphophorus_maculatus,LYS,N,946.A - 6.B,deHLNL,LX5,NZ,6.B,LX4,CE,946.A,NONE,NONE,NONE,NONE \ No newline at end of file +xiphophorus_maculatus,LYS,N,946.A - 6.B,deHLNL,LX5,NZ,6.B,LX4,CE,946.A,NONE,NONE,NONE,NONE From adee6c0bb77fe42c822164d7b7f891a225b8249f Mon Sep 17 00:00:00 2001 From: gggguido Date: Tue, 1 Jul 2025 11:27:19 +0200 Subject: [PATCH 3/3] cleanup --- .../core/sequence/optimize_crosslinks.py | 4 ---- src/colbuilder/core/utils/crosslinks.py | 17 ----------------- 2 files changed, 21 deletions(-) diff --git a/src/colbuilder/core/sequence/optimize_crosslinks.py b/src/colbuilder/core/sequence/optimize_crosslinks.py index 35b3fd1..c05cb2e 100644 --- a/src/colbuilder/core/sequence/optimize_crosslinks.py +++ b/src/colbuilder/core/sequence/optimize_crosslinks.py @@ -91,7 +91,6 @@ import numpy.typing as npt from Bio.PDB.Residue import Residue from Bio.PDB.Structure import Structure -import subprocess from colbuilder.core.utils.logger import setup_logger @@ -103,13 +102,11 @@ def load_pdb(filename: Union[str, Path]) -> PDB.Structure.Structure: """Load PDB structure from file.""" parser = PDB.PDBParser() - print(f"\nreading file {Path(filename).resolve()}\n") return parser.get_structure("molecule", filename) def save_pdb(structure: PDB.Structure.Structure, filename: Union[str, Path]) -> None: """Save structure to PDB file.""" - print(f"\nwriting file {Path(filename).resolve()}\n") io = PDB.PDBIO() io.set_structure(structure) io.save(filename) @@ -1234,7 +1231,6 @@ def optimize_structure( # If this is the first crosslink and we have a previous best, pass it crosslink_previous_best = previous_best_distance if i == 0 else float("inf") - #breakpoint() structures, crosslink_tracker = optimize_crosslink( structures, crosslink, diff --git a/src/colbuilder/core/utils/crosslinks.py b/src/colbuilder/core/utils/crosslinks.py index f37adf8..05850cb 100644 --- a/src/colbuilder/core/utils/crosslinks.py +++ b/src/colbuilder/core/utils/crosslinks.py @@ -229,9 +229,6 @@ async def optimize(self, input_pdb: Path, output_pdb: Path) -> Tuple[float, Path SystemError: If Chimera process fails """ try: - print(f"optimize input path: {input_pdb}") - print(f"optimize output path: {output_pdb}") - crosslink_info = self._prepare_crosslink_info() max_total_distance = self._get_distance_threshold() LOG.debug(f"Maximum distance threshold: {max_total_distance} Å") @@ -253,15 +250,9 @@ async def optimize(self, input_pdb: Path, output_pdb: Path) -> Tuple[float, Path # Generate new copies based on the current best input generated_pdbs = await self._generate_copies(best_input) - print(f"optimize generated_pdbs:") - for path in generated_pdbs: - print(path) all_generated_pdbs.extend(generated_pdbs) - print(f"optimize all_generated_pdbs:") - for path in all_generated_pdbs: - print(path) if len(generated_pdbs) < 2: raise SequenceGenerationError( @@ -277,11 +268,6 @@ async def optimize(self, input_pdb: Path, output_pdb: Path) -> Tuple[float, Path iteration_pdbs.append(iteration_pdb) # Pass the current best distance to optimize_structure - print(f"\n optimize structure args:") - print(f"optimize initial_pdb: {best_input}") - print(f"optimize copy1_pdb: {Path(generated_pdbs[0]).resolve()}") - print(f"optimize copy2_pdb: {Path(generated_pdbs[1]).resolve()}") - print(f"optimize optimized_pdb: {iteration_pdb}\n") total_distance, tracker, _ = optimize_structure( initial_pdb=str(best_input), copy1_pdb=str(generated_pdbs[0]), @@ -350,13 +336,10 @@ async def optimize(self, input_pdb: Path, output_pdb: Path) -> Tuple[float, Path async def _generate_copies(self, input_pdb: Path) -> List[Path]: """Generate copies using Chimera.""" try: - print(f"_generate_copies input pdb: {input_pdb}") generate_copies_script = self.chimera_scripts_dir / "generate_copies.py" generated_pdbs_file = Path("generated_pdbs.txt") - print(f"_generate_copies generated_pdbs_file {generated_pdbs_file}") - env = os.environ.copy() env["INPUT_PDB"] = str(input_pdb)